Skip to main content
Glama

Server Details

The compliance specialist your AI calls: ISO 27001, SOC 2, GDPR, NIS 2, DORA and more.

Ownership verified
Status
Healthy
Uptime
38.8% over 44 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL
Repository
better-isms/ismscopilot-plugin
GitHub Stars
0

TDQS

A4.3/5.0

Scored across 25 tools

Disambiguation4/5

Most tools map to a distinct resource+action, and the descriptions actively fence off the risky pairs (get_company vs get_company_context, create_memory vs set_company_context, create_conversation vs send_message, delete_company vs unlink_workspace_company). The remaining blur is real but narrow: set_company_context with workspace_id can create-and-link a company, overlapping create_company + link_company_to_workspace, and workspace-linked updates via set_company_context overlap update_company. The embedded assistant ids (questionnaire-responder, audit-prep, nis2, dora, etc.) look like standalone tools but are actually just option values, which is an easy source of misselection.

Naming Consistency5/5

Uniform snake_case verb_noun throughout: create_/get_/list_/update_/delete_/set_/link_/unlink_/revoke_ plus a few natural verb-first exceptions (send_message, get_reply). Resource nouns are used consistently across the CRUD families (company, workspace, memory, api_key). No camelCase mixing or arbitrary naming.

Tool Count3/5

25 tools sits at the top of the 'heavy' band and the surface spans six unrelated domains (conversations, companies, workspaces, memories, API keys/credits, account/documents). Each tool is defensible, but the credential/credit trio and the nine company-context tools inflate a set whose core job is asking compliance questions. Descriptions are enormous, which further raises per-tool selection cost.

Completeness4/5

Companies have full CRUD plus link/unlink, and API keys have create/list/revoke, which covers the main lifecycle. Gaps remain: no delete_memory despite create/list/update, no rename/delete workspace, no list_conversations, and documents are read-only (list only) — though upload/delete plausibly live in the web app. These are workable-around gaps rather than dead ends.

Available Tools

25 tools
create_api_credit_checkoutAInspect

Create a Stripe Checkout URL to add prepaid model API credits (min $20). Use it only when the user asks to add API credits. A human must open the URL and pay; nothing is charged without that payment in the browser. Then poll get_api_credit_balance. Return URLs are fixed on platform.ismscopilot.com/credits. Rate-limited (5 per hour per user). Requires api_credits:checkout.

NameRequiredDescriptionDefault
amountYesUSD amount to add (integer or decimal, min 20, max 10000)

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 (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false) by disclosing the human-in-the-loop payment requirement, that nothing is charged without browser payment, the fixed return URL host, a 5-per-hour-per-user rate limit, and the required api_credits:checkout scope. These are exactly the operational facts an agent cannot derive from structured fields.

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, each carrying a distinct fact: what it creates, when to use it, that payment is human-gated, the follow-up poll, and the constraints (redirect host, rate limit, scope). The critical action and constraint lead.

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 having no output schema, the description tells the agent what the return value is (a checkout URL), what happens after (human pays, then poll get_api_credit_balance), and the full constraint envelope. An agent has everything needed to call this correctly and safely in a single pass.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'amount' parameter is already documented with type, min 20, and max 10000. The description's '(min $20)' merely restates the schema rather than adding new meaning such as currency assumptions or rounding behavior.

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 Stripe Checkout URL' for 'prepaid model API credits' — with the amount constraint ($20 min) right in the first sentence. This is clearly distinguishable from siblings like create_api_key or get_api_credit_balance.

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 gating condition ('only when the user asks to add API credits') and an explicit follow-up action ('Then poll get_api_credit_balance'), effectively naming the alternative tool for the balance-reading case. Nothing about when to invoke this is left to inference.

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

create_api_keyAInspect

Mint a new model API key (sk-isms-...) for api.ismscopilot.com/v1 (Authorization: Bearer sk-isms-...). Use it only when the user asks for a new key. The plaintext token is returned ONCE: give it to the user to store securely. Max 20 active keys. It does not add prepaid credits. Requires api_keys:write.

NameRequiredDescriptionDefault
nameYesKey label (max 80 chars)

TDQS

A4.5/5.0
Behavior5/5

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

Discloses behavior an agent cannot get from annotations: the plaintext token is returned exactly once and must be handed to the user for secure storage, there is a 20-active-key cap, and the call requires the api_keys:write scope. These are precisely the failure modes (losing the token, hitting the quota, missing auth) that matter for this mutation.

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

Conciseness5/5

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

Four short sentences, front-loaded with what the tool produces and the one-time-secret warning before the quota and permission notes. No filler.

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

Completeness5/5

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

With no output schema, the description still explains the return value (plaintext token, delivered once) and adds prerequisites and limits. An agent has everything needed to call this correctly and handle the result safely.

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

Parameters3/5

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

The single parameter is fully documented in the schema (label, max 80 chars) at 100% coverage, so the schema carries the load. The description adds no further semantics about the name field, which matches the baseline 3 for high-coverage schemas.

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

Purpose5/5

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

States a specific verb and resource ('Mint a new model API key'), plus the concrete token format, endpoint, and auth scheme. This is unmistakably distinct from siblings like create_api_credit_checkout or create_company.

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 constrains usage ('Use it only when the user asks for a new key') and rules out a likely confusion by noting it does not add prepaid credits. However, it never names the relevant alternatives (list_api_keys for inspection, revoke_api_key for cleanup), so routing is solid but not fully specified.

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

create_companyAInspect

Create a company (client context): a company item workspaces link to. Use it when the user adds a new client or company, then link it with link_company_to_workspace. Do not use it to change an existing company (update_company). At least one field is required: company_name, sector, scale, hq_country, privacy_role (controller|processor|both), data_types, hosting_region, tech_stack, notes. Your plan limits how many companies you may own (a 429 error names the limit when reached). Requires company_context:write.

NameRequiredDescriptionDefault
notesNoFree-form must-know (max 2000 chars)
scaleNoSize, for example headcount or revenue band
sectorNoIndustry sector, for example fintech or healthcare
data_typesNoKinds of data processed, for example customer personal data or health data
hq_countryNoHeadquarters country
tech_stackNoMain platforms and cloud providers
company_nameNoCompany legal or trading name
privacy_roleNocontroller | processor | both
hosting_regionNoWhere systems and data are hosted, for example EU (Frankfurt)

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 (which only say non-read-only, non-idempotent, non-destructive) by disclosing the auth scope 'company_context:write', the plan-based quota with a 429 that names the limit, and the non-obvious constraint that at least one of nine optional fields must be supplied. That last point is the key behavioral fact the schema cannot express, since required is empty.

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 definition, then trigger, then exclusion, then constraint, then auth. Every sentence carries information, though the field list and permission clause make it slightly dense as a single block rather than clearly separated.

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 create tool with nine optional string params and no output schema, the description covers trigger, exclusion, minimum-content rule, quota behavior, and required scope. Only the success return (e.g. whether a company id is returned for chaining into link_company_to_workspace) is left unstated.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real semantic content: it enumerates the accepted fields and spells out the closed value set for privacy_role (controller|processor|both), which the schema states only in prose. It does not add format guidance, but the coverage gap is small.

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

Purpose5/5

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

States a specific verb+resource ('Create a company') and defines it functionally as 'a company item workspaces link to'. It explicitly names the two nearest siblings (link_company_to_workspace, update_company) so an agent can distinguish create from link and from update 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 Guidelines5/5

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

Gives an explicit trigger ('when the user adds a new client or company'), a follow-up action ('then link it with link_company_to_workspace'), and an explicit exclusion ('Do not use it to change an existing company (update_company)'). The when/when-not/alternative triad is fully covered.

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

create_conversationAInspect

Ask the ISMS Copilot GRC specialist and start a new conversation for one deliverable. ISMS Copilot is a compliance specialist that works from the framework texts and the user's account context (company profile, workspaces, documents). Use it, rather than answering from memory, whenever the user needs ISO 27001/27701/42001, SOC 2, GDPR, NIS 2, DORA, EU AI Act, Cyber Resilience Act, NIST SP 800-171/CMMC, HIPAA or PCI DSS interpreted or applied: clause and control questions, policy drafting, control mapping, gap analysis, SoA justifications, risk registers, audit prep, questionnaires, implementation roadmaps, incident and breach response (what to do now, notification duties). Do not use it for code, git, files or questions with no compliance angle, or for a follow-up on the same deliverable (send_message). Send the question as written, without pasting framework text: the specialist brings it. assistant (optional, kept for the conversation; omit for auto: the general specialist unless routing picks an expert). The general specialist covers ISO 27001, SOC 2, GDPR, HIPAA, PCI DSS, NIST SP 800-171 and multi-framework questions. Rule: a task to do takes the job id even when it names a framework; a question about one framework takes that framework's id; else omit assistant.

  • questionnaire-responder: use when answering or assessing a security questionnaire

  • audit-prep: use when preparing an internal or external audit

  • implementation-lead: use when asked for a plan or roadmap to implement or certify a framework

  • incident-lead: use when an incident or breach is under way or just happened (what now, notification duties)

  • iso27701: use when about ISO 27701 privacy management

  • iso42001: use when about ISO 42001 AI management

  • nis2: use when about NIS 2

  • dora: use when about DORA

  • eu-ai-act: use when about the EU AI Act

  • cra: use when about the Cyber Resilience Act Options: mode 'fast' (default), 'think' for multi-step analysis, 'beyond' only for long research-grade drafting (paid plans, daily cap; if it cannot run, the turn answers normally and beyond_denied_reason says why); answer_format 'brief' or 'decision' for a compact reply written for an agent; workspace_id (a UUID from list_workspaces) for client or company work; title. Returns conversation_id, message_id and status: 'complete' with response, or 'generating': then poll get_reply. Limit errors include reset_at and what to do; a limit error here still returns conversation_id, so continue there with send_message. Relay docgen_notice to the user when present. ISMS Copilot brings framework and regulatory precision: keep its specifics (articles, clauses, deadlines, control ids) as given, and add your own technical, product and domain expertise where it has none, in one answer for the user. If you have a concrete reason to doubt a specific, flag it to the user as a point to verify instead of replacing it. Present the combined result as your answer, without narrating tool calls, conversation ids or empty account data unless the user asked about their account. Do not include passwords, API keys, payment card numbers, health records or government ID numbers. Answers are informational, not legal advice.

NameRequiredDescriptionDefault
modeNoReasoning depth: 'fast' (default), 'think' (paid plans), or 'beyond' (paid plans; agentic multi-step run, minutes-scale, poll get_reply).
titleNoOptional conversation title shown in the ISMS Copilot app.
messageYesThe question or request, in the user's words. Do not paste framework text.
assistantNoOptional assistant for this conversation: 'auto' (default), 'general', or an id from list_assistants. It stays for the whole conversation.
workspace_idNoOptional workspace id (a UUID from list_workspaces) for client or company work; turns then use that workspace's context.
answer_formatNoOptional reply format for an agent caller: 'brief' (shortest correct answer, about 150 words), 'decision' (recommendation first, then why, risks and next steps as bullets, about 300 words), or 'full' (the default chat style). Omit for the default. An explicitly requested full document is never cut short.
overflow_consentNoSet true ONLY when the user explicitly asks to continue past their usage limit. On eligible paid accounts (ADP off, non-Essential) over the 4h cap, the turn then runs on the disclosed fallback models up to an additional 2x the plan's token limit. Ignored on free, Essential, ADP, or team-pool accounts and when the overflow bucket is exhausted (fallback_exhausted: true).

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations, it discloses limit/rate behaviour ('reset_at', reset guidance), paid-plan gating for 'think'/'beyond', the daily cap and the beyond_denied_reason fallback, the overflow behaviour on eligible accounts, the 'generating' status requiring a get_reply poll, that a limit error still returns a usable conversation_id, and that docgen_notice must be relayed. It also sets an explicit privacy boundary on what may not be included.

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 and almost every sentence carries operational weight, but the text is long and has redundancy: the 'assistant' rule and the 'do not paste framework text' instruction are both restated in the schema descriptions, and the specialist bullet list is verbose. Nothing is misleading, but some compression is possible.

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, open-world, non-idempotent tool with no output schema, the description covers return shape (conversation_id, message_id, status), the polling path via get_reply, error and limit handling, and account gating. Combined with the schema it leaves nothing an agent needs before calling.

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

Parameters5/5

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

Even at 100% schema coverage, the description adds real meaning: a routing rule for 'assistant' ('a task to do takes the job id even when it names a framework; a question about one framework takes that framework's id; else omit'), plus a per-specialist routing table and a note that the assistant persists for the conversation. It also explains 'beyond' versus 'think' beyond what the enum alone conveys.

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 ('Ask the ISMS Copilot GRC specialist and start a new conversation for one deliverable') and explicitly scopes it to a single deliverable, which separates it from send_message for follow-ups. The framing is unambiguous about what is being created and what it is for.

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 a dense when-to-use list (clause questions, policy drafting, gap analysis, SoA justifications, incident response, etc.) plus explicit when-not-to-use conditions: code, git, files, questions with no compliance angle, and follow-ups on the same deliverable. It also names the alternative (send_message) for the follow-up case and tells the caller not to paste framework text.

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

create_memoryAInspect

Save a memory (max 500 characters): a short fact ISMS Copilot uses as background in later answers, personal or scoped to a workspace with workspace_id. Use it only when the user asks ISMS Copilot to remember something. Do not use it for company profile facts (set_company_context) or to change an existing memory (update_memory). Each call adds a new memory.

NameRequiredDescriptionDefault
contentYesThe memory text, max 500 characters.
workspace_idNoOptional workspace id (a UUID from list_workspaces); omit for a personal memory.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish this is a non-read-only, non-idempotent, non-destructive write, and the description usefully explains why it is non-idempotent ("Each call adds a new memory") and adds a hard size constraint (500 chars). It does not cover what happens on failure or whether memories can be duplicated or capped, so it stops short of a 5.

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

Conciseness5/5

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

Four short sentences, front-loaded with the definition before the constraints and exclusions; the only mild repetition is the 500-character limit, which is reasonable to surface in prose because it is a hard authoring constraint.

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 creation tool with no output schema and full schema coverage, the description supplies everything an agent needs: what a memory is, required size limit, scoping choice, and the routing rules to the two nearest alternatives.

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 are already documented there, including that workspace_id is a UUID from list_workspaces and that omitting it yields a personal memory. The description restates the personal-vs-workspace distinction but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

The description opens with a specific verb and resource ("Save a memory") and immediately defines what a memory is ("a short fact ISMS Copilot uses as background in later answers") plus its two scoping modes. It also names the sibling it is not — update_memory and set_company_context — so an agent can distinguish it from siblings 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?

It gives an explicit positive trigger ("only when the user asks ISMS Copilot to remember something") and two explicit exclusions with the correct alternative named for each (set_company_context for company facts, update_memory for edits). Nothing is left to inference about when to route elsewhere.

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

create_workspaceAInspect

Create a new personal workspace owned by the token user. Use it when the user asks for a new workspace, for example for a new client. Do not use it to rename or share one: persona, instructions and team sharing are set later in the web app, and passing organization_id or persona returns an error. name is required (trimmed, non-empty, max 120 characters). The workspace is not shared with a team and does not inherit organization Advanced Data Protection. Not idempotent: two identical calls create two workspaces. At most 10 workspaces may be created per account in 24 hours, web app included (429 when exceeded). Find it afterwards with list_workspaces. Requires workspaces:write.

NameRequiredDescriptionDefault
nameYesWorkspace name (trimmed non-empty, max 120 characters)

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses the 429 rate limit of 10 workspaces per 24 hours including web-app usage, the auth requirement (workspaces:write), that the workspace is not team-shared and does not inherit organization Advanced Data Protection, and that organization_id/persona inputs error out. The non-idempotency note is consistent with idempotentHint=false and clarifies the concrete consequence (two identical calls create two workspaces).

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?

Action and usage guidance are front-loaded, and each subsequent sentence carries a distinct operational fact (constraints, non-sharing, non-idempotency, rate limit, follow-up, scope). It is dense with clauses and could be split for readability, 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 one-parameter creation tool with no output schema, the description covers everything an agent needs: trigger conditions, exclusions, input limits, side effects, quota behavior, required scope, and how to find the created object afterwards.

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 description's name constraints (trimmed, non-empty, max 120) restate the schema field verbatim. The added note that passing organization_id or persona returns an error is useful but behavioral rather than a clarification of the declared parameter, so this sits at the baseline.

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

Purpose5/5

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

States a specific verb and resource ('Create a new personal workspace owned by the token user') along with the key owning scope. It explicitly separates itself from adjacent operations (rename, share, persona/instructions) that are handled elsewhere, so an agent can distinguish it from update or team-sharing tools in the sibling list.

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 positive trigger ('when the user asks for a new workspace, for example for a new client') and explicit exclusions ('Do not use it to rename or share one'), naming the correct surface (web app) for those excluded cases. It also names the follow-up tool list_workspaces for verification.

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

delete_companyA
DestructiveIdempotent
Inspect

Delete one of your companies by id. Use it only when the user asks to remove that client or company; to detach a single workspace, use unlink_workspace_company instead. Workspaces linked to it are unlinked automatically (turns in them then use no company profile); workspace data is never deleted. Requires company_context:write.

NameRequiredDescriptionDefault
company_idYesCompany id (a UUID from list_companies).

TDQS

A4.7/5.0
Behavior5/5

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

Even though annotations already mark this as destructive, idempotent, and not read-only, the description adds crucial domain behavior: linked workspaces are automatically unlinked and their data is never deleted. It also states the required permission ('company_context:write'), which is not captured by 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?

The description is four tight sentences with no filler, and it leads with the core action before covering usage constraints, cascade behavior, and permissions. Every sentence carries operational information.

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

Completeness5/5

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

For a destructive, single-parameter tool with no output schema, the description covers the key risks and side effects: cascade unlinking, data preservation, permission requirements, and the alternative detachment tool. Nothing critical is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, and the single parameter is documented in the schema as a UUID from list_companies. The description adds 'by id' but no additional format or sourcing detail beyond the schema, so 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?

The description states a specific verb and resource ('Delete ... companies') and constrains it by id. It also explicitly distinguishes the operation from the sibling tool unlink_workspace_company, so an agent can identify the correct tool without opening sibling schemas.

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

Usage Guidelines5/5

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

It gives an explicit use condition ('only when the user asks to remove that client or company') and names the alternative tool for detaching a single workspace. The when-to-use and when-not-to-use guidance is clear and actionable.

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

get_account_infoA
Read-onlyIdempotent
Inspect

Get the connected account's user id, scopes, Advanced Data Protection state, plan slug and owned chat-app URLs (urls.upgrade_url, urls.usage_url, urls.help_url). Use it when the user asks about their plan or settings, or after a limit error to show where to check usage. Do not call it to check quota before a conversation: it does not return live remaining quota. Data Protection is read-only here; change it at data_protection.manage_url. Limit errors from create_conversation and send_message carry reset_at and say what to do: upgrade_url for solo users and org owners; organization members get quota_scope, org_role and extra_usage_buyable and are told to ask the owner for extra usage or wait for the next 4-hour window.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare this a safe idempotent read, and the description still adds substantive behavior: what is NOT returned (live remaining quota), that Data Protection is read-only here with a redirect to the mutation path, and what limit errors from create_conversation/send_message contain (reset_at, upgrade_url, quota_scope, org_role, extra_usage_buyable) plus the 4-hour window.

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 returned fields, then usage guidance, then exclusions — a sound order with no filler. The final two sentences drift into the error contract of sibling tools (create_conversation, send_message), which is useful context but slightly beyond this tool's own scope.

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

Completeness5/5

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

With no input parameters and no output schema, the description compensates by enumerating the returned fields and their nested URL keys. An agent has everything needed to call it and interpret the result without opening anything else.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing to disambiguate and the baseline applies. The description correctly spends no words on input semantics and instead documents the output surface.

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?

Names a specific verb and enumerates the exact resource contents returned (user id, scopes, Advanced Data Protection state, plan slug, owned chat-app URLs), so an agent knows precisely what it gets back. It also draws a boundary against the quota-checking siblings in the same breath.

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

Usage Guidelines5/5

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

Gives explicit triggers (user asks about plan or settings, or after a limit error to show where to check usage) and an explicit exclusion (do not call it to check remaining quota before a conversation). It also routes the agent to data_protection.manage_url for the mutation case.

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

get_api_credit_balanceA
Read-onlyIdempotent
Inspect

Read the prepaid model API credit balance (USD). Use it when the user asks about API credits, or after a checkout to confirm the payment landed. Zero means top up with create_api_credit_checkout (when enabled) or the platform Credits page. Requires api_credits:read.

NameRequiredDescriptionDefault

No parameters

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, so the safety profile is covered; the description adds the required scope (api_credits:read) and the interpretation rule that zero means top up. It does not mention any rate limits or whether the balance is cached/eventually consistent, so it falls just short of a 5.

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

Conciseness5/5

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

Four short sentences, front-loaded with the identity of the resource, followed by usage, edge-case handling, and the permission requirement. Nothing is redundant or 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 no parameters and no output schema, the description supplies everything needed: what is returned (a USD credit balance), how to read a zero result, and the scope requirement. An agent can invoke it correctly without further information.

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 there is nothing for the description to disambiguate; the baseline is 4. The '(USD)' qualifier usefully fixes the unit of the implicit return value.

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 ('Read the prepaid model API credit balance (USD)') and clearly distinguishes it from the write-side sibling create_api_credit_checkout. An agent can tell immediately this is a read of a scalar balance, not a transaction.

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 two concrete triggers ('when the user asks about API credits' and 'after a checkout to confirm the payment landed') and routes the zero-balance case explicitly to create_api_credit_checkout or the Credits page. When-to-use and what-to-do-next are both spelled out.

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

get_companyA
Read-onlyIdempotent
Inspect

Read one of your companies by id (client context): id, company_profile, created_at, updated_at. Use it when you already have a company_id from list_companies or get_company_context; to browse, use list_companies. Requires company_context:read.

NameRequiredDescriptionDefault
company_idYesCompany id (a UUID from list_companies).

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 destructiveHint=false, so the safety profile is covered. The description adds genuinely new context beyond that: the required `company_context:read` scope and the shape of the returned record. It stops short of describing error behavior for an unknown id, 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?

Two sentences, zero waste, with the core action and returned fields front-loaded before the conditional usage note. 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?

There is no output schema, but the description compensates by listing the returned fields (id, company_profile, created_at, updated_at). Combined with the stated auth scope and the id source, an agent has everything needed to call this correctly.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter already documents that it is a UUID sourced from list_companies. The description's "by id (client context)" adds only marginal framing beyond that, 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 ("Read one of your companies by id") and enumerates the returned fields, so the agent knows exactly what comes back. It also implicitly distinguishes itself from the list/browse and context siblings.

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 precondition ("when you already have a company_id from list_companies or get_company_context") plus a named alternative for the other case ("to browse, use list_companies"). The required permission scope is stated outright, leaving nothing to inference.

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

get_company_contextA
Read-onlyIdempotent
Inspect

Read the company profile (Company Context): structured facts ISMS Copilot uses as background for its answers. Use it when the user asks what ISMS Copilot knows about their company or a client, and before set_company_context so you keep the fields already set. Without workspace_id this is the account-level profile (your personal default). With workspace_id it is that workspace's LINKED company's profile (owned personal workspaces only): turns in that workspace use the linked company's facts instead of the personal default. Returns { company_profile: object | null, company_id?: string | null (workspace reads) }; null means not set (turns in that workspace then use no company profile). Requires company_context:read. Do not call it before a question unless the task needs the user's own data: ISMS Copilot already uses it in its answers. An empty result needs no mention unless the user asked about their account.

NameRequiredDescriptionDefault
workspace_idNoOptional workspace id (a UUID from list_workspaces) you own: read its client profile instead of the account default.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it discloses the required scope (company_context:read), the return shape, the meaning of null, and the non-obvious consequence that turns in a workspace then use no company profile. The workspace-vs-account resolution rule is precisely the hidden behavior an agent would otherwise get wrong.

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

Conciseness4/5

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

Front-loaded with the purpose in the first clause, then scope, then return contract, then usage caveats — a sensible order. It is dense but slightly redundant: the parenthetical about turns using no company profile repeats a point already implied by "null means not set."

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 only one optional parameter and no output schema, the description still supplies the return object shape, the null case, the auth scope, and the fallback-resolution behavior. An agent can call this confidently on the first try and correctly decide not to call it.

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

Parameters4/5

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

Schema coverage is already 100%, so baseline is 3; the description earns above that by explaining what workspace_id actually means semantically — it reads that workspace's linked company, only for owned personal workspaces, not an arbitrary partition. That is meaning the schema's "Optional workspace id" line does not carry.

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 ("Read the company profile (Company Context)") and explains exactly what that object is: structured facts used as background for answers. It also cleanly splits the account-level vs workspace-linked read modes. It never names the sibling get_company, so an agent cannot tell from this text alone how this differs from that 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?

Explicit when-to-use ("when the user asks what ISMS Copilot knows about their company or a client"), explicit negative guidance ("Do not call it before a question unless the task needs the user's own data"), and an explicit sequencing rule relative to set_company_context. It even tells the agent not to mention empty results unprompted, which is a real usage decision.

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

get_replyA
DestructiveIdempotent
Inspect

Fetch the reply for a turn that create_conversation or send_message returned with status 'generating'. Use it only for such a turn; do not call it when the turn already came back 'complete'. Polling is safe and expected: call it again every few seconds (every 10 to 20 seconds for beyond turns, which take minutes) until status is 'complete' (with response) or 'error'. Pass the conversation_id and message_id from that call, and for a beyond turn the beyond_run_id to pin that run. Before presenting a reply, read its flags: provider_fallback (a backup model answered), overflow_active (the over-cap fallback the user elected ran), answer_format_applied: false (Beyond ignored answer_format), and for a beyond turn beyond_run_status with a 'message' note when the run stopped early: then tell the user the result is partial, never present it as a finished run. A completed reply may carry usage (ISMS Copilot-side tokens, not your own count). Relay docgen_notice to the user when present. Then present it combined with your own expertise as one answer, without narrating tool calls, ids or empty account data. Side effect: if the turn has stopped responding, this call marks that turn as failed so the conversation can continue; it changes only the turn's status, never a saved message or reply.

NameRequiredDescriptionDefault
message_idYesMessage id (a UUID) from the same call.
beyond_run_idNoOptional: pin the reply to a specific Beyond run (the beyond_run_id a 'beyond' create/send ticket returned).
conversation_idYesConversation id (a UUID) from the create_conversation or send_message call.

TDQS

A4.8/5.0
Behavior5/5

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

Adds substantial behavior beyond annotations: discloses the side effect that a stalled turn gets marked failed (consistent with destructiveHint=true and readOnlyHint=false), explains the returned flags (provider_fallback, overflow_active, answer_format_applied, beyond_run_status), usage semantics, and docgen_notice relay. No contradiction with the annotation set.

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

Conciseness4/5

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

Front-loads the core purpose and usage constraint, then layers polling guidance and flag handling; nearly every sentence carries actionable content. It is dense and long-winded in the flag-listing clause, but not 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?

Despite having no output schema, the description names the status values, the flags to inspect, and how to present results, covering what an agent needs to poll, interpret, and relay correctly. The side-effect disclosure closes the otherwise risky mutation gap.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds real value by saying where conversation_id/message_id come from ('from that call') and what beyond_run_id does ('pin that run'). It does not add format/syntax detail, which is fine given the schema already specifies UUIDs.

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 ('Fetch the reply for a turn') and ties it directly to the siblings that produce such turns (create_conversation, send_message) with the 'generating' status condition. An agent can distinguish this from send_message 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?

Explicit when-to-use ('turns that returned status generating'), when-not ('do not call it when the turn already came back complete'), and operational guidance (poll every 10–20 seconds for beyond turns until complete/error). Alternatives and exit conditions are named, not inferred.

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

list_api_keysA
Read-onlyIdempotent
Inspect

List this account's model API keys (sk-isms metadata only, never secrets). Use it when the user asks which keys exist, or before revoke_api_key to find a key_id. Prepaid balance is separate (get_api_credit_balance). Requires api_keys:read.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description isn't carrying the safety burden. It still adds real value beyond them: it discloses that only metadata is returned and never secrets, and it states the required scope api_keys:read, which annotations do not cover. Minor gap: no mention of ordering or result size for large key sets.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action and the most consequential caveat (never secrets) before the usage routing. Nothing repeats the name or 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?

For a no-parameter read tool with rich annotations, the description covers purpose, the security caveat, the required scope, and the downstream sibling. An agent has everything needed to select and call it correctly.

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

Parameters4/5

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

Zero parameters, so there is nothing for the description to disambiguate and the 100% schema coverage baseline applies. The description adds no parameter detail and needs none.

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

Purpose5/5

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

States a specific verb and resource (list this account's model API keys) and immediately scopes it as metadata-only, never secrets. That scope clause distinguishes it from any secret-returning operation and from the credit-balance 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 both a trigger (user asks which keys exist) and a chaining use (before revoke_api_key to find a key_id), plus an explicit exclusion pointing to get_api_credit_balance for balance questions. Lacks an explicit 'do not use create_api_key for this' statement but the routing is already clear.

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

list_assistantsA
Read-onlyIdempotent
Inspect

List built-in assistants: by_job (jobs, with skills) and built_in (frameworks). Use it to see scopes and skills before picking an id for 'assistant' on create_conversation or send_message; not needed when their description already shows the right id. By job: Questionnaire responder (questionnaire-responder), Audit prep (audit-prep), Implementation lead (implementation-lead), Incident lead (incident-lead). By framework: Privacy management (iso27701), AI management (iso42001), NIS 2 (nis2), DORA (dora), EU AI Act (eu-ai-act), Cyber Resilience Act (cra). Rule: a task to do takes the job id even when it names a framework; a question about one framework takes that framework's id; else omit assistant. Omitting 'assistant' gives auto (the general specialist unless routing picks an expert); the general specialist covers ISO 27001, SOC 2, GDPR, HIPAA, PCI DSS, NIST SP 800-171 and multi-framework questions.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds behavioral context the annotations cannot: what omitting 'assistant' actually does ('gives auto — the general specialist unless routing picks an expert') and what the general specialist covers. It does not mention output shape or ordering, but the read-only profile is fully declared elsewhere.

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

Conciseness3/5

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

The purpose and the usage rule are front-loaded, which is good, but the middle of the description enumerates all ten assistant names and ids — data the tool itself returns at call time. That enumeration duplicates the (unshown) return value and inflates the description well past what an agent needs before invoking it.

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

Completeness5/5

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

There is no output schema, so the description carries the burden of describing return values — and it does, listing every assistant and id along with the two grouping modes. Combined with the routing rule, an agent has everything needed to call this and act on the result.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline of 4 applies. The description goes further by explaining the semantics of the 'assistant' argument on the sibling tools it feeds, mapping ids to concrete names, which is genuine added meaning rather than 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?

The opening sentence names the verb and resource precisely ('List built-in assistants') and immediately breaks the resource into its two enumerable categories (by_job, built_in) with their distinguishing attributes (jobs with skills vs frameworks). No sibling tool in the list returns assistants, so there is no ambiguity to resolve.

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

Usage Guidelines5/5

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

It states exactly when to call it ('before picking an id for assistant on create_conversation or send_message') and, unusually, when NOT to ('not needed when their description already shows the right id'). It then supplies a decision rule for job id vs framework id vs omitting the assistant entirely, leaving nothing to inference.

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

list_companiesA
Read-onlyIdempotent
Inspect

List your companies (client contexts): company items your workspaces link to, each with id, company_profile, created_at and updated_at. Use it to find a company_id (a UUID) before get_company, update_company, delete_company or link_company_to_workspace. Paginated: optional limit (default 50, max 100) and offset (default 0). Requires company_context:read.

NameRequiredDescriptionDefault
limitNoPage size (default 50, max 100)
offsetNoOffset into the list (default 0)

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/non-open-world, so the safety profile is covered. The description adds real behavioral context beyond that: the required permission scope (company_context:read) and the pagination contract (default 50, max 100, default offset 0). It stops short of describing ordering or 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: identity/content first, then the routing rationale, then constraints. Every clause carries information an agent needs, and 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?

With no output schema, the description compensates by enumerating the returned fields (id, company_profile, created_at, updated_at), and it covers permissions and pagination. For a zero-required-parameter read tool, 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 coverage is 100% and both parameters are self-documented with the same defaults, so the description mostly repeats the schema. No additional semantics (e.g., ordering, what offset counts against) are supplied. 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?

Names a specific verb+resource ("List your companies (client contexts)") and explains what each item contains (id, company_profile, created_at, updated_at). This clearly separates it from get_company, create_company, and the link/unlink siblings.

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

Usage Guidelines5/5

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

Explicitly states when to use it: to obtain a company_id (UUID) before calling get_company, update_company, delete_company, or link_company_to_workspace. The alternatives that consume the id are named, and the precondition is spelled out.

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

list_documentsA
Read-onlyIdempotent
Inspect

List the user's uploaded documents (metadata only: id, file name, type, size, processing status, workspace, dates), optionally for one workspace. Use it when the user asks which files ISMS Copilot holds. It does not return document text and does not upload files. Do not call it before a question unless the task needs the user's own documents. An empty result needs no mention unless the user asked about their account.

NameRequiredDescriptionDefault
workspace_idNoOptional workspace id (a UUID from list_workspaces); omit to list every document.

TDQS

A4.4/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 focuses on what it adds: metadata-only output, no text content, and the instruction to stay silent on empty results. It stops short of saying whether results are ordered or bounded, which is the only remaining behavioral 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?

Six short sentences, front-loaded with purpose then scope then usage rules, with no repetition of structured data. The empty-result sentence is unusual but earns its place by preventing spurious user-facing output.

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

Completeness4/5

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

With no output schema, the description compensates by listing the returned metadata fields, and it fully covers invocation conditions for a one-optional-parameter read tool. Minor incompleteness around result ordering/volume is the only thing an agent might still wonder about.

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

Parameters3/5

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

Schema coverage is 100% and the single workspace_id parameter is fully documented in the schema, including the list_workspaces reference. The description's 'optionally for one workspace' restates the schema without adding syntax or semantics, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('List the user's uploaded documents') and immediately enumerates the metadata fields returned (id, file name, type, size, processing status, workspace, dates). It also distinguishes itself from adjacent operations by declaring it does not return document text and does not upload files.

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 ('when the user asks which files ISMS Copilot holds'), an explicit exclusion ('do not call it before a question unless the task needs the user's own documents'), and even handling guidance for empty results. Nothing is left to inference.

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

list_memoriesA
Read-onlyIdempotent
Inspect

List saved memories: short facts ISMS Copilot keeps as background for its answers. Use it when the user asks what ISMS Copilot remembers, or before create_memory to avoid a duplicate. Omit workspace_id for personal memories, or pass it for that workspace's memories. Do not use it for company facts (get_company_context). Do not call it before a question unless the task needs the user's own data: ISMS Copilot already uses it in its answers. An empty result needs no mention unless the user asked about their account.

NameRequiredDescriptionDefault
workspace_idNoOptional workspace id (a UUID from list_workspaces); omit for personal memories.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare a safe read (readOnly, idempotent, non-destructive, closed-world), so the description adds higher-order behavior instead: that the assistant already consumes memories internally, that calling it unnecessarily is discouraged, and that an empty list should not be surfaced unprompted. That is context the annotations cannot carry.

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

Conciseness4/5

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

Front-loaded with purpose, then routing rules. Dense and mostly waste-free, though the final sentence about empty results could arguably fold into the preceding guidance without loss.

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?

Only one optional parameter, no output schema, and annotations cover safety. The description still covers scoping, when not to call, dedup use, and empty-result handling – everything needed to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100% and already documents workspace_id as a UUID from list_workspaces. The description adds the decision rule – omit for personal memories, pass it to scope to a workspace – which tells the agent *when* to set it, not just what it is.

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?

Names the exact resource ('saved memories') and defines what a memory is ('short facts ISMS Copilot keeps as background'). Explicitly contrasts with get_company_context (company facts) and create_memory (dedup check), so an agent can place it among siblings without opening schemas.

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

Usage Guidelines5/5

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

Gives explicit triggers ('user asks what ISMS Copilot remembers', 'before create_memory to avoid a duplicate'), explicit exclusions (company facts → get_company_context; don't call preemptively since the system already uses memories), and even guidance on silence for empty results.

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

list_workspacesA
Read-onlyIdempotent
Inspect

List the workspaces the user owns. Use it to find the workspace_id (a UUID) for client or company work before create_conversation, list_memories, list_documents or get_company_context. It only reads: it does not create, rename or share workspaces.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the 'only reads' sentence largely restates them. The description still adds value by disclosing the ownership filter (only workspaces the user owns) and the UUID form of the identifier, which annotations do not convey. Pagination, ordering and what fields come back are unstated.

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

Conciseness5/5

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

Three short sentences, zero filler. The core purpose is front-loaded, followed by the practical routing advice and the scope guard. Nothing repeats the tool name or wastes tokens.

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 no-argument, read-only list tool whose safety profile is fully covered by annotations, the description is nearly complete: it explains why to call it and what identifier it yields. It could mention what else a workspace record contains (e.g., name) to set expectations around the return shape, which has no output schema.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the schema to document and no description burden is created. Baseline 4 applies; the note that workspace_id is a UUID is a helpful return-value hint rather than a parameter detail.

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

Purpose5/5

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

States a specific verb and resource with scope: 'List the workspaces the user owns.' The closing clause ('does not create, rename or share') explicitly separates it from create_workspace, so an agent can distinguish it from siblings without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger — call this to obtain the workspace_id needed before create_conversation, list_memories, list_documents or get_company_context — and an explicit exclusion (no create/rename/share). The when and when-not are both stated, naming the concrete downstream tools.

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

revoke_api_keyA
DestructiveIdempotent
Inspect

Revoke a model API key by id: calls made with it stop working, and this cannot be undone. Use it only when the user asks to revoke a key; get the key_id from list_api_keys. Requires api_keys:write.

NameRequiredDescriptionDefault
key_idYesKey id (a UUID from list_api_keys).

TDQS

A4.7/5.0
Behavior5/5

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

Goes beyond the destructiveHint=true annotation by spelling out the concrete effect ("calls made with it stop working") and the irreversibility ("cannot be undone"), and adds an authorization requirement ("Requires api_keys:write") that annotations do not carry. This is exactly the extra context a mutation tool needs.

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

Conciseness5/5

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

Two tight sentences front-loading the action and consequence before the usage constraint. No filler, and the most decision-relevant facts (irreversibility, permission) come early.

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?

Single required parameter, full schema coverage, rich annotations, no output schema to explain. Effects, authorization, and input sourcing are all covered; nothing an agent needs in order 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 coverage is 100% and the property description already says "a UUID from list_api_keys," so the description's provenance note largely restates structured data. Baseline 3 applies since the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb (revoke) and resource (model API key) scoped by id, which cleanly separates it from create_api_key and list_api_keys in the sibling set. The consequence clause reinforces exactly what the operation does.

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

Usage Guidelines5/5

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

Explicit invocation condition ("only when the user asks to revoke a key") plus the prerequisite workflow for obtaining the argument ("get the key_id from list_api_keys"). That is a when-to-use, a when-not-to-use implication, and a pointer to the sibling that supplies input.

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

send_messageAInspect

Continue a conversation with the ISMS Copilot GRC specialist on the same deliverable: refine the same policy, extend the same gap analysis, or ask the next question. Use it with the conversation_id that create_conversation returned. Do not use it to start a new deliverable (create_conversation), or while the previous turn is still generating: wait for get_reply, since a send then is rejected. assistant (optional): switches the assistant from this turn on; omit to keep it, 'general' for the general specialist. Rule: a task to do takes the job id even when it names a framework; a question about one framework takes that framework's id; else omit assistant.

  • questionnaire-responder: use when answering or assessing a security questionnaire

  • audit-prep: use when preparing an internal or external audit

  • implementation-lead: use when asked for a plan or roadmap to implement or certify a framework

  • incident-lead: use when an incident or breach is under way or just happened (what now, notification duties)

  • iso27701: use when about ISO 27701 privacy management

  • iso42001: use when about ISO 42001 AI management

  • nis2: use when about NIS 2

  • dora: use when about DORA

  • eu-ai-act: use when about the EU AI Act

  • cra: use when about the Cyber Resilience Act Options: mode and answer_format as on create_conversation. Returns conversation_id, message_id and status: 'complete' with response, or 'generating': then poll get_reply. Limit errors include reset_at and what to do; when one carries fallback_available: true, resend the same message with overflow_consent: true only on the user's explicit go-ahead (no duplicate message is saved). Relay docgen_notice to the user when present. Do not include passwords, API keys, payment card numbers, health records or government ID numbers. Answers are informational, not legal advice.

NameRequiredDescriptionDefault
modeNoReasoning depth: 'fast' (default), 'think' (paid plans), or 'beyond' (paid plans; agentic multi-step run, minutes-scale, poll get_reply).
messageYesThe follow-up question or request, in the user's words.
assistantNoOptional: switch this conversation's assistant from this turn on: 'general' or an id from list_assistants. Omit to keep the current one.
answer_formatNoOptional reply format for an agent caller: 'brief' (shortest correct answer, about 150 words), 'decision' (recommendation first, then why, risks and next steps as bullets, about 300 words), or 'full' (the default chat style). Omit for the default. An explicitly requested full document is never cut short.
conversation_idYesConversation id (a UUID returned by create_conversation).
overflow_consentNoSet true ONLY when the user explicitly asks to continue past their usage limit. On eligible paid accounts (ADP off, non-Essential) over the 4h cap, the turn then runs on the disclosed fallback models up to an additional 2x the plan's token limit. Resending the SAME message text resumes the capped turn without duplicating it. Ignored on free, Essential, ADP, or team-pool accounts and when the overflow bucket is exhausted (fallback_exhausted: true).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only mark it as non-read-only and open-world; the description adds far more: the return shape (conversation_id, message_id, status 'complete' vs 'generating' → poll get_reply), rate-limit errors carrying reset_at, the fallback_available/overflow_consent path with the explicit-user-consent precondition and the no-duplicate-save guarantee, docgen_notice relaying, and a data-sensitivity prohibition. That is substantive behavioral context beyond the annotation set.

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 correctly: purpose and the two negative routing rules come first, then parameter nuance, then return/error behavior, then safety. Every block is functional, though the ten-bullet assistant catalogue is long and largely recoverable via list_assistants, which makes it slightly heavier than necessary.

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

Completeness5/5

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

There is no output schema, so the description carries the burden of describing returns — it does, including the 'generating' state and the polling handoff. Combined with error-path guidance, the consent rule, and the privacy constraint, an agent has everything needed to call this correctly, including what to tell the user afterwards.

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 description earns above that by adding selection logic the schema lacks (the assistant routing rule and the note that mode/answer_format mirror create_conversation) plus the consent gate on overflow_consent. It stops short of 5 because much of the assistant detail restates ids the schema already points at via list_assistants.

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 ('Continue a conversation with the ISMS Copilot GRC specialist on the same deliverable') and even enumerates the continuation shapes: refine a policy, extend a gap analysis, ask the next question. It explicitly contrasts itself with create_conversation (new deliverable) and get_reply (in-flight turn), so an agent can place it among siblings without reading schemas.

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

Usage Guidelines5/5

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

Gives both positive triggers and explicit exclusions with the correct alternative named for each: don't start a new deliverable (use create_conversation), don't send while the previous turn is generating (wait for get_reply, 'a send then is rejected'). It also supplies a decision rule for the optional assistant parameter ('a task to do takes the job id... a question about one framework takes that framework's id; else omit'), which is exactly the guidance an agent needs.

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

set_company_contextA
DestructiveIdempotent
Inspect

Full-replace the company profile (Company Context): fields you leave out are cleared, so read it first with get_company_context. Use it only when the user asks to set or update their company or client profile; do not use it for one-off facts (create_memory). Blank values are omitted. Without workspace_id this sets the account-level profile (your personal default); an empty object clears it. With workspace_id it targets that workspace's client context: a linked company is full-replaced (every linked workspace updates at once); an unlinked workspace gets a NEW company created from the payload and linked atomically (one client-context slot, plan limit enforced); an empty object unlinks it (turns in it then use no company profile, the company item is kept). Requires company_context:write. It does not switch the profile on or off for answers.

NameRequiredDescriptionDefault
notesNoFree-form must-know (max 2000 chars)
scaleNoSize, for example headcount or revenue band
sectorNoIndustry sector, for example fintech or healthcare
data_typesNoKinds of data processed, for example customer personal data or health data
hq_countryNoHeadquarters country
tech_stackNoMain platforms and cloud providers
company_nameNoCompany legal or trading name
privacy_roleNocontroller | processor | both
workspace_idNoOptional workspace id (a UUID from list_workspaces) you own: set its client profile instead of the account default.
hosting_regionNoWhere systems and data are hosted, for example EU (Frankfurt)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare destructiveHint/idempotent/readOnly; the description goes far beyond, spelling out that omitted fields are cleared, blank values are omitted, an empty object clears or unlinks, a linked company full-replace propagates to every linked workspace, an unlinked workspace creates a new company atomically with a plan limit enforced, and that company_context:write is required. It also closes a likely false assumption by noting it does not switch the profile on or off for answers.

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 destruction warning is correctly front-loaded, and almost every clause carries decision-relevant information. It loses a point for a single dense block and one garbled clause ("turns in it then use no company profile") that forces the agent to re-read the unlink behavior.

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

Completeness5/5

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

For a destructive, 10-parameter, output-schema-less mutation tool, this covers the destruction model, the prerequisite read, permission scope, alternative tools, and the full branching of workspace targeting. An agent has everything needed to call it correctly or correctly decline.

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 field-level meaning is already documented; the description adds genuinely new semantics only for workspace_id — account-level default when absent, workspace client context when present, and the divergent linked vs unlinked vs empty-object outcomes. The remaining nine fields get no added description-level meaning, which is acceptable given the fully 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?

Opens with a specific verb+resource combination ("Full-replace the company profile (Company Context)") that immediately distinguishes it from update_company and from get_company_context. The parenthetical naming of the object and the explicit full-replace framing let an agent tell it apart from 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 Guidelines5/5

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

Explicitly states when to use it ("only when the user asks to set or update their company or client profile"), when not to ("do not use it for one-off facts (create_memory)"), and names a prerequisite read ("read it first with get_company_context"). It routes the agent to two alternatives by name with the conditions that select them.

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

update_companyA
DestructiveIdempotent
Inspect

Full-replace a company's profile by id (PUT semantics; blank values are omitted, fields you leave out are cleared, so read it first with get_company). Use it when the user changes a client's facts: every workspace linked to the company updates at once. An empty object clears the company's facts (workspaces stay linked but use no company profile until facts are set again). Requires company_context:write.

NameRequiredDescriptionDefault
notesNoFree-form must-know (max 2000 chars)
scaleNoSize, for example headcount or revenue band
sectorNoIndustry sector, for example fintech or healthcare
company_idYesCompany id (a UUID from list_companies).
data_typesNoKinds of data processed, for example customer personal data or health data
hq_countryNoHeadquarters country
tech_stackNoMain platforms and cloud providers
company_nameNoCompany legal or trading name
privacy_roleNocontroller | processor | both
hosting_regionNoWhere systems and data are hosted, for example EU (Frankfurt)

TDQS

A4.7/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 context beyond that — blank values omitted, omitted fields cleared, all linked workspaces updated at once, and the required company_context:write scope. The only gap is that it doesn't say what the response looks like or how partial failures across linked workspaces are handled.

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, each carrying distinct load: operation semantics, when to use, blast radius, edge case, and auth requirement. Replace semantics and the read-first warning are front-loaded where they matter most.

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 10-parameter destructive mutation with no output schema, the description covers the semantics, the permission requirement, the cross-workspace impact, and the empty-payload behavior. Nothing an agent needs in order to call it safely is missing.

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

Parameters4/5

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

Schema coverage is 100%, so per-field meanings are already documented and baseline would be 3. The description earns above baseline by explaining replace-vs-merge behavior for the ten optional fields — that omitted fields are cleared and an empty object wipes facts — which the schema cannot express.

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 ('Full-replace a company's profile by id') and pins the semantics with 'PUT semantics', which separates it cleanly from create_company and get_company. An agent knows exactly what operation this is without opening the schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('Use it when the user changes a client's facts') and an explicit prerequisite route ('read it first with get_company'), naming the sibling tool to call first. It also covers the degenerate case (empty object) so the agent knows the outcome of that path.

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

update_memoryA
DestructiveIdempotent
Inspect

Replace the text of an existing memory by id (max 500 characters); the old text is overwritten. Use it when the user asks to correct or change something ISMS Copilot remembers; get the id from list_memories. Do not use it to add a new memory (create_memory).

NameRequiredDescriptionDefault
contentYesThe new memory text, max 500 characters.
memory_idYesMemory id (a UUID from list_memories).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is known. The description adds value beyond them by stating the old text is overwritten and by pointing to list_memories as the id source. It stops short of saying whether the overwrite is reversible or how errors surface, keeping it below 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?

A single tight sentence-cluster: the operation and its constraint come first, then the when-to-use, then the id source, then the excluded sibling. 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?

For a two-parameter mutation with no output schema, the description covers what changes, the size limit, the id prerequisite, and the nearest alternative. Only minor operational details (reversibility, failure behavior) are absent, which is acceptable 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 coverage is 100%, so both parameters (content, memory_id) are already documented with type, max length, and UUID origin. The description restates those same facts rather than adding new semantics, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Replace the text of an existing memory by id') plus a concrete constraint (max 500 characters) and the overwrite effect. It is clearly distinguished from the sibling create_memory, which it names explicitly.

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 ('when the user asks to correct or change something ISMS Copilot remembers'), a prerequisite step ('get the id from list_memories'), and a stated exclusion ('Do not use it to add a new memory (create_memory)'). Nothing is left to inference.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updates
    • Changedcreate_company7 fields changed
      • addedInput schema / properties / company_name / description
        Added value: +"Company legal or trading name"
      • addedInput schema / properties / data_types / description
        Added value: +"Kinds of data processed, for example customer personal data or health data"
      • addedInput schema / properties / hosting_region / description
        Added value: +"Where systems and data are hosted, for example EU (Frankfurt)"
      • addedInput schema / properties / hq_country / description
        Added value: +"Headquarters country"
      • addedInput schema / properties / scale / description
        Added value: +"Size, for example headcount or revenue band"
      • addedInput schema / properties / sector / description
        Added value: +"Industry sector, for example fintech or healthcare"
      • addedInput schema / properties / tech_stack / description
        Added value: +"Main platforms and cloud providers"
    • Changedcreate_conversation3 fields changed
      • addedInput schema / properties / message / description
        Added value: +"The question or request, in the user's words. Do not paste framework text."
      • addedInput schema / properties / title / description
        Added value: +"Optional conversation title shown in the ISMS Copilot app."
      • addedInput schema / properties / workspace_id / description
        Added value: +"Optional workspace id (a UUID from list_workspaces) for client or company work; turns then use that workspace's context."
    • Changedcreate_memory2 fields changed
      • addedInput schema / properties / content / description
        Added value: +"The memory text, max 500 characters."
      • addedInput schema / properties / workspace_id / description
        Added value: +"Optional workspace id (a UUID from list_workspaces); omit for a personal memory."
    • Changeddelete_company1 field changed
      • changedInput schema / properties / company_id / description
        Previous value: -"UUID of the company"New value: +"Company id (a UUID from list_companies)."
    • Changedget_company1 field changed
      • changedInput schema / properties / company_id / description
        Previous value: -"UUID of the company"New value: +"Company id (a UUID from list_companies)."
    • Changedget_company_context1 field changed
      • changedInput schema / properties / workspace_id / description
        Previous value: -"Optional: read this workspace's client profile instead of the account default (workspace you own)"New value: +"Optional workspace id (a UUID from list_workspaces) you own: read its client profile instead of the account default."
    • Changedget_reply2 fields changed
      • addedInput schema / properties / conversation_id / description
        Added value: +"Conversation id (a UUID) from the create_conversation or send_message call."
      • addedInput schema / properties / message_id / description
        Added value: +"Message id (a UUID) from the same call."
    • Changedlink_company_to_workspace2 fields changed
      • changedInput schema / properties / company_id / description
        Previous value: -"UUID of your company to link"New value: +"Id of your company to link (a UUID from list_companies)."
      • changedInput schema / properties / workspace_id / description
        Previous value: -"UUID of the workspace you own"New value: +"Id of a workspace you own (a UUID from list_workspaces)."
    • Changedlist_documents1 field changed
      • addedInput schema / properties / workspace_id / description
        Added value: +"Optional workspace id (a UUID from list_workspaces); omit to list every document."
    • Changedlist_memories1 field changed
      • addedInput schema / properties / workspace_id / description
        Added value: +"Optional workspace id (a UUID from list_workspaces); omit for personal memories."
    • Changedrevoke_api_key1 field changed
      • changedInput schema / properties / key_id / description
        Previous value: -"UUID of the key"New value: +"Key id (a UUID from list_api_keys)."
    • Changedsend_message2 fields changed
      • addedInput schema / properties / conversation_id / description
        Added value: +"Conversation id (a UUID returned by create_conversation)."
      • addedInput schema / properties / message / description
        Added value: +"The follow-up question or request, in the user's words."
    • Changedset_company_context8 fields changed
      • addedInput schema / properties / company_name / description
        Added value: +"Company legal or trading name"
      • addedInput schema / properties / data_types / description
        Added value: +"Kinds of data processed, for example customer personal data or health data"
      • addedInput schema / properties / hosting_region / description
        Added value: +"Where systems and data are hosted, for example EU (Frankfurt)"
      • addedInput schema / properties / hq_country / description
        Added value: +"Headquarters country"
      • addedInput schema / properties / scale / description
        Added value: +"Size, for example headcount or revenue band"
      • addedInput schema / properties / sector / description
        Added value: +"Industry sector, for example fintech or healthcare"
      • addedInput schema / properties / tech_stack / description
        Added value: +"Main platforms and cloud providers"
      • changedInput schema / properties / workspace_id / description
        Previous value: -"Optional: set this workspace's client profile instead of the account default (workspace you own)"New value: +"Optional workspace id (a UUID from list_workspaces) you own: set its client profile instead of the account default."
    • Changedunlink_workspace_company1 field changed
      • changedInput schema / properties / workspace_id / description
        Previous value: -"UUID of the workspace you own"New value: +"Id of a workspace you own (a UUID from list_workspaces)."
    • Changedupdate_company8 fields changed
      • changedInput schema / properties / company_id / description
        Previous value: -"UUID of the company"New value: +"Company id (a UUID from list_companies)."
      • addedInput schema / properties / company_name / description
        Added value: +"Company legal or trading name"
      • addedInput schema / properties / data_types / description
        Added value: +"Kinds of data processed, for example customer personal data or health data"
      • addedInput schema / properties / hosting_region / description
        Added value: +"Where systems and data are hosted, for example EU (Frankfurt)"
      • addedInput schema / properties / hq_country / description
        Added value: +"Headquarters country"
      • addedInput schema / properties / scale / description
        Added value: +"Size, for example headcount or revenue band"
      • addedInput schema / properties / sector / description
        Added value: +"Industry sector, for example fintech or healthcare"
      • addedInput schema / properties / tech_stack / description
        Added value: +"Main platforms and cloud providers"
    • Changedupdate_memory2 fields changed
      • addedInput schema / properties / content / description
        Added value: +"The new memory text, max 500 characters."
      • addedInput schema / properties / memory_id / description
        Added value: +"Memory id (a UUID from list_memories)."
  2. 3 tool updates
    • Changedcreate_conversation1 field changed
      • addedInput schema / properties / assistant
        Added value: +{
        +  "description": "Optional assistant for this conversation: 'auto' (default), 'general', or an id from list_assistants. It stays for the whole conversation.",
        +  "type": "string"
        +}
    • Addedlist_assistants
    • Changedsend_message1 field changed
      • addedInput schema / properties / assistant
        Added value: +{
        +  "description": "Optional: switch this conversation's assistant from this turn on: 'general' or an id from list_assistants. Omit to keep the current one.",
        +  "type": "string"
        +}
  3. 7 tool updates
    • Addedcreate_api_credit_checkout
    • Addedcreate_api_key
    • Changedcreate_conversation2 fields changed
      • changedInput schema / properties / mode / description
        Previous value: -"Reasoning depth: 'fast' (default), 'think' for deeper reasoning, or 'beyond' for a longer multi-step run (minutes; poll get_reply). think and beyond are not available on every plan; the turn then answers in fast mode."New value: +"Reasoning depth: 'fast' (default), 'think' (paid plans), or 'beyond' (paid plans; agentic multi-step run, minutes-scale, poll get_reply)."
      • changedInput schema / properties / overflow_consent / description
        Previous value: -"Set true only when the user explicitly asks to continue past their usage limit. Where the account allows it, the turn then continues on a faster model; otherwise it is ignored."New value: +"Set true ONLY when the user explicitly asks to continue past their usage limit. On eligible paid accounts (ADP off, non-Essential) over the 4h cap, the turn then runs on the disclosed fallback models up to an additional 2x the plan's token limit. Ignored on free, Essential, ADP, or team-pool accounts and when the overflow bucket is exhausted (fallback_exhausted: true)."
    • Addedget_api_credit_balance
    • Addedlist_api_keys
    • Addedrevoke_api_key
    • Changedsend_message2 fields changed
      • changedInput schema / properties / mode / description
        Previous value: -"Reasoning depth: 'fast' (default), 'think' for deeper reasoning, or 'beyond' for a longer multi-step run (minutes; poll get_reply). think and beyond are not available on every plan; the turn then answers in fast mode."New value: +"Reasoning depth: 'fast' (default), 'think' (paid plans), or 'beyond' (paid plans; agentic multi-step run, minutes-scale, poll get_reply)."
      • changedInput schema / properties / overflow_consent / description
        Previous value: -"Set true only when the user explicitly asks to continue past their usage limit. Where the account allows it, the turn then continues on a faster model; otherwise it is ignored."New value: +"Set true ONLY when the user explicitly asks to continue past their usage limit. On eligible paid accounts (ADP off, non-Essential) over the 4h cap, the turn then runs on the disclosed fallback models up to an additional 2x the plan's token limit. Resending the SAME message text resumes the capped turn without duplicating it. Ignored on free, Essential, ADP, or team-pool accounts and when the overflow bucket is exhausted (fallback_exhausted: true)."
  4. 19 tool updates
    • First observedcreate_company
    • First observedcreate_conversation
    • First observedcreate_memory
    • First observedcreate_workspace
    • First observeddelete_company
    • First observedget_account_info
    • First observedget_company
    • First observedget_company_context
    • First observedget_reply
    • First observedlink_company_to_workspace
    • First observedlist_companies
    • First observedlist_documents
    • First observedlist_memories
    • First observedlist_workspaces
    • First observedsend_message
    • First observedset_company_context
    • First observedunlink_workspace_company
    • First observedupdate_company
    • First observedupdate_memory

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides a typed compliance model and governance runtime that lets AI draft policies, assess controls, find framework gaps, and build verifiable audit trails across frameworks like ISO 27001:2022, SOC 2, GDPR, NIST CSF 2.0, and HIPAA. Every write is gated by a server-side verifier and human approval, producing a tamper-evident record.
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.