capsulemcp
capsulemcp
Ein Model Context Protocol-Server für Capsule CRM. Verbinde Claude (Desktop, Code oder Web-Projekte über Custom Connector) mit deinem CRM und lass es natürliche Sprachfragen über den gesamten Datensatzgraphen beantworten: Kontakte, Organisationen, Opportunities, Projekte, Aufgaben und Timeline-Aktivitäten. Über die Grundlagen hinaus deckt es strukturierte Filter mit Feld-/Operator-Bedingungen ab, gespeicherte Suchen mit Sortierung, Workflow-Tracks (Vorlagen und Instanzen), Dateianhänge (Lesen + Schreiben), Audit gelöschter Datensätze und Batch-Abrufe von bis zu 50 Datensätzen pro Aufruf.
92 Tools über den Capsule-Ressourcengraphen (53 im Nur-Lese-Modus) – vollständige Leseabdeckung plus sorgfältige, bestätigungsgeschützte Schreibvorgänge; 6 Batch-Schreib-Tools (
batch_*) für Massenaktualisierungs-WorkflowsZwei Transports: stdio für lokale Installationen (Claude Desktop / Code), HTTP+OAuth für gehostete Custom Connectors
Nur-Lese-Modus als Ein-Umgebungsvariablen-Flag; funktioniert neben Lese-beschränkten Capsule-Tokens
MCP-Tool-Anmerkungen: 53 Lese-Tools tragen
readOnlyHint: true, 8 destruktive tragendestructiveHint: true– Clients, die diese Hinweise berücksichtigen, können sichere Lesevorgänge automatisch genehmigen, während sie bei Schreib-/destruktiven Aufrufen weiterhin nachfragenApache 2.0
Wähle deine Installation
Du möchtest | Lies dies |
Beispielhafte Fragen, sobald der Connector läuft | |
Lokale Nutzung mit Claude Desktop oder Claude Code | |
Einmal bereitstellen und das ganze Team über Claude.ai nutzen | |
In n8n-Workflows einbinden | |
Beitragen, debuggen, ein Tool hinzufügen oder ein Release erstellen | HOWTO.md (Verfahren) · CONTRIBUTING.md (Stil & PR-Prüfungen) |
Verstehen, was bewusst nicht implementiert ist (und warum) | |
Sehen, welche Leistungsarbeit erledigt wurde (und was als Nächstes kommt) | |
Ideen für Funktionen sehen, die in zukünftigen Versionen erscheinen könnten | |
Die überraschenden Teile der Capsule-v2-API kennenlernen (mit wörtlichen Doku-Zitaten) |
Für die meisten Einzelnutzer ist die Installation ein einzelnes JSON-Snippet, das in die Konfiguration von Claude Desktop eingefügt wird – siehe INSTALL.md.
Related MCP server: Pipedrive MCP
Schnellstart (Claude Desktop)
Generiere ein Capsule-API-Token: Meine Einstellungen → API-Authentifizierungstokens → Generieren, wähle aus Sicherheitsgründen den Bereich Lesen.
Füge dies zu deiner
claude_desktop_config.jsonhinzu (~/Library/Application Support/Claude/claude_desktop_config.jsonauf macOS):{ "mcpServers": { "capsule": { "command": "npx", "args": ["-y", "capsulemcp"], "env": { "CAPSULE_API_TOKEN": "<paste token here>", "CAPSULE_MCP_READONLY": "1" } } } }Starte Claude Desktop neu. Die Capsule-Tools erscheinen in der Tool-Auswahl.
Das war's. Der erste Start lädt das Paket von npm (ein paar Sekunden); spätere Starts sind sofort aus dem npx-Cache. Um eine bestimmte Version zu fixieren, verwende "capsulemcp@2.2.0" in args. Wenn du einen Fork oder einen unveröffentlichten Branch verfolgst, verwende stattdessen die GitHub-Ref-Form: "github:soil-dev/capsulemcp#v2.2.0" – gleiche Argumente, installiert nur aus einem Git-Clone statt aus der npm-Registry. Siehe INSTALL.md für den Claude-Code-Pfad, manuelle Installation und Fehlerbehebung.
Tools
Gruppe | Lesen | Schreiben |
Parteien (Personen/Organisationen) |
|
|
Chancen |
|
|
Projekte |
|
|
Zusätzliche Parteien (Mehrparteien-Deals) |
|
|
Aufgaben |
|
|
Einträge (Notizen / erfasste E-Mails) |
|
|
Anhänge (Datei-Upload / -Download) |
|
|
Aktivitätsfeed (mandantenweit) |
| — |
Audit (gelöschte Datensätze) |
| — |
Pipelines & Meilensteine (Chancen) |
| — |
Boards & Phasen (Projekte) |
| — |
Tracks (Workflow-Instanzen) |
|
|
Gespeicherte Filter |
| — |
Benutzerdefinierte Felder (Schema) |
| — |
Tags |
|
|
Benutzer & Teams |
| — |
Referenzmetadaten |
| — |
Die meisten Datensatzlisten-Tools verwenden standardmäßig perPage=25; Referenzdaten-Tools verwenden standardmäßig perPage=100, sodass kleine Konten normalerweise in eine Antwort passen. Alle paginierten Tools begrenzen perPage auf 100 und geben einen nextPage-Cursor zurück, wenn weitere Ergebnisse vorhanden sind. Viele GET-Tools akzeptieren einen embed-Parameter (z. B. tags,fields) – die Beschreibung jedes Tools listet seine gültigen Tokens auf (pro Ressource validiert; unbekannte Tokens werden abgelehnt und nicht stillschweigend ignoriert, und das aufruferseitige project-Token wird auf der Leitung auf Capsules veraltetes kase abgebildet).
Die filter_*-Tools kapseln Capsules strukturierten Filter-Endpunkt (POST /<entity>/filters/results) und akzeptieren ein Array von {field, operator, value}-Bedingungen, die UND-verknüpft werden. Capsules API unterstützt keine Ad-hoc-Sortierung. Für Fragen nach den „neuesten X" filtern Sie daher nach einer Datumsbedingung (z. B. addedOn is within last 7) und wählen Sie die höchste ID aus dem Ergebnis – Capsules numerische IDs sind monoton steigend.
Wenn Sie sortierbare Abfragen wünschen, verwenden Sie stattdessen gespeicherte Filter. Erstellen Sie den Filter einmal in Capsules Weboberfläche (dort können Sie Bedingungen, Spalten und orderBy festlegen) und rufen Sie dann run_saved_filter mit seiner ID auf. Verwenden Sie list_saved_filters, um herauszufinden, was verfügbar ist.
Nur-Lese-Modus
Setzen Sie CAPSULE_MCP_READONLY=1, um jedes Schreib-/Lösch-Tool auf der MCP-Ebene zu deaktivieren (keines von create_*, update_*, complete_task, add_note oder delete_* wird registriert). Kombinieren Sie dies mit einem Capsule-Token, das den Read-Scope hat, für Verteidigung in der Tiefe – der Scope Ihres Tokens ist die harte Obergrenze, unabhängig von der Umgebungsvariable.
Löschsicherheit
Jedes Ganzdatensatz-delete_*-Tool sowie remove_track und remove_additional_party erfordern confirm: true in ihren Argumenten. Ohne dies lehnt das Schema den Aufruf ab, bevor irgendein HTTP erfolgt. Die Tool-Beschreibungen weisen Claude an, die Entität zuerst zu lesen und mit dem Benutzer zu bestätigen, bevor es aufgerufen wird. Das kombinierte Design – Token mit Lese-Scope, Nur-Lese-Modus-Flag, Schema-Ebene-Bestätigungs-Gate – stellt sicher, dass destruktive Aktionen beabsichtigt und nicht versehentlich sind.
Lizenz
Apache License 2.0 — Copyright 2026 Anton Arapov.
Available Tools
92 toolsadd_additional_partyA
Link an existing party as an additional (secondary) party on an opportunity or project. The 'main' party is set via update_opportunity / update_project; this adds additional parties beyond the main one. Idempotent — re-adding a linked party is harmless. Response: {linked: true, alreadyLinked: false} on a fresh link, {linked: true, alreadyLinked: true} if the party was already linked (Capsule's 422 'already a contact' / 'already related' is caught internally and converted).
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Which entity has the additional-party links. | |
| partyId | No | ID of the party (person or organisation) to link as an additional party. | |
| entityId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, destructiveHint=false). The description adds significant behavioral context: idempotence, response shape for both fresh and duplicate links, and internal handling of Capsule's 422 error. This fully compensates for the lack of annotation detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, highly efficient. The first sentence states the core purpose, the second adds idempotency and response details. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters and no output schema, the description covers the essential: purpose, scope, idempotency, response format, and error handling. It is sufficient for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% (two of three parameters described). The description does not add any new parameter-level information beyond what the schema already provides. It meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Link an existing party as an additional party') and the target resources ('on an opportunity or project'). It distinguishes itself from siblings like update_opportunity which sets the main party, and from add_party_* tools which add different types of data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use this tool: for adding secondary parties beyond the main one (set by update_opportunity/update_project). Also mentions idempotent behavior, guiding the agent on safe re-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_noteA
Add a note to a party, opportunity, or project. Provide exactly one of partyId, opportunityId, or projectId. The note is always attributed to the API-token owner — there is no override for the author (a creatorId parameter would enable audit-attribution spoofing on shared-connector deployments, so it is intentionally not exposed). Optional entryAt lets you backdate the note's authored-at timestamp for legitimate historical-import workflows.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Note body text. Stored verbatim and treated as MARKDOWN — Capsule's web UI renders the markdown when displaying. Pass markdown source ('# Heading', '**bold**', '- bullet'), not HTML. | |
| entryAt | No | ISO-8601 timestamp for when this note actually happened (e.g. '2024-03-15T14:30:00Z'). Defaults to now. Use this for backdating historical notes when migrating from another system. `entryAt` is preserved across subsequent update_entry calls; only `updatedAt` advances on edits. Note attribution flows to the API-token owner — there is no way to record a note as authored by a different user via this connector (a `creatorId` parameter would enable audit-attribution spoofing on shared-connector deployments, so it is intentionally not exposed). | |
| partyId | No | Link note to a party (mutually exclusive with opportunityId/projectId) | |
| projectId | No | Link note to a project (mutually exclusive with partyId/opportunityId) | |
| opportunityId | No | Link note to an opportunity (mutually exclusive with partyId/projectId) | |
| activityTypeId | No | Categorise the note under a custom activity type (Meeting, Call, ... — ids from list_activity_types). Omit for a plain Note (Capsule's default, activityType -1). Wire-verified: POST /entries accepts the id and the entry echoes {activityType: {id, name}}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false and destructiveHint=false. The description adds critical behavioral detail: note attribution is forced to the API-token owner with no override, explicitly explaining why creatorId is not exposed (security rationale). It also discloses that entryAt persists across updates while updatedAt advances, and that content is treated as markdown. This goes well beyond the schema and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is slightly lengthy but every sentence conveys necessary information: core purpose, constraint, attribution rationale, and parameter behavior. The most critical constraint (exactly one target) is front-loaded. No redundant filler; just a dense, well-organized paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create operation with no output schema, the description covers all parameters, usage constraints, and key edge cases (backdating, markdown, attribution). It doesn't mention response format, but that's acceptable given no output schema is present. Minor gaps like error handling are not critical for initial invocation. The tool is complete enough for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 nuance not present in the schema alone: the mutual exclusivity of the three ID parameters is reinforced but also clarifies the attribution rule for entryAt (preserved across update_entry) and the markdown handling. These are meaningful additions for correct usage, earning a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb-resource-target relationship: 'Add a note to a party, opportunity, or project.' It immediately distinguishes from sibling tools (e.g., add_party_email_address) by specifying the resource type and the three possible attachment targets. No ambiguity remains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a hard constraint ('Provide exactly one of partyId, opportunityId, or projectId') and explains when to use optional parameters (entryAt for backdating, activityTypeId for categorization). It doesn't explicitly contrast with other note-related tools, but the tool is unique enough that the constraint suffices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_party_addressA
Append a single postal address to a party. Atomic — one PUT to Capsule. Use this instead of update_party.addresses for single-entry adds.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ||
| city | No | ||
| type | No | Free-form label, e.g. 'Office', 'Home'. | |
| state | No | ||
| street | No | ||
| country | No | Country name. Capsule validates this against a small canonical-English-name dictionary; inputs not in the dictionary are REJECTED with 422 'address.country: unknown country' (NOT silently passed through or normalised). Probed examples — accepted: `United States`, `United Kingdom`, `Czechia`, `Germany`. Aliased: `USA → United States`. Rejected: `United States of America`, `Czech Republic` (use `Czechia`), `UK`/`Britain` (use `United Kingdom`), `Deutschland` (use `Germany`). Empty string is accepted and stored as `null` — a de-facto 'clear' shape. To discover an accepted name, read an existing party that already has the country set. | |
| partyId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a non-read, non-destructive write. Description adds behavioral context: atomic PUT operation and detailed validation behavior for the country parameter (rejection on invalid entries, normalization). However, no mention of side effects on existing data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states purpose, second gives usage guidance. No extraneous information, front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers primary purpose, usage alternative, atomicity, and country validation. Missing details on optionality of parameters (though schema shows none required), return value, and error cases beyond country.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (29%). The country parameter description is exceptionally detailed, adding validation rules and examples. Other parameters like street, city, state, zip lack any description in the schema or tool description, leaving gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it appends a single postal address to a party, distinguishing itself from update_party.addresses by explicitly recommending its use for single-entry adds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides when-to-use guidance (single-entry adds instead of update_party.addresses) and mentions atomicity, but does not explicitly exclude scenarios like adding multiple addresses or state prerequisites such as party existence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_party_email_addressA
Append a single email address to a party. Atomic — one PUT to Capsule. Use this instead of update_party.emailAddresses when you want to add exactly one entry; the bulk array on update_party is append-only and won't replace.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Free-form label, e.g. 'Work', 'Home'. | |
| address | Yes | ||
| partyId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, destructiveHint=false), so the description carries the burden. It adds that the operation is atomic and uses a single PUT to Capsule, which provides some insight. However, it does not disclose error handling, idempotency, or whether duplicates are allowed. Still, it adds meaningful context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the action and a technical detail (atomic PUT), the second provides usage guidance. It is front-loaded, no filler, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with low schema coverage, no output schema, and minimal annotations, the description should cover more: no explanation of return values, no parameter details, and no error scenarios. It is adequate for purpose and usage but incomplete for a fully self-contained description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only 'type' has a description). The description does not elaborate on any parameter; it doesn't explain 'partyId' or 'address', nor does it provide examples. Given low coverage, the description should compensate but fails to add any parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Append a single email address to a party'), specifies it's atomic, and explicitly distinguishes it from the sibling tool update_party.emailAddresses by explaining when to use each. This provides specific verb+resource+scope with differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: 'Use this instead of update_party.emailAddresses when you want to add exactly one entry; the bulk array on update_party is append-only and won't replace.' It clearly states context but does not mention other alternatives like add_party_address, which are for different resource types, so it's sufficiently focused.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_party_phone_numberA
Append a single phone number to a party. Atomic — one PUT to Capsule. Use this instead of update_party.phoneNumbers for single-entry adds.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Free-form label, e.g. 'Work', 'Mobile'. | |
| number | Yes | ||
| partyId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds that the operation is 'Atomic — one PUT', which confirms a single, non-destructive write. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first sentence states purpose, the second gives usage guidance. Well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple, the description lacks details about phone number format validation, behavior on duplicate numbers, or return value. Given no output schema and low parameter coverage, more context would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only 33% of parameters have schema descriptions (type has a description). The description does not elaborate on partyId or number beyond 'single phone number'. For low schema coverage, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Append' and resource 'single phone number to a party', clearly differentiating from sibling 'update_party.phoneNumbers' for single-entry adds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states that this tool should be used instead of update_party.phoneNumbers for single-entry adds, and that it is atomic with one PUT call. No exclusions or when-not conditions beyond that, but clear context for the main use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_party_websiteA
Append a single website / social handle to a party. Atomic — one PUT to Capsule. Use this instead of update_party.websites for single-entry adds. The 'address' field is a URL when service='URL' or a handle (e.g. '@acmeco') for social services.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The website address. A URL when service='URL', or a handle (e.g. '@acmeco') for social services. | |
| partyId | No | ||
| service | No | Defaults to 'URL' if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-readonly and non-destructive. The description adds 'Atomic — one PUT to Capsule', revealing the atomic nature and underlying API call. It does not contradict annotations and adds behavioral context beyond the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no fluff. Each sentence adds value: purpose, usage guidance, and parameter clarification. Front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the essential purpose, usage, and parameter hints. However, it does not describe return values or error behavior, and there is no output schema. For a simple append operation, this is adequate but could be slightly more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%. The description adds value by clarifying the 'address' parameter with examples ('URL when service='URL' or a handle like '@acmeco'') and specifies that 'service' defaults to 'URL' if omitted, which is not in the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Append a single website / social handle to a party' with a specific verb and resource. It also distinguishes from the sibling 'update_party.websites' by explicitly stating 'Use this instead of update_party.websites for single-entry adds.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance: 'Use this instead of update_party.websites for single-entry adds.' This indicates when to use this tool vs the alternative. It does not mention any further exclusions or prerequisites, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_tagA
Attach a tag to a party, opportunity, or project by NAME. Capsule resolves to an existing tag in the tenant or creates a fresh one with this name. Matching is case-insensitive — 'VIP' and 'vip' attach the same tag, preserving the canonical casing from whichever variant was created first. To avoid creating a genuinely-distinct near-duplicate (e.g. 'VIP' vs 'V.I.P.'), call list_tags first and reuse the exact name. Idempotent — re-attaching an already-attached tag is harmless. To DETACH a tag, use remove_tag_by_id with the tag's id (read via get_party/get_opportunity/get_project with embed='tags').
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Which entity type. | |
| tagName | Yes | Name of the tag to attach. Capsule resolves by name: if a tag with this name already exists in the tenant it is attached to the entity; if not, Capsule creates the tag and attaches it. Names are tenant-global. Capsule matches case-INSENSITIVELY when resolving (so 'VIP' and 'vip' attach the same tag), preserving the canonical casing from whichever variant was created first. To ensure consistent casing in your tag list, call list_tags first and reuse the exact name from there. Idempotent — re-attaching an already-attached tag is harmless. | |
| entityId | No | The party/opportunity/project id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only and non-destructive. Description adds idempotency, case-insensitive matching, and automatic tag creation, providing full behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with key information front-loaded. Every sentence is useful, though slightly verbose. Could condense without losing meaning, but still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all essential aspects: entity types, tag resolution, case sensitivity, idempotency, and cross-reference to related tools. No output schema needed; behavior is fully described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description reinforces the tagName parameter's behavior but does not add significant new meaning beyond the schema's own description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Attach'), the resource ('tag'), and the target entities ('party, opportunity, or project'). It distinguishes from sibling tools like remove_tag_by_id and batch_add_tag.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool (attach by name) and when to use alternatives (remove_tag_by_id for detachment, list_tags first to avoid near-duplicates). Also explains idempotency.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_trackA
Apply a track definition to an opportunity or project. Creates a track instance and auto-creates tasks per the track's task definitions; tasks' dueOn is computed from startDate (defaults to today) plus each task's daysAfter offset. Use list_track_definitions to discover available templates. NOT IDEMPOTENT — applying the same trackDefinitionId twice creates two independent track instances and two sets of auto-tasks (no de-duplication). If you want to apply only once, call list_entity_tracks first and check for an existing instance with the same trackDefinition.id (but mind that list_entity_tracks can include auto-applied tracks from board stage rules, not just manual applies).
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Which entity to apply the track to. | |
| entityId | No | ||
| startDate | No | Optional ISO-8601 date (YYYY-MM-DD) the track should start from — drives task due-date calculations (each task's `dueOn` is computed as startDate + the track-definition's `daysAfter` offset). Defaults to today if omitted. Useful for scheduling a renewal-queue track against a future contract end-date, or backfilling tracks for historical projects. | |
| trackDefinitionId | No | The trackDefinition to apply (from list_track_definitions). Auto-creates task definitions on the target entity per the track's rules. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Clearly discloses non-idempotent behavior ('applying the same trackDefinitionId twice creates two independent instances'), task auto-creation and due date computation via startDate + daysAfter offset. Adds significant context beyond annotations (readOnlyHint: false, destructiveHint: false).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense single paragraph with front-loaded purpose and behavioral notes. Could benefit from bullet points for readability, but no superfluous sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequately covers discovery and idempotency concerns given sibling tools. No output schema, but expected behavior (creation) is implied. Complete for a 4-parameter tool with no nested objects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond schema: explains entity enum options, startDate default and scheduling use, trackDefinitionId role. Schema coverage is 75%, description compensates with extra context, though entityId is not elaborated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Apply a track definition to an opportunity or project' with specific verb and resource. Distinguishes from sibling tools like list_track_definitions and list_entity_tracks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using list_track_definitions to discover templates and warns about non-idempotency. Suggests checking existing instances via list_entity_tracks, but does not explicitly state when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_add_tagA
Attach tags to many entities in parallel — e.g. tag a list of 20 contacts as 'RSAC26' after a conference, or apply the 'Departed' tag to 10 people in a layoff batch. Pass items: [{ entity, entityId, tagName }, ...] (1–50 items). Each item is processed identically to a single add_tag call. Connector fans out parallel HTTP requests, default cap 5 (CAPSULE_MCP_BATCH_CONCURRENCY). Returns { results: [{ok, ...} per item], summary: {total, succeeded, failed} }. The list_tags cache is invalidated for each affected entity type.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of 1–50 add_tag inputs. Useful for mass-tagging — e.g. 'tag these 20 contacts as RSAC26'. Each item is the same shape as a single add_tag call. The list_tags cache is invalidated for each affected entity type. Capped at 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral detail beyond annotations: parallel HTTP requests with configurable concurrency cap (5), cache invalidation per entity type, and exact return format. Annotations only indicate it's not read-only and not destructive, so the description significantly enriches transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact paragraph that efficiently conveys purpose, usage example, parameter format, behavioral traits, and return structure. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single-parameter schema with good documentation, lack of output schema, and simple annotations, the description thoroughly covers behavior (parallelism, concurrency, caching, return format). It leaves no significant questions unanswered for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema description already explains the items array and its shape. The tool description adds concurrency behavior, return format, and purpose context, but the schema description also mentions mass-tagging and cache invalidation. Thus, moderate added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it attaches tags to many entities in parallel with concrete examples (RSAC26, Departed). It distinguishes from siblings like 'add_tag' (single) and 'batch_remove_tag_by_id' (removal) by emphasizing batch addition and parallel execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear use cases (mass-tagging after events) and implicitly indicates when to use this over 'add_tag' (for multiple items). However, it does not explicitly mention when not to use it (e.g., for single tags) or list alternatives, leaving some gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_complete_taskA
Mark 1–50 tasks COMPLETED in parallel. Pass ids: [task_id, …]. Natural for end-of-week catchups, 'close all the follow-ups from this campaign', etc. Connector fans out parallel HTTP requests, default cap 5 (CAPSULE_MCP_BATCH_CONCURRENCY). Returns { results: [{ok, ...} per id], summary: {total, succeeded, failed} }. A task that's already completed or deleted shows up as a per-item failure with the Capsule status; the rest still complete.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Array of 1–50 task ids to mark COMPLETED in parallel. Each id resolves to one PUT /tasks/{id}; failures (e.g. 404 for a deleted task) surface per-item in the result array, the rest still complete. Capped at 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses parallel execution, concurrency cap (5), per-item failure handling for already completed/deleted tasks, and return format. Annotations only state it's not read-only and not destructive; description adds significant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded with action, then usage, then technical details, then return format. Every sentence adds value, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, description fully covers usage, behavior, return format, and error handling. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema fully covers 'ids' parameter. Description adds context about parallel execution, caps, and error handling, but does not change parameter meaning. High schema coverage gives baseline 3; added value justifies 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action ('Mark...COMPLETED'), resource ('tasks'), and scale ('1–50 tasks'). It distinguishes from sibling 'complete_task' by specifying batch parallelism.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage scenarios ('end-of-week catchups', 'close all...') and implies when to use the singular alternative (complete_task). No explicit when-not, but context makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_remove_tag_by_idA
Detach tags from many entities in parallel — cleanup counterpart to batch_add_tag. Pass items: [{ entity, entityId, tagId }, ...] (1–50 items). Each item is processed identically to a single remove_tag_by_id call (already-detached tags are reported as idempotent successes, not failures). Connector fans out parallel HTTP requests, default cap 5. Returns { results: [{ok, ...} per item], summary: {total, succeeded, failed} }.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of 1–50 remove_tag_by_id inputs. Each item is the same shape as a single remove_tag_by_id call. Detaches the tag from each specified entity; the tag definition itself persists in the tenant. Capped at 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false. The description adds details about parallel HTTP requests with default cap of 5, idempotent handling of already-detached tags, and the response structure. This significantly expands on the annotations, providing full behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each serving a purpose: purpose, syntax, idempotency, parallelism. No fluff. Front-loaded with the key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter fully described by schema, and no output schema, the description fully compensates by specifying the return shape ({ results, summary }). No gaps remain for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description repeats the parameter shape ('items: [{ entity, entityId, tagId }, ...]') and constraints (1–50 items) but adds little beyond the schema's own descriptions (e.g., maxItems, minItems, description).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Detach tags from many entities in parallel' with verb 'detach' and resource 'tags from entities'. It distinguishes from sibling 'batch_add_tag' by calling it the 'cleanup counterpart', making purpose clear and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly positions it as the batch removal counterpart to batch_add_tag, and explains the input format and idempotent behavior. While it doesn't enumerate when not to use it, the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_update_opportunityA
Update 1–50 opportunities in parallel. Same input shape as update_opportunity but wrapped in an items array. Use this — not N sequential update_opportunity calls — for mass stage transitions (e.g. move a milestone batch to Won), owner reassignments, or value adjustments. Connector fans out parallel HTTP requests, default cap 5 (CAPSULE_MCP_BATCH_CONCURRENCY). Returns { results: [{ok, ...} per item], summary: {total, succeeded, failed} }. Partial failures possible; Capsule has no rollback.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of 1–50 update_opportunity inputs. Each item is the same shape as a single update_opportunity call — id is required, every other field is optional. Capped at 50 so a single tool call can't burn an outsized share of Capsule's hourly per-token rate budget. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false, leaving the description to carry the behavioral burden — and it delivers. It discloses concurrency behavior with a configurable cap ('default cap 5 (CAPSULE_MCP_BATCH_CONCURRENCY)'), the exact return shape, and critically the failure semantics: 'Partial failures possible; Capsule has no rollback.' For a batch mutation, this is precisely the risk information an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, zero fluff, and the core action is front-loaded. Each subsequent sentence adds a distinct piece: shape relation, use case, concurrency behavior, return contract, failure mode. It earns a 4 rather than a 5 because the single dense paragraph could be slightly more scannable — the concurrency and failure-semantics details could be visually separated — though nothing approachable is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description correctly documents the return contract ({ results: [...], summary: {...} }), the input-shape relationship to the single-update sibling, the 1-50 cardinality, and idempotency-adjacent safety info (no rollback). This is complete for a batch utility whose error contract matches its single sibling. Minor deduction: the contents of the per-item `ok` object are left undefined, and there's no note about whether a single malformed item aborts the batch or gets reported inline.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the items parameter already carries a rich description explaining the 1-50 bound and the rationale ('so a single tool call can't burn an outsized share of Capsule's hourly per-token rate budget'). The main description complements this by documenting the return shape. Slight deduction because the 'same shape as update_opportunity' reference assumes the agent cross-references another tool's schema, and field-level semantics are delegated entirely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with 'Update 1–50 opportunities in parallel' — a specific verb, resource, and scope qualifier in one breath. It then names the sibling it is not ('Same input shape as update_opportunity but wrapped in an items array'), making the single-vs-batch distinction unmistakable against siblings like update_opportunity, batch_update_party, and batch_update_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this — not N sequential update_opportunity calls — for mass stage transitions (e.g. move a milestone batch to Won), owner reassignments, or value adjustments' is an explicit when-to-use directive that names the alternative and gives concrete example scenarios. This is the gold standard the rubric calls for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_update_partyA
Update 1–50 parties in parallel. Same input shape as update_party but wrapped in an items array. Use this — not N sequential update_party calls — for any homogeneous multi-record write (mass owner reassignment, bulk metadata corrections, etc.). Capsule has no batch-write API, so the connector fans out parallel HTTP requests with a default concurrency cap of 5 (configurable via CAPSULE_MCP_BATCH_CONCURRENCY). Returns { results: [{ok, ...} per item], summary: {total, succeeded, failed} }. Partial failures are possible — Capsule has no rollback, so successful items stay applied even if other items 4xx. Read the per-item result array to know which ones need follow-up.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of 1–50 update_party inputs. Each item is the same shape as a single update_party call — id is required, every other field is optional. Capped at 50 so a single tool call can't burn an outsized share of Capsule's hourly per-token rate budget (~4000 req/h). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate write (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds rich behavioral context: parallel HTTP requests, concurrency cap, return structure with per-item results, partial failure handling, and no rollback. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with purpose, followed by usage guidance, technical behavior, and return/error handling. Every sentence is informative with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (batch update with concurrency, partial failures) and the absence of an output schema, the description fully equips the agent: it explains the input shape, parallelism, concurrency settings, return format, and how to handle partial failures. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a detailed schema comment on the 'items' parameter. The description adds value by clarifying the input is the same shape as update_party wrapped in an array, and reinforces the 50-item cap. This enhances understanding beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'update', resource 'parties', and scope '1–50 in parallel'. It distinguishes itself from sibling update_party by noting the batch pattern, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use this instead of N sequential update_party calls for homogeneous multi-record writes, with concrete examples (mass owner reassignment, bulk metadata corrections). Also covers technical details (concurrency cap, configurability) that help the agent decide when to invoke.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_update_projectA
Update 1–50 projects in parallel. Same input shape as update_project but wrapped in an items array. Use this — not N sequential update_project calls — for mass stage transitions (e.g. move a board column of projects to a new stage), bulk owner reassignments after a personnel change, or batch closures. Mirrors batch_update_party and batch_update_opportunity — identical fan-out shape across the three entity types. Connector fans out parallel HTTP requests, default cap 5 (CAPSULE_MCP_BATCH_CONCURRENCY). Returns { results: [{ok, ...} per item], summary: {total, succeeded, failed} }. Partial failures possible; Capsule has no rollback.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of 1–50 update_project inputs. Each item is the same shape as a single update_project call — id is required, every other field is optional. Capped at 50 so a single tool call can't burn an outsized share of Capsule's hourly per-token rate budget (~4000 req/h). Mirrors batch_update_party and batch_update_opportunity — same shape across the three entity types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotations by explaining concurrency limit (default cap 5), return structure with results and summary, and partial failure behavior with no rollback. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four focused sentences with no redundancy. Front-loads purpose, then usage guidelines, then technical details. Every sentence provides value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers behavior, parallelism, return format, and failure handling. No output schema, so description compensates well. Minor gap: no mention of specific error handling beyond partial failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds context by comparing to update_project input shape, but does not add new parameter-level details beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb (update), resource (projects), and scope (batch of 1-50). It distinguishes from sibling update_project by specifying parallelism and same input shape wrapped in array.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit use cases are given: mass stage transitions, bulk owner reassignments, batch closures. It advises using this instead of sequential calls. Does not explicitly state when not to use, but context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_taskA
Mark a task as done / completed / finished. Sets status=COMPLETED on the task, populating completedBy and completedAt while preserving the task in history (unlike delete_task which removes it permanently). Use this whenever a user says 'mark done', 'complete', 'finish', or similar — equivalent to update_task with status:COMPLETED but more discoverable.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds details beyond annotations: sets status=COMPLETED, populates completedBy/completedAt, preserves in history unlike delete_task. This enriches the agent's understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences, no fluff. Front-loaded with key action and alternatives. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Lacks return value or confirmation details (no output schema). Agent knows what the tool does but not what to expect back (e.g., updated task object vs success status). Adequate for a simple mutation but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should clarify the 'id' parameter meaning. It only implies it's a task ID, but doesn't confirm it's required or provide constraints. Agent may need to infer from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb ('mark as done/completed') and the resource ('task'). Distinguishes from delete_task and update_task by explaining behavioral differences.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit usage triggers ('mark done', 'complete', 'finish') and notes it's a discoverable alternative to update_task. Does not explicitly state when not to use, but clear enough for most cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_opportunityA
Create a new opportunity linked to a party. Requires partyId and milestoneId (which pins the deal to a specific pipeline stage — pipeline is inferred from the milestone). Value is optional but if amount is set, currency must be set too (3-letter ISO 4217 code, e.g. 'USD'). Discover valid milestone ids via list_pipelines + list_milestones first. For multi-party deals, use add_additional_party after creation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| value | No | ||
| fields | No | Set custom field values on this record. PARTIAL UPDATE: only the definitions you list are touched; any field NOT in this array is left unchanged. Discover available definitions via list_custom_fields; read current values via get_opportunity with embed='fields'. Capsule's POST /opportunities accepts the same `fields[]` shape as PUT (inferred by symmetry with the v1.6.5 wire-trace findings on party and project creation — the tenant probed had no opportunity custom fields configured, so this is unverified empirically). Setting custom fields on creation removes the create-then-update ritual. | |
| teamId | No | Assign to team ID (discover via list_teams). Independent from `ownerId` — setting one does NOT clear the other on create. Three ownership shapes are valid: owner alone, team alone, or owner+team (the owner must be a member of the team; users can belong to multiple teams — 422 'owner is not a member of the team' otherwise). | |
| ownerId | No | Assign to user ID. Defaults to the API-token owner when omitted — note that opportunities do NOT inherit owner from the linked party, even though one might expect it. To clear owner later, call update_opportunity with `ownerId: null`. Discover IDs via list_users. WARNING: tenant pipeline / milestone-reached automation can mutate this field post-create — see the `milestoneId` description for details and the chained-PUT workaround. | |
| partyId | No | ID of the party this opportunity belongs to | |
| duration | No | How many durationBasis units the contract runs (e.g. 12 with MONTH). Must be null/omitted when durationBasis is FIXED. Wire-verified: POST stores it, PUT changes it, and PUT duration:null with durationBasis:FIXED clears it. | |
| description | No | ||
| milestoneId | No | ID of the pipeline milestone to place this opportunity at. The milestone implicitly determines the pipeline — there is no separate pipelineId parameter. Discover via list_pipelines / list_milestones. NOTE: some Capsule tenants configure **pipeline / milestone-reached automation rules** that mutate `owner` and/or `team` immediately after creation — e.g. an 'Assign to a Team' action that fires on entry to a specific milestone and has been observed to clear `owner` as an automation side-effect. If you observe a newly-created opp landing with `owner: null` despite passing `ownerId`, the cause is almost certainly a milestone automation on the destination pipeline rather than the connector. Documented workaround: follow `create_opportunity` with an immediate `batch_update_opportunity({items: [{id, ownerId, teamId}]})` carrying both fields — PUT does not re-fire milestone-reached triggers, so the owner sticks. | |
| probability | No | ||
| durationBasis | No | Time unit of the opportunity's contract duration. FIXED means a one-off (no recurring duration) — `duration` must be omitted/null with FIXED (Capsule 422s otherwise; wire-verified). Recurring deals: pair with `duration`, e.g. durationBasis MONTH + duration 12. | |
| expectedCloseOn | No | YYYY-MM-DD | |
| trackDefinitionIds | No | Track definition ids to apply at creation time (creation-only shortcut; use apply_track for existing records). Discover ids via list_track_definitions. Capsule validates each definition's entity scope and returns 422 on mismatch (e.g. "track definition must be for parties"). Wire-verified: the created record carries the track instances immediately. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only carry readOnlyHint=false and destructiveHint=false, so the description carries the transparency burden and does substantial work: it discloses that tenant automation rules can mutate owner/team post-create, that pipeline is inferred rather than set directly, and notes wire-verified behaviors. No contradiction with annotations — 'create' aligns with readOnlyHint=false and non-destructive intent. Strong behavioral disclosure well beyond the minimal annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The three-sentence description is efficient and front-loaded: purpose first, then core constraints (partyId/milestoneId, value/currency coupling), then discovery and alternative tool routing. No wasted sentences at the top level; the verbosity lives in the schema's per-parameter descriptions, which is appropriate placement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with nested objects and no output schema, the description covers the essentials (party linkage, stage pinning, value rules, discovery path, multi-party handling) but has two gaps: the 'requires partyId and milestoneId' claim conflicts with the schema's required:[name], which could mislead an agent about mandatory inputs, and there is no statement about what the call returns on success. These prevent full callability confidence for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 69%, placing the baseline at 3. The description adds value on partyId and milestoneId (pinning stage, pipeline inference) but partially repeats the schema's own rich descriptions (currency-required-when-amount, list_pipelines discovery). A notable discrepancy: the description asserts 'Requires partyId and milestoneId' while the schema marks only name as required — a factual mismatch that weakens the otherwise helpful parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create), resource (opportunity), and linkage scope (linked to a party), clearly distinguishing it from siblings like update_opportunity, delete_opportunity, and batch_update_opportunity. The description goes further by naming the two key inputs (partyId, milestoneId) and explaining the milestone→pipeline inference, so an agent knows exactly what this creation tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete guidance: discover milestone ids via list_pipelines + list_milestones first, and use add_additional_party for multi-party deals — explicitly routing to a sibling. It also notes the chained batch_update_opportunity workaround for milestone automation side-effects. It doesn't enumerate when to favor update_opportunity or batch_update_opportunity for modifications, but the creation-vs-alternative guidance is present and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_partyA
Create a new person or organisation in Capsule CRM. For type='person', firstName or lastName is required (one suffices); the name field is silently ignored. For type='organisation', name is required and firstName/lastName/title/jobTitle are silently ignored. Passing organisationId pointing at a non-organisation party (e.g. another person's id) returns 404 'organisation not found' — Capsule filters lookups by type. Accepts ownerId and teamId to set ownership at create time; both are optional and Capsule defaults owner to the API-token user when omitted (team has no default).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| type | Yes | ||
| about | No | ||
| title | No | ||
| fields | No | Set custom field values on this record. PARTIAL UPDATE: only the definitions you list are touched; any field NOT in this array is left unchanged. Discover available definitions via list_custom_fields; read current values via get_party with embed='fields'. Verified empirically in v1.6.5 wire-trace: Capsule's POST /parties accepts the same `fields[]` shape as PUT, so callers can set custom field values on creation without a follow-up update. | |
| teamId | No | Assign to team ID (discover via list_teams). Omit to leave team unset on create. To clear an existing team or create a team-owned party with no specific owner, use update_party after creation. | |
| ownerId | No | Assign to user ID. Defaults to the API-token owner when omitted. To create a team-owned party with no specific user, first create the party, then call update_party with `ownerId: null` and `teamId`. | |
| jobTitle | No | ||
| lastName | No | ||
| websites | No | APPEND-ONLY: items are merged into the existing list, never replaced. For atomic add/remove/replace use add_party_website and remove_party_website_by_id. | |
| addresses | No | APPEND-ONLY: items are merged into the existing list, never replaced. For atomic add/remove/replace use add_party_address and remove_party_address_by_id. The `country` field is mapped through Capsule's country dictionary — see `add_party_address.country` for the dictionary edges (small canonical-English-name list; inputs not in the dictionary are REJECTED with 422, not silently dropped). | |
| firstName | No | ||
| phoneNumbers | No | APPEND-ONLY: items are merged into the existing list, never replaced. For atomic add/remove/replace use add_party_phone_number and remove_party_phone_number_by_id. | |
| emailAddresses | No | APPEND-ONLY: items are merged into the existing list, never replaced. For atomic add/remove/replace use add_party_email_address and remove_party_email_address_by_id. Passing `[]` here is a silent no-op (does not clear the list and does not advance updatedAt). | |
| organisationId | No | Link person to an existing organisation ID | |
| trackDefinitionIds | No | Track definition ids to apply at creation time (creation-only shortcut; use apply_track for existing records). Discover ids via list_track_definitions. Capsule validates each definition's entity scope and returns 422 on mismatch (e.g. "track definition must be for parties"). Wire-verified: the created record carries the track instances immediately. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint=false and destructiveHint=false, so the description carries full behavioral disclosure. It reveals silently ignored fields per type, 404 on mismatched organisationId, owner defaulting to the API-token user, no default for teamId, and append-only semantics—far beyond what annotations could convey. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then delivers dense, decision-relevant specifics in five sentences. Every sentence earns its place: type rules, error behavior, ownership defaults, and alternatives are packed without fluff or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter create operation with no output schema and minimal annotations, this description covers the highest-risk semantics: required-field rules, ignored fields, error responses, ownership defaults, and partial/list update behaviors. It is sufficiently complete for an agent to call the tool correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 56% schema description coverage, the description adds critical meaning: firstName/lastName vs name requirements per type, silently ignored title/jobTitle, organisationId lookup-type filtering, and owner/team default behavior. It compensates for schema gaps and clarifies real API behavior rather than just restating types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb-resource statement: 'Create a new person or organisation in Capsule CRM.' This is differentiated from sibling create tools (create_opportunity, create_project, create_task) by clearly scoping to parties, and the type-specific handling is immediately anchored.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit conditional usage by party type, and names concrete alternatives for edge cases: use update_party to clear/team-own after creation, use apply_track for existing records, and use add/remove_party_* for atomic list mutations. An agent can decide when create_party is the right tool or 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_projectA
Create a new project in Capsule CRM linked to a party. Requires partyId and name; description, status, owner, and starting board/stage are optional. To pin a project to a specific board+stage on creation, pass stageId (which uniquely identifies a stage within a board). Discover valid ids via list_boards + list_stages. Returns the created project including its assigned id.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| fields | No | Set custom field values on this record. PARTIAL UPDATE: only the definitions you list are touched; any field NOT in this array is left unchanged. Discover available definitions via list_custom_fields; read current values via get_project with embed='fields'. Verified empirically in v1.6.5 wire-trace: Capsule's project create endpoint accepts the same `fields[]` shape as PUT, so callers can set custom field values on creation without a follow-up update. Project-specific: setting a field whose definition lives under a 'data tag' populates the row's internal tagId but does NOT auto-add the data tag to the project's tags array — use add_tag explicitly if you want it visible via embed=tags. | |
| status | No | Defaults to OPEN when omitted. | |
| teamId | No | Assign to team ID (discover via list_teams). Capsule projects must always have at least one of {owner, team} set — Capsule returns 422 'owner or team is required' otherwise. Three ownership shapes are valid: owner alone, team alone, or owner+team (the user must be a member of the team — users can belong to multiple teams; 422 'owner is not a member of the team' otherwise). Tenant-specific board automations may set the team field on project creation (e.g. 'when project enters board X, set team to T'). If you observe a team set despite omitting `teamId`, check the target board's automation rules. | |
| ownerId | No | Assign to user ID. Defaults to the API-token owner when omitted, same as create_party / create_opportunity / create_task. NOTE: some Capsule tenants configure board-level **automation rules** that mutate `owner` (and `team`) on project creation — e.g. an automation that clears `owner` when a project enters a particular board. If you observe a project landing with unexpected `owner: null` after a create_project with `ownerId`, check the target board's automation configuration. Capsule's API itself does not drop `ownerId` when `stageId` is also supplied. | |
| partyId | No | ID of the party linked to this project | |
| stageId | No | Stage (board column) to place the project on. Discover IDs via list_stages — each stage belongs to one Board, so picking a stageId implicitly picks the board. If omitted, the project is created with no stage assignment (and won't appear on any board). NOTE: tenant-specific board automation rules may run on project creation and mutate `owner` / `team` fields. See `create_project.ownerId` / `create_project.teamId` for the automation caveat. Capsule's create endpoint itself preserves the `ownerId` / `teamId` you supply — any clearing you observe traces to board automations, not the API. | |
| startOn | No | Project start date, YYYY-MM-DD. Verified empirically (v2.0.1 wire probe): Capsule's POST /kases accepts and stores it; reads back as `startOn` on the project. | |
| description | No | ||
| expectedCloseOn | No | YYYY-MM-DD | |
| trackDefinitionIds | No | Track definition ids to apply at creation time (creation-only shortcut; use apply_track for existing records). Discover ids via list_track_definitions. Capsule validates each definition's entity scope and returns 422 on mismatch (e.g. "track definition must be for parties"). Wire-verified: the created record carries the track instances immediately. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only signal readOnly=false and destructive=false. The description adds behavioral context: stageId pins the project to a board+stage at creation, IDs come from list_boards/list_stages, and the call returns the created project including its assigned id. It does not mention defaults or automation caveats, but the create verb and annotation make the safety profile sufficiently clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five focused sentences: core action, required/optional fields, stage pinning, ID discovery, and return value. It is front-loaded and contains no filler or repetition of schema detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter creation tool with no output schema, the description plus the rich schema jointly give the agent nearly everything needed to call it correctly, including a return-value summary. The main gap is the inaccurate required-fields statement, which could lead an agent to prepare the call incorrectly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (82%), so the baseline is 3. The description adds a useful high-level summary and explains the stageId/board relationship, but it also states 'Requires partyId and name' while the schema only lists name as required. This contradiction undercuts some of the semantic value the description otherwise provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Create a new project in Capsule CRM linked to a party.' This clearly distinguishes it from update_project, delete_project, and create_opportunity. The scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The action is clear and there is no competing sibling tool for creating projects, so the intended use is obvious. The description also adds a useful preparation step: 'Discover valid ids via list_boards + list_stages.' It does not explicitly list exclusions or alternatives, but none are really needed here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskA
Create a new task, optionally linked to a party, opportunity, or project. Pass at most ONE of partyId / opportunityId / projectId — the connector rejects multi-target inputs before the HTTP call. Omitting all three is also valid: Capsule creates the task as a STANDALONE task (no parent link), useful for personal reminders or workflow tasks that aren't tied to a specific CRM record.
| Name | Required | Description | Default |
|---|---|---|---|
| dueOn | Yes | YYYY-MM-DD | |
| detail | No | ||
| repeat | No | Make this a repeating task. Wire-verified on POST /tasks. Recurrence on EXISTING tasks isn't exposed by update_task (unverified on PUT) — recreate the task to change it. | |
| dueTime | No | HH:MM in user's timezone | |
| ownerId | No | Assign to user ID. Defaults to the API-token owner when omitted. Once set, this connector cannot clear the owner back to null — use Capsule's web UI for that. | |
| partyId | No | Link task to a party (mutually exclusive with opportunityId/projectId) | |
| projectId | No | Link task to a project (mutually exclusive with partyId/opportunityId) | |
| description | Yes | ||
| opportunityId | No | Link task to an opportunity (mutually exclusive with partyId/projectId) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a non-readonly, non-destructive mutation, but the description adds key behaviors: the connector rejects multi-target inputs, repeat.on is derived from dueOn when omitted, and ownerId cannot be cleared once set. These go beyond the annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three paragraphs, each with a distinct purpose: core action, exclusion rule, and standalone usage. The most critical constraint (mutual exclusion) is prominent. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with a nested repeat object and no output schema, the description covers linking constraints, repeat derivation, owner behavior, and the connector's validation. It lacks return-value details, but that's typical without an output schema and not critical for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description clarifies the mutual exclusivity of partyId/opportunityId/projectId, explains the standalone-task behavior when all are omitted, and adds detail about repeat.on and ownerId limitations, enriching the schema's parameter descriptions (coverage 78%).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 task', and mentions optional links to party, opportunity, or project. Clearly distinguishes from sibling tools like update_task or complete_task by the creation action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the mutual-exclusion rule (pass at most ONE of the three IDs) and notes that omitting all is valid, creating a standalone task. It also mentions the rejection before HTTP call. While it doesn't directly compare with alternatives like update_task, the guidance is concrete and scenario-specific.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_entryADestructive
DESTRUCTIVE & IRREVERSIBLE: permanently delete a note (or other entry) by its ID. Requires confirm=true. Idempotent on retry: response is {deleted: true, alreadyDeleted: false, id} on a fresh delete or {deleted: true, alreadyDeleted: true, id} if the entry was already gone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Entry (note/email/task-record) ID | |
| confirm | Yes | Must be set to true. Permanently deletes the entry — use this to remove a note from a party/opportunity/project. Irreversible. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the destructiveHint=true annotation: it emphasizes irreversibility, requires confirm=true, and details the idempotent response format. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences with clear structure and emphasis. It front-loads the critical warning and uses formatting (bold, code blocks) to highlight key points without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description thoroughly explains the response format for both fresh delete and retry scenarios. It covers all necessary context (destructiveness, idempotency, required parameter) for a delete operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers both parameters with descriptions (100% coverage). The description reinforces that confirm must be true and provides response semantics for idempotency, adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it permanently deletes a note or other entry by ID, using strong language 'DESTRUCTIVE & IRREVERSIBLE'. It clearly distinguishes from sibling delete tools that target specific entity types (e.g., delete_opportunity, delete_party) by using the generic 'entry' term.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies the requirement for confirm=true and explains idempotent behavior, guiding the agent on correct usage. It does not explicitly contrast with alternative deletion tools, but given the clear purpose, the guidance is sufficient for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_opportunityADestructive
DESTRUCTIVE & IRREVERSIBLE: permanently delete an opportunity. Requires confirm=true. Always read the opportunity first with get_opportunity and confirm with the user before calling. Idempotent on retry: response is {deleted: true, alreadyDeleted: false, id} on a fresh delete or {deleted: true, alreadyDeleted: true, id} if the opportunity was already gone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| confirm | Yes | Must be set to true. Permanently deletes the opportunity. Irreversible. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds crucial details: irreversibility, need for confirm=true, idempotent behavior on retry, and the exact response format including 'alreadyDeleted' field. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Front-loaded with critical warning and requirement. Second sentence efficiently covers idempotency and response.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully covers response format, required parameter behavior, and safe usage pattern. Complements annotations well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (only confirm has description). The description adds meaning by stating 'confirm=true' requirement and explaining idempotent responses, but does not elaborate on the 'id' parameter beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'DESTRUCTIVE & IRREVERSIBLE: permanently delete an opportunity.' The verb 'delete' and resource 'opportunity' are clearly stated, distinguishing it from sibling tools like delete_party or delete_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to 'Always read the opportunity first with get_opportunity and confirm with the user before calling.' Also specifies that confirm must be true, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_partyADestructive
DESTRUCTIVE & IRREVERSIBLE: permanently delete a party (person or organisation). Cascades to all linked notes, tasks, opportunities, AND projects. Deleting an organisation does NOT delete people linked to it via organisationId — their organisation field is silently cleared to null and they survive as standalone records. TRACK INSTANCES applied to cascaded opportunities/projects are NOT cleaned up either — they survive as orphan records reachable only by track id via get_track. Use remove_track on each track explicitly before deleting the parent party if orphan accumulation matters (rare in practice — orphans are unreachable from normal navigation). Requires confirm=true. Always read the party first with get_party and confirm with the user before calling. Idempotent on retry: response is {deleted: true, alreadyDeleted: false, id} on a fresh delete or {deleted: true, alreadyDeleted: true, id} if the party was already gone (Capsule's 404 is caught internally so reconciliation loops can re-issue safely).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| confirm | Yes | Must be set to true. Deletes the party AND all linked notes, tasks, opportunities, and projects. Deleting an ORGANISATION does NOT delete people linked to it via organisationId — their `organisation` field is silently cleared to null and they survive as standalone records. Irreversible. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds extensive context: cascading effects, organization-specific behavior (clearing organisation field), orphan track instances, idempotency, and response format. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat long but every sentence provides essential behavioral details. It is front-loaded with a warning. Could be slightly more concise but still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (cascading, irreversible, special cases) and no output schema, the description covers all critical aspects for safe usage, including idempotency and orphan handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (only confirm has description). The description adds significant context to the confirm parameter (must be true, irreversible, cascading effects). For id, no additional semantics beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it permanently deletes a party (person or organisation) and cascades to linked items. It distinguishes from sibling delete tools by focusing on party-specific behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to read the party first with get_party and confirm with user before calling. Also provides guidance on when to use remove_track first if orphan accumulation matters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_projectADestructive
DESTRUCTIVE & IRREVERSIBLE: permanently delete a project. Prefer update_project with status='CLOSED' to close a project while preserving history. Requires confirm=true. Always read the project first with get_project and confirm with the user before calling. Idempotent on retry: response is {deleted: true, alreadyDeleted: false, id} on a fresh delete or {deleted: true, alreadyDeleted: true, id} if the project was already gone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| confirm | Yes | Must be set to true. Permanently deletes the project. Consider update_project status='CLOSED' instead. Irreversible. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true; description adds idempotency details and response format. No contradiction, though annotations cover destructiveness primarily.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences all essential: warning, alternative recommendation, prerequisite, and idempotency. Front-loaded with critical info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, behavioral traits, parameter constraints, and response format. No output schema, but response is described. Complete for a destructive tool with 2 params.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%; the description explicitly requires confirm=true and implies id from get_project. However, the id parameter lacks description in both schema and description beyond implicit reading. Response format clarifies parameter effects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes a project permanently and contrasts with update_project for non-destructive closure. It uses specific verb 'delete' and resource 'project', distinguishing it from siblings like update_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using update_project with status='CLOSED' as an alternative, and instructs to first read the project with get_project and confirm with user. Provides clear when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_tag_definitionADestructive
DESTRUCTIVE & TENANT-WIDE: permanently delete a tag DEFINITION from an entity type's tag namespace (parties / opportunities / projects). Unlike remove_tag_by_id — which detaches a tag from ONE record and leaves the definition intact for others — this removes the definition itself, so the tag disappears from EVERY record that shared it. Use it to clean up stray / mistyped / test tag definitions polluting the tenant-global list. Requires confirm=true. Always read the affected tag first via list_tags and confirm with the user; if you only want to untag one record, use remove_tag_by_id instead. Irreversible (re-creating by name via add_tag mints a brand-new id). Idempotent on retry: {deleted: true, alreadyDeleted: false, entity, tagId} on a fresh delete, or {deleted: true, alreadyDeleted: true, entity, tagId} if the definition was already gone (Capsule's 404 is caught). Endpoint verified empirically (DELETE //tags/{id} → 204).
| Name | Required | Description | Default |
|---|---|---|---|
| tagId | No | The tag definition's id (from list_tags, or embed='tags' on a record). NOT an entity id. | |
| entity | Yes | Which entity type. | |
| confirm | Yes | Must be set to true. DESTRUCTIVE & tenant-wide: permanently deletes the tag DEFINITION from this entity type's tag namespace, removing it from EVERY record that shares it — not just one. To detach a tag from a single record while keeping the definition, use remove_tag_by_id instead. Irreversible (the definition is gone; re-creating by name via add_tag mints a new id). Idempotent on retry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructive=true. Description adds: irreversible, idempotent on retry, tenant-wide effect, response shape (deleted/alreadyDeleted), and endpoint verification (DELETE returns 204, 404 caught). Goes well beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single dense paragraph, front-loaded with key constraints (DESTRUCTIVE & TENANT-WIDE). Every sentence earns its place: purpose, alternative, prerequisite, idempotency, response, endpoint. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers every aspect needed for a destructive operation: what, when, prerequisites, irreversibility, idempotency, response, and endpoint behavior. No output schema, but description fully explains return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%—all 3 params have descriptions. Description adds extra context: tagId 'NOT an entity id' and confirm's idempotent retry behavior. Baseline 3 elevated due to these clarifications, though the description doesn't document every param exhaustively beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with 'DESTRUCTIVE & TENANT-WIDE: permanently delete a tag DEFINITION'—a specific verb and resource. Explicitly distinguishes from sibling remove_tag_by_id by contrasting scope (definition vs. one record). Lists entity types (parties/opportunities/projects).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use ('clean up stray/mistyped/test tag definitions'), when-not-to-use ('if you only want to untag one record, use remove_tag_by_id'), and a prerequisite ('Always read the affected tag first via list_tags and confirm with the user'). Also mandates confirm=true.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_taskADestructive
DESTRUCTIVE & IRREVERSIBLE: permanently delete a task. Prefer complete_task to mark a task done while keeping it in history. Requires confirm=true. Idempotent on retry: response is {deleted: true, alreadyDeleted: false, id} on a fresh delete or {deleted: true, alreadyDeleted: true, id} if the task was already gone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| confirm | Yes | Must be set to true. Permanently deletes the task. To mark done without losing history use complete_task. Irreversible. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint=true. Description adds irreversibility, idempotency on retry, and the exact response format including alreadyDeleted field. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the core purpose and key details. Each sentence adds critical information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 2 parameters and no output schema, the description explains both parameters and the exact return object. It also covers retry behavior, making it self-contained for a delete operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (confirm has description, id lacks description). Description explains confirm's role and response semantics but does not elaborate on id beyond what schema implies. Compensates partially.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'permanently delete a task' and contrasts with complete_task for marking done. It uses strong wording like 'DESTRUCTIVE & IRREVERSIBLE' to reinforce purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool (permanent delete) and when to use complete_task instead. Also explains confirm=true requirement and idempotent behavior, giving clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter_opportunitiesARead-only
Filter opportunities by structured conditions (milestone, value, close date, tags). Use this — not search_opportunities — for questions like 'last won deal', 'opportunities closed this month', 'pipeline X at milestone Y'. Capsule's API does not support ad-hoc sort, but for 'most recent X' you can filter by a date field (e.g. {field: 'closedOn', operator: 'is within last', value: 90}) and pick the highest-id row — Capsule IDs are monotonic, so newest id = newest record.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, party, milestone, missingImportantFields. | |
| perPage | No | ||
| conditions | Yes | Array of filter conditions. All conditions are ANDed together. To get newest records, use a date condition like {field: 'addedOn', operator: 'is within last', value: 7} and pick the highest-id row from the result (Capsule IDs are monotonic). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: it discloses that Capsule's API does not support ad-hoc sort and provides a workaround based on monotonic IDs. This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a bit lengthy but each sentence carries weight: purpose, differentiation, and the sorting workaround are all essential. It front-loads the purpose and usage guidance, then provides the advanced tip. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with multiple conditions and a known sorting limitation, the description covers the most critical missing piece (sorting workaround) and gives a concrete example. It doesn't mention pagination or return format, but since there is no output schema and readOnly annotations cover side effects, this is adequate. The 'all conditions ANDed' is already in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%; the schema itself has detailed descriptions for the conditions array (field, operator, value). The description adds an explicit example of a date filter for 'most recent X' and clarifies the field-name mapping (e.g., response.createdAt vs filter-side 'addedOn') indirectly via the example. This compensates for the partial coverage and adds practical semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool filters opportunities by structured conditions, listing the key fields (milestone, value, close date, tags). It explicitly differentiates from search_opportunities by naming the sibling and giving example queries that should use this tool, making its purpose unambiguous and distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It directly says 'Use this — not search_opportunities — for questions like ...', providing explicit when-to-use guidance and naming the alternative. It also explains how to handle the lack of ad-hoc sorting, which is a practical usage note beyond basic selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter_partiesARead-only
Filter parties by structured conditions (date ranges, tags, fields). Use this — not search_parties — for questions like 'most recent client', 'parties added this week', 'parties tagged VIP'. Capsule's API does not support ad-hoc sort, but for 'most recent X' you can filter by a date field (e.g. {field: 'addedOn', operator: 'is within last', value: 30}) and pick the highest-id row from the result — Capsule IDs are monotonic, so newest id = newest record.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, organisation, missingImportantFields. | |
| perPage | No | ||
| conditions | Yes | Array of filter conditions. All conditions are ANDed together. To get newest records, use a date condition like {field: 'addedOn', operator: 'is within last', value: 7} and pick the highest-id row from the result (Capsule IDs are monotonic). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals non-obvious behaviors: email uniqueness validation, type must match name fields, and the 'read-only' hint for validation. These go beyond the schema and annotations, which only state destructive hints are false. Missing error handling details, but the key validation trap is exposed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and dense with information — three sentences cover all key points. The text is not overly verbose, though the 'use read-only when validation' phrase is somewhat cryptic. Overall it imparts maximum value per word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the primary decision points (person vs org, email uniqueness, field mismatches) and gives an outline of what to provide. Does not mention pagination or response format, but for a create tool, the crucial context is validation constraints.Client's expectation of the created object is likely understood.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Clarifies the conditional parameters (lastName/organisationName based on type), explains that firstName/lastName are ignored for organisations, and specifies the 'value' for tags. Not every parameter is described, but the critical ones (type, name fields, uniqueness) are covered. The schema already provides structure for address/contact objects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('create a new party') and distinguishes between person and organisation subtypes. It does not name an alternative create tool (none exists), but the purpose is unambiguous. Could be tightened, but the verb+object is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit instructions for person vs. organisation creation, notes the ignored fields for organisations, and ties the 'type' field to name-field requirements. The email-uniqueness validation is also a crucial usage constraint. It doesn't compare against other create tools, but as the only create-party tool, the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
filter_projectsARead-only
Filter projects by structured conditions (date ranges, status, tags, owner). Use this — not list_projects — for questions like 'most recent project', 'projects opened this month'. Capsule's API does not support ad-hoc sort, but for 'most recent X' you can filter by a date field and pick the highest-id row — Capsule IDs are monotonic, so newest id = newest record.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, party, opportunity, missingImportantFields. | |
| perPage | No | ||
| conditions | Yes | Array of filter conditions. All conditions are ANDed together. To get newest records, use a date condition like {field: 'addedOn', operator: 'is within last', value: 7} and pick the highest-id row from the result (Capsule IDs are monotonic). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly=true and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond that: the API does not support ad-hoc sort, and Capsule IDs are monotonic so newest id = newest record. This tells the agent about a real API quirk and how to compensate. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, then usage guidance and the sort workaround. The second sentence is dense but every clause earns its place; no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only filter tool with a rich schema and safety annotations, the core usage, sibling routing, and the key API limitation are all covered. The only minor gap is the absence of any mention of the return shape, but for a filter tool the response (matching project records) is predictable and the schema already documents pagination caps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% — conditions, field, operator, and value are richly documented in the schema, while page and perPage rely on defaults. The description adds strategic guidance for crafting conditions (date-range filtering plus highest-id selection as a sort substitute), but it does not compensate for the undocumented pagination parameters or explain embed usage beyond the schema's token list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Filter projects') plus the condition dimensions ('date ranges, status, tags, owner'), and explicitly distinguishes itself from list_projects. An agent can tell exactly what this tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternative explicitly ('Use this — not list_projects') and gives concrete query examples ('most recent project', 'projects opened this month'). It also explains the API's no-sort limitation and the recommended workaround, so selection logic is fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attachmentARead-only
Download an attachment by id. Returns image content for image/* types (Claude can describe it natively); decoded text for text/* and application/json (small files); JSON metadata + base64 payload for other binary types (PDF, Office docs, etc.). Files exceeding maxSizeBytes (default 5MB) return metadata only with a truncated: true flag.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Attachment ID. | |
| maxSizeBytes | No | Refuse to return content over this size (default 5242880 bytes ≈ 5MB; max 26214400 bytes ≈ 25MB). Files exceeding the cap return metadata only with a 'truncated: true' flag. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as a safe read operation, but the description adds rich behavioral details: how different MIME types are handled, the size limit, and the 'truncated' flag for large files. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that front-load the core purpose and then efficiently detail the conditional behaviors. Every sentence contributes necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description thoroughly covers return types for various MIME categories, the truncation mechanism, and size limits. It addresses edge cases and leaves no gap in understanding what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter described. The description adds context beyond the schema by explaining the behavior for files exceeding maxSizeBytes (truncated flag) and the default value, and clarifies that image/* types return image content. This adds meaningful nuance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description starts with 'Download an attachment by id' – clear verb+resource. It distinguishes download from its sibling 'upload_attachment' and specifies handling per MIME type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: to download an attachment. Although it does not list alternatives or when not to use it, the context is clear given the sibling tools and the straightforward nature of the operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_userARead-only
Show the user owning the API token this connector is using. Useful for audit ('under whose Capsule identity is the connector running?') and for confirming a token rotation moved ownership to the expected account. Wraps Capsule's GET /users/current — note the endpoint is /users/current, not /users/me.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds context about the specific endpoint ('/users/current') and mentions it is a read operation, which is consistent with annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core purpose and use cases, followed by endpoint specificity. Every sentence adds value, and there is no unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with annotations, the description is complete. It covers what the tool does, when to use it, and the underlying endpoint, leaving no ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so the description does not need to add parameter details. It provides enough context about the tool's function without needing to clarify parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool shows the user owning the API token, with specific use cases (audit, token rotation confirmation). It distinguishes itself from sibling tools like list_users by focusing on the current authenticated user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions when to use it (audit, confirming token rotation) but does not explicitly state when not to use it or mention alternatives like list_users. However, the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_custom_fieldARead-only
Show a single custom field DEFINITION by id. Use list_custom_fields first to discover field ids.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Custom field definition id. | |
| entity | Yes | Which entity type's custom field schema to inspect. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read nature is covered. The description adds that it shows the 'DEFINITION' (schema) rather than field values, which is useful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence followed by a brief, actionable suggestion. Every word serves a purpose with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with clear annotations, the description is largely sufficient. However, it does not describe the output shape (e.g., what fields the definition includes), which would be helpful given no output schema is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents both parameters (id and entity) with full descriptions. The description does not add additional meaning beyond stating 'by id,' making baseline score appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Show a single custom field DEFINITION by id,' clearly indicating the verb (Show) and the resource (custom field definition). It distinguishes itself from sibling tools like list_custom_fields by focusing on a single definition retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to 'Use list_custom_fields first to discover field ids,' providing clear context for when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entryARead-only
Fetch a single timeline entry by its numeric id. Returns the full payload — for a note: the body text; for a captured email: subject, body, from/to, and timestamps; for a completed-task record: the original task fields. Useful when you have an entry id from one of the list_*_entries calls and want the full content. To modify the body or activity-type of an existing entry use update_entry; to delete one use delete_entry.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| embed | No | Comma-separated embeds. Valid tokens: attachments, participants, party, project, opportunity, creator, activityType. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable context that the return payload varies by entry type (note, email, completed-task), which is not in the annotations. It doesn't add extra disclosures like rate limits, but for a read-only fetch that's acceptable. Score reflects added value beyond annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences: first states the core action, second explains the variable payload, third gives usage context and alternatives. It is front-loaded, without redundant phrases or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description's breakdown of the return payload by entry type is crucial and provided. It also covers when to use the tool and points to alternatives. The only minor gap is that it doesn't explicitly address the 'embed' parameter's effect on the response, but the schema already documents it. Overall it is sufficiently complete for a simple read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the 'embed' parameter with valid tokens, and the 'id' parameter is typed as integer with range. The description confirms id is numeric but doesn't explain the effect of 'embed' beyond the schema's own description. With 50% schema coverage, the description adds minimal new semantics, so it meets the baseline without enhancing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (fetch/single entry) and resource (timeline entry by numeric id), and distinguishes from list_*_entries by focusing on a single item and full content. It also names related sibling tools for modification and deletion, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes when to use it ('when you have an entry id from one of the list_*_entries calls and want the full content') and names alternatives for modification and deletion (update_entry and delete_entry). This gives clear routing and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_opportunitiesARead-only
Batch-fetch up to 50 opportunities by id. For 1–10 ids this is a single Capsule round trip (native multi-id endpoint); for 11–50 ids the connector transparently splits into 10-id chunks and fans out parallel Capsule requests, so the caller sees a single tool call with all results merged. Returns each opportunity's full record (value, milestone, owner, party). For a single id, use get_opportunity instead.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Array of opportunity IDs (1–50). Capsule's native batch-fetch endpoint caps at 10 per request; the connector transparently splits larger sets into 10-id chunks and fans out the Capsule calls in parallel. | |
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, party, milestone, missingImportantFields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint annotations, the description reveals internal behavior: native endpoint for 1–10 ids, transparent chunking and parallel requests for 11–50, and merged results. It also explains the return record fields (value, milestone, owner, party), giving the agent a solid model of side effects and output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with zero filler. It front-loads the primary purpose, then covers behavioral nuance and the alternative in a logical order. Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the read-only annotations, the full parameter schema, and the absence of an output schema, the description covers everything needed: purpose, limit, chunking behavior, return contents, and routing to the singular alternative. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters (ids and embed) are already documented. The description adds the return-record contents (value, milestone, owner, party) and the explicit batch-size breakdown, which gives the agent a fuller understanding of what the ids parameter yields. However, the core parameter meaning is already in the schema, so this is a 4 rather than a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Batch-fetch up to 50 opportunities by id') with clear scope and even names the alternative for single-id use. This distinguishes it immediately from get_opportunity, search_opportunities, and filter_opportunities without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'For a single id, use get_opportunity instead,' which is direct routing guidance. It also implies use for multiple ids by describing the batch behavior, leaving no doubt about when to pick this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_opportunityARead-only
Fetch a single opportunity by its numeric id. Returns the full record including value, milestone, owner, party, and any embedded tags/custom fields. Use embed='tags,fields' to include those in one round-trip. For batch fetches of up to 50 opportunities at once, use get_opportunities instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, party, milestone, missingImportantFields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds behavioral context beyond the annotations: the tool returns the full record and lists its fields, and clarifies that embedding avoids multiple round-trips. It doesn't mention rate limits or auth, but for a read-only fetch that's acceptable—the added round-trip and content specifics justify a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both loaded with useful information. The scoping constraint (single vs batch) is front-loaded, and the alternative tool is named. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two parameters alerts, the description fully covers what an agent needs: what it returns, how to use embed, and when to use the sibling tool. Return format is described via the field list, and annotations cover safety. No critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: the id parameter has no description in the schema, and embed has a token list. The description adds meaning by specifying 'id' is numeric (consistent with schema) and giving a concrete usage example ('embed='tags,fields'') plus the round-trip benefit. It clarifies the purpose of the embed beyond just listing tokens, though it doesn't fully explain each token. This exceeds the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: fetch a single opportunity by numeric id, and enumerates the fields included (value, milestone, owner, party, tags, custom fields). It contrasts with get_opportunities, making the purpose unmistakable and distinguishing it from its sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to use the embed parameter ('Use embed='tags,fields'') and when not to use this tool ('For batch fetches of up to 50 opportunities, use get_opportunities instead'). This gives the agent clear routing guidance with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_partiesARead-only
Batch-fetch up to 50 parties by ID. For 1–10 ids this is a single Capsule round trip (native multi-id endpoint); for 11–50 ids the connector transparently splits into 10-id chunks and fans out parallel Capsule requests, so the caller sees a single tool call with all results merged. Use this whenever Claude has several party IDs to avoid N sequential round trips of get_party.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Array of party IDs (1–50). Capsule's native batch-fetch endpoint caps at 10 per request; the connector transparently splits larger sets into 10-id chunks and fans out the Capsule calls in parallel. Result shape is identical regardless of input size. | |
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, organisation, missingImportantFields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=true and destructiveHint=false. The description goes well beyond that by disclosing the internal behavior: for 11-50 ids the connector splits into 10-id chunks and fans out parallel Capsule requests, with results merged. This level of behavioral detail is valuable and not implied by the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler. The core purpose is front-loaded in the first sentence, followed by behavior and usage guidance. Every sentence earns its place, and there is no redundant elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch-fetch tool with no output schema, the description is complete: it states the limit, explains the round-trip behavior for different id counts, and specifies that results are merged. Combined with readOnly annotations, it gives an agent everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters in full detail (ids with min/max and the chunking behavior; embed with valid tokens). The tool description adds no additional meaning beyond what the schema provides – it mostly repeats the chunking information. With 100% schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Batch-fetch up to 50 parties by ID' – a specific verb, resource, and limit. It clearly distinguishes itself from the sibling get_party by explaining the batching and parallel fan-out behavior, so an agent can tell them apart 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool: 'Use this whenever Claude has several party IDs', and names the alternative (get_party) and the problem it avoids (N sequential round trips). It also describes behavior for different ID counts, which helps the agent decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_partyARead-only
Fetch a single party (person or organisation) by its numeric id. Returns the full record including type, name fields, emails, phones, addresses, websites, and any embedded tags or custom fields. Use embed='tags,fields' to include those in one round-trip. For batch fetches of up to 50 parties at once, use get_parties instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Party ID | |
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, organisation, missingImportantFields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, so safety is covered. The description adds behavioral context by listing the return payload (type, name fields, emails, phones, addresses, websites, embedded tags/custom fields) and the effect of the embed parameter. It doesn't cover error handling or pagination, but for a single-read fetch this is not critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. The core action and resource are stated first, followed by embed usage and sibling routing. Every sentence earns its place; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two parameters, no output schema, and annotations, the description is complete: it says what the tool returns, how to request additional embeds, and when to prefer the batch alternative. The only minor note is that the schema marks id as optional (required=0), but the description implies id is essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes both parameters (id and embed) with 100% coverage. The description adds value by clarifying that id is numeric, and by explaining embed with the example value 'tags,fields' and a rationale for using it. This goes beyond the schema's terse description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch'), identifies a single resource ('a single party'), and specifies the key identifier ('by its numeric id'). It also distinguishes itself from the batch sibling get_parties by explicitly noting the single-party scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use which tool: 'For batch fetches of up to 50 parties at once, use get_parties instead.' It also advises using embed='tags,fields' to include related data in one round-trip, giving practical usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectARead-only
Fetch a single project by its numeric id. Returns the full record including name, description, status (OPEN/CLOSED), owner, stage, board, opportunityId (if linked), and timestamps. Use embed='tags,fields' to include attached tags and custom field values in one round-trip. For batch fetches of up to 50 projects at once, use get_projects instead. For the project's timeline (notes, captured emails, completed-task records) use list_project_entries.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, party, opportunity, missingImportantFields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral context by listing the full record fields returned (name, status, owner, stage, board, etc.) and explaining the embed='tags,fields' round-trip optimization. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with no redundancy: main action and scope first, then return fields, then embed tip, then alternatives. Front-loaded and every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential call information: what to pass, what you get back, how to enrich results, and which sibling to use for other use cases. Minor gap: id is implied but not explicitly stated as required, and the schema doesn't mark it required either, which could confuse an agent. Overall adequate for a simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (embed has a description, id does not). The description compensates by clarifying that id is a numeric project identifier and gives a concrete embed example ('tags,fields') that maps to actual semantics. It adds meaning beyond the schema for the key parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fetch') and resource ('a single project') scoped by numeric id, and explicitly differentiates from get_projects (batch) and list_project_entries (timeline). This clearly distinguishes it from many sibling project tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit, actionable alternatives: 'For batch fetches of up to 50 projects at once, use get_projects instead' and 'For the project's timeline ... use list_project_entries'. This gives the agent clear routing conditions and prevents misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectsARead-only
Batch-fetch up to 50 projects by ID. For 1–10 ids this is a single Capsule round trip; for 11–50 ids the connector transparently splits into 10-id chunks and fans out parallel Capsule requests, so the caller sees a single tool call with all results merged.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Array of project IDs (1–50). Capsule's native batch-fetch endpoint caps at 10 per request; the connector transparently splits larger sets into 10-id chunks and fans out the Capsule calls in parallel. | |
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, party, opportunity, missingImportantFields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read. The description adds substantial behavior beyond annotations: the transparent chunking into 10-id requests, parallel fan-out for 11–50 ids, and the merged result view presented as a single tool call. This is exactly the kind of hidden complexity that needs disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. The cap and the chunking behavior are front-loaded. Every sentence earns its place by describing non-obvious behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a read-only batch tool. The description covers the cap, the internal chunking, and the merged behavior; the schema handles parameters; annotations handle safety. This is effective as written.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description repeats the ids chunking behavior but does not add meaning beyond what the schema already states — the ids parameter description in the schema already mentions the 10-id cap and transparent splitting. Baseline 3 is appropriate because the schema does the heavy lifting, and the description adds no new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (batch-fetch) and resource (projects by ID) with an explicit cap of 50, and distinguishes it from the singular get_project by describing the batch behavior. An agent immediately knows it is the bulk variant of get_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clarifies the batch context (fetching multiple projects by ID) and the transparent chunking behavior, which implies when to use it over get_project. It does not explicitly name alternatives or say 'use get_project for a single ID', but the batch-fetch framing is clear enough. Lacks an explicit when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_siteARead-only
Return the Capsule account this connector is currently authenticated against (subdomain, display name, URL). Diagnostic for 'which Capsule account is this?'. For the PAT owner's user identity, use get_current_user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. Description adds specific return fields (subdomain, display name, URL) and diagnostic purpose, enhancing transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with purpose, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only diagnostic tool with no output schema, the description fully covers what it returns and its purpose, making it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters with 100% coverage, so description doesn't need to add parameter details. Baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the Capsule account (subdomain, display name, URL) the connector is authenticated against, and positions it as a diagnostic tool. It distinguishes itself from get_current_user, which returns the PAT owner's identity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Diagnostic for which Capsule account is this?' and directs to get_current_user for PAT owner identity, providing clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskARead-only
Fetch a single task by its numeric id. Returns the task's description, due date, owner, completion state, and the entity it's attached to (party / opportunity / project, if any — standalone tasks not tied to a record are also valid). For batch fetches of up to 50 tasks at once, use get_tasks instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Task ID | |
| embed | No | Comma-separated embeds. Valid tokens: party, opportunity, project, owner, nextTask. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only (readOnlyHint: true, destructiveHint: false). The description adds behavioral detail about the returned fields (description, due date, owner, completion state, attached entity) and the possibility of standalone tasks, which goes beyond the annotations by outlining the response content, though it does not cover error cases or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: two sentences that state the purpose, the response contents, and the alternative for batch operations. There is no unnecessary detail or repetition, making it efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the schema covers both parameters and the description addresses purpose, usage, and return content, the tool definition is complete for an agent to invoke correctly. It does not need to explain return formats or error handling since no output schema is present and the context is straightforward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions cover both parameters adequately: 'id' is described as 'Task ID' with integer type, and 'embed' as 'Comma-separated embeds' with valid tokens listed. The description adds little beyond what the schema provides, so the schema coverage is effectively 100%, warranting the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Fetch a single task by its numeric id.' It specifies the resource (task) and action (fetch), and explicitly distinguishes it from the batch variant get_tasks, making it easy for an agent to select the correct tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: use this tool for a single task, and use get_tasks for batch fetches of up to 50. This directly tells the agent when to choose this tool over its sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tasksARead-only
Batch-fetch up to 50 tasks by ID. For 1–10 ids this is a single Capsule round trip; for 11–50 ids the connector transparently splits into 10-id chunks and fans out parallel Capsule requests, so the caller sees a single tool call with all results merged.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Array of task IDs (1–50). Capsule's native batch-fetch endpoint caps at 10 per request; the connector transparently splits larger sets into 10-id chunks and fans out the Capsule calls in parallel. | |
| embed | No | Comma-separated embeds. Valid tokens: party, opportunity, project, owner, nextTask. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds valuable behavioral context: it explains the underlying Capsule API limit of 10 per request, the transparent splitting for larger batches, parallel fan-out, and that the caller sees merged results. This goes beyond the annotations and helps the agent understand performance and consistency implications. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the primary behavior (batch-fetch up to 50 tasks) and then provides the important edge-case detail about splitting. It is neither too long nor verbose, with each clause earning its place. It could be slightly more structured with a bullet or two, but the current format is efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (2 params, no output schema, no nested objects), the description covers the essential behavioral aspects: batch limit, splitting behavior, and network round-trip implications. The annotations already provide safety context. The description does not mention error handling or rate limits, but these are not explicitly required for this simple read operation. It is largely complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds depth by explaining the 10-id chunking behavior in relation to the 'ids' parameter, which is beyond what the schema says. It also mentions the 'embed' parameter's purpose implicitly through the schema, but the description reinforces the batch context. Since schema coverage is high, a 3 is baseline, but the added chunking detail justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches up to 50 tasks by ID, using a specific verb ('batch-fetch') and resource ('tasks'). It distinguishes itself from get_task (which likely fetches a single task) by emphasizing the batch capability. However, it does not explicitly name a sibling alternative, so it loses a point for not being as explicit as possible.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the behavior for different batch sizes (1-10 vs 11-50) and mentions the splitting mechanism, giving the agent clear context on what to expect. It does not explicitly state when to use this tool vs alternatives (e.g., get_task for single fetch), but the batch emphasis implies the use case. The lack of explicit exclusions means it's a 4, not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trackARead-only
Fetch a single track instance by id. Returns the minimal Capsule projection: id, description, trackDateOn, direction, and the array of tasks attached to the track. Capsule's GET /tracks/{id} does NOT include a trackDefinition link, an entity reference, or a completion field — to find the entity a track is applied to, use list_entity_tracks (which lists track instances by their parent entity); to check completion, the track-tasks' own statuses are the proxy.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint: true), the description adds context that the API does NOT include a trackDefinition link, entity reference, or completion field. This discloses important behavioral traits that affect how agents interpret the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: first states purpose, second lists return fields, third explains exclusions and alternatives. No wasted words, highly front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple 1-parameter tool with annotations and no output schema, the description covers purpose, return projection, exclusions, and cross-references to relevant siblings. It is complete for an agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has a single 'id' parameter with 0% description coverage. The tool description reinforces that the tool fetches 'by id', but does not detail format or constraints beyond what the schema provides. The clarity is adequate, hence 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches a single track by ID and lists the exact fields returned (id, description, trackDateOn, direction, tasks). It also explicitly distinguishes itself from sibling tools like list_entity_tracks by noting what is not included.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use alternative tools: 'to find the entity a track is applied to, use list_entity_tracks; to check completion, the track-tasks' own statuses are the proxy.' This directly helps the agent choose the correct tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_activitiesARead-only
Global cross-entity ACTIVITY FEED: everything that happened across the tenant, newest first — typed rows (Note, Task completed, Email sent, Email received, plus custom types) with the acting user, the apiClient that made the change, and refs to the party/opportunity/project/task/entry concerned. Supports since (ISO-8601, server-side filter) and pagination. THE tool for 'what happened this week across the book', 'what did touch today', or 'which emails came in' — one call instead of per-record entry fan-outs. No per-entity server-side filter: filter client-side on the returned refs. CAVEAT: undocumented Capsule endpoint (stable in observation; discovered by live probe) — could change without notice.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| since | No | Only activities on/after this ISO-8601 timestamp (server-side filter, verified live). Omit for the newest activities. | |
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds substantial behavioral context: it specifies ordering (newest first), the content of rows (typed, acting user, apiClient, refs), pagination support, and a critical caveat that this is an undocumented Capsule endpoint 'could change without notice'. This far exceeds the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Multi-line but dense and purposeful, front-loading the core definition and then layering filters, use cases, and the caveat. Every sentence contributes value; the caveat at the end is appropriate. Slightly long but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully specifies expected return content (typed rows, user, apiClient, refs), ordering, pagination, and filtering semantics. It also discloses the undocumented nature of the endpoint, which is essential for safe use. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (only `since` is described). The description compensates by explaining `since` as an ISO-8601 server-side filter and mentions pagination generically. It does not detail perPage/page specifics but the schema already provides defaults and bounds, so the description adds semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Global cross-entity ACTIVITY FEED: everything that happened across the tenant, newest first' — it clearly lists the content and distinguishes itself from per-entity list tools by emphasizing the cross-entity scope and the explicit note that there is no per-entity server-side filter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit example queries ('what happened this week across the book', 'what did <user> touch today', 'which emails came in') and explains when this is the right choice ('one call instead of per-record entry fan-outs'). Does not name specific sibling tools as alternatives, but clearly implies that per-entity filtering is not supported, which routes to other list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_activity_typesARead-only
List all configured activity types (e.g. Call, Meeting, Email). These are the categories used when logging timeline entries via add_note. Returns each type's id and name. The set is account-configured rather than a fixed enum, so call this to discover valid values before referencing an activityType in entry creation.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| perPage | No | Page size, max 100. Defaults to 100 for reference data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true and destructiveHint false, so the description's role is to add beyond that. It explains that the tool returns each type's id and name and that the values are account-configured. It does not contradict annotations and provides useful context, though it could mention pagination behavior more explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The first sentence states the core purpose, and the second provides usage context. It is front-loaded and every sentence is valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with two optional parameters and no output schema. The description covers purpose, usage context, and output fields (id and name). Annotations are present. It lacks explicit pagination behavior, but overall it is fairly complete for a read-only reference data tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% because the 'page' parameter lacks a description; only 'perPage' is described. The description does not elaborate on the parameters (page and perPage) beyond the schema. It mentions 'list all' but doesn't explain how pagination works. Given the low coverage, the description should compensate but fails to do so.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all configured activity types, gives examples (Call, Meeting, Email), and explains that it returns id and name. It distinguishes itself by noting these are account-configured, not a fixed enum, and that they are used in add_note, which differentiates it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: before referencing an activityType in entry creation via add_note. It explains that the set is account-configured, so calling this is necessary to discover valid values. It does not explicitly mention alternatives or when not to use it, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_additional_partiesARead-only
List secondary party links on an opportunity or project. The 'main' party is on the entity itself (opportunity.party); additional parties are e.g. partners, consultants, or referrers also involved in the deal. Set entity to 'opportunities' or 'projects'.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, organisation, missingImportantFields. | |
| entity | Yes | Which entity has the additional-party links. | |
| perPage | No | ||
| entityId | No | ID of the opportunity or project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, which is consistent with the 'List' action. The description adds context about main vs. additional parties, but it doesn't describe the response format or pagination behavior. However, given the read-only nature, the transparency is sufficient, and the description adds value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two sentences that immediately convey the purpose and key parameter. It avoids unnecessary detail and stays focused on the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides sufficient context for a list operation: it identifies the resource, the parent entities, and gives examples of additional party types. It does not mention response structure, but that is not strictly required for a read-only list. The missing parameter descriptions are a minor gap, but overall the description covers the necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only the 'entity' parameter is described in the schema, and the description reiterates its allowed values. The parameters 'page', 'embed', 'perPage', and 'entityId' lack descriptions, though their names suggest common semantics (pagination, embedding, filtering). The description does not clarify 'entityId' or the meaning of 'embed' tokens, leaving gaps for an agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), the resource ('secondary party links'), and the target entities ('opportunity or project'). It also specifies the required parameter 'entity' and its allowed values. This makes the tool's purpose unambiguous and distinguishable from related tools like list_opportunities or list_projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that the tool lists additional parties, contrasting them with the main party on the entity itself. It also instructs the user to set the 'entity' parameter to 'opportunities' or 'projects'. While it doesn't explicitly name alternative tools, the context and examples make the appropriate usage clear. The lack of explicit 'when not to use' is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_associated_projectsARead-only
List projects associated with a given opportunity. Returns the same record shape as list_projects, filtered to one opportunity. The inverse direction (project → opportunity) is on each project's opportunity field directly, so this tool is only needed for opportunity → projects discovery — use list_party_projects for party → projects.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, party, opportunity, missingImportantFields. | |
| perPage | No | ||
| opportunityId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds behavioral context: it returns the same record shape as list_projects and is filtered to one opportunity. It also notes the inverse relationship. This goes beyond annotations but doesn't cover pagination or potential edge cases, which is acceptable given the read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with high information density. The core purpose is front-loaded, the alternative is mentioned, and there is no fluff. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description's reference to 'same record shape as list_projects' is helpful but not a full specification. It also omits that opportunityId is effectively required for meaningful use (though not marked required), and doesn't mention pagination defaults or error behavior. For a read-only list tool with 4 params, more detail on required inputs and response shape would be expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% (only embed has a description). The description mentions 'given an opportunity' but doesn't explicitly tie that to the opportunityId parameter, nor does it explain pagination (page, perPage) or their defaults. Since the schema leaves most parameters undocumented, the description should step in, and it largely doesn't.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List projects associated with a given opportunity') and clarifies that it returns the same record shape as list_projects but filtered, which distinguishes it from sibling tools like list_party_projects. This is precise and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use this tool ('only needed for opportunity → projects discovery'), when not needed (inverse direction is available directly on the project's opportunity field), and names the alternative for party → projects (list_party_projects). This is exemplary routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_boardsARead-only
List all project boards defined in Capsule. A board is a grouping of stages that projects flow through — the project equivalent of an opportunity pipeline. Returns each board's id, name, and stages. Use this to discover boardId when creating a project, then pick a starting stage via list_stages. Like pipelines, boards are stable per account.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds that it returns board id, name, and stages, and that boards are stable. No contradictions; the added context is helpful but does not cover pagination behavior or other traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a purpose: stating the action, defining the resource, and providing usage context. No redundant words; efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description does specify return fields (id, name, stages), which is adequate. Pagination is supported but not mentioned. The tool is simple and the context provided is sufficient for selection and basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the pagination parameters (page, perPage) at all. While the parameters are standard and optional, the description misses the opportunity to explain their role, leaving the agent to infer from the schema only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all project boards, explains what a board is (a grouping of stages), and specifies the returned fields (id, name, stages). It differentiates from sibling tool list_pipelines by calling boards the project equivalent of opportunity pipelines.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance to use this tool to discover boardId when creating a project, and then to use list_stages for stage selection. It notes that boards are stable per account. No explicit when-not-to-use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesARead-only
List configured entry/task categories (Call, Email, Meeting, Follow-up, etc.) with their colours. Returns each category's id, name, and colour. The set is account-configured rather than a fixed enum — call this to discover valid category ids before referencing one in add_note or create_task. Used to label and filter timeline entries and tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| perPage | No | Page size, max 100. Defaults to 100 for reference data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations by noting that the set is account-configured rather than a fixed enum. Annotations already declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to repeat that, but it adds useful information about dynamic data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, no redundancy. It starts with the core action and then provides context and purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, the description covers the return format (id, name, colour) and purpose. However, it does not mention that the list is paginated (as per schema), which is a minor gap. Overall, it's fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has two parameters (page, perPage) with 50% description coverage (only perPage has a description). The description does not mention any parameters, leaving page undocumented. It should at least indicate that pagination is available.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists configured entry/task categories with their colours, IDs, and names. It distinguishes itself from sibling list tools by specifying the resource (categories) and provides examples of categories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool: to discover valid category IDs before using them in add_note or create_task, and for labeling and filtering. It doesn't explicitly state when not to use it, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_countriesARead-only
List Capsule's country dictionary (250 rows: name, alpha2Code, alpha3Code, numericCode, dialCode). The name values are the EXACT spellings accepted by party address country fields — Capsule rejects anything else with 422 'unknown country' (e.g. accepted: 'Czechia', 'United Kingdom'; rejected: 'Czech Republic', 'UK'). Consult this before add_party_address / update_party address writes when unsure of a spelling. Complete list in one response; cached (reference data).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/destructive=false, so the description adds meaningful extras: the complete one-shot listing (no pagination), the exact row count (250), and that the data is cached reference data. This rises above the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but not bloated: it packs the row count, field list, usage condition, and error behavior into a single tight sentence. A minor over-elaboration on the exact reject message is acceptable, so a 4, not a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the data set size, field schema, usage trigger, and failure mode. An agent can decide and call this tool correctly without opening the schema or consulting anywhere else.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parametersthority, so the schema fully covers it. The description adds no parameter explanations because none are needed — a baseline 3 is appropriate; there is simply nothing further to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it: tie to party addresses, and notes the exact spelling requirement (anything else → 422). It also names an alternative class (add_party_address) where this dictionary is the prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_currenciesARead-only
List Capsule's currency dictionary (80 rows: ISO 4217 code, symbol, name). Valid codes for opportunity value.currency. Complete list in one response; cached (reference data).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotation, the description discloses that the data is cached (reference data) and that the complete list is returned in one response (no pagination). This gives the agent a clear expectation of the tool's behavior and performance characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet information-dense, covering all essential aspects in a single sentence. It is well-structured, starting with the action, then the content, purpose, and behavioral notes, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description is fully complete. It explains what the data contains, its intended use, and its delivery characteristics, leaving no ambiguity for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and the description correctly does not attempt to describe any. Since there are zero parameters, the baseline of 4 is appropriate; the description adds no parameter-related confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists Capsule's currency dictionary, specifying the exact fields (ISO 4217 code, symbol, name) and row count (80). It also explains its purpose as providing valid codes for the opportunity's `value.currency` field, which is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: whenever valid currency codes are needed for `value.currency`. It also mentions that it is cached reference data, suggesting it can be called infrequently. However, it does not explicitly state 'use this when...', so a small gap remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_custom_fieldsARead-only
List custom field DEFINITIONS for an entity type (parties, opportunities, or projects). Returns the schema — name, type, options for list-type fields, etc. — NOT the values on any specific record. To read values on a record, use get_party / get_opportunity / get_project with embed=fields.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Which entity type's custom field schema to inspect. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint true and destructiveHint false. Description adds that it returns schema and not values, clarifying behavior beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with purpose, then clarification. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with one parameter and good annotations; description fully explains input, output, and boundaries. No output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage with enum for entity types. Description repeats the entity types but adds no additional semantic meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists custom field definitions for an entity type, returning schema (name, type, options) not values. It distinguishes from sibling tools like get_custom_field or get_party.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (to get definitions) and when NOT to use (for values on a record), directing to get_party/get_opportunity/get_project with embed=fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deleted_opportunitiesARead-only
Audit feature: list opportunities deleted on or after a given timestamp. The since parameter is REQUIRED. Response also includes a restrictedOpportunities key for records the integration user can't read fully.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| since | Yes | REQUIRED. ISO-8601 timestamp; only deletions on or after this point are returned. Example: '2026-01-01T00:00:00Z'. | |
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior. The description adds transparency by mentioning the `restrictedOpportunities` key in the response, which goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the tool's purpose. Every sentence adds value without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the required parameter and a notable response field, but lacks information about pagination parameters (`page`, `perPage`), which are part of the input schema and important for usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only the `since` parameter is described in the tool description, but it already has documentation in the schema. The `page` and `perPage` parameters lack any description, and with low schema description coverage (33%), the description does not compensate adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists deleted opportunities on or after a timestamp. The phrase 'Audit feature' distinguishes it from other listing tools and indicates a specific use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states that the `since` parameter is required, which is a key usage instruction. However, it does not provide guidance on when to use this tool versus siblings like `filter_opportunities` or `delete_opportunity`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deleted_partiesARead-only
Audit feature: list parties deleted on or after a given timestamp. The since parameter is REQUIRED (Capsule rejects the call without it). Response also includes a restrictedParties key — records the integration user can see were deleted but cannot read fully.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| since | Yes | REQUIRED. ISO-8601 timestamp; only deletions on or after this point are returned. Example: '2026-01-01T00:00:00Z'. | |
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds value by noting that the `since` parameter is mandatory and that the response includes a `restrictedParties` key for partially inaccessible records. This behavior is not implied by annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with 'Audit feature', and contains no superfluous information. Every sentence provides essential context without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description helpfully mentions the `restrictedParties` key. It covers the main purpose and a notable response detail. However, pagination behavior (e.g., sorting, maximum results) is not described, which would be useful for a list endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (only `since` has a description). The description reinforces that `since` is required and explains it is an ISO-8601 timestamp. However, it does not add meaning for `page` and `perPage` beyond their schema constraints (defaults and ranges), so the burden of compensating for low schema coverage is only partially met.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is an 'Audit feature: list parties deleted on or after a given timestamp.' It uses a specific verb ('list') and specific resource ('deleted parties'), and it distinguishes from sibling tools like 'list_deleted_opportunities' by focusing on parties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that the `since` parameter is REQUIRED and that the Capsule API rejects the call without it. It also explains the `restrictedParties` key, which helps the agent understand response behavior. However, it does not explicitly state when to use this tool versus alternatives like 'filter_parties'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deleted_projectsARead-only
Audit feature: list projects deleted on or after a given timestamp. The since parameter is REQUIRED. Response also includes a restrictedProjects key for records the integration user can't read fully.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| since | Yes | REQUIRED. ISO-8601 timestamp; only deletions on or after this point are returned. Example: '2026-01-01T00:00:00Z'. | |
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Consistent with annotations (readOnlyHint=true, destructiveHint=false). Adds value by revealing the `restrictedProjects` key in responses, informing the agent about potential partial data access. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose. Every sentence adds unique value with no redundancy. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, required parameter, and a notable response feature. Lacks details on pagination behavior and full response structure, which would aid agent invocation. Adequate but incomplete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning for the `since` parameter (required, ISO-8601 format) beyond the schema. However, it provides no explanation for `page` or `perPage`, which lack schema descriptions, leaving a gap for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as an audit feature for listing deleted projects by timestamp, distinguishing it from general listing tools like list_projects. However, it could further differentiate from sibling tools list_deleted_opportunities and list_deleted_parties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states that the `since` parameter is required, providing a clear usage constraint. Does not indicate when to avoid this tool or suggest alternatives, leaving some room for confusion about appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_employeesARead-only
List the people who work at a given organisation party. Returns the parties whose organisation field references the given partyId. Use this to answer 'who works at X?' rather than enumerating all parties.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, organisation, missingImportantFields. | |
| partyId | No | The organisation's party id. Returns the people whose `organisation` field links to this party. | |
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive. The description adds the key behavioral detail about the filtering logic (organisation field references partyId). It doesn't disclose pagination or embedding behavior, but given annotations cover safety, this is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and purpose. No filler. Efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with the schema and annotations, provides enough for an agent to call this correctly for the main use case. It lacks explicit mention of pagination defaults or embed usage, but these are in the schema. Given the low complexity, it is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description does not add information beyond the schema. partyId is described in schema, embed is also described. It does not clarify pagination parameters. With 50% schema coverage, the description fails to compensate for the undocumented parameters, resulting in insufficient parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the operation precisely: listing employees of an organisation. It explicitly notes the return condition (parties referencing the given partyId) and distinguishes from enumerating all parties. Clear and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use-case ('answer who works at X') and tells to avoid using it to enumerate all parties. It doesn't name specific alternative tools but implies the distinction, which is sufficient for the agent to choose appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entity_tracksARead-only
List track INSTANCES on a specific record — i.e., which tracks have been applied to this opportunity / project / party. Distinct from list_track_definitions, which lists the templates. NOTE: some boards have stage-triggered automation that auto-applies tracks when an entity enters specific stages — tracks returned here may include BOTH manually-applied tracks (via apply_track) and auto-applied tracks from Capsule board rules. To distinguish, compare each track's trackDefinition.id against your application's apply_track call history.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Which entity type. | |
| entityId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only. The description adds transparency about the source of tracks (manual vs. auto-applied from board rules) and hints at how to distinguish them. This exceeds annotation disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences and a note, all front-loaded. Every sentence adds value without superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description explains scope, distinguishes from a sibling, and covers behavioral nuance. It lacks detail on the entityId parameter but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (entity has description, entityId does not). The description mentions entity types but does not explicitly tie to the 'entity' parameter or clarify 'entityId'. It adds marginal value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists track instances on a specific record and explicitly distinguishes it from the sibling 'list_track_definitions', which lists templates. Verb and resource are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (when needing track instances on an entity) and distinguishes from list_track_definitions. It does not explicitly state when not to use or list alternatives, but the guidance is clear. The note about auto-applied tracks adds useful context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entriesARead-only
Global timeline feed: every note, captured email, and completed-task record across the whole Capsule account, paginated. Default order is most-recent-first. Use this for 'what activity happened today/this week across the company?' rather than iterating list_party_entries / list_opportunity_entries / list_project_entries.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: attachments, participants, party, project, opportunity, creator, activityType. | |
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so an agent knows it is a safe read. The description adds valuable behavior context: pagination is supported, default order is most-recent-first, and it covers multiple record types. It omits specifics like pagination response format or embed details, but given annotations cover the safety profile, this is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the purpose, states the ordering, and then gives the usage guidance. Every sentence earns its place; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description could explain return format, but the tool is a paginated list—an agent can infer the response structure from the schema parameters. The description covers scope, ordering, and alternatives. It doesn't mention embed tokens or pagination details, but that is slightly beyond the minimum for a read-only list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only 'embed' is described in schema; 'page' and 'perPage' are not). The description does add context by mentioning pagination and the default ordering, and it hints that this is a global feed. However, it doesn't explain the exact semantics of the three parameters beyond what schema provides for 'embed'; but the description's mention of pagination compensates somewhat. Given the description adds some meaning beyond the bare parameter names and types, a 4 is justified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is specific: 'Global timeline feed: every note, captured email, and completed-task record across the whole Capsule account, paginated.' It defines the resource, the verb (list), the scope, and the content type, which clearly distinguishes it from sibling tools that list entries per party/opportunity/project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool ('what activity happened today/this week across the company?') and points to sibling alternatives that should be used instead for scoped lists, naming them explicitly. This is the optimal pattern for usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_goalsARead-only
List sales / activity goals configured in the account (per-user or per-team revenue or activity targets). Returns an empty list for accounts that don't use the Goals feature.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| perPage | No | Page size, max 100. Defaults to 100 for reference data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses empty list behavior for accounts not using Goals feature, adding value beyond readOnlyHint and destructiveHint annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences, no fluff, front-loaded with purpose. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers resource, scope, and edge case. Pagination details are in schema. No output schema needed for a list tool. Minor gap: no example or mention of sorting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (only perPage described). Description adds no parameter-specific info beyond schema, meeting baseline but not compensating for missing descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'list' and resource 'goals', specifying scope as per-user or per-team revenue or activity targets. Distinct from siblings as no other tool lists goals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for retrieving goals but lacks explicit guidance on when to use vs alternatives or when not to use. No mention of pagination or filtering beyond schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_lost_reasonsARead-only
List all configured opportunity-loss reasons (e.g. 'Poor Qualification', 'Lost to competitor', 'Price too high'). Returns each reason's id and name; the set is account-configured rather than a fixed enum, so call this to discover valid ids before referencing a lostReason in update_opportunity when closing a deal as lost. Useful for analysing closed-lost opportunities by reason.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| perPage | No | Page size, max 100. Defaults to 100 for reference data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is covered. The description adds that the set is account-configured (dynamic) and returns id and name. This adds useful context beyond annotations, but no additional behavioral details are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, immediately states the main purpose, and contains no superfluous information. Every sentence adds value: what the tool does, what it returns, and why to use it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool (list with pagination) and no output schema, the description covers the return format (id and name) and the usage context. It could mention pagination defaults or behavior when no reasons are configured, but the schema partially covers pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (page and perPage parameters), but the description does not mention either parameter or their purpose. Since coverage is low, the description should compensate, but it does not, leaving the agent to rely solely on parameter names which may be ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'List all configured opportunity-loss reasons', provides examples, and explains the resource's purpose (discovering valid ids for update_opportunity). It clearly differentiates itself from sibling tools by its specific focus on lost reasons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: 'call this to discover valid ids before referencing a lostReason in update_opportunity when closing a deal as lost'. It provides context on when to use the tool, but does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_milestonesARead-only
List milestones (deal stages) within a specific opportunity pipeline. Returns each milestone's id, name, probability, and position. Used when creating opportunities (pass milestoneId to create_opportunity) or moving them across stages (set milestoneId in update_opportunity). Discover the pipelineId first via list_pipelines. Milestones are pipeline-scoped — not interchangeable across pipelines.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| perPage | No | ||
| pipelineId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive nature. Description adds transparency by detailing returned fields (id, name, probability, position) and emphasizing pipeline-scoped constraints, but does not mention pagination behavior or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, efficiently front-loaded with purpose, no redundant content, and logically structured from definition to usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description covers return fields, usage prerequisites, and scope constraints. Minor gap: no mention of pagination behavior despite having pagination params. Annotation coverage is strong, and output schema is absent, so description compensates adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description explains pipelineId indirectly ('within a specific opportunity pipeline', 'discover the pipelineId first via list_pipelines') but omits any details about the page and perPage parameters, which are standard but not described.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'List milestones (deal stages) within a specific opportunity pipeline', specifies returned fields, and distinguishes from siblings by noting pipeline-scoping and referencing related tools (list_pipelines, create_opportunity, update_opportunity).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use this tool before creating or updating opportunities, mentions that pipelineId must be obtained via list_pipelines, and clarifies that milestones are pipeline-scoped, providing clear context for when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_opportunity_entriesARead-only
List timeline entries (notes, captured emails, completed-task records) for an opportunity. Returns entries newest-first. Each entry has a type ('note', 'email', 'task'), free-text content, and timestamps. Use this to answer 'what's the latest on deal X?' For party or project timelines, use list_party_entries or list_project_entries respectively.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: attachments, participants, party, project, opportunity, creator, activityType. | |
| perPage | No | ||
| opportunityId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already present, the description adds useful behavioral context: results are returned newest-first, and each entry has a type, free-text content, and timestamps. It does not mention pagination behavior or embed semantics, but it covers the core return behavior well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the purpose first, then return behavior, then the canonical usage, then the relevant alternatives. There is no redundant or filler language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool, the description is strong: scope, ordering, entry content, and alternative routes are all given. The main omissions are pagination and embed token semantics, but those are partially represented in the input schema and are probably lower-risk for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, so the description bears some responsibility for parameter meaning. It clarifies the opportunityId context via 'for an opportunity', but page, perPage, and embed are not explained beyond their schema types/defaults. The schema's constraints and defaults partially compensate, and the tool name makes opportunityId fairly clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: it lists timeline entries for an opportunity, enumerates the entry types (notes, captured emails, completed-task records), and specifies ordering. It is distinct from list_party_entries and list_project_entries because it is scoped to opportunities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit use case ('what's the latest on deal X?') and directly names the sibling tools to use instead for party or project timelines. This gives the agent clear selection criteria beyond merely inferring from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_party_entriesARead-only
List timeline entries (notes, captured emails, completed-task records) for a party. Returns entries newest-first. Each entry has a type ('note', 'email', 'task'), free-text content, and timestamps. Use this to read the conversation history with a contact or organisation — answers questions like 'what's the latest with X?' For opportunity or project timelines, use list_opportunity_entries or list_project_entries respectively. IMPORTANT for organisations: pass includeLinkedPersons: true to surface entries filed against the org's linked people (sales-conversation emails almost always land on a person row, not the org row — Capsule's API files each entry against exactly one party). Without this flag, an org with active customer-facing email will appear quiet here even though its lastContactedAt is current. For any 'what's new with $ORG?' query, set includeLinkedPersons: true.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: attachments, participants, party, project, opportunity, creator, activityType. | |
| partyId | No | ||
| perPage | No | ||
| includeLinkedPersons | No | When true AND `partyId` is an ORGANISATION, also include entries filed against the organisation's linked people (the persons whose `organisation` field references this org). The connector enumerates linked persons via `GET /parties/{orgId}/people`, fans out `GET /parties/{personId}/entries` in parallel (concurrency-capped, default 5 / configurable via `CAPSULE_MCP_BATCH_CONCURRENCY`), and merges into a single feed sorted by `entryAt` descending, deduped by entry id. Default is `false` — single GET, existing behaviour unchanged. WHY THIS FLAG EXISTS: Capsule's API files each entry against exactly one party, opportunity, or project row (verified v1.6.6 wire-trace probe 4 — POST /entries rejects multi-party bodies with 422). For an organisation with multiple contacts, captured emails almost always land on a person row, not the org. As a result, `list_party_entries(orgId)` with `includeLinkedPersons: false` will miss recent customer-facing email — even though the org's own `lastContactedAt` is updated by the activity. This flag is the correct call for any 'what's new with $ORG?' question. WHEN `partyId` IS A PERSON: silently no-op — persons have no linked-people relationship in Capsule's data model, so the flag is functionally inert (the connector still issues a cheap `/people` check; the response is empty). LATENCY: 1 + N round trips for an org with N linked people, concurrency-capped (typical: 2-3 waves for N=10). Linked-person enumeration reads the first 100 linked people; use list_employees for explicit pagination when an organisation has more contacts than that. Use `includeLinkedPersons: false` for fast pre-screen reads where you only need the org-row entries (e.g. invoice/contract notes that are typically filed at the org level). PAGINATION CAVEAT: `page` and `perPage` apply to the MERGED window, and the merge has a hard ceiling — it reliably orders only the most-recent ~100 entries across the org + its people (each party is fetched at Capsule's per-party cap of 100, and a top-100-per-party merge is correct only up to global position 100). Windows that cross the ceiling are truncated to the entries still inside that top-100 set; windows starting beyond it return no entries and end the feed. It does NOT continue into older history. To read a specific contact's full timeline beyond the merged ceiling, call `list_party_entries` on that person's id directly (the default single-GET path paginates natively with no ceiling). For the LLM-driven 'what's the latest with $ORG' query this is the typical use of, the first page is exact and the ceiling is never reached. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations only state readOnlyHint and destructiveHint, the description adds behavioral insight: entries are returned newest-first, each entry has a type and content, and crucially, it explains that Capsule's API files each entry against exactly one party, which is why includeLinkedPersons exists. It also notes that without the flag, an org may appear quiet despite a current lastContactedAt. This is valuable context beyond the annotations, though it does not cover pagination ceilings (which are detailed in the parameter description).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise given the complexity, with the core purpose front-loaded in the first sentence. It then covers usage, alternatives, and a critical caveat without excessive verbosity. The structure is logical: statement, usage, alternatives, important note. It could be slightly tighter but is well-organized and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters, no output schema, and minimal annotations. The main description covers the key behavior, return format (type, content, timestamps), and the critical includeLinkedPersons nuance. The parameter description for includeLinkedPersons adds extensive detail on pagination ceilings and latency, which the main description omits. Given that the full definition includes these details, the tool is fairly complete, though the main description alone lacks pagination caveats. This is a minor gap since the schema provides the information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (40%), so the description should compensate. It does add meaning for includeLinkedPersons, providing usage context and rationale beyond the schema's technical explanation. However, it does not address other parameters like page, perPage, or embed, which lack schema descriptions. The description partially compensates for the coverage gap by focusing on the most critical parameter, but it leaves the rest to be inferred from the schema's default values and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List timeline entries (notes, captured emails, completed-task records) for a party.' It specifies the verb, resource, and content. It also differentiates from sibling tools by explicitly naming list_opportunity_entries and list_project_entries for other timeline types, leaving no ambiguity about which tool to use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: 'Use this to read the conversation history with a contact or organisation.' It also gives clear exclusions for alternatives ('For opportunity or project timelines, use list_opportunity_entries or list_project_entries respectively'). Furthermore, it offers detailed conditional guidance on the includeLinkedPersons flag, distinguishing between 'what's new with $ORG' queries and fast pre-screen reads, which is beyond typical usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_party_opportunitiesARead-only
List opportunities linked to a given party. Returns the same record shape as get_opportunity, filtered to one party — use this to answer 'what deals do we have with X?' without enumerating all opportunities. Accepts optional embed (e.g. 'tags,fields') to include those in one round-trip.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, party, milestone, missingImportantFields. | |
| partyId | No | ||
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds that it returns the same record shape as get_opportunity and supports embedding for one round-trip, which is useful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, efficient and front-loaded with the core purpose, then adds the key compatibility and embed details. It doesn't waste words, though the embed example could be considered redundant with schema tokens.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a filtered list tool with read-only annotations and an existing output schema reference (get_opportunity), the description is fairly complete. It covers the party filter, return shape, and embed hint, but doesn't explicitly mention pagination parameters or default behavior, though these are covered by the schema. Overall adequate for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, but the description mentions the embed parameter and its example tokens, including 'tags,fields'. It doesn't explain partyId or pagination semantics, but the schema itself provides some descriptions. The description adds a bit beyond the schema, so a 3 is fair.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists opportunities linked to a party, and distinguishes itself from get_opportunity by focusing on a party filter. It also gives a specific use case ('what deals do we have with X?'), leaving no ambiguity about its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains when to use this tool (for party-filtered opportunities) and contrasts with get_opportunity, but doesn't explicitly mention when not to use it or alternatives like search_opportunities. Still, the context implies the right usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_party_projectsARead-only
List projects linked to a given party. Returns the same record shape as get_project, filtered to one party — use this to answer 'what projects is X involved in?' without enumerating all projects. Accepts optional embed (e.g. 'tags,fields'). For the opportunity-side analogue, use list_party_opportunities.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, party, opportunity, missingImportantFields. | |
| partyId | No | ||
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=true and destructiveHint=false voices, so the description credits the safety profile. It adds genuine behavioral value by revealing the return shape ('same record shape as get_project, filtered to one party') and the performance rationale ('without enumerating all projects'). This exceeds the baseline but stops short of covering pagination or ordering behavior, which would make it fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry a precise purpose, a memory hook (the literal query 'what projects is X involved in?'), a return-shape note, and the analogue pointer. Every clause earns its place; the most critical information (purpose and unique behavior) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a filtered read-only list tool with pagination defaults in the schema and a reference to get_project's record shape, the description covers the key gaps: input semantics (embed), filtering behavior, and analogue routing. It does not spell out pagination behavior or maximum pages, but given the schema's explicit defaults (perPage max 100), the description is reasonably complete for a moderately complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% (only embed has inline documentation). The description adds a concrete embed example ('tags,fields'), which is helpful, but it does not clarify the semantics of page/perPage defaults or the partyId requirement. The standard pagination parameters are left to schema defaults, so the description only marginally compensates for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource ('List projects linked to a given party') and immediately distinguishes this tool from enumerating all projects. It also names a clear natural-language use case ('what projects is X involved in?') and identifies the analogue (list_party_opportunities), making its niche unmistakable relative to siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it (to answer 'what projects is X involved in?' without enumerating all projects) and names the opportunity-side analogue (list_party_opportunities). However, it does not explicitly mention when NOT to use it, such as when the full unfiltered project list is needed, leaving list_projects/filter_projects open. This is clear guidance with a small gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pipelinesARead-only
List all sales pipelines defined in Capsule CRM. Returns each pipeline's id, name, and milestones (deal stages, ordered by position). Use this to discover the pipelineId when creating an opportunity, then pick a milestone from the same pipeline via list_milestones. Pipelines are stable per Capsule account — list once and cache; they rarely change.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, and the description confirms it's a read operation listing all pipelines. Adds context that pipelines are stable and rarely change, which is beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: purpose and output, usage guidance, caching advice. No redundant words, front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return fields (id, name, milestones). However, it lacks explanation of pagination parameters, though the tool is simple and the context signals indicate zero required parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the page or perPage parameters. The agent must infer pagination from parameter names alone, which is insufficient for proper invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists all sales pipelines and returns id, name, and milestones. It distinguishes itself from sibling tools like list_milestones and create_opportunity by specifying the use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says use this to discover pipelineId for creating opportunities and to pick a milestone from the same pipeline via list_milestones. Also advises caching since pipelines rarely change, providing clear when-to-use and optimization guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_entriesARead-only
List timeline entries (notes, captured emails, completed-task records) for a project. Returns entries newest-first. Each entry has a type ('note', 'email', 'task'), free-text content, and timestamps. Use this to answer 'what's the latest on project X?' For party or opportunity timelines, use list_party_entries or list_opportunity_entries respectively.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: attachments, participants, party, project, opportunity, creator, activityType. | |
| perPage | No | ||
| projectId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety profile is clear. Beyond that, description adds valuable behavioral context: returns newest-first ordering, and describes the structure of each entry (type, free-text content, timestamps). This is useful for an agent to interpret results. Does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: first states what it does and the result structure, second gives the use-case, third routes to alternatives. Front-loaded with the core purpose. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description is thorough: it explains the entry types, ordering, and provides usage guidance. It doesn't mention pagination defaults (page, perPage) explicitly, but these are standard. The return format is partially described (each entry has type, content, timestamps). It's nearly complete, missing only minor details like whether it returns full objects or summaries, but given the simplicity, it's adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, with only the 'embed' parameter documented. The description adds crucial meaning by explaining the structure and ordering of entries, which helps an agent understand what projectId, page, and perPage do in context. However, it doesn't explicitly explain each parameter's purpose, but given the low coverage, it compensates partially. The baseline of 3 is raised to 4 because the description gives enough context for an agent to infer parameter meanings (projectId is the project, page/perPage are pagination).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the verb (list), resource (timeline entries for a project), and specifies the types of entries returned (notes, captured emails, completed-task records). Differentiates from sibling tools by naming list_party_entries and list_opportunity_entries as alternatives for other timeline types. Very specific and distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit use case: 'Use this to answer "what's the latest on project X?"' and clearly states when to use siblings: 'For party or opportunity timelines, use list_party_entries or list_opportunity_entries respectively.' This gives clear context and exclusions, making it easy for an agent to select the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsARead-only
List projects in Capsule CRM, optionally filtered by status. Returns results in Capsule's default order (no sort parameter is supported here). For free-text matching use search_projects; for structured queries — 'most recent project', 'projects opened this month', 'projects tagged X' — use filter_projects instead.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, party, opportunity, missingImportantFields. | |
| since | No | Only records CHANGED on/after this ISO-8601 timestamp (incremental sync; pairs with the list_deleted_* audit tools). Wire-verified on the plain list endpoints. Ignored by Capsule when q triggers the /search sub-resource — omit q when using since. | |
| status | No | ||
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds the default ordering and the lack of a sort parameter, which is useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, then a concise routing note. No wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core use, alternatives, and a limitation (no sort). It doesn't explain pagination or embeds, but those are captured in the schema. For a simple list tool, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description clarifies the status parameter (optional filtering) but leaves page, perPage, and since undocumented in text. With only 40% schema coverage, the description only partially compensates for the uncovered parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists projects with an optional status filter, and explicitly contrasts it with search_projects and filter_projects. This distinguishes it from siblings and leaves no ambiguity about what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit routing: use search_projects for free-text, filter_projects for structured queries, and notes that sorting is not supported here. This tells the agent exactly when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saved_filtersARead-only
List all filters that users have saved in Capsule's web UI for an entity type. Saved filters are reusable — they bundle conditions, columns, and (importantly) sort. Use this to discover what queries are already configured before building a one-off filter_* call.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Which entity type the filter operates over. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and non-destructive behavior. The description adds context that filters are saved in the web UI and bundle sort, enhancing transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with the verb and resource front-loaded. Every sentence adds value with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one parameter, annotations covering safety, and no output schema, the description provides sufficient context including the tool's purpose, source of filters, and usage tip.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter fully documented. The description does not add additional semantic meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists saved filters for an entity type, distinguishing from one-off filter_* calls by noting they are reusable and bundle conditions, columns, and sort.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use this tool to discover existing queries before building a new filter_* call, providing clear when-to-use guidance and implicitly suggesting alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stagesARead-only
List project stages. Without arguments returns every stage across every board (each entry carries a .board reference so you can tell them apart). Pass boardId to scope the result to one specific board's stages. Use this to discover the numeric stage.id that create_project / update_project consume — stage names alone won't do, Capsule resolves by id. For opportunity (deal) stages, use list_pipelines instead — opportunities don't have stages in the project sense.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| boardId | No | Optional. If provided, returns only the stages defined on that specific board (uses /boards/{id}/stages). Omit to get all stages across all boards in one call. | |
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds context: listing behavior (all vs. scoped), the inclusion of .board reference, and the requirement for ID over name. This adds value beyond annotations, though it doesn't detail pagination or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences covering all essential aspects: core function, default behavior, parameter use, specific use case, and sibling differentiation. No redundant words; information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, usage, and key parameter, and hints at return structure (board reference). Lacks explicit mention of pagination or output format. Given no output schema, slightly more detail on return shape would improve completeness, but it's still adequate for a list tool with clear annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (33%). The description explains boardId well: optional, scoping effect, and API endpoint. However, page and perPage are not elaborated beyond schema (which has no descriptions for them). The description mentions default behavior (list all without args) but no pagination details. Partial compensation but room for improvement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool's action: listing project stages. It distinguishes between full listing and board-scoped listing, and explicitly contrasts with opportunity stages, directing to list_pipelines. The verb 'list' and resource 'stages' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: use to discover stage.id for create_project/update_project, and use list_pipelines for opportunity stages. It also explains that stage names are insufficient, reinforcing the purpose. No ambiguity about when to use this tool vs. siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsARead-only
List all tags available for a given entity type (parties, opportunities, or projects). Returns each tag's id, name, and any data-tag field schema. Tags are entity-specific — a party tag is not interchangeable with an opportunity tag. Use this to discover valid tag ids before calling add_tag, or to display the tag catalogue to the user when they ask 'what tags do we use?'
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| entity | Yes | The resource type to list tags for | |
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and destructiveHint=false. Description adds behavioral detail about entity-specificity of tags, which is not in annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with no redundant information. Front-loaded with the core purpose, then usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Describes return fields (id, name, data-tag schema) and entity specificity. No output schema, so this coverage is useful. Pagination behavior is implicit but could be more explicit. Consider adding info about pagination defaults or limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 33% with only 'entity' described. Description does not add meaning for 'page' or 'perPage' parameters. While entity is reinforced, the lack of pagination explanation reduces clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists tags for specific entity types and returns id, name, and data-tag schema. It distinguishes itself from sibling tools like add_tag by explicitly mentioning its use for discovering valid tag IDs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: before calling add_tag or to display tag catalogue. Provides clear context, though does not explicitly mention when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksARead-only
List tasks in Capsule CRM. Defaults to OPEN tasks; pass status to broaden. Optionally filter to a specific owner via ownerId. Capsule does not expose a due-date filter on this endpoint — for that use filter_* tools elsewhere or iterate.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: party, opportunity, project, owner, nextTask. | |
| status | No | Defaults to OPEN when omitted. Pass COMPLETED to filter to completed tasks, or 'OPEN' explicitly. | |
| ownerId | No | Filter to tasks owned by this user ID | |
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds further behavioral context beyond annotations: the default status, optional owner narrowing, and the endpoint's missing due-date filter. It does not cover pagination behavior or response details, preventing 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences. The first sentence states the action, the second conveys defaults and filters, and the third calls out a relevant API limitation. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation, the description plus schema cover the default behavior, filtering options, pagination parameters, and a well-advertised endpoint limitation. The lack of an output schema is not a meaningful gap for this kind of listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents status and ownerId with descriptions, and the description mostly paraphrases those rather than adding new semantic meaning. page and perPage have schema defaults and constraints but no descriptive semantics, and the description does not clarify them. So it lands at the adequate baseline without fully compensating for the 60% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: listing tasks in Capsule CRM. It also establishes the default scope (OPEN tasks) and the distinct owner filtering capability, making it unambiguous next to sibling task and filter tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete when-to-use guidance: default to OPEN, pass status to broaden, and filter by owner via ownerId. It also explicitly names the limitation (no due-date filter) and tells the agent to use filter_* tools or iterate instead, which is strong alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_teamsARead-only
List all teams configured in the Capsule account. Useful as input for filter_* queries that scope by team, and for reporting. LIMITATION: returns team identity only (id, name, description, timestamps). Capsule's v2 API does not expose team↔user membership through any endpoint — GET /teams/{id}/users 404s, embed=users is silently ignored, and GET /users/{id} doesn't include a teams field. To determine whether a given user belongs to a given team, either check Capsule's web UI Team Membership page, or probe via update_project { ownerId: U, teamId: T } / batch_update_opportunity { items: [{ id: <any opp>, ownerId: U, teamId: T }] } and read the response — 422 'owner is not a member of the team' means U ∉ T. Both probe paths apply the same membership constraint server-side.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| perPage | No | Page size, max 100. Defaults to 100 for reference data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds transparency about the API's membership limitation and provides concrete probe methods, going well beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then provides usage guidance, and finally details the limitation. Every sentence adds value, and the structure is logical despite length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (list with pagination) and the critical membership limitation, the description is complete. It covers return data, usage context, and the workaround for the missing endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (perPage has description, page does not). The description adds no information about parameters, leaving users without guidance on the 'page' parameter or how to use pagination effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all teams, with specific verb and resource. It distinguishes from sibling filter_* tools by noting its utility as input for those queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (for filtering/reporting) and provides a detailed workaround for membership checking, which is a significant limitation. This gives clear guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_track_definitionsBRead-only
List workflow track definitions: reusable templates that auto-create tasks at configured intervals when applied to an opportunity or project. Each track includes nested taskDefinitions specifying what to create and when. Use this to understand what automations exist.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| perPage | No | Page size, max 100. Defaults to 100 for reference data. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to repeat that. It adds context about tracks being reusable templates with nested tasks, which is helpful but does not cover behavioral traits like pagination behavior or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main purpose, and every sentence adds value. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple schema (2 optional params, no output schema) and annotations present, the description is fairly complete but missing parameter explanations and return value structure. It covers the 'what' and 'why' but not the 'how to use' details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention the parameters (page, perPage) or their meaning. With 50% schema description coverage (perPage documented, page undocumented), the description should compensate but fails to add any semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists workflow track definitions, explaining they are reusable templates that auto-create tasks. It also hints at the contents (nested taskDefinitions). However, it does not explicitly differentiate from sibling tools like 'list_entity_tracks' or 'show_track'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by saying 'Use this to understand what automations exist.' It gives a clear context but lacks explicit guidance on when to use versus alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersARead-only
List all users in the Capsule account. Returns each user's id, username, optional first/last name, role, and party reference. Some users may have null first/last name fields (only username set) — fall back to username for display. Use this to discover user ids for owner-filtered queries against opportunities, projects, and tasks, or to map a user to their party record via user.party.id.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare safe read operation. Description adds important detail about null first/last name fields, guiding display fallback. Does not mention pagination behavior, but parameters imply pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and return fields, followed by usage advice. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Describes return fields and null handling well. Lacks pagination details, but given low complexity and pagination parameters, it is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must explain parameters, but it does not mention 'page' or 'perPage' at all. This is a significant gap for agent understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'list all users in the Capsule account' with specific verb and resource. Lists returned fields, distinguishing it from sibling tools like list_employees.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage: discover user IDs for owner-filtered queries and mapping to party records. Lacks guidance on when not to use it or alternatives, but context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_additional_partyADestructive
Remove an additional-party link between an opportunity/project and a party. The party itself is NOT deleted. Requires confirm=true. Reversible by re-adding via add_additional_party. Idempotent on retry: response is {removed: true, alreadyRemoved: false, entity, entityId, partyId} on a fresh remove or {removed: true, alreadyRemoved: true, ...} if the link was already gone (Capsule's 404 is caught and converted).
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Which entity has the additional-party links. | |
| confirm | Yes | Must be set to true. Removes the link between the entity and the additional party. The party itself is not deleted. Reversible by re-adding the link. | |
| partyId | No | ||
| entityId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true), the description adds crucial details: confirmation required, reversibility, and idempotent retry behavior with response structure. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no redundancy. Front-loaded with the main action. Every sentence adds value, including confirmation requirement, reversibility, and idempotency details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description provides response shapes. Covers idempotency and error handling (Capsule 404 to converted response). Could mention missing entity/party errors, but overall sufficient for a mutating tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (entity and confirm described, partyId/entityId not). The description does not explicitly define partyId/entityId but provides context through the tool action. Baseline score for partial coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'Remove', the resource 'additional-party link', and the scope 'between an opportunity/project and a party'. It distinguishes from sibling tools by explicitly mentioning reversibility via add_additional_party.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states 'Requires confirm=true' and notes idempotency, but does not explicitly state when not to use this tool or compare to other removal tools. The context implies use for removing a party link without deleting the party.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_party_address_by_idA
Remove one address entry from a party by its row id. Atomic and reversible — no confirm: true gate (re-add with add_party_address). Discover the id via get_party. Idempotent on retry: response is {removed: true, alreadyRemoved: false, partyId, addressId, party} on a fresh remove or {removed: true, alreadyRemoved: true, partyId, addressId} if the row was already gone.
| Name | Required | Description | Default |
|---|---|---|---|
| partyId | No | ||
| addressId | No | Capsule's id for the address row. Read it from get_party (each entry in addresses carries an id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are present (readOnlyHint=false, destructiveHint=false). The description adds value by explaining atomicity, reversibility, and idempotent behavior. It details response shapes for fresh vs. already-removed cases, which is beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey the purpose, usage, and behavior. No unnecessary words. The structure is front-loaded with the main action, followed by key details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers the essential aspects: what it does, how to use it, idempotency, and response format. Lacks explicit info on error cases or prerequisites, but overall complete for a simple removal operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: partyId lacks description, but the description implies it's the party identifier. addressId gets a detailed description in both the schema and the description, explaining how to obtain it. The description compensates for the missing schema description on partyId by context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action 'remove one address entry from a party by its row id'. The verb and resource are specific, and it distinguishes from sibling tools that remove other types of sub-entities (e.g., email, phone).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on when to use (to remove an address), how to discover the id (via get_party), and mentions lack of a confirm gate. It doesn't explicitly compare to alternatives but implies the only way to remove an address. Guidance is clear but could be more explicit about when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_party_email_address_by_idA
Remove one email-address entry from a party by its row id. Atomic and reversible — no confirm: true gate (re-add with add_party_email_address). Discover the id via get_party — each entry in the emailAddresses array carries one. Use this to replace an existing entry: remove the old id, then call add_party_email_address with the new value (any associated server-side metadata on the old row is discarded along with the row). Idempotent on retry: response is {removed: true, alreadyRemoved: false, partyId, emailAddressId, party} on a fresh remove (the updated party shape is included) or {removed: true, alreadyRemoved: true, partyId, emailAddressId} if the row was already gone (Capsule's 404 is caught).
| Name | Required | Description | Default |
|---|---|---|---|
| partyId | No | ||
| emailAddressId | No | Capsule's id for the email-address row. Read it from get_party (each entry in emailAddresses carries an id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses atomicity, reversibility, and metadata discard. Annotations are readOnlyHint:false and destructiveHint:false; description explains non-destructive nature via idempotency and re-add capability. Adds significant context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph, front-loaded with core action. Every sentence adds value, though slightly lengthy. Structure is logical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a removal tool without output schema: explains response format, idempotency, reversibility, and side effects. Covers all necessary aspects for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers emailAddressId with description; description adds context for partyId implicitly via tool name and workflow. Overall, description helps understand parameter usage despite 50% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly specifies removing one email-address entry from a party by row id, using specific verb and resource. Differentiates from sibling tools like remove_party_phone_number_by_id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit workflow: use remove to delete an existing email, then optionally add new one with add_party_email_address. Explains idempotency and response behavior, guiding when to retry.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_party_phone_number_by_idA
Remove one phone-number entry from a party by its row id. Atomic and reversible — no confirm: true gate (re-add with add_party_phone_number). Discover the id via get_party. Idempotent on retry: response is {removed: true, alreadyRemoved: false, partyId, phoneNumberId, party} on a fresh remove or {removed: true, alreadyRemoved: true, partyId, phoneNumberId} if the row was already gone.
| Name | Required | Description | Default |
|---|---|---|---|
| partyId | No | ||
| phoneNumberId | No | Capsule's id for the phone-number row. Read it from get_party (each entry in phoneNumbers carries an id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description states 'Remove' which is inherently destructive, but annotations have 'destructiveHint: false', creating a contradiction. While description explains reversibility and idempotency, the contradiction undermines trust.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Succinctly covers action, reversibility, idempotency, and response format in a few sentences. No unnecessary words; well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, description details response format for both fresh removal and already-removed cases. Tool has only 2 params, and all necessary context is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond schema: explains phoneNumberId as 'Capsule's id for the phone-number row' and tells agent to read it from get_party. Schema description coverage is 50%, but description compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Remove one phone-number entry from a party by its row id.' Specifies verb (remove), resource (phone-number entry), and method (by row id). Differentiates from sibling tools by focusing on phone numbers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance: no 'confirm: true' gate, reversible via add_party_phone_number, discover id via get_party. Does not explicitly state when not to use, but enough context for proper use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_party_website_by_idA
Remove one website entry from a party by its row id. Atomic and reversible — no confirm: true gate (re-add with add_party_website). Discover the id via get_party. Idempotent on retry: response is {removed: true, alreadyRemoved: false, partyId, websiteId, party} on a fresh remove or {removed: true, alreadyRemoved: true, partyId, websiteId} if the row was already gone.
| Name | Required | Description | Default |
|---|---|---|---|
| partyId | No | ||
| websiteId | No | Capsule's id for the website row. Read it from get_party (each entry in websites carries an id). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides detailed behavioral transparency: it states the operation is atomic and reversible, idempotent on retry, and gives the exact response format for fresh and repeated removes. Annotations (readOnlyHint: false, destructiveHint: false) are consistent with the described behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly concise, front-loading the action and providing essential details in a single paragraph. It could be slightly more compact, but it efficiently conveys necessary information without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides the response format and idempotency behavior. It covers key aspects like how to discover the id and reversibility. Missing details about error handling or required parameters are minor gaps, but overall it's fairly complete for a simple removal tool with good annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 50% of parameters with descriptions. The description adds meaning beyond the schema by clarifying that websiteId is the row id from get_party and implying partyId is the party identifier. It compensates well for the missing partyId schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool removes a website entry from a party by row id. It uses specific verbs and resources, and distinguishes from sibling tools like remove_party_address_by_id by specifying 'website' and 'by row id'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool, how to discover the required websiteId via get_party, and notes that no confirm gate is needed and re-adding is possible with add_party_website. It also explains idempotency on retry, providing clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_tag_by_idA
Detach a tag from a party, opportunity, or project. Atomic — one PUT to Capsule. Reversible — no confirm: true gate (re-attach with add_tag using the same tag name). The tagId parameter is the tag's id, readable via get_party/get_opportunity/get_project with embed='tags' (list_tags returns the same ids and also works, but reading via embed first confirms the tag is actually attached to this entity). The tag definition itself remains in the tenant for other entities that still share it. Idempotent on retry: response is {removed: true, alreadyRemoved: false, entity, entityId, tagId, ...<updated entity>} on a fresh detach or {removed: true, alreadyRemoved: true, entity, entityId, tagId} if the tag was already detached (Capsule's 422 'tag not found to delete' is caught and converted).
| Name | Required | Description | Default |
|---|---|---|---|
| tagId | No | The tag's id. Read via get_party / get_opportunity / get_project with embed='tags' — each tag entry in the response has an `id` field. list_tags returns the same ids for the same tags, so either source works; reading via embed first is the safer pattern because it confirms the tag is actually attached to this entity before you try to remove it (otherwise Capsule returns 422 'tag not found to delete'). Removing detaches the tag from this entity only; the tag definition itself persists in the tenant for other entities that share it. | |
| entity | Yes | Which entity type. | |
| entityId | No | The party/opportunity/project id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only and non-destructive, and the description adds crucial behavioral details: atomic operation (one PUT), reversibility (no confirm gate), idempotency on retry, and the response structure for fresh vs. already-detached cases. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and every sentence serves a purpose. It starts with the primary action, then covers atomicity, reversibility, parameter details, persistence, and response. There is no redundant or extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully explains the response structure. It covers all necessary context: how to get parameters, behavior on retry, persistence of tag definition, and the reversible nature. This is thorough for a removal tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions, so baseline is 3. The description adds value for tagId by explaining how to obtain it (via embed or list_tags) and the safer pattern to confirm attachment, elevating it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool detaches a tag from a specific entity (party, opportunity, or project). It distinguishes from sibling tools like add_tag (for attaching) and delete_tag_definition (for permanent deletion), and specifies the exact entity types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly guides when to use this tool: to detach a tag from an entity, noting it is reversible and idempotent. It advises to first confirm tag attachment via embed='tags' and provides the safer pattern. It also explains that the tag definition persists, implying not to use this for permanent deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_trackADestructive
Remove a track instance from its entity. Capsule also deletes the auto-tasks the track created when it was applied; copy any task details you need before removing the track. Requires confirm=true. Idempotent on retry: response is {removed: true, alreadyRemoved: false, trackId} on a fresh remove or {removed: true, alreadyRemoved: true, trackId} if the track was already gone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| confirm | Yes | Must be set to true. Removes the track instance from its entity. **Capsule also deletes the auto-tasks the track created when it was applied** — they go with the track and become unreachable (404 on GET /tasks/{id}, gone from list_tasks on the parent entity). If you need any of those tasks to outlive the track, copy their content into fresh tasks (or use the web UI) before calling remove_track. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals destructive behavior (deletes auto-tasks), idempotency on retry, and the response format. This adds significant context beyond the annotations which only indicate destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with no redundant sentences. It front-loads the main action and provides essential details efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with no output schema, the description covers the action, side effects (auto-task deletion), idempotency, and response structure. It is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, with the confirm parameter described in schema. The description reinforces confirm=true and adds idempotency details, but does not explain the id parameter. It adds some value but does not fully compensate for missing id description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Remove a track instance from its entity.' It uses a specific verb and resource, and is distinct from sibling tools like 'update_track' or 'apply_track'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly requires confirm=true, warns about auto-task deletion, and advises copying needed details. It does not compare directly to alternatives but provides clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_saved_filterARead-only
Run a saved filter by id and return its results, paginated. Unlike filter_parties / filter_opportunities / filter_projects (which use the ad-hoc filter endpoint and CANNOT sort), saved filters DO support sort — the orderBy is configured in Capsule's web UI when the filter is created. So 'most recent X by Y' questions are answerable in one call IF a saved filter exists; use list_saved_filters first to find one.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | The saved filter id (from list_saved_filters). | |
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens depend on entity — parties: tags, fields, organisation, missingImportantFields; opportunities: tags, fields, party, milestone, missingImportantFields; projects: tags, fields, party, opportunity, missingImportantFields. | |
| entity | Yes | Which entity type the filter operates over. | |
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful behavioral context beyond that: pagination behavior, support for sorting, and the caveat that orderBy is configured externally in Capsule's web UI. This meaningfully informs the agent about what the tool can and cannot do.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core operation, followed by a targeted explanation of the saved-filter versus ad-hoc-filter difference. Every clause earns its place, and it remains succinct despite covering a subtle sorting distinction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It tells the agent what the tool does, when to use it, why it matters (sort support), and how to find the required id (via list_saved_filters). The embed options and entity enum are supplied in the schema, and no output schema exists, so the description provides complete enough context for the agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers id, entity, and embed, but page and perPage have no descriptions. The description only mentions 'paginated' broadly, without explaining pagination parameter ranges or semantics. With 60% schema description coverage, the description contributes some contextual value but does not fully compensate for the missing perPage/semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and target: 'Run a saved filter by id and return its results, paginated.' It also immediately distinguishes this from filter_parties / filter_opportunities / filter_projects, making the tool's exact role obvious to an agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when the tool is preferable: when sorting is needed and a saved filter exists. It names the alternatives and why they fail ('CANNOT sort'), and gives the clear prerequisite call: 'use list_saved_filters first to find one.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_opportunitiesARead-only
Free-text search or list opportunities in Capsule CRM. Returns results in Capsule's default order (no sort parameter is supported here). For structured queries — 'most recent', 'won this quarter', 'in pipeline X at milestone Y' — use filter_opportunities instead.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text search query | |
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, party, milestone, missingImportantFields. | |
| since | No | Only records CHANGED on/after this ISO-8601 timestamp (incremental sync; pairs with the list_deleted_* audit tools). Wire-verified on the plain list endpoints. Ignored by Capsule when q triggers the /search sub-resource — omit q when using since. | |
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and destructiveHint annotations already cover the safety profile. The description adds the useful behavioral constraint that results are returned in Capsule's default order and no sort parameter is supported. However, it does not describe response format or pagination behavior, so the added transparency is moderate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler: first states the action, then the ordering constraint, then the alternative for structured queries. Every sentence earns its place and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, annotations for safety, and no output schema, the description covers tool selection and a key behavioral constraint. The main missing element is an explicit return-shape description, but for a search/list tool this is loosely inferable. The schema covers the subtle 'since' behavior, so the overall definition is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60%; q, embed, and since have descriptions, but page and perPage do not. The tool description does not explain the missing pagination parameters, though it does imply q is optional via 'search or list' and communicates that sorting is not available. It partially compensates for schema gaps but does not fully carry the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb-resource pair: 'Free-text search or list opportunities in Capsule CRM.' It also distinguishes itself from filter_opportunities for structured queries, so an agent can tell which tool is appropriate 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative tool and the conditions that select it: 'For structured queries — most recent, won this quarter, in pipeline X at milestone Y — use filter_opportunities instead.' This leaves no ambiguity about when to use this tool versus its sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_partiesARead-only
Free-text search or list people and organisations in Capsule CRM. Returns results in Capsule's default order (no sort parameter is supported here). For structured queries — 'most recent', 'tagged X', 'added this month' — use filter_parties instead.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text search query | |
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, organisation, missingImportantFields. | |
| since | No | Only records CHANGED on/after this ISO-8601 timestamp (incremental sync; pairs with the list_deleted_* audit tools). Wire-verified on the plain list endpoints. Ignored by Capsule when q triggers the /search sub-resource — omit q when using since. | |
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description only needs to add behavior beyond safety. It adds the key behavioral fact that results come in Capsule's default order and no sort parameter is supported, which is not visible in the schema or annotations. It doesn't overpromise details like result formatting, but the added ordering note is genuine behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler. The first sentence states the core action and resource; the second adds the caveat and the alternative. This is appropriately front-loaded and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only search/list tool, the combination of the description and the input schema covers what the tool does, when to use the sibling filter_parties, the supported ordering behavior, and pagination parameters. There is no output schema, so an agent does not get a result shape, but the description's 'returns results' plus the tool's plain object domain is sufficient for selection and invocation. Minor gaps like exact result fields exist but are not critical here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents q, embed, and since with meaningful descriptions, so the description only clarifies that q can be omitted to list all parties ('search or list') and that sorting is not an available parameter. With moderate schema coverage (60%), the description contributes a little but leaves page/perPage and the interaction between q and since to the schema. This is adequate but does not reach significant added param semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('search or list'), names the resource ('people and organisations in Capsule CRM'), and immediately clarifies its scope. It also distinguishes itself from filter_parties by saying structured queries belong there, so no sibling ambiguity remains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when not to use this tool: structured queries like 'most recent', 'tagged X', or 'added this month' should go to filter_parties instead. It also states the sorting limitation, which helps an agent decide whether this tool can satisfy a request. This is explicit routing guidance rather than implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_projectsARead-only
Free-text search projects in Capsule CRM (matches name and description). Returns results in Capsule's default order (no sort parameter is supported here). Omit q to list all projects. For structured queries — 'most recent project', 'projects opened this month', 'projects tagged X' — use filter_projects instead.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text search query | |
| page | No | ||
| embed | No | Comma-separated embeds. Valid tokens: tags, fields, party, opportunity, missingImportantFields. | |
| since | No | Only records CHANGED on/after this ISO-8601 timestamp (incremental sync; pairs with the list_deleted_* audit tools). Wire-verified on the plain list endpoints. Ignored by Capsule when q triggers the /search sub-resource — omit q when using since. | |
| perPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds valuable behavioral context: results come in Capsule's default order (no sort parameter), omitting q lists all projects, and the since parameter is ignored when q triggers the /search sub-resource. This goes beyond the schema and provides actionable knowledge. A 4 is appropriate because it doesn't describe edge cases like empty results or response structure, but it does disclose the key behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: it leads with the core purpose, then adds the order caveat, then the q-omission behavior, and finally the routing to filter_projects. Every sentence provides distinct value with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with 5 parameters, 0 required, and no output schema, this description covers all essential aspects: what it searches, how to list all, how times and embeds work, and when to use the alternative. Pagination is handled by schema defaults and constraints. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, so q, embed, and since already have descriptions. The description adds further meaning: q is a free-text search that also covers the case of omitting it (list all), and since explicitly warns about its interaction with q. These clarifications help the agent understand parameter semantics beyond the schema. The remaining parameters (page, perPage) are self-explanatory with defaults and constraints in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Free-text search') and resource ('projects in Capsule CRM'), specifies that it matches name and description, and explicitly differentiates from filter_projects by naming the alternative and the condition for using it. This makes the tool's purpose unambiguous even 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear guidance on when to use this tool (free-text search) vs filter_projects (structured queries like 'most recent project'), and notes the special behavior of omitting q to list all projects. It also warns about the since parameter interaction, which is critical for correct usage. No inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_entryA
Edit an existing timeline entry — typically a note. Provide the entry id plus the fields you want to change (content, subject). Only the fields you supply are modified; other fields keep their current values. Cannot change the entry's type. Use this to correct or extend a note added previously.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Entry ID to update | |
| content | No | New body text for the entry. For notes, this is the markdown content; for emails, the body. Provide only if you want to change it. | |
| subject | No | New subject line. Mostly meaningful on email-type entries; on plain notes Capsule accepts the call (HTTP 200) but **does not store the subject and does not advance `updatedAt`** — a true no-op for inapplicable fields. `entryAt` (when the note was authored) is preserved across edits; `updatedAt` advances only when an applicable field actually changes. To sort/filter by 'when did this happen', use `entryAt`; for 'last touched', use `updatedAt`. | |
| removeAttachmentIds | No | Attachment ids to detach from this entry (ids from the entry's attachments array; wire shape {id, _delete: true}, verified live — removal returns the entry with the attachment gone). Other attachments are untouched. Capsule rejects removing the LAST attachment from an entry that has no content. To ADD an attachment to an existing entry, use upload_attachment with entryId. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint=false and destructiveHint=false, the description adds meaningful behavioral context: partial updates only, unchanged fields preserved, and entry type immutable. The schema adds even more behavioral nuance (subject no-op on notes, updatedAt semantics, last-attachment rejection), but that lives in structured fields rather than the main description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: the action and resource, the update semantics, and the intended use. No filler, and the most important constraints are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the definition plus schema conveys the required id, updatable fields, partial-update behavior, and attachment-removal constraints. It does not describe the return value or auth scopes, but the parameter and behavior coverage is strong enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema already documents id, content, subject, and removeAttachmentIds well. The tool description lists content/subject as updatable fields and states the partial-update rule, but it adds little over the already-rich parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific operation (edit an existing timeline entry) with the affected resource and scope (fields content, subject, attachment removals). It distinguishes itself from add_note/create/delete siblings by framing it as correcting or extending a previously added note. The 'cannot change the entry's type' note removes ambiguity about type-changing behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use context: 'Use this to correct or extend a note added previously.' It states limitations (cannot change type) and, via the schema's removeAttachmentIds note, points to upload_attachment for adding attachments. There are no explicit exclusions naming alternatives like add_note or delete_entry, so it stops short of a fully explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_opportunityA
Update fields on an existing opportunity, including the parent-reference field partyId to reassign the opp to a different primary party. ownerId and teamId both accept null to unassign (verified empirically in v1.6.5 wire-trace — brings update_opportunity into parity with update_party and update_project). The combination {ownerId: null, teamId: <id>} puts an opportunity into 'team-owned, no specific user' state, matching the pattern available on parties and projects. Only the fields you provide are changed. Closed (Won/Lost) opportunities ARE editable — Capsule does not enforce closed-record immutability, so value, description, etc. can be changed on a Won opp without warning. If the workflow needs historical revenue numbers to be stable, enforce that caller-side. Capsule requires every opportunity to have a party — passing partyId: null is rejected with 422 'party is required' (Unlike update_task.partyId which IS nullable — tasks can be orphaned in Capsule's model).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| name | No | ||
| value | No | ||
| fields | No | Set custom field values on this record. PARTIAL UPDATE: only the definitions you list are touched; any field NOT in this array is left unchanged. Discover available definitions via list_custom_fields; read current values via get_opportunity with embed='fields'. | |
| teamId | No | Reassign team: pass a team ID (discover via list_teams) to set, or `null` to unassign. Capsule preserves the existing owner across a team change (server-side), so `update_opportunity { teamId }` alone is safe — the owner is carried through. Owner must be a member of the new team or Capsule returns 422 'owner is not a member of the team'. Independent from `ownerId` — setting `teamId` does NOT clear the owner. | |
| ownerId | No | Reassign owner: pass a user ID to set, or `null` to unassign (verified empirically in v1.6.5 wire-trace — Capsule accepts `owner: null` on PUT /opportunities/:id, mirroring the v1.6.4 finding on /parties; brings update_opportunity into parity with update_party and update_project). When you supply `ownerId` and omit `teamId`, the connector fetches the opportunity's current team and includes it in the PUT body to preserve it across the owner change. Without this defensive read, Capsule's PUT would clear the existing team (see NOTES-ON-CAPSULE-API.md §27 — same asymmetric semantic as project updates). Supply `teamId` explicitly on the same call to change the team instead. Combine `ownerId: null` + `teamId: <T>` in one call to transfer an opportunity to team-ownership with no specific user (verified empirically in v1.6.5; the owner-clears-team semantic doesn't fire when owner is being cleared to null). | |
| partyId | No | Reassign the opportunity to a different primary party. Capsule requires every opportunity to have a party — passing `null` is rejected with 422 'party is required' (use Capsule's web UI if you need to dissolve the link entirely). Discover ids via search_parties / filter_parties. No defensive read-modify-write needed: this connector verified empirically (v1.6.3 wire-trace) that `party` is a standalone PUT field on /opportunities and does not interact with the asymmetric owner/team semantic from NOTES-ON-CAPSULE-API.md §27. NOTE: parent-ref nullability differs by entity — `update_task.partyId` IS nullable (orphan task), but opportunities and projects must always have a parent party. The same applies to `update_project.partyId`. | |
| duration | No | How many durationBasis units the contract runs (e.g. 12 with MONTH). Must be null/omitted when durationBasis is FIXED. Wire-verified: POST stores it, PUT changes it, and PUT duration:null with durationBasis:FIXED clears it. | |
| description | No | ||
| milestoneId | No | Move the opportunity to this milestone. Side effects depend on the target: closing milestones (Won/Lost) auto-set `closedOn` to today and `probability` to the milestone default (100/0), preserving `lastOpenMilestone` as the previous open stage; moving back to an open milestone clears `closedOn` and re-applies the milestone's default probability (Won/Lost is reversible — no separate reopen tool). WARNING: Capsule does NOT validate that the new milestone belongs to the opportunity's current pipeline. Passing a milestoneId from a different pipeline silently relocates the opportunity across pipelines, and `lastOpenMilestone` may then reference a milestone in the previous pipeline. Verify against the opportunity's current pipeline (read the opp first, list its pipeline's milestones via list_milestones) before passing a cross-pipeline id. NOTE: changing `milestoneId` can fire **pipeline / milestone-reached automations** that mutate `owner` / `team` on the destination milestone (same shape as `create_opportunity` — see its `milestoneId` description for the owner-clearing automation caveat). If a milestone-change-and-owner-set in the same call lands with `owner: null`, follow up with a second `update_opportunity` (or `batch_update_opportunity`) carrying both `ownerId` and `teamId` — milestone-reached triggers only fire on the transition, so a subsequent PUT preserves your values. | |
| probability | No | Win probability 0–100. On an open milestone this overrides the milestone's default probability. CANNOT be set in the same call as a closing milestone (Won/Lost) — Capsule processes the milestone change first, the opportunity becomes closed, then the probability update is rejected as edit-on-closed-opp with 422 'probability can be updated only for open opportunity'. To close an opportunity, leave probability out of the call: it auto-snaps to 100% (Won) or 0% (Lost). | |
| lostReasonId | No | Reason the opportunity was lost. Only meaningful when transitioning to a Lost milestone — Capsule silently drops it for other milestones. Without this set, a connector-driven Lost-close leaves `lostReason: null`. Discover IDs via list_lost_reasons. | |
| durationBasis | No | Time unit of the opportunity's contract duration. FIXED means a one-off (no recurring duration) — `duration` must be omitted/null with FIXED (Capsule 422s otherwise; wire-verified). Recurring deals: pair with `duration`, e.g. durationBasis MONTH + duration 12. | |
| expectedCloseOn | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only set readOnlyHint=false and destructiveHint=false, which are self-evident for an update tool. The description carries the full behavioral burden and exceeds it: closed-record editability, null semantics for owner/team, the defensive read-modify-write for owner changes, milestone automations that can mutate owner/team, and empirical wire-trace verifications. No annotation contradiction; the description enriches the sparse annotation context substantially.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries operational information — no filler. It front-loads the core update capability, then systematically addresses edge cases. While it could be considered verbose, the density of the 14-parameter surface justifies the length. Minor deduction for a slight ramble in the fields.value sub-description, but overall well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter tool with no output schema and nested objects, the description is exhaustively complete. It covers nullability, side effects, cross-entity differences, automations, API quirks, and empirical verification references. An agent would have everything needed to call this correctly in any scenario.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 64%, and the description compensates richly for parameters with complex semantics. For example, partyId explains null rejection and cross-entity nullability differences; ownerId details preservation logic and team-clear risk; milestoneId covers cross-pipeline relocation and automation side effects; probability clarifies the restriction when closing. Each parameter's description goes far beyond the schema's type and constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Update fields on an existing opportunity' and immediately names the primary fields (partyId, ownerId, teamId) and the reassignment semantics. It differentiates from siblings by noting parity with update_party/update_project and explicitly contrasting update_task.partyId nullability. The verb-resource-object relationship is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: reassign party via partyId, unassign owner/team with null, closed opportunities are editable (with a caveat to enforce stability caller-side). It also states when NOT to use — partyId: null is rejected and probability cannot be set alongside a closing milestone. The description names alternatives (e.g., use web UI for dissolving party link) and dependencies (e.g., read current value via embed='fields').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_partyA
Update top-level fields on an existing party (about, firstName/lastName/name/title/jobTitle, ownerId, teamId, organisationId). ownerId and teamId both accept null to unassign — the combination {ownerId: null, teamId: <id>} puts a party into 'team-owned, no specific user' state (the common pattern when transferring ownership to a team after a user departs). For PERSON parties, organisationId links to an organisation or null unlinks; for ORGANISATION parties Capsule silently ignores organisationId. Only the fields you provide are changed. Child arrays (emailAddresses / phoneNumbers / addresses / websites) on this tool are APPEND-ONLY: items are merged into the existing list, not replaced. For surgical changes — replacing one email, removing one phone number, fixing the type on one address — use the dedicated atomic tools: add_party_email_address / remove_party_email_address_by_id (and the phone/address/website equivalents).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| name | No | ||
| about | No | ||
| title | No | ||
| fields | No | Set custom field values on this record. PARTIAL UPDATE: only the definitions you list are touched; any field NOT in this array is left unchanged. Discover available definitions via list_custom_fields; read current values via get_party with embed='fields'. | |
| teamId | No | Assign to team ID (discover via list_teams). Pass a team ID to set, or `null` to unassign. Capsule enforces the owner∈team membership constraint — passing a team the current owner doesn't belong to returns 422 'owner is not a member of the team'. Combine `ownerId: null` + `teamId: <T>` in one call to transfer a party to team-ownership with no specific user (verified empirically in v1.6.4 wire-trace; the membership rule doesn't fire when owner is null). | |
| ownerId | No | Pass a user ID to set, or `null` to unassign (verified empirically in v1.6.4 wire-trace — Capsule accepts `owner: null` on PUT /parties/:id for both persons and organisations). Discover IDs via list_users. WARNING: Capsule's PUT on parties has the same asymmetric owner/team semantic documented in NOTES-ON-CAPSULE-API.md §27 for project updates — setting `owner` while omitting `team` is plausibly clearing-prone. When you supply `ownerId` and omit `teamId`, this connector reads the party's current team and includes it in the PUT body to preserve it across the owner change. Supply `teamId` explicitly to change it. | |
| jobTitle | No | ||
| lastName | No | ||
| websites | No | APPEND-ONLY: items are merged into the existing list, never replaced. For atomic add/remove/replace use add_party_website and remove_party_website_by_id. | |
| addresses | No | APPEND-ONLY: items are merged into the existing list, never replaced. For atomic add/remove/replace use add_party_address and remove_party_address_by_id. The `country` field is mapped through Capsule's country dictionary — see `add_party_address.country` for the dictionary edges (small canonical-English-name list; inputs not in the dictionary are REJECTED with 422, not silently dropped). | |
| firstName | No | ||
| phoneNumbers | No | APPEND-ONLY: items are merged into the existing list, never replaced. For atomic add/remove/replace use add_party_phone_number and remove_party_phone_number_by_id. | |
| emailAddresses | No | APPEND-ONLY: items are merged into the existing list, never replaced. For atomic add/remove/replace use add_party_email_address and remove_party_email_address_by_id. Passing `[]` here is a silent no-op (does not clear the list and does not advance updatedAt). | |
| organisationId | No | For PERSON parties: link to an organisation by id, or `null` to unlink (the person becomes an orphan / standalone record). Discover org IDs via search_parties / filter_parties with type=organisation. For ORGANISATION parties: silently ignored by Capsule's API — organisations don't have a parent organisation in the data model. Empirically verified in v1.6.3 wire-trace; no client-side type guard since the no-op is harmless. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses important behavioral traits: partial update, append-only for arrays, null handling for ownerId/teamId, country validation, and quirks with custom field values and updatedAt.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections, but lengthy due to thorough documentation. Front-loaded with purpose and key behaviors, though some details could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Extremely complete given the complexity: covers 15 parameters, no output schema, provides edge cases, references related tools, and explains potential pitfalls comprehensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds substantial meaning beyond schema: explains ownerId/teamId combination, organisationId semantics, custom field value handling with examples, country dictionary, and side effects like updatedAt bumping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it updates top-level fields on an existing party, lists specific fields, and distinguishes from sibling tools like add_party_email_address for surgical changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use this tool (updating top-level fields) and when to use dedicated atomic tools (for surgical changes on child arrays). Also documents append-only behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_projectA
Update fields on an existing project, including the parent-reference field partyId to reassign the project to a different primary party. ownerId, teamId, and stageId all accept null to unassign (the latter removes the project from all stages — verified empirically in v1.6.5 wire-trace). Constraint: a project must always have at least one of {owner, team} set, so teamId: null on a project with no owner returns 422. Only the fields you provide are changed. Use status='CLOSED' to close a project. CLOSED projects remain fully editable — Capsule does not enforce closed-record immutability. Stage moves and description edits on a CLOSED project are accepted without warning. Capsule requires every project to have a party — passing partyId: null is rejected with 422 'party is required' (Unlike update_task.partyId which IS nullable — tasks can be orphaned in Capsule's model).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| name | No | ||
| fields | No | Set custom field values on this record. PARTIAL UPDATE: only the definitions you list are touched; any field NOT in this array is left unchanged. Discover available definitions via list_custom_fields; read current values via get_project with embed='fields'. Project-specific: setting a field whose definition lives under a 'data tag' populates the row's internal tagId but does NOT auto-add the data tag to the project's tags array — use add_tag explicitly if you want it visible via embed=tags. | |
| status | No | ||
| teamId | No | Reassign team: pass a team ID (discover via list_teams) to set, or `null` to unassign. Capsule preserves the existing owner across a team change (server-side), so `update_project { teamId }` alone is safe — the owner is carried through. Owner must be a member of the new team or Capsule returns 422 'owner is not a member of the team'. A project must always have at least one of {owner, team} set — `teamId: null` on a project whose owner is already null returns 422 'owner or team is required'. | |
| ownerId | No | Reassign owner: pass a user ID to set, or `null` to unassign (matches the 'Unassign' option in Capsule's web UI). When you supply `ownerId` and omit `teamId` and/or `stageId`, the connector fetches the project's current omitted fields and includes them in the PUT body — this preserves them across the owner change (without it, Capsule's PUT would clear team; stage carry is defensive against the symmetric clear). Supply `teamId` and/or `stageId` explicitly on the same call to change them instead. `teamId: null` clears the team as part of an owner change. Constraints (Capsule enforces, 422 on violation): owner must be a member of the team if both are set; a project must always have at least one of {owner, team} set (cannot clear both). | |
| partyId | No | Reassign the project to a different primary party. Capsule requires every project to have a party — passing `null` is rejected with 422 'party is required' (verified empirically in v1.6.3 wire-trace). Discover ids via search_parties / filter_parties. NOTE: parent-ref nullability differs by entity — `update_task.partyId` IS nullable (orphan task), but opportunities and projects must always have a parent party. The same applies to `update_opportunity.partyId`. | |
| stageId | No | Move the project to this stage (board column), or `null` to remove from all stages (verified empirically in v1.6.5 wire-trace — Capsule accepts `stage: null` on project update and the project no longer appears on any board). Discover IDs via list_stages. Owner and team are preserved across stage-only updates (Capsule's PUT semantic). WARNING (cross-board): Capsule does NOT validate that the new stage belongs to the project's current board — passing a stageId from a different board silently relocates the project across boards. Team and other board-derived defaults are NOT updated to match the new board. Verify against the project's current board (read the project first, list its board's stages) before passing a cross-board id. | |
| startOn | No | Set the project start date (YYYY-MM-DD), or `null` to clear it. Verified empirically (v2.0.1 wire probe): PUT accepts both the set and the null-clear. `undefined` leaves the field untouched. | |
| description | No | ||
| expectedCloseOn | No | YYYY-MM-DD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint and destructiveHint both false, annotations provide minimal insight. The description compensates extensively, detailing constraint violations (422 on null partyId), Boolean field quirks (two-state, tri-state not possible), stage cross-board behavior, and parameter interactions (owner/team preservation). This goes well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured. The first sentence states the core purpose, followed by parameter-specific details. Every sentence provides useful information for a complex tool with 11 parameters. No unnecessary repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, no output schema), the description covers many edge cases and behavioral notes. However, it omits the return value (presumably the updated project object) and does not explain the response format. For a mutation tool, this is a minor gap. Also, it could mention pagination or rate limits, but those are not expected for a single update.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 64%, meaning some parameters lack schema descriptions. The description adds critical semantics: for fields, it explains value types, null handling, and BOOLEAN quirks; for teamId, ownerId, and stageId, it details reassignment constraints and side-effects. This adds meaning that the schema alone does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool updates fields on an existing project, including the parent-reference field. It specifies the verb 'Update' and the resource 'project', providing a precise purpose. This distinguishes it from sibling tools like create_project or delete_project, though it does not explicitly contrast with batch_update_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no explicit guidance on when to use this tool versus its siblings (e.g., batch_update_project, update_party). It provides constraints and detailed parameter behavior, which indirectly informs usage, but does not state alternatives or exclusions. For example, it does not say 'use this for single project updates'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskA
Update fields on an existing task: description, dueOn, dueTime, detail, status (OPEN or COMPLETED), ownerId, and the parent-reference fields partyId, opportunityId, projectId. Pass a parent id to re-link the task, or null on a parent field to orphan/unlink it; at most one parent id may be set in a single call, though null+id swaps are allowed. Only the fields you provide are changed. To mark a task done, prefer the dedicated complete_task tool — it's idempotent (a no-op success on an already-completed task) and semantically clearer than update_task status=COMPLETED. Capsule rejects directly setting status=PENDING (which exists only internally for track-driven tasks); use OPEN or COMPLETED. Completed tasks remain fully editable — Capsule does not enforce closed-record immutability.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| dueOn | No | YYYY-MM-DD | |
| detail | No | ||
| status | No | Set to OPEN or COMPLETED. (PENDING exists internally for track-driven tasks but cannot be set directly via this tool — Capsule rejects it.) Setting status: OPEN on an already-open task is a true no-op (does not advance updatedAt). | |
| dueTime | No | HH:MM in user's timezone | |
| ownerId | No | Reassign owner to user ID. Once set, this connector cannot clear an owner back to null — use Capsule's web UI for that. | |
| partyId | No | Re-link the task to a party by id, or `null` to orphan it. Mutually exclusive with `opportunityId` / `projectId` — Capsule enforces 'task can be related to at most one entity' server-side (422 if two parent-refs are set at once, verified in v1.6.3 wire-trace). To swap parent type atomically, pass the old one as `null` and the new one as an id in the same call. NOTE: orphaning is unique to tasks — `update_opportunity.partyId` and `update_project.partyId` are NOT nullable (Capsule rejects with 422 'party is required'). Tasks are the only entity in Capsule's data model that can exist without any parent. | |
| projectId | No | Re-link the task to a project by id, or `null` to orphan it. Mutually exclusive with `partyId` / `opportunityId` — see `partyId` for the XOR semantic. | |
| description | No | ||
| opportunityId | No | Re-link the task to an opportunity by id, or `null` to orphan it. Mutually exclusive with `partyId` / `projectId` — see `partyId` for the XOR semantic. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses nuanced behaviors beyond the annotations: partial updates (only provided fields are changed), the no-op effect of setting OPEN on an already-open task, the inability to clear ownerId back to null, the atomic swap of parent references, and the unique orphaning capability for tasks. It also notes that completed tasks remain editable. This is comprehensive behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured, starting with the primary action and then systematically covering each special case. While longer than minimal, every sentence adds necessary detail for a complex tool with 10 parameters. A slight trim could improve conciseness, but it remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 parameters, mutex constraints, state-dependent behavior), the description covers all essential aspects: update semantics, status handling, parent references, owner limitations, and post-update behavior. No output schema exists, so return values aren't expected. The description is fully adequate for correct agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 70% schema coverage, the description adds significant meaning to parameters. It elaborates on parent field XOR semantics, the nullability and orphaning details, and the limitation on ownerId. It also clarifies the enum values for status and the rejection of PENDING. This goes well beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Update fields on an existing task', clearly stating the verb and resource. It lists the specific fields that can be updated, distinguishing it from sibling tools like `complete_task` and `delete_task`. The purpose is unambiguous and precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to 'prefer the dedicated complete_task tool' for marking a task done, explaining why (idempotent, semantically clearer). It also warns that setting status=PENDING is rejected, and clarifies the XOR constraint on parent references. This provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_trackA
Update a track instance. Capsule's PUT semantics are partial — provide only the fields you want to change in fields. Common: { complete: true } to mark a track completed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| fields | Yes | Object of fields to update on the track. Capsule's PUT semantics are partial — only the fields you provide are changed. Common: { complete: true } to mark a track completed. Capsule rejects unknown keys; consult Capsule's docs for the full updatable set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only and non-destructive, and the description adds useful behavioral detail about partial PUT semantics, which the agent needs to know for correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, and every word adds value. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the basic usage is clear, the description omits return value or behavior (e.g., what happens on success/failure). Given no output schema, it could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds context for the 'fields' parameter (partial update, common use), but does not describe the 'id' parameter. Schema coverage is 50%, and the description partially compensates for 'fields' but not 'id'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update a track instance' with a specific verb and resource. It also mentions partial update semantics, which distinguishes it from create or delete tools, though it does not explicitly differentiate from sibling tools like 'apply_track'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the partial update approach and gives a common use case, but lacks explicit guidance on when not to use this tool or alternatives (e.g., 'apply_track' for initial application).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_attachmentC
Upload a file as a new note attachment, linked to a party, opportunity, or project. Provide the file as base64-encoded dataBase64 along with filename and contentType (MIME). Also provide exactly one of partyId / opportunityId / projectId to anchor the note. Optionally pass content to set the note body (defaults to '[attachment]'). Two-step orchestration server-side: bytes upload → token → note creation. Adding to an existing entry is not supported.
| Name | Required | Description | Default |
|---|---|---|---|
| content | No | Body text for the note that will hold the attachment. Defaults to '[attachment]' if omitted. | |
| entryId | No | ATTACH TO AN EXISTING ENTRY instead of creating a new note: the id of the note/email entry to attach the file to (wire: PUT /entries/{id} with an upload token; verified live). Mutually exclusive with partyId/opportunityId/projectId and content — when entryId is set, no new entry is created. | |
| partyId | No | Link the new note to a party (mutually exclusive with opportunityId / projectId). | |
| filename | Yes | Filename Capsule should record (e.g. 'contract.pdf'). Capsule does NOT validate consistency between filename, contentType, and the actual bytes — a typo in either is accepted and the file is stored as labelled. | |
| projectId | No | ||
| dataBase64 | Yes | File contents, base64-encoded. Decoded server-side and uploaded as the request body. PRACTICAL LIMIT: the base64 must be produced inline as tool-call output, so uploads driven by an LLM are only viable for small files (a few tens of KB) — a 500 KB file is ~660K characters, far beyond a chat model's output budget. Do not attempt to inline large files; tell the user the file is too large to route through the model. The 25 MB maximum (Capsule's documented limit) applies to programmatic MCP clients that construct the call directly; the connector rejects oversized base64 before uploading. | |
| contentType | Yes | MIME type of the file (e.g. 'application/pdf', 'image/png', 'text/plain'). Trusted by Capsule verbatim; not cross-checked against `filename` or the actual bytes. | |
| opportunityId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavior beyond annotations, including the server-side two-step orchestration (bytes upload → token → note creation) and the default note body. But it also makes a false behavioral claim about existing-entry attachment being unsupported, and the sparse annotations leave the description with the burden of accurately describing mutation behavior. This undermines trust despite the useful detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded, and generally efficient, with no redundant background or fluff. It does contain one misleading sentence about existing-entry attachment, which does not earn its place, but the overall structure is clear and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no output schema, the description covers the new-note mode in reasonable detail but omits the entire existing-entry attachment mode documented in the schema. It also does not describe what the tool returns after the two-step orchestration. The contradiction with entryId is a significant completeness gap for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so the schema already explains most parameters, and the description repeats dataBase64, filename, contentType, and content without adding much new meaning. Worse, it asserts a mutually exclusive constraint ('exactly one of partyId / opportunityId / projectId') that ignores the schema's entryId option, and it omits entryId entirely. This is a negative contribution rather than a compensating one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence clearly states a specific action: uploading a file as a new note attachment linked to a party, opportunity, or project, which helps distinguish it from add_note and get_attachment. However, the description then claims 'Adding to an existing entry is not supported,' directly contradicting the schema's entryId parameter, which explicitly supports attaching to an existing entry. This makes the stated purpose incomplete and partly misleading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit invocation steps: pass dataBase64, filename, contentType, exactly one of partyId/opportunityId/projectId, and optionally content. It does not discuss when to prefer upload_attachment over sibling tools like add_note or update_entry, and the 'exactly one' and 'not supported' statements conflict with the schema's entryId path. The guidance is useful for the main mode but incorrect for a supported alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose with detailed descriptions that explicitly state when to use which. Overlapping verbs like search vs filter are well-differentiated; batch variants are separate from single operations. No ambiguity between tools.
All tools follow a consistent verb_noun pattern (e.g., create_opportunity, add_tag, list_projects). Longer names like remove_party_email_address_by_id maintain clear structure. Only minor variation between singular/plural for list vs get is acceptable.
86 tools is very high, reflecting a granular API surface. While each tool serves a specific function (including batch variants and individual field operations), the count feels excessive for typical MCP usage. Some tools could be consolidated without losing clarity.
Covers most CRUD operations for parties, opportunities, projects, tasks, tags, timelines, tracks, attachments, users, custom fields, and more. Minor gaps: no batch delete tools, and some operations (e.g., merging parties) are absent. Overall, the surface is very thorough for the CRM domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Personal CRM for Claude. Contacts live as plain-text files in your own Google Drive.
Your Aurentia workspace — projects, CRM, tasks, deliverables — in Claude, Cursor or any MCP client.
Your professional network in Claude — search contacts, log notes, and send warm intros.
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
Related MCP Servers
- AlicenseAqualityBmaintenanceLoomio tools for Claude. Local install via npx, org-wide via Custom Connectors. Read-only mode supported.1215Apache 2.0
- AlicenseBqualityFmaintenanceEnables natural language interaction with Pipedrive CRM via Claude Code, allowing users to manage deals, contacts, activities, and more through conversational commands.2611MIT
- FlicenseNot gradedqualityDmaintenanceEnables querying and managing a CRM database through natural language conversations with Claude Desktop.
- FlicenseNot gradedqualityDmaintenanceIntegrates Zero CRM with Claude Desktop, providing 16 tools for full CRUD operations on companies, contacts, and deals with filtering and pagination.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/soil-dev/capsulemcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server