Skip to main content
Glama

Server Details

The memory that doesn't belong to the model. One memory store that carries long, cumulative work across chats and AI tools: Claude, ChatGPT and any MCP client that signs in with OAuth. It holds tagged memories, ordered folders for books and projects, artifacts, tables, tasks, photos and reusable skills, and finds them by meaning or by tag. Your AI reads it and writes to it. Muninn never rewrites it behind you. Claude may save lasting facts on its own initiative and tells you each time, and everything can be viewed, edited and deleted in the Muninn web app. Memories are encrypted at rest under a key for each account. Free for up to 150 items. Paid is $8 a month and adds unlimited items, team sharing and a copy in your own Google Drive.

Ownership verified
Status
Healthy
Uptime
98.9% over 16 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A3.9/5.0

Scored across 91 tools

Disambiguation4/5

With 91 tools, each tool has a distinct domain and action, and descriptions clearly differentiate most purposes. Some overlap exists among memory retrieval tools (list, search, query, tag variants) and text-editing tools (append, anchor_replace, update), but boundaries are documented. Minor confusion is possible between artifact/memory and task/memory CRUD, though the set is mostly distinct.

Naming Consistency5/5

All tools use a consistent muninn_ prefix and snake_case with a domain_action structure (memory_add, table_publish, team_create). Rare variations like app_link and session_boot are still readable and predictable. Naming is highly consistent throughout.

Tool Count1/5

91 tools far exceeds the well-scoped 3-15 range and the heavy 16-25 band, making it an extreme surface for an agent to navigate reliably. Although the platform is broad, many tools could be consolidated or parameterized. This count is a severe mismatch for practical tool selection.

Completeness4/5

The surface covers CRUD and lifecycle operations for memories, artifacts, bundles, tables, tasks, teams, skills, pictures, and mirrors, plus settings, stats, onboarding, and help. Minor gaps exist (e.g., no mirror disconnect, no explicit table record update/delete, no team rename), but documented workarounds exist. Overall coverage is very strong.

Available Tools

91 tools
muninn_artifact_addAInspect

Store a text-based artifact you generated — markdown, plain text, csv, json, code, a mermaid diagram, svg, or an HTML page — so it outlives this session and can be retrieved by any model or from the web app. Use this for OUTPUT you produced (a document, a table, a diagram, a page), not for notes or facts about the user; those are muninn_memory_add. The source is stored in full, never a link. Artifacts are deliberately excluded from semantic search, so give a clear title and tags — that is how they are found again. Returns {success, memoryId, format, url, length, connect}. For html/svg: runs in a sandboxed iframe on a separate origin. LINKS: write a plain absolute — a Muninn page opens in the same tab, anything else in a new tab; no target attribute needed. READING ANOTHER ARTIFACT: fetch its absolute /raw url. READING AN OUTSIDE API: the sandbox blocks fetch() to any non-Muninn host unless the artifact declares it in connect (bare hostnames, e.g. ["api.open-meteo.com"]) — readers are shown the list, and the host must answer Access-Control-Allow-Origin: *. Full rules: muninn_help, section "Authoring artifacts". TO EDIT ONE LATER there is no muninn_artifact_update — an artifact's artifactId IS its memoryId, so redraft it with muninn_memory_update (whole body), muninn_memory_anchor_replace (one span) or muninn_memory_append. Editing replaces in place, and a published artifact's public link refreshes automatically. The supported formats and the mime value for each are listed in the mime parameter below and in muninn_help. HANDLES: an account can hold several handles (e.g. a personal one and a company one), each a separate public address; an artifact lives under exactly one, and its named page only ever answers there. Pass handle only when the user says which one; omit it and the artifact goes under their default (oldest) handle. Move it later with muninn_artifact_move.

NameRequiredDescriptionDefault
mimeNoThe artifact's media type, from the closed list. Sets the file extension on download and nothing else — a mermaid source is text/vnd.mermaid so it exports as .mmd, not .txt. Defaults to text/html.
tagsNoTags, same as muninn_memory_add. The main way an artifact is found later.
titleNoDisplay name for the artifact, e.g. 'BUI org chart'. Strongly recommended: artifacts are not semantically searchable, so the title carries the findability.
formatYesWhat kind of source this is — selects the renderer. md, txt, csv, json, code, mermaid, svg, or html.
handleNoWhich of the user's handles this artifact lives under, e.g. 'chai' — only if the user named one. Must be a handle this account holds; any other is refused and nothing is saved. Omit for the default (oldest) handle. Does NOT publish anything.
sourceYesThe artifact's full source text, stored verbatim.
connectNohtml/svg only: outside hosts this artifact fetches data from at runtime, as bare lowercase hostnames — ["api.open-meteo.com"]. No scheme, path, port, wildcard or IP; at most 8; Muninn's own hosts are already reachable and are refused here. Declare exactly what the source calls: the sandbox blocks fetch() to any host not listed, and every page that shows the artifact names this list to the reader. Not needed for <script src>, images, fonts or styles from a CDN. Change it later with muninn_artifact_connect.
projectNoProject slug to scope this artifact. Omit for user-global.
sourceModelNoWhich model produced this, for provenance, e.g. 'claude-opus-5'.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only state readOnly=false, destructive=false, non-idempotent, openWorld=false; the description adds a great deal beyond that: source stored in full never a link, artifacts deliberately excluded from semantic search, the return shape {success, memoryId, format, url, length, connect}, sandboxed iframe on a separate origin, the connect/CORS gating rule for fetch(), and that editing replaces in place with the public link refreshing automatically.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the sibling contrast, and the sectioned structure (LINKS / READING / EDITING / HANDLES) makes it scannable. It is long, however, and partially duplicates schema content — the mime enumeration and connect constraints are restated from parameter descriptions — which costs a point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter write tool with no output schema, the description covers the return shape, the edit lifecycle, handle scoping, sandbox/link behavior, and routes to muninn_help for full rules. Nothing an agent needs in order to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema descriptions are already detailed, so the baseline is 3; the description nonetheless adds the rationale that makes parameter choices meaningful ('artifacts are deliberately excluded from semantic search, so give a clear title and tags — that is how they are found again') and explains the default-handle behavior in prose. It does not re-list per-parameter syntax beyond the closed format set, which is already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Store a text-based artifact you generated') and enumerates concrete artifact types (markdown, csv, json, mermaid, svg, html). It explicitly draws the boundary against the nearest sibling: 'not for notes or facts about the user; those are muninn_memory_add.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('OUTPUT you produced'), explicit when-not ('not for notes or facts about the user'), and names alternatives for both the wrong case (muninn_memory_add) and the deferred case (muninn_memory_update / muninn_memory_anchor_replace / muninn_memory_append since there is no update tool). Handle selection is also conditioned: 'Pass handle only when the user says which one.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_artifact_connectA
DestructiveIdempotent
Inspect

Declare, change or clear the outside hosts an html/svg artifact may fetch data from at runtime — use when a dashboard or chart reads an external API (weather, prices, a public dataset), when the user says let it load live data from X, or when muninn_artifact_add warned that the source fetches a host connect does not declare. The sandbox blocks fetch() and WebSocket to any host not on this list; Muninn's own hosts are always reachable and are refused here. Bare lowercase hostnames only (api.open-meteo.com), no scheme, path, port, wildcard or IP, at most 8. ⚠️ Every page that shows the artifact names this list to the reader, so declare exactly what the source calls and nothing more. The host must answer Access-Control-Allow-Origin: * (the frame's origin is null and can carry no credential) — if it does not, or needs a key, mirror the data into a Muninn json/csv artifact and fetch its /raw instead; never put a key in artifact source, every reader can read it at /raw. Replaces the whole list; pass [] or null to clear it. A published artifact's public copy is updated in the same call. Not needed for , images, fonts or styles from a CDN. Returns {success, artifactId, connect}.

NameRequiredDescriptionDefault
connectYesThe complete new list of bare hostnames, e.g. ["api.open-meteo.com", "api.coingecko.com"]. Replaces the current list. [] or null clears it, returning the artifact to Muninn-only fetches.
artifactIdYesThe artifact's memory ID (full UUID or a unique prefix).

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (destructiveHint=true, idempotentHint=true, openWorldHint=true), and the description adds substantial context beyond them: the sandbox blocks fetch()/WebSocket for undeclared hosts, Muninn's own hosts are refused here, the whole list is replaced, and a published artifact's public copy updates in the same call. It also surfaces two non-obvious consequences an agent could not infer — the list is shown to every reader of the page, and the host must answer Access-Control-Allow-Origin: * because the frame origin is null.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the verb+resource and the primary use case, then layers constraints and warnings in descending priority. It is a single dense paragraph running long, and the CORS/key-mirror digression could be split or trimmed, but nearly every clause carries actionable information and nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even with no output schema, the description names the return shape ({success, artifactId, connect}) and covers hostname format, count limit, clearing behavior, public-copy propagation, and failure fallbacks. An agent has everything needed to call this correctly on the first attempt without discovering the sandbox rules by error.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description contributes real constraints the schema does not encode: bare lowercase hostnames only, no scheme, path, port, wildcard or IP, and a security rationale for declaring 'exactly what the source calls and nothing more.' It also restates the [] / null clearing semantics with the consequence ('returning the artifact to Muninn-only fetches').

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a precise verb triple and resource: 'Declare, change or clear the outside hosts an html/svg artifact may fetch data from at runtime.' This is unmistakably distinct from siblings like muninn_artifact_add, muninn_artifact_publish, or muninn_mirror_connect, and names its own scope (runtime fetch allowlist) rather than a generic artifact edit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives three concrete triggers (a dashboard/chart reading an external API, the user saying 'let it load live data from X', or muninn_artifact_add warning that a host is undeclared) and an explicit exclusion ('Not needed for <script src>, images, fonts or styles from a CDN'). It also routes to an alternative (mirror the data into a Muninn json/csv artifact and fetch /raw) when CORS or a key blocks direct fetching.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_artifact_getA
Read-onlyIdempotent
Inspect

Retrieve a stored artifact by ID — returns its full source plus format, title, provenance, and whether it is currently shared publicly (published + publicUrl, plus expiresAt/expired when the link has an expiry), so you can continue working on something a previous session (or a different model) produced. To WRITE your edit back, pass this artifactId as memoryId to muninn_memory_update, muninn_memory_anchor_replace or muninn_memory_append — there is no muninn_artifact_update, because an artifact's artifactId IS its memoryId. If it is published, the public link refreshes automatically. The returned rev is the body's revision number (null if never indexed): hand it back as expectedRev on that write and it FAILS rather than clobbering an edit made in between — worth carrying when you fetch now and write later, unnecessary when you write straight away.

NameRequiredDescriptionDefault
artifactIdYesThe artifact's memory ID (full UUID or a unique prefix).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/non-destructive, and the description goes well beyond them: it discloses the returned payload (source, format, title, provenance, published/publicUrl, expiresAt/expired), that a published link auto-refreshes, and that `rev` must be returned as `expectedRev` on later writes or the write FAILS rather than clobbering a concurrent edit. The conflict-detection semantics are the kind of trait annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and return contents, then the write-back routing, then the rev/expectedRev caveat. The final sentence is long and dense, and a few clauses (e.g. the parenthetical field list) border on enumeration for its own sake, but every sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must carry return-value disclosure, and it does, enumerating the fields returned and the conditional publish/expiry fields. Combined with the write-path and revision guidance, nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds cross-tool meaning the schema cannot: the artifactId IS the memoryId, so the same value is what you pass to the memory write tools. That reframes the single parameter usefully, exceeding the schema's 'full UUID or unique prefix' note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Retrieve a stored artifact by ID') and immediately distinguishes itself from siblings like muninn_artifact_list by scoping to a single artifact, and clarifies the artifactId/memoryId identity that separates it from muninn_memory_get. An agent can route correctly without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit context ('continue working on something a previous session... produced') and, more valuably, routes writes to muninn_memory_update / muninn_memory_anchor_replace / muninn_memory_append while stating there is no muninn_artifact_update. It stops short of saying when to prefer this over muninn_memory_get, which retrieves by the same identifier.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_artifact_listA
Read-onlyIdempotent
Inspect

List stored artifacts, newest first, optionally narrowed to one format or one handle. Returns slim rows {artifactId, format, title, handle, createdAt, url, published, publicUrl, expiresAt?} — no source bodies, so it is cheap to call before deciding what to fetch. Backed by a D1 index, never a KV scan. Use this to see what you have already made for this user, or to answer 'what have I shared publicly' — every published artifact carries its live public link, and its expiresAt when it has one. A link past its expiry is reported as published: false, expired: true. To edit any row, pass its artifactId as memoryId to muninn_memory_update — there is no muninn_artifact_update. Also returns handles, every handle the account can use, so you know the valid values for handle on muninn_artifact_add and muninn_artifact_move.

NameRequiredDescriptionDefault
limitNoMaximum rows to return.
formatNoRestrict to one format, e.g. 'mermaid'.
handleNoRestrict to artifacts under one of the user's handles, e.g. 'chai'. Must be a handle this account holds.
publishedOnlyNoReturn only artifacts that are currently shared publicly. Use this to answer 'what of mine is publicly reachable'.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/destructive/idempotent, but the description adds substantial behavior beyond them: backed by a D1 index rather than a KV scan, returns slim rows without source bodies, and reports expired links as published:false, expired:true. It also discloses that it returns a `handles` list, which is non-obvious side output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loads the core capability, then layers return shape, performance rationale, use cases, and cross-tool routing with no filler. Every sentence carries distinct information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully specifies the returned row fields, the optional expiresAt, the derived expired state, and the extra `handles` collection. Nothing an agent needs to call or interpret this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by explaining that the returned `handles` array supplies the valid values for the `handle` parameter and that a link past expiry surfaces as published:false/expired:true. This goes past restating schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (stored artifacts) with ordering (newest first) and scope (optionally one format or one handle). It also implicitly distinguishes itself from muninn_artifact_get by noting it is 'cheap to call before deciding what to fetch' since it returns no source bodies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use cases are given: 'see what you have already made for this user' and 'answer what have I shared publicly.' It also routes editing away from a non-existent sibling by stating 'To edit any row, pass its artifactId as memoryId to muninn_memory_update — there is no muninn_artifact_update.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_artifact_moveA
DestructiveIdempotent
Inspect

Move an artifact to another of the user's handles — use when the user says move this to my company handle, put that under chai, this belongs on the other address, or file it under a different handle. An account can hold several handles, each a separate public address, and an artifact lives under exactly one. The target must be a handle this account holds; any other is refused and nothing changes. ⚠️ If the artifact has a named page, its OLD named address (old-handle.munn.is/name) stops working immediately and does NOT redirect; the page answers at the new handle instead. Tell the user, since links they shared on the old address will break. The munn.is/a/ link is unaffected. If the target handle already has a page with that name the move is refused; pass name to move it under a different name (a new name needs the Paid plan). An artifact under a suspended handle cannot be moved. Does not publish or unpublish anything. Returns {success, artifactId, handle, moved, slug, namedUrl, durableUrl, previousNamedUrl}.

NameRequiredDescriptionDefault
nameNoOnly for a named page: the name to use under the new handle, when its current name is already taken there or the user wants a different one. Omit to keep the current name.
handleYesThe handle to move it under, e.g. 'chai'. Must be one this account holds — muninn_artifact_list returns the list.
artifactIdYesThe artifact's memory ID (full UUID or a unique prefix).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructive/idempotent annotations by naming exactly what breaks: the old named address stops working immediately with no redirect, shared links break, while the token link is unaffected. It also discloses refusal semantics (target name collision, non-owned handle = nothing changes) and the full return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and trigger phrases, then the critical breaking-change warning is visually flagged so it is not lost. The opening sentence's four paraphrased user quotes are slightly redundant, but the overall length is earned by the number of refusal and side-effect rules.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world mutation with no output schema, the description covers prerequisites (owned handle, not suspended), failure modes, irreversible side effects, and even enumerates the returned fields — nothing an agent needs to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: a new `name` requires the Paid plan, and an omitted `name` silently keeps the current name while a collision causes refusal. The `handle` constraint (must be owned, list via muninn_artifact_list) is largely mirrored from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Move an artifact to another of the user's handles') and pins the domain model ('an artifact lives under exactly one handle'), which cleanly separates it from siblings like muninn_artifact_name, muninn_artifact_publish, or muninn_bundle_edge_move.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete user phrasings that should trigger it ('move this to my company handle', 'file it under a different handle') and explicit when-not conditions: the target must be a held handle, suspended-handle artifacts cannot move, and it 'Does not publish or unpublish anything' — routing the agent away from publish/unpublish siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_artifact_nameA
DestructiveIdempotent
Inspect

Give a published artifact a readable address under the handle it lives in, rename it, or remove the name — use when the user says name this page, give it a nicer url, rename that link, change the address, or make the link readable. Turns a long token url into something like chai.munn.is/my-notes, plus a durable twin on muninn.bizat.co that keeps working if the short domain ever changes. The artifact must already be published (muninn_artifact_publish); naming does not publish anything and does not change who can read it. Pass name: null to remove the name — that address stops working immediately, while the token link keeps working. Names are unique per handle, so the same name can exist under two of the user's handles. To change WHICH handle the page is under, use muninn_artifact_move. Plan: giving a page a new or changed name is Paid; removing a name, re-applying the same name, and already-named pages continuing to serve work on every plan, as does the munn.is/a/ link. Returns {success, artifactId, handle, slug, namedUrl, durableUrl}.

NameRequiredDescriptionDefault
nameYesThe name, e.g. 'my-notes' — letters, numbers and hyphens, no dots or slashes, unique among the named pages under this artifact's handle. A new or changed name needs the Paid plan. Pass null to remove the current name (free).
artifactIdYesThe artifact's memory ID (full UUID or a unique prefix).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes well beyond them: naming does not publish and does not change read access, name:null makes the address stop working immediately while the token link survives, names are unique per handle, and a durable twin on muninn.bizat.co is created. Plan behavior (Paid for new/changed names, free for removal/re-apply) is also disclosed. This is exactly the additional context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger phrases and the core operation, then layers on constraints, the Plan section, and the return shape. Efficient for its density, though there is minor redundancy between the 'durable twin' sentence and the returned durableUrl field.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description enumerates the return shape ({success, artifactId, handle, slug, namedUrl, durableUrl}) and covers preconditions, plan constraints, removal behavior, and the sibling tool for handle changes. An agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented, including the null-removal semantics and plan requirement. The description's extra notes (null stops the address immediately, uniqueness is per-handle, the returned slug/namedUrl) add some value but largely restate or extend the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: give a published artifact a readable address under its handle, rename it, or remove the name. It explicitly distinguishes itself from muninn_artifact_move ('To change WHICH handle the page is under, use muninn_artifact_move') and muninn_artifact_publish ('The artifact must already be published'), so an agent can route correctly without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete trigger phrases ('name this page', 'give it a nicer url', 'rename that link'), names the alternative tool for the adjacent operation, and states the precondition (must already be published) plus the plan gating for each operation. When-to-use and when-not-to-use are both covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_artifact_passwordA
DestructiveIdempotent
Inspect

Set, change or remove the password a reader must type to open a published artifact — use when the user says password protect this, put a password on that link, lock this page, change the password, or remove the password. The artifact must already be published (muninn_artifact_publish); the link itself does not change, so anything already shared keeps working and now asks for the password. ⚠️ The password is stored one-way and can NEVER be read back — not by the user, not by support, not by this tool. Say the exact password back to the user when you set it, because this is the only time it is visible; a forgotten one is replaced, not recovered. Pass password: null to remove it and make the link open freely again. Giving two artifacts the SAME password puts them behind one lock, so unlocking either opens both — that is how a locked page can embed another locked page. A different password keeps them separate. This is a gate on the page, not encryption of the artifact. ⚠️ If one artifact fetches another as data, give BOTH the same password (one lock) or leave the data one open — two different passwords means the fetch gets 401. Returns {success, artifactId, hasPassword}.

NameRequiredDescriptionDefault
passwordYesThe password readers must type, 4-128 characters. Use exactly what the user asked for — never invent one, and never change one without being asked. Pass null to remove the password entirely.
artifactIdYesThe artifact's memory ID (full UUID or a unique prefix).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, it discloses critical behavior: the password is stored one-way and can never be read back, the exact password must be said back to the user because it is only visible once, and forgotten passwords are replaced rather than recovered. It also explains cross-artifact password sharing, the 401 failure mode for data fetches, and clarifies the password is a page gate rather than artifact encryption.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and trigger phrases, and every major warning is relevant. It is somewhat long and repeats the critical 'cannot read back / say it back' point, but the repetition is purposeful for a destructive, irreversible password operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description supplies the return shape {success, artifactId, hasPassword}. It also covers prerequisites, destructive reversibility constraints, password sharing interactions, and fetch failure behavior, which is complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents password length, null semantics, and artifactId. The description adds operational meaning beyond the schema by explaining that null removes the password, that identical passwords across artifacts create one shared lock, and that different passwords can cause 401 on cross-artifact data fetches.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: set/change/remove the password a reader must type to open a published artifact. It distinguishes this from publish behavior by noting the artifact must already be published and by explicitly naming muninn_artifact_publish as the prerequisite.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit user phrases that should trigger the tool (password protect this, put a password on that link, lock this page, change/remove password) and states the prerequisite that the artifact must already be published. It also explicitly says to pass password: null to remove the password and make the link open freely again.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_artifact_publishA
DestructiveIdempotent
Inspect

Share a stored artifact publicly and get back a link anyone can open — use when the user says publish this, share this, make this public, give me a link to send someone, put this on the web, or asks for a URL they can paste into a chat or an email. Returns a short unguessable munn.is link that renders the artifact for anyone holding it: no login, no account, not indexed by search engines. The published copy stays LIVE — later edits to the artifact update what the link serves. Optionally pass name to give the page a readable address under the handle the artifact lives in, e.g. chai.munn.is/my-notes (a new or changed name needs the Paid plan; the munn.is/a/ link is free on every plan). To put it under a different handle, muninn_artifact_move first. Publishing is only ever this tool: never assume an artifact is public, and never publish as part of saving or editing something. Optionally pass expiresAt (ISO 8601 date or datetime) when the user wants the link to stop working after a date — e.g. share this until Friday, expire the link next week, only valid for 7 days. After that moment the link opens for nobody and the publish is removed the first time someone tries it; the artifact itself is kept. Calling publish again on a published artifact keeps its link and lets you change the expiry (pass null to remove it); publishing an expired one mints a new link. muninn_artifact_unpublish revokes the link. Returns {success, artifactId, publicUrl, namedUrl, durableUrl, live, expiresAt}.

NameRequiredDescriptionDefault
nameNoOptional readable name for the page, e.g. 'my-notes' — becomes <handle>.munn.is/my-notes, under the handle the artifact lives in. Letters, numbers and hyphens only; no dots or slashes. Unique per handle, not per account. Only gets an address if the artifact is under an active handle. A new or changed name needs the Paid plan; re-applying the page's current name does not. Publishing still succeeds if the name is rejected (taken, invalid, or not on the Paid plan).
passwordNoOptional password a reader must type before the page opens. Only pass a password the user actually stated — never invent one, and never set one they did not ask for. It cannot be read back afterwards by anyone, including the user: it can only be replaced or removed with muninn_artifact_password. Tell the user the exact password you set, since this is the only moment it is visible.
expiresAtNoOptional moment the public link stops opening, ISO 8601: a datetime with offset such as '2026-10-01T17:00:00+07:00', or a bare date '2026-10-01' (read as 00:00 UTC, so the link is already closed on that date). Must be in the future. Only set one the user asked for, and resolve relative phrases ('for a week') against today's date. Omit to keep the current expiry on an already-published artifact; pass null to remove it. The link is refused after this moment and removed from the published list when someone next opens it.
artifactIdYesThe artifact's memory ID (full UUID or a unique prefix).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive/openWorld/idempotent, but the description adds much more: the link stays LIVE and reflects later edits, is unguessable, requires no login, is not search-indexed, and reveals plan gating for named URLs. It also documents re-publish semantics (keeps link, can change expiry, expired publish mints a new link).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and trigger phrases, and every clause carries information. The trigger enumeration and the expiry/idempotency explanation are somewhat verbose, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description enumerates the return shape ({success, artifactId, publicUrl, namedUrl, durableUrl, live, expiresAt}) and covers plan limits, expiry, revocation, and idempotency. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description reinforces `name` with a concrete example (chai.munn.is/my-notes), states the Paid-plan condition, and clarifies re-publish/expiry behavior, adding routing context (move first for a different handle). It does not surface the `password` parameter at all, so it is not fully additive over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Share a stored artifact publicly and get back a link anyone can open'), plus the concrete outcome (an unguessable munn.is link). It clearly distinguishes itself from muninn_artifact_unpublish and muninn_artifact_move, which it names directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit trigger phrases ('publish this, share this, make this public'), explicit exclusions ('never assume an artifact is public, and never publish as part of saving or editing'), and routes to the correct siblings: muninn_artifact_move to change handle, muninn_artifact_unpublish to revoke.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_artifact_unpublishA
DestructiveIdempotent
Inspect

Revoke an artifact's public link — use when the user says unpublish, unshare, make this private again, take it down, or stop sharing that link. Deletes the public copy outright, so the URL stops working immediately for everyone who has it; the artifact itself is untouched and stays in Muninn. Any readable name it had goes with it, so the named address stops resolving too. ⚠️ Irreversible for that URL: publishing again mints a NEW link, and every copy of the old one is dead. Safe to call on an artifact that was never published. Returns {success, artifactId, wasPublished}.

NameRequiredDescriptionDefault
artifactIdYesThe artifact's memory ID (full UUID or a unique prefix).

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes well beyond them: it explains that only the public copy is deleted while the artifact stays in Muninn, that the URL dies immediately for everyone, that any named address also stops resolving, and that republishing mints a NEW link so the old one is permanently dead. That is exactly the extra context needed before an irreversible action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action and the intent triggers before the consequences, then closes with the return shape. Six short sentences, each carrying distinct information — scope of deletion, side effect on named addresses, irreversibility, safety on the no-op case, response fields — with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description supplies the return shape ({success, artifactId, wasPublished}), and the annotations cover the safety profile. Between them, an agent has everything needed to decide whether to call this and what it will get back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single artifactId parameter, which already documents that a full UUID or unique prefix is accepted. The description adds no syntax, format, or naming detail beyond the schema, so the baseline of 3 for fully-covered schemas applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (revoke/unpublish) on a specific resource (an artifact's public link) and immediately distinguishes it from its sibling muninn_artifact_publish by describing the opposite direction of the operation. An agent can identify the tool from the name plus the first clause alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger list ('unpublish, unshare, make this private again, take it down, stop sharing that link') that maps user phrasing to the tool, and explicitly resolves an edge case — 'Safe to call on an artifact that was never published' — so the agent knows the no-op case is acceptable rather than an error.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_closureA
Read-onlyIdempotent
Inspect

List everything beneath one item in a bundle (an ordered outline of memories for a book or project): every (ancestor, descendant, depth) pair, including each item paired with itself at depth 0. Useful for checking what a section contains.

NameRequiredDescriptionDefault
rootKeyYesThe node_key of the bundle root

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds genuine behavioral value by specifying the exact return shape (every ancestor/descendant/depth pair, including self-pairs at depth 0), which is not in any structured field since no output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and kept to two sentences. The parenthetical definition of a bundle is helpful context; the trailing 'Useful for...' sentence is slightly weaker but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully explains the closure return format, which is what an agent most needs here. For a single-parameter read tool whose annotations already cover the safety profile, this is nearly complete, minor gap being no explicit sibling routing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter rootKey is fully documented as 'the node_key of the bundle root'. The description adds no parameter-level detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('everything beneath one item in a bundle') and clarifies the bundle concept as an ordered outline of memories. It defines the return semantics (ancestor/descendant/depth pairs) precisely, though it doesn't explicitly name a sibling to differentiate from, e.g., muninn_bundle_get or muninn_bundle_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for checking what a section contains' gives an implied use case, but there is no explicit when-to-use guidance and no contrast with alternatives like muninn_bundle_get. The condition selecting this over other bundle reads is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_createA
Idempotent
Inspect

A bundle is an ordered outline of the user's memories for a book or project: sections and items, each item pointing at a memory. This creates a new, empty bundle with a title and description, and returns its rootKey (the key every other bundle tool takes) and the id of the memory holding its title and description. Fails if the slug is already used by one of the user's bundles.

NameRequiredDescriptionDefault
slugYesUnique slug for this bundle root (e.g. 'my-book'). Lowercase letters, digits and hyphens only, max 64. Frozen at creation.
titleYesHuman-readable bundle title
projectNoProject slug to scope the backing metadata memory. Omit for global.
okf_typeNoType of the root (default 'bundle')bundle
descriptionNoHigh-level description or thesis

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true), the description discloses two valuable behaviors: it returns the rootKey and the id of the memory holding title/description, and it fails if the slug is already in use. There is a mild tension between idempotentHint=true and the stated failure-on-duplicate behavior, but this is not a direct contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the concept definition before the action and return values. Every sentence carries information, though the opening conceptual framing is slightly longer than strictly needed for a caller already familiar with bundles.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully explains the return values (rootKey and title/description memory id) and the duplicate-slug failure mode, which is what an agent needs to chain calls correctly. Minor gap: the project and okf_type parameters are not touched on, though the schema covers them fully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already documented, setting the baseline at 3. The description reinforces that title and description are stored in a backing memory and that slug uniqueness matters, but adds little syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description defines what a bundle is (ordered outline of memories: sections and items) and states the specific action: creating a new, empty bundle. It clearly separates this from node-level sibling tools like muninn_bundle_node_create by specifying the bundle is created 'empty' at this stage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It establishes the creation context and implicitly positions this as a prerequisite by noting the returned rootKey is 'the key every other bundle tool takes.' However, it does not explicitly name alternatives or state when not to create a bundle, so guidance stops short of the top tier.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_decision_addAInspect

Record a decision about a bundle (an ordered outline of memories for a book or project) and attach it to the item or section it governs, so the reason for a title, a placement or an order shows up wherever that item renders. Saves a memory tagged 'decision' with {question, chosen, rejected[], reason, decided_by, date} and links it to the item. Use it for structural choices made in conversation that would otherwise be forgotten and argued again.

NameRequiredDescriptionDefault
dateNoISO date the decision was made. Defaults to now.
slugNoSlug for the decision leaf among the node's references. Default 'decision'.decision
chosenYesWhat was decided, e.g. 'At the back, after the last chapter'
reasonYesWhy this was chosen
nodeKeyYesnode_key of the node this decision governs (the chapter/section/leaf it explains)
projectNoProject slug to scope the decision memory. Omit for global.
questionYesThe decision being recorded, e.g. 'Should the glossary go at the front or the back?'
rejectedNoAlternatives considered and rejected
decided_byNoWho decided (e.g. 'the user', or a person's name). Omit if not attributed.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (not read-only, not idempotent, not destructive). The description adds real behavioral context beyond that: it discloses the persisted shape ({question, chosen, rejected[], reason, decided_by, date}), the 'decision' tag, and the link/rendering behavior. It does not warn that repeated calls are non-idempotent (duplicate decisions), which would have earned a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, purpose front-loaded, no filler. The second sentence carries dense but useful information (storage shape, linking, use case). Marginally long, but every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description states what gets persisted and linked, which is sufficient to call it correctly. For a non-idempotent mutation it could note that each call creates a new stored decision, but overall it is complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaning by grouping the parameters into a coherent decision record ({question, chosen, rejected[], reason, decided_by, date}), letting an agent see how the fields relate rather than viewing nine isolated params.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Record a decision about a bundle' and it immediately defines the domain concept ('an ordered outline of memories') and the effect (attaches the reason to the governed item so it renders wherever that item does). An agent can tell this apart from generic memory tools. It stops short of naming the closest sibling (muninn_memory_add) as the thing it is not, so it is not a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use it for structural choices made in conversation that would otherwise be forgotten and argued again' gives a clear, concrete trigger condition. There is no explicit when-not clause or named alternative, so it falls short of the 5 bar that names an alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_edge_addA
Idempotent
Inspect

Link two items in a bundle (an ordered outline of memories for a book or project), placing the child under the parent. relation='contains' (default) makes this the child's one home in the outline; an item can have only one, and a second is refused with a clear error. relation='reference' links it from an additional place without moving it.

NameRequiredDescriptionDefault
childKeyYesThe node_key of the child node
positionNoExplicit REAL position. If omitted, appended after existing siblings.
relationNo'contains' = canonical home (one per node). 'reference' = additional link with no path.contains
parentKeyYesThe node_key of the parent node

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes meaningfully beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false) by disclosing the one-home invariant, the refusal-with-error behavior on a second 'contains', and that 'reference' does not move the item. It stops short of describing return value or how position interacts with existing siblings.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action before the relation nuances. Dense but each sentence carries information; only the parenthetical definition of a bundle is arguably surplus.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with annotations and no output schema, the description covers the essential invariants and error behavior. Missing details are minor: return shape and how explicit positions order against existing siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all four parameters, including the same relation semantics and the position default. The description's relation explanation adds only marginal value beyond the schema, and position is not elaborated at all. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Link two items in a bundle') and clarifies the resulting structure ('placing the child under the parent'), even defining what a bundle is. It distinguishes the two relation modes clearly enough that an agent knows exactly what operation it is invoking.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit guidance on choosing between relation='contains' and relation='reference', including the consequence of each. It does not, however, say when to prefer this tool over siblings like muninn_bundle_edge_move or muninn_bundle_edge_remove, so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_edge_moveA
Idempotent
Inspect

Reorder an item among its siblings in a bundle (an ordered outline of memories for a book or project). Give beforeKey (the sibling that will come before it) and/or afterKey (the sibling that will come after it). null beforeKey moves it to the front; null afterKey moves it to the end; both null appends it at the end.

NameRequiredDescriptionDefault
afterKeyNoSibling node_key that will come AFTER the moved child, or null for 'move to end'
childKeyYesThe node_key of the child to reposition
beforeKeyNoSibling node_key that will come BEFORE the moved child, or null for 'move to front'
parentKeyYesThe node_key of the parent

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the mutation/safety profile is covered. The description adds the reordering effect and positional outcomes, but says nothing about permissions, what happens to existing edges, or error behavior for an invalid sibling key.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core operation before the parameter mechanics, and every sentence carries meaning. Slightly dense with repeated key terminology, but no wasted filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a focused, idempotent mutation with full schema coverage and an annotation-declared safety profile, the description supplies enough to invoke it correctly. Only edge cases (invalid sibling, cross-parent moves) remain unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters are already documented with the same before/after semantics. The description largely restates this and only adds the combined case ('both null appends at the end'), which is one genuine increment over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Reorder) and resource (an item among its siblings in a bundle) and disambiguates 'bundle' with a parenthetical definition. An agent can distinguish this from muninn_bundle_edge_add/remove and muninn_artifact_move without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the semantics of beforeKey/afterKey, which implies when to use the tool, but never explicitly contrasts it with sibling reorder/edge tools such as muninn_bundle_edge_add or muninn_artifact_move, nor does it state prerequisites or failure conditions. Usage is implied rather than guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_edge_removeA
DestructiveIdempotent
Inspect

Unlink an item from its parent in a bundle (an ordered outline of memories for a book or project). Neither item is deleted, only the link between them. An item left with no home becomes a top-level item of its own.

NameRequiredDescriptionDefault
childKeyYesThe node_key of the child to unlink
parentKeyYesThe node_key of the parent

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds genuinely useful blast-radius context beyond that: nothing is destroyed except the link, and an orphaned child is promoted to a top-level item — a non-obvious post-condition that prevents an agent from assuming data loss.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then the non-destructive guarantee, then the edge-case outcome. No filler and nothing redundant with the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description supplies the key return-relevant fact (child becomes top-level if left homeless), which is what an agent most needs. Missing only failure behavior for a non-existent edge, which is largely covered by the idempotentHint annotation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both node_key parameters, so the schema already carries the semantics and the baseline is 3. The description implies the parent/child link being removed but adds no format, nesting, or ordering details beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Unlink an item from its parent in a bundle' — and defines the bundle domain parenthetically as an ordered outline of memories. It also draws the boundary against the neighboring node-deletion tools by asserting 'Neither item is deleted, only the link between them', so an agent can tell it apart from muninn_bundle_node_delete and muninn_bundle_edge_add.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context of use is implied by 'unlink an item from its parent', and the clarification about non-deletion steers away from delete tools. However, there is no explicit when-to-use statement and no routing to alternatives such as muninn_bundle_edge_move (reparenting) or muninn_bundle_node_delete for actual removal of an item.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_export_okfA
Read-onlyIdempotent
Inspect

Export a bundle (an ordered outline of memories for a book or project) as an OKF v0.1 object, a portable JSON format: the memories in outline order plus a generated table of contents. For a readable document, use muninn_render_bundle.

NameRequiredDescriptionDefault
rootKeyYesThe node_key of the bundle root to export

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the shape and ordering of the payload (outline order + generated TOC) in a portable JSON format, which matters because there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the output format defined first and the disambiguation to the sibling placed at the end. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the necessary work of describing the returned object's contents and ordering. Minor gaps remain, such as whether the result is returned inline as JSON or as a downloadable artifact and any size constraints, but the essentials for correct invocation are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single rootKey parameter is already documented as 'the node_key of the bundle root to export.' The description adds no format or syntax detail for the parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Export), resource (a bundle), and the concrete output (an OKF v0.1 object, a portable JSON format containing memories in outline order plus a generated table of contents). It also names the sibling it is not (muninn_render_bundle), so an agent can separate it from the render path without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'For a readable document, use muninn_render_bundle,' which gives a clear alternative and the condition that selects it. It does not spell out exclusions or prerequisites (e.g., whether the bundle must exist or be non-empty), so it stops just short of the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_getA
Read-onlyIdempotent
Inspect

Look at one bundle (an ordered outline of memories for a book or project): returns its root and the items directly beneath it. Pass resolve:true to include each item's details and a preview of the memory it points at.

NameRequiredDescriptionDefault
resolveNoIf true, hydrate child node details (slug, type, and a preview of the memory each points at)
rootKeyYesThe node_key of the bundle root

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context the annotations do not: children are returned unresolved by default, and resolve:true triggers hydration plus memory previews, which implies extra cost/depth when enabled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the core behavior front-loaded and the optional flag described second. The parenthetical definition of a bundle is compact and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two params, full schema coverage, rich annotations and no output schema, the description needs to explain the return shape and the default-vs-resolved distinction, which it does. It stops short of describing ordering guarantees or how deep 'directly beneath' goes, a minor gap for an outline tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and rootKey is already documented as 'the node_key of the bundle root'; the description's resolve explanation largely restates the schema's own 'hydrate child node details (slug, type, and a preview...)' wording. Baseline 3 applies since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Look at one bundle') and goes further by defining what a bundle is ('an ordered outline of memories for a book or project') and what it returns (root plus items directly beneath). That 'directly beneath' phrasing implicitly separates it from muninn_bundle_closure, but no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'Look at one bundle' plus the resolve:true hint tells an agent how to inspect a single bundle's immediate children, but there is no explicit when-to-use/when-not guidance and no pointer to muninn_bundle_list or muninn_bundle_closure as alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_listA
Read-onlyIdempotent
Inspect

List the user's bundles (ordered outlines of memories for a book or project). Optionally filter to one project.

NameRequiredDescriptionDefault
projectNoFilter roots whose backing metadata memory is scoped to this project. Omit to list all roots.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered elsewhere. The description adds domain meaning for 'bundle' but says nothing about result ordering, pagination, or scale of the listing, which would be genuinely additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, no redundancy, with the core action front-loaded and the optional filter trailing. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-required-parameter list tool with full schema coverage and annotations covering safety, the definition is nearly sufficient. Only the omission of return shape/pagination context, absent since there is no output schema, keeps it short of full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'project' parameter is already documented in the schema. The description's 'filter to one project' merely restates that; it adds no syntax or format detail beyond the structured field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (bundles), and the parenthetical gloss 'ordered outlines of memories for a book or project' tells an agent what a bundle actually is. It is separable from bundle_get/bundle_create by the verb, though it never explicitly contrasts itself with those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is 'Optionally filter to one project,' which is really parameter behavior rather than when-to-use-this-vs-alternatives context. There is no statement of when to reach for bundle_list versus bundle_get or bundle_closure, so usage is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_node_createA
Idempotent
Inspect

Add an existing memory to a bundle (an ordered outline of memories for a book or project) as an item under a section, in one call. Use it to place something the user already wrote, such as a chapter's full text or its summary, in the outline so it renders in order. muninn_bundle_create makes a new bundle; this adds content to one. okfType names what the item is: 'text' (full body), 'record' (a summary of a chapter or section), 'package' or 'quotes'. relation defaults to 'contains', the item's one home in the outline; 'reference' links it from a second place as well. Fails if the slug is already used under that section.

NameRequiredDescriptionDefault
slugYesUnique slug for the new node (e.g. 'text'). Lowercased, frozen at creation.
memIdYesID of the EXISTING memory this item points at.
okfTypeNoWhat the item is: 'text' (full body), 'record' (a summary of a chapter or section), 'package', 'quotes'. Default 'text'.text
positionNoExplicit REAL position among siblings. Omit to append.
relationNo'contains' = canonical home (one per node). 'reference' = additional DAG link.contains
parentKeyYesnode_key of the parent to attach under

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), so the description only needs to add context — and it does: it discloses the duplicate-slug failure mode and explains that 'contains' is a single canonical home versus a second 'reference' link. It stops short of describing the response payload or what position/ordering guarantees apply on append.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and scope, and every sentence carries information. It is slightly long and duplicates the okfType and relation explanations that already live in the schema, which is the only waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation with no output schema, the description should say what comes back (presumably the created node or its key) so the agent can chain follow-up calls like node_repoint or render_bundle. Ordering behavior on append ('Omit to append') is left entirely to the schema, and the relationship to muninn_bundle_nodes_create is unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all six parameters, including okfType and relation. The description restates the okfType values and relation semantics but adds no new meaning, and it never mentions position, memId, or parentKey beyond the vague 'under a section'. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Add an existing memory to a bundle... as an item under a section') and parenthetically defines what a bundle is. It also explicitly distinguishes itself from muninn_bundle_create, so an agent can separate the two without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use it to place something the user already wrote, such as a chapter's full text or its summary' gives a concrete use case, and the sentence contrasting with muninn_bundle_create routes the agent away from the wrong tool. It does not address the near-sibling muninn_bundle_nodes_create (bulk/plural variant), which is the most likely confusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_node_deleteA
DestructiveIdempotent
Inspect

Remove an item or section from a bundle (an ordered outline of memories for a book or project), together with every link to or from it. Refuses a section that still has items unless cascade=true, which removes the whole section. Never deletes a memory the user wrote: only when deleteBackingMeta=true, and the memory holds nothing but a bundle's or section's title and description, and nothing else points at it, is that memory deleted too. dryRun=true (default) reports what would be removed without writing.

NameRequiredDescriptionDefault
dryRunNoIf true (default), report what would be deleted without committing.
cascadeNoIf true, delete the whole contains-subtree. Required to delete a node that has children.
nodeKeyYesnode_key of the node to delete
deleteBackingMetaNoIf true, also delete the backing memory IF it is a 'bundle-meta' memory with no other referencing node. Never deletes content memories.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructive=true and idempotent=true, but the description adds substantial behavioral context beyond them: the cascade refusal rule, the strong 'never deletes a memory the user wrote' guarantee with its three-part precondition for deleteBackingMeta, and the dryRun-by-default safety behavior. That is exactly the kind of context annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause and every subsequent sentence carries an actual rule rather than filler. It is a single dense paragraph with nested conditions that read a little run-on, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, no-output-schema tool this covers what an agent needs: what is removed (node plus links), the refusal conditions, the memory-preservation guarantee, and the dryRun default. Nothing material is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all four parameters and the baseline is 3. The description goes further by explaining the interaction semantics: cascade removes 'the whole section,' deleteBackingMeta fires only when the memory holds nothing but a title/description and has no other referrers, and dryRun defaults to a non-committing report.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove an item or section from a bundle') and defines a bundle inline as 'an ordered outline of memories for a book or project,' with the important scope note that all links to/from the node go too. It stops short of naming a sibling alternative (e.g. muninn_bundle_nodes_remove or muninn_memory_delete), so an agent still has to infer the single-vs-multiple split.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditional guidance: it refuses a section that still has items unless cascade=true, and it deletes the backing memory only under three explicit conditions. However it never points to the alternative tool for bulk removals or explains the memory-vs-node deletion boundary against muninn_memory_delete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_node_repointA
DestructiveIdempotent
Inspect

Point an item in a bundle (an ordered outline of memories for a book or project) at a DIFFERENT memory, keeping its place. Its key, position, links and any items beneath it stay as they are; only the memory it shows changes. Use it when a newer memory replaces the one an item showed; removing and re-adding the item would lose what sits beneath it. newMemId may be a full or short-form (8-char) prefix.

NameRequiredDescriptionDefault
nodeKeyYesnode_key of the node to repoint
newMemIdYesID (full or 8-char prefix) of the memory the node should now point at

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the mutation profile is covered. The description adds meaningful semantics beyond that: exactly what is preserved (key, position, links, children) versus what changes (the shown memory), which is the key behavioral fact for this tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core action, followed by preservation semantics, usage trigger, and the parameter format note. The parenthetical defining 'bundle' earns its place by grounding the domain term, and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter mutation tool with annotations covering safety and no output schema, the description supplies purpose, usage, and preservation behavior. It omits failure/error behavior and permission requirements, but the annotations and simplicity of the tool make those minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are documented there. The description's note that newMemId accepts a full or 8-char prefix merely restates the schema's own description, so it adds no information beyond structured data. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (repoint) and resource (an item/node in a bundle), and defines what a bundle is in-line. It clearly delineates the operation from siblings like muninn_bundle_node_delete and muninn_bundle_node_create by specifying that key, position, links and children are preserved and only the pointed-to memory changes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use trigger ('when a newer memory replaces the one an item showed') and names the competing approach (removing and re-adding the item) along with its downside. It stops short of naming a specific sibling tool as the alternative, but the routing condition is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_node_reslugA
DestructiveIdempotent
Inspect

Rename one item or section in a bundle (an ordered outline of memories for a book or project) by changing its slug. Everything else stays: its key, position, links and the memory it points at. The rendered document does not change, because headings come from the memory, not the slug; only exported file names change. Fails if another item already uses the new slug. dryRun=true (default) reports the change without writing.

NameRequiredDescriptionDefault
dryRunNoIf true (default), report what would change without committing.
newSlugYesThe new slug. Lowercased. Lowercase letters, digits and hyphens only, max 64; 'memories', 'index' and 'manifest' are reserved. Must be unique among your bundle nodes.
nodeKeyYesnode_key of the node to reslug (any node, not just a root)

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (destructiveHint=true, idempotentHint=true), the description adds substantive behavioral context: exactly what is preserved (key, position, links, target memory), the surprising fact that rendered documents are unaffected while exported file names change, the failure mode on slug collision, and the default dryRun safety behavior. This is precisely the kind of side-effect disclosure a mutation tool needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, followed by preservation semantics, side effects, failure mode and the dryRun caveat in a logical order. Every sentence carries distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers behavior, side effects, failure conditions and the dry-run option, and the annotations cover the safety profile. The only minor gap is that it does not describe what the tool reports back (e.g. the shape of the dryRun/commit result), but overall it is complete enough to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so nodeKey, newSlug and dryRun are already fully documented in the schema (including slug rules and the uniqueness requirement). The description reinforces the duplicate-slug failure and the dryRun default but adds little syntax or format information beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (rename/reslug) and resource (one item or section in a bundle), and defines what a bundle is ('an ordered outline of memories for a book or project'). It is clearly distinguishable from siblings like muninn_bundle_node_repoint or muninn_bundle_node_delete, and it explains precisely which attribute is being changed (the slug).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the intended use case clear (changing a node's slug) and implicitly differentiates from muninn_bundle_node_repoint by stating 'the memory it points at' stays the same. It also documents the failure condition (duplicate slug) and the dryRun default, giving the agent enough context to call it safely, though it does not explicitly name an alternative tool to use instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_nodes_createA
Idempotent
Inspect

Add MANY existing memories to a bundle (an ordered outline of memories for a book or project) under ONE section in a single call, instead of one muninn_bundle_node_create per item. All-or-nothing: the batch is checked first (the section exists; each slug is free under it and unique within the batch), then applied; any clash aborts the whole batch and names the item, and a failure part-way undoes every item added in this call. memIds may be full or short-form (8-char) prefixes.

NameRequiredDescriptionDefault
childrenYesThe children to attach, in order
parentKeyYesnode_key of the parent to attach all children under

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false) by disclosing transactional semantics: all-or-nothing validation (section exists, each slug free and unique within the batch), abort-on-clash that names the failing item, and mid-batch rollback. This is exactly the kind of behavioral context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose in the first clause, then layers on transaction semantics and the memId format note. Dense but every sentence carries useful information; slightly long for a two-parameter tool, though nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries return-value opacity, but for a batch attach tool the important call-time concerns (validation order, abort behavior, rollback, id format) are all covered. The only minor gap is not describing what a successful call returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents parentKey and every children field. The description adds marginal value by noting memIds accept full or short-form prefixes and by restating the batch-uniqueness of slugs, but this largely duplicates the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Add MANY existing memories to a bundle under ONE section in a single call') and immediately distinguishes itself from the sibling muninn_bundle_node_create by framing itself as the batch alternative. An agent can tell exactly what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative explicitly ('instead of one muninn_bundle_node_create per item'), which gives clear selection context. No explicit when-not condition is stated, but the batch framing makes the intended usage unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_nodes_removeA
DestructiveIdempotent
Inspect

Unlink several items from one parent in a bundle (an ordered outline of memories for a book or project) in one call. Only the links are removed; the items and the memories they point at are kept. The inverse of muninn_bundle_nodes_create. Returns how many links were removed.

NameRequiredDescriptionDefault
childKeysYesnode_keys of children to detach
parentKeyYesnode_key of the parent to detach from

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description adds valuable context beyond them: only links are removed, items and memories are preserved, and the return value is a count of removed links. It does not cover auth or error behavior, but the added semantics are substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and scope, then preservation semantics, then return value. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with rich annotations and no output schema, the description covers purpose, preservation behavior, inverse operation, and return value. Nothing critical for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents parentKey and childKeys. The description implies multiple children from one parent but adds no syntax or format details beyond the schema; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Unlink) and resource (items from one parent in a bundle), scopes it to several items in one call, and distinguishes it from node deletion by noting only links are removed. The inverse relationship to muninn_bundle_nodes_create further disambiguates it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly indicates the operation's context: remove multiple child links from a parent without deleting the items or memories. However, it does not explicitly name alternatives such as muninn_bundle_node_delete or state when-not to use it beyond the implied preservation semantics.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_bundle_updateA
DestructiveIdempotent
Inspect

Change a bundle's title and/or description (a bundle is an ordered outline of memories for a book or project). The slug never changes here.

NameRequiredDescriptionDefault
titleNoNew title
rootKeyYesThe node_key of the bundle root to update
descriptionNoNew description

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, idempotent, destructive mutation, so the description does not need to restate safety basics. It usefully adds that only title and/or description change and the slug is immutable, but does not explain overwrite behavior, permissions, or return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single tightly written sentence with no waste. The mutation scope is front-loaded, and the parenthetical definition of a bundle is brief and useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple metadata-update tool with full schema coverage and annotations, the description provides enough context to call it correctly. The only minor gap is that it does not state what the operation returns, but no output schema is present and the call is straightforward.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% parameter coverage and documents all three parameters, including rootKey as the bundle root identifier. The description names the mutable fields and the and/or nature of the update, but adds no syntax or format details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a clear verb and resource: it changes a bundle's title and/or description, and defines a bundle parenthetically. It also distinguishes this from slug-changing operations by stating the slug never changes here, though it does not name a specific sibling alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the stated fields: use this to edit a bundle's title or description, not its slug. However, there are no explicit when-to-use/when-not-to-use instructions or named alternatives such as bundle creation or reslug operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_helpA
Read-onlyIdempotent
Inspect

Return the full Muninn help document — what Muninn is, how to use it, and the full tool and skill reference. Call this whenever the user asks for help or how to use their memory.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so safety is covered. The description adds useful behavioral context that the response is a complete reference document (potentially large), helping the agent anticipate output size, though it doesn't state format or size explicitly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and return content, then the invocation condition. Nothing is repeated or wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter help tool with no output schema, the description tells the agent what the returned document covers, which is the key decision input. Minor gap: it doesn't note the output format or approximate size, which matters for a "full" reference document.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; this meets the baseline for a no-param tool. The schema coverage is 100% and the empty schema matches the description's implied no-argument invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Return the full Muninn help document") and enumerates what it contains: what Muninn is, usage, and the full tool and skill reference. This clearly separates it from functional siblings like muninn_onboard or muninn_skill_registry.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger: "Call this whenever the user asks for help or how to use their memory." That is a clear when-to-use rule, though it does not contrast against adjacent discovery tools such as muninn_onboard or muninn_session_boot.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_memory_addAInspect

Store a new memory with text content and tags. Returns a compact {success, memoryId, length} — length is the stored character count, your self-verify signal (the full body is never echoed; you just sent it). Pass occurredAt only when logging something that happened at a different time than now (e.g. backfilling a past conversation) — otherwise it defaults to now. Operational memories (session state, checkpoints, carryover, logs) should pass hideRank:true so they do not crowd Ranking or boot.

NameRequiredDescriptionDefault
tagsNoTags for categorization e.g. ['session-state'], ['person-log', 'sarah']
textYesThe memory content to store
previewNo1–2 sentence summary of this memory written by Claude before calling this tool. If omitted, falls back to an 80-char text truncation.
projectNoProject slug to scope this memory (e.g. 'writing-article'). Omit for user-global memories that apply in all projects.
hideRankNoKeep this memory out of the Ranking view and out of the "most accessed" block of session boot. Set true for anything whose reads come from tooling, not from interest: session state, a checkpoint, carryover notes, a run or sync log, a scratch note for the next session of one tool. Leave false for anything a person might want surfaced because it keeps coming up: a decision, a profile, a preference, an article, a changelog entry. When unsure, leave false; a hidden memory is still found by search, tag and get.
occurredAtNoISO 8601 datetime of when the event actually happened, if different from now. Used for chronological ordering of logs. Defaults to now.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only tell the agent this is a non-read-only, non-destructive, non-idempotent write. The description goes well beyond that: it states the exact return shape ({success, memoryId, length}), explains that length is the self-verify signal and the body is never echoed, and documents defaulting behavior and the downstream effect of hideRank on Ranking and boot.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and return contract are front-loaded in the first two sentences, then parameter rules follow in priority order. Slightly overstuffed with em-dash asides such as "(the full body is never echoed; you just sent it)", but nothing is truly wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter creation tool with no output schema, the description supplies the return contract and the non-obvious parameter decisions, which is the bulk of what an agent needs. It stops short of situating the call relative to append/update, leaving one ambiguity for a tool with many write siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds operational rules the schema alone doesn't state as a decision rule — the concrete hideRank:true list (session state, checkpoints, carryover, logs) and the occurredAt backfill case. That is meaningful guidance beyond field-level docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Store a new memory with text content and tags" gives a specific verb and resource, and the return-shape sentence reinforces that this is a creation call. It does not, however, distinguish itself from near-siblings like muninn_memory_append or muninn_memory_update, which an agent could plausibly reach for instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is real conditional guidance: pass occurredAt only when the event happened at a different time than now, and pass hideRank:true for operational memories. What's missing is tool-selection guidance against the other write-path siblings (append, update, anchor_replace).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_memory_anchor_replaceA
DestructiveIdempotent
Inspect

Replace the span between beginAnchor and endAnchor (inclusive) with newText. Cheaper than resending the whole body when editing a large block — send only the two anchors and the replacement. Both anchors must appear EXACTLY ONCE in the current body; the server rejects if either is missing or appears more than once (never guesses). beginAnchor must precede endAnchor. To delete a span: pass newText as empty string. Returns {id, length} as self-verify. memoryId accepts a short-form 8-char prefix. Works on artifacts too (artifactId IS memoryId) — a published artifact's public link is refreshed automatically. Optional expectedRev: the rev from the read you based these anchors on — the write is REJECTED (nothing written) if the body moved since. Omit for a read-then-immediately-write.

NameRequiredDescriptionDefault
newTextYesReplacement text for the entire span (beginAnchor through endAnchor inclusive). Pass empty string to delete the span.
memoryIdYesMemory ID to edit (full UUID or unique 8-char prefix)
endAnchorYesExact string marking the END of the span to replace — must appear exactly once and after beginAnchor
beginAnchorYesExact string marking the START of the span to replace — must appear exactly once
expectedRevNoThe `rev` from the read you based this edit on. Rejects the write if the body has changed since. Omit to skip the check.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (destructive, idempotent, openWorld); the description adds substantial context beyond that: exact-once anchor matching with no guessing, ordering requirement, delete semantics, return value {id, length}, short-form 8-char memoryId, artifact support with automatic public-link refresh, and the optimistic-concurrency behavior of expectedRev (write REJECTED, nothing written). Note a latent tension: the 'rejects if either anchor is missing' rule means a repeat call would fail, which sits awkwardly with idempotentHint=true, but the description itself is accurate and not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core operation, then rationale, constraints, delete case, return value, artifact note, and rev guidance. Every clause is informative, though the description is dense and runs long enough that a couple of points (artifact note, expectedRev) could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description compensates fully: it documents the return shape ({id, length}), concurrency handling via expectedRev, edge cases (delete, exactly-once anchors, ordering), and artifact-specific side effects. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it clarifies the relationship between the two anchors (ordering, uniqueness) and, most valuably, when to use or omit expectedRev ('the rev from the read you based these anchors on', omit for read-then-immediately-write).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: replace the span between beginAnchor and endAnchor with newText. It also implicitly distinguishes itself from whole-body editing siblings (muninn_memory_update/muninn_memory_append) by explaining it is 'cheaper than resending the whole body'. An agent can tell what this does and why it exists without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly covers when to use it (editing a large block), how to delete (newText as empty string), and the exact condition for expectedRev ('omit for a read-then-immediately-write'). It also states the failure conditions (anchors missing or appearing more than once) so the agent knows when the call will be rejected.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_memory_appendAInspect

Append text to the END of a memory's body. Cheaper than resending the whole body — only send what's new. Use for growing changelogs, journals, session-state, or any memory that accumulates by accretion. separator defaults to '\n\n' (a blank line). Returns {id, length} as self-verify. memoryId accepts a short-form 8-char prefix. Works on artifacts too (artifactId IS memoryId) — a published artifact's public link is refreshed automatically. Optional expectedRev: the rev from your last read of this memory — the append is REJECTED (nothing written) if the body moved since, rather than landing on top of someone else's entry. Omit for a read-then-immediately-write, or when appending blind.

NameRequiredDescriptionDefault
textYesText to append
memoryIdYesMemory ID to append to (full UUID or unique 8-char prefix)
separatorNoString inserted between the existing body and the new text. Default: '\n\n' (blank line).
expectedRevNoThe `rev` from the read you based this append on. Rejects the write if the body has changed since. Omit to skip the check.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond annotations: returns {id, length} for self-verification, expectedRev acts as optimistic concurrency (REJECTED with nothing written if the body moved), short-form 8-char prefix accepted, and artifact behavior with automatic public-link refresh. This discloses write semantics and failure modes the annotations alone don't.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then layers value (cheaper, use cases, separator, return shape, concurrency, artifacts) with no filler. Dense but every sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description states the return value ({id, length}) and describes the concurrency guarantee and artifact side effect. For a 4-param append tool this is complete enough for an agent to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds usage guidance the schema lacks—specifically when to omit expectedRev ('read-then-immediately-write, or when appending blind') and the separator default behavior. This meaningfully augments the expectedRev parameter's semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('append') and resource ('a memory's body') with scope ('to the END'), and implicitly distinguishes from full-body update by noting it's 'cheaper than resending the whole body.' An agent can tell exactly what this does versus sibling memory tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete use cases ('growing changelogs, journals, session-state, or any memory that accumulates by accretion') and contrasts cost with resending the whole body, which implies the alternative update path. It doesn't explicitly name muninn_memory_update as the alternative, keeping it just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_memory_deleteA
DestructiveIdempotent
Inspect

Permanently delete a memory by ID from all storage layers. memoryId may be the full UUID or a unique prefix of at least 8 characters, the same short form muninn_memory_get and _update accept; an ambiguous prefix is refused and lists the matching IDs, so nothing is deleted by guesswork.

NameRequiredDescriptionDefault
memoryIdYesThe memory ID to delete (full UUID or a unique prefix of at least 8 characters)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true. The description adds that deletion spans 'all storage layers' and that ambiguous prefixes are refused with a list of matching IDs; that goes beyond what the annotations say.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the destructive action and scope, followed by the key safety constraint. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with rich annotations and no output schema, the definition covers scope, permanence, and the ambiguous-ID failure mode. What's missing is minor, e.g. whether deletion cascades to references or tags in bundles.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description still adds meaning by stating the ambiguous-prefix behavior (refused, with matches listed) and linking the short-form convention to muninn_memory_get and _update.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

'Permanently delete a memory by ID from all storage layers' gives a specific verb, resource, and scope, which clearly separates it from muninn_memory_get, _update, and _list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage (delete a memory when you want it gone) and references the get/update siblings only for ID-format conventions, not as alternatives. There is no explicit when-not guidance, e.g. irreversibility or what to do if the memory is referenced elsewhere.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_memory_getA
Read-onlyIdempotent
Inspect

Retrieve a single memory by its ID. Accepts a short-form ID (a prefix of the full UUID) — it is resolved to the full ID first. Also returns rev, the body's revision number (null if never indexed): pass it back as expectedRev on a later muninn_memory_update / _anchor_replace / _append and that write FAILS instead of clobbering an edit someone made in between. Only worth carrying when you read now and write later; a read-then-immediately-write needs nothing. Also opens a built-in Muninn skill: pass the full id from the end of its <muninn_skills> location and its instructions come back read-only, marked builtIn: true.

NameRequiredDescriptionDefault
memoryIdYesThe memory ID to retrieve (full UUID or a unique prefix of it)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive/closed-world, and the description adds substantial behavior beyond them: short-form IDs are resolved to a full UUID first, `rev` is null when never indexed, and passing it back makes a later write FAIL rather than clobber a concurrent edit. It also discloses that built-in Muninn skills come back read-only and are marked `builtIn: true`.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded in the first sentence, and every subsequent sentence carries information. It is dense with em-dash asides and the skill paragraph sits last as a related tangent, so it is slightly longer than it needs to be, but nothing is pure filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with annotations and no output schema, the description covers return semantics (`rev` and its null case), ID resolution, and the special skill path. It omits error behavior for unknown or ambiguous prefixes, which is the only notable omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds semantics the schema does not: prefix IDs are acceptable and are resolved before use, and a full ID sourced from a <muninn_skills> location behaves differently (opens read-only skill instructions). That is real added meaning over the one-line schema doc.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Retrieve) and resource (a single memory) and scopes it by ID, which cleanly separates it from the list/query/search siblings. The short-form ID resolution and the built-in-skill retrieval path are both named explicitly, so an agent knows exactly what this call returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete conditional guidance for the `rev` value: carry it only when you read now and write later, since a read-then-immediately-write needs nothing. It also explains the one non-obvious usage path (reading a built-in skill's instructions via its <muninn_skills> id). It never states when to prefer this over muninn_memory_search/query/artifact_get when you don't already hold an ID, which is the remaining gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_memory_listA
Read-onlyIdempotent
Inspect

List all memories for the current user with optional pagination. Use muninn_memory_list_by_tag for tag filtering or muninn_memory_search for semantic search.

NameRequiredDescriptionDefault
limitNoMaximum number of memories to return
cursorNoPagination cursor from a previous response
projectNoProject slug to filter results. Returns global + project-scoped memories. Omit to return all memories.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds only the pagination hint, which is already implied by the limit/cursor schema, and says nothing about ordering, default result size, or what the cursor encodes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the primary purpose front-loaded before the routing guidance. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with full annotation coverage and 100% schema coverage, the description is essentially complete. The only soft gap is the absence of any note on result ordering or return shape, which matters slightly more given there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so limit, cursor, and the project filter are all documented in the schema itself, including the global+project-scoped nuance. The description adds no parameter-level meaning beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List all memories'), the scope ('for the current user'), and a behavioral modifier ('optional pagination'). It also names the two closest siblings so an agent can distinguish this tool without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes to alternatives with the condition that selects each: muninn_memory_list_by_tag for tag filtering, muninn_memory_search for semantic search. This is exactly the when-to-use-this-vs-that guidance the dimension asks for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_memory_list_by_tagA
Read-onlyIdempotent
Inspect

Find memories by exact tag match using the D1 tag index. All specified tags must be present (AND logic). Use for session-state, carryover, person profiles, project logs etc.

NameRequiredDescriptionDefault
tagsYesTags to filter by — all must match e.g. ['carryover'] or ['person-log', 'sarah']
limitNoMaximum number of results
projectNoProject slug to filter results. Returns global + project-scoped memories. Omit to return all memories.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety behavior is covered for free. What the description adds is the AND-matching rule, but that is duplicated verbatim in the schema's own tag description ('all must match'), and the 'D1 tag index' reference is an implementation detail rather than agent-relevant behavior. No mention of result ordering or page/limit behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the core behavior and the matching rule front-loaded, then use cases. No filler or redundant restatement of the name. The trailing 'etc.' makes the use-case list slightly loose but costs little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only filtered list with full annotation coverage and 100% schema coverage, the description supplies what is needed to invoke it correctly. There is no output schema, so the only mild gap is that it says nothing about what a result looks like or how limit/pagination behaves.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents tags (with examples), limit (max 100, default 100) and project (global + project-scoped). The description adds no parameter detail beyond repeating the AND rule. Baseline 3 is correct when the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find memories by exact tag match') and adds the matching semantics ('All specified tags must be present (AND logic)'), so the agent knows exactly what the tool returns. It does not, however, distinguish itself from closely-named siblings such as muninn_memory_search_tags, muninn_memory_list_tags, or muninn_memory_tag, which is the main ambiguity an agent faces here.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing clause ('Use for session-state, carryover, person profiles, project logs etc.') gives concrete use cases, which implies when the tool is appropriate. It never states when NOT to use it or names an alternative (e.g. the non-tag list/query tools), so the agent must infer the choice from the sibling list alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_memory_list_tagsA
Read-onlyIdempotent
Inspect

List every distinct tag for the current user with how many memories carry it, most-used first. The vocabulary/discovery counterpart to tag search — answers 'was it github-mirror or mirror-github?' in one call. Pass a project to scope counts to that project (plus global).

NameRequiredDescriptionDefault
projectNoProject slug to scope counts. Returns global + project-scoped. Omit for all.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds behavioral detail beyond that: returned counts, most-used-first ordering, and the global+project aggregation semantics of the project parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences; output shape and ordering are front-loaded, then the sibling distinction, then the parameter note. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A single-parameter, read-only listing tool with annotations covering safety and no output schema to explain. Everything an agent needs to call it correctly — including the project/global interaction — is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage the baseline is 3, but the description adds real meaning: passing a project scopes counts to that project AND global, and omitting it returns all. That combination rule is worth more than the schema's bare 'Omit for all.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List every distinct tag'), plus the payload (counts) and ordering (most-used first). It explicitly positions itself against tag search, so an agent can distinguish it from siblings like muninn_memory_search_tags without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context for when to use it — tag vocabulary/discovery, resolving near-miss tag names like 'github-mirror vs mirror-github'. It does not name the alternative tools explicitly, so the routing signal is descriptive rather than a direct hand-off.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_memory_queryA
Read-onlyIdempotent
Inspect

Query memories with composable filters: fetch by specific IDs, OR-tag match, AND-tag match, tag exclusion, and a date range. id, tag and time clauses are intersected — a memory must satisfy all provided clauses. A time clause alone is allowed: "what happened between 1 and 19 Oct" is time {from, to} with nothing else, answered from each memory's own timestamp, so it does not depend on date tags. With time set, results are ordered by that timestamp, newest first (order:"oldest" for a timeline from the start). For a topic inside a date range, use muninn_memory_search with time. Use for bundle content audits, convention checks, or any multi-condition fetch. IDs accept full UUIDs or unique 8-char prefixes; ambiguous/missing prefixes are reported in errors[], never silently dropped.

NameRequiredDescriptionDefault
idNoFetch these specific memory IDs (full UUIDs or unique 8-char prefixes).
tagNo
timeNoKeep memories whose timestamp falls in this range.
limitNo
orderNoResult order by timestamp (the time field when time is set, else occurredAt).newest
projectNoProject slug. Keeps that project's memories plus global (no-project) ones, as muninn_memory_list_by_tag does. Omit for all.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds behavior those annotations cannot express: result ordering driven by the time field, order:'oldest' for timelines, and that ambiguous/missing ID prefixes surface in errors[] rather than being silently dropped. It stops short of describing pagination or result shape, but the error-reporting and ordering disclosures are genuinely useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core verb and filter list, then progressively adds intersection rules, ordering, and the routing alternative. It is dense and slightly long, but each sentence carries non-obvious information (timestamp independence, error reporting), so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-param, 0-required tool with nested tag/time objects and no output schema, the description covers the semantics an agent needs to build valid multi-clause queries plus ordering and error behavior. Remaining gaps (result shape, limit interaction) are minor and partly covered by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description compensates with semantics the schema does not carry: all provided clauses are intersected, a time clause alone is valid and answered from each memory's own timestamp rather than date tags, and IDs accept full UUIDs or unique 8-char prefixes. It does not restate limit bounds or the project fallback, which the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (query memories) and enumerates the exact filter composition it supports: IDs, OR-tag, AND-tag, exclusion, date range, with intersection semantics. It also distinguishes itself from the sibling muninn_memory_search (topic-inside-range) and from muninn_memory_list_by_tag, so an agent can route without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names when to use it (bundle content audits, convention checks, any multi-condition fetch) and, more importantly, names the alternative and the condition that selects it: 'For a topic inside a date range, use muninn_memory_search with time.' That is exactly the when/when-not/alternative guidance the dimension asks for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_memory_search_tagsA
Read-onlyIdempotent
Inspect

Find memories by PARTIAL tag match — each pattern matches any tag CONTAINING it (substring, case-insensitive). Semantics: OR within a pattern, AND across patterns — e.g. ['brd','mirror'] finds memories that have some brd-ish tag AND some mirror-ish tag. Use when you don't recall the exact tag ('mirror' → github-mirror, gdrive-mirror). For exact tags use muninn_memory_list_by_tag; to see the tag vocabulary use muninn_memory_list_tags.

NameRequiredDescriptionDefault
limitNoMaximum number of results
projectNoProject slug to filter results. Returns global + project-scoped memories. Omit to search all.
patternsYesSubstring patterns, e.g. ['mirror'] or ['brd', 'mirror']. Each matches any tag containing it.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent and non-destructive, so safety is covered. The description adds genuinely new behavioral context beyond annotations: substring, case-insensitive matching plus OR-within-pattern / AND-across-pattern semantics. It stops short of describing result ordering or pagination, so a 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the matching semantics then the usage routing, with an illustrative example. Every sentence earns its place, though the single dense paragraph is slightly heavy for the operation's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Purpose, matching semantics, and sibling alternatives are all covered; annotations carry the safety profile and there is no output schema to document. Nothing needed to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning the schema lacks: the cross-pattern AND vs within-pattern OR combinatorics with a worked example. That elevates it above the baseline. The limit/project params remain schema-only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find memories by PARTIAL tag match') and immediately defines the matching behavior. It explicitly distinguishes itself from muninn_memory_list_by_tag and muninn_memory_list_tags, so an agent can select it without opening sibling schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use trigger ('Use when you don't recall the exact tag') with a concrete example, plus named alternatives for the opposite cases (exact tags, vocabulary browsing). The routing logic is fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_memory_tagA
DestructiveIdempotent
Inspect

Add and/or remove tags on a memory WITHOUT touching its text. Pass deltas, not the full list: add:[...] inserts (deduped), remove:[...] strips. NEVER regenerates the embedding (text is untouched), and you don't resend the existing tags or the body — so this is far cheaper than muninn_memory_update for a tag-only change. Returns compact {id, tags} with the resulting tag list. Use muninn_memory_update instead only when you also need to change text/project/decay, or to REPLACE the whole tag list wholesale. memoryId accepts a short-form 8-char prefix.

NameRequiredDescriptionDefault
addNoTags to add (deduped against existing). Omit if only removing.
removeNoTags to remove. Omit if only adding.
memoryIdYesThe memory ID to retag (full UUID or unique 8-char prefix)

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructive/idempotent/not-readonly, and the description adds non-obvious behavior beyond them: no embedding regeneration, no need to resend body or existing tags, cost comparison against update, and the compact {id, tags} return shape. No contradictions with the annotation profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but zero waste; the core constraint (text untouched, deltas only) is front-loaded, followed by cost rationale, return shape, and the alternative routing. No filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter mutation tool with no output schema, the description covers what changes, what doesn't, what's returned, and when to pick the sibling instead. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so baseline is 3, but the description adds real semantics: pass deltas not the full list, add is deduped against existing, remove strips, and memoryId accepts an 8-char prefix. Gaps are minor (no guidance on erroring on non-existent tags).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (add/remove) and resource (tags on a memory), plus the critical scope constraint 'WITHOUT touching its text'. An agent can distinguish it from muninn_memory_update purely from the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use muninn_memory_update only when text/project/decay changes or a wholesale tag replacement is needed. The delta-vs-full-list rule is stated up front, which is the main selection hazard.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_memory_tag_manyA
DestructiveIdempotent
Inspect

Apply tag adds and/or removes across MANY memories in one call. Body and embeddings are untouched. Use for project renames, bulk re-tagging, or applying a convention to a whole set. memoryIds accept full UUIDs or unique 8-char prefixes. Returns per-id results and any resolution errors.

NameRequiredDescriptionDefault
addNoTags to add to each memory (deduped against existing)
removeNoTags to remove from each memory
memoryIdsYesMemory IDs to retag (full UUIDs or unique 8-char prefixes)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false; the description adds the valuable clarification that 'Body and embeddings are untouched' despite the destructive flag, plus dedup behavior against existing tags. It also notes return behavior ('per-id results and any resolution errors'), which is useful given no output schema, though permission and rate-limit behavior remain unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the operation and scope, then constraints, then use cases, then return contract. Minimal waste, though the listing of use cases could be trimmed slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a batch mutation tool with no output schema, the description covers scope, untouched fields, prefix resolution with error reporting, and dedup behavior, so an agent has enough to call it correctly. Minor gaps around permissions or failure semantics for the whole batch keep it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters including the prefix format and dedup note. The description merely restates the prefix capability and does not add meaning beyond the schema, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Apply tag adds and/or removes'), a resource ('memories'), and clear batch scope ('across MANY memories in one call'), which implicitly separates it from the singular muninn_memory_tag sibling. It stops short of naming the single-memory alternative explicitly, so it falls just short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides concrete use cases ('project renames, bulk re-tagging, or applying a convention to a whole set'), giving clear context for when to reach for it. However, it never states when NOT to use it or points to muninn_memory_tag for the single-memory case, so there are no explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_memory_updateA
DestructiveIdempotent
Inspect

Update an existing memory's text, tags, decay score, occurredAt, or project. memoryId may be a short-form (8-char) prefix. Two ways to change text: pass text to replace the WHOLE body, OR pass replacements:[{old,new}] for surgical find-and-replace — each old must match EXACTLY ONCE or the whole update is rejected atomically (nothing is written), so a two-line edit to a long memory costs one pair instead of resending thousands of words. Regenerates the embedding ONLY if text actually changes. tags REPLACES the whole list. Returns a compact {id, tags, project, updatedAt, embeddingRegenerated, length} — length is the stored char count, your self-verify signal (the body is never echoed back). When you used replacements, the result also carries replacements: so you can confirm how many spots were hit. For a tags-only edit, prefer muninn_memory_tag. hideRank:true takes a memory out of Ranking and boot's mostAccessed, false puts it back; omit it to leave it as it is. This is also how you EDIT AN ARTIFACT'S BODY — an artifact's artifactId IS its memoryId; there is no separate muninn_artifact_update. If the artifact is currently published, its public link is refreshed automatically. Optional expectedRev: pass the rev your last muninn_memory_get / muninn_artifact_get returned and the write is REJECTED (nothing written) if someone changed the body since you read it, instead of silently overwriting them. Omit it when you read and write in the same breath.

NameRequiredDescriptionDefault
tagsNoNew tags (replaces existing tags)
textNoNew text content — replaces the WHOLE body. Mutually exclusive with replacements.
previewNoUpdated 1–2 sentence summary. Pass when text changed. If omitted, existing preview is preserved.
projectNoNew project slug. Pass empty string '' to clear back to global. Omit to leave unchanged.
hideRankNoKeep this memory out of the Ranking view and out of the "most accessed" block of session boot. Set true for anything whose reads come from tooling, not from interest: session state, a checkpoint, carryover notes, a run or sync log, a scratch note for the next session of one tool. Leave false for anything a person might want surfaced because it keeps coming up: a decision, a profile, a preference, an article, a changelog entry. When unsure, leave false; a hidden memory is still found by search, tag and get. Omit to leave the current setting.
memoryIdYesThe memory ID to update (full UUID or unique 8-char prefix)
decayScoreNoNew decay score between 0 and 1
occurredAtNoCorrected ISO 8601 datetime of when the event actually happened. Used for chronological ordering.
expectedRevNoThe `rev` from the read you based this edit on. Rejects the write if the body has changed since. Omit to skip the check.
replacementsNoSurgical find-and-replace pairs applied in order. Each `old` must match exactly once or the entire update is rejected (atomic). Use instead of `text` to edit a few lines of a long memory cheaply.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far exceeds the annotations: atomic rejection if any `old` fails to match exactly once, embedding regeneration only when text actually changes, tags replacing the whole list, automatic public-link refresh for published artifacts, and expectedRev conflict rejection instead of silent overwrite. These are the failure modes an agent cannot infer from destructiveHint/idempotentHint alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the mutually exclusive edit modes, and most sentences carry distinct information. It is long and repeats some schema-level detail (notably hideRank and replacements atomicity), but given 10 parameters with no output schema the density is largely justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Since no output schema exists, the description supplies the return contract itself ({id, tags, project, updatedAt, embeddingRegenerated, length}) and explains that length is the self-verify signal because the body is never echoed. Combined with concurrency (expectedRev) and artifact-editing coverage, nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning beyond it: the replacements-as-cost-saving device, the embedding-regen condition, the short-form memoryId prefix, and concrete guidance for setting expectedRev. Some content (tags replaces existing, replacements order) is duplicated from the schema, which keeps this from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource and enumerates exactly which fields are mutable (text, tags, decay score, occurredAt, project). It also distinguishes itself from siblings by naming muninn_memory_tag for tags-only edits and stating there is no separate muninn_artifact_update, which is real disambiguation an agent can act on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing: 'For a tags-only edit, prefer muninn_memory_tag', two named text-edit strategies with the cost tradeoff between them, and clear when/when-not for expectedRev ('omit it when you read and write in the same breath'). It also covers the non-obvious case of editing an artifact body through this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_mirror_connectAInspect

Start the connection flow for a mirror provider. Returns a URL for the user to open in their browser. After approving, call muninn_mirror_status to confirm. Paid plan. provider: 'gdrive' (Google Drive, push-only: copies out of Muninn, never back) is the working mirror; 'github' is not available yet and is refused.

NameRequiredDescriptionDefault
providerYesThe mirror provider to connect: 'gdrive' for Google Drive (push-only). 'github' is not available yet and returns an error.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses that the tool returns a browser URL, requires user approval, belongs to a paid plan, and that 'gdrive' is push-only with copies never coming back. It also warns that 'github' is unavailable and refused, which is important behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the action, followed by the return value, next step, prerequisite, and provider constraints. Every sentence adds operational value with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of an output schema, the description explains the key return value (a URL) and the required follow-up step. It also covers pricing, provider availability, and push-only semantics, making the definition complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds useful meaning beyond the schema by explaining that 'gdrive' is push-only ('copies out of Muninn, never back') and that 'github' is not available yet and is refused, though much of this overlaps with the schema's own parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Start the connection flow for a mirror provider.' It clearly distinguishes the tool from its follow-up sibling by stating that after approval the agent should call muninn_mirror_status to confirm.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context, including a prerequisite ('Paid plan') and an explicit follow-up ('After approving, call muninn_mirror_status to confirm'). It also states that 'github' is refused, but it does not explicitly frame when to choose this over other mirror tools such as designate or push.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_mirror_designateA
Idempotent
Inspect

Designate (or un-designate) a bundle for mirroring to a provider. Adds/removes the 'gdrive-mirror' tag on the bundle root's backing memory for Drive ('github-mirror' for GitHub). After designating, writes to that bundle automatically enqueue a mirror push. Use muninn_mirror_push to force one now. Turning mirroring on is Paid plan; turning it off (enabled=false) is always free. GitHub is not available yet: enabling it is refused, un-designating still works.

NameRequiredDescriptionDefault
enabledNotrue = designate; false = stop mirroring this bundle
rootKeyYesnode_key of the bundle root to designate
providerYesWhich provider to designate for: 'gdrive'. 'github' is accepted only with enabled=false.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnlyHint=false, idempotent, openWorld): it discloses the tag side effect on the backing memory, the automatic enqueue-on-write behavior after designation, billing implications, and a provider-specific refusal path. These are operationally critical traits annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five tight sentences, front-loaded with the core action and mechanism, followed by behavior, billing, and provider caveats. Every sentence carries non-redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description covers everything an agent needs: what changes, what happens afterward, cost/policy gating, provider limitations, and the force-push alternative. No material gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds useful semantics: enabled=false means stop mirroring and is free, and the github provider value is only usable with enabled=false. It does not elaborate on rootKey beyond the schema wording.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — designating/un-designating a bundle for mirroring to a provider — and clarifies the concrete mechanism (tagging the bundle root's backing memory). It is clearly distinguishable from sibling mirror tools (push, connect, status, reconcile).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to muninn_mirror_push for forcing a push now, states the Paid-plan gate for enabling versus the always-free disable path, and warns that GitHub enabling is refused while un-designating still works. When-to-use, when-not, and the alternative are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_mirror_pushA
DestructiveIdempotent
Inspect

Force an immediate mirror push of one bundle. Marks the bundle dirty so the next cron tick (every 15 min) pushes it. If provider is omitted, queues for all connected providers. Paid plan; a lapsed account's mirror pauses until it pays again (files already mirrored stay). Only Google Drive is pushed today; 'github' is refused.

NameRequiredDescriptionDefault
rootKeyYesnode_key of the bundle root to push
providerNoWhich provider to push to: 'gdrive'. 'github' is not available yet and returns an error. Omit for all connected providers.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare the safety profile (readOnlyHint=false, destructiveHint=true, idempotentHint=true), and the description adds substantial context beyond them: the push is deferred via a dirty flag to a 15-minute cron tick, provider omission queues all connected providers, and a lapsed account pauses mirroring while retaining already-mirrored files. 'files already mirrored stay' is consistent with destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded, with each clause earning its place (timing, provider scope, plan gating, github refusal). Slight deduction because it opens with 'immediate' then immediately corrects to 'next cron tick (every 15 min)', a mild tension in the lead sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, it covers timing, provider behavior, plan gating, and provider refusal well, and annotations cover the destructive/idempotent profile. It does not describe what the call returns or how to observe the queued state (e.g., via muninn_mirror_status), a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema. The description largely restates provider semantics ('omit for all connected providers', github refused) that the schema enum description already conveys, adding little beyond it; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Force an immediate mirror push of one bundle') and scopes it to a single bundle root. It is clearly distinguishable from the other mirror siblings (connect/designate/reconcile/status) which manage setup and state rather than triggering a push.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real preconditions (paid plan, lapsed accounts pause, only gdrive works, github refused) but never routes the agent against alternatives such as muninn_mirror_reconcile or muninn_mirror_status, nor says when to trigger a push manually versus waiting for the cron tick. Usage is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_mirror_reconcileA
Destructive
Inspect

Manually trigger a mirror reconciliation pass: enqueues every memory the mirror has never seen and re-marks any that changed since their last push, so both re-push on the next cron tick. Useful after a gap or error. Returns enqueuedNew, markedDirty, scanned, and complete (false = the scan stopped on budget and resumes next run). Only Paid accounts are reconciled; a lapsed account's mirror is paused. Only Google Drive is actually pushed; GitHub rows still get queued but are never pushed (GitHub is not available yet).

NameRequiredDescriptionDefault
providerNoReconcile only this provider ('gdrive' is the working mirror; 'github' is not available yet). Omit for all connected providers.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses that the effect is enqueue-only (actual push waits for the cron tick), that the scan is budget-limited and resumable via the 'complete' flag, that only Paid accounts are reconciled and lapsed mirrors are paused, and that GitHub rows queue but never push. That is exactly the mutation semantics an agent needs given destructiveHint=true and openWorldHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action, then the trigger condition, then return shape and constraints; nearly every clause carries information. It is dense and slightly run-on, packing account tier, provider behavior, and return semantics into a single paragraph.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by naming all four return fields and explaining that complete=false means a budget-truncated resumable scan. Account requirements, provider limitations, and side-effect timing are all covered, so nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the enum is documented, so the provider parameter is already fully specified. The description adds relevant semantics (gdrive works, github is queued but never pushed, omit for all) but never references the parameter name directly, so this is baseline-level rather than additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('manually trigger a mirror reconciliation pass') and explains the mechanism precisely: enqueues unseen memories and re-marks changed ones for the next cron tick. This implicitly separates it from muninn_mirror_push (immediate push) and muninn_mirror_status, but no sibling is named explicitly, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful after a gap or error' gives a clear triggering condition, and the account/paused and GitHub-not-pushed notes tell the agent when this will do nothing. There is no explicit exclusion or named alternative (e.g., 'use muninn_mirror_push for an immediate push'), so usage is well-contextualized but not fully routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_mirror_statusA
Read-onlyIdempotent
Inspect

Report mirror connection state and push health per provider. Shows connected, last push time, pending count, and last error. Pass provider to filter to one provider. Free on every plan. Google Drive is the working mirror; GitHub is not available yet, so a github entry (even connected: true) never pushes or pulls, and its pending count does not drain. On a lapsed (non-Paid) account pushes are paused, so pending can grow until it pays again.

NameRequiredDescriptionDefault
providerNoWhich provider to check: 'gdrive' or 'github' (reported, but not a working mirror yet). Omit for all.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, yet the description adds substantial behavioral context: github entries never push or pull and their pending count never drains, and on lapsed accounts pushes are paused so pending can grow. These are non-obvious traits an agent cannot derive from annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then returns, then filtering, then caveats. Every sentence earns its place, though 'Free on every plan' is a mild marketing aside and the passage is longer than strictly necessary for a one-parameter read tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries the return-shape burden: it enumerates connected, last push time, pending count, and last error. Combined with the github and lapsed-account edge cases, an agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the enum is documented, so baseline is 3. The description adds meaning beyond the schema by explaining the filter intent ('Pass provider to filter to one provider') and warning that a github value is reported but non-functional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Report) and resource (mirror connection state and push health per provider), and clearly distinguishes itself from mirror_connect/designate/push/reconcile as a read-only status check. An agent can identify it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong contextual guidance: how to filter by provider, that the tool is free on every plan, and how to interpret a github entry. It does not explicitly name alternatives (e.g., mirror_reconcile) or a when-not-to-use condition, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_onboardA
Read-onlyIdempotent
Inspect

Set up a brand-new Muninn account with the user. Call this when the user asks to set up Muninn, says they have just signed up, says their memory is empty, or when muninn_session_boot comes back with nothing in it. Returns {memoryCount, verified, hasIdentity, firstRunScript, starterInstruction}. memoryCount is what the user's Memory Map shows, so 0 means an empty map. firstRunScript is a three-question interview to run with the user, one question at a time, saving each answer with muninn_memory_add; do not paste it back at them. starterInstruction is an optional standing instruction, written for the assistant in use, that the user can paste into their own assistant settings if they want Muninn loaded at the start of every conversation. Offer it only after at least one memory is saved, or if they ask why their assistant does not use Muninn on its own, and tell them what it does before they paste it. verified:false means the account is read-only until the user clicks the link in their "Verify your Muninn account" email, so every save will be refused; say that plainly instead of running the interview. hasIdentity:true means an identity memory already exists, so do not re-run the interview unprompted.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses the read-only failure mode (verified:false blocks every save via muninn_memory_add), the gating for starterInstruction, and the effect of hasIdentity. The only friction is that 'set up a brand-new account' implies mutation while the annotations declare readOnlyHint=true and the actual writes are delegated elsewhere — the description never explicitly reconciles that, though the mechanism becomes inferable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger, then the return shape, then per-field handling rules — a sensible order with little wasted text. It is dense and run-on in the middle (return-field prose reads as one long sentence), so structure could be tightened, but every clause carries operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description fully carries the return-value burden, explaining each of the five fields and the correct agent action for the two error-ish states (unverified account, existing identity). Nothing an agent needs to run the onboarding conversation correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero input parameters, so the schema baseline is 4. The description instead spends its detail on the return shape (memoryCount, verified, hasIdentity, firstRunScript, starterInstruction), which is the right use of space given no output schema exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Set up a brand-new Muninn account') and immediately distinguishes itself from sibling muninn_session_boot by naming the exact condition where boot delegates here. An agent can pick between onboarding flow and normal session boot without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Enumerates concrete invocation triggers (user asks to set up Muninn, just signed up, memory is empty, session_boot returns nothing) and explicit when-not conditions: don't run the interview if verified:false or hasIdentity:true. It also names the alternative tool (muninn_session_boot) and the required follow-on tool (muninn_memory_add).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_picture_upload_directAInspect

Save photos YOU can already read as a picture memory: photos the user attached in this chat that are on your sandbox disk, or files in a working directory. Needs network access to https://munn.is; if your code cannot reach it, use muninn_picture_upload_start so the user picks them instead. Returns {memoryId, endpoint, header, how, expiresAt, maxFiles}. Upload each photo with one POST to endpoint, multipart/form-data with two file fields: 'orig' (the photo bytes, unchanged) and 'thumb' (a JPEG you make, long edge 480 px, at most 100 KB), plus the header. Up to 7 photos, JPEG, PNG or WebP, 10 MB each, within 15 minutes. Then call muninn_picture_view with memoryId and muninn_picture_upload_finish. Nothing is a memory until finish runs.

NameRequiredDescriptionDefault
maxFilesNoHow many photos this memory will hold, 1 to 7. Omit for 7.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the mutation/safety profile (readOnly=false, idempotent=false, destructive=false). The description adds substantial context beyond them: the external network requirement, the raw POST contract with field names, size/format/count limits (7 photos, 10 MB, JPEG/PNG/WebP, 15-minute expiry), the returned field shape, and the crucial lifecycle note that 'Nothing is a memory until finish runs.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the alternative, then the return shape, then the mechanics. Every sentence carries operational detail and none is filler, though the density is high and a couple of clauses could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-step upload flow with no output schema, the definition compensates by enumerating the returned fields ({memoryId, endpoint, header, how, expiresAt, maxFiles}) and the exact HTTP mechanics an agent must execute. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter (maxFiles, 1-7, default 7) is fully documented there. The description only echoes the count limit ('Up to 7 photos') without adding syntax or meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Save photos ... as a picture memory') and immediately scopes which photos qualify ('photos YOU can already read ... on your sandbox disk, or files in a working directory'). It explicitly distinguishes itself from the sibling muninn_picture_upload_start, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit condition for using the alternative: 'if your code cannot reach it, use muninn_picture_upload_start so the user picks them instead.' It also brackets the workflow by naming the follow-up calls (muninn_picture_view, muninn_picture_upload_finish), leaving nothing about when-to-use to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_picture_upload_finishAInspect

Write the picture memory after the user's photos arrived (check with muninn_picture_view first). The note is written in this session: what the photos show and what the moment was, in the user's words where you have them. Fill when, where and who only from what you actually know, and label each with its source: whenSource 'photo' (takenAt from muninn_picture_view), 'user' (they told you) or 'upload_time' (a photo just taken in the app, where upload time is capture time); whereSource 'user', 'device' (your device location tool, only when the user says the photo was taken here and now) or 'photo'. When the in-chat picker sent the fields, its labels map directly: 'When (from the photo's own metadata)' is whenSource 'photo', 'When (I said)' and 'Where (I said)' are 'user'. Never guess a place or a name from the pixels. The memory is tagged 'picture' plus your tags. Returns {success, memoryId, pictures}. Deleting this memory later deletes its photos.

NameRequiredDescriptionDefault
whoNoPeople in or behind the photos, as the user named them.
noteYesThe memory's text: what the photos are and what the moment meant.
tagsNoTags, as for muninn_memory_add. 'picture' is added for you.
whenNoWhen the photos were taken: ISO date or date-time, e.g. 2026-09-29 or 2026-09-29T17:58:30+07:00.
whereNoWhere the photos were taken, as a place name or address.
projectNoProject slug, as for muninn_memory_add.
memoryIdYesThe memoryId from muninn_picture_upload_start or _direct.
whenSourceNoWhere `when` came from. Required with `when`.
whereSourceNoWhere `where` came from. Required with `where`.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare write/non-idempotent/non-destructive, so the description meaningfully adds: the note is session-scoped ('written in this session'), the return shape {success, memoryId, pictures}, and the cascade side effect ('Deleting this memory later deletes its photos'). It does not cover failure modes or what happens if photos have not actually arrived, despite the 'check with muninn_picture_view first' precondition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action and the precondition before the labeling rules, and most sentences carry distinct information. It is dense and slightly run-on in the source-label enumeration, but nothing is padding given 9 parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by disclosing the return payload and the deletion cascade, and it ties the tool into the surrounding flow (view/start/direct, memoryId provenance, 'picture' auto-tag). An agent has everything it needs to finalize a picture memory correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Well beyond the 100%-coverage schema: it defines the pragmatic meaning of each whenSource/whereSource enum value, gives the rule for 'upload_time' (capture time equals upload time in-app), and maps the in-chat picker labels directly onto source values. It also adds a constraint ('Never guess a place or a name from the pixels') that the schema cannot express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Write the picture memory') and situates it in the upload flow ('after the user's photos arrived'). It distinguishes itself from the generic memory siblings via the 'picture' tag and the memoryId lineage from _upload_start/_direct, though it never explicitly contrasts with muninn_memory_add.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit prerequisite ('check with muninn_picture_view first'), names the flow tools behind memoryId, and maps picker labels onto whenSource/whereSource values. It never states when NOT to use this tool or explicitly routes users to muninn_memory_add for non-picture memories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_picture_upload_startAInspect

Upload photos to Muninn: shows a photo picker inside the chat so the user picks the photos there, with nothing attached first. Use whenever the user wants to upload, save, add or keep a photo or picture in Muninn (a moment, a trip, a family picture) and has NOT already attached it in this chat. Never ask the user to attach a photo instead of calling this. If the photos are already attached here and your code can read them, use muninn_picture_upload_direct instead. Returns {memoryId, uploadUrl, expiresAt, maxFiles}. In chats that show app widgets a photo picker appears with this result and posts a message for the user when they finish; tell the user to pick photos in it, and give uploadUrl as a link in case no picker appears. Up to 7 photos, JPEG, PNG or WebP, 10 MB each, for 15 minutes. Photos picked this way keep their original date and camera. When the user is done, call muninn_picture_view with memoryId, then muninn_picture_upload_finish. Nothing is a memory until finish runs.

NameRequiredDescriptionDefault
maxFilesNoHow many photos this memory will hold, 1 to 7. Omit for 7.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (which only flag it as a non-idempotent write), the description discloses the picker/widget behavior, that a message is posted for the user, the return shape {memoryId, uploadUrl, expiresAt, maxFiles}, constraints (7 photos, JPEG/PNG/WebP, 10 MB, 15 minutes), metadata preservation, and the crucial state fact that nothing becomes a memory until finish runs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loads the core action and routing rule, then stacks return values, constraints, and workflow in sequence. Nearly every sentence earns its place, though the return-value and workflow details could be tightened slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description fully covers the return object, the multi-step completion workflow, UI behavior, and hard constraints. An agent has everything needed to call it and guide the user afterward.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one optional parameter and the schema already documents it at 100% coverage, including the 'Omit for 7' default. The description's 'Up to 7 photos' reinforces maxFiles but adds no syntax or meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (upload photos to Muninn) and explains the mechanism (in-chat photo picker). It explicitly distinguishes itself from the sibling muninn_picture_upload_direct based on whether photos are already attached.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit trigger conditions ('whenever the user wants to upload, save, add or keep a photo... and has NOT already attached it'), an explicit exclusion ('Never ask the user to attach a photo instead'), and names the alternative tool plus its selecting condition. It also spells out the surrounding workflow (view, then finish).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_picture_viewA
Read-onlyIdempotent
Inspect

See the photos of a picture memory, or of an upload that has not been finished yet. Returns each photo's thumbnail as an image, plus JSON {memoryId, pictures: [{ord, mime, takenAt, camera, viewUrl, artifactRef}], viewLinksExpireAt}. takenAt and camera are read from the original photo when it carries them (photos picked through the upload page usually do; photos sent through a chat usually do not), so a takenAt here is a date with source 'photo'. viewUrl opens the full original for the user and stops working after 5 minutes, so hand it over now and never save it into a memory. To show a photo inside an HTML artifact, put its artifactRef in an (append /thumb for the 480px version): the artifact renders it for the owner, and publishing copies it, metadata stripped, so the public page shows it through links that expire within the hour. Never put viewUrl or image bytes in an artifact. Use after the user uploads, before writing the note, and whenever the user asks to see a picture memory again.

NameRequiredDescriptionDefault
memoryIdYesThe memoryId returned by muninn_picture_upload_start or _direct, or the id of a picture memory.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare the read-only/idempotent/non-destructive profile, but the description goes well past them: viewUrl expires after 5 minutes and must not be persisted, artifactRef renders for the owner, publishing strips metadata and yields hour-long links, and takenAt/camera provenance depends on upload path. This is unusually rich operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and return shape are front-loaded, and most sentences carry unique operational information. It is dense and slightly long, and the artifact-publishing/expiry theme is touched twice, but little is genuinely wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description itself specifies the return JSON fields and adds the constraints (link expiry, artifact embedding rules) an agent needs. Nothing material for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single memoryId parameter, and the description mostly restates its origin (upload_start/_direct or a picture memory id) rather than adding new meaning. Baseline 3 is appropriate when the schema carries the parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'See the photos of a picture memory, or of an upload that has not been finished yet.' It clearly distinguishes itself from the picture_upload_* siblings by covering the post-upload/pre-finish viewing case, so an agent can route to it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit timing: 'Use after the user uploads, before writing the note, and whenever the user asks to see a picture memory again.' It also states prohibitions ('never save it into a memory', 'Never put viewUrl or image bytes in an artifact'), which function as when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_reconcileA
DestructiveIdempotent
Inspect

Scan all memories for orphan/inconsistency issues across KV, D1 tag index, and Vectorize. Pass repair:true to fix gaps. Returns a report of what was found and (if repair) what was fixed. For large accounts, pass limit + cursor to process one batch per call (a Worker invocation caps at 1000 subrequests) — the report's nextCursor feeds the next call until it's null. With reindexAll:true every memory's vector is re-embedded unconditionally (used for the vector-id format migration) instead of only re-embedding vectors detected as missing.

NameRequiredDescriptionDefault
limitNoMax memories to process this call. Omit to process ALL (may exceed the Worker subrequest cap on large accounts). Use ~150 for batched migration.
cursorNoKV pagination cursor from a previous call's nextCursor. Omit for the first batch.
repairNoIf true, repair gaps: re-index missing D1 tags and re-embed missing Vectorize vectors. If false, report only.
reindexAllNoIf true (with repair), re-embed + re-upsert EVERY memory's vector unconditionally — skips the existence probe (saves one AI call + one query per memory). Use for the vector-id format migration.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral context beyond the annotations: the Worker subrequest cap, one-batch-per-call semantics with nextCursor chaining, and exactly what repair vs reindexAll mutate. It does not explicitly warn about the destructiveHint=true annotation (what gets overwritten), which is a minor gap given the annotation already flags it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then pagination mechanics, then the reindexAll special case. Every sentence carries information, though the final reindexAll sentence is dense and could be tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, no-required-param maintenance tool with no output schema, the description covers invocation modes, batching workflow, migration path, and summarizes the return (a report of found/fixed items plus nextCursor). Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: cursor is tied to the previous call's nextCursor, limit is the batch control, and reindexAll's migration purpose plus its 'skips the existence probe' behavior. This goes beyond the schema descriptions rather than restating them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Scan) plus resource and scope: 'all memories for orphan/inconsistency issues across KV, D1 tag index, and Vectorize.' This is precise enough to separate it from sibling tools like muninn_mirror_reconcile, which operates on a different resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-to-use guidance for each mode: repair:true to fix vs report-only, limit+cursor for large accounts due to the 1000-subrequest cap, and reindexAll:true specifically for the vector-id format migration. It does not name a sibling alternative or state when not to run it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_render_bundleA
Read-onlyIdempotent
Inspect

Render a bundle (an ordered outline of memories for a book or project) as one readable document. format='md' gives the outline as markdown, in order. format='tree' gives a compact outline of slugs. format='okf' gives the bundle as JSON in the OKF v0.1 export format. With format='tree', show_keys adds each item's key and memory id, so a follow-up edit needs no extra lookup.

NameRequiredDescriptionDefault
formatNoOutput format: 'md' (markdown), 'tree' (ASCII), 'okf' (OKF v0.1 JSON)md
rootKeyYesThe node_key of the bundle root
show_idsNo(md only) Append the memory ID to each heading
show_keysNo(tree only) Append [node_key=… memId=…] to each line so one tree call is enough to reslug/repoint/delete without a separate bundle_get.
child_separatorNo(md only) Separator between children ---
child_heading_levelNo(md only) Heading level for memory-backed nodes
include_descriptionsNo(md only) Emit bundle and folder descriptions
section_heading_levelNo(md only) Heading level for section/folder nodes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description goes beyond that by disclosing what each output mode yields and that show_keys embeds keys and memory ids to avoid a second lookup — real behavioral context the annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences with the core action front-loaded and no filler; each sentence maps to a format mode or the show_keys affordance. It is slightly repetitive in enumerating formats that the enum already lists, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter, 1-required read tool with no output schema, the description covers what the primary output shapes look like and what the most consequential flag (show_keys) does. The remaining optional md-only knobs are fully specified in the schema, so no critical gap is left, though the sibling overlap with bundle_export_okf is unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so a baseline of 3 would be defensible, but the description adds genuine meaning: it explains that 'tree' is a compact outline of slugs and that show_keys exists specifically to make a follow-up edit possible without an extra bundle_get. That is rationale, not just a restatement of the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (render) and resource (bundle), and the parenthetical defines the domain object ('an ordered outline of memories for a book or project'), so an agent knows exactly what is being produced. It does not, however, differentiate itself from the sibling muninn_bundle_export_okf, which the 'okf' format appears to overlap with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for choosing among the three format modes (md = readable markdown in order, tree = compact slug outline, okf = JSON export), plus a concrete reason to enable show_keys for a follow-up edit. It stops short of naming when-not-to-use-it or routing to alternatives such as bundle_get or bundle_export_okf.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_session_bootA
Read-onlyIdempotent
Inspect

Load the user's saved Muninn context. Use it when the user asks what you remember, wants to continue earlier work, refers to something only their history would explain, or when their own instructions ask you to load Muninn at the start of a conversation. Tell the user in one line that you loaded it. DATA SENT: the query text goes to Muninn's servers, where it is used to search the user's memories. It is used for that search only and is not stored. Write the query yourself as a short topic drawn from the user's request, never their message pasted verbatim, and leave it empty when no search is needed. Returns {sessionState, identity, coreRules, relevant, mostAccessed, carryover, skills, persona, taskMemories, taskMemoryErrors}. Everything returned is the user's own stored content (including any chat summaries they set up) plus Muninn's built-in skills, for you to use as context. identity holds the identity notes the user saved. coreRules holds the user's global core-ref memories (plus project-scoped ones when project is set): notes the user saved about how they like to be helped. skills is a <muninn_skills> XML block listing the skills the user saved, plus Muninn's own built-in skills. identity, coreRules and skills come only from this account and Muninn's built-in skills, never from another user. relevant is the semantic search result for the query; if the user belongs to a team, it can also include memories another member chose to share with them. mostAccessed is an array of {memoryId, accessCount, preview, project} for the most-fetched memories (project-filtered), ranked by recall x recency, between 10 and 30 entries; each entry is preview-only, so use muninn_memory_get for the full body. persona, when non-null, is the rendered markdown of the user's persona- bundle: the voice and identity they saved for that persona. FOCUS BOOT: pass memoryIds to load exactly those memories in full as taskMemories; sessionState, relevant and mostAccessed then default to off, and includeSessionState/includeRelevant/includeMostAccessed:true turns any of them back on. taskMemoryErrors lists any anchor id that was ambiguous (with candidates) or missing. carryover holds notes from an unfinished session; it is returned but not cleared (the muninn-checkpoint-resume skill backs it up to session-history and then clears it).

NameRequiredDescriptionDefault
queryNoA short topic you write from the user's request, used to search their memories. Never the user's message pasted verbatim. It is sent to Muninn's servers for this search and not stored. Pass empty to skip the search.
personaNoPersona name from 'MUNINN persona:' directive. When set: server renders the 'persona-<name>' bundle in parallel and returns it as the persona field. Returns null if the slug isn't found — no hard failure. Omit when there is no declared persona.
projectNoProject slug from 'MUNINN project:' directive. When set: sessionState is FILTERED to this project plus global (no-project) checkpoints, booted project first — other projects' checkpoints do not load; relevant search boosts project memories; carryover filters to this project only. Identity and skills stay global. Omit for global boot.
memoryIdsNoAnchor memories for a FOCUSED boot — full or short-form (8-char) ID prefixes. When present, these are returned in full as taskMemories AND focus mode kicks in: sessionState, relevant, mostAccessed default to OFF. Use this to start a clean window pointed at exactly the memories the task needs.
includeRelevantNoForce the relevant (semantic search) section on/off. Defaults: ON in normal boot, OFF in focus boot. A semantic search still only fires if query is non-empty.
includeMostAccessedNoForce the mostAccessed section on/off. Defaults: ON in normal boot, OFF in focus boot.
includeSessionStateNoForce the sessionState section on/off. Defaults: ON in normal boot, OFF in focus boot (when memoryIds is set). Set true to keep the where-we-left-off checkpoints even in a focused window.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/idempotent/non-destructive, yet the description adds material context beyond them: the query text is sent to Muninn's servers and not stored, preview-only entries require muninn_memory_get for full bodies, carryover is returned but not cleared, and taskMemoryErrors reports ambiguous/missing anchor ids. It also explains account scoping (team-shared memories, no cross-user leakage).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose and usage before the dense payload description, and every section maps to real behavior. It is long and slightly redundant (the DATA SENT sentence duplicates the query parameter's schema description), but given ten returned fields the length is largely earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description fully documents the returned shape (sessionState, identity, coreRules, relevant, mostAccessed, carryover, skills, persona, taskMemories, taskMemoryErrors) including the focus-mode override semantics. Nothing an agent needs to call and interpret this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description largely restates schema content (query authoring, focus mode defaults, include* toggles); its only genuinely additive parameter-adjacent detail is the anchor-error behavior via taskMemoryErrors, which is not enough to clearly exceed the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource: 'Load the user's saved Muninn context,' which is distinct from sibling tools like muninn_memory_search or muninn_memory_get. It also enumerates the return payload, so an agent can tell this is the session-bootstrap tool rather than a targeted memory fetch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a rich trigger list (user asks what you remember, wants to continue earlier work, refers to history-only facts, or instructions say to load at conversation start) and describes the focus-boot alternative when memoryIds is passed. It does not state an explicit when-not or compare against the nearest sibling (muninn_memory_search) for ad-hoc lookups, so it falls just short of 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_settings_getA
Read-onlyIdempotent
Inspect

Retrieve the current user's settings.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile fully. The description adds only the scoping detail that these are the *current user's* settings (per-user rather than team/global), which is genuinely useful but thin; it says nothing about return format or what settings are included, though no output schema exists to carry that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single nine-word sentence with no filler, front-loading the verb and the scope. Nothing is redundant and nothing is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trivial zero-parameter getter with rich annotations, the description is close to sufficient, but with no output schema it never hints at what the returned settings contain or how an agent should interpret them, leaving a small but real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. The description correctly implies no inputs are needed to scope the call, and there is no parameter information it needed to supply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Retrieve) and resource (settings) with a scope qualifier (current user's), making the read-vs-write split from muninn_settings_update obvious. It does not explicitly name the sibling, but the verb alone disambiguates it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named. Usage is only implied by the verb 'Retrieve' in contrast to the sibling muninn_settings_update, which is adequate but minimal for an operation this simple.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_settings_updateA
DestructiveIdempotent
Inspect

Update user settings. Merges with existing settings — only specified fields are changed.

NameRequiredDescriptionDefault
languageNoPreferred language e.g. en, th
timezoneNoUser timezone e.g. Asia/Bangkok

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-readonly, destructive, idempotent and closed-world, so the safety profile is covered. The description adds genuinely non-structured context — that this is a partial merge where unspecified fields are preserved — which is the key behavior an agent needs before calling it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste, with the merge constraint placed immediately after the purpose so the most important behavioral fact is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-optional-parameter settings tool with full annotation coverage and no output schema, this is nearly complete. Minor gaps remain: whether the response returns the resulting settings, and how unknown keys are handled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both optional parameters (language, timezone) are documented with examples in the schema itself. The description's merge statement reinforces that omitted fields are untouched, but adds no format or validation detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (update) and resource (user settings), so the agent knows exactly what changes. It does not differentiate itself from the obvious sibling muninn_settings_get, but the mutation intent is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer 'call this to change settings' but the description never says when to prefer it, nor points to muninn_settings_get for reading current values first. No exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_skill_checkA
Read-onlyIdempotent
Inspect

Check whether installed Muninn skills are up to date. Send the skills you currently have loaded with their skill-version stamps; returns which are outdated, current, or unknown. Only reports on skills you name.

NameRequiredDescriptionDefault
installedYesThe Muninn skills currently loaded, with their version stamps

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered structurally. The description adds genuine behavioral detail beyond that: the three outcome categories (outdated, current, unknown) and the important scoping caveat that unnamed skills are not evaluated. It omits nothing critical but adds no auth or rate-limit context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each load-bearing: purpose first, invocation/input second, output and scope third. No filler or redundancy, and the most decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description correctly compensates by naming the return categories (outdated, current, unknown) and the reporting scope. For a single-parameter, non-destructive read tool this is nearly sufficient; only the absence of guidance on versionless skills (covered in the schema, not the prose) keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single 'installed' parameter, including per-field docs for name and version. The description restates the same contract ('skills you currently have loaded with their skill-version stamps') without adding format, ordering, or size guidance beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource ('Check whether installed Muninn skills are up to date') with an added scope statement ('Only reports on skills you name'). An agent can immediately distinguish this read-only freshness check from muninn_skill_create, muninn_skill_update, and muninn_skill_delete without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Sets up the usage context clearly ('Send the skills you currently have loaded with their skill-version stamps') and bounds the scope to named skills, so the agent knows what input scenario triggers it. It stops short of naming an explicit alternative (e.g., muninn_skill_registry) or stating when-not to use it, so it does not reach the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_skill_createA
Idempotent
Inspect

Create a new Muninn-native skill from name, description, and body. Stores two memories (entry + body), wires them by ID, and makes the skill available in the next session_boot. Returns entryId and bodyId.

NameRequiredDescriptionDefault
bodyYesFull skill body: trigger phrases, steps, examples.
nameYesSkill name slug e.g. 'muninn-status'. Must be unique.
descriptionYesTrigger description ≤300 chars — shown in the <muninn_skills> list.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=true, and openWorldHint=false. The description goes beyond these by disclosing the internal mechanics (stores two memories, wires them by ID) and the deferred effect (available in next session_boot), which is real value the annotations don't carry. It does not address naming collisions or failure behavior for a duplicate name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with purpose, then side effects, then return values. No filler; every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully names the return values (entryId and bodyId). Combined with full schema coverage and annotation-provided safety profile, an agent has nearly everything needed. It stops short of explaining duplicate-name handling or what 'wires them by ID' implies for later updates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%; each of name, description, and body is documented in the schema with slugs, length limits, and content expectations. The description only restates the parameter names without adding syntax or format meaning, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Create a new Muninn-native skill from name, description, and body.' It is clearly distinguishable from siblings like muninn_skill_update, muninn_skill_delete, and muninn_skill_check without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the verb (you create when a skill doesn't yet exist), and it notes the skill appears in the next session_boot. However, it never explicitly contrasts with muninn_skill_update or muninn_skill_registry, nor states when-not to use it, so no alternative routing guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_skill_deleteA
DestructiveIdempotent
Inspect

Permanently delete a Muninn-native skill by name. Removes both the entry and body memories from all storage layers.

NameRequiredDescriptionDefault
nameYesSkill name slug to delete.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds genuine value beyond that by disclosing scope of destruction: 'Removes both the entry and body memories from all storage layers,' which an agent could not infer from the annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the operation and followed by the destruction scope. No filler, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema tool whose annotations already cover the safety profile, the description is essentially complete: it names the target, permanence, and what is removed. It could go further on failure behavior (e.g., deleting a non-existent skill), but that gap is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is documented as a 'Skill name slug to delete.' The description's 'by name' restates the schema without adding slug format, resolution behavior, or error semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (permanently delete), resource (a Muninn-native skill), and selector (by name). The qualifier 'Muninn-native' scopes the resource, and no sibling tool competes for skill deletion, so an agent can select it unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no prerequisites (e.g., confirmation, ownership), and no exclusions or alternatives (muninn_skill_update for modification). The word 'Permanently' hints at caution but stops short of telling the agent when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_skill_registryA
Read-onlyIdempotent
Inspect

List the skills saved in Muninn, as a <muninn_skills> XML block (name, description and location of each): this account's own skills, plus Muninn's built-in ones. Never another user's. Consult a skill when the user's request matches it: open its instructions with muninn_memory_get, passing the id at the end of its location. Use it to see the user's current skills mid-session, for example right after they create one.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description's added value is the exact return shape (a <muninn_skills> XML block with name/description/location) and the scope exclusion ('Never another user's'). It does not mention pagination, size limits, or auth requirements, so it stops short of full behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the verb and output format, and each sentence carries a distinct idea (what/scope, how to use the result, when to call). The clauses are densely packed, but no line is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by describing the return format and per-item fields. Combined with zero parameters and full annotation coverage, an agent has everything needed to decide when to call this and what it will receive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters (empty object schema), so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly avoids inventing parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list) and resource (skills saved in Muninn), and immediately scopes the result set: this account's own skills plus built-ins, never another user's. An agent can distinguish it from the skill_create/delete/update/check siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('mid-session, for example right after they create one') and when-to-consult-a-skill ('when the user's request matches it'), plus the concrete follow-up (open instructions via muninn_memory_get using the id at the end of the location). That is a full routing path, not just a context hint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_skill_updateA
DestructiveIdempotent
Inspect

Update an existing Muninn-native skill's body and/or description. Finds the skill by name, updates whichever fields are provided, regenerates embeddings. Does not recreate the memories.

NameRequiredDescriptionDefault
bodyNoNew full skill body. Omit to leave unchanged.
nameYesSkill name slug to update.
descriptionNoNew description ≤300 chars. Omit to leave unchanged.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true, idempotent=true, readOnly=false, so the safety profile is covered. The description adds real context beyond them: it regenerates embeddings as a side effect, it performs a partial update (only provided fields change), and it explicitly does not recreate associated memories. It still does not say what happens when the name is not found or what gets overwritten.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero waste, front-loaded with the action and scope before the side-effect and non-effect details. Every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, annotations covering the safety hints, and full schema coverage, the description is close to sufficient: it covers lookup key, partial-update semantics, embedding regeneration, and memory scope. Error/not-found behavior and the response shape remain unspecified, a minor gap given the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description only reinforces the schema ('by name', 'body and/or description', optional omission leaves fields unchanged) without adding format or constraint detail beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Update), resource (an existing Muninn-native skill), and the exact fields in scope (body and/or description), with 'existing' implicitly separating it from muninn_skill_create and muninn_skill_delete. An agent can select this over its skill siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the mechanism ('Finds the skill by name, updates whichever fields are provided') and scopes what it does not do ('Does not recreate the memories'), so usage is implied. But there is no explicit when-to-use vs. muninn_skill_create/muninn_skill_check routing or statement of prerequisites (e.g., skill must already exist).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_statsA
Read-onlyIdempotent
Inspect

Return aggregate corpus statistics for the current user — the shape of the whole memory, counted server-side (no pagination, no bodies read). Fields, in Muninn's own terms: memories (total); associations (bundle edges — the graph, split into contains/reference); bundleNodes and bundleRoots; identity (core-ref+identity memories); instructions (core-ref memories); personas (persona-* bundles); skills; projects and tags (distinct counts — Muninn's open-vocabulary axes, not a fixed type schema); plus byProject and byTag distributions. Use this to answer 'how big is my memory', to show a live corpus snapshot, or to compare against another memory system.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint, but the description adds real behavioral context: counting happens server-side, with no pagination and no memory bodies read. That tells the agent this is cheap and complete, not a sampling call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then a dense field enumeration. It is long, but with no output schema each listed field earns its place by describing the return shape.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because there is no output schema, the description takes on the burden of describing return values, and it does so field by field (memories, associations, bundleNodes, byProject, byTag). Muninn-specific terms are glossed well, so an agent understands what it will receive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the schema carries no semantics to be explained. Baseline is 4; there is nothing for the description to compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Return aggregate corpus statistics') and scopes it to the current user, immediately distinguishing it from the many list/get siblings. An agent can tell this is a read-only aggregate snapshot, not a paginated listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives three concrete use cases ('how big is my memory', live corpus snapshot, compare against another system). It does not explicitly name an alternative tool it should be preferred over (e.g. muninn_memory_list), but the intent is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_table_defineA
DestructiveIdempotent
Inspect

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.

NameRequiredDescriptionDefault
titleYesHuman-readable name, e.g. 'Staff'. Renameable.
fieldsYesThe full field list, in display order. Replaces any existing definition.
tableSlugYesStable identifier, e.g. 'bui-staff'. Permanent — this is how records are filed.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond annotations: explains that re-calls replace (not merge) fields, that `key` is permanent and orphaning risk, that `label` is freely renameable, and precisely what private:true excludes (grid, csv/xlsx export, team views, and that values stay in the encrypted body). This is rich behavioral context annotations alone don't convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded with the update semantics early. Slightly long, especially the trailing textarea explanation and field-type enumeration, but every sentence carries useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A mutation tool with no output schema, yet the description fully covers replacement behavior, permanence rules, privacy effects, and field type options — everything an agent needs to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds real meaning — permanence of key vs renameability of label, the private flag's downstream effects, and practical guidance on textarea vs text (multi-line box, same storage). Adds value beyond the schema's own descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Declare) plus resource (a table) and its fields, with concrete examples (Staff, Sources, Clients). Clearly distinguishable from siblings like muninn_table_record_add or muninn_table_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly documents the critical re-call semantics: calling with the same slug UPDATES the definition and fields replace the current set, so send the whole list not a delta. This is strong when-to/behavioral guidance, though it doesn't contrast with sibling tools like delete or list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_table_deleteA
DestructiveIdempotent
Inspect

Delete a table you declared: its definition and its list of records. The records themselves are kept as ordinary memories (returned as recordMemoryIds), so nothing the user wrote is lost; delete them with muninn_memory_delete only if the user asks. Call only when the user asks to delete or remove a table.

NameRequiredDescriptionDefault
tableSlugYesThe table to delete, as shown by muninn_table_list.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds a genuinely non-obvious behavioral fact: the underlying records survive as ordinary memories and are returned as recordMemoryIds. It does not cover error cases, permissions, or reversibility of the deletion itself, so it falls short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences plus a conditional clause, front-loaded with the action and its scope. The reassurance about records is the one piece of extra information and it earns its place by preventing data-loss anxiety.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one fully documented parameter and no output schema, the description supplies the missing return-value information (recordMemoryIds) and the safety semantics of the deletion. Nothing an agent needs to invoke this correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, and the schema already explains tableSlug and points to muninn_table_list. The description adds no format or syntax detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (delete) and resource (a table you declared), and immediately clarifies the scope of deletion: the definition plus the record list. This distinguishes it from muninn_table_define, muninn_table_list, and muninn_memory_delete without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the triggering condition ("Call only when the user asks to delete or remove a table") and names the alternative tool (muninn_memory_delete) along with the condition under which it should be used instead. Both when-to-use and when-not-to-use are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_table_feedsA
Read-onlyIdempotent
Inspect

List this account's published tables with their addresses, field allowlists, locks and expiries - use when the user asks what data of theirs is public, which tables are published, or wants the URL of a feed again.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so safety is covered; the description adds what the response actually contains (addresses, allowlists, locks, expiries). It doesn't mention auth requirements or pagination, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the operation and resource, then the returned facets and the usage triggers. No filler or repetition of the title/annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, a rich annotation set, and no output schema, the definition supplies exactly what an agent needs: what is listed and when to reach for it. Nothing material is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4; there is nothing for the description to disambiguate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and a precise resource ('this account's published tables') and enumerates the returned facets (addresses, field allowlists, locks, expiries). The 'published' qualifier cleanly distinguishes it from the sibling muninn_table_list, which lists tables generally.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives three concrete trigger conditions ('what data of theirs is public', 'which tables are published', 'wants the URL of a feed again'), which is strong when-to-use guidance. It stops short of naming an alternative tool to rule out, so it isn't a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_table_listA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral context: the counting rule that nested table entries are not counted as parent records, which the agent could not infer from annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and output, then the counting caveat, then the usage trigger. No filler and nothing repeated from the annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still tells the agent what a call returns (tables, their fields, record counts) and clarifies the counting edge case. Nothing material is missing for a zero-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters and 100% schema coverage, so nothing needs documenting and the baseline is 4. The description adds no parameter detail because none exists, which is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('List every table you have declared') and adds the two payload elements (fields and record counts), which makes it trivially distinct from record-level siblings like muninn_table_records_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete trigger statement: 'Use this before adding a record, to check the table exists and to see what fields it expects.' That is a clear when-to-use, but there are no explicit when-not conditions or named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_table_publishA
DestructiveIdempotent
Inspect

Publish a table's records as a live public data feed and page - use when the user says publish this table, share this table, put this board online, give me a URL for this data, or wants a chart or dashboard to read a table without an agent copying it. Returns an unguessable munn.is link that serves the named fields as JSON at /raw and as a rendered table at . The copy stays LIVE: adding or editing a record updates what the link serves. YOU MUST NAME THE FIELDS - there is no way to publish every field, a field added later stays out until you publish again naming it, and a field marked private is refused. Records are capped at 1000 and a large table finishes assembling over one or more muninn_table_refresh calls. Optionally pass name for a readable address under the user's handle (a new name needs the Paid plan; the token link is free), password to gate it, and expiresAt to make it stop. muninn_table_unpublish revokes it.

NameRequiredDescriptionDefault
nameNoOptional readable name, e.g. 'worklist' - becomes <handle>.munn.is/worklist. Letters, numbers and hyphens only. A new or changed name needs the Paid plan; publishing itself does not. Publishing still succeeds if the name is rejected.
fieldsYesThe exact field keys to publish, in the order the page shows them. Required, with no wildcard: this is the allowlist, and it is the whole safety of the feature. Private fields are refused by name.
passwordNoOptional password a reader must type before the page opens, and before /raw answers. Only pass one the user actually stated. It can never be read back - say it to the user now.
expiresAtNoOptional ISO 8601 moment the feed stops serving. Pass null to remove an existing expiry.
tableSlugYesWhich table to publish.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare the safety profile (destructiveHint=true, openWorldHint=true, idempotentHint=true), but the description adds substantial context the annotations cannot convey: the link is unguessable, the copy is LIVE and tracks edits, private fields are refused by name, records are capped at 1000, large tables assemble over one or more muninn_table_refresh calls, a new/changed name needs the Paid plan, and the password can never be read back. These are exactly the operational facts an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then triggers, then return shape, then the hard constraint, then optional params - a sensible information order with essentially no filler. It runs long as a single dense block, and the return-format and constraint sentences could be tightened, but every sentence carries weight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers what it produces (unguessable link, /raw JSON, rendered table), lifecycle behavior (live updates, expiry, password gating, unpublish), limits (1000 records, async assembly), and failure modes (private fields refused, name rejected). Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema by hammering the safety-critical `fields` semantics ("YOU MUST NAME THE FIELDS - there is no way to publish every field, a field added later stays out until you publish again") and by clarifying that publishing still succeeds if a `name` is rejected and that a password cannot be retrieved. Some of this overlaps the schema text, keeping it short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Publish a table's records as a live public data feed and page") and immediately distinguishes itself from siblings by naming muninn_table_unpublish as the revoke counterpart and by describing the URL/JSON output that no other sibling produces. An agent can route here versus muninn_artifact_publish without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit natural-language triggers ("publish this table, share this table, put this board online, give me a URL for this data") plus the intent case (a chart/dashboard reading the table without an agent copying it). It also names the inverse tool, muninn_table_unpublish, and states a clear constraint (no wildcard, must name fields), which functions as a when-not condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_table_record_addAInspect

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.

NameRequiredDescriptionDefault
tagsNoOptional tags. Filing into a table is NOT a tag — it is structural — so no table tag is added for you.
valuesYesField values keyed by field key, e.g. {"role":"Engineer","status":"active"}. Unknown keys are rejected.
projectNoProject slug to scope this record.
tableSlugYesWhich table to file this record into. Must already be declared.
occurredAtNoISO 8601 datetime of when this actually happened, if not now. Useful for backfilling log entries.
parentRecordIdNoMemory id of the parent record. Set this to add an entry to that record's nested table (a log entry under a profile).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real context beyond annotations: unknown keys are rejected, nesting is capped at one level, and it returns {recordId} usable by muninn_memory_get/update. Annotations already cover the mutation/safety profile (readOnlyHint=false, idempotentHint=false), so this is solid added value, though it doesn't detail failure modes or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences that front-load the core action, then conditional nesting guidance, then the return value. No wasted prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but the description explicitly states the return shape ({recordId}). Combined with nesting rules and key-validation behavior, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds meaning: `values` is keyed by field key, and parentRecordId carries the nested-table semantics. This clarifies how parameters interact beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb 'Add' + resource 'record to a table', clearly distinct from siblings like muninn_table_define (schema creation) and muninn_table_records_list (reading). An agent can immediately tell what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Points the agent to muninn_table_list for field keys and explains the parentRecordId condition for filing nested log entries under a standing record. It gives clear usage context but stops short of explicit when-not-to-use guidance or naming a closest alternative to compare against.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_table_records_exportA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
limitNoHow many records to read in this call.
formatNojson returns rows as objects; csv quotes every field, which is what multi-line and Thai bodies need.json
offsetNoWhere to resume from. Use the nextOffset the previous call returned.
tableSlugYesWhich table to export.
includePrivateNoInclude fields marked private:true. Ignored for csv, which never carries private values.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/idempotent annotations: it discloses the private-field policy and its csv exception ('NEVER included in csv at all, whatever includePrivate says'), the per-record subrequest cost, and that the response signals remaining data. These are exactly the behavioral traits annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool is, then layers return shape, privacy policy, and pagination cost in short purposeful clauses. Dense but nearly every sentence adds operational value; mildly long for the surface area.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by describing the return column order (recordId then fields in declared order) and the pagination signal. An agent has everything needed to call and interpret results correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the schema documents every parameter including csv quoting and the private-field behavior. The description usefully reinforces the csv-never-private rule and the limit/offset pattern but adds little that the schema does not already carry, matching the baseline for full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Export a table's records') and immediately positions it against the sibling import tool, framing export as the verification counterpart. An agent can distinguish it from muninn_table_records_import/list without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the paired import tool and the verification use case, and gives an explicit condition to paginate ('pass limit/offset on a large table'). It does not, however, clarify when to prefer this over the closely-related muninn_table_records_list sibling, leaving one alternative ambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_table_records_importA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
tagsNoTags merged into every record's own tags.
dryRunNoTRUE BY DEFAULT. Validate and report without writing. Pass false to commit.
projectNoProject slug applied to every record that does not set its own.
recordsYesThe records to import, in order. Their INDEX in this array is what error messages and the per-record result refer to.
maxWritesNoHow many records to commit in THIS call. Defaults to 6, which keeps one call within the server's per-call limit. Call again to commit the rest.
tableSlugYesWhich table to import into. Must already be declared with muninn_table_define.
upsertKeyNoField keys forming a natural key, e.g. [source_file, worksheet]. Requires reading existing records, so it is refused on tables larger than 300 rows.
onConflictNoWhat to do when upsertKey matches an existing record. Only meaningful with upsertKey.error

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only flag destructive/non-idempotent writes, but the description adds a great deal beyond them: dryRun defaults to true, the whole batch is validated before any write, all errors return at once with record index, values are not coerced, and writes are budgeted with remaining/nextIndex for tail re-sends. That is exactly the operational context an agent needs for a destructive mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core behavior (bulk import, dryRun default) and then ordered by operational concern: validation, coercion, idempotency, budgeting. Dense but every sentence carries a distinct, actionable fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still explains the key return signals (per-record errors with index, remaining, nextIndex), so an agent knows how to react to the response. For an 8-parameter destructive bulk tool, nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: the upsertKey + onConflict:update pairing that makes re-runs idempotent, the dryRun flow, and the per-call write budget tied to maxWrites. It goes beyond restating the schema without contradicting it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

'Import MANY records into one table in a single call' states a specific verb, resource, and scope. The 'MANY ... in a single call' framing cleanly distinguishes it from the singular sibling muninn_table_record_add without needing to open either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context: use the first call as dryRun to validate, re-call with dryRun:false to commit, and pass upsertKey with onConflict:update when re-running should be idempotent. It never explicitly names the alternative single-record tool, so the when-to-use-vs-sibling guidance is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_table_records_listA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
resolveNotrue = also read each record body and return its field values (private fields excluded).
tableSlugNoList the top-level records of this table.
parentRecordIdNoList the nested table under this record instead. Takes precedence over tableSlug.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/idempotent properties, and the description adds real context beyond them: the default is a cheap ids-and-positions listing that reads no bodies, resolve:true triggers body reads, and private fields are filtered out. It does not mention pagination or limits, keeping it at a 4.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the primary operation, then the nested case, then the cost/resolve tradeoff. Every clause carries information; nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must describe return shape — it does, covering both the cheap ids/positions mode and the resolved field-values mode, plus the private-field exclusion. For a 3-param read tool this is sufficient to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning: parentRecordId takes precedence over tableSlug (an interaction the schema only implies), resolve is explicitly framed as an opt-in body read, and the nested listing is described as a record's 'log'. This raises it above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a specific verb+resource ('List the records in a table, in order') and immediately distinguishes the nested-table variant via parentRecordId. An agent can separate this from muninn_table_list (tables vs records) and muninn_table_records_export without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing: use parentRecordId to list a nested table / a record's log instead of tableSlug, and resolve:true when bodies are needed. It stops short of stating when-not to use the tool or naming a preferred alternative for large listings, so it falls just below a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_table_refreshA
DestructiveIdempotent
Inspect

Continue building a published table's public copy, or rebuild it from scratch - use after muninn_table_publish says records remain, or when a table was changed by something other than the record tools and the feed looks stale. Reads up to 100 record bodies per call and reports how many remain. In normal use a feed needs no refreshing at all: adding, editing and deleting records patch the public copy as they go.

NameRequiredDescriptionDefault
rebuildNoStart again from the first record, discarding the current copy's rows. Use when the table was edited outside the record tools.
tableSlugYesWhich published table to continue building.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true; the description complements this with concrete behavior: batching at up to 100 record bodies per call, reporting how many remain, and that record edits normally patch the copy automatically. It does not spell out that rebuild discards existing rows in the prose (that lives in the schema), so slightly short of full coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action, followed by the triggering condition, throughput behavior, and the important reassurance that routine edits patch the feed automatically. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so by stating it 'reports how many remain'. Combined with annotations covering destructiveness and open-world behavior, the definition is close to complete, though it omits any note on permissions or failure modes for a rebuild.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (tableSlug, rebuild) are already fully documented, including the discard semantics of rebuild. The description adds the practical throughput note (100 records per call) but no additional parameter-level meaning; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Continue building a published table's public copy, or rebuild it from scratch') and explicitly distinguishes the two modes. It also names the sibling muninn_table_publish as the trigger, so an agent can route between them without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use conditions ('after muninn_table_publish says records remain', 'when a table was changed by something other than the record tools') and a when-not-to-use signal ('in normal use a feed needs no refreshing at all'). This is exactly the routing guidance an agent needs versus the record tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_table_unpublishA
DestructiveIdempotent
Inspect

Stop serving a published table - use when the user says unpublish this table, take this board down, revoke that data link, or make this private again. The address stops answering immediately and the public copy is deleted. The table and its records are untouched. A later publish mints a NEW link: the old one never comes back.

NameRequiredDescriptionDefault
tableSlugYesWhich published table to take down.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavior beyond annotations: the address stops answering immediately, the public copy is deleted, the underlying table and records remain, and republishing creates a new link while the old one never returns. These details clarify the destructive and idempotent effects declared by annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four tight sentences, front-loads the core action, then adds trigger examples and key consequences. Every sentence contributes useful selection or behavioral information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation with no output schema, the description covers what happens to the public address, the public copy, the underlying records, and future links. An agent has enough information to invoke it correctly and understand the effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single tableSlug parameter is fully described in the schema as “Which published table to take down,” and the description adds only broad context about the published table. With 100% schema coverage, the schema carries parameter semantics sufficiently; the description does not add format or identifier details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: “Stop serving a published table.” It distinguishes the operation from deletion by saying “The table and its records are untouched,” and clearly contrasts with publish by noting a later publish creates a NEW link.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete user phrases that should trigger it: “unpublish this table,” “take this board down,” “revoke that data link,” or “make this private again.” It does not explicitly name a sibling alternative such as table_delete, but the “records are untouched” line implicitly clarifies when this is not a delete operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_task_addAInspect

Create a task memory — a memory carrying task fields (entityType 'task'). Use for to-dos and calendar-shaped events, not for ordinary notes. taskType 'todo' uses dueDate; taskType 'event' uses startTime/endTime. recurrence is a raw RRULE string (RFC 5545, e.g. 'FREQ=WEEKLY;INTERVAL=2'), stored verbatim and passed through untouched. remindTauDays sets how early this task starts nagging (the urgency ramp) — bigger tasks can warn earlier than the global 3-day default; leave unset to use the default. calendarOnly true puts it on the calendar but never reminds about it (not at boot, not per call, not even overdue): use it for dates to know, not act on. Returns a compact {success, memoryId, length}, same shape as muninn_memory_add.

NameRequiredDescriptionDefault
tagsNoTags for categorization, same as muninn_memory_add.
textYesTask title, optionally followed by a blank line and notes (first line = title).
dueDateNoISO 8601 datetime — required for taskType 'todo'.
endTimeNoISO 8601 datetime — optional for taskType 'event'.
projectNoProject slug to scope this task. Omit for user-global.
taskTypeYes'todo' uses dueDate; 'event' uses startTime/endTime.
remindersNoReminder specs (VALARM). Omit for no reminders.
startTimeNoISO 8601 datetime — required for taskType 'event'.
recurrenceNoRaw RRULE string (e.g. 'FREQ=WEEKLY;INTERVAL=2'), stored verbatim. Omit for a one-off task.
calendarOnlyNotrue = on the calendar only, never surfaced as a reminder. Omit or false for a normal task that reminds.
remindTauDaysNoPer-task override of the urgency ramp, in days. Omit to use the global default (3 days). A bigger tau means the task starts surfacing earlier relative to its due date.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the safety profile (non-readonly, non-destructive, non-idempotent), so the description carries real weight and delivers: recurrence is stored verbatim/passed through untouched, remindTauDays overrides the global 3-day urgency ramp, and calendarOnly means never reminded even when overdue. It also states the return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose then parameter semantics; nearly every clause adds decision-relevant information. It is dense and reads as one long run-on paragraph, but there is no filler sentence to cut.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter mutation tool with no output schema, the description covers creation semantics, field coupling, reminder behavior, recurrence handling, and the return shape. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes well beyond the terse schema strings: it explains the urgency-ramp semantics of remindTauDays, the behavioral consequence of calendarOnly ('not at boot, not per call, not even overdue'), and the verbatim RRULE storage. These are meaning-additions, not restatements.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Create a task memory') and immediately defines the distinguishing trait (entityType 'task'). It explicitly contrasts itself with sibling muninn_memory_add by ruling out ordinary notes, so an agent can pick it without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both when-to-use ('to-dos and calendar-shaped events') and when-not ('not for ordinary notes'), and further routes within the tool by taskType (todo -> dueDate, event -> startTime/endTime). The alternative for plain notes is clearly implied via the muninn_memory_add reference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_task_completeAInspect

Mark a task complete. For a recurring task (recurrence set), this does NOT close it — it rolls dueDate forward to the next RRULE occurrence and keeps taskStatus at 'needs-action', so the task reappears for its next occurrence. Only simple FREQ=DAILY/WEEKLY/MONTHLY/YEARLY[;INTERVAL=n] rules can be rolled forward; a more complex RRULE (BYDAY, COUNT, UNTIL, etc.) falls back to closing the task as completed — the response's rolled field tells you which happened.

NameRequiredDescriptionDefault
taskIdYesThe task's memory ID (full UUID or unique 8-char prefix).

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations only telling us this is a non-destructive, non-idempotent write, the description carries the real burden and delivers: it explains that recurring tasks are NOT closed but rolled to the next RRULE occurrence with taskStatus kept at 'needs-action', lists exactly which RRULE shapes can be rolled, and discloses the fallback (close as completed). It even names the response field (`rolled`) that reveals which path was taken. This is well beyond what the annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The primary action is front-loaded in one short sentence, followed by a dense but relevant second sentence covering the recurring-task exception, the RRULE restriction, the fallback, and how to detect which occurred. No sentence is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by naming the `rolled` response field and explaining its meaning, which is exactly the information an agent needs to interpret the result. For a one-parameter mutation tool, the description is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter, taskId, and schema coverage is 100%, so the schema already documents that it accepts a full UUID or 8-char prefix. The description adds no syntax or format detail for the parameter itself, which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ("Mark a task complete") and immediately qualifies the semantics for recurring tasks, so the agent knows exactly what operation this is. It does not name or differentiate against close siblings like muninn_task_update or muninn_task_snooze, which could also touch task status, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description effectively describes conditional behavior (simple RRULEs roll forward, complex ones close), which doubles as guidance about outcomes, but it never states when to prefer this tool over muninn_task_update or muninn_task_delete. Usage is implied by the outcome descriptions rather than explicitly contrasted with alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_task_deleteA
DestructiveIdempotent
Inspect

Permanently delete a task memory by ID from all storage layers. Same as muninn_memory_delete but named for the task workflow.

NameRequiredDescriptionDefault
taskIdYesThe task's memory ID (full UUID or unique 8-char prefix).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is conveyed structurally. The description adds two genuinely useful facts beyond that: the deletion is permanent and it propagates across "all storage layers." It does not cover auth requirements, cascade effects on related bundles/edges, or whether the operation can be undone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The destructive effect and scope are front-loaded in sentence one, and sentence two is purely a routing disambiguation rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter delete with annotations covering the safety profile and a fully documented schema field, the description covers what an agent needs to select and call it. No output schema exists, but a delete confirmation needs little explanation; the only minor gap is what happens to dependent task data when the memory is removed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — the taskId parameter is fully documented in the schema, including the full-UUID-or-8-char-prefix format — so the baseline is 3. The description adds no format, matching, or ambiguity-resolution detail beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Permanently delete a task memory"), names the identifier used (by ID), and gives scope ("from all storage layers"). It also explicitly distinguishes itself from the sibling muninn_memory_delete and situates itself in the task workflow alongside muninn_task_add/update/complete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause "Same as muninn_memory_delete but named for the task workflow" tells an agent which sibling to prefer when operating on tasks versus generic memories, which is real routing guidance. It stops short of explicit when-not conditions (e.g., use muninn_task_complete or muninn_task_snooze instead when the goal is archival rather than removal).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_task_listA
Read-onlyIdempotent
Inspect

List task memories, filtered by project/status/due window. Backed by the D1 idx_due index (user_id, due_date, task_status), never a KV scan — cheap even at scale. Returns compact rows {memoryId, taskStatus, dueDate, project}; use muninn_memory_get for the full task body.

NameRequiredDescriptionDefault
limitNoMaximum rows to return.
statusNoRestrict to this task status.
projectNoRestrict to this project slug.
dueAfterNoISO 8601 — only tasks due after this instant.
dueBeforeNoISO 8601 — only tasks due before this instant.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds real behavioral context beyond them: it is index-backed (idx_due) rather than a KV scan and is therefore cheap at scale, and it discloses the compact return shape {memoryId, taskStatus, dueDate, project} — useful since there is no output schema. Ordering and pagination behavior are not stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: what it lists, why it is cheap, and what it returns plus where to go for more. The scope and the sibling pointer are front-loaded and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly compensates by naming the returned fields, and annotations cover the safety profile. It stops short of describing result ordering or default/limit behavior, which an agent listing tasks might reasonably want.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters (limit, status, project, dueAfter, dueBefore) are already documented, including the enum and ISO 8601 formats. The description only restates the filter axes at a high level ('project/status/due window') and adds no syntax or semantics beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (list task memories) plus its filtering dimensions (project/status/due window) and explicitly names the sibling that returns full bodies (muninn_memory_get). An agent can distinguish this from muninn_memory_list and muninn_memory_get without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear routing rule: use this for compact task rows, use muninn_memory_get for the full task body. It does not address the other near-neighbours (muninn_memory_list, muninn_memory_query, muninn_memory_search), so the when-not-to-use side is only partially covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_task_snoozeAInspect

Snooze a task: hide it from reminders (session boot and per-call) until a given time. This is a statement about ONE task, not the whole reminder list. Pass EITHER until (an exact ISO 8601 instant) OR durationMinutes (snooze from now for N minutes) — not both. Hard rule: a snoozed task still reappears immediately once it reaches or passes its due date (urgency >= 1), even if snoozed_until hasn't arrived yet. Snoozing something that's already overdue has no visible effect for that reason. Pass until as '' (empty string) to clear an existing snooze.

NameRequiredDescriptionDefault
untilNoISO 8601 datetime to snooze until. Pass '' to clear an existing snooze. Mutually exclusive with durationMinutes.
taskIdYesThe task's memory ID (full UUID or unique 8-char prefix).
durationMinutesNoSnooze starting now, for this many minutes. Mutually exclusive with until.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only tell the agent this is non-read-only, non-idempotent and non-destructive. The description adds the behavioral traits an agent actually needs: the hard rule that a snoozed task reappears at/after its due date regardless of snoozed_until, and the consequently no-op nature of snoozing an already-overdue task. That is exactly the kind of consequence disclosure the annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and effect, then the two mutually exclusive input modes, then the exception rule, then the clear operation. Every sentence carries information, though the mutual-exclusivity statement and the empty-string clearing duplicate the schema text and could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-param mutation tool with full schema coverage, no output schema and annotations covering only safety hints, the description supplies everything else: effect, scoping, input mode exclusivity, the due-date override rule, and the clear path. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is already 100% and the schema itself states the mutual exclusivity and the empty-string clear behavior. The description reinforces those semantics and adds the 'from now' framing for durationMinutes and the instant framing for until, but adds little genuinely new parameter information beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Snooze a task') and immediately defines the effect ('hide it from reminders (session boot and per-call) until a given time'). It also disambiguates scope explicitly: 'This is a statement about ONE task, not the whole reminder list,' which lets an agent separate this tool from sibling task operations without inspecting any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear conditional rule for the two input modes ('Pass EITHER until ... OR durationMinutes — not both') and a recovery path ('Pass until as "" to clear an existing snooze'). It does not name a sibling alternative (e.g., muninn_task_update for non-snooze changes), so the when-to-use guidance is strong but not fully comparative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_task_updateA
DestructiveIdempotent
Inspect

Update a task's fields. Reuses the memory update path (text/tags/project all work as in muninn_memory_update), plus task-specific fields (taskStatus, dueDate, startTime, endTime, recurrence, reminders, remindTauDays, calendarOnly). Only pass the fields you want changed. taskId may be a short-form 8-char prefix.

NameRequiredDescriptionDefault
tagsNoNew tags (replaces existing tags).
textNoNew title/notes text — replaces the whole body.
taskIdYesThe task's memory ID (full UUID or unique 8-char prefix).
dueDateNoNew due date (ISO 8601) — for taskType 'todo'.
endTimeNoNew end time (ISO 8601) — for taskType 'event'.
projectNoNew project slug. Pass '' to clear back to global.
remindersNoNew reminder list — replaces the existing one.
startTimeNoNew start time (ISO 8601) — for taskType 'event'.
recurrenceNoNew raw RRULE string, stored verbatim. Pass '' to clear.
taskStatusNoNew task status.
calendarOnlyNotrue = calendar only, stop reminding. false = remind again. Only changed when passed.
remindTauDaysNoNew per-task urgency ramp override, in days. Only changed when passed. There is currently no way to clear an override back to the global default through this tool once set (not covered by the addendum BRD) — flagged as a known gap, not silently decided.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the mutation and repeatability profile is covered. The description adds meaningful context beyond that: partial-update semantics ('Only pass the fields you want changed'), short-form taskId support, and a candid known gap about being unable to clear remindTauDays once set. It stops short of covering auth requirements or success/error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the core action and the shared-path context before the list of task-specific fields. The parenthetical list is informative and nothing is wasted; the partial-update rule and taskId prefix note are placed efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter mutation tool with no output schema and annotations covering safety, the description is largely complete: it explains scope, shared semantics, partial-update behavior, and a known limitation. It would be stronger if it clarified when to prefer this tool over task_complete/task_snooze or how taskId lookup failures manifest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 12 parameters. The description adds a cross-tool semantic reference ('text/tags/project all work as in muninn_memory_update') that is not in the schema, and groups task-specific fields for quick orientation. This meaningfully exceeds the baseline 3 for fully covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Update) and resource (a task's fields), and distinguishes this tool from its sibling muninn_memory_update by noting that text/tags/project share that path. It also enumerates the task-specific fields that set it apart, so an agent can identify it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage rule ('Only pass the fields you want changed') and routes shared-field semantics to muninn_memory_update. However, it does not explicitly address when to use this generic update versus specialized siblings like muninn_task_complete or muninn_task_snooze, leaving that choice to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_team_add_memberA
DestructiveIdempotent
Inspect

Add a user to a team as a member. Caller must be the team owner. Paid plan only: both the owner and the person being added must be on the paid plan. To make someone an owner, use muninn_team_transfer_owner.

NameRequiredDescriptionDefault
teamIdYesTeam ID.
userIdYesUser ID of the person to add.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=true, idempotentHint=true), so the description carries a lighter burden. It adds genuine context the annotations lack: authorization requirements (owner-only) and billing constraints (paid plan for both users). It does not note idempotency or what happens to an already-present member, leaving a small gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly-packed sentences: core action first, then prerequisites, then the alternative-tool redirect. No filler, and the most important behavioral constraint is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with no output schema, this covers action, authorization, billing prerequisite, and sibling routing. Only minor gaps remain (idempotency behavior on re-add, failure modes), which is why it falls short of a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with both parameters documented as Team ID and User ID, so the schema does the heavy lifting. The description only restates 'user to add' and adds no format, syntax, or sourcing guidance beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Add a user to a team as a member') and distinguishes itself from the ownership-changing sibling by naming muninn_team_transfer_owner directly. An agent can tell it apart from muninn_team_invite and muninn_team_transfer_owner without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states two prerequisites (caller must be the team owner; paid plan required for both parties) and names the alternative tool for the ownership case. When-to-use, constraints, and the routing alternative are all present with nothing left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_team_createAInspect

Create a new team. The caller becomes the owner and first member. Returns the new teamId. Paid plan only.

NameRequiredDescriptionDefault
nameYesHuman-readable team name.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the mutation profile (readOnly=false, destructive=false, idempotent=false), and the description adds real context beyond them: the caller becomes owner and first member (a side effect), the plan gate, and the returned teamId. It does not mention e.g. name uniqueness or limits, so it stops short of 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the core action, and every statement (ownership side effect, return value, plan gate) carries distinct value with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully states the return value (teamId) and the ownership side effect, and adds the plan requirement. It is close to complete; minor unknowns like name uniqueness or member limits remain unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema description coverage is 100%, so the schema already documents 'name' fully. The description adds nothing about the parameter, which matches the baseline 3 when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Create a new team') that is unambiguous against team siblings like muninn_team_add_member, muninn_team_delete, and muninn_team_list. An agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides one hard precondition ('Paid plan only') but offers no alternatives or when-not-to-use guidance. There is no routing advice toward related team tools, so usage is only partially implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_team_deleteA
DestructiveIdempotent
Inspect

Delete a team permanently. This cannot be undone. Caller must be the team owner. Removes all members, share rules, and (for an encrypted team) the team keys. Ask the user to confirm first, then pass the team's exact name as confirmName; a name that does not match is refused and nothing is deleted.

NameRequiredDescriptionDefault
teamIdYesTeam ID.
confirmNameYesThe team's exact name, as the user confirmed it. Must match the team's current name or nothing is deleted.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, but the description adds substantial beyond them: irreversibility, the owner authorization requirement, the exact cascading side effects (all members, share rules, and team keys for encrypted teams), and the refusal semantics on a mismatched name. This is precisely the context a mutation tool needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the destructive warning, then prerequisites, then side effects, then the call mechanics. Four sentences, each carrying distinct information with no repetition of the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only two parameters, the description covers everything an agent needs: safety profile, authorization, blast radius, confirmation protocol, and failure behavior. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented, but the description adds the intent behind confirmName — that it must come from an explicit user confirmation and acts as a guard that aborts the delete on mismatch. That is meaning beyond the schema wording, though teamId gets no extra commentary.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ("Delete a team") with immediate scope qualifier "permanently". It is clearly distinguishable from siblings like muninn_team_remove_member, muninn_team_share_remove, or muninn_team_transfer_owner, since the description enumerates what is torn down alongside the team.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition ("Caller must be the team owner") and a required workflow ("Ask the user to confirm first, then pass the team's exact name"). It never names an alternative tool for reversible/partial operations, so it falls short of a full when/when-not routing statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_team_inviteAInspect

Invite someone to a team by email. Caller must be the team owner, on the paid plan. For an encrypted team, the invite carries the team key wrapped to a single-use token so the invitee can read team memories once they accept.

NameRequiredDescriptionDefault
emailYesEmail address of the person to invite.
teamIdYesTeam ID.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, openWorld=true, idempotent=false, destructive=false. The description adds genuinely new behavioral context beyond them: the owner/paid-plan authorization requirement and the encrypted-team key-wrapping-to-single-use-token mechanism. It does not cover delivery (does an email get sent?), rate limits, or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: action first, then prerequisites, then the edge-case behavior for encrypted teams. No filler, and the most decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and only two fully documented parameters, the description covers what an agent most needs: what it does, who may call it, and the non-obvious encryption consequence. Only the post-invocation lifecycle (invite email, acceptance via muninn_team_invite_accept) is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both parameters, so the schema already documents teamId and email. The description adds no format or constraint detail beyond it, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Invite someone to a team by email') with a clear scope. The 'by email' qualifier implicitly separates it from muninn_team_add_member, but no sibling is named, so differentiation requires the reader to infer it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit preconditions are given: the caller must be the team owner and on the paid plan. There is no statement of when NOT to use it or a pointer to muninn_team_invite_accept / muninn_team_add_member as alternatives, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_team_invite_acceptA
Idempotent
Inspect

Accept a team invite using the token from your invite email. Joins the team and, for an encrypted team, obtains the team key so you can read shared memories. Joining needs a plan that includes teams; if the joiner's plan does not, the invite is refused and stays valid.

NameRequiredDescriptionDefault
tokenYesThe invite token from your invite email.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare the safety profile (not read-only, idempotent, non-destructive, closed-world), and the description adds real behavioral context beyond them: the team-key retrieval side effect for encrypted teams and the failure semantics ('invite is refused and stays valid') when the plan lacks teams. It stops short of describing response shape or any rate/auth details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the action front-loaded, followed by effects and then the failure condition. Every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description covers the important outcome (team membership, team key) and the notable failure mode. Nothing essential for correct invocation appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, so the schema already carries the meaning. The description's phrase 'the token from your invite email' merely restates what the schema says, adding no format or validation detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Accept a team invite') plus the concrete side effects: joining the team and, for encrypted teams, obtaining the team key. This clearly separates it from sibling muninn_team_invite, which creates invites rather than consuming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the trigger condition (you hold a token from an invite email) and a prerequisite (the joiner's plan must include teams). It does not explicitly name an alternative tool, but the usage context is unambiguous for a token-consuming accept operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_team_invites_listA
Read-onlyIdempotent
Inspect

List pending invites for a team. Caller must be the team owner.

NameRequiredDescriptionDefault
teamIdYesTeam ID.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds the authorization requirement (owner-only), which is genuinely useful and not in the annotations, but it says nothing about what 'pending' includes or the return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, purpose front-loaded, with the access constraint following immediately. No filler whatsoever.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only list tool with no output schema, the description covers what it does and the key access constraint. A note on the expected return contents would round it out, but nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single teamId parameter is fully documented in the schema (100% coverage), so the schema does the heavy lifting. The description adds nothing about the parameter beyond what is already structured, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (pending invites for a team), which distinguishes it from the mutating sibling muninn_team_invite and muninn_team_invite_accept. It doesn't explicitly name a sibling to route against, but the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear precondition (caller must be the team owner), which is real usage context, but gives no when-to-use vs. alternatives guidance or exclusions. Implied usage only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_team_listA
Read-onlyIdempotent
Inspect

List the teams the user belongs to, as owner or member. Use it to find a teamId before sharing memories, inviting someone, or listing a team's shares or invites. Returns {teams: [{teamId, name, createdBy, createdAt}]}. An empty list means the user is in no team.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context beyond them: the exact return shape and the meaning of an empty list ('the user is in no team'), which is the main ambiguity for a scoped list call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with purpose, then usage routing, then return contract. Every sentence carries information an agent needs; nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description supplies the return shape ({teams: [{teamId, name, createdBy, createdAt}]}) and the empty-list semantics, and it routes the agent to the consuming tools. Nothing needed to call or interpret this zero-arg tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to disambiguate, and it correctly avoids inventing filtering options that do not exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (teams the user belongs to) plus the membership scope (owner or member). An agent can distinguish it from muninn_team_shares_list, muninn_team_invites_list, and muninn_team_create without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit usage context: 'Use it to find a teamId before sharing memories, inviting someone, or listing a team's shares or invites' — naming the downstream operations that consume the returned teamId. It does not state a when-not condition or explicitly name a competing sibling, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_team_remove_memberA
DestructiveIdempotent
Inspect

Remove a member from a team. Caller must be the team owner (or removing themselves). The sole owner cannot be removed — transfer ownership or delete the team first. Available on every plan.

NameRequiredDescriptionDefault
teamIdYesTeam ID.
userIdYesUser ID of the member to remove.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds real value beyond them: the authorization rule (owner or self) and the sole-owner edge case. It stops short of saying what happens to the removed member's data or shared resources.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then preconditions, then the edge case. Every sentence carries distinct information with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive two-parameter mutation with no output schema, the description covers who may call it, the blocking edge case, and plan availability. It omits side effects (what happens to the removed user's artifacts/shares) and error behavior, which is a minor gap given the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (teamId, userId) are documented in the schema, so the schema does the heavy lifting. The description only echoes 'the member to remove' and adds no format or constraint detail beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove a member from a team') and the constraints ('transfer ownership or delete the team first') implicitly distinguish it from muninn_team_transfer_owner and muninn_team_delete. An agent can tell what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete preconditions: caller must be the team owner or the member themselves, and the sole owner cannot be removed. It doesn't explicitly name the sibling tools to use instead, but the routing ('transfer ownership or delete the team first') is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_team_share_addA
Idempotent
Inspect

Share all memories with a given tag into a team. Team members will see these memories in their search and session boot results automatically. Paid plan only (removing a share with muninn_team_share_remove is free).

NameRequiredDescriptionDefault
tagYesTag to share (e.g. 'project-x').
teamIdYesTeam ID to share into.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false, openWorldHint=true), the description discloses the observable consequence — team members see shared memories automatically in search and session boot — plus plan gating and the cost asymmetry of undo. It doesn't cover duplicate-share behavior or propagation timing, but that is largely covered by idempotentHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero filler, and the core action is front-loaded with the plan caveat and undo pointer appended. Every sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema to explain, annotations carry the safety profile, and the description still adds the effect on team members, the plan requirement, and the removal counterpart. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented; baseline is 3. The phrase 'all memories with a given tag' mildly clarifies that tag is a batch filter rather than a single memory reference, but adds no format or constraint detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (share) plus scope (all memories with a given tag) and destination (a team). It is immediately distinguishable from the inverse sibling muninn_team_share_remove, and an agent can act without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the operative context (paid plan only) and points to muninn_team_share_remove for the reverse action, including that removal is free. It does not spell out when-not-to-use or prerequisites around team membership, but the usage picture is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_team_share_removeA
DestructiveIdempotent
Inspect

Revoke a share rule. Only the owner of the share rule (or team owner) can remove it.

NameRequiredDescriptionDefault
tagYesTag that was shared.
teamIdYesTeam ID.
ownerIdYesUserId who created the share rule.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds the auth requirement (only owner or team owner), which is exactly the kind of behavioral context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and followed by the permission constraint. No filler, every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive removal tool with full schema coverage and rich annotations, the description covers the action and the key precondition. It omits what the response returns or any post-removal effect, but with no output schema this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each of the three parameters (tag, teamId, ownerId) documented in the schema. The description adds no parameter detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Revoke a share rule'), making the destructive action unambiguous. It is distinguishable from muninn_team_share_add and muninn_team_shares_list by the verb alone, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies an authorization precondition (owner or team owner), which is genuine usage context. It does not, however, state when to prefer this over siblings like muninn_team_shares_list or the conditions under which a share rule should be revoked.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_team_shares_listA
Read-onlyIdempotent
Inspect

List all active share rules for a team. Shows which tags each member has shared.

NameRequiredDescriptionDefault
teamIdYesTeam ID.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description still adds real context beyond that: results are limited to *active* rules and reveal tag-sharing per member. It omits pagination/return-shape detail, but the additions are meaningful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with zero filler, front-loading the operation and then the content shown. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only list tool with rich annotations and no output schema, the description covers purpose and payload adequately. Only pagination/ordering expectations are unaddressed, which is minor here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is exactly one required parameter (teamId), fully documented in the schema. The description adds no syntax, format, or scoping nuance beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (List) and resource (active share rules for a team) and clarifies the payload ('which tags each member has shared'). It is distinguishable from siblings like muninn_team_share_add / muninn_team_share_remove, though it never names them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not guidance, no mention of prerequisites (e.g. team membership or permissions), and no routing to alternative tools such as muninn_team_share_add. Usage is only implied by the verb 'List'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

muninn_team_transfer_ownerA
DestructiveIdempotent
Inspect

Transfer team ownership to an existing member. The caller (current owner) is demoted to member. A team always has exactly one owner.

NameRequiredDescriptionDefault
teamIdYesTeam ID.
userIdYesUser ID of the member to promote to owner.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds real behavioral context the annotations don't: the caller is demoted to member, and ownership is singular ('exactly one owner'), which tells the agent this is an atomic role swap rather than an additive grant.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, no filler, with the action and its consequence front-loaded and the domain invariant last. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-param mutation with no output schema, the description covers the actor, the target constraint, and the side effect. The main omission is failure/edge behavior (target not a member, caller not the owner), which an agent would benefit from knowing before invoking a destructive operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters documented, so the schema carries the burden; baseline is 3. The description adds only the qualifier that userId must be an 'existing member' — useful but marginal over the schema's 'User ID of the member to promote to owner.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Transfer team ownership') and immediately scopes it ('to an existing member'), which separates it from muninn_team_add_member and muninn_team_remove_member. The invariant 'a team always has exactly one owner' further pins down what this operation means.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the precondition for calling it ('The caller (current owner)') and constrains the target to an existing member, which implicitly rules out inviting or adding someone new. It does not explicitly name a sibling alternative or state what happens if preconditions fail, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 91 tool updates
    • First observedmuninn_app_link
    • First observedmuninn_artifact_add
    • First observedmuninn_artifact_connect
    • First observedmuninn_artifact_get
    • First observedmuninn_artifact_list
    • First observedmuninn_artifact_move
    • First observedmuninn_artifact_name
    • First observedmuninn_artifact_password
    • First observedmuninn_artifact_publish
    • First observedmuninn_artifact_unpublish
    • First observedmuninn_bundle_closure
    • First observedmuninn_bundle_create
    • First observedmuninn_bundle_decision_add
    • First observedmuninn_bundle_edge_add
    • First observedmuninn_bundle_edge_move
    • First observedmuninn_bundle_edge_remove
    • First observedmuninn_bundle_export_okf
    • First observedmuninn_bundle_get
    • First observedmuninn_bundle_list
    • First observedmuninn_bundle_node_create
    • First observedmuninn_bundle_node_delete
    • First observedmuninn_bundle_node_repoint
    • First observedmuninn_bundle_node_reslug
    • First observedmuninn_bundle_nodes_create
    • First observedmuninn_bundle_nodes_remove
    • First observedmuninn_bundle_update
    • First observedmuninn_help
    • First observedmuninn_memory_add
    • First observedmuninn_memory_anchor_replace
    • First observedmuninn_memory_append
    • First observedmuninn_memory_delete
    • First observedmuninn_memory_get
    • First observedmuninn_memory_list
    • First observedmuninn_memory_list_by_tag
    • First observedmuninn_memory_list_tags
    • First observedmuninn_memory_query
    • First observedmuninn_memory_search
    • First observedmuninn_memory_search_tags
    • First observedmuninn_memory_tag
    • First observedmuninn_memory_tag_many
    • First observedmuninn_memory_update
    • First observedmuninn_mirror_connect
    • First observedmuninn_mirror_designate
    • First observedmuninn_mirror_push
    • First observedmuninn_mirror_reconcile
    • First observedmuninn_mirror_status
    • First observedmuninn_onboard
    • First observedmuninn_picture_upload_direct
    • First observedmuninn_picture_upload_finish
    • First observedmuninn_picture_upload_start
    • First observedmuninn_picture_view
    • First observedmuninn_reconcile
    • First observedmuninn_render_bundle
    • First observedmuninn_session_boot
    • First observedmuninn_settings_get
    • First observedmuninn_settings_update
    • First observedmuninn_skill_check
    • First observedmuninn_skill_create
    • First observedmuninn_skill_delete
    • First observedmuninn_skill_registry
    • First observedmuninn_skill_update
    • First observedmuninn_stats
    • First observedmuninn_table_define
    • First observedmuninn_table_delete
    • First observedmuninn_table_feeds
    • First observedmuninn_table_list
    • First observedmuninn_table_publish
    • First observedmuninn_table_record_add
    • First observedmuninn_table_records_export
    • First observedmuninn_table_records_import
    • First observedmuninn_table_records_list
    • First observedmuninn_table_refresh
    • First observedmuninn_table_unpublish
    • First observedmuninn_task_add
    • First observedmuninn_task_complete
    • First observedmuninn_task_delete
    • First observedmuninn_task_list
    • First observedmuninn_task_snooze
    • First observedmuninn_task_update
    • First observedmuninn_team_add_member
    • First observedmuninn_team_create
    • First observedmuninn_team_delete
    • First observedmuninn_team_invite
    • First observedmuninn_team_invite_accept
    • First observedmuninn_team_invites_list
    • First observedmuninn_team_list
    • First observedmuninn_team_remove_member
    • First observedmuninn_team_share_add
    • First observedmuninn_team_share_remove
    • First observedmuninn_team_shares_list
    • First observedmuninn_team_transfer_owner

Publisher details

Operator
Bizat Co. (Biz-Automation Co., Ltd.) · Publisher source
Vendor relationship
First-party · Publisher source
Trust center
Not available
Restrictions
Free tier available. Paid plan is $8 a month. Saving memories requires a verified email. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides persistent cross-session memory for Claude and other AI agents, letting users store decisions, code patterns, and knowledge once and have relevant context retrieved automatically in future conversations. Memories survive context limits, restarts, and compaction, and can be organized by workspace or shared across a team when self-hosted on Redis/Valkey or used via the managed cloud service.
    24 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides persistent cross-session memory for Claude and other AI agents, letting users store decisions, patterns, and knowledge once and retrieve them automatically across future conversations while surviving context limits and session restarts.
    24 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Persistent, local-first memory for your AI chats. Save context in one chat, load it in another — across Claude web, Claude Code, Cursor, Cline, and Claude Desktop. One store, on your own disk, reachable from every tool via MCP, CLI, REST, or SDK.
    1,095 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables Claude and other AI agents to store decisions, patterns, and knowledge in persistent cross-session memory that survives restarts and context compaction, then retrieve relevant context automatically in future conversations. Supports self-hosting on Redis or Valkey, or a managed cloud service, with workspace organization, team sharing, and configurable embedding providers.
    24 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources