Skip to main content
Glama

Server Details

The knowledge base your AI reads and writes, under your rules — over MCP, EU-hosted.

Ownership verified
Status
Healthy
Uptime
12.1% over 83 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
rutash/brainattic-mcp
GitHub Stars
0
ChatGPT
–
Claude
brainattic.ai

TDQS

A3.7/5.0

Scored across 64 tools

Disambiguation4/5

Tools are grouped into clear resource domains (documents, attachments, groups, projects, revisions, rules, reminders, skills, tenants), and descriptions actively disambiguate the risky overlaps — e.g. kb_documents_search vs kb_chunks_retrieve, and get vs get_meta vs get_by_slug. The four attachment-ingestion paths (import, import_url, upload, begin_upload) are individually explained but still form a cluster an agent could misselect, and the edit-session trio (begin/apply/commit/discard) requires care. Overall mostly distinct with a few dense clusters.

Naming Consistency5/5

Every tool follows the same kb_<domain>_<verb_noun> pattern (kb_documents_edit_apply, kb_groups_pin_toggle, kb_attachments_begin_upload), with consistent plural resource prefixes and consistent verb vocabulary (list/get/create/update/archive/restore/toggle). Even the multi-word sub-resources (edit sessions, revisions) follow the same grammar. No mixed conventions anywhere.

Tool Count2/5

64 tools is far beyond a reasonable single-surface scope, even for a broad knowledge-base product; the attachment subsystem alone (9 tools) and the skills subsystem add substantial surface area. While each tool has a defensible role, the set would be better split into narrower servers or driven by progressive disclosure. The count creates real context and selection burden.

Completeness4/5

Coverage is strong: full CRUD plus archive/restore for documents, groups, and projects; revision history with promotion; a multi-path attachment lifecycle; and advisory rules and reminders. The visible gap is skills, where only read/search/history and a deletion_status tool exist with no create/update/delete counterparts, and there is no document comment or sharing/permission tool. These are workable around via the web UI but represent real missing operations.

Available Tools

64 tools
kb_attachments_archiveA
Idempotent
Inspect

Soft-archive an attachment (sets archived_at). Reversible via kb_attachments_restore.

NameRequiredDescriptionDefault
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
attachment_uuidYesAttachment UUID, as returned by kb_attachments_upload, kb_attachments_list or kb_attachments_get

Output Schema

NameRequiredDescription
archived_atYes
attachment_uuidYes

TDQS

A4/5.0
Behavior4/5

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

Annotations declare readOnly=false, idempotent=true and destructive=false, and the description goes beyond that by characterizing the write as 'soft' (a timestamp, not a deletion) and explicitly reversible. That is exactly the extra context an agent needs before mutating state; it only stops short of saying whether archived attachments are hidden from lists or how tenant_slug failures resolve.

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 filler, with the core semantics and the escape hatch both front-loaded. 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?

An output schema exists so return values need not be described, and the schema fully documents the two parameters. Combined with the soft/reversible disclosure this is nearly complete; only the observable side effect (visibility in list/get) is left 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?

Schema description coverage is 100% and both parameters carry detailed descriptions, including the multi-workspace behaviour of tenant_slug and where attachment_uuid comes from. The description adds no parameter meaning of its own, 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?

Specific verb+resource ('Soft-archive an attachment') plus the concrete mechanism ('sets archived_at'), which distinguishes it from the sibling kb_attachments_restore by naming the exact opposite operation. An agent can pick the right one 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 points to kb_attachments_restore as the reversal path, which is useful routing, but it never states when archiving is the appropriate choice over leaving an attachment alone or what state archived attachments appear in (e.g. whether kb_attachments_list still returns them). Usage is implied rather than instructed.

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

kb_attachments_begin_uploadAInspect

Begin a short-lived direct attachment upload for a client that can transfer local file bytes. Provide document_id and the original filename; optionally provide expected_sha256. The result contains an HTTPS upload_url ending in #token=. The fragment is local to the client and is never sent to the server: extract its token and POST the raw file bytes with Content-Type: application/octet-stream and Authorization: Bearer . Send no multipart envelope; upload_url is the endpoint, not a file field, not the fragment. The capability expires in five minutes and succeeds once. The returned size limit is authoritative. Never put the token in a path, query, tool argument, or log.

NameRequiredDescriptionDefault
filenameYesOriginal filename including extension
document_idYesDocument to attach the file to
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
expected_sha256NoOptional SHA-256 hex digest of the exact file bytes (64 hexadecimal characters).

Output Schema

NameRequiredDescription
expires_atYes
upload_urlYes
max_size_bytesYes

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: discloses that the capability is short-lived (five minutes), single-use, that the returned size limit is authoritative, and gives a security constraint (never put the token in a path, query, argument, or log). It also clarifies the fragment-vs-server subtlety, which no annotation or schema field conveys.

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, leading with the purpose before the protocol. The multiple imperative clauses about the token and multipart envelope are slightly repetitive, but each carries operational weight and none 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?

Despite an output schema existing, the description still explains the meaningful shape of the result (upload_url with #token fragment, authoritative size limit), which an agent needs to act correctly. It covers authentication, idempotency, expiry, and the non-multipart wire format — nothing needed to invoke 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%, so the schema already documents all four parameters including the conditional tenant_slug behavior. The description only restates that document_id and filename are required and expected_sha256 optional, adding essentially no semantic detail beyond the structured fields.

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+resource (begin a direct attachment upload) and adds a scope qualifier — 'for a client that can transfer local file bytes' — which implicitly separates it from siblings like kb_attachments_upload and kb_attachments_import_url. It does not name those siblings outright, so an agent must infer the routing, but the core purpose 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 Guidelines4/5

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

The qualifier 'for a client that can transfer local file bytes' gives a clear selection condition and the description spells out the full follow-up procedure (extract fragment token, POST raw bytes). It stops short of explicitly naming the alternative tool for clients that cannot transfer bytes, leaving that inference to the agent.

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

kb_attachments_getA
Read-onlyIdempotent
Inspect

Retrieve attachment metadata, including the attachment_uuid used to embed the file in a document body as kb-attachment://<uuid>. Pass include_download_url=true to also mint a short-lived download URL.

NameRequiredDescriptionDefault
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
attachment_uuidYesAttachment UUID, as returned by kb_attachments_upload, kb_attachments_list or kb_attachments_get
include_download_urlNoMint a short-lived Brainattic download capability for the original file bytes (default false). The capability is unauthenticated and valid for about 5 minutes — anyone who obtains it can fetch the file — so ask for it only when you will download the bytes. To embed the attachment in a document, use attachment_uuid instead.

Output Schema

NameRequiredDescription
attachmentYes

TDQS

A4.5/5.0
Behavior4/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 is covered; the description adds genuinely new behavioral context by noting the download URL is short-lived and separately minted. It does not cover pagination or error behavior, but for a single-item read that is minor.

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 what the tool returns, followed by the one optional behavior that changes the call. 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?

An output schema exists, so return values need not be explained. Purpose, the optional URL behavior, and the embedding use case are all covered, which is everything an agent needs to call this single-record read 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 the schema lacks: the kb-attachment://<uuid> embedding convention that explains why the uuid matters. That is useful semantic context rather than a restatement.

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 attachment metadata') scoped to a single attachment, which separates it from kb_attachments_list without needing to open either schema. The added detail about attachment_uuid being the embedding handle makes the output's purpose concrete.

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 gives the condition for include_download_url=true ('when you will download the bytes') and redirects to attachment_uuid for embedding. It doesn't compare itself to sibling tools like kb_attachments_list or kb_attachments_view_image, so it stops short of full when/when-not/alternatives coverage.

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

kb_attachments_importAInspect

Save the actual bytes of a user-provided file reference as a downloadable document attachment. Pass the host-provided file object; the server downloads its public HTTPS URL with a bounded transfer and validates the bytes. Never invent a URL or substitute a description for the file. If the chat host cannot provide a downloadable reference, say so; a client holding local bytes can use kb_attachments_begin_upload. Optional expected_sha256 checks integrity without returning a hash. Returns attachment_uuid; embed alt for an image or label for a file. Active downloadable attachments remain until explicitly archived. Temporary source URLs and provider file IDs are not retained.

NameRequiredDescriptionDefault
fileYesActual host-provided file reference, not file contents or a local path. MIME is advisory; the server sniffs the bytes.
filenameNoOverride the stored filename; required if the host omits file_name.
document_idYesDocument to attach the file to.
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
expected_sha256NoOptional independently computed checksum. A mismatch is refused before storage; no checksum is returned.
include_download_urlNoDefault false. Mint a short-lived (~5 minutes) Brainattic download capability only when needed to fetch the original bytes.

Output Schema

NameRequiredDescription
attachmentYes

TDQS

A4.7/5.0
Behavior5/5

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

Even though annotations already set openWorldHint=true and destructiveHint=false, the description adds substantial behavioral context: the server uses a bounded transfer, validates the bytes, refuses on checksum mismatch without returning a hash, does not retain temporary source URLs or provider file IDs, and that active attachments persist until explicitly archived.

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 dense but front-loaded: the action comes first, then the critical do-not rules, then fallback guidance, optional integrity behavior, return format, and lifecycle. Every sentence adds decision-relevant information with no repetition of 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?

For a mutation tool with an output schema, this description covers what the agent must know: required host inputs, fallback path, checksum behavior, return value, how to embed the result, and persistence semantics until archive. 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 description coverage is already 100%, so the baseline would be 3, but the description adds value by explaining expected_sha256 as an independent integrity check with no returned hash, include_download_url as a short-lived (~5 minute) capability, and the filename override requirement. It doesn't explicitly address tenant_slug or document_id beyond what the schema says.

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 first sentence states a precise verb and resource: save the actual bytes of a host-provided file reference as a downloadable document attachment. It also implicitly separates this tool from siblings that handle uploads or plain URLs by specifying that the server itself fetches the host file object's HTTPS URL.

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 gives clear when-to-use and when-not-to-use guidance: never invent a URL, never substitute a description for the file, and use kb_attachments_begin_upload when the client already has local bytes. It does not explicitly distinguish the very close sibling kb_attachments_import_url, leaving that alternative for the agent to infer.

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

kb_attachments_import_urlAInspect

Attach the exact original bytes from a public HTTPS source URL to an existing document. Pass source_url as an ordinary string and the mandatory expected_sha256 independently supplied by the source service; never invent a URL, checksum or substitute file. Optional expected_size_bytes must match exactly. The server validates each redirect, bounds the transfer and verifies integrity before storage. Returns attachment_uuid without changing the document body or revision. To link the file, separately edit the document using label. Active downloadable attachments remain until explicitly archived. Source URLs and checksums are not returned or retained as source metadata. A failed one-use source must be replaced with a fresh source capability before a deliberate retry; the server never replays a failed request. For a chat-host file object use kb_attachments_import; for local bytes use kb_attachments_begin_upload.

NameRequiredDescriptionDefault
filenameYesOriginal filename, at most 255 characters, without path separators or control characters.
source_urlYesOriginal-download HTTPS URL supplied by the source service, not a chat-host file object. Transient; never retained.
document_idYesExisting writable document in the selected workspace.
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
expected_sha256YesRequired independent source checksum. A mismatch is refused before storage; no checksum is returned.
expected_size_bytesNoOptional positive original byte count supplied by the source. Must match the downloaded bytes exactly; the deployment size limit always applies.
include_download_urlNoDefault false. Mint a short-lived (~5 minutes) Brainattic download capability only when needed to fetch the saved original bytes.

Output Schema

NameRequiredDescription
attachmentYes

TDQS

A4.6/5.0
Behavior4/5

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

With annotations declaring destructiveHint=false and idempotentHint=false, the description still adds real value: redirect validation, bounded transfer, integrity verification before storage, non-mutation of document body/revision, source URL and checksum not retained, and no server-side replay of failed requests. It avoids contradicting the annotations. It doesn't state the deployment size limit value or concrete failure/error surface, keeping it 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.

Conciseness4/5

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

Front-loaded with the core action and the integrity constraint, then the linking recipe, then sibling routing — a sensible order. A few clauses (the 'ordinary string' phrasing, the non-retention note restated from the schema) come close to redundancy, but nothing 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?

For a 7-parameter, non-idempotent write tool with an output schema present, the description covers what gets mutated (nothing in the body), what is returned (attachment_uuid), what is discarded (source URL/checksum), and the follow-up needed to actually render the file. No gap an agent would trip over.

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 earns more by stressing that expected_sha256 must be independently supplied by the source service and never invented, and that expected_size_bytes must match exactly. filename and tenant_slug are left entirely to the schema, so it does not fully exploit the space.

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 (attach) and resource (exact original bytes from a public HTTPS URL to an existing document), and explicitly distinguishes itself from the two nearest siblings by naming them and their input sources. An agent can route between import_url, import, and begin_upload 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 the alternatives and the condition that selects each ('For a chat-host file object use kb_attachments_import; for local bytes use kb_attachments_begin_upload'). It also covers the retry case: a failed one-use source must be replaced with a fresh capability before a deliberate retry.

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

kb_attachments_listA
Read-onlyIdempotent
Inspect

Paginated list of a document's attachments. Active (non-archived) only by default. Each row carries the attachment_uuid used to embed the file in a document body as kb-attachment://<uuid>.

NameRequiredDescriptionDefault
limitNoPage size (default 25, max 100)
offsetNoPagination offset (default 0)
document_idYesDocument id
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
include_archivedNoInclude archived attachments (default false)

Output Schema

NameRequiredDescription
totalYes
attachmentsYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: default filtering out archived attachments, pagination, and the per-row attachment_uuid with its `kb-attachment://<uuid>` embed syntax.

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 purpose, then the default filtering behavior, then the practically important uuid detail. 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?

An output schema exists, so return values needn't be spelled out, and the description still gives the one return detail that matters operationally (the uuid embed format). For a read-only paginated list the entry is essentially complete; only explicit sibling routing 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?

Schema coverage is 100%, so all five parameters including limit/offset and the tenant_slug fallback rule are already documented in the schema. The description only reinforces the include_archived default; it adds no parameter syntax or format details beyond the structured fields.

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 ('Paginated list of a document's attachments') with scope immediately clear. Among siblings (kb_attachments_get, archive, restore, list) an agent can pick this one 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 Guidelines3/5

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

The 'Active (non-archived) only by default' clause implies when this listing is and isn't sufficient, but the description never explicitly names alternatives such as kb_attachments_get for a single item or the archive/restore siblings. Usage 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.

kb_attachments_restoreA
Idempotent
Inspect

Restore a soft-archived attachment (clears archived_at). Reverse of kb_attachments_archive.

NameRequiredDescriptionDefault
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
attachment_uuidYesAttachment UUID, as returned by kb_attachments_upload, kb_attachments_list or kb_attachments_get (the attachment must be archived)

Output Schema

NameRequiredDescription
archived_atYes
attachment_uuidYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare non-readonly, idempotent, non-destructive, and closed-world, and the description adds the concrete state change (clears archived_at) that the agent needs to reason about effect. Minor gaps remain, e.g. whether restoring an already-live attachment is a no-op, but the idempotent hint covers that reasonably.

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 verb and resource, then the state effect, then the inverse relationship. 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 an output schema present and a fully documented schema, the description only needs to convey purpose, effect, and the inverse relationship, and it does all three. It could add one clause about failure or no-op behavior when the target is not archived, but that is a small omission.

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 tenant_slug and attachment_uuid are already fully documented, including the archived precondition on the UUID. The description adds no parameter-level detail beyond that, 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 (restore) and resource (soft-archived attachment), and even names the mechanism it undoes (clears archived_at). The explicit 'reverse of kb_attachments_archive' distinguishes it cleanly from its sibling.

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 'soft-archived' qualifier and the 'reverse of kb_attachments_archive' pointer give a clear condition for use and route the agent away from the archive sibling. It does not state what to do if the attachment is not archived, so it falls short of full when/when-not guidance.

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

kb_attachments_uploadAInspect

Upload a small file you already hold as text or bytes, up to 64 KiB. Supply exactly one of content_text or content_base64. Never invent file bytes or write out base64 for a photo or a file shown in chat. Use kb_attachments_import for a real downloadable file reference, or kb_attachments_begin_upload for a client that can transfer local bytes directly. When neither is available, give the user the document permalink, ask them to open it and use Attach, then call kb_attachments_list. The web file limit is deployment-configured; an inline refusal states the live limit. Returns attachment_uuid: embed as alt or label. Unreferenced inline uploads are eventually swept; active downloadable uploads remain until explicitly archived.

NameRequiredDescriptionDefault
filenameYesOriginal filename including extension
mime_typeYesMIME type (server-side sniffed and validated)
document_idYesDocument to attach the file to
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
content_textNoUTF-8 text you already hold, at most 64 KiB encoded (CSV, Markdown, JSON, plain text).
content_base64NoBase64 of a small binary you already hold as bytes, at most 64 KiB decoded. For photos or user files use import or a direct upload session.
include_download_urlNoMint a short-lived Brainattic download capability for the original uploaded bytes (default false). The capability is unauthenticated and valid for about 5 minutes — anyone who obtains it can fetch the file — so ask for it only when you will download the bytes. To embed the attachment in a document, use attachment_uuid instead.

Output Schema

NameRequiredDescription
attachmentYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare non-read-only, non-idempotent, non-destructive, but the description adds substantial context beyond them: the size ceiling, that the web limit is deployment-configured and surfaced in the refusal message, that the server sniffs MIME types, and a lifecycle rule distinguishing swept unreferenced inline uploads from retained downloadable uploads.

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 verb, the payload constraint and the exclusivity rule before the routing guidance, and every sentence carries actionable content. It is a dense, unbroken paragraph for a tool with this much conditional behavior, which costs some scannability but not correctness.

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 an output schema present the description need not enumerate return fields, yet it still tells the agent what the key return value (attachment_uuid) is for and how to embed it. Combined with the size limits, fallback path and retention behavior, an agent has everything needed to call this correctly or route elsewhere.

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 cannot express: content_text and content_base64 are mutually exclusive and exactly one is required. It also explains how to use the returned attachment_uuid for embedding and warns that include_download_url mints an unauthenticated capability, which the schema only hints at with a default.

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 plus the hard constraint that defines the tool: 'Upload a small file you already hold as text or bytes, up to 64 KiB.' It immediately differentiates itself from kb_attachments_import and kb_attachments_begin_upload by naming both as alternatives for the cases this tool does not cover.

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 selection rule ('Supply exactly one of content_text or content_base64'), names both alternatives with the condition that selects each, and supplies a fallback procedure (permalink, ask user to Attach, then kb_attachments_list) for the residual case. This is a full when/when-not/alternative decision tree.

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

kb_attachments_view_imageA
Read-onlyIdempotent
Inspect

Present an existing Brainattic image attachment. Native MCP image content is the default; presentation_mode=auto falls back to a short-lived Brainattic presentation URL only when the normalized rendition is above the 1 MiB native envelope. Use native to require ImageContent, or url to explicitly request the Brainattic presentation capability. This tool never exposes MinIO or returns the original image bytes as a download.

NameRequiredDescriptionDefault
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
attachment_uuidYesAttachment UUID, as returned by kb_attachments_upload, kb_attachments_list or kb_attachments_get
presentation_modeNoPresentation mode. Default auto: native ImageContent when <=1 MiB, otherwise Brainattic URL fallback.

Output Schema

NameRequiredDescription
imageYes

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already establish this as a safe, read-only, idempotent call, and the description still contributes real behavior: the 1 MiB native envelope and the automatic URL fallback, the short lifetime of presentation URLs, and the explicit guarantee that MinIO and original bytes are never exposed as a download.

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, then layered with mode semantics and constraints in three tight sentences. The opening clause and the auto-fallback clause overlap slightly, and the MinIO sentence reads as a defensive aside, but nothing is padded.

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 an output schema and full schema descriptions in place, the description only needs to cover mode behavior and rendering constraints, which it does. The threshold, the fallback trigger, and the non-exposure guarantee are exactly the facts an agent cannot get from structured fields.

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 semantic weight by framing 'native' as requiring ImageContent versus 'url' as an explicit request for the presentation capability, which tells the agent these modes can fail differently. tenant_slug semantics are left entirely to 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 and resource ('Present an existing Brainattic image attachment') and clarifies it renders image content rather than metadata. It never names the adjacent kb_attachments_get or kb_attachments_list, so the distinction from those siblings is left to inference.

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 selection guidance across the presentation_mode values: auto by default, native to force ImageContent, url to request the Brainattic presentation capability. It stops short of saying when to reach for this tool over kb_attachments_get when the caller wants metadata rather than a rendered image.

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

kb_chunks_retrieveA
Read-onlyIdempotent
Inspect

Retrieves relevant passages from the connected private knowledge base. Call this whenever a question depends on the organisation's stored knowledge; the model may not otherwise have access to it. Returns a flat list of passages ordered by relevance; pass them as context when generating your answer and cite the source document for each claim. For "show me documents about X" browse-style queries, prefer kb_documents_search.

NameRequiredDescriptionDefault
kNoHow many chunks to return (default 8, maximum 30; larger values are clamped to 30).
modeNoRetrieval mode (default: hybrid). Use vector for semantic similarity, keyword for literal matches, hybrid (recommended) for both.
queryYesNatural-language question or search terms to ground against the corpus
group_slugsNoRestrict retrieval to docs in any of these groups
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
project_slugNoRestrict retrieval to one project

Output Schema

NameRequiredDescription
chunksYes
confidenceYes

TDQS

A4.3/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds useful downstream behavior ('flat list ordered by relevance', 'cite the source document for each claim'), but says nothing about result truncation, empty-result behavior, or the tenant-disambiguation refusal path. A solid but not rich supplemental contribution given the annotation coverage.

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 usage, then the output guidance and sibling routing. Three dense sentences with no filler; only the clause 'the model may not otherwise have access to it' is arguably padding, though it justifies the strong 'call this whenever' instruction.

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 a full output schema and 100% parameter coverage, the description need only supply decision context, which it does. The one gap is the multi-tenant `tenant_slug` refusal flow, which is described in the schema but not signaled in the description, so an agent could hit an avoidable error on a multi-workspace token.

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 every parameter already carries a clear description, so the description rightly avoids duplication. It adds meaning only at the aggregate level (passages as context, relevance ordering), which 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 and resource ('Retrieves relevant passages from the connected private knowledge base') and implicitly distinguishes itself from document-level siblings by emphasizing passages. An agent can immediately tell this is a retrieval/RAG grounding tool rather than a CRUD or browse tool.

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 ('whenever a question depends on the organisation's stored knowledge') and names the alternative plus the condition that selects it ('For "show me documents about X" browse-style queries, prefer kb_documents_search'). Both the when and the when-not are present.

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

kb_documents_archiveA
Idempotent
Inspect

Soft-archive a document (sets archived_at). Reversible via kb_documents_restore.

NameRequiredDescriptionDefault
document_idYesDocument id
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
include_bodyNoInclude the full document body_md (default false; off keeps the response small - archiving does not touch the body, and the returned archived_at confirms the change).

Output Schema

NameRequiredDescription
documentYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, so the description adds the crucial behavioral fact that this is a soft archive setting archived_at and that it is reversible via restore. It does not discuss permissions or tenant scoping, but the schema handles tenant_slug thoroughly.

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 with zero waste. The key behavior is front-loaded and the reversal path is given immediately afterward.

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 simple archive operation with rich annotations, full schema coverage, and an output schema, the description provides exactly what an agent needs: the soft-archive semantics, the field changed, and the restore path. Nothing essential 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 document_id, tenant_slug, and include_body are fully documented in the schema. The description adds no parameter-level detail beyond implying that archiving affects archived_at rather than the document body.

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 the specific verb and resource ('Soft-archive a document') and immediately clarifies the mechanism ('sets archived_at'). This distinguishes it from sibling kb_documents_delete and points to kb_documents_restore for reversal.

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 clear this is the reversible archive path and names kb_documents_restore as the alternative for undoing it. It does not explicitly contrast with kb_documents_delete, but the 'soft' framing implies the distinction.

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

kb_documents_createAInspect

Create a new document. slug is auto-generated from title when omitted. project_slug must exist; group_slugs are created on demand.

NameRequiredDescriptionDefault
slugNoURL slug; auto-generated from title if absent
titleYesDocument title (required)
body_mdYesMarkdown body (required)
group_slugsNoGroups to tag the document with
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
include_bodyNoEcho the created body_md back (default false; you already have the body you sent).
project_slugNoProject to assign the document to
document_dateNoOptional ISO 8601 date (YYYY-MM-DD) representing the date the document content is from — not the date this row was created. Omit for current-state documents authored natively in fss-kb; set for historical material like old emails or retired runbooks.

Output Schema

NameRequiredDescription
documentYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-destructive, non-idempotent behavior, so the description only needs to add context. It does: project_slug must exist (a failure mode) and group_slugs are created on demand (a side effect that creates group records beyond the document itself) — genuinely useful disclosure not present in the annotations.

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 and then the two constraints that most affect a successful call. No filler and nothing buried.

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 an output schema present, return values need no explanation, and the rich schema covers the 8 parameters. The remaining gap is duplicate-slug conflict behavior — given idempotentHint=false, the description should say whether creating with an existing slug fails or overwrites.

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 and the schema already documents tenant_slug, include_body, and document_date in detail. The description still adds referential semantics the schema omits: project_slug must pre-exist and group_slugs are auto-created, though its slug auto-generation note only repeats 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 and resource ('Create a new document') that clearly separates it from kb_documents_update, kb_documents_get, and kb_documents_list. It does not explicitly name or contrast with the edit_begin/edit_commit drafting flow, but the purpose itself 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?

Usage is implied by the verb 'Create' plus the note that project_slug must already exist, which tells the agent a prerequisite call (kb_projects_list/create) may be needed. There is no explicit guidance on when to use this versus the kb_documents_edit_begin/apply/commit flow for authoring content.

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

kb_documents_deleteA
DestructiveIdempotent
Inspect

Permanently delete a document and all its revisions. Admin-only. Irreversible — archive first if in doubt.

NameRequiredDescriptionDefault
document_idYesDocument id to permanently delete
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
deletedYes
document_idYes

TDQS

A4.2/5.0
Behavior4/5

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

Adds real context beyond the annotations: the deletion cascades to all revisions and requires admin privileges. Annotations already cover destructiveHint and idempotentHint, so the description's contribution is the blast radius and auth requirement, which are the most decision-relevant facts here.

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 permanent/cascading nature, then precondition, then the safer alternative. 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?

Output schema exists so return values need not be explained, and the description covers destruction scope, auth, and reversibility. Only the fallback to a sibling archive tool 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%, and the tenant_slug description already explains the multi-workspace omission rule in detail. The description adds nothing about document_id or tenant_slug beyond what the schema states, 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 and resource ('Permanently delete a document and all its revisions'), including the cascade scope that distinguishes it from a plain document delete. An agent can immediately separate this from kb_documents_archive.

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 when-not path ('archive first if in doubt') and a precondition ('Admin-only'), which routes the agent away from this tool in ambiguous cases. It stops short of naming kb_documents_archive explicitly or describing confirmation/idempotency expectations, so it is strong but not exhaustive.

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

kb_documents_edit_applyAInspect

Apply an ordered batch of edits to an open edit session, all-or-nothing — if any edit cannot be applied (no match / ambiguous / overlapping / out of range) the whole batch is rejected and the buffer is left unchanged. Edit types: "replace" (old_string unique unless replace_all=true, new_string), "line_range" (start_line/end_line/content), "section" (heading + mode replace_body|insert_after_heading|delete_section, with level/parent to disambiguate). Returns the cumulative base→working unified diff; pass an empty edits array to just re-fetch the diff without mutating.

NameRequiredDescriptionDefault
diffNoWhich diff to return: full (default) cumulative base→working; none to skip the diff body for long sessions; delta = only this batch change.
editsYesOrdered edits applied atomically against the current buffer. Empty array = diff refresh only.
session_idYesOpen edit session id (required)
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
diffYes
expires_atYes
session_idYes

TDQS

A4.3/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing the atomic rejection contract and its four failure causes (no match / ambiguous / overlapping / out of range) plus the guarantee that the buffer is unchanged on failure. It also documents the return value (cumulative base→working unified diff). Minor gap: it never states that acceptance means staged-only, with commit as the persistence step — the key non-idempotent, non-destructive behavior an agent must know.

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 atomicity guarantee is correctly front-loaded and every clause is substantive. The edit-type enumeration partially duplicates the 100%-covered oneOf schema; trimming it to the non-obvious constraints (uniqueness, disambiguation, content ignored on delete_section) would tighten it without losing 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?

An output schema exists so return format needn't be re-explained, and annotations cover the safety profile; the description fills the remaining gap with the failure/rejection model. What's absent is the surrounding session lifecycle — that nothing is persisted until edit_commit and that edit_discard throws the buffer away — which matters for a non-idempotent, non-read-only mutation 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?

Schema coverage is 100%, so baseline is 3, but the description earns more by explaining how the edit variants behave in combination (ordering, uniqueness of old_string, disambiguation via level/parent, empty array semantics). It does not mention the `diff` enum (full/none/delta) or tenant_slug at all, leaving those entirely to 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?

Opens with a specific verb + resource ("Apply an ordered batch of edits to an open edit session") and immediately names the defining property (all-or-nothing). An agent can distinguish it from kb_documents_edit_commit / edit_discard / edit_begin without opening a schema, since it's clearly the staging-mutation step of a session workflow.

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 prerequisite implicitly ("an open edit session") and gives a non-obvious usage mode (empty edits array = diff refresh only). It does not explicitly say the changes are not persisted until kb_documents_edit_commit is called, which is the single most important routing decision among the edit_* siblings.

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

kb_documents_edit_beginA
Idempotent
Inspect

Open a surgical edit session on a document and snapshot its current revision. Stage edits with kb_documents_edit_apply, then kb_documents_edit_commit (lands one revision) or kb_documents_edit_discard. Calling this again for a document you already have an open session on resumes that session (resumed=true).

NameRequiredDescriptionDefault
document_idYesDocument id to edit (required)
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
include_bodyNoEcho the full working buffer back (default false; the body you open is the document you already have - request it only for a server-confirmed snapshot).

Output Schema

NameRequiredDescription
resumedYes
expires_atYes
session_idYes
document_idYes
working_body_mdNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, and the description adds real context beyond them: a revision snapshot is taken, and re-invoking resumes the existing session with resumed=true (which explains the idempotent hint). It omits session lifetime/concurrency behavior, e.g. whether an open session blocks other writers.

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 action, then the workflow chain, then the resume edge case. No repetition of the title, 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 annotations covering safety and an output schema covering returns, the description supplies the workflow and resume semantics an agent needs to call this correctly. Gaps are minor: session lifetime and how this relates to kb_documents_update.

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 document_id, tenant_slug and include_body are all documented in the schema; the description adds no parameter-level detail beyond the notion of a snapshot. Baseline 3 applies where the schema carries the 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 and resource ("Open a surgical edit session on a document") plus the side effect ("snapshot its current revision"). It immediately names the follow-on siblings (edit_apply, edit_commit, edit_discard), so an agent can place it in the workflow without opening other 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 a clear usage sequence: begin, stage with kb_documents_edit_apply, then commit or discard, and explains the re-call/resume case. It does not explain when to choose this session workflow over the direct kb_documents_update sibling, which is the main remaining ambiguity.

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

kb_documents_edit_commitA
Idempotent
Inspect

Commit an open edit session: flush its working buffer to a single new revision (title / project / groups preserved). Honors the begin-time revision snapshot — a concurrent edit returns kb.documents.stale_revision and leaves the session open to rebase or discard. Returns no_changes=true (no revision written) when the buffer equals the current document body.

NameRequiredDescriptionDefault
session_idYesOpen edit session id (required)
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
include_bodyNoInclude the full document body_md (default false; off keeps the response small - the returned current_revision_id confirms the landing).

Output Schema

NameRequiredDescription
documentYes
no_changesYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare idempotent, non-destructive, readOnly=false, and the description adds rich behavior beyond them: what is preserved (title/project/groups), the staleness contract (kb.documents.stale_revision, session kept open), and the no_changes short-circuit. This is exactly the mutation context an agent 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 action, then the success shape, then the two failure/edge behaviors. Dense but every clause carries decision-relevant 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 an output schema present and 100% schema coverage, the description supplies the remaining operational contract — preservation semantics, stale-revision handling, no_changes — leaving no ambiguity about how to invoke or interpret the commit.

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 session_id, tenant_slug, and include_body are already documented in the schema. The description adds no parameter-level detail (e.g., how include_body interacts with the commit), which is fine given the schema baseline but not above 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+resource ('Commit an open edit session') and the concrete effect ('flush its working buffer to a single new revision'), which cleanly separates it from sibling session tools like kb_documents_edit_apply, _discard, and _rebase.

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 establishes the context (after an edit session is open) and enumerates the branching outcomes that tell an agent how to proceed — stale revision leaves the session open to rebase or discard, and no_changes means no revision written. It stops short of explicitly naming sibling alternatives for the discard/rebase path, but the conditions are inferable.

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

kb_documents_edit_discardA
DestructiveIdempotent
Inspect

Discard an edit session and throw its working buffer away — no revision is written. Idempotent: discarding an already-closed session is a no-op.

NameRequiredDescriptionDefault
session_idYesEdit session id to discard (required)
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
discardedYes
session_idYes

TDQS

A3.8/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 idempotency sentence largely restates structured data. The description does add real value by clarifying that the working buffer is destroyed and no revision results, but it omits permission requirements and what a 'no-op' response looks like.

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, the destructive outcome front-loaded, the idempotency caveat second. Nothing is wasted or buried.

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 an output schema, so return values need no explanation, and annotations carry the safety profile. The one remaining gap for a destructive mutation is the auth/permission prerequisite, which is not mentioned.

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%, including full guidance on when to supply tenant_slug, so the baseline of 3 applies. The description adds no parameter-level 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 and resource ('Discard an edit session') and immediately scopes the effect ('throw its working buffer away — no revision is written'), which is exactly what distinguishes it from the commit/apply siblings. An agent can tell this apart from kb_documents_edit_commit 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 Guidelines3/5

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

The phrase 'no revision is written' implies this is the abort path versus commit/apply, but no sibling is named and no explicit condition ('use this when you want to abandon changes') is stated. Usage is inferable rather than guided.

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

kb_documents_getA
Read-onlyIdempotent
Inspect

Retrieve a single document with its full markdown body. Optional include array bundles related rows in one round-trip: revisions / attachments / groups / project. Use kb_documents_get_meta when the body is not needed.

NameRequiredDescriptionDefault
includeNoBundle related rows in the response. Any subset of: revisions, attachments, groups, project. `revisions` returns the 25 most recent — page the rest with kb_revisions_list; `attachments` returns active rows only, as kb_attachments_list does by default.
document_idYesDocument id
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
groupsNo
projectNo
documentYes
revisionsNo
attachmentsNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, so the safety profile is covered. The description adds meaningful behavior beyond that — that `include` collapses multiple fetches into a single round-trip and that `revisions`/`attachments` have scoped returns. It doesn't discuss response size or failure modes, so not 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?

Three short clauses, zero filler. Purpose comes first, the include-array behavior second, the sibling routing last — a logical front-loaded order.

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?

Output schema exists so return values needn't be explained, and the parameter-level details (tenant_slug multi-workspace rule, revision paging) live in the schema. The description is complete enough for correct invocation, with only minor gaps like not hinting at the multi-tenant requirement.

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 framing the schema lacks: the `include` array is a round-trip optimization and each member bundles a specific related entity. That is genuinely useful semantics layered on top of an already well-documented 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 ('Retrieve a single document') plus the scope-defining detail 'with its full markdown body', which cleanly separates it from sibling get_meta. An agent can pick this over kb_documents_get_by_slug / kb_documents_get_meta from 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?

Explicitly names the alternative and the condition that selects it: 'Use kb_documents_get_meta when the body is not needed.' It also explains why to use the `include` array (bundling related rows in one round-trip), which is a usage decision, not just a schema restatement.

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

kb_documents_get_by_slugA
Read-onlyIdempotent
Inspect

Cheap slug-based lookup returning minimal metadata (no body). Returns null when no document with that slug exists in the tenant. Use kb_documents_get for the full body.

NameRequiredDescriptionDefault
slugYesDocument slug (unique within the tenant)
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
documentYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the read-only, idempotent, non-destructive profile, yet the description still adds real value: 'cheap', no body returned, and notably that a missing document yields null rather than an error. It stops short of describing the multi-tenant refusal behavior, which is only documented in the schema for tenant_slug.

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 cheap/no-body distinction, then the null-return edge case, then the alternative. No sentence 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?

For a two-parameter read-only lookup with a full output schema and 100% schema coverage, nothing material is missing; the description even preempts the surprise of a null result. Its only gap, get_meta disambiguation, is a minor edge case rather than a missing requirement.

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%, including a detailed note on when tenant_slug is required and what happens on omission, so the schema carries the parameter burden. The description only alludes to tenant scoping via 'in the tenant' and adds no new meaning for the slug parameter.

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 ('slug-based lookup', 'minimal metadata (no body)') and explicitly contrasts with kb_documents_get for full bodies. It does not disambiguate from the very similar kb_documents_get_meta sibling, which appears to be the closest alternative for metadata-only reads, so it falls short of a clean 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 kb_documents_get for the full body' gives an explicit alternative with the condition that selects it. The slug-first use case is implied by the name and by 'slug-based lookup', but there is no guidance on choosing this over kb_documents_get_meta or when the slug is unknown.

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

kb_documents_get_metaA
Read-onlyIdempotent
Inspect

Cheap id-based lookup returning minimal metadata (no body). Useful for "is this doc tagged right?" follow-ups after a search or list. Use kb_documents_get when the body is needed.

NameRequiredDescriptionDefault
document_idYesDocument id
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
documentYes

TDQS

A4.7/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 the cost signal ("cheap") and the key payload property ("minimal metadata, no body") that an agent needs to judge whether a second call is warranted. Return field detail is unnecessary because an 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.

Conciseness5/5

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

Three short clauses, front-loaded with what the tool returns and costs, then usage, then the alternative. No sentence 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?

For a simple two-parameter read with full schema coverage, an output schema, and complete annotations, 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 "id-based lookup" meaningfully disambiguates the document_id parameter from slug-based access in the presence of the kb_documents_get_by_slug sibling. The tenant_slug fallback behavior is left entirely to 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?

"Cheap id-based lookup returning minimal metadata (no body)" states a specific verb, the identifier type, and the output scope in one clause. It is immediately distinguishable from kb_documents_get (full body) and kb_documents_get_by_slug (slug keyed).

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 frames the use case ("is this doc tagged right?" follow-ups after a search or list) and names the alternative plus the condition that selects it: "Use kb_documents_get when the body is needed."

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

kb_documents_listA
Read-onlyIdempotent
Inspect

Paginated browse of documents in the tenant. Filters: project_slug, group_slugs, archived, include_hidden. Sort: updated_desc (default) | created_desc | title_asc. By default, docs belonging to hidden projects (kb_projects_hide_toggle) are excluded — matches the web /docs default view. Pass include_hidden=true to include them. Hidden does NOT affect kb_documents_search or kb_chunks_retrieve. When project_slug is explicit, the caller named the project so the hidden filter is irrelevant and is bypassed.

NameRequiredDescriptionDefault
sortNoSort order (default updated_desc)
limitNoPage size (default 25, max 100)
offsetNoPagination offset (default 0)
archivedNoIf true, list archived docs only (default false)
group_slugsNoRestrict to docs in any of these groups
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
project_slugNoRestrict to one project
include_hiddenNoWhen true, include docs whose project is hidden (kb_projects_hide_toggle). Default false. Ignored when project_slug is supplied — the caller has named the project so the hidden filter is irrelevant.

Output Schema

NameRequiredDescription
itemsYes
totalYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), but the description adds genuine behavior: hidden-project docs are excluded by default, this mirrors the web /docs default view, and the filter is bypassed when project_slug is explicit. That default-exclusion rule is the kind of silent filtering an agent would otherwise miss.

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 filters, then sort, then the hidden-default caveat — a sensible information hierarchy with no filler. It is dense but every sentence carries a behavioral claim; the repetition of the hidden logic twice is the only slack.

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?

An output schema exists and annotations carry the safety profile, so the description only needs to cover invocation semantics — which it does, including pagination framing, sort options, and the tenant-scoped default view. 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.

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description largely restates the schema's own filter names and sort options, and its include_hidden/project_slug interaction is already spelled out verbatim in the schema property descriptions. It adds framing value but little new parameter meaning.

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 ('Paginated browse of documents in the tenant') and immediately separates itself from retrieval siblings by noting that the hidden filter does not affect kb_documents_search or kb_chunks_retrieve. An agent can pick between listing and searching 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 Guidelines3/5

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

Explains the default view and how to override it with include_hidden, plus the project_slug bypass rule, which is real decision guidance. However it never states plainly when to call this versus kb_documents_search (e.g. broad enumeration vs text matching) — that contrast is only implied by the aside about hidden docs.

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

kb_documents_restoreA
Idempotent
Inspect

Restore a soft-archived document (clears archived_at). Reverse of kb_documents_archive.

NameRequiredDescriptionDefault
document_idYesDocument id (must be archived)
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
include_bodyNoInclude the full document body_md (default false; off keeps the response small - restoring does not touch the body, and the cleared archived_at confirms the change).

Output Schema

NameRequiredDescription
documentYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare non-destructive, idempotent write semantics; the description adds the concrete effect (archived_at is cleared) rather than merely restating the name. It does not cover failure modes on a non-archived document, but the core behavior is disclosed.

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 action and the state effect, with zero filler. Every clause earns its place by adding either scope or sibling differentiation.

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?

An output schema exists and the annotations cover safety, so the description needn't explain returns or permissions. For a simple three-parameter mutation it is nearly complete, missing only what happens if the document is not archived (error vs. no-op).

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 schema thoroughly documents document_id, tenant_slug, and include_body, so the description does not need to repeat them. The description contributes only the archived_at semantic, which is the appropriate baseline-3 level of value 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 (restore) on a specific resource (soft-archived document) and even names the state change (clears archived_at). It explicitly distinguishes itself from the sibling kb_documents_archive by calling itself the reverse of 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?

The 'reverse of kb_documents_archive' framing plus the schema's 'must be archived' precondition gives clear context for when to call this. There is no explicit statement of what to do instead if the document is already active, but the usage path is unambiguous.

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

kb_documents_updateA
Idempotent
Inspect

Save a new revision of an existing document. Omit title/body_md/project_slug/group_slugs to preserve existing values. Pass expected_revision_id for optimistic-concurrency protection; omit for last-write-wins. Returns no_changes=true (and inserts no revision) when the save would change nothing.

NameRequiredDescriptionDefault
titleNoNew title; preserves existing if absent
body_mdNoNew markdown body; preserves existing if absent
document_idYesDocument id (required)
group_slugsNoReplace group set; [] to clear all groups
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
include_bodyNoInclude the full document body_md (default false; you already hold the body you sent - the returned current_revision_id confirms the save).
project_slugNoMove to project; null to remove from project
document_dateNoISO 8601 date (YYYY-MM-DD) representing the date the document content is from. Omit to preserve the existing value; pass null explicitly to clear a previously-set date.
expected_revision_idNoOptimistic-concurrency precondition

Output Schema

NameRequiredDescription
documentYes
no_changesYes

TDQS

A4/5.0
Behavior4/5

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

Beyond the annotations (readOnly=false, idempotent=true, destructive=false), the description discloses that every save inserts a revision, that the default mode is last-write-wins, and that a no-op save returns no_changes=true without inserting a revision. That is genuine behavioral context. It does not mention permission requirements or the tenant-ambiguity refusal path.

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, each carrying distinct information (what it does, omit semantics, concurrency mode, no-op result), with the core action front-loaded. 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?

An output schema exists, and the description still flags the one non-obvious return value (no_changes=true) that governs caller behavior. For a mutation tool with full schema coverage, this covers what an agent needs; only permission/tenant edge cases are left entirely to the 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 coverage is 100%, so each parameter is already documented individually. The description restates the preserve-on-omit rule that the schema already states per field, and only marginally enriches expected_revision_id with the last-write-wins default. Baseline 3 is 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?

"Save a new revision of an existing document" gives a specific verb (save/revision) and resource, and implicitly separates it from kb_documents_create. It does not explicitly contrast with the edit_begin/apply/commit family or revisions_restore, which are the nearest alternatives.

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 conditional guidance for the important choices: omit fields to preserve values, pass expected_revision_id for concurrency protection, omit for last-write-wins. No sibling tool is named as an alternative and no when-not-to-use case is given, 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.

kb_groups_archiveA
Idempotent
Inspect

Soft-archive a group (sets archived_at). Reversible via kb_groups_restore. Archiving does NOT touch the group's document links — they are preserved; the group just leaves active listings and the sidebar.

NameRequiredDescriptionDefault
slugYesGroup slug
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
groupYes

TDQS

A4.2/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 mechanism (sets archived_at), that document links are preserved, and that the group just drops out of active listings and the sidebar. With destructiveHint=false and idempotentHint=true already declared, this adds the practical consequences an agent needs; only permission/prerequisite details are absent.

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, with the core action front-loaded and the reversibility/preservation caveats following. 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?

An output schema exists so return values needn't be explained, and the description covers scope, reversibility, and side effects. It could say more about archiving an already-archived group, though idempotentHint=true largely covers that, making this close to 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?

Schema description coverage is 100% and both parameters (slug, tenant_slug) are fully documented there, including the multi-tenant fallback advice. The description adds no parameter-level information, 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 ('Soft-archive a group') and immediately clarifies the mechanism ('sets archived_at'), distinguishing it from kb_groups_delete and kb_groups_restore by name. An agent can pick this tool over its 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 Guidelines4/5

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

Explicitly names the alternative path ('Reversible via kb_groups_restore') and explains the effect (leaves active listings and sidebar), which implies when to prefer archive over delete. It stops short of an explicit when-not-to-use statement, so it is not a 5.

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

kb_groups_attach_documentA
Idempotent
Inspect

Add a document to a group. Idempotent — no-op if the document is already in the group.

NameRequiredDescriptionDefault
group_slugYesGroup slug
document_idYesDocument id
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
attachedYes
group_slugYes
document_idYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, so 'Idempotent — no-op if already in the group' largely restates structured data. It does clarify what idempotency means here, which is mildly useful, but it omits permission requirements, behavior when the group or document does not exist, and append semantics.

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 with zero waste, and the core action is front-loaded before the idempotency note. Nothing extraneous.

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?

Output schema and annotations are present, so safety and return values are covered elsewhere. However, for a mutation tool this leaves gaps the description should fill — such as whether the group must pre-exist, what happens on a bad document_id, and whether this affects group ordering or counts.

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 tenant_slug parameter carries a detailed fallback explanation in the schema itself, so the description adds nothing beyond it. 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.

Purpose4/5

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

States a specific verb+resource: 'Add a document to a group', which maps directly onto the tool name and is unambiguous. It does not name its natural counterpart (kb_groups_detach_document) or distinguish itself from other group tools, but the core action is clear.

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 phrase — you call this to associate an existing document with a group — but there is no explicit when-to-use, no prerequisites (e.g. group must exist), and no guidance on when to reach for the detach sibling instead.

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

kb_groups_createA
Idempotent
Inspect

Create a group. Idempotent on slug — returns the existing group if the slug already exists.

NameRequiredDescriptionDefault
nameYesGroup name (required)
slugNoURL slug; auto-generated from name if absent
descriptionNoOptional description
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
groupYes
createdYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=false, readOnlyHint=false, and idempotentHint=true. The description adds useful specificity beyond the annotations by identifying slug as the idempotency key and stating that an existing group is returned rather than an error being raised.

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 with no waste. The core action is front-loaded and the idempotency behavior follows immediately.

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?

The tool is simple, schema descriptions are complete, annotations are rich, and an output schema exists. The description covers the key creation behavior and conflict handling, though it does not discuss tenant scoping or permissions, which are handled by the schema and surrounding tools.

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 semantic value by making slug the idempotency key, which is not obvious from the schema's 'URL slug; auto-generated from name if absent' alone.

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 ('Create a group'), which clearly distinguishes it from sibling operations like kb_groups_update, kb_groups_delete, kb_groups_get, and kb_groups_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?

Explains the key behavioral condition for calling it: idempotent on slug, returning the existing group if the slug already exists. This tells an agent it can safely create without checking first, though it does not explicitly name alternatives such as kb_groups_update for modification.

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

kb_groups_deleteA
DestructiveIdempotent
Inspect

Delete a group. Documents tagged with it lose this group tag.

NameRequiredDescriptionDefault
slugYesGroup slug
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
slugYes
deletedYes

TDQS

A3.6/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 new cascade information: documents tagged with the group are not removed, only untagged, which is exactly the side effect an agent needs before calling. It does not address reversibility, though kb_groups_restore exists.

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 filler, with the action stated first and the side effect second. Nothing could be trimmed without losing 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?

An output schema exists, so return values need not be explained, and the document-tagging consequence is disclosed. The remaining gap is whether the deletion is permanent or recoverable via kb_groups_restore, which an agent deciding between delete and archive would want to know.

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%, including detailed tenant_slug selection guidance, so the schema carries the parameter burden. The description adds no meaning beyond it, which is the expected baseline.

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 definition states a specific verb and resource ('Delete a group') with no ambiguity about what is removed. It stops short of distinguishing itself from the adjacent kb_groups_archive tool, which is the meaningful sibling an agent must choose between.

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 guidance on when to delete versus archive, nor any prerequisite or irreversibility warning. With kb_groups_archive and kb_groups_restore both present, the choice is left entirely to inference from the tool name.

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

kb_groups_detach_documentA
Idempotent
Inspect

Remove a document from a group. Idempotent — no-op if the document is not in the group.

NameRequiredDescriptionDefault
group_slugYesGroup slug
document_idYesDocument id
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
detachedYes
group_slugYes
document_idYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true and destructiveHint=false; the description restates idempotency but does add the concrete detail that it is a no-op when the document is not in the group. It stops short of the most useful behavioral fact: that the document itself is untouched and remains in the library.

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 one behavioral caveat that matters. 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?

An output schema exists and all parameters are documented, so the description only needs to convey the operation and its edge case, which it does. Adding a note that the document persists after detachment would make it fully 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?

Schema coverage is 100% and the tenant_slug parameter is documented in detail in the schema, so the description has no structural gap to fill. It adds nothing parameter-specific beyond the schema, which is the expected baseline.

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: 'Remove a document from a group.' That cleanly separates it from the sibling kb_groups_attach_document, though it never names that sibling 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 only implied by the verb — an agent can infer this is the inverse of attaching, but there is no explicit when-to-use, when-not, or pointer to a related tool such as kb_documents_delete for actually removing the document.

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

kb_groups_getA
Read-onlyIdempotent
Inspect

Retrieve a single group by slug (active or archived). The archived_at field is null when active, an ISO 8601 timestamp when archived.

NameRequiredDescriptionDefault
slugYesGroup slug
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
groupYes

TDQS

A3.8/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), so the description only needs to add context — and it does, by revealing that archived groups are retrievable and how archived state is signalled via archived_at. It stops short of saying what happens when the slug does not exist.

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 one piece of state semantics an agent actually needs. Nothing is padded or repeated from the schema.

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?

An output schema exists and annotations are rich, so the description does not need to explain return shape; it still adds the archived_at interpretation. The only real gap is error behavior for an unknown slug, which is minor for a simple getter.

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 the tenant_slug fallback behavior fully documented in the schema itself. The description adds only the 'active or archived' qualifier on slug, which is marginal on top of the structured fields — 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 and resource ('Retrieve a single group by slug') and the parenthetical '(active or archived)' narrows scope usefully. The word 'single' implicitly separates it from kb_groups_list, 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 only implied: an agent can infer that fetching one group by slug is the alternative to kb_groups_list, but the description never says when to prefer one over the other or how to obtain a slug. 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.

kb_groups_listA
Read-onlyIdempotent
Inspect

Paginated browse of groups in the tenant, ordered by name. Active (non-archived) groups only by default; pass archived=true to list archived groups instead. Each row carries archived_at. Returns total (the full match count, independent of limit/offset) alongside the page.

NameRequiredDescriptionDefault
limitNoPage size (default 25, max 100)
offsetNoPagination offset (default 0)
archivedNoWhen true, list ARCHIVED groups only. Default false lists active (non-archived) groups only.
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
totalYes
groupsYes

TDQS

A4.1/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 ordering by name, the default archived filter, that each row carries archived_at, and that total is the full match count independent of limit/offset. That is meaningful behavioral context beyond the structured fields, though it omits any mention of empty-result 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?

Three tight sentences with zero waste; scope and default filtering are front-loaded before pagination and return-shape details. Every sentence earns its place.

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 an output schema present and annotations covering the safety profile, the description needn't explain return values, and it still adds ordering, filter defaults and total-count semantics. Nothing an agent needs to call this browse tool 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 limit, offset, archived and tenant_slug are already documented in the schema. The description reinforces the archived semantics but adds no syntax or format detail beyond what the schema provides, so the baseline 3 is 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 (paginated browse) and resource (groups in the tenant) plus ordering (by name), which an agent can distinguish from kb_groups_get or kb_groups_create without opening the schema. It stops short of explicitly naming the sibling it replaces, but the resource and verb combination 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 Guidelines4/5

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

Explains the default scope (active/non-archived only) and the exact condition to switch (pass archived=true to list archived instead), giving an agent clear selection logic for the flag. It does not name alternatives like kb_groups_get for a single group, so it is clear context rather than full when/when-not guidance.

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

kb_groups_pin_toggleA
Idempotent
Inspect

Toggle a group's sidebar-pin state. Pass pinned=true to pin, false to unpin.

NameRequiredDescriptionDefault
slugYesGroup slug
pinnedYestrue to pin, false to unpin
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
groupYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already state non-read-only, idempotent, non-destructive, so the safety profile is covered. The description usefully resolves the 'toggle' ambiguity by making it a set-state operation, but says nothing about permission requirements, behavior for unknown slugs, 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?

Two short sentences, front-loaded with the operation and followed by the parameter semantics. Nothing is padded or 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 small state-setting mutation with full annotations, a complete schema, and an output schema, the description covers what an agent needs to call it correctly. The only gap is failure behavior for a missing group or ambiguous tenant, which the schema partly mitigates.

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 three parameters, including the conditional tenant_slug rule, are already documented. The description's pin/unpin explanation of pinned duplicates the schema text rather than adding syntax or edge-case guidance, 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 gives a specific verb (toggle) and resource (a group's sidebar-pin state), which is enough to separate it from kb_projects_pin_toggle and kb_groups_update. It stops short of naming any sibling explicitly, so differentiation relies on the reader noticing the 'group' scope.

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 second sentence explains how to use the pinned parameter, not when to prefer this tool over alternatives such as kb_groups_update or kb_projects_pin_toggle. Usage is only implied by the pin/unpin framing.

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

kb_groups_restoreA
Idempotent
Inspect

Restore (un-archive) a group: clears archived_at so the group returns to active listings and the sidebar. Reverses kb_groups_archive.

NameRequiredDescriptionDefault
slugYesGroup slug
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
groupYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true, destructiveHint=false, readOnlyHint=false, so the safety profile is covered. The description adds real behavioral detail beyond that: the specific field cleared (archived_at) and the observable effect (group reappears in listings and sidebar), which tells the agent the change is reversible and non-destructive.

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 clauses, zero filler, with the core action and its effect front-loaded. Every sentence earns its place by adding either mechanism or the inverse-tool pointer.

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?

An output schema exists and annotations carry the safety/idempotency profile, so the description needn't explain returns. For a 2-param, non-destructive restore, this covers everything an agent needs to select and invoke it 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%, and slug plus the multi-tenant tenant_slug guidance are fully documented in the schema. The description adds no parameter detail, 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 (restore/un-archive) and resource (group), plus the concrete mechanism: clears archived_at so the group returns to active listings and the sidebar. It explicitly names the inverse sibling kb_groups_archive, so an agent can distinguish it from archive/delete 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?

The phrase 'Reverses kb_groups_archive' gives a clear condition for use and points at the alternative tool. It doesn't state when-not to use it (e.g. versus kb_groups_delete or restore on an already-active group), but the context is unambiguous for this operation.

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

kb_groups_updateC
DestructiveIdempotent
Inspect

Rename or update a group's name, slug, or description.

NameRequiredDescriptionDefault
nameNoNew name
slugYesCurrent group slug (required to identify the group)
new_slugNoNew slug; auto-derived from new name if name given and new_slug absent
descriptionNoNew description; null to clear
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
groupYes

TDQS

C2.9/5.0
Behavior2/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 carried by structured data. The description adds nothing beyond the mutation verb — no mention that changes overwrite existing values, that slug identifies the target, or the multi-tenant targeting requirement described in the 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?

One efficient sentence with no filler and the operation front-loaded. Very short, but it does not sacrifice needed clarity as written.

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?

An output schema exists and the input schema is fully documented, so the description needn't explain return values. Still, for a destructive mutation with multi-tenant targeting, the description leaves out the identification requirement and tenant resolution caveats that an agent would benefit from seeing up front.

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 baseline is 3. The description only echoes the field names; the meaningful semantics (slug auto-derivation, null to clear description, tenant_slug resolution behavior) live in the schema, not the description.

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 ('Rename or update') and resource ('a group') plus the updatable fields, which is enough to distinguish it from read/archive/delete siblings like kb_groups_get and kb_groups_archive. It does not explicitly name those siblings, 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 Guidelines2/5

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

No when-to-use, when-not-to-use, or alternative is offered. The description never says to prefer kb_groups_create for new groups or explains the required slug-based identification, leaving usage entirely to inference.

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

kb_health_pingA
Read-onlyIdempotent
Inspect

Health check; answers ok and your default workspace slug. Call kb_tenants_list to see every workspace the token grants.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
statusYes
tenantYes

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 and non-destructive, so safety is covered; the description adds auth context not present in structured fields by framing the result as scoped to the token's default workspace. It does not discuss rate limits or failure modes when the token is invalid, which would have pushed it higher.

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 compact sentence pair with zero filler; the behavioral fact (what it answers) is front-loaded ahead of the pointer to the alternative. Every clause earns its place.

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?

An output schema exists, so return values need no prose, and the tool takes no parameters and mutates nothing. Auth scoping is covered by the "token grants" framing, leaving nothing an agent needs 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 parameters, so the baseline is 4 by rubric; the empty schema is fully self-consistent and the description needs to add nothing about arguments. It correctly does not waste words restating that no inputs are required.

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 – "Health check" – and immediately says what it returns ("ok and your default workspace slug"), which distinguishes it from every kb_* CRUD sibling. An agent can tell from one sentence that this is a connectivity/auth probe, not a data operation.

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 names the alternative and the condition that selects it: "Call kb_tenants_list to see every workspace the token grants," i.e. use this for the single default workspace, use the sibling for the full list. It stops short of stating when to reach for this tool (e.g. to validate credentials before a batch of calls), so not quite a 5.

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

kb_projects_archiveA
Idempotent
Inspect

Soft-archive a project (sets archived_at). Reversible via kb_projects_restore. Archiving does NOT touch the project's documents — they keep their project link and stay reachable; the project just leaves active listings, the sidebar, and the dashboard "Active projects" count.

NameRequiredDescriptionDefault
slugYesProject slug
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
projectYes

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses that documents are untouched, retain their project link and stay reachable, and that the project disappears from active listings, the sidebar, and the dashboard count. That is exactly the side-effect profile an agent needs for a non-destructive mutation, and it is consistent with destructiveHint=false and idempotentHint=true.

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 action, then reversibility, then the non-effect on documents. No filler and nothing repeated from the schema.

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?

An output schema exists, so return values need not be described; the description instead covers the things structured fields don't: reversibility and the blast radius. For a single-required-param archive tool, nothing an agent needs 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% and both parameters (slug, tenant_slug) are already documented in detail, including the multi-workspace fallback. The description adds no parameter-level information, 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 ("Soft-archive a project") plus the mechanism ("sets archived_at"), which immediately separates it from kb_projects_delete and kb_projects_restore. The parenthetical detail makes the semantics unambiguous, not just a restatement of the name.

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 signals when this is appropriate versus a hard delete by emphasizing soft-archive/reversibility and naming kb_projects_restore as the undo path. It does not explicitly say "prefer this over kb_projects_delete when you want to retain data," so the routing guidance is strong but 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.

kb_projects_createBInspect

Create a new project. slug is auto-generated from name when omitted.

NameRequiredDescriptionDefault
nameYesProject name (required)
slugNoURL slug; auto-generated from name if absent
descriptionNoOptional description
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
projectYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the safety profile is covered. The description adds one genuinely behavioral fact — slug is derived from name when omitted — but says nothing about name/slug collisions, failure modes, or what happens if the slug already exists.

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 filler, with the core action front-loaded and the derived-field caveat immediately after it.

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?

An output schema exists and the full parameter set is richly described in the schema, so the description needn't explain return values or tenant resolution. It is complete at the level it aims for, though a note on creation-time failure modes would round it out.

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 four parameters are already documented, including the detailed tenant_slug fallback behavior. The description's auto-generation note merely restates the slug field's schema description, adding no new semantics.

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 ('Create a new project'), which is clearly distinguishable from sibling mutators like kb_projects_update and kb_projects_archive. It does not explicitly call out those siblings, but the verb is unambiguous enough to route correctly.

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?

No guidance on when to use this versus kb_projects_update or kb_projects_restore, and no stated prerequisites. The only contextual rule (tenant targeting when the token spans multiple workspaces) lives entirely in the schema, not the description.

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

kb_projects_deleteA
DestructiveIdempotent
Inspect

Delete a project. Documents assigned to it become project-less (project_id set to null).

NameRequiredDescriptionDefault
slugYesProject slug
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
slugYes
deletedYes

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 and idempotentHint=true, so the description adds genuinely new behavioral information: the cascade effect on documents (project_id set to null). It stops short of stating whether the deletion is recoverable given kb_projects_restore exists, and says nothing about auth/permission requirements.

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 with zero waste; the primary action is front-loaded and the side effect follows immediately.

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 destructive tool with full schema coverage, annotations carrying the safety profile, and an output schema present, the description supplies the one thing structured fields cannot: the downstream effect on assigned documents. 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.

Parameters3/5

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

Schema description coverage is 100%, so both the 'slug' and the conditional 'tenant_slug' are already documented in the schema, including the multi-workspace rule. The description adds no parameter-level meaning beyond that, which is the baseline for fully covered schemas.

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 ('Delete a project') that an agent can act on immediately. It does not differentiate from sibling kb_projects_archive, which is the obvious adjacent operation an agent must choose between.

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: call this when a project should be removed. However, no alternative is named despite kb_projects_archive and kb_projects_restore existing, and there is no statement about when hard deletion is appropriate versus archiving.

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

kb_projects_getA
Read-onlyIdempotent
Inspect

Retrieve a single project by slug (active or archived). The archived_at field is null when active, an ISO 8601 timestamp when archived.

NameRequiredDescriptionDefault
slugYesProject slug
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
projectYes

TDQS

A3.6/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. The description adds that both active and archived projects are retrievable, which is genuinely useful scoping. It does not cover what happens on an unknown slug, though the output schema carries 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 short sentences with zero filler, and the core operation is front-loaded ahead of the field detail.

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-resource read with full schema coverage, annotations and an output schema, the description covers the essentials (active vs archived reachability). Only the not-found behavior is left implicit, which is minor at this complexity.

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 tenant_slug already carries a detailed fallback/refusal explanation in the schema. The description only echoes 'by slug' and adds no 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.

Purpose4/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 single project by slug'), and the word 'single' implicitly distinguishes it from kb_projects_list. It does not name that sibling explicitly, so an agent must infer the routing rather than being told.

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: fetch one project by its slug. There is no explicit statement of when to use this versus kb_projects_list, nor any prerequisite about the slug's origin (e.g. from a list call).

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

kb_projects_hide_toggleA
Idempotent
Inspect

Toggle a project's hidden flag. Hidden projects are filtered out of standard browse listings (the /docs page, the /admin/projects page, the sidebar Projects collapsible, the document editor's project picker) until "Show hidden" is selected. Hidden does NOT affect search or agent retrieval — kb_documents_search and kb_chunks_retrieve still surface content from hidden projects so grounding stays complete. Pass hidden=true to hide, false to unhide.

NameRequiredDescriptionDefault
slugYesProject slug
hiddenYestrue to hide, false to unhide
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
projectYes

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (idempotent, non-destructive), the description discloses the actual effect of the flag: which listings filter the project out, that a 'Show hidden' control reveals it, and that search/retrieval tools still surface the content. This is exactly the kind of consequence-level detail 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 sentence and every subsequent sentence carries real information. The parenthetical enumeration of four UI surfaces is slightly verbose but earns its place by making the blast radius concrete.

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 an output schema present and rich annotations, the description covers what the flag does, what it does not affect, and the value convention. An agent has everything needed to call this correctly without guessing about side 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?

Schema description coverage is 100%, so all three parameters are already documented, including the tenant_slug fallback guidance. The description only restates the boolean's meaning rather than adding format or edge-case semantics 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 ('Toggle a project's hidden flag') and immediately defines what 'hidden' means in terms of concrete surfaces (browse listings, sidebar, picker). An agent can distinguish this from kb_projects_pin_toggle and kb_projects_archive 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 tells the agent which values to pass ('hidden=true to hide, false to unhide') and clarifies the scope decision by noting hidden does NOT affect search or agent retrieval. It does not explicitly contrast with the sibling kb_projects_pin_toggle, leaving that differentiation to inference.

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

kb_projects_listA
Read-onlyIdempotent
Inspect

Paginated browse of projects in the tenant. Active (non-archived) projects only by default; pass archived=true to list archived projects instead. Hidden projects (see kb_projects_hide_toggle) are excluded by default; pass include_hidden=true to include them. Each row carries hidden + archived_at so callers can branch. Returns total (the full match count, independent of limit/offset) alongside the page.

NameRequiredDescriptionDefault
limitNoPage size (default 25, max 100)
offsetNoPagination offset (default 0)
archivedNoWhen true, list ARCHIVED projects only. Default false lists active (non-archived) projects only. Archival is a lifecycle state, distinct from the hidden browse filter.
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
include_hiddenNoWhen true, include projects with the hidden flag set. Default false — matches the web /admin/projects default view.

Output Schema

NameRequiredDescription
totalYes
projectsYes

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, so safety is covered; the description goes further by disclosing the default exclusion of hidden projects, the archived-vs-hidden lifecycle distinction, and that total is independent of limit/offset. What's missing is pagination behavior at the boundary (e.g., how to detect the last page beyond total), which keeps it off 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?

Four tight sentences, front-loaded with scope, then defaults, then cross-reference, then return semantics. No restatement of the tool name and no filler; 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 an output schema present, return values needn't be detailed, yet the description still flags the one non-obvious field (total). Defaults, filter interactions, and the cross-tenant caveat are all covered, leaving nothing an agent needs in order 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 the baseline is 3, but the description adds real semantic value by explaining the interaction between archived and include_hidden and by clarifying that total is the full match count rather than the page size. It doesn't add anything for limit/offset/tenant_slug 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 and resource ('Paginated browse of projects in the tenant') and immediately scopes it with default filters, which cleanly separates it from kb_projects_get (single-item) and kb_projects_archive/restore (mutations). The archived-vs-hidden distinction is called out explicitly, so an agent can tell which projects this list will and won't return.

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 when-to-use conditions: default active-only, pass archived=true for archived, include_hidden=true to see hidden ones, plus a pointer to kb_projects_hide_toggle for background. It doesn't explicitly say when to prefer kb_projects_get or how it relates to other list tools, but the filtering guidance is unusually actionable.

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

kb_projects_pin_toggleA
Idempotent
Inspect

Toggle a project's sidebar-pin state. Pass pinned=true to pin, false to unpin.

NameRequiredDescriptionDefault
slugYesProject slug
pinnedYestrue to pin, false to unpin
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
projectYes

TDQS

A3.6/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; the description's main added value is resolving the 'toggle' vs. explicit set-state ambiguity, confirming the call is deterministic rather than a flip. It adds nothing about tenant-scoping refusal behavior beyond what the schema states, and no return-value 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?

Two short sentences, zero padding, and the core action is front-loaded before the parameter hint. Nothing could be removed without losing 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 an output schema, full parameter documentation, and rich annotations, the description only needs to establish purpose and pin semantics, which it does. The remaining gap is its silence on how this relates to hide_toggle and whether pinning affects any listing order for the agent.

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 three parameters (including the conditional tenant_slug with its fallback instructions) are already fully documented. The description's restatement of pinned=true/false duplicates the schema rather than adding format or edge-case detail, 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+resource: 'Toggle a project's sidebar-pin state', which is concrete and distinguishable from kb_groups_pin_toggle by the resource. However, it never mentions kb_projects_hide_toggle, another closely related project-visibility operation, so sibling differentiation is only partial.

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 says how to invoke (pinned=true to pin, false to unpin) but not when to choose this over kb_projects_hide_toggle or when a pin should be set versus left alone. Usage is implied by the tool name rather than stated, and no exclusions or prerequisites are given.

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

kb_projects_restoreA
Idempotent
Inspect

Restore (un-archive) a project: clears archived_at so the project returns to active listings, the sidebar, and the "Active projects" dashboard count. Reverses kb_projects_archive.

NameRequiredDescriptionDefault
slugYesProject slug
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
projectYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare this is a non-read-only, non-destructive, idempotent mutation, so the description's added detail about clearing archived_at and restoring visibility is useful behavioral context. It does not cover permission requirements or response details, but the output schema helps.

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 two tight sentences, front-loading the verb and resource before describing effects and the inverse sibling. Every clause earns its place.

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 simple idempotent restore tool with a complete input schema, annotations, and an output schema, the description covers the state effect and sibling relationship well. Nothing an agent needs 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%, with both slug and tenant_slug documented in the schema itself. The description adds no additional parameter-level meaning, 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 the specific verb and resource ('Restore (un-archive) a project'), spells out the concrete effect (clears archived_at so it returns to active listings, sidebar, and dashboard count), and explicitly names the inverse sibling kb_projects_archive. This is enough to distinguish it from archive/delete/hide 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?

The description clearly frames usage as reversing kb_projects_archive and restoring a project to active status. It does not explicitly say when not to use it or name alternatives like delete/hide, so it falls short of a full 5.

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

kb_projects_updateC
DestructiveIdempotent
Inspect

Rename or update a project's name, slug, or description.

NameRequiredDescriptionDefault
nameNoNew name
slugYesCurrent project slug (required to identify the project)
new_slugNoNew slug; auto-derived from new name if name given and new_slug absent
descriptionNoNew description; null to clear
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
projectYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds no context beyond them. It does not warn that replacing a slug can break existing links/references, does not mention the tenant_slug refusal behavior needed with multi-workspace tokens, and does not state that omitted fields are left unchanged. For a destructive mutation, this is a meaningful gap.

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?

One short sentence, front-loaded with the verb and resource, with zero padding. It is efficient but so sparse that brevity shades into under-specification rather than crispness.

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?

An output schema exists and the parameter schema is fully documented, so return values need not be described. However, the destructive nature of slug changes and the tenant-scoping behavior are the key operational facts an agent needs for a mutation, and neither is surfaced in the description.

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 name, slug, new_slug, description (including null-to-clear), and tenant_slug with its multi-workspace rule. The description's field list merely restates the schema at a coarser level and adds no syntax or edge-case detail.

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 ('Rename or update a project's name, slug, or description'), so the agent knows exactly what changes. It does not differentiate itself from nearby siblings such as kb_projects_create, kb_projects_archive, or kb_projects_hide_toggle, leaving the agent to infer separation from the name alone.

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?

No guidance on when this is the right call versus alternatives. Notable omissions: whether archiving/repurposing is handled by kb_projects_archive, and the fact that changing a slug affects downstream references. The agent gets an action but no decision context.

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

kb_reminders_cancelA
DestructiveIdempotent
Inspect

Cancel a single reminder (by reminder_id) or an entire schedule (by schedule_id). Idempotent — already-cancelled rows are no-ops. Only reminders and schedules you created or receive are reachable; anything else answers not_found.

NameRequiredDescriptionDefault
reminder_idNoCancel this single reminder. Mutually exclusive with schedule_id.
schedule_idNoCancel this entire schedule. Mutually exclusive with reminder_id.
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
cancelledYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=true, so the safety profile is covered structurally. The description adds genuinely non-redundant behavior: already-cancelled rows are no-ops and out-of-scope targets return not_found rather than erroring — useful expectations beyond the hints. It does not say whether cancelling a schedule also cancels its pending reminder instances, which is the main remaining ambiguity.

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: the action/mode split comes first, then idempotency, then the authorization caveat. No filler and nothing buried.

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?

Returns are covered by an existing output schema, and the description closes the two biggest gaps for a destructive, scoped mutation: idempotency and reachability. The only meaningful omission is the cascade question (does schedule cancellation affect already-scheduled reminder rows?), which matters for a destructiveHint 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 description coverage is 100%, so all three parameters (including the tenant_slug fallback guidance) are already fully documented in structured fields. The description's mention of reminder_id/schedule_id only restates the schema's mutual-exclusivity note and adds no format or edge-case meaning 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 the specific verb (cancel) and both resources (single reminder via reminder_id, entire schedule via schedule_id), with the parameter that selects each mode named inline. An agent can distinguish this from kb_reminders_list/get/create 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?

Explains the two mutually exclusive cancellation modes and how to pick between them, plus the scoping rule that only reminders/schedules you created or receive are reachable. It stops short of naming alternatives (e.g. kb_reminders_get/list for discovering IDs) or telling the agent when not to use this at all.

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

kb_reminders_createA
Destructive
Inspect

Create a one-off reminder for one or more tenant members. When it fires, it SENDS a message through email, Slack, or SMS, and a message that has been delivered cannot be recalled — cancelling only stops a reminder that has not fired yet. Create one only when the user asked for it, addressed to the people the user named. Omit recipients to send to yourself; omit channels to use each recipient's preferred channel.

NameRequiredDescriptionDefault
bodyNoOptional longer body.
due_atYesISO 8601 instant when the reminder fires.
summaryYesShort summary line.
channelsNoDelivery channels. Empty / omitted = ["default"] (per-recipient preference).
recipientsNoRecipients: member account ids on this workspace, or the literal "self". Empty / omitted = self. Every id listed here becomes a message delivered to that account, so address someone other than the caller only when the user explicitly asked to remind that person.
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
document_slugNoOptional tenant-scoped doc slug to link.

Output Schema

NameRequiredDescription
remindersYes
recipient_countYes

TDQS

A4.2/5.0
Behavior5/5

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

Goes well beyond the annotations: it states the reminder actually SENDS a message over email/Slack/SMS, that delivery is irreversible, and that cancel only affects unfired reminders. Those are exactly the consequences an agent needs before invoking a destructiveHint=true tool.

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 tight sentences, front-loaded with the action, then the consequence, then the guardrail. The middle clause runs long with two joined ideas (irreversibility and cancel scope) but every sentence 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?

For a 7-parameter mutation with an output schema and annotations, the description covers creation, irreversibility, and recipient scope. Multi-workspace token behavior lives only in the schema, which is acceptable but is the one area an agent might still stumble on.

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 already 100%, so the baseline is 3; the description earns more by explaining the semantics of omitting `recipients` (send to self) and `channels` (recipient preference) and by framing recipients as real people who will each receive a message. Tenant-slug and document-slug behavior is left to 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 and resource ("Create a one-off reminder") and scopes it to "one or more tenant members". The word "one-off" implicitly separates it from kb_reminders_create_schedule, but the sibling is never named outright, so the agent must infer the 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 an explicit gating rule: "Create one only when the user asked for it, addressed to the people the user named." That is real when-to-use guidance plus an exclusion on recipient targeting, though it never points to kb_reminders_create_schedule for recurring cases.

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

kb_reminders_create_scheduleA
Destructive
Inspect

Create a recurring reminder schedule. Validates the RFC 5545 rrule before persistence; expansion to per-occurrence kb_reminders rows happens in the materialiser. Every occurrence SENDS a message through email, Slack, or SMS to the selected recipients, and a delivered message cannot be recalled — cancelling the schedule only stops occurrences that have not fired yet. Create one only when the user asked for a repeating reminder, addressed to the people the user named.

NameRequiredDescriptionDefault
bodyNoOptional longer body.
rruleNoRFC 5545 RRULE; omitted = single-fire (use kb_reminders_create instead).
dtstartYesFirst-instant timestamp (ISO 8601).
exdatesNoComma-separated iCalendar EXDATE list (e.g. "20260615T130000Z,…"). Optional.
summaryYesShort summary line.
channelsNoDelivery channels; empty = ["default"].
timezoneYesIANA timezone for clock-time stability across DST (e.g. Europe/Sofia).
recipientsNoRecipients: member account ids on this workspace, or the literal "self". Empty = self. Every id listed here receives a message on every occurrence, so address someone other than the caller only when the user explicitly asked to remind that person.
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
document_slugNoOptional doc to link.

Output Schema

NameRequiredDescription
scheduleYes

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 by disclosing the mechanics: rrule is validated before persistence, per-occurrence rows are expanded by the materialiser, every occurrence actually SENDS via email/Slack/SMS, and a delivered message cannot be recalled. It also clarifies that cancelling only stops occurrences that have not fired, which directly qualifies the destructiveHint.

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 sentences, front-loaded with what it does, then the persistence pipeline, then the irreversible-delivery warning, then the usage gate. No sentence is filler and the most consequential fact (messages cannot be recalled) is placed prominently.

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?

Output schema exists and annotations declare destructive/openWorld/non-idempotent, so the description's job is the judgment layer — and it delivers exactly that: irreversibility, delivery side effects, and the escalation condition for recipients. An agent has everything needed to decide and call 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% and the per-parameter docs are already rich (including the recipients escalation warning and tenant_slug refusal behavior). The description reinforces the recipients constraint but adds no syntax or format meaning the schema does not already carry, so this sits at the baseline.

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?

Opens with a specific verb+resource ("Create a recurring reminder schedule") and scopes it to recurring reminders only, which implicitly separates it from the single-fire kb_reminders_create sibling. It never names that sibling outright, so the differentiation requires a small inference.

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 gating condition ("Create one only when the user asked for a repeating reminder, addressed to the people the user named"), which covers both when to use it and who it should target. It stops short of naming when-not/an alternative tool explicitly.

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

kb_reminders_getA
Read-onlyIdempotent
Inspect

Fetch a single reminder by id with its delivery rows. Only reminders you created or receive are reachable; anything else answers not_found.

NameRequiredDescriptionDefault
reminder_idYesReminder id.
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
reminderYes

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 and destructiveHint=false, so the safety profile is covered. The description adds non-obvious access-control semantics — the ownership/recipient visibility rule and the exact not_found outcome — which is genuine value beyond the annotations, though broader failure or paging behavior isn't described.

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 core action, and the access constraint follows. Every clause earns its place with no repetition of schema material.

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?

Output schema exists, so return values and the delivery rows need no prose explanation. Access rules are covered and tenant targeting is fully handled in the schema, leaving nothing an agent needs before calling it.

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 reminder_id and the tenant_slug workspace-selection rule are fully documented in the schema. The description only echoes 'by id' and adds no syntax or usage detail beyond what the schema states, 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 (fetch) and resource (a single reminder) plus the accompanying delivery rows, which clearly separates it from kb_reminders_list. An agent can pick this over the list sibling without reading 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?

The description scopes when this works ('only reminders you created or receive are reachable') and that misses return not_found, which is clear contextual guidance. It doesn't explicitly name kb_reminders_list as the browsing alternative, so it falls short of the 5 bar.

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

kb_reminders_listA
Read-onlyIdempotent
Inspect

Paginated browse of the actor's reminders on the active tenant, most-due-soon first. Filters: status, due window. Returns total (the full match count, independent of limit/offset) alongside the page.

NameRequiredDescriptionDefault
limitNoPage size (default 25, max 100)
offsetNoPagination offset (default 0)
statusNoOptional status filter.
due_afterNo
due_beforeNo
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
totalYes
remindersYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond annotations: the default sort order (most-due-soon first) and the fact that total is the full match count independent of limit/offset, which matters for pagination logic.

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 resource, sort order and filters front-loaded, followed by the return-shape note. No filler or repetition of schema content.

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 an output schema present, return values need not be fully explained, and the description still highlights the total-count semantic. It stops short of clarifying due-window boundary behavior (inclusive/exclusive) or default page-size implications, minor gaps for a read-only list 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 67%; limit, offset, status and tenant_slug are documented in-schema, while due_after/due_before have no descriptions. The description's phrase 'due window' loosely maps to those two parameters but adds no syntax or inclusivity details, so it roughly matches rather than exceeds 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 ('Paginated browse of the actor's reminders'), plus the scope (active tenant) and sort order ('most-due-soon first'). This clearly distinguishes it from kb_reminders_get, kb_reminders_cancel and kb_reminders_create among the 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 word 'browse' implies listing rather than fetching a single reminder, so usage is inferable, but no alternative is named and no when-not condition is given. An agent must reason from the sibling names (kb_reminders_get) itself.

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

kb_revisions_getA
Read-onlyIdempotent
Inspect

Retrieve a specific document revision with its full markdown body.

NameRequiredDescriptionDefault
revision_idYesRevision id
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
revisionYes

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, so the safety profile is covered. The description adds only that the returned content is the full markdown body; it says nothing about permission requirements or behavior when the revision is archived or missing.

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 verb and the resource, and every clause earns its place. 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 an output schema covering return values and annotations covering safety, the description needs only purpose and scope, which it delivers. The remaining gap is sibling routing (list vs. get vs. restore), which is minor given the simple read-only nature of the 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 the tenant_slug parameter already carries a detailed multi-workspace explanation in the schema. The description adds no 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.

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 (a specific document revision) and adds the distinguishing detail that the full markdown body is returned. It does not explicitly contrast with kb_revisions_list or kb_skills_revisions_get, but the singular 'a specific revision' makes the scope clear.

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 by 'a specific document revision' — an agent can infer it needs a revision_id from a listing call first. There is no explicit when-to-use, when-not-to-use, or pointer to kb_revisions_list for discovery or kb_revisions_restore for mutation.

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

kb_revisions_listA
Read-onlyIdempotent
Inspect

List the revision history of a document. Newest first.

NameRequiredDescriptionDefault
limitNoPage size (default 25, max 100)
offsetNoPagination offset (default 0)
document_idYesDocument id
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
itemsYes
totalYes

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 and destructiveHint=false, so safety is covered. The description's only added behavioral fact is the newest-first ordering; it says nothing about pagination behavior or the scope of what a revision entry contains.

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 purpose and followed immediately by the ordering detail. 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?

With an output schema present and 100% schema coverage, the description needn't explain return values or pagination syntax. Ordering is supplied, which is the key extra fact; only cross-references to kb_revisions_get/kb_revisions_restore are 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 document_id, limit, offset and tenant_slug are all fully documented in the schema, and the tenant_slug fallback guidance is detailed there. The description adds no parameter meaning beyond what the schema 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?

States a specific verb and resource (list the revision history of a document) plus the ordering, which clearly separates it from kb_revisions_get and kb_revisions_restore. It does not explicitly name those siblings, and the 'document' qualifier is what keeps it distinct from kb_skills_revisions_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?

The name and phrasing imply when to use it (browsing history rather than fetching one revision), but there is no explicit when-to-use statement, no mention of alternatives like kb_revisions_get, and no prerequisites noted.

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

kb_revisions_restoreA
Idempotent
Inspect

Promote a past revision to a new current revision. The body is copied forward — historical rows are never mutated (ADR-0027).

NameRequiredDescriptionDefault
revision_idYesRevision id to restore from
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
include_bodyNoInclude the full document body_md (default false; off keeps the response small - the promoted body is already readable via kb_revisions_get, and the returned current_revision_id confirms the landing).

Output Schema

NameRequiredDescription
documentYes

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, and idempotentHint=true. The description adds valuable behavioral context by clarifying that historical rows are never mutated, directly reinforcing the non-destructive nature beyond what the annotations provide. It does not cover permissions or response details, but the added immutability guarantee is 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 short sentences with no wasted words. The core action is front-loaded, and the immutability guarantee follows immediately, making it easy to scan and understand.

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?

Given the rich annotations, full schema descriptions, and the presence of an output schema, the description covers the essential operation and adds an important behavioral guarantee. It does not need to explain return values because the output schema exists, but it could have included a brief usage condition to be fully 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?

Schema description coverage is 100%, so the schema already fully documents all three parameters. The description does not add any new parameter-level semantics beyond what the schema provides; the baseline score of 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?

The description uses a specific verb ('Promote') and resource ('past revision to a new current revision'), making the operation unambiguous. It clearly distinguishes itself from read-only siblings like kb_revisions_get and kb_revisions_list by describing a state-changing promotion.

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 implies when to use the tool by stating its effect, but it does not explicitly name alternatives or when not to use it. There is no guidance such as 'use instead of kb_revisions_get when you need to roll back to an earlier version' or any prerequisite context.

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

kb_rules_getA
Read-onlyIdempotent
Inspect

Fetch the rule document linked to one scope. Pass scope=tenant|project|group; for project/group also pass owner_slug. Returns linked=false with rule=null when the scope has no rule doc. Use kb_rules_list_for_context instead when you want every rule that applies to an authoring context at once. Rules are advisory conventions, not machine-enforced.

NameRequiredDescriptionDefault
scopeYesWhich rule layer to address: tenant (workspace-wide), project, or group.
owner_slugNoSlug of the project or group that owns the rules. Required for project/group scope; ignored for tenant scope.
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
ruleYes
scopeYes
linkedYes
owner_slugNo

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 closed-world behavior, so the safety profile is covered. The description adds non-obvious domain context: the linked=false/rule=null empty result shape and the crucial warning that rules are 'advisory conventions, not machine-enforced'. That is meaningful behavior beyond annotations, though it doesn't discuss permissions or tenancy edge cases beyond what schema covers.

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 tight sentences, front-loaded with the core action, then parameter guidance, then the empty-result case, then the alternative. No sentence is redundant or bloated.

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 an output schema present, the description needn't enumerate return fields, and it appropriately highlights only the salient linked=false/rule=null case. Combined with the advisory-rules note and the sibling routing, an agent has what it needs; only minor multi-tenant nuance lives solely in the 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% and every parameter is documented there, including the tenant_slug fallback and the owner_slug requirement. The description's 'Pass scope=tenant|project|group; for project/group also pass owner_slug' repeats the schema rather than adding new semantics. Baseline 3 is appropriate when the schema does all the work.

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?

Uses a specific verb+resource ('Fetch the rule document linked to one scope') and explicitly contrasts with the sibling kb_rules_list_for_context. An agent can distinguish the single-scope lookup from the context-wide listing 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?

States the exact alternative (kb_rules_list_for_context) and the condition that selects it ('when you want every rule that applies to an authoring context at once'). It also gives per-scope parameter guidance ('for project/group also pass owner_slug'), leaving nothing ambiguous about when to call this tool.

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

kb_rules_list_for_contextA
Read-onlyIdempotent
Inspect

Lists the rule documents that apply to a given authoring context — the conventions your authoring should follow. Returns a list of MCP resource URIs in canonical order: tenant rules first, then project rules, then group rules (one per group, in the order you supplied). Each entry carries the rule doc body inline by default (body_md) so one call gives you everything you need — no separate resources/read fetch required. Pass include_bodies=false to get URIs only. Empty list means no rules apply at this scope. Rules are advisory, not machine-enforced; agents are expected to read and apply them.

NameRequiredDescriptionDefault
group_slugsNoOptional — groups the authored doc would be tagged with. Adds one URI per group that has rules linked, in the order supplied.
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
project_slugNoOptional — project the authoring is scoped to. Adds the project rules URI when the project has one linked.
include_bodiesNoWhen true (default), each entry carries the rule doc markdown body inline under body_md. Pass false for a URI-only response when you already have the bodies cached.

Output Schema

NameRequiredDescription
rulesYes
contextYes
recommended_skillsYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely non-obvious behavior: canonical ordering (tenant → project → one per group in supplied order), inline body_md by default so no separate resources/read is needed, and the important caveat that rules are advisory rather than machine-enforced.

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; the purpose and return shape lead, then ordering, then the default/override, then edge-case semantics. Every sentence carries decision-relevant information and none repeat structured fields verbatim.

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 an output schema present, the description doesn't need to explain return values, and it still covers the things schema can't: ordering guarantees, empty-result meaning, the read-versus-fetch optimization, and the advisory nature of the rules. 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; the description earns above that by stating include_bodies defaults to true and what it replaces, and by clarifying that group_slugs produces one URI per group in the order supplied. It doesn't restate tenant_slug's refusal behavior, but the schema already covers that.

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 ("Lists the rule documents that apply to a given authoring context") plus the return shape (list of MCP resource URIs). The follow-up clause "the conventions your authoring should follow" disambiguates it from kb_rules_get/set, which manage rules rather than resolve them for authoring.

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 use (authoring a doc that needs applicable conventions) and explicit guidance on the include_bodies=false case for agents that already cached the bodies. It also explains what an empty list means. It never names kb_rules_get as the alternative for reading a single rule, so routing between sibling rule tools is only implied.

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

kb_rules_setA
Idempotent
Inspect

Link an existing document as the rule doc for a scope. Pass scope=tenant|project|group, document_id, and (for project/group) owner_slug. The document is promoted to the matching rules kind and the scope's rule link is set to it. Idempotent. The document must live in the same tenant. Tenant-scope changes require admin; project/group require editor. Use kb_documents_update to edit the rule body.

NameRequiredDescriptionDefault
scopeYesWhich rule layer to address: tenant (workspace-wide), project, or group.
owner_slugNoSlug of the project or group that owns the rules. Required for project/group scope; ignored for tenant scope.
document_idYesId of the document to link as this scope's rule doc. Must be in the same tenant.
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
scopeYes
linkedYes
owner_slugNo
document_idYes

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing a real side effect the agent could not infer: the document is promoted to the matching rules kind. It also adds same-tenant constraints and per-scope authorization requirements, which annotations do not cover. The idempotent claim duplicates the annotation, but everything else is 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?

Five short sentences, front-loaded with the action and followed by the mechanics, permissions, and the sibling pointer. Nothing is redundant with the schema and no sentence 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?

Covers action, side effect, authorization, tenant constraint, and a redirect for the adjacent operation, and an output schema exists so return values need not be described. An agent could invoke this correctly after one read.

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 value by packaging the call recipe ('scope=tenant|project|group, document_id, and (for project/group) owner_slug') into one line, making the conditional owner_slug requirement obvious at a glance. It does not mention tenant_slug or explain its multi-workspace behavior, which the schema carries alone.

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: 'Link an existing document as the rule doc for a scope', and immediately clarifies that this sets a link rather than editing content. The final sentence distinguishing it from kb_documents_update reinforces the boundary against the most confusable sibling.

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 prerequisites (document must live in the same tenant; tenant scope needs admin, project/group need editor) and redirects body editing to kb_documents_update. It stops short of naming kb_rules_unset as the inverse operation or stating when not to use this tool, so it is clear context rather than full when/when-not routing.

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

kb_rules_unsetA
Idempotent
Inspect

Clear the rule link for a scope (sets the owner's rule FK to null). Pass scope=tenant|project|group and (for project/group) owner_slug. The rule document itself is not deleted — only the link is removed. Idempotent. Tenant-scope changes require admin; project/group require editor.

NameRequiredDescriptionDefault
scopeYesWhich rule layer to address: tenant (workspace-wide), project, or group.
owner_slugNoSlug of the project or group that owns the rules. Required for project/group scope; ignored for tenant scope.
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
scopeYes
linkedYes
owner_slugNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already flag the call as non-read-only but non-destructive and idempotent; the description adds the crucial consequence — the rule document is not deleted, only the link is removed — which is what an agent needs to reason safely about a mutation. Permission tiers add further disclosure beyond the annotations, though the wording 'Idempotent' merely restates idempotentHint.

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 short sentences, front-loaded with the effect and mechanism before the required parameters and permissions. Slight redundancy in restating scope values that the enum already carries, but nothing is padded.

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?

An output schema exists, so return values need no explanation, and the tenant_slug ambiguity is fully handled by the schema. Effect, non-destructiveness, idempotency, and per-scope permissions are all present — an agent has everything needed to call it 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 all three parameters are already documented, including the tenant_slug multi-workspace guidance. The description only echoes the scope/owner_slug requirement already in the schema, adding no new syntax, defaults, or edge-case behavior.

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 ('Clear the rule link for a scope') and explains the mechanism (sets the owner's rule FK to null), which separates it in practice from kb_rules_set. It never names the sibling it complements, so an agent must infer the pairing from the verb rather than being told.

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 the calling shape per scope branch (scope=tenant|project|group, plus owner_slug for project/group) and states the authorization precondition per branch (admin for tenant, editor for project/group). It stops short of an explicit 'use this instead of kb_rules_set when...' routing sentence.

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

kb_skills_deletion_statusA
Read-onlyIdempotent
Inspect

Read the private transient state of your own queued skill deletion or purge operation.

NameRequiredDescriptionDefault
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
operation_idYes

Output Schema

NameRequiredDescription
stateYes
reasonYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds two genuinely non-obvious traits – the state is 'private' (scoped to the caller's token) and 'transient' (may disappear) – but says nothing about terminal states, retention window, or whether polling is expected.

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?

One front-loaded sentence with no filler, and the key qualifier (your own, queued) arrives early. It is efficient, though the terseness contributes to the missing usage guidance.

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 an output schema present, return values need not be explained, and annotations cover safety. The remaining gap is small: the description doesn't tie operation_id back to kb_skills_delete/kb_skills_purge, which is the one piece an agent must know 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 coverage is 50%: tenant_slug is thoroughly documented in the schema while operation_id has only a uuid format. The description's phrase "your own queued skill deletion or purge operation" hints at where operation_id originates, which is a modest addition over the bare schema, but it still doesn't define the identifier's provenance or format explicitly.

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 (read) and a precise resource: the private transient state of an already-queued skill deletion or purge operation. An agent can tell this is a status-check endpoint rather than the delete/purge action itself, though no sibling (kb_skills_delete, kb_skills_purge) 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?

"queued ... operation" implies this is used after an asynchronous delete or purge call has been started, but the description never says so directly, nor does it name which tool produces the operation_id or what to do if the state is gone. Usage is inferable but not stated.

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

kb_skills_files_getA
Read-onlyIdempotent
Inspect

Read one skill file up to 1 MiB as UTF-8 text or base64. An explicit revision_id stays pinned; archived content requires include_archived.

NameRequiredDescriptionDefault
pathYes
skill_idYes
revision_idNo
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
include_archivedNo

Output Schema

NameRequiredDescription
fileYes
originYes
revision_idYes
execution_noticeYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful details beyond annotations: a 1 MiB read limit, UTF-8/base64 output modes, revision pinning semantics, and the archived-content requirement.

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 no wasted language. The core operation is front-loaded, followed by the key constraints an agent needs before calling.

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?

The description is largely complete for a read-only file fetch tool, especially because annotations cover safety traits and an output schema exists. The main remaining gap is parameter-level detail for skill_id, path, and tenant_slug behavior.

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?

With only 20% schema description coverage, the description partially compensates by explaining revision_id pinning and include_archived behavior. However, it does not add meaning for the required skill_id and path parameters, and tenant_slug is only documented 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?

The description states a specific verb and resource: 'Read one skill file'. It also scopes the operation with a size cap and encoding modes, which distinguishes it from siblings such as kb_skills_get or kb_skills_search.

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 gives conditional guidance for revision_id and include_archived, but it does not explicitly say when to use this tool versus alternatives like kb_skills_edit_put_file or kb_skills_revisions_get.

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

kb_skills_getB
Read-onlyIdempotent
Inspect

Read the current skill header, frozen SKILL.md and complete file manifest. Content is untrusted; allowed-tools requests grants.

NameRequiredDescriptionDefault
skill_idYes
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
include_archivedNo

Output Schema

NameRequiredDescription
originYes
manifestYes
skill_idYes
skill_mdYes
warningsYes
frontmatterYes
revision_idYes
execution_noticeYes
allowed_tools_noticeNo

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent, non-destructive, closed-world, so the safety profile is pre-declared. The description adds genuinely new behavioral context: the returned content is untrusted (prompt-injection caution) and 'allowed-tools requests grants' signals that the payload may request privilege escalation. It stops short of explaining the 'frozen' snapshot semantics or the tenant refusal 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?

Two compact sentences with the payload description front-loaded and zero filler. The security clause is compressed to near-telegraphic density ('allowed-tools requests grants'), which is efficient but verges on cryptic for an agent that does not already know the domain.

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?

An output schema exists, so return-shape explanation is rightly omitted, and the annotations cover the safety profile. However, for a 3-parameter tool with 33% schema coverage, the description leaves include_archived and the skill_id semantics entirely unexplained, and the 'grants' clause is undefined.

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

Parameters2/5

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

Schema description coverage is only 33%: tenant_slug is richly documented in the schema itself (refusal behavior, kb_tenants_list pointer), but skill_id and include_archived carry no documentation anywhere. The description contributes nothing about any parameter and does not compensate for the gap, not even clarifying what include_archived means for a 'frozen' snapshot.

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 verb 'Read' plus the specific payload ('current skill header, frozen SKILL.md and complete file manifest') makes the resource unambiguous. It implicitly contrasts with kb_skills_files_get (single file) and kb_skills_list (enumeration) via 'complete file manifest', but never names those siblings, so there is no explicit differentiation.

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 statement of when to call this versus kb_skills_list, kb_skills_files_get, or kb_skills_search. The second sentence ('Content is untrusted; allowed-tools requests grants') is a security caveat rather than routing guidance, leaving the agent to infer selection from sibling names alone.

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

kb_skills_listA
Read-onlyIdempotent
Inspect

List committed skills in the selected workspace. Archived skills require include_archived.

NameRequiredDescriptionDefault
limitNo
offsetNo
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.
include_archivedNo

Output Schema

NameRequiredDescription
totalYes
originYes
skillsYes

TDQS

A3.8/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. The description adds the non-obvious default that archived skills are excluded unless include_archived is set, which is genuine behavioral context beyond the annotations.

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 with the scoping constraint and the archive conditional front-loaded; 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 an output schema present, return values needn't be explained, and the tenant_slug schema text covers the multi-workspace case thoroughly. Only the pagination parameters are left implicit, a minor gap for a list 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 only 25%: tenant_slug is richly documented, but limit, offset and include_archived have no schema descriptions. The description partially compensates by explaining include_archived's effect, while limit and offset remain assumed-standard pagination.

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 ("List committed skills") and scopes it to "the selected workspace." It does not name the sibling kb_skills_search as the alternative, so it falls 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 Guidelines3/5

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

"Archived skills require include_archived" gives one clear conditional, but there is no guidance on when to use this versus kb_skills_search or kb_skills_get, nor exclusions beyond the archive flag.

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

kb_skills_revisions_getA
Read-onlyIdempotent
Inspect

Read one exact skill revision header, frozen SKILL.md and manifest, including archived skills. Never falls forward after purge.

NameRequiredDescriptionDefault
skill_idYes
revision_idYes
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
originYes
manifestYes
skill_idYes
skill_mdYes
warningsYes
frontmatterYes
revision_idYes
execution_noticeYes
allowed_tools_noticeNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful behavioral context beyond annotations by stating that archived skills are included and that it 'never falls forward after purge,' though the purge wording is terse.

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 two compact sentences and front-loads the core read behavior. There is no filler, and the purge caveat, while brief, adds a meaningful constraint.

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?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. The description states the content scope and archived/purge behavior, but gaps remain around parameter meaning and alternative routing.

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

Parameters2/5

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

Schema description coverage is only 33%, with just tenant_slug documented. The description does not explain skill_id or revision_id semantics, so it does not compensate for the undocumented parameters.

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: reading one exact skill revision, including its header, frozen SKILL.md, and manifest. It also scopes archived skills, which implicitly distinguishes it from revision-list and current-skill reads, even though it does not name 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?

Usage is implied by 'one exact skill revision' and 'including archived skills,' suggesting it is for precise historical reads. However, it does not explicitly say when to use this instead of kb_skills_revisions_list, kb_skills_get, or kb_skills_files_get.

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

kb_skills_revisions_listA
Read-onlyIdempotent
Inspect

List skill history newest first, including archived skills and purged revision tombstones. byte_size is the frozen SKILL.md size.

NameRequiredDescriptionDefault
limitNo
offsetNo
skill_idYes
tenant_slugNoTenant slug to target. Required when your token grants several workspaces; omit when it grants one. If you omit it with several, the refusal names your default workspace; call kb_tenants_list to see every workspace the token grants.

Output Schema

NameRequiredDescription
totalYes
originYes
revisionsYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds real behavioral context beyond them: deterministic newest-first ordering, inclusion of archived and tombstoned records, and the meaning of byte_size as the frozen SKILL.md size. It doesn't mention pagination behavior, which is the notable remaining 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?

Two tight sentences with no filler. Ordering and scope come first, and the byte_size clarification follows as a necessary field-semantics footnote.

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 an output schema present, return values needn't be described, and rich annotations cover the safety profile. The description supplies ordering, archive/tombstone inclusivity, and byte_size semantics, which is nearly everything an agent needs; only pagination behavior (how limit/offset interact with the newest-first ordering) is left implicit.

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

Parameters2/5

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

Schema description coverage is 25% — only tenant_slug is documented. The description says nothing about limit, offset, or skill_id, and gives no pagination or ordering-parameter semantics. With coverage this low, the description is expected to compensate and does not; the mention of byte_size explains an output field, not a parameter.

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 ("List skill history") and adds scope qualifiers — newest-first ordering, archived skills, and purged revision tombstones. It doesn't explicitly contrast with kb_skills_revisions_get or kb_revisions_list, but "List" vs "Get" plus the tombstone scope makes the distinction inferable.

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?

No explicit when-to-use or when-not-to-use guidance, and no mention of the sibling kb_skills_revisions_get for fetching a single revision. The phrase "including archived skills and purged revision tombstones" implicitly signals this is the tool for full-history/audit lookups, so usage is inferable but not stated.

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

kb_tenants_listA
Read-onlyIdempotent
Inspect

List every workspace your bearer token grants: the slug to pass as tenant_slug, the workspace name, and which one is your default. Takes no parameters. Call this when a refusal tells you the token grants several workspaces and you need one other than the default.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
tenantsYesThe entitled workspaces, in the order the token grants them.
default_tenant_slugYesThe tenant_slug of the row marked is_default; null only when the token grants no workspace that still exists here.

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, and non-destructive, so the safety profile is covered. The description adds the non-obvious behavior that this is the source of truth for the tenant_slug used elsewhere, and that it requires no inputs — genuine context beyond the annotations.

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 with zero waste; the returned fields come first, the no-parameter fact second, and the trigger condition last. Nothing to trim.

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?

An output schema exists, so return details need not be spelled out, yet the description still names the key fields and explains the tool's role in the broader slug-resolution workflow. Complete for a simple enumeration call.

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 baseline is 4; the description reinforces this with 'Takes no parameters,' removing any doubt that a tenant_slug must be supplied here.

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 and resource ('List every workspace your bearer token grants') plus an explicit statement of what the caller gets back: slug, name, and default flag. This is a tenant/workspace enumeration tool and is clearly distinguishable from document/group/project listing 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?

Gives a concrete trigger condition: call it when a refusal reports that the token spans multiple workspaces and you need a non-default one. It does not name an alternative sibling or state when-not-to-call, but for a zero-parameter discovery tool there is little to exclude.

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. 15 tool updates
    • Removedkb_skills_archive
    • Removedkb_skills_create
    • Removedkb_skills_delete
    • Removedkb_skills_edit_apply
    • Removedkb_skills_edit_begin
    • Removedkb_skills_edit_commit
    • Removedkb_skills_edit_discard
    • Removedkb_skills_edit_move_file
    • Removedkb_skills_edit_put_file
    • Removedkb_skills_edit_rebase
    • Removedkb_skills_edit_remove_file
    • Removedkb_skills_purge
    • Removedkb_skills_rename
    • Removedkb_skills_restore
    • Removedkb_skills_revert
  2. 79 tool updates
    • First observedkb_attachments_archive
    • First observedkb_attachments_begin_upload
    • First observedkb_attachments_get
    • First observedkb_attachments_import
    • First observedkb_attachments_import_url
    • First observedkb_attachments_list
    • First observedkb_attachments_restore
    • First observedkb_attachments_upload
    • First observedkb_attachments_view_image
    • First observedkb_chunks_retrieve
    • First observedkb_documents_archive
    • First observedkb_documents_create
    • First observedkb_documents_delete
    • First observedkb_documents_edit_apply
    • First observedkb_documents_edit_begin
    • First observedkb_documents_edit_commit
    • First observedkb_documents_edit_discard
    • First observedkb_documents_get
    • First observedkb_documents_get_by_slug
    • First observedkb_documents_get_meta
    • First observedkb_documents_list
    • First observedkb_documents_restore
    • First observedkb_documents_search
    • First observedkb_documents_update
    • First observedkb_groups_archive
    • First observedkb_groups_attach_document
    • First observedkb_groups_create
    • First observedkb_groups_delete
    • First observedkb_groups_detach_document
    • First observedkb_groups_get
    • First observedkb_groups_list
    • First observedkb_groups_pin_toggle
    • First observedkb_groups_restore
    • First observedkb_groups_update
    • First observedkb_health_ping
    • First observedkb_projects_archive
    • First observedkb_projects_create
    • First observedkb_projects_delete
    • First observedkb_projects_get
    • First observedkb_projects_hide_toggle
    • First observedkb_projects_list
    • First observedkb_projects_pin_toggle
    • First observedkb_projects_restore
    • First observedkb_projects_update
    • First observedkb_reminders_cancel
    • First observedkb_reminders_create
    • First observedkb_reminders_create_schedule
    • First observedkb_reminders_get
    • First observedkb_reminders_list
    • First observedkb_revisions_get
    • First observedkb_revisions_list
    • First observedkb_revisions_restore
    • First observedkb_rules_get
    • First observedkb_rules_list_for_context
    • First observedkb_rules_set
    • First observedkb_rules_unset
    • First observedkb_skills_archive
    • First observedkb_skills_create
    • First observedkb_skills_delete
    • First observedkb_skills_deletion_status
    • First observedkb_skills_edit_apply
    • First observedkb_skills_edit_begin
    • First observedkb_skills_edit_commit
    • First observedkb_skills_edit_discard
    • First observedkb_skills_edit_move_file
    • First observedkb_skills_edit_put_file
    • First observedkb_skills_edit_rebase
    • First observedkb_skills_edit_remove_file
    • First observedkb_skills_files_get
    • First observedkb_skills_get
    • First observedkb_skills_list
    • First observedkb_skills_purge
    • First observedkb_skills_rename
    • First observedkb_skills_restore
    • First observedkb_skills_revert
    • First observedkb_skills_revisions_get
    • First observedkb_skills_revisions_list
    • First observedkb_skills_search
    • First observedkb_tenants_list

Publisher details

Operator
Finite Software Systems Ltd. · Publisher source
Vendor relationship
First-party · Publisher source
Restrictions
A Brainattic workspace and individual OAuth 2.1 authentication are required. The service is currently a free pilot; no paid Brainattic subscription or custom OAuth application is required. Access is governed by workspace membership, roles and permissions. The service is intended for business users aged 18 or over. Some AI clients may require a compatible subscription or administrator approval to enable custom MCP connectors. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables MCP clients to read and write into a self-hosted personal knowledge base built from imported chats, documents, and notes, with a knowledge graph and AI-powered enrichment.
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides persistent, multi-tenant knowledge graph memory for MCP-capable AI tools, allowing them to recall and store entities, observations, and relations across sessions with keyword search.
    10
    20 npm
    3
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.