← All tools

Tables

User-defined record types with typed fields, for the things that are genuinely rows rather than prose.

6Tools
25Parameters
2026-09-16Generated

muninn_table_define

Writes 3 parameters

Declare a table (a kind of thing you want to track — Staff, Sources, Clients) and the fields its records share. Re-calling with the same slug UPDATES the definition: fields you pass replace the current set, so send the whole list, not a delta. Field `key` is permanent and is what record values are stored under; `label` is what a human sees and can be renamed freely. Mark a field private:true to keep it out of the grid, out of csv/xlsx export, and out of any team-shared view — private values never leave the encrypted record body. Field types: text, textarea, number, date, select, multi-select, checkbox, nested-table. Use `textarea` for anything that runs to more than a line — notes, a description, an address, a bio: it stores exactly like `text` and tells the app to give it a multi-line box instead of a single-line input.

ParameterTypeRequiredDescription
tableSlug string Required Stable identifier, e.g. 'bui-staff'. Permanent — this is how records are filed.
title string Required Human-readable name, e.g. 'Staff'. Renameable.
fields object[] Required The full field list, in display order. Replaces any existing definition.

muninn_table_list

Read only 0 parameters

List every table you have declared, with its fields and how many records each holds. Counts are top-level records only — entries in a nested table are not counted as records of the parent table. Use this before adding a record, to check the table exists and to see what fields it expects.

muninn_table_record_add

Writes 6 parameters

Add a record to a table. `values` is keyed by field key (see muninn_table_list). Pass parentRecordId to file this as an entry in the nested table under an existing record — that is how a running log lives under a standing profile. Nesting is capped at one level: a record may hold a nested table, a nested record may not. Returns {recordId} — the record's memory id, which muninn_memory_get and muninn_memory_update accept.

ParameterTypeRequiredDescription
tableSlug string Required Which table to file this record into. Must already be declared.
values object Required Field values keyed by field key, e.g. {"role":"Engineer","status":"active"}. Unknown keys are rejected.
parentRecordId string — Memory id of the parent record. Set this to add an entry to that record's nested table (a log entry under a profile).
tags string[] default [] Optional tags. Filing into a table is NOT a tag — it is structural — so no table tag is added for you.
project string — Project slug to scope this record.
occurredAt string — ISO 8601 datetime of when this actually happened, if not now. Useful for backfilling log entries.

muninn_table_records_export

Read only 5 parameters

Export a table's records - the other half of muninn_table_records_import, and what makes verifying one possible without resolving every record by hand. Returns recordId as the first column, then the table's fields in their declared order, so an export diffs directly against the file it came from. PRIVATE fields are excluded by default and are NEVER included in csv at all, whatever includePrivate says. Reading bodies costs one subrequest each, so pass limit/offset on a large table; the response says whether more remain.

ParameterTypeRequiredDescription
tableSlug string Required Which table to export.
format stringjson · csv default "json" json returns rows as objects; csv quotes every field, which is what multi-line and Thai bodies need.
includePrivate boolean default false Include fields marked private:true. Ignored for csv, which never carries private values.
limit integer default 50 How many records to read in this call.
offset integer default 0 Where to resume from. Use the nextOffset the previous call returned.

muninn_table_records_import

Writes 8 parameters

Import MANY records into one table in a single call. dryRun is TRUE BY DEFAULT - the first call validates and reports what would be written, and nothing is saved until you call again with dryRun:false. Validates the whole batch before writing anything and returns every error at once with its record index, so a bad cell costs one round trip, not one per record. Nothing is coerced: a checkbox field wants true/false, not the string TRUE. Pass upsertKey (field keys forming a natural key) with onConflict:update to make re-running the same import idempotent instead of duplicating everything. Writes are BUDGETED per call - the response carries remaining and nextIndex, and you re-send the tail from there.

ParameterTypeRequiredDescription
tableSlug string Required Which table to import into. Must already be declared with muninn_table_define.
records object[] Required The records to import, in order. Their INDEX in this array is what error messages and the per-record result refer to.
project string — Project slug applied to every record that does not set its own.
tags string[] default [] Tags merged into every record's own tags.
dryRun boolean default true TRUE BY DEFAULT. Validate and report without writing. Pass false to commit.
upsertKey string[] — Field keys forming a natural key, e.g. [source_file, worksheet]. Requires reading existing records, so it is refused on tables larger than 300 rows.
onConflict stringskip · update · error default "error" What to do when upsertKey matches an existing record. Only meaningful with upsertKey.
maxWrites integer — How many records to commit in THIS call. Defaults to 6, which is what a free-plan subrequest budget allows. Raise it on a paid plan.

muninn_table_records_list

Read only 3 parameters

List the records in a table, in order. Pass parentRecordId instead to list the nested table under one record (its log). By default returns ids and positions only — cheap, no record bodies read. Pass resolve:true to also return each record's field values; private fields are excluded from resolved values.

ParameterTypeRequiredDescription
tableSlug string — List the top-level records of this table.
parentRecordId string — List the nested table under this record instead. Takes precedence over tableSlug.
resolve boolean default false true = also read each record body and return its field values (private fields excluded).

← Back to all 74 tools

START FREE

Every tables tool on this page is callable the moment a model is connected, on an account that costs nothing.

150 items free — memories, skills, bundles, tasks, table rows and artifacts all count. No card, and free does not expire. Paid lifts the limit.