Didit MCP Server
OfficialThis server exposes Didit's compliance and identity-verification platform as 130+ MCP tools, letting AI clients manage KYC/KYB workflows, run AML and verification checks, and operate workspace settings through OAuth-based sessions.
Account & org: register/login, verify email, list orgs and applications, get context, reveal API keys, check balance/top up credits.
Sessions: create/search/list sessions, get verification decisions, approve/decline/resubmit, correct KYC or POA data, add reviews, generate PDFs, share/import sessions, and bulk import historical records.
Workflows & questionnaires: list/create/update/delete workflows, build simple linear or branching graph workflows, validate/edit/set graphs, manage drafts and publishing, and create/manage questionnaires.
Standalone verification APIs: verify IDs, proof-of-address, database lookups, KYB registry search/select, passive liveness, face match/search, age estimation, AML screening, and email/phone OTP verification.
Vendor users & businesses: create, read, update, delete, search, and change monitoring status for customers and companies across apps/orgs.
AML transactions: submit and monitor transactions, search/list transaction records, and screen crypto wallet addresses for AML risk.
Cases, lists & blocklists: search cases, manage allowlists/blocklists/custom lists and their entries, including uploading face images to lists.
Webhooks & branding: create/update/delete webhook destinations, list signing secrets, and customize verification UI branding images.
Cross-app analytics & reporting: aggregate sessions, transactions, vendor users, and verification analytics across all apps/orgs in single calls.
Enables ChatGPT and other OpenAI-compatible clients to access Didit's identity verification, KYC, KYB, AML, fraud screening, and workspace operations through the MCP server, allowing AI agents to perform compliance and identity tasks programmatically.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Didit MCP Serverrun a KYC check on user ID 12345"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Didit MCP Server
The official Model Context Protocol server for Didit — bring KYC, KYB, AML screening, transaction monitoring, biometrics, and full workspace operations to Claude, Cursor, VS Code, Windsurf, Zed, and any MCP client.
130+ tools across sessions, workflows, vendor users/businesses, transactions, the standalone verification APIs, lists, cases, reports, webhooks, and billing.
Auth is "Log in with Didit" (OAuth 2.1 + PKCE) — the MCP acts as the signed-in user with their role's permissions. There is no API-key mode: every tool calls the user-scoped console endpoints, which only accept a Bearer token.
Every tool calls a single Didit REST endpoint and returns the JSON verbatim.
Full documentation: https://docs.didit.me/integration/mcp/overview
Quick start
Hosted (recommended)
No install, no API key — point your client at the hosted URL and sign in via the browser:
https://mcp.didit.me/mcpClaude Code
claude mcp add --transport http didit https://mcp.didit.me/mcpCursor (~/.cursor/mcp.json)
{ "mcpServers": { "didit": { "url": "https://mcp.didit.me/mcp" } } }Windsurf / Zed (via the mcp-remote bridge)
{ "mcpServers": { "didit": { "command": "npx", "args": ["-y", "mcp-remote@latest", "https://mcp.didit.me/mcp"] } } }See per-client setup for Claude Desktop and VS Code.
Cursor plugin
This repository includes a Cursor plugin manifest at .cursor-plugin/plugin.json.
The plugin uses the hosted OAuth server configured in .mcp.json, the existing Didit rule in rules/, and the icon in assets/.
No local server, API key, or environment variables are required.
Sign in with your Didit account when Cursor requests authorization.
The connection uses your existing organization roles and permissions.
Example requests:
"Show my Didit organizations and applications."
"List my verification workflows."
"Create a sandbox verification link using my selected workflow."
"Show verification analytics for the last seven days."
"List the webhooks configured for my application."
Tool results may contain customer and verification data from the workspace you authorize. Only request information you are authorized to access and share with your AI client. Review proposed changes before approving write or destructive actions. Disconnect Didit in your client's MCP settings when you no longer need the connection.
See the Privacy Policy and legal terms. For support, contact hello@didit.me or open a GitHub issue.
The presence of this package does not imply marketplace approval. Publishers can submit the public repository through Cursor's publishing form.
Related MCP server: APIVerve MCP Server
Authentication
The MCP is an OAuth 2.1 resource server; the Didit console (business.didit.me) is the authorization server. On first connect your client opens a browser, you Log in with Didit and approve the scopes, and the MCP then acts as you — across every organization you belong to, with your role's permissions. Tokens are short-lived and refreshed automatically.
Scopes: didit:management (workspace operations) and didit:verification (running checks). Your console role is enforced server-side on every call.
There is no API-key mode. Every tool targets the user-scoped console endpoints (
/organization/{org}/application/{app}/…), which authorize a Bearer token with per-role privileges and rejectx-api-key. (For raw REST access with an application API key — e.g. creating sessions from your backend — use the REST API directly, not this server.)
See Authentication.
Tools
130+ tools, grouped by area. The full catalogue with read/write/destructive markers is in docs/TOOLS.md and at docs.didit.me. Highlights:
Discovery & cross-app:
didit_context_get,didit_session_search,didit_transaction_search,didit_vendor_user_search,didit_analytics— aggregate across every org/app in one call.Sessions: create, list, get decision, update status, reviews, bulk import.
Verification APIs:
didit_verify_id,didit_verify_aml,didit_verify_face_match,didit_verify_kyb_search, …Workflows (incl. branching graphs):
didit_workflow_search,didit_workflow_get_graph,didit_workflow_edit_graph— build conditional/branching workflows (fuzzy-match conditions, Document-AI steps) by sending small ops; large feature configs are kept server-side, never resent.didit_workflow_get_id_verification_methods_cataloganddidit_workflow_get_kyb_registry_cataloganswer the server-driven questions a config write depends on (which countries offer non-doc lookup / wallets, which KYB data tiers and monitoring a country's registries sell).Compliance: transaction monitoring, custom and preset rule management with backtesting, lists/blocklist/allowlist, cases, reports, audit logs, alerts.
Workspace: questionnaires, webhooks, members, billing, branding.
File inputs
Tools that consume files (face upload, ID/PoA/liveness/face/age verification, branding) accept the file in one of two forms:
*_path— an absolute path on the machine running the MCP server. Only works for local/stdio runs (e.g. Claude Code with a local server), where your files and the server share a filesystem.*_base64— the file content inline, as raw base64 or adata:URL. Use this against the hosted endpoint; it is how the Didit Console Copilot passes chat attachments (its agent resolves attachment references likeatt_1into base64 before the call reaches the MCP).
Both forms enforce the same 15MB cap and magic-bytes allow-list (png/jpg/jpeg/webp/gif/bmp/ico/pdf). The hosted transport's JSON body limit is 25MB (MCP_JSON_BODY_LIMIT).
Run it yourself
The hosted server above is the easy path — no install. To self-host, clone this repo and run it with Docker or Node. It authenticates the user the same way (OAuth, or a user Bearer token for headless runs); there is no API-key mode.
git clone https://github.com/didit-protocol/mcp.git && cd mcp
# Docker (recommended) — serves /mcp and /healthz on port 3000
docker build -t didit-mcp . && docker run -p 3000:3000 --env-file .env didit-mcp
# …or with Node
npm install && npm run build
node dist/http.js # hosted HTTP/OAuth
DIDIT_ACCESS_TOKEN=<user-access-token> node dist/index.js # stdio (headless)All Didit base URLs and OAuth endpoints are environment variables with public defaults (verification.didit.me, apx.didit.me, business.didit.me) — override them for a private deployment. See ARCHITECTURE.md and .env.example for the full reference.
Workflow feature configuration
Every workflow feature node takes a config object. The tables below are the complete
contract - what didit_workflow_create, didit_workflow_update, didit_workflow_validate_graph,
didit_workflow_set_graph and didit_workflow_edit_graph accept, and what the API stores.
A key that is not listed here is not part of the contract and is dropped silently on save.
didit_workflow_get_feature_config_schema returns the same data as JSON at runtime.
Generated from schema/feature-config-schema.json (contract sha256:200a66d7054aaf6cdddd94d7bd9c62050912862bf6e291908b667b20436ef4cd, schema version 1), which is a copy of the artifact service-didit-verification generates from its feature-config serializers. Do not edit by hand — run npm run schema:readme.
AGE_ESTIMATION
Configuration for Age Estimation feature.
Key | Type | Accepts | Meaning |
| integer | null | integer >=1 <=100 | |
| integer | null | integer >=1 <=100 | |
| boolean | null | boolean | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when an external capture device is detected. |
| boolean | null | boolean | Record the microphone during the selfie capture, so a reviewer can hear the session. Off by default. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when a duplicate face is found under a different name. |
| string | null | string | |
| integer | null | integer >=1 <=3 | |
| string | null | 'ACTIVE_3D'|'FLASHING'|'PASSIVE' | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when more than one face is present in the capture. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when this face matches a previously seen user. |
| number | null | number | |
| number | null | number | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the selfie is brighter than |
| integer | null | integer >=0 <=100 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the selfie is darker than |
| integer | null | integer >=0 <=100 | |
| boolean | null | boolean | |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when injected video frames are detected. |
| integer | null | integer >=1 <=100 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the selfie is a photo of a screen. |
| array | array | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when a virtual camera feed is detected. |
AML
Configuration for AML feature (used for both KYC AML and KYB Company AML).
Key | Type | Accepts | Meaning |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| uuid | null | uuid | Which case blueprint the automatically-created case is built from. Only meaningful with |
| boolean | null | boolean | Open a case automatically when the screening returns a hit, instead of leaving the hit to be triaged from the session. Off by default. |
| boolean | null | boolean | |
| boolean | null | boolean | Keep screening the PERSON after the session is approved, raising a new hit when they later appear on a watchlist. Off by default. |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| boolean | null | boolean | The same, for the COMPANY on a KYB workflow. The two switches are independent. |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| string | null | string | |
| array | array |
DATABASE_VALIDATION
Configuration for Database Validation feature.
The node is opt-in and does nothing while
database_validation_countriesis empty - the editor blocks publishing in that state and the compliance check reports it as a gap. Place it after the step that produces its inputs (usually OCR), and usedatabase_validation_field_sourcesonly for inputs no upstream step can fill.
Key | Type | Accepts | Meaning |
| json | null | {"": {"services": ["", ...]}} | The databases to check, per country - this node runs NOTHING until at least one country carries at least one service id. Service ids come from the country's live catalog (e.g. |
| json | null | {"": {"source": "document_ai"|"questionnaire"|"expected_data", "key": "||expected_details.|metadata."}} | Where to read a database input that no earlier step in the graph can fill. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the database returns no match at all. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when no selected database covers the holder's country or document. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the database matches some, but not all, of the submitted fields. |
| array | array |
DOCUMENT_AI
Configuration for the Document AI feature.
At most 3 documents per node, field keys unique within a document, and at most one field per document may set
is_full_name(it is optional - a document may mark none).
Key | Type | Accepts | Meaning |
| string | null | 'REVIEW'|'DECLINE' | Verdict when the document looks tampered with. |
| array | array | |
| string | null | 'REVIEW'|'DECLINE' | Verdict when the user runs out of |
| integer | null | integer >=2 <=5 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when a field marked |
| integer | null | integer >=0 <=100 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the field flagged |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the uploaded document cannot be read at all. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the uploaded file type is not supported. |
| array | array |
EMAIL_VERIFICATION
Configuration for Email Verification feature.
Key | Type | Accepts | Meaning |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the address appears in a known credential breach. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when this address was flagged as fraudulent by another organization in the network. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the address belongs to a disposable-mail provider. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the address was already verified for this application. |
| boolean | null | boolean | |
| integer | null | integer >=4 <=8 | |
| boolean | null | boolean | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the enrichment score is worse than |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=1 <=5 | |
| integer | null | integer >=1 <=5 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the address appears in many breaches. |
| boolean | null | boolean | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the address appears in a recent breach. |
| array | array |
FACE_MATCH
Configuration for Face Match feature.
Key | Type | Accepts | Meaning |
| string | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when calibrated evidence says the eyes region is covered in the selfie. NO_ACTION records evidence without changing Face Match; REVIEW sends Face Match to review; DECLINE declines it. The signal remains shadow-only until the region reports calibrated=true. |
| string | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when calibrated evidence says the face region is covered in the selfie. NO_ACTION records evidence without changing Face Match; REVIEW sends Face Match to review; DECLINE declines it. The signal remains shadow-only until the region reports calibrated=true. |
| integer | null | integer >=1 <=3 | |
| string | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when calibrated evidence says the mouth region is covered in the selfie. NO_ACTION records evidence without changing Face Match; REVIEW sends Face Match to review; DECLINE declines it. The signal remains shadow-only until the region reports calibrated=true. |
| string | null | 'REVIEW'|'DECLINE' | Verdict when no face-match score could be produced (missing portrait or selfie). |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| array | array |
IP_ANALYSIS
Configuration for Device & IP Analysis feature.
Key | Type | Accepts | Meaning |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the session looks driven by automation rather than a person. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when this device was flagged as fraudulent by another organization in the network. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when this IP was flagged as fraudulent by another organization in the network. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the host application binary looks tampered with. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the device is on the organization's block list. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when a debugger is attached to the host application. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the device is an emulator rather than real hardware. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when runtime hooking or instrumentation is detected. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when no platform device-integrity attestation was returned. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the device is rooted or jailbroken. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when this device was already used by another verified user. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when this IP was already used by another verified user. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the IP disagrees with the expected IP sent on the session. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the connecting IP's country is not allowed by |
| json | null | {"": {"allowed": true|false, "states"?: {"": {"allowed": true|false}} | null}} | Country allow/deny rules for the connecting IP address, applied only while |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the IP country disagrees with the document's issuing country. |
| boolean | null | boolean | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the session was driven from more than one device. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the device reports a recovered or restored state. |
| array | array | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the connection comes through a VPN, proxy or Tor exit. |
KYB_DOCUMENTS
Key | Type | Accepts | Meaning |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when a document is older than its configured freshness window. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when a document contradicts the registry on a critical company detail. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the user runs out of |
| integer | null | integer >=1 <=5 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when a document contradicts the registry on a minor detail. |
| json | null | {"<KYB_DOCUMENT_GROUP|KYB_DOCUMENT_SUBTYPE>": {"enabled": true|false, "max_age_days": <0-3650>|-1|null}} | Per-group or per-subtype switch and freshness window. Keys must be a known KYB document group or subtype code. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when a company document looks tampered with. |
| json | null | ["", ...] | The company paperwork to collect, as a list of document-GROUP codes - each group is satisfied by any one of the document types it covers. The KYB Documents feature refuses to save with an empty list: a node that requires nothing is the same as not having the node. |
| array | array |
KYB_KEY_PEOPLE
The workflow ids here point at separate KYC workflows: a KYB graph verifies the company, and the people behind it are verified by the linked person workflows.
Key | Type | Accepts | Meaning |
| uuid | null | uuid | |
| json | null | [{"key": "", "label": "", "type": "text"|"number"|"date"|"phone"|"email", "required": true|false, "custom": true|false}] | Which company details are collected for a CORPORATE key person. Same list-of-descriptors shape and same rules as |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when a key person's document disagrees with the details declared for them. |
| boolean | null | boolean | |
| json | null | [{"key": "", "label": "", "type": "text"|"number"|"date"|"phone"|"email", "required": true|false, "custom": true|false}] | Which personal details are collected for an individual key person, as an ORDERED LIST of field descriptors (not a map). |
| boolean | null | boolean | Pre-fill the key-people list from the company registry result, so the customer confirms and corrects rather than typing every officer and shareholder in. |
| boolean | null | boolean | |
| uuid | null | uuid | |
| boolean | null | boolean | |
| boolean | null | boolean | |
| boolean | null | boolean | |
| boolean | null | boolean | |
| boolean | null | boolean | |
| json | null | {"": {"enabled"?: true|false, "require_kyc"?: true|false, "verification_workflow"?: ""|null, "allow_skip"?: true|false}} | Per-role rules for the people behind the company. Role keys come from the existing config - never invent one. A role with |
| integer | null | integer >=0 <=100 | |
| uuid | null | uuid | |
| integer | null | integer >=0 <=100 | |
| uuid | null | uuid | |
| boolean | null | boolean | |
| array | array |
KYB_REGISTRY
Key | Type | Accepts | Meaning |
| json | null | ["", ...] | Which company-registry countries the business may be incorporated in, as a list of ISO-2 codes (note: ISO-2 here, unlike the ISO-3 used by the OCR and IP allow-lists). An empty list or null accepts every supported registry. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the company could not be found in a registry and was entered by hand. |
| json | null | {"": {"enabled": true|false, "tier": "basic"|"shareholders"|"ubo"}} | Per-country registry routing configuration. Each enabled country selects the data tier charged when a company is selected. Only tiers marked available by the pricing endpoint can be enabled. At least one country must be enabled: a registry check that searches nowhere is rejected. Manual company entry does not use this configuration and is billed at its own flat fee of USD 0.75 per company. |
| json | null | {"": {"enabled"?: true|false, "required"?: true|false}} | Per-registry-field overrides controlling which company details are collected and which of them are mandatory. Field keys come from the backend's configurable-field catalog (registration_number, incorporation_date, legal_address, vat_number, alternative_names, tax_number, company_type, legal_entity_identifier, location_of_registration, nature_of_business, registered_capital_amount, registered_capital_currency, website, email, phone, ...); an unknown key, or any sub-key other than |
| boolean | null | boolean | Keep the COMPANY's registry record under continuous monitoring after a Shareholders or UBO result: changes of status, officers, ownership or address move the session back to review and fire a webhook. Only where the registry provider offers monitoring; USD 2.00 per company per year, cancellable at any time. Off by default. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the VAT number is rejected by the tax authority. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the VAT number could not be checked at all. |
| array | array |
LIVENESS
Configuration for Liveness feature.
Key | Type | Accepts | Meaning |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Deprecated and no longer applied. It treated a face as if it carried a fraud verdict. Use |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when other organizations in the network recorded identity-claim events for this same person in which the claimed identity did not match. Review or no action only - a decline set here is downgraded to review. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when an external capture device is detected. |
| boolean | null | boolean | Record the microphone during the selfie capture, so a reviewer can hear the session. Off by default. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when a duplicate face is found under a different name. |
| string | null | string | |
| integer | null | integer >=1 <=3 | |
| string | null | 'ACTIVE_3D'|'FLASHING'|'PASSIVE' | |
| string | null | string | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when more than one face is present in the capture. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when this face matches a previously seen user. |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the selfie is brighter than |
| integer | null | integer >=0 <=100 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the selfie is darker than |
| integer | null | integer >=0 <=100 | |
| boolean | null | boolean | |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when injected video frames are detected. |
| json | {"": {"possible": 0-100, "high": 0-100}} | Per-demographic overrides of the face-similarity bands used against the allow-list and duplicate-face sets, so match rates stay even across groups. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the selfie is a photo of a screen. |
| array | array | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when a virtual camera feed is detected. |
NFC
Configuration for NFC/ePassport feature.
Key | Type | Accepts | Meaning |
| boolean | null | boolean | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the user skips the NFC chip read (only reachable with |
| array | array | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when chip data-group hashes are intact but the certificate chain cannot be verified because the issuing country's CSCA trust anchor is not loaded. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the chip is read but its signature cannot be verified. |
OCR
Configuration for OCR/ID Verification feature.
Omitting
documents_allowedstores the full country/document catalog, so the node accepts everything. Put OCR before any feature that reads identity data from the document (FACE_MATCH, NFC, DATABASE_VALIDATION).
Key | Type | Accepts | Meaning |
| json | null | {"": {"minimum_age": 1-120, "maximum_age": 1-120|null, "states"?: {"": {"minimum_age": 1-120, "maximum_age": 1-120|null}}}} | Per-country (and optionally per-state) age gate. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when this document was flagged as fraudulent by another organization in the network. |
| boolean | null | boolean | Record the microphone during document capture, so a reviewer can hear the session. Off by default. |
| json | null | {"": ["", ...]} | Fields to blur out of the stored document image, per country. Only fields the country's document layout supports are accepted. |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the document or personal number does not match the country's expected format. |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=0 <=100 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the scanned document family carries no portrait on any side. Node-config only - there is no account-level setting; the runtime default is REVIEW. |
| json | null | {"": {"": {"enabled": 0|1, "sides"?: 1|2, "subtypes"?: ["", ...]}}} | Which identity documents are accepted, per issuing country. Omit the key entirely to accept the full catalog; an empty object means the same thing. At least one document must end up enabled or the save is rejected. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the identity was already verified for this application. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the extracted identity contradicts the |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when no expiry date could be read from the document. |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=2 <=5 | |
| integer | null | integer >=0 <=100 | |
| array | null | ["CAMERA_SCAN" | "UPLOAD", ...] | Capture methods the end user may use for the document photo. Declared as a list of free strings, so the vocabulary is not in the field itself: CAMERA_SCAN (live capture) and UPLOAD (pick an existing file). An empty list falls back to the account default. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when overall document image quality is below the bar. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the captured document image is too blurry to trust. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the captured document image is overexposed. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the captured document image is underexposed. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the document's own fields contradict each other. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when a document check digit or barcode fails validation. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the machine-readable zone is missing or inconsistent. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when a document authenticity validation fails. |
| boolean | null | boolean | |
| boolean | null | boolean | |
| boolean | null | boolean | Show the user a review screen after each document capture, letting them retake the photo before it is submitted. Off by default. |
| boolean | null | boolean | Let the user review and correct the extracted identity data before the step completes. Off by default. A correction is scored against |
| integer | null | integer >=1 <=120 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the holder is older than |
| json | null | {"": {"document": {"enabled": bool}, "id_lookup": {"enabled": bool, "max_attempts": 1-5, "skip_liveness_and_face_match": bool, "on_partial_match": "fallback_to_document"|"decline", "on_no_match": "fallback_to_document"|"decline", "on_provider_error": "fallback_to_document"|"decline", "response_fields"?: ["", ...]}, "wallet": {"enabled": bool, "providers": ["", ...], "on_failure": "fallback_to_document"|"decline"}}} | Which ID verification methods each country may use: document capture (today's behaviour), non-doc lookup against a government or other authoritative source, and digital identity wallets. Omit the key, or a country, or a method, and that country is document only. Every method must be available for the country in the capability catalog (GET workflow-graph/id-verification-methods-catalog/); wallets are an accept-list with no ordering. Each fallback is |
| integer | null | integer >=1 <=120 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the holder is younger than |
| array | null | ["first_name" | "last_name" | "date_of_birth" | ...] | Which extracted identity fields count as critical when the user edits the OCR result, so a mismatch takes the critical action rather than the minor one. |
| string | null | 'REVIEW'|'DECLINE' | Verdict when the user's edit disagrees with OCR on a critical field. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the user's edit disagrees with OCR on a non-critical field. |
| array | array | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the document address could not be parsed into components. |
PHONE_VERIFICATION
Configuration for Phone Verification feature.
Key | Type | Accepts | Meaning |
| integer | null | integer >=4 <=8 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when this number was flagged as fraudulent by another organization in the network. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the number belongs to a disposable-number provider. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the number was already verified for this application. |
| boolean | null | boolean | |
| string | null | 'REVIEW'|'DECLINE' | Verdict when the number carries a high risk signal. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the trust index is below |
| boolean | null | boolean | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the enrichment score is worse than |
| integer | null | integer >=0 <=100 | |
| integer | null | integer >=1 <=5 | |
| integer | null | integer >=1 <=5 | |
| boolean | null | boolean | |
| integer | null | integer >=0 <=100 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the line type itself is considered risky. |
| json | null | {"": {"<channel: sms|whatsapp|telegram|rcs|viber|zalo>": {"enabled": true|false, "max_retries": } | true|false}} | Which countries and delivery channels the one-time code may be sent through. It is a WHITELIST: a country absent from the map is not offered at all, and a channel absent from a listed country is skipped. |
| string | null | string | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the number was ported to a new carrier recently. |
| array | array | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the number is VoIP rather than a real subscriber line. |
PROOF_OF_ADDRESS
Configuration for Proof of Address feature.
Key | Type | Accepts | Meaning |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the document fails authenticity checks. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the document is damaged, cropped or otherwise unusable. |
| json | null | {"": {"": {"enabled": 0|1, "sides"?: 1|2, "subtypes"?: ["", ...]}}} | Which proof-of-address documents are accepted, per issuing country. Same shape as OCR's |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when no issue date could be read from the document. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the issuing company or authority cannot be identified. |
| json | null | {"": 0|1} | Languages the proof-of-address document may be written in, as a flag per language code. Omit to accept every supported language. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the user runs out of |
| integer | null | integer >=2 <=5 | |
| integer | null | integer >=0 <=100 | |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the name or address on the document disagrees with the verified identity. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the address on the document cannot be parsed or is not a real address. |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the uploaded document is not one of |
| string | null | 'NO_ACTION'|'REVIEW'|'DECLINE' | Verdict when the document language is not one of |
| array | array |
QUESTIONNAIRE
Configuration for Questionnaire feature.
Key | Type | Accepts | Meaning |
| uuid | null | uuid | |
| boolean | null | boolean | |
| array | array |
Contributing
The feature-config contract above is generated - never hand-write a config key into a tool description. See CONTRIBUTING.md for the regeneration workflow and the checks that enforce it.
Issues and PRs welcome — see CONTRIBUTING.md. Run the hosted server at mcp.didit.me/mcp, or self-host from this repo (Docker / Node) — see Run it yourself.
License
MIT © Didit Protocol
Available Tools
121 toolsdidit_account_loginBInspect
Login to existing Didit account. Returns access_token and refresh_token.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | |||
| password | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations for side effects; description only mentions token return, omitting potential rate limits, session creation, or prerequisites like account verification.
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 are concise but too sparse, missing essential behavioral and parameter 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?
With two required parameters and a significant sibling set, the description omits important context like error handling and usage in authentication flows.
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 0% and description adds no parameter information beyond field names, failing to explain format or constraints for email and password.
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 'Login to existing Didit account' with specific verb and resource, and distinguishes from sibling tools like didit_account_register and didit_account_verify_email.
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 logging into an existing account, but lacks explicit when-not-to-use or alternative guidance despite having relevant siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_account_registerAInspect
Register a new Didit account. A 6-character verification code is sent to the email. Follow up with didit_account_verify_email.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address | ||
| password | Yes | Password (min 8 chars, must include uppercase, lowercase, digit, special char) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is not read-only (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds that a verification code is sent to the email, which is a key behavioral trait 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 two sentences, directly stating the purpose and the next step. Every word is informative, with 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?
Given the presence of an output schema, the description adequately covers the registration process, email verification, and follow-up. It is missing potential error conditions or prerequisites, but is sufficiently complete for a simple registration 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 clear descriptions for both email and password. The description does not add any additional meaning beyond what the schema already provides, so it meets the 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 action ('Register') and the resource ('new Didit account'). It also distinguishes from siblings like didit_account_login and didit_account_verify_email, making the purpose unmistakable.
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 says to follow up with didit_account_verify_email, guiding the next step. However, it does not provide explicit exclusions or conditions for when to use this tool instead of others, but the context of account registration is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_account_resend_otpAInspect
Resend the 6-character email verification code for a pending registration. Codes expire after 10 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address the code was originally sent to |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, destructiveHint=false). The description adds the behavioral trait that codes expire after 10 minutes, which provides useful context, though it does not clarify if resending invalidates the previous code.
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 no unnecessary words. The action is front-loaded, making it quick to understand.
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 resend OTP tool with one parameter and an output schema (not shown), the description covers the core action and a key constraint (expiry). It could mention restrictions like requiring a pending registration, but overall it's sufficiently 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 schema describes the 'email' parameter with coverage 100%. The description does not add further meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Resend', the resource '6-character email verification code', and the context 'for a pending registration'. It effectively distinguishes from siblings like didit_account_verify_email and didit_account_register.
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 when a user needs a new verification code for a pending registration, but it does not explicitly state when not to use it or mention alternatives like didit_account_verify_email for code verification or didit_account_register for initial sign-up.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_account_verify_emailAInspect
Verify email with the 6-character code. Returns access_token, refresh_token, organization, application (with client_id and api_key).
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | |||
| code | Yes | 6-character alphanumeric code from email |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false) indicate mutation, and the description adds that it returns access_token, refresh_token, etc. It also confirms the code length (6 characters). However, it does not mention side effects like marking email as verified or any prerequisites.
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 sentence states purpose and code requirement, second enumerates return values. No extraneous information, front-loaded with 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?
The description covers purpose and returns, which suffices for a simple verification tool. Output schema exists to detail return formats. However, it doesn't address prerequisites (e.g., user must have an account) or explain what happens if the code is invalid.
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% (code has description, email does not). The description does not add meaning beyond the schema: it mentions the code is 6-character but doesn't elaborate on email format or constraints. Given borderline coverage, a score 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?
Description clearly states 'Verify email with the 6-character code', which is a specific verb and resource. It distinguishes from sibling tools like didit_verify_email_send (sending code) and didit_verify_email_check (checking status), 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?
The description implies usage after receiving a code via email, but does not explicitly state when to use this tool versus alternatives (e.g., resend code, check verification status). No 'when-not' or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_alert_configureCInspect
Configure an alert by type.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| alert_type | Yes | ||
| data | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-readOnly and non-destructive behavior. The description adds no additional context about side effects, authorization requirements, rate limits, or what actually happens during configuration. It does not contradict annotations but adds no value beyond 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 extremely short (one sentence), but it is under-specified rather than concise. It restates the tool's name with minimal additional information, failing to earn its place by providing actionable 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?
Given the tool has 4 parameters (including a required alert_type and a nested data object) and an output schema, the description is severely incomplete. It does not explain how to use the parameters, what configurable options exist, or what the outcome is.
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% (2/4 parameters described). The description does not explain the meaning or format of 'alert_type' or 'data' object. With borderline coverage, the description should add parameter-specific context, but it 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 'Configure an alert by type' uses a generic verb 'configure' that doesn't specify whether it creates, updates, or toggles alerts. It adds 'by type' which provides some distinction but still lacks precision. It does not differentiate from sibling tools like didit_alert_list.
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?
There is no guidance on when to use this tool versus alternatives like didit_alert_list or other configure-like tools. No when-to-use or when-not-to-use information is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_alert_listARead-onlyInspect
List configured alerts.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 no additional behavioral context such as pagination or filtering behavior. It is consistent but not additive.
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?
A single, direct sentence with no extraneous words. 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?
The description is minimal but sufficient given the read-only hint and presence of an output schema. However, it could be more complete by mentioning that it returns a list of alerts or specifying scope (e.g., for an organization/application).
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%; the input schema fully documents both parameters with their descriptions. The tool description adds no further semantic value beyond what the schema already 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 'List configured alerts' clearly states the action (list) and specific resource (configured alerts). It distinguishes from sibling 'didit_alert_configure' which has a different 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?
No usage guidance is provided. The description does not mention when to use this tool versus alternatives like 'didit_alert_configure' or any other listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_allowlist_addAInspect
Add an entry to the allowlist (trusted, bypasses some checks).
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only and non-destructive behavior. The description adds that it 'bypasses some checks', but does not elaborate on what checks, authorization requirements, or other behavioral details. Some context is added, 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?
The description is a single, efficient sentence with no unnecessary words. It is front-loaded 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 simplicity, the description covers the core action. However, it omits details on idempotency, behavior on duplicates, or constraints. The presence of an output schema partially compensates.
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 both parameters already described in the schema. The description does not add extra 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 the action ('Add an entry') and the resource ('allowlist'), with additional context about its purpose ('trusted, bypasses some checks'). This distinguishes it from sibling tools like 'didit_blocklist_add'.
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 for trusted entries that bypass checks, but does not explicitly state when to use this tool versus alternatives like 'didit_lists_entry_create' or 'didit_blocklist_add'. No when-not guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_analyticsARead-onlyInspect
Aggregate verification analytics ACROSS ALL your apps and organizations in one call — the efficient way to answer questions like "how many people tried phone verification but dropped off in the last 15 days?". Returns summed status counts (request_breakdown), a feature_funnel (how many sessions REACHED each step, e.g. PHONE_VERIFICATION), and a recomputed conversion_rate, for a date window. Omit organization_id/application_id to span everything; pass them to narrow.
| Name | Required | Description | Default |
|---|---|---|---|
| date_from | No | ISO date lower bound (YYYY-MM-DD) | |
| date_to | No | ISO date upper bound (YYYY-MM-DD) | |
| last_n_days | No | Relative window: include only the last N days (sets date_from/date_to). Alternative to passing date_from/date_to. | |
| include_timeseries | No | Also return per-day time series (heavier). Default false. | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 it is safe. The description adds valuable details about the return structure (status counts, feature funnel, conversion rate) and the optional timeseries, which is beyond annotation capabilities.
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 concise sentences. The first sentence states the core purpose and example; the second provides return fields and parameter usage. No redundancy or waste, 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 6 optional parameters and an output schema exists, the description covers the main use case, return fields, and scoping. It omits details about the timeseries parameter and exact format of outputs, but the output schema likely fills that gap. Overall, it is sufficiently complete for an agent to understand the tool's capability.
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. The description adds meaning by explaining the effect of omitting or passing organization_id/application_id, and clarifies that the tool spans everything by default. This goes beyond the schema's 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?
The description clearly states it aggregates verification analytics across all apps and organizations, provides a concrete example question, and the specific verb 'Aggregate' distinguishes it from other tools that might process individual sessions or reports.
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 explains when to omit or pass organization_id/application_id to span or narrow the scope, providing clear context. However, it does not mention when not to use this tool versus alternative tools like session search or report exports.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_audit_log_listARead-onlyInspect
List audit-log entries for the application (who changed what).
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| cursor | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so description's 'who changed what' adds minimal behavioral context. 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?
Single sentence, front-loaded with verb and noun, zero 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 read-only list tool with output schema; description covers core purpose. Could mention pagination via cursor but not essential given 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?
67% schema description coverage is moderate but description adds no parameter meaning beyond what schema provides. Cannot compensate for cursor parameter lacking 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?
Description clearly states verb 'list' and resource 'audit-log entries', plus explanatory note 'who changed what'. It uniquely identifies this tool among many 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?
Implies usage for auditing changes but provides no explicit when-to-use, when-not-to-use, or alternatives. Sibling tools are not compared.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_blocklist_addBInspect
Add an entry to the blocklist (e.g. by vendor_data, document number, face).
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint false and destructiveHint false, so the description's 'Add' aligns. However, the description adds minimal behavioral context beyond annotations, such as handling of duplicate entries, authorization requirements, or confirmation of success.
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, direct sentence without extraneous words. It could be slightly more structured (e.g., bullet points for examples), but it is concise and front-loads the main 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?
Despite having an output schema, the description lacks important context such as required permissions, error conditions, or side effects. Given the large sibling set, more guidance on when this tool is appropriate would improve completeness.
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 clear descriptions for both organization_id and application_id. The tool description adds no additional parameter meaning, so baseline score of 3 applies.
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 (Add) and resource (blocklist), with examples of entry types (vendor_data, document number, face). This distinguishes it from related sibling tools like didit_blocklist_get and didit_blocklist_remove.
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 no guidance on when to use this tool versus alternatives (e.g., didit_allowlist_add) or any prerequisites. It only states what it does without contextual usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_blocklist_getARead-onlyInspect
List blocklist entries (blocked users/identifiers).
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 appropriately indicates a read operation. However, it adds no extra behavioral details such as pagination, return format, or parameter effects, which would be useful.
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 sentence with no waste. It is front-loaded with the core action and immediately clarifies the content type.
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 read-only nature, the description is acceptable but lacks contextual details like the scope of listing (e.g., does it list all entries or only those matching optional filters?) and whether pagination is supported. The existence of an output schema partially compensates, but the description could be more precise.
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?
All 2 parameters are fully described in the input schema (100% coverage), and the description adds no additional meaning beyond what the schema provides. The description does not elaborate on parameter usage or 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 'List blocklist entries' with a parenthetical clarification of what entries are. This distinguishes it from sibling tools like didit_blocklist_add and didit_blocklist_remove.
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 no guidance on when to use this tool versus alternatives, nor any prerequisites or conditions. This leaves the agent to infer usage solely from the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_blocklist_removeBDestructiveInspect
Remove an entry from the blocklist.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description does not add extra behavioral context beyond that, but it does not contradict annotations. Minimal additional value.
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?
Extremely concise: one sentence with no wasted words. Front-loads the core action effectively.
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 omits how to specify which entry to remove (no entry ID in input schema) and does not clarify the scope of removal (e.g., all entries for an org/application?). With an output schema present, return values are covered, but the description lacks essential context 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 baseline is 3. The description does not add any meaning beyond what the schema already provides (e.g., no explanation of how organization_id/application_id identify the entry to remove).
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 'Remove an entry from the blocklist' uses a specific verb ('Remove') and resource ('blocklist entry'), clearly distinguishing it from sibling tools like didit_blocklist_add (add) and didit_blocklist_get (get).
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?
No guidance is provided on when to use this tool versus alternatives (e.g., didit_blocklist_add, didit_blocklist_get). There is no mention of prerequisites or scenarios where removal is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_branding_getARead-onlyInspect
Get the current branding customization (logos, colors) applied to your verification UI.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 value by specifying exactly what is retrieved (logos, colors) and the scope (verification UI). 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 a single, front-loaded sentence that efficiently conveys the tool's purpose without any 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 parameterless read tool with an output schema, the description fully explains what the tool does. The existence of an output schema covers return value 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?
No parameters are defined, so the baseline score is 4. The description adds no further information about parameters, but none is needed.
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 'Get' and defines the resource as 'branding customization (logos, colors)' applied to the 'verification UI'. It clearly distinguishes from the sibling tool didit_branding_update.
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 for retrieving current branding settings, and the readOnlyHint annotation reinforces this. While it does not explicitly state when not to use, the presence of a sibling write tool provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_branding_updateBInspect
Update verification UI branding images. Provide absolute file paths for the images you want to set.
| Name | Required | Description | Default |
|---|---|---|---|
| image_square_path | No | Absolute path to a square logo image | |
| image_rectangular_path | No | Absolute path to a rectangular logo image | |
| image_favicon_path | No | Absolute path to a favicon image |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only and non-destructive. The description adds only the requirement for absolute file paths, but does not disclose potential side effects, authentication needs, or what happens if a path is invalid.
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 at two sentences, with no wasted words. It front-loads the main action and immediately follows with critical usage 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?
The description does not clarify whether partial updates are allowed (all parameters optional), what the output is (despite output schema existing), or any constraints on file formats/sizes. Missing context for safe 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?
With 100% schema description coverage, the schema already explains each parameter adequately. The description merely restates that paths must be absolute, adding no new 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 action ('Update') and resource ('verification UI branding images'), with specific instruction about absolute file paths. It effectively distinguishes from the sibling didit_branding_get.
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 does not provide explicit when-to-use or when-not-to-use guidance, but it implies that this tool is for setting branding images, contrasting with the read-only sibling. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_case_createCInspect
Create a case.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, implying a non-destructive write operation. The description adds no behavioral context beyond the verb 'create', such as side effects, idempotency, or authentication requirements.
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 at three words, but this comes at the cost of clarity and completeness. It is front-loaded but lacks sufficient information to stand alone.
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 the presence of an output schema, the description fails to define what a 'case' is or explain the behavior when optional parameters are omitted. This leaves significant gaps for an agent invoking the 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 100%, with both parameters (organization_id, application_id) documented in the input schema. The description adds no additional meaning beyond what the schema already provides, meeting the 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 'Create a case.' is a clear verb+noun that distinguishes the tool from sibling tools like didit_case_get, didit_case_list, didit_case_manage, etc. However, it lacks context on what constitutes a 'case' in this domain, preventing a perfect score.
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 no guidance on when to use this tool versus alternatives (e.g., didit_session_create, didit_transaction_create). It does not mention prerequisites like requiring an organization or application ID, despite both parameters being optional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_case_getBRead-onlyInspect
Get a case with its details.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| case_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description doesn't need to repeat that. The description adds no behavioral details beyond the name. It is adequate but does not disclose any edge cases, error handling, or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence. It is front-loaded with the core purpose. However, it could be slightly more informative without becoming verbose.
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 simplicity of a get-by-id operation, the description, combined with an output schema (present but not shown), is likely sufficient. No extra context about return values or error cases is needed, though it would be a minor improvement.
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 covers 67% of parameters with descriptions. The description provides no additional parameter meaning beyond what the schema already offers. Baseline 3 is appropriate since schema coverage is high.
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 gets a case with details. The verb 'Get' and resource 'case' are specific. However, it does not distinguish from sibling tools like didit_case_list or didit_case_search, which also retrieve case 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?
No guidance is provided on when to use this tool versus alternatives such as didit_case_list or didit_case_search. There are no prerequisites, exclusions, or context that help an agent decide when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_case_listARead-onlyInspect
List investigation/compliance cases for ONE app; with multiple apps (or no scope) it auto-spans all your apps. For a cross-app query prefer didit_case_search.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| status | No | ||
| cursor | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 context about auto-spanning across apps when multiple or no scope, 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?
Two sentences, no waste. First sentence states purpose and scope, second gives guidance on alternatives. Front-loaded with 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?
For a list tool with 4 parameters and an output schema, the description covers scope behavior and alternatives. Missing details on pagination or permission requirements, but overall 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?
The description does not elaborate on any parameters. With 50% schema coverage, the description could compensate but does not. Parameters like cursor and status remain unexplained.
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 'List' and the resource 'investigation/compliance cases'. It specifies scope behavior (one app vs. auto-span) and distinguishes from sibling tool didit_case_search.
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 recommends didit_case_search for cross-app queries, providing a clear alternative. Does not list all when-not-to-use scenarios, 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.
didit_case_manageBDestructiveInspect
Act on a case: assign, resolve, reopen, escalate, comment, or update.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| case_id | Yes | ||
| action | Yes | ||
| data | No | Action payload (e.g. {assignee_id}, {comment}, or fields to update) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructive behavior, but description adds no specifics (e.g., what gets destroyed, whether actions are reversible, auth requirements).
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 concise sentence front-loading purpose and supported actions. Efficient but could be slightly more 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 multi-action management tool, description omits response format, action-specific constraints, and error handling. Incomplete given 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 60%; description adds brief context for 'data' parameter but lacks detail on per-action payloads. Does not fully compensate for missing 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?
Clear verb 'Act on a case' with explicit list of actions: assign, resolve, reopen, escalate, comment, update. Distinguishes from case creation, retrieval, search, etc.
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?
No guidance on when to use this tool vs siblings like didit_case_create or didit_case_update. No advice on prerequisites 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.
didit_case_searchARead-onlyInspect
Search case-management cases ACROSS ALL your apps and organizations in one call. Omit organization_id/application_id to span everything; pass them to narrow. Returns newest first, each tagged with its org/app.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by case status | |
| search | No | Free-text search | |
| date_from | No | ISO date lower bound | |
| date_to | No | ISO date upper bound | |
| last_n_days | No | Relative window: include only the last N days (sets date_from/date_to). Alternative to passing date_from/date_to. | |
| limit | No | Max results after merging (default 20, max 200) | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 valuable context: results are newest-first and each result is tagged with its org/app, which aids agent decision-making.
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 wasted words. Front-loaded with the core purpose, each sentence adds distinct 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?
Given the output schema exists, the description covers scope, ordering, tagging, and parameter interaction. Minor omission: no mention of pagination beyond limit, but the schema handles that.
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?
All 8 parameters have schema descriptions (100% coverage). The description goes beyond the schema by explaining how to use organization_id/application_id (omit to span) and the last_n_days alternative, adding meaningful 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?
The description clearly states it searches case-management cases across all apps and organizations, using a specific verb and resource. It distinguishes itself from siblings by emphasizing cross-org/app scope and omitting filters.
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 on when to omit vs. pass organization_id/application_id to control scope. However, it does not explicitly mention alternatives like didit_case_list or didit_case_get for scoped queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_case_statisticsARead-onlyInspect
Get case statistics (counts by status, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, covering safety. The description adds that it returns counts but does not elaborate on behaviors like filtering, pagination, or response format. With annotations present, the description adds marginal value.
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?
Extremely concise single sentence with no filler. Every word adds value. Front-loads the action and resource.
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 that an output schema exists (context signal), the description need not detail return values. It sufficiently communicates the tool's purpose as a statistics aggregator, though it could hint at aggregation scope (e.g., organization-level).
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 covers both parameters with descriptions (100% coverage). The description does not add any additional parameter meaning beyond what the schema provides. Baseline 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 uses a specific verb ('Get') and resource ('case statistics'), clearly distinguishing from sibling tools like didit_case_list (list individual cases) and didit_case_get (get a single case). The parenthetical '(counts by status, etc.)' adds specificity.
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?
No guidance on when to use this tool versus alternatives. The description only states what it does, lacking any when-to-use or when-not-to-use advice. Sibling tools like didit_case_list and didit_case_search are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_context_getARead-onlyInspect
Return ALL organizations you can access with their applications nested, plus the default org/app when unambiguous — in ONE call (replaces didit_org_list + per-org didit_org_list_applications). Call this first to discover ids.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds valuable behavioral context: it returns all accessible organizations with nested applications, and clarifies behavior for default org/app when unambiguous. 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 highly concise: two sentences with no extraneous words. It front-loads the key action and includes the replacement note. 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?
With zero parameters, clear annotations, and an output schema present, the description sufficiently covers what the tool does, how to use it (first call for discovery), and its scope. No gaps identified.
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 zero parameters, so baseline is 4. No additional parameter semantics needed; the description focuses on purpose and usage.
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 all accessible organizations with nested applications, plus default org/app when unambiguous. It uses the specific verb 'return' and explicitly distinguishes from sibling tools by noting it replaces didit_org_list and per-org didit_org_list_applications.
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 guidance to 'call this first to discover ids' and explains it replaces multiple calls. However, it does not explicitly state when not to use it or describe alternatives for specific subsets, leaving some ambiguity for edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_lists_createAInspect
Create an allowlist or custom list. System blocklists are auto-provisioned (one per entry type) and cannot be created. name must be unique per application.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | REQUIRED. Unique list name | |
| list_type | Yes | REQUIRED. allowlist or custom (blocklists are auto-provisioned) | |
| entry_type | Yes | REQUIRED. What kind of values the list holds | |
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a mutable operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description confirms creation and adds constraints (unique name, blocklist prohibition) without contradicting annotations. It provides useful 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?
Two sentences with no wasted words. The description is front-loaded with the core purpose and then adds critical constraints. 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?
The description covers creation scope, constraints, and exclusions. It does not detail return values (output schema likely handles that) or error cases, but for a create tool with an output schema, this is sufficient for an agent to understand when and how to use 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 input schema already describes parameters well (75% coverage). The description adds extra meaning: 'name must be unique per application' (constraint) and clarifies that blocklists are not allowed (list_type and entry_type implications). 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 ('Create') and resource ('allowlist or custom list'), specifying what the tool does. It distinguishes from blocklists (which are auto-provisioned and cannot be created) and mentions name uniqueness per application, making the purpose 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 explicitly says blocklists cannot be created (negative guidance) and that name must be unique (constraint). It implies when to use this tool (for allowlists/custom lists) but does not explicitly contrast with sibling tools like lists_update or entry creation, though 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.
didit_lists_deleteADestructiveInspect
Delete an allowlist/custom list and all its entries. System blocklists cannot be deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| list_uuid | Yes | UUID of the list |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true. The description adds useful context that deleting a list also deletes all its entries, and that system blocklists are protected. This goes beyond the bare annotations, though it does not detail side effects or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action, and every word contributes meaning. 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 simple delete tool with one parameter and annotations, the description is fairly complete. It covers the deletion scope and a constraint. It could mention that the list must exist, but that is implicit. The presence of an output schema reduces the need to explain 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 description coverage is 100% (the parameter 'list_uuid' is described in the schema). The tool description does not add any additional semantics about the parameter, so it meets the baseline with no 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 the verb 'Delete' and the resource 'allowlist/custom list', distinguishing it from sibling tools like didit_lists_entry_delete or didit_lists_update. It also explicitly notes that system blocklists cannot be deleted.
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 minimal guidance. It implies usage for deleting allowlists/custom lists but does not mention when to use this over didit_lists_entry_delete for individual entries or any prerequisites. No exclusions are given beyond system blocklists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_lists_entries_listARead-onlyInspect
List entries in a specific list. Use search to filter by value or label.
| Name | Required | Description | Default |
|---|---|---|---|
| list_uuid | Yes | UUID of the list | |
| search | No | Search by value or display label | |
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no further behavioral context (e.g., pagination, ordering) beyond the schema. It is adequate but not enriched.
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 short sentences, front-loaded with the main purpose. No wasted words, 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?
Output schema exists, covering return format. However, the description omits details about pagination (limit/offset) and whether all entries are listed or paginated. Adequate for a simple tool 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?
Schema description coverage is 50% (list_uuid and search have descriptions). The description adds meaning for search ('filter by value or label') but does not clarify limit or offset parameters. Partially compensates but incomplete.
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 'List entries in a specific list,' which is a specific verb and resource. It distinguishes from siblings like didit_lists_get (list metadata) and didit_lists_entry_create/delete.
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 mentions using search for filtering, which gives context, but does not explicitly state when to use this tool versus alternatives (e.g., didit_lists_entry_create). Usage is implied, not directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_lists_entry_createAInspect
Add an entry to a blocklist/allowlist/custom list. Pass value directly, or reference_session_id to auto-extract from a session (face, document, phone, email, IP, device). Pass both to disambiguate when a session has multiple values of the same type. For face entries without a session, use didit_lists_entry_upload_face instead.
| Name | Required | Description | Default |
|---|---|---|---|
| list_uuid | Yes | UUID of the list to add to | |
| value | No | Value to add (phone, email, IP, etc.). Optional if reference_session_id is provided. | |
| reference_session_id | No | Session UUID — backend auto-extracts the value based on the list's entry type | |
| reference_object_uuid | No | UUID of the source entity (transaction, vendor user/business) for traceability | |
| display_label | No | Human-readable label | |
| comment | No | Reason for adding | |
| metadata | No | Additional structured data (e.g. reference_type, full_name) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutation but not destructive. Description adds behavioral context: value can be provided directly or auto-extracted from a session, and both can be used for disambiguation. 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?
Four concise sentences with no fluff. Front-loaded with the main purpose, each sentence adds value: purpose, modes, disambiguation, alternative tool.
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 complexity (7 params, nested objects, output schema), the description covers the essential usage patterns and key parameter relationships. Could mention permissions or list-type specifics, but the description is largely sufficient when combined with 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 has 100% coverage, so baseline is 3. The description adds meaningful parameter interaction context, especially the disambiguation scenario when both value and reference_session_id are provided, which is not 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 clearly states the verb 'Add' and the resource 'entry to a blocklist/allowlist/custom list'. It distinguishes from the sibling 'didit_lists_entry_upload_face' by specifying that for face entries without a session, that alternative should be used.
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 when-to-use guidance by explaining two modes (direct value or session extraction) and the disambiguation scenario. Explicitly names an alternative tool for a specific case, though does not cover all possible alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_lists_entry_deleteADestructiveInspect
Remove an entry from a list. Also unblocks the underlying user/business if applicable.
| Name | Required | Description | Default |
|---|---|---|---|
| list_uuid | Yes | UUID of the list | |
| entry_uuid | Yes | UUID of the entry to remove |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds behavioral context beyond annotations: the side effect of unblocking the underlying user/business. Annotations already mark it as destructive (destructiveHint: true), so description provides valuable extra 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, front-loaded with the primary action, no redundant words. Efficient and to the point.
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 that an output schema exists, the description adequately covers the main action and important side effect. However, it lacks details on conditions for unblocking and error handling, but overall sufficient for a simple 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 100%, so baseline is 3. The description does not add any additional meaning to the parameters beyond what the schema already provides (list_uuid and entry_uuid 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 clearly states the verb 'Remove' and the resource 'an entry from a list', with an additional side effect noted. It distinguishes from sibling tools like didit_lists_entry_create (add) and didit_lists_delete (delete list itself).
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?
No explicit guidance on when to use this tool versus alternatives. The description does not mention when-not to use or compare with siblings like didit_lists_entries_list or didit_lists_entry_create.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_lists_entry_upload_faceAInspect
Add a face entry to a face list by uploading an image directly (no session needed). Use this when you have a photo but no reference_session_id.
| Name | Required | Description | Default |
|---|---|---|---|
| list_uuid | Yes | UUID of a face-type list | |
| image_path | Yes | Absolute path to the face image file | |
| display_label | No | ||
| comment | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the description's addition of 'no session needed' is helpful but not extensive. It doesn't elaborate on other behaviors like limits or side effects, but given annotations, this is adequate.
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 the core action and method, second gives usage guidance. No fluff or repetition. Front-loaded with 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?
Describes core function, method, and when to use. Output schema exists for return values. However, the description omits details on optional parameters (display_label, comment) and prerequisites like list existence, but for a simple tool this 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 50% (list_uuid and image_path described, 'display_label' and 'comment' lack descriptions). The description does not add any additional meaning or constraints beyond the schema, failing to compensate for the undocumented 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?
Description clearly states the action ('Add a face entry'), the method ('uploading an image directly'), and the distinguishing condition ('no session needed'). It effectively differentiates from sibling tools that might require a reference_session_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?
Explicitly instructs to use this tool when having a photo but no reference_session_id, providing clear context for selection over alternatives. This is a model guideline for when 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.
didit_lists_getARead-onlyInspect
Get a single list's details by UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| list_uuid | Yes | UUID of the list |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds no extra behavioral context beyond 'get details'. Adequate but minimal.
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 sentence of 8 words, front-loaded with verb and resource. No unnecessary 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?
Tool is simple with one required parameter, read-only, and has output schema. Description sufficiently covers the purpose and input; output schema handles return 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?
Schema coverage is 100% with description 'UUID of the list' for list_uuid. Description does not add additional 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?
Description clearly states verb 'Get', resource 'single list', and identifier 'UUID'. Distinguishes from sibling tools like didit_lists_list (list all) and didit_lists_create/update/delete.
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?
No explicit guidance on when to use or alternatives. Usage is implied by the resource and parameter, but lacks context to avoid confusion with similar tools like didit_lists_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_lists_listARead-onlyInspect
List all lists (blocklists, allowlists, custom) for the application. Filter by list_type or entry_type.
| Name | Required | Description | Default |
|---|---|---|---|
| list_type | No | Filter: blocklist, allowlist, custom | |
| entry_type | No | Filter: face, document, phone, email, ip_address, device_fingerprint, wallet_address, bank_account, user, business, country, key | |
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 list types but no additional behavioral traits (e.g., side effects, authentication requirements, or scope). It 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?
The description is two sentences (20 words), front-loaded with the action, and contains no unnecessary 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 the output schema exists, return values are covered. However, the description does not mention pagination (limit/offset) or application scope, leaving some functional gaps. It is adequate but not fully comprehensive.
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 descriptions for list_type and entry_type already in the schema. The description merely repeats these, adding no new meaning. Parameters limit and offset lack descriptions in both schema and description, leaving their purpose unclear.
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 lists (blocklists, allowlists, custom) with filtering options, using a specific verb and resource. It distinguishes from siblings like didit_lists_create or didit_blocklist_add.
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 for listing lists with filters, but does not explicitly state when to use alternatives (e.g., didit_lists_get for a single list) or when not to use this tool. No exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_lists_updateAInspect
Rename or update the description of an allowlist/custom list. System blocklists are immutable.
| Name | Required | Description | Default |
|---|---|---|---|
| list_uuid | Yes | UUID of the list | |
| name | No | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it's read-only (false) and not destructive (false). Description adds that system blocklists cannot be updated, which is valuable behavioral context beyond what annotations provide. 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 short sentences that front-load the action. Every word is necessary; 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 simplicity and presence of output schema, the description covers the main update action and the immutability constraint. Could mention partial update behavior or error handling, but overall adequate for the 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?
Schema coverage is low (33%), so description should compensate. Description links 'rename' to the name parameter and 'update description' to the description parameter, but does not clarify that both parameters are optional or provide format constraints. Adds some value but not enough to fully compensate for low 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?
Description states specific actions (rename or update description) on a list resource, distinguishes between allowlist/custom lists and immutable system blocklists, and is clearly differentiated from sibling tools like didit_lists_create and didit_lists_delete.
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 context: use to rename or update description of user-created lists. Explicitly states when not to use (system blocklists are immutable). No explicit alternative named, but it's the only update tool for lists, so guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_org_get_applicationARead-onlyInspect
Get application details (client_id etc.). The api_key is REDACTED — a masked preview + api_key_set flag are returned, never the raw secret. Use didit_org_reveal_application_api_key to obtain the raw key.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | Yes | ||
| application_id | Yes | ||
| access_token | No | Only for stdio mode. Omit in hosted OAuth mode. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so no destructive behavior. The description adds valuable transparency about the API key handling: it is redacted, and only a masked preview and flag are returned. This goes 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 only two sentences and is front-loaded with the core purpose. Every sentence adds value without extraneous 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?
Output schema exists, so return values are covered. The description captures the key behavioral nuance (redacted key) and points to the alternative. For a simple get-by-ID tool, this is sufficient, though it could mention success/error conditions.
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% – only access_token has a description). The description does not explain the required parameters (organization_id, application_id) beyond their names, missing an opportunity to add context. The access_token description is already 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 clearly states 'Get application details (client_id etc.)', specifying the verb 'Get' and the resource 'application details'. It also differentiates from siblings by mentioning the alternative tool for obtaining the raw API key.
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 this tool (to retrieve application details) and provides an alternative (didit_org_reveal_application_api_key) for obtaining the raw key. However, it does not elaborate on prerequisites or scenarios where this tool should be avoided over other similar get tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_org_get_balanceARead-onlyInspect
Get current credit balance and auto-refill settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds value by specifying the exact data returned (credit balance and auto-refill settings). No additional behavioral context like rate limits or authentication needs are mentioned, but the core safety profile is covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the main action, no wasted words. Every word is essential.
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 zero parameters and a simple return value, the description is complete. The existence of an output schema further reduces the need for detailed return descriptions.
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 zero parameters, so the baseline is 4. The description adds no parameter info but it's unnecessary since there are no 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 retrieves current credit balance and auto-refill settings, using a specific verb and resource. It distinguishes effectively from sibling tools like 'didit_org_top_up' which modifies balance.
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 read-only usage but does not explicitly state when to use this tool versus alternatives or provide exclusions. For a simple read tool, this is acceptable but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_org_invite_memberBInspect
Invite a member to the organization (email + role).
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| Yes | |||
| role | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description adds no behavioral context. It does not explain what happens on invitation (e.g., email sent, duplicate handling) or system effects beyond the basic write operation.
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?
A single, front-loaded sentence conveys the essential action and key parameters with no wasted words. It is optimally concise for quick comprehension.
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 availability of sibling tools and the optional nature of organization_id, the description is incomplete. It does not mention that role is optional (contrary to the implication of 'email + role'), prerequisites, or expected outcomes. Output schema exists but is not needed to explain 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 description coverage is only 33% (only organization_id described). The description mentions 'email + role' but adds no new semantics like valid formats, role options, or behavior of optional parameters. It does not compensate 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 'Invite a member to the organization (email + role)' clearly states the action (invite) and the resource (member to organization), distinguishing it from sibling tools like remove or update. The parentheses list the key parameters, making the purpose immediately understandable.
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?
No explicit guidance on when to use this tool vs alternatives such as didit_org_update_member or didit_org_remove_member. The description provides no context for selecting this tool over related ones.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_org_listARead-onlyInspect
List the organizations you belong to (each has an id to pass as organization_id to other tools). In hosted OAuth mode no arguments are needed; in stdio mode pass access_token from login/verify_email.
| Name | Required | Description | Default |
|---|---|---|---|
| access_token | No | Only for stdio mode — Bearer access token from login/verify_email. Omit in hosted OAuth mode. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 behavioral context about mode-specific requirements (OAuth vs stdio) and explains the output's purpose, which goes 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?
Two sentences, front-loaded with the main purpose, and no redundant information. 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?
Given the output schema exists, the description appropriately focuses on purpose, usage modes, and the id's role. It is complete for a read-only listing tool with good annotation coverage.
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 description for access_token. The description adds value by explaining when the parameter is needed (only in stdio mode) and that it should be omitted in OAuth mode, which is not 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 clearly states the tool lists organizations the user belongs to and explains that the returned ids are used for other tools. The verb 'List' is specific and distinguishes it from other 'org_' 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?
It provides usage guidance for both hosted OAuth and stdio modes, including when to pass the access_token. While it doesn't explicitly mention alternatives, the context of siblings and the description imply this is the basic listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_org_list_api_keysBRead-onlyInspect
List API keys (pass application_id for an app's keys).
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, consistent with listing. The description adds the behavioral detail that passing application_id filters keys per app, which is beyond annotations. However, it lacks details like pagination or default behavior when no org ID is provided.
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?
A single, concise sentence with no wasted words. It efficiently conveys the core action and a key usage note.
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 is a simple list with an output schema, the description is largely complete. However, it omits clarification on default behavior when no optional parameters are provided, which could cause confusion.
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 clear parameter descriptions. The description does not add new meaning beyond the schema's 'application_id' description, so baseline score 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 clearly states the verb 'List' and resource 'API keys', with a parenthetical hint about using application_id for app-specific keys. However, it does not explicitly clarify what happens when no application_id is provided (e.g., lists all org keys), leaving minor 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?
The description provides no explicit guidance on when to use this tool vs. alternatives like 'didit_org_reveal_application_api_key' or other list tools. It only hints at parameter usage but does not explain context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_org_list_applicationsBRead-onlyInspect
List the applications in an organization (each has an id to pass as application_id). In hosted OAuth mode pass only organization_id.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | Yes | Organization UUID (from didit_org_list) | |
| access_token | No | Only for stdio mode. Omit in hosted OAuth mode. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds modest context about the output (application IDs) and mode-specific parameter usage, but does not disclose further behavioral traits like 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?
The description is two sentences, front-loads the main purpose, and contains no extraneous information. 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?
Given the presence of an output schema (not shown but noted), the description does not need to detail return values. It covers the core functionality and usage context for hosted OAuth mode. Minor omission: no mention of pagination or limits, but these may be in the output 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?
Input schema has 100% description coverage, so the schema already documents both parameters adequately. The description reinforces that access_token is for stdio mode but adds no new 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?
The description clearly states the tool lists applications in an organization and mentions the returned IDs for further use. It does not explicitly differentiate from sibling tools like didit_org_get_application, but the verb 'list' and context imply it is a batch retrieval operation.
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?
No guidance on when to use this tool versus alternatives. The description only provides parameter usage notes (hosted OAuth mode) but no tool selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_org_list_membersBRead-onlyInspect
List the organization's members.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 clear. The description adds no further behavioral traits (e.g., pagination, rate limits, or whether it returns all members). With annotations covering safety, a score of 3 is appropriate.
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 sentence with no wasted words. It is front-loaded and 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?
The tool has an output schema, so return values do not need to be described in the text. However, for a list tool, one might expect details about filtering or ordering. The description is minimal but sufficient given the schema, yet lacks usage 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?
Schema coverage is 100%; the only parameter (organization_id) has a schema description. The tool description does not add any additional meaning beyond the schema, so baseline 3 is correct.
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 'List the organization's members' clearly states the verb and resource. However, among many org-related sibling tools (didit_org_list, didit_org_list_roles, etc.), it does not distinguish this tool from alternatives, missing an opportunity to clarify 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 provides no guidance on when to use this tool versus alternatives (e.g., didit_org_list, didit_org_list_roles). No prerequisites, context, or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_org_list_rolesBRead-onlyInspect
List the roles available in the organization.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 no further behavioral details, such as pagination, output format, or authentication requirements. Minimal value 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 7-word sentence, front-loaded with the verb and resource. Every word earns its place; 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?
For a simple list tool with an optional parameter and existing output schema, the description is minimally adequate. However, it lacks usage context, pagination info, or any link to further documentation. Could be more complete for an agent unfamiliar with the system.
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 one parameter already well-described ('Organization UUID from didit_org_list. Optional if your token has a single/default org.'). The description adds no additional meaning to the parameter, and baseline is appropriate at 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?
Description clearly states 'List the roles available in the organization' with a specific verb and resource. It distinguishes from sibling list tools by identifying roles as the resource, though it does not elaborate on what constitutes a role.
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?
No guidance on when to use this tool versus alternatives. No prerequisites, context, or exclusions are mentioned. The sibling tools include many other list tools, but the description provides no differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_org_remove_memberCDestructiveInspect
Remove a member from the organization.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| member_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description's 'Remove' aligns. However, it adds no further behavioral context (e.g., irreversibility, cascading effects). 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?
Extremely concise (6 words, one sentence), no unnecessary words. However, it is overly terse and could benefit from minimal 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 destructive action with 2 parameters and an output schema (not provided), the description is too minimal. Missing details on consequences, return value, and constraints. Relies on annotations for safety, but insufficient for complete understanding.
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% (organization_id described, member_id not). The tool description does not add any parameter information to compensate for the missing member_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) and the resource (member from organization), distinguishing it from sibling tools like didit_org_invite_member (add) and didit_org_update_member (modify). It is specific but lacks mention of permanence.
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?
No guidance on when to use this tool versus alternatives, no prerequisites (e.g., required permissions, member not being the last owner), and no conditions for use or avoidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_org_reveal_application_api_keyADestructiveInspect
Return the RAW, un-redacted api_key for an application. This exposes a LIVE SECRET — only call when a human explicitly needs the key to integrate; never log or persist it. Requires confirm:true AND an explicit organization_id + application_id (no defaults).
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | Yes | REQUIRED. No env/context default for this raw-secret tool. | |
| application_id | Yes | REQUIRED. No env/context default for this raw-secret tool. | |
| confirm | Yes | REQUIRED. Must be true to expose the raw key. | |
| access_token | No | Only for stdio mode. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint:true and readOnlyHint:false. The description adds important behavioral context: exposes a LIVE SECRET, must be human-initiated, must not be logged or persisted. It goes beyond annotations to explain the risk.
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, front-loaded with purpose, followed by warnings and requirements. Every sentence earns its place; 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 output schema is present, the description covers purpose, usage guidelines, and safety warnings comprehensively. For a high-risk tool, it provides sufficient context for safe 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?
With 100% schema coverage, baseline is 3. The description adds value by stating 'No env/context default for this raw-secret tool.' and requiring confirm:true. This reinforces the mandatory nature 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 'Return the RAW, un-redacted api_key for an application.' It uses a specific verb (return/expose) and resource (api_key), and distinguishes from siblings like didit_org_list_api_keys and didit_org_get_application by emphasizing the raw, un-redacted nature.
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: 'only call when a human explicitly needs the key to integrate; never log or persist it.' It also specifies prerequisites (confirm:true, explicit IDs). However, it does not explicitly mention alternatives for non-raw key listing, which would strengthen it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_org_top_upADestructiveInspect
Create a Stripe checkout session to top up credits. Returns a checkout URL.
| Name | Required | Description | Default |
|---|---|---|---|
| amount_in_dollars | Yes | Amount in USD (minimum $50) | |
| success_url | No | Optional redirect after successful payment | |
| cancel_url | No | Optional redirect if payment is cancelled |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, so the description carries a lower burden. However, it adds only the output mention (checkout URL) and does not elaborate on behavioral implications like the fact that this initiates a payment flow, which could be important for the agent to understand 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 two concise sentences, front-loaded with the primary action. Every word adds value, and there is no redundancy or unnecessary 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 mentions the output (checkout URL) but omits important context such as the fact that the session must be completed via browser redirect, or that credits are added only after payment. Given the existence of an output schema (not shown), the description could be more complete about the flow.
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 does not add any additional meaning beyond the schema descriptions (e.g., amount minimum, optional URLs). It neither enhances nor detracts from parameter 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?
The description clearly states the action (create a Stripe checkout session), the resource (top up credits), and the output (checkout URL). The name 'didit_org_top_up' is specific among siblings, and there is no other top-up tool, so it distinguishes well.
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 no explicit guidance on when to use this tool versus alternatives, nor does it mention prerequisites (e.g., Stripe configuration) or exclusions. It simply states the action without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_org_update_memberCInspect
Update a member's role.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| member_id | Yes | ||
| role | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false. Description adds no further behavioral traits, such as whether the change is reversible, permission requirements, 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?
Single sentence, front-loaded with the core action. No redundant information, but borderline under-specified.
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 essential context: does not mention that role likely comes from didit_org_list_roles, does not describe return value (output schema exists but not referenced), and no error scenarios.
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 33% (only organization_id described). Description does not clarify member_id or role parameter meanings, valid values, or constraints 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?
Description states 'Update a member's role' which is a specific verb and resource. Among siblings like didit_org_invite_member and didit_org_remove_member, this clearly distinguishes the 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?
No guidance on when to use this tool vs. alternatives (e.g., didit_org_list_members to get member IDs, didit_org_list_roles for valid roles). No prerequisites or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_questionnaire_createAInspect
Create a custom questionnaire. The backend expects title + form_elements (an array of form-element objects, each with an UPPERCASE element_type) — NOT questions.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Questionnaire title | |
| description | No | Description shown to the user | |
| form_elements | Yes | REQUIRED. Array of form-element objects. Each: { element_type (uppercase, one of the allowed types), title (object of locale→string, e.g. {"en":"Your name"}), is_required (bool), and for choice types a `choices` array }. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-destructive mutation. The description adds the important behavioral hint that 'questions' is not accepted, but does not disclose side effects, permissions, or success responses. This is adequate 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 with no fluff. The first states the purpose, the second delivers a critical usage detail. 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?
Given the tool's complexity (many element types) and the presence of an output schema, the description covers the core purpose and a key gotcha. It omits stating the optionality of 'description' but the schema covers that. Overall, 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?
Schema coverage is 100%, so the baseline is 3. The description reinforces that form_elements is required and element_type must be uppercase, but this is already in the schema. The 'NOT questions' hint adds marginal 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 'Create a custom questionnaire' with a specific verb and resource. It distinguishes from sibling tools like didit_questionnaire_update or didit_questionnaire_delete by focusing on creation. The added hint about form_elements vs 'questions' further clarifies the exact 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?
The description implicitly directs the agent to use this tool for creating questionnaires, not for updating or deleting. It provides a corrective hint about the expected input format, but lacks explicit guidance on when to use this vs. alternatives like didit_questionnaire_update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_questionnaire_deleteBDestructiveInspect
Delete a questionnaire.
| Name | Required | Description | Default |
|---|---|---|---|
| questionnaire_id | Yes | Questionnaire UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation 'destructiveHint: true' already signals destructive behavior. The description adds no new behavioral context beyond that, such as whether deletion is permanent or if confirmation is required. With annotations, a score of 3 is appropriate.
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 at one short sentence, which is efficient. However, it could be slightly expanded to include key behavioral notes without sacrificing brevity.
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 parameter set (1 required) and annotations, the description is minimally adequate. However, it lacks explanation of the output (e.g., success response) or any side effects, making it somewhat incomplete for a destructive action.
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 fully describes the single parameter (questionnaire_id as 'Questionnaire UUID'), and coverage is 100%. The description adds no additional 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 the action (delete) and the resource (questionnaire), distinguishing it from sibling tools like create, get, list, and update. However, it could be more specific about the scope (e.g., deleting by ID) and implications.
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?
No guidance on when to use this tool versus alternatives (e.g., questionnaire_update for non-destructive changes). No mention of prerequisites (e.g., questionnaire must exist) or consequences (irreversible deletion).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_questionnaire_getARead-onlyInspect
Get full details of a specific questionnaire (questions, options, translations).
| Name | Required | Description | Default |
|---|---|---|---|
| questionnaire_id | Yes | Questionnaire UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 the tool returns 'questions, options, translations,' providing specific behavioral context beyond the annotations. It 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?
The description is a single sentence that is concise and front-loaded with the core purpose. Every word earns its place; no extraneous 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?
For a simple get-by-ID tool with one required parameter and an output schema (as indicated in context), the description is complete: it tells exactly what the tool returns. No additional explanation is 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?
The input schema has one parameter, questionnaire_id, with description 'Questionnaire UUID.' The description does not add any additional meaning beyond the schema. Schema coverage is 100%, so baseline 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 states 'Get full details of a specific questionnaire (questions, options, translations).' This clearly identifies the action (Get), the resource (questionnaire), and the scope (full details including sub-components). It distinguishes from siblings like didit_questionnaire_list (list all) and didit_questionnaire_create (create new).
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 the tool is used when you need the full details of a specific questionnaire identified by questionnaire_id. It is clear that this is for a single item, contrasting with list or search tools. No explicit when-not or alternatives, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_questionnaire_listARead-onlyInspect
List all custom questionnaires for your application.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, signaling a safe read operation. The description adds no extra behavioral context beyond confirming the list action, which is adequate but not enhanced.
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?
A single, front-loaded sentence with no redundant information. Every word is necessary 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?
The description fully covers the tool's purpose for a simple list-all operation. Given an output schema exists and no parameters, it is sufficiently complete, though it could mention scope (application-specific) as it does.
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?
There are no parameters, and the input schema coverage is 100% trivially. The description correctly implies no filtering is needed. Baseline 4 per guidelines for zero 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 uses a specific verb 'List' and resource 'custom questionnaires,' clearly distinguishing it from sibling tools like 'didit_questionnaire_get' (single item) and 'didit_questionnaire_create' (creation).
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?
No explicit guidance on when to use this tool versus alternatives like 'didit_questionnaire_get' for a single questionnaire. The context is clear enough but lacks exclusion criteria or alternative mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_questionnaire_updateAInspect
Update a questionnaire's title, description, or form_elements (array of form-element objects with UPPERCASE element_type).
| Name | Required | Description | Default |
|---|---|---|---|
| questionnaire_id | Yes | Questionnaire UUID | |
| title | No | ||
| description | No | ||
| form_elements | No | REQUIRED. Array of form-element objects. Each: { element_type (uppercase, one of the allowed types), title (object of locale→string, e.g. {"en":"Your name"}), is_required (bool), and for choice types a `choices` array }. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description aligns with annotations (not read-only, not destructive). Adds that update supports title, description, form_elements. No extra context on permissions, side effects, or failure modes beyond what annotations already 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?
Single, well-structured sentence. Front-loaded with verb and resource, 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 essential update aspects. Missing mention that questionnaire_id is required (though schema covers it) or partial update behavior. With output schema present, return information is not required. Adequate for a simple mutation 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?
Description lists updatable fields and notes form_elements require UPPERCASE element_type. Schema coverage is 50%; title and description lack schema descriptions, so description adds minimal value. The form_elements structure is already detailed in 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?
Clearly states the verb 'update' and the resource 'questionnaire' with specific fields (title, description, form_elements). Distinguishes from sibling tools like create, delete, get, list.
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?
No explicit guidance on when to use vs alternatives. The name implies update, but it does not specify prerequisites, partial updates, or when not to use (e.g., use create for new questionnaires).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_report_exportCRead-onlyInspect
Start an export report. kind ∈ sessions | transactions | businesses | vendor-users | vendor-businesses.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| kind | Yes | ||
| data | No | Filters for the export |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Start an export report,' which implies a mutation or creation action, but the annotations declare readOnlyHint=true, creating a direct contradiction. No additional behavioral traits are disclosed beyond what annotations provide, and 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?
The description is very short and to the point, but it lacks necessary details. It is not wasted, but the conciseness comes at the cost of completeness and clarity in the context of the contradiction.
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 4 parameters (including a nested object), an output schema, and is part of a suite with many related tools, the description is insufficient. It does not explain the export process, return values, or how to use the output schema, leaving significant gaps for an agent to correctly invoke the 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 75%, and the schema already provides adequate descriptions for most parameters. The description adds the allowed values for 'kind' (which are not an enum in the schema), providing marginal added value. However, it does not explain the 'data' object or the optional parameters beyond what the schema states.
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 starts an export report, specifying the 'kind' parameter values, which gives a specific verb and resource. However, it does not explicitly distinguish this tool from sibling report tools like didit_report_list or didit_report_get, leaving a minor gap in 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 implies that this tool is used to initiate an export report, but it offers no explicit guidance on when to use it versus other report tools or any prerequisites. Context signals show many sibling report tools, so clearer usage guidelines would be beneficial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_report_getARead-onlyInspect
Get a report's status/details.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| report_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool is known to be safe. The description adds minimal value beyond stating it gets status/details; no discussion of caching, authorization, 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?
Single sentence, no unnecessary words. Efficiently communicates the tool's function.
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 operation with an output schema, the description is sufficient. It captures the essential purpose and leaves parameter/return details to 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 67% (2 of 3 parameters described). The description does not add meaning to the parameters beyond what the schema provides. The missing report_id description is a gap, but the implied purpose covers it loosely.
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 'Get a report's status/details' clearly states the action (get) and the resource (report). It distinguishes from siblings like didit_report_list (list all reports) and didit_report_get_download_url (get download link).
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 no explicit guidance on when to use this tool versus alternatives (e.g., didit_report_list, didit_report_get_download_url). The implied usage is clear but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_report_get_download_urlCRead-onlyInspect
Get a signed download URL for a finished report.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| report_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 minimal behavioral context by stating the report must be 'finished,' but does not disclose error handling, URL expiration, or other traits. With annotations present, the description adds limited value.
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 sentence that conveys the purpose with no unnecessary words. It is front-loaded and efficient, earning full points for conciseness.
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 (3 parameters, moderate schema coverage, and an output schema), the description is insufficient. It omits important context such as what a 'signed download URL' entails, whether the report must be finished, and any size or time limitations. The output schema exists but the description does not complement it.
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 parameters have descriptions). The description does not add any parameter-specific meaning beyond what the schema already provides. Baseline 3 is appropriate as coverage is moderate but not high enough to require compensation.
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 (Get) and the resource (signed download URL for a finished report), distinguishing it from sibling tools like `didit_report_get` (which likely returns report data) and `didit_report_list` (list of reports). However, it does not explicitly differentiate from `didit_report_get` or other report retrieval methods.
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 no guidance on when to use this tool versus alternatives such as `didit_report_get` or `didit_report_list`. It does not mention prerequisites (e.g., report must be finished) or context where the tool should be avoided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_report_listBRead-onlyInspect
List generated export reports.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 no further behavioral context, but is consistent and adequate given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no waste. It could benefit from slightly more context without becoming verbose.
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 an output schema and readOnly annotations, the description is minimally complete. However, it lacks details about the scope of reports listed or any ordering/filtering, which would improve completeness.
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. The description adds no extra parameter meaning beyond the schema's own descriptions of organization_id and application_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 the action 'List' and the resource 'generated export reports', distinguishing it from sibling tools like didit_report_export and didit_report_get.
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 no guidance on when to use this tool versus alternatives. It does not mention prerequisites, filters, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_add_reviewAInspect
Add a review note to a session's audit trail, optionally changing its status.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| comment | No | Review comment or note | |
| new_status | No | Optional new session status to record with the note |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds context that the operation is additive ('add a review note') and optionally modifies status, which aligns with the 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?
Single sentence that is direct and front-loaded with the key action. No superfluous words; every part 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 description covers the core functionality (add note, optional status) and is complete for a simple tool. The presence of an output schema (as indicated by context) means return values are handled separately. Minor gap: could mention that the session must exist, but that is implied.
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% (2 of 3 parameters have descriptions). The description itself does not add new parameter details beyond the schema, but it reinforces the purpose of the optional new_status parameter. Baseline score of 3 is appropriate given the high 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 action: adding a review note to a session's audit trail, with the optional ability to change its status. It distinguishes from sibling tools like didit_session_update_status (status-only) and didit_session_list_reviews (read-only list).
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 (when adding a review note with optional status change) but does not explicitly state when not to use it or mention alternatives like didit_session_update_status for status-only updates. The guidance is implied but not thorough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_batch_deleteADestructiveInspect
Delete multiple sessions by session numbers, or delete all sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| session_numbers | No | Array of session numbers to delete | |
| delete_all | No | Set true to delete ALL sessions (ignores session_numbers) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description's statement of deletion adds limited value. It does not disclose authorization needs, side effects, or recovery options.
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 sentence, immediately front-loads the verb and resource, and efficiently communicates both usage modes without 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?
Given the simplicity of the tool (two parameters, no nested objects, output schema provided), the description adequately covers core behavior, though could mention return value or confirmation.
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 clear parameter descriptions. The tool description adds no extra 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?
The description clearly states the tool deletes sessions, with two specific modes: by session numbers or all sessions. This distinguishes it from single-session delete tools like didit_session_delete.
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 for batch deletion through 'multiple' and 'all', and siblings include `didit_session_delete` for single deletion, but no explicit guidance on when not to use or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_createAInspect
Create a verification session. Requires workflow_id (created in the Console Workflows page) — the workflow defines which steps run and whether the session is KYC or KYB. Returns session_id, url, and session_token.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes | REQUIRED. UUID of the workflow that defines the verification steps. Selects KYC vs KYB implicitly. | |
| vendor_data | No | Your unique identifier for the user (e.g. user ID). Used to group sessions into a user/business. | |
| callback | No | URL to redirect the user to after verification | |
| callback_method | No | Which device/flow the callback applies to | |
| language | No | Pre-set the verification UI language (ISO code) | |
| metadata | No | Arbitrary JSON stored on the session and echoed in webhooks | |
| contact_details | No | Pre-fill contact info (e.g. email, phone) for the session | |
| expected_details | No | Expected values to validate against (e.g. expected country, IP) | |
| portrait_image | No | Base64 or URL reference portrait used by some workflows |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that this tool creates a session (mutation) and returns specific fields. Annotations already set readOnlyHint=false, so no contradiction. The description adds context beyond annotations by specifying outputs, but does not detail side effects like webhooks 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 two sentences long, front-loads the purpose, and contains no redundant information. 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?
The description, combined with full parameter descriptions and output schema (implied), provides a complete picture: what the tool does, required input, and return values. No critical gaps for a creation 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?
All 9 parameters have descriptions in the schema (100% coverage), so the baseline is 3. The description does not add new parameter-specific information beyond what the schema already 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 'Create a verification session,' specifies the required workflow_id, and indicates the return values (session_id, url, session_token). This distinguishes it from sibling tools like didit_session_list or didit_session_update_status.
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 workflow_id is required and defines the session type (KYC/KYB). It implies a prerequisite (workflow must exist in Console) but does not explicitly tell when not to use this tool or mention alternatives like didit_session_create_import.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_create_importBInspect
Create a bulk import job from a hosted CSV/NDJSON file (e.g. migrating historical verifications into Didit). Pass source_file_url. All imports use Didit's canonical schema. To label a record's source, include the optional per-row provider column in the file itself (defaults to generic) — there is no provider request field.
| Name | Required | Description | Default |
|---|---|---|---|
| source_file_url | Yes | REQUIRED. Publicly fetchable URL of the CSV/NDJSON file to import. | |
| import_type | No | What the rows represent (default user_verification) | |
| source_format | No | File format (default csv) | |
| workflow_id | No | Workflow to associate imported sessions with |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false (write operation) and destructiveHint=false. The description confirms it creates a job and adds context about canonical schema and the lack of a provider request field. However, it does not disclose side effects, whether the job runs asynchronously, or any prerequisites. 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 concise (two sentences) and front-loaded with the core purpose. It efficiently conveys key details without unnecessary words. Could be slightly more structured but is 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 output schema exists and no nested objects, the description covers the main purpose and a notable caveat. It does not mention error handling, authentication needs, or the fact that it is an asynchronous job. For a tool with 4 parameters and many siblings, it is adequate but could include more operational 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?
Schema coverage is 100%, so the schema already describes parameters. The description adds value by clarifying the provider column is per-row in the file, not a parameter. This is helpful but not extensive beyond the schema definitions.
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 creates a bulk import job from a hosted CSV/NDJSON file, with an example of migrating historical verifications. It is specific enough to distinguish from session creation or other import tools, though it does not explicitly call out sibling 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 advises to pass source_file_url and notes the optional provider column, but does not provide explicit guidance on when to use this tool vs. alternatives like didit_session_import_shared or didit_session_create. Usage context is implied by the example but not formally stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_deleteADestructiveInspect
Permanently delete a single verification session and all associated data.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true, so the destructive nature is known. The description adds 'Permanently delete' and 'all associated data,' which supplements the annotation. However, it does not disclose other behavioral traits like whether the action is reversible, required permissions, or immediate consequences beyond the 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 a single, concise sentence (10 words) that is front-loaded with the key action. Every word serves a purpose, and there is no 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?
Given the presence of an output schema and the tool's simplicity (one parameter), the description covers the essential purpose (permanently delete a single session and associated data). Minor gaps exist, such as not clarifying what happens if the session_id is invalid or that deletion is immediate, but it is largely 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 input schema has 0% description coverage for the parameter 'session_id,' and the tool description does not elaborate on its meaning, format, or source. For a simple required string, the agent might infer it, but the description adds no semantic value beyond what the schema minimally 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 'Permanently delete a single verification session and all associated data,' specifying the verb (delete), resource (verification session), scope (single), and the permanent nature. This distinguishes it from sibling tools like didit_session_batch_delete (batch deletion) and other session operations.
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 the tool is for permanently deleting a single session, but it does not provide explicit guidance on when to use it versus alternatives (e.g., didit_session_batch_delete) or conditions like session existence. It lacks context on prerequisites or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_generate_pdfBRead-onlyInspect
Generate a PDF verification report for a session.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and destructiveHint=false, consistent with PDF generation. The description does not add behavioral context beyond annotations (e.g., time, permissions).
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 sentence, efficient. Could add brief context without becoming verbose.
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?
Adequate for a simple tool with one parameter and output schema. Lacks prerequisites or behavior notes.
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 0%. The description does not explain the 'session_id' parameter's purpose or format, relying on 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 tool's purpose: 'Generate a PDF verification report for a session.' It uses a specific verb ('generate') and resource ('PDF verification report for a session'), distinguishing it from sibling session and report 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?
No guidance on when to use this tool versus alternatives (e.g., didit_report_get, didit_session_get). No mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_get_decisionARead-onlyInspect
Get the full verification decision and all extracted data for a session.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | Session UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 that the tool returns 'full verification decision and all extracted data', but does not disclose additional behavioral traits such as required session status or data format details. With annotations covering safety, a score of 3 is appropriate.
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?
A single sentence that is clear and front-loaded. 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?
The tool has one parameter, an output schema, and annotations. The description is sufficient for a simple retrieval tool, though it could benefit from mentioning when to use it (e.g., after session completion).
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% (session_id described as 'Session UUID'). The description does not add any extra meaning beyond the schema. Baseline 3 is correct.
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 'Get' and specifies the resource 'full verification decision and all extracted data for a session'. It distinguishes from sibling tools like didit_session_list (list all sessions) and didit_session_get_import (get import details).
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 the tool is for retrieving decision and extracted data, but does not explicitly state when to use it instead of other session-related tools, nor does it provide exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_get_importARead-onlyInspect
Get the status and summary of a bulk import job.
| Name | Required | Description | Default |
|---|---|---|---|
| import_id | Yes | Import job ID returned by didit_session_create_import |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=true, destructiveHint=false) already indicate a safe read operation. The description reinforces this without adding new behavioral details (e.g., permissions, rate limits, response structure). 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?
One sentence of 10 words, perfectly concise. No filler or redundancy. Structure is clear and 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 presence of an output schema, high schema coverage, and sparse annotations, the description is adequate for a simple read operation. It could mention expected response fields or usage context, but is generally 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 100% for the single parameter import_id. The description adds the origin of the ID ('returned by didit_session_create_import'), which provides context but does not significantly enhance 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?
Description clearly states it retrieves status and summary of a bulk import job. The verb 'get' and resource 'import' are specific. It distinguishes from sibling tools like didit_session_create_import (creation) and didit_session_get_import_errors (errors).
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?
Usage is implied as a follow-up after creating an import, but no explicit when-to-use or alternatives are mentioned. The description does not compare to sibling tools or state prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_get_import_errorsARead-onlyInspect
List per-row errors for a bulk import job (rows that failed validation or processing).
| Name | Required | Description | Default |
|---|---|---|---|
| import_id | Yes | Import job ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so the agent knows it's safe. The description adds that it lists per-row errors, which is consistent with the annotation and provides specific behavioral information.
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, clear sentence with no wasted words. It is front-loaded with the core action and resource.
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 (1 parameter, output schema exists), the description is complete. It explains what errors are listed and the context (bulk import job). The output schema handles 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 description coverage is 100% for the single parameter 'import_id', which already has a description 'Import job ID'. The tool description adds no further meaning beyond that, meeting the baseline for high 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 tool's purpose: 'List per-row errors for a bulk import job (rows that failed validation or processing).' It uses a specific verb ('list') and identifies the resource ('per-row errors for a bulk import job'), distinguishing it from sibling tools like didit_session_get_import.
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 context (for a bulk import job) but does not explicitly state when to use this tool versus alternatives, nor does it mention prerequisites or a when-not-to-use scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_get_import_templateARead-onlyInspect
Download the canonical import template (column headers and format) used by didit_session_create_import.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false; description adds context about being a template for a specific import, which is useful but not critical 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 sentence, front-loaded with actionable verb 'Download', 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 zero-parameter tool with good annotations and output schema, description is complete enough. Could mention template format (e.g., CSV) but not necessary.
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?
No parameters in schema (100% coverage), so description need not add parameter details. Baseline of 4 applies.
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 'Download the canonical import template used by didit_session_create_import' with a specific verb and resource, distinguishing it from sibling tools like didit_session_create_import and didit_session_get_import.
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 before creating an import via didit_session_create_import, but does not explicitly state when or when-not to use it versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_listARead-onlyInspect
List verification sessions for ONE app. If you have multiple apps (or pass no scope) this automatically spans every app, newest first — but didit_session_search is the canonical cross-app tool and what to reach for to answer "my last N sessions". status accepts session-level values: Not Started, In Progress, In Review, Approved, Declined, Expired, Abandoned, Kyc Expired, Resubmitted, Awaiting User.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by session status (Not Started, In Progress, In Review, Approved, Declined, Expired, Abandoned, Kyc Expired, Resubmitted, Awaiting User) | |
| session_kind | No | KYC (user), KYB (business), or all | |
| vendor_data | No | Filter by vendor_data | |
| workflow_id | No | Filter by workflow UUID | |
| search | No | Free-text search | |
| date_from | No | ISO date lower bound | |
| date_to | No | ISO date upper bound | |
| limit | No | Page size (LimitOffset pagination) | |
| offset | No | Pagination offset |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds crucial behavioral context: auto-spans all apps if multiple or no scope, orders newest first. 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?
Two sentences, no fluff. First sentence states core purpose, second provides alternative tool reference and status details. Well-structured 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?
Given 9 parameters and an output schema, the description covers main behavior (scope, ordering, status filtering) and distinguishes from sibling. Could mention pagination or default limit, but overall adequate 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?
Schema coverage is 100%, but the description adds value by explicitly listing all valid status values and clarifying that they are 'session-level values', which is not fully captured in the schema's string type 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 verb 'List' and resource 'verification sessions for ONE app', explicitly distinguishing it from didit_session_search as the cross-app alternative. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool vs. the sibling didit_session_search, including that didit_session_search is the canonical cross-app tool for answering 'my last N sessions'. Provides clear context on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_list_reviewsBRead-onlyInspect
List the review history and activity log for a session.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds minimal behavioral context beyond the annotation, only stating it lists history and logs.
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, concise sentence that is front-loaded with the action. No unnecessary words, but could be slightly expanded for completeness.
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 and an existing output schema, the description is adequate but minimal. It does not mention pagination or output structure, though the output schema covers 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 has one required parameter 'session_id' with 0% coverage (no description). The tool description does not explain the parameter's format, source, or validation, relying solely on the schema which lacks detail.
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 review history and activity log for a session, specifying the verb 'List' and resource 'review history and activity log for a session'. It distinguishes from sibling tools like 'didit_session_add_review' (adds review) and 'didit_session_list' (lists sessions).
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?
No explicit guidance on when to use this tool versus alternatives. It does not mention when not to use it or provide comparisons with sibling tools like 'didit_session_add_review' or 'didit_session_list'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_searchARead-onlyInspect
Search verification sessions ACROSS ALL your apps and organizations in a single call — the efficient way to answer "the last 5 in-review sessions across my apps". Aggregates server-side and returns newest matches first, each tagged with its organization/application. Omit organization_id/application_id to span everything; pass them to narrow scope. status accepts: Not Started, In Progress, In Review, Approved, Declined, Expired, Abandoned, Kyc Expired, Resubmitted, Awaiting User.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by session status (Not Started, In Progress, In Review, Approved, Declined, Expired, Abandoned, Kyc Expired, Resubmitted, Awaiting User) | |
| session_kind | No | KYC (user), KYB (business), or all | |
| workflow_id | No | Filter by workflow UUID | |
| search | No | Free-text search | |
| date_from | No | ISO date lower bound | |
| date_to | No | ISO date upper bound | |
| last_n_days | No | Relative window: include only the last N days (sets date_from/date_to). Alternative to passing date_from/date_to. | |
| limit | No | Max results after merging across apps (default 20, max 200) | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 substantial value beyond annotations by revealing that sessions are aggregated server-side, returned newest first, and tagged with organization/application. This provides key behavioral insights without 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 a single compact paragraph that front-loads the main purpose and use case, followed by aggregate behavior, parameter guidance, and status values. Every sentence provides distinct 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 tool has 10 optional parameters, high schema coverage, an output schema, and annotations covering safety, the description covers the essential usage contexts (cross-app search, scope control, status filtering, relative date window). No gaps in behavioral or usage 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 100%, so baseline is 3. The description adds context for key parameters like organization_id and application_id (omit to span all, pass to narrow), last_n_days (alternative to date range), and limit (max after merging). This elevates the score 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 defines a specific verb 'Search verification sessions' with a scope 'ACROSS ALL your apps and organizations'. It directly addresses a common use case and distinguishes itself from tools like didit_session_list by emphasizing cross-app/cross-org aggregation.
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 guidance on when to use it: for cross-app/cross-org search. It explains how to narrow scope using organization_id and application_id. However, it does not explicitly mention when not to use it or list alternative tools, missing the opportunity to fully differentiate from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_update_dataAInspect
Correct the KYC data extracted from the ID document on a session (reviewer override). Only send the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| document_type | No | ||
| document_subtype | No | ||
| document_number | No | ||
| personal_number | No | ||
| date_of_birth | No | YYYY-MM-DD | |
| date_of_issue | No | YYYY-MM-DD | |
| expiration_date | No | YYYY-MM-DD | |
| issuing_state | No | ISO 3166-1 alpha-3 issuing country | |
| first_name | No | ||
| last_name | No | ||
| gender | No | ||
| address | No | ||
| place_of_birth | No | ||
| nationality | No | ||
| marital_status | No | ||
| extra_fields | No | Document-specific extra fields | |
| parsed_address | No | Structured address override |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond minimal annotations: it clarifies the operation is a mutation for reviewer override and that only specified fields are updated. While annotations only convey non-read-only and non-destructive, the description omits potential side effects like triggering re-verification or downstream impacts.
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: a concise action-resource statement and a clear usage instruction. It is front-loaded with the primary purpose and contains zero 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?
Given the tool's complexity (18 parameters, nested objects, output schema), the description lacks important context about post-update effects, permanence, session state requirements, or any triggers. Even though an output schema exists, the brief description does not adequately cover the operation's implications.
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 33% schema description coverage, the description should compensate but only provides a general instruction to send only changed fields. It does not elaborate on individual parameters such as date formats, enum meanings, or the purpose of nested objects, leaving much ambiguity 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 states the verb 'Correct' and the resource 'KYC data extracted from the ID document on a session', specifying it's a 'reviewer override'. It distinguishes the tool as a partial update operation, setting it apart from other session tools like create or status updates.
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 usage context: 'Only send the fields you want to change' indicates a partial update pattern. It also implies reviewer use via 'reviewer override'. However, it does not explicitly mention when not to use or list alternatives among the many sibling session tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_update_poa_dataAInspect
Correct the Proof of Address data extracted from the POA document on a session (reviewer override). Only send the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| issuing_state | No | ISO 3166-1 alpha-3 issuing country | |
| document_type | No | ||
| document_language | No | ||
| issuer | No | ||
| issue_date | No | YYYY-MM-DD | |
| poa_address | No | ||
| name_on_document | No | ||
| extra_fields | No | ||
| poa_parsed_address | No | Structured address override |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses partial update behavior, but does not detail permissions, side effects, or consequences. Annotations provide minimal info, so description adds some value but lacks depth.
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 sentence front-loads purpose and usage hint. Every word 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?
With 10 parameters and an output schema, the description is too brief. It doesn't explain return values, error cases, or handle nested objects like poa_parsed_address.
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 30% of parameters have schema descriptions. The description adds no extra meaning beyond the partial update hint; many parameters remain undocumented in both schema and 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?
Description clearly states the tool corrects Proof of Address data on a session, specifying it's a reviewer override. It distinguishes from sibling tools like didit_session_update_data by focusing on POA 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?
Description provides guidance on usage: 'Only send the fields you want to change' implies partial update. It also mentions 'reviewer override', giving context but not explicitly comparing to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_session_update_statusAInspect
Approve, decline, or request resubmission of a session. For resubmission, pass new_status='Resubmitted' and nodes_to_resubmit; already-approved steps are kept.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| new_status | Yes | New decision status | |
| comment | No | Reviewer note stored on the audit trail | |
| nodes_to_resubmit | No | Node IDs the user must redo (only for Resubmitted) | |
| send_email | No | Email the user about the status change | |
| email_address | No | Override the recipient email | |
| email_language | No | Language for the notification email |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, so the mutation is expected. The description adds one behavioral trait: for resubmission, already-approved steps are kept. But it does not disclose side effects of approval/decline, required permissions, or reaction of other systems, which would be valuable given the absence of detailed 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 filler. The first sentence states the core purpose, and the second adds critical usage detail for resubmission. 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?
The description is adequate for a straightforward status update tool, especially given an output schema exists. However, it does not cover all statuses equally (e.g., for approval or decline, no additional guidance on parameters like comment or send_email is given), leaving some 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?
With 86% schema coverage, the schema already explains most parameters. The description adds contextual meaning by tying nodes_to_resubmit to the resubmission flow and noting that approved steps persist. This is helpful but does not substantially elevate understanding 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 the tool's function: 'Approve, decline, or request resubmission of a session.' This uses a specific verb and resource, and it distinguishes the tool from session-related siblings (e.g., didit_session_add_review) by focusing on status 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?
The description provides explicit guidance for resubmission ('For resubmission, pass new_status=''Resubmitted'' and nodes_to_resubmit; already-approved steps are kept'). However, it does not give when-to-use or when-not-to-use advice for other statuses or alternatives, leaving the agent to infer from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_transaction_createBInspect
Submit a transaction for monitoring and rule evaluation. transaction_details and subject shapes depend on transaction_category.
| Name | Required | Description | Default |
|---|---|---|---|
| transaction_id | Yes | REQUIRED. Your unique transaction identifier | |
| transaction_category | Yes | REQUIRED. Determines the expected transaction_details/subject shape | |
| transaction_details | Yes | REQUIRED. Category-specific transaction payload | |
| subject | Yes | REQUIRED. The party initiating the transaction (usually a vendor_data reference) | |
| counterparty | No | The other party in the transaction | |
| transaction_at | No | ISO timestamp of the transaction | |
| time_zone | No | ||
| custom_properties | No | Custom values keyed for monitoring rules (custom_values.<key>) | |
| travel_rule_details | No | ||
| network_snapshot | No | ||
| include_crypto_screening | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=false indicating a write operation, the description adds minimal behavioral context beyond 'monitoring and rule evaluation'. It does not mention side effects, synchronous behavior, or what triggers after submission.
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 fluff. Every part contributes to understanding the tool's core function and a key dependency.
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 complexity (11 parameters, nested objects, output schema exists), the description is too minimal. It does not cover prerequisites, authentication, or expected behavior beyond submission. The output schema exists but is not referenced.
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 meaning by stating that transaction_details and subject shapes depend on transaction_category, which is not in the schema. Baseline is 3 due to 64% schema coverage; description provides some extra context but not for all 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 verb 'Submit' and the resource 'transaction for monitoring and rule evaluation', distinguishing it from sibling transaction tools (get, list, search, screen_wallet). The dependency on transaction_category for shapes is also mentioned.
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?
No explicit guidance on when to use this tool vs alternatives like didit_transaction_screen_wallet. The description implies monitoring and rule evaluation but does not state conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_transaction_getARead-onlyInspect
Get a single monitored transaction and its rule-evaluation result.
| Name | Required | Description | Default |
|---|---|---|---|
| transaction_id | Yes | Transaction ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true and destructiveHint=false, so the description's addition of 'monitored transaction and its rule-evaluation result' adds context about the return value without contradicting 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 sentence, front-loaded with the key purpose, and contains no extraneous 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 (one required parameter, output schema present), the description adequately covers the functionality and expected output.
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 100% schema description coverage, the single parameter 'transaction_id' is already documented. The description does not add any meaning beyond what the schema provides, so baseline score 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 clearly states the verb 'Get' and the specific resource 'single monitored transaction' and includes 'rule-evaluation result', distinguishing it from sibling tools like didit_transaction_list or didit_transaction_search that handle multiple transactions.
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 no explicit guidance on when to use this tool over alternatives, such as when a specific transaction ID is known. It is implied from the purpose but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_transaction_listARead-onlyInspect
List monitored transactions for ONE app; with multiple apps (or no scope) it auto-spans all your apps. For a cross-app query prefer didit_transaction_search. Supports limit/offset pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive. Description adds scope behavior (auto-span if multiple apps or no scope) and pagination support. 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?
Two sentences, no redundancy. First sentence front-loads the core purpose and scope; second adds sibling guidance and pagination. 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?
Given low parameter count and presence of output schema, description covers scope and pagination. Lacks details on parameter formats or optionality, but overall adequate for the tool's simplicity.
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 0% so description must compensate. It states 'Supports limit/offset pagination' linking the two parameters to pagination, but doesn't describe format, defaults, or constraints. Meets baseline with minimal additional 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?
Clearly states it lists monitored transactions for one app, distinguishing from the cross-app sibling didit_transaction_search. The verb 'List' and resource 'monitored transactions' are 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?
Explicitly recommends using didit_transaction_search for cross-app queries, and mentions scope behavior (one app vs auto-span). Could add more explicit 'when not to use' but sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_transaction_screen_walletAInspect
Screen a single crypto wallet address for AML risk WITHOUT creating a transaction. Returns risk_score, severity, sanctions_hit, source/destination of funds. Requires transaction monitoring to be configured (a provider key) or returns 409.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet_address | Yes | REQUIRED. The crypto address to screen (must match the chain's address format) | |
| blockchain | Yes | REQUIRED. Asset / chain identifier | |
| direction | No | Optional screening direction context |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description emphasizes no transaction creation, implying read-only operation, but annotations set readOnlyHint=false, contradicting. The description does add behavioral context (409 error), but 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?
Two sentences, front-loaded with purpose, no wasted words. Efficient and easily 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?
With output schema existing, description covers key returns and prerequisite. Minor gap: omits explanation of direction parameter and configuration details. Still fairly complete for a screening 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%, so baseline 3. Description adds no extra meaning beyond schema descriptions; it mentions wallet address and blockchain but not direction in detail.
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 screens a crypto wallet for AML risk without creating a transaction, and lists the returned fields (risk_score, severity, sanctions_hit). It distinguishes from transaction creation tools among 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?
Provides explicit context: when to screen (AML risk assessment) and when not (avoiding transaction creation). Also mentions prerequisite of transaction monitoring configuration and potential 409 error, guiding proper use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_transaction_searchARead-onlyInspect
Search transaction-monitoring (AML) transactions ACROSS ALL your apps and organizations in one call. Omit organization_id/application_id to span everything; pass them to narrow. Returns newest first, each tagged with its org/app.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by transaction status | |
| search | No | Free-text search | |
| date_from | No | ISO date lower bound | |
| date_to | No | ISO date upper bound | |
| last_n_days | No | Relative window: include only the last N days (sets date_from/date_to). Alternative to passing date_from/date_to. | |
| limit | No | Max results after merging (default 20, max 200) | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 it's safe. The description adds behavioral details: 'Returns newest first, each tagged with its org/app.' This goes beyond the annotations by describing ordering and result structure.
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, each packed with meaning. The first sentence states the core function and scope. The second provides parameter guidance and output format. No fluff; 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?
Given the output schema exists, the description doesn't need to detail return values. It mentions ordering and tagging, which is sufficient. For a complex search tool with 8 parameters and no required params, the description provides enough context for an agent to use it correctly. Could briefly note that it's for AML transactions, but that's clear from the first sentence.
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 value by explaining the scope behavior of organization_id and application_id ('Omit... to span everything'), which enhances understanding beyond the schema descriptions. It also clarifies that last_n_days is an alternative to date_from/date_to.
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') and resource ('transaction-monitoring (AML) transactions') and clearly states the scope: 'ACROSS ALL your apps and organizations in one call.' This distinguishes it from sibling tools like didit_transaction_list or didit_transaction_get, which are per-org or per-session.
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 usage context: 'Omit organization_id/application_id to span everything; pass them to narrow.' This tells the agent when to use the tool broadly vs. filtered. It does not explicitly exclude alternative tools, but the scope clarity compensates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_vendor_business_createCInspect
Create a business record manually (KYB).
| Name | Required | Description | Default |
|---|---|---|---|
| vendor_data | No | Your unique identifier for the business | |
| display_name | No | ||
| legal_name | No | ||
| registration_number | No | ||
| country_code | No | ISO 3166-1 alpha-2 country code | |
| status | No | ||
| metadata | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds minimal behavioral context beyond annotations. It declares it is a 'Create' operation, consistent with readOnlyHint=false. However, it does not disclose side effects, idempotency, permission requirements, or any validation behavior that would help an agent anticipate tool 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 extremely short (5 words), which is concise but at the cost of informativeness. It conveys the basic purpose but does not earn its place for a tool with 7 parameters and low schema coverage.
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 (7 parameters, nested objects, output schema), the description is incomplete. It does not explain parameter roles, output format, or prerequisites. The context 'manual KYB' is helpful but insufficient for full understanding.
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 any of the 7 parameters despite low schema description coverage (29%). It fails to add meaning beyond what the schema provides. Parameters like 'vendor_data' or 'country_code' are critical but undocumented in the 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 'Create a business record manually (KYB)' uses a specific verb ('Create') and resource ('business record'), and adds context about the method ('manually') and purpose ('KYB'). This clearly distinguishes it from sibling tools like 'didit_vendor_business_update' or 'didit_vendor_business_delete'.
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 use for manually creating a KYB business record, but provides no explicit guidance on when to use this tool versus alternatives (e.g., automated creation, or updating existing records). No when-not-to-use or exclusion criteria are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_vendor_business_deleteADestructiveInspect
Batch delete businesses by vendor_data list and/or didit_internal_id list, or delete all businesses.
| Name | Required | Description | Default |
|---|---|---|---|
| vendor_data_list | No | ||
| didit_internal_id_list | No | ||
| delete_all | No | Set true to delete ALL businesses |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint: true, so the agent knows this is destructive. The description adds that deletion can be targeted via lists or global. However, it doesn't mention if deletion is permanent, requires authorization, or has cascading effects. With annotations covering the destructive nature, the description provides adequate but not exhaustive 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 a single sentence that front-loads the action and resource. Every word serves a purpose, with no redundancy or fluff. It efficiently conveys the core functionality in a compact form.
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 3 optional parameters and an output schema. The description covers the deletion scenarios but misses a critical constraint: at least one of vendor_data_list, didit_internal_id_list, or delete_all must be provided. Without that note, an agent might call the tool with no parameters, resulting in a no-op or error. The description is otherwise complete for a batch delete 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 low (33% with only delete_all described). The description compensates by explaining that vendor_data_list and didit_internal_id_list are for batch deletion by those identifiers. This adds meaning beyond the bare parameter names in the schema, helping the agent understand their intended use.
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 'Batch delete', the resource 'businesses', and three distinct methods: by vendor_data list, by didit_internal_id list, or delete all. This precisely distinguishes it from sibling tools like didit_vendor_business_update_status or didit_vendor_business_update.
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 for deletion but does not explicitly state when not to use it or suggest alternatives. For example, it doesn't clarify that this tool should not be used for status updates or that delete_all is irreversible. Given the sibling context, an explicit 'when to use vs. when not to' would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_vendor_business_getARead-onlyInspect
Get details of a specific business by its vendor_data identifier.
| Name | Required | Description | Default |
|---|---|---|---|
| vendor_data | Yes | The vendor_data value that identifies the business |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds no further behavioral context beyond stating it gets details. 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?
One concise sentence, front-loaded with action and resource. No redundant 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 read-only tool with output schema present. Description sufficiently covers purpose and parameter; return format is handled by output 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?
Single parameter 'vendor_data' is fully described in schema (100% coverage). Description restates schema without adding new 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?
Clear verb ('Get'), resource ('details of a specific business'), and identifier ('vendor_data'). Distinguishes from sibling tools like list and search.
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?
No explicit when-to-use or alternatives. Purpose is straightforward, but no guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_vendor_business_listARead-onlyInspect
List verified businesses (KYB, grouped by vendor_data) for ONE app; with multiple apps (or no scope) it auto-spans all your apps. For a cross-app lookup prefer didit_vendor_business_search. Supports limit/offset pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true and destructiveHint false, so the tool is safe. The description adds behavioral context: grouping by vendor_data, scope behavior, and pagination support. No contradictions. Does not mention auth or rate limits, but annotations cover safety.
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, no wasted words. Front-loaded with main purpose, then guidance, then pagination details. 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 list tool with output schema and pagination, the description covers all essential aspects: what it lists, scope behavior, pagination, and alternative tool. 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 coverage is 0%, so description carries the burden. It states 'Supports limit/offset pagination', clarifying the purpose of the two parameters. While it doesn't specify format (e.g., integer strings), this is sufficient for a list tool.
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 verified businesses (KYB, grouped by vendor_data) for one app or auto-spans across apps. It distinguishes from sibling didit_vendor_business_search by specifying 'cross-app lookup prefer ...'. The verb 'List' and resource 'verified businesses' are 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?
Explicitly advises to use didit_vendor_business_search for cross-app lookups, providing a clear alternative. Also implies this tool is for single-app or auto-spanning contexts, giving practical usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_vendor_business_searchARead-onlyInspect
Find vendor businesses (KYB companies) ACROSS ALL your apps and organizations in one call. Omit organization_id/application_id to span everything; pass them to narrow. Each hit is tagged with its org/app.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Free-text search (company name, registration number, vendor_data) | |
| vendor_data | No | Filter by your business identifier | |
| status | No | Filter by vendor-business status | |
| date_from | No | ISO date lower bound | |
| date_to | No | ISO date upper bound | |
| last_n_days | No | Relative window: include only the last N days (sets date_from/date_to). Alternative to passing date_from/date_to. | |
| limit | No | Max results after merging (default 20, max 200) | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint. The description adds useful context about cross-org search and result tagging, but doesn't disclose pagination, rate limits, or behavior of the limit parameter beyond schema.
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 with two sentences that front-load the core purpose and key usage hints. No redundant 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 the complexity (9 parameters), full schema coverage, and existence of output schema, the description is fairly complete. It covers the main idea and key parameters, though it could mention the relationship between last_n_days and date range more explicitly.
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. The description adds some context about parameter usage (omit org/app to span, but does not elaborate on individual parameters 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 the tool finds vendor businesses (KYB companies) across all apps and organizations, which is a specific verb+resource. It differentiates from siblings like didit_vendor_business_list by emphasizing the cross-org scope and tagging of hits.
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 omit or include organization_id/application_id to control scope. It implies the tool is for cross-org searches but does not explicitly contrast with alternatives like didit_vendor_business_get or didit_vendor_business_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_vendor_business_updateBInspect
Update a business's profile fields. Only send the fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| vendor_data | Yes | ||
| display_name | No | ||
| legal_name | No | ||
| registration_number | No | ||
| country_code | No | ISO 3166-1 alpha-2 country code | |
| status | No | ||
| metadata | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false (write) and destructiveHint=false (non-destructive). The description adds no behavioral context beyond the word 'Update', such as permissions, idempotency, 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?
Two sentences, zero wasted words, front-loaded with the primary action. Highly concise and 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 having an output schema, the description is too brief. It does not mention return value, error handling, or context for the 7 parameters. More detail is needed for a mutation tool with 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?
Schema coverage is only 14% (1 of 7 params described). The description only adds the insight about partial updates ('Only send the fields you want to change') but does not explain other parameters or their 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 'Update a business's profile fields' with a specific verb and resource. It distinguishes from sibling 'didit_vendor_business_update_status' which updates only status, and other CRUD tools like create/get/delete.
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 updating fields) and includes the hint 'Only send the fields you want to change' for partial updates, but lacks explicit guidance on when not to use or comparisons to alternatives like create or delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_vendor_business_update_statusBInspect
Set a business's monitoring status (ACTIVE, FLAGGED, or BLOCKED).
| Name | Required | Description | Default |
|---|---|---|---|
| vendor_data | Yes | ||
| status | Yes | New status |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds minimal behavioral context beyond annotations. Annotations indicate it is not read-only and not destructive, but the description does not disclose any additional traits like required permissions 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?
Single sentence, no extraneous words. Front-loaded with the action and resource.
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 status update, the description covers the core functionality, but it lacks context on the 'vendor_data' parameter and does not reference any output schema 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 explains the 'status' parameter's possible values, but the 'vendor_data' parameter is left undocumented. With 50% schema coverage, the description partially compensates but remains incomplete.
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 ('Set'), the resource ('business's monitoring status'), and the allowed values ('ACTIVE, FLAGGED, or BLOCKED'). It distinguishes from sibling tools like didit_vendor_business_update which updates other fields.
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?
No guidance on when to use this tool versus alternatives. There is no mention of prerequisites, exclusions, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_vendor_user_createBInspect
Create a user record manually (e.g. to pre-register a vendor_data identity or attach allowlisted emails/phones).
| Name | Required | Description | Default |
|---|---|---|---|
| vendor_data | Yes | REQUIRED. Your unique identifier for the user | |
| full_name | No | ||
| display_name | No | ||
| date_of_birth | No | YYYY-MM-DD | |
| status | No | ||
| metadata | No | ||
| approved_emails | No | ||
| approved_phones | No | ||
| issuing_states | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, meaning the tool is a mutation but not destructive. The description adds no further behavioral context such as auth requirements, rate limits, or side effects beyond stating 'create'. For a mutation tool without full annotations, this is insufficient.
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 sentence of 20 words, front-loading the core action 'Create a user record manually' and providing key examples. Every word is meaningful, with no fluff or repetition.
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 (9 parameters, output schema, nested objects), the description is too brief. It does not cover many parameters or fully explain the manual creation process. While output schema exists and reduces need for return value explanation, the description still lacks sufficient detail for an AI agent to use the tool confidently.
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 (22%), so the description must compensate. It hints at 'attach allowlisted emails/phones' which maps to approved_emails and approved_phones parameters, but many parameters (full_name, display_name, status, metadata, issuing_states) are not explained. The description adds some value but not enough for full comprehension.
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 'create' and the resource 'user record', with specific use cases like pre-registering a vendor_data identity or attaching allowlisted emails/phones. This differentiates it from sibling tools such as didit_vendor_user_update, didit_vendor_user_get, etc.
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 implied usage via examples (pre-register, attach allowlisted items) but lacks explicit guidance on when to use this tool versus alternatives like didit_vendor_user_search or didit_vendor_user_list. No exclusions or when-not conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_vendor_user_deleteADestructiveInspect
Batch delete users by vendor_data list, or delete all users.
| Name | Required | Description | Default |
|---|---|---|---|
| vendor_data_list | No | Array of vendor_data values to delete | |
| delete_all | No | Set true to delete ALL users |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true and readOnlyHint=false, indicating a destructive write operation. The description adds context about the two deletion modes, which is helpful. No contradictions. It could mention that deletions are irreversible, but given the destructive hint, the agent is sufficiently warned.
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 sentence that efficiently conveys the tool's capability. No unnecessary words, and it covers both operational modes. Perfectly concise for the information it needs to convey.
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 that the tool has only two simple parameters, clear annotations, and an output schema (as indicated), the description is complete. It informs the agent of the two possible actions and no critical information is missing. The agent can confidently use this tool based on the provided 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?
Schema description coverage is 100%, so the parameters are well-documented. The description succinctly restates the two modes: 'by vendor_data list' corresponds to vendor_data_list, and 'delete all users' corresponds to delete_all. It adds no new meaning beyond what the schema already provides, which is acceptable for 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 clearly states the tool's purpose: 'Batch delete users by vendor_data list, or delete all users.' It specifies the verb 'delete' and the resource 'users', and distinguishes between two modes. Among sibling tools with similar prefixes, this concrete purpose stands out.
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 this tool: when you need to delete vendor users either by a list of vendor_data or all at once. It does not explicitly state not to use it for other user types or compare to other delete tools, but the tool name and resource make it clear enough. Slight improvement possible with more explicit exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_vendor_user_getARead-onlyInspect
Get details of a specific user by their vendor_data identifier.
| Name | Required | Description | Default |
|---|---|---|---|
| vendor_data | Yes | The vendor_data value that identifies the user |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so the description adds minimal behavioral context (only 'Get details'). No contradictions, but the description does not enrich 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 a single focused sentence of 12 words, front-loading the action and resource. Every word is necessary; 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 output schema exists, the description does not need to explain return values. It covers all necessary information for a simple read operation by a unique identifier.
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 parameter description in the schema already explains 'vendor_data'. The tool description simply repeats the concept without adding new semantic 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 uses specific verb 'Get details' and resource 'specific user', clearly distinguishing from sibling tools like didit_vendor_user_list (list all) and didit_vendor_user_search (search by criteria) by specifying identification via 'vendor_data identifier'.
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 does not explicitly state when to use this tool versus alternatives like list or search, but the context of having a vendor_data identifier implies its use case. No exclusions or alternative references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_vendor_user_listARead-onlyInspect
List verified users (grouped by vendor_data) for ONE app; with multiple apps (or no scope) it auto-spans all your apps. For a cross-app customer lookup prefer didit_vendor_user_search. Supports limit/offset pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds concrete behavioral traits: grouping by vendor_data, scope spanning, pagination support. Annotations already indicate read-only and non-destructive, so 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?
Two concise sentences with front-loaded purpose and immediate usage guidance. 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?
Given output schema exists and annotations, description covers scope, pagination, and alternative tool. No missing context for a list 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?
Description adds meaning to parameters by mentioning pagination support, but does not specify format or constraints for limit/offset. Schema has 0% description coverage, so description 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?
Description uses specific verb 'list' and resource 'verified users', clearly explains scope behavior (one app vs multiple) and distinguishes from sibling tool didit_vendor_user_search.
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 avoid this tool ('For a cross-app customer lookup prefer didit_vendor_user_search') and describes the single-app vs multi-app behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_vendor_user_searchARead-onlyInspect
Find vendor users (your end customers) ACROSS ALL your apps and organizations in one call — e.g. locate a customer by vendor_data/email/name without knowing which app they're in. Omit organization_id/application_id to span everything; pass them to narrow. Each hit is tagged with its org/app.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Free-text search (name, email, vendor_data) | |
| vendor_data | No | Filter by your customer identifier | |
| status | No | Filter by vendor-user status | |
| date_from | No | ISO date lower bound | |
| date_to | No | ISO date upper bound | |
| last_n_days | No | Relative window: include only the last N days (sets date_from/date_to). Alternative to passing date_from/date_to. | |
| limit | No | Max results after merging (default 20, max 200) | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, which the description supports by describing a search operation. The description adds behavioral context beyond annotations: the tool searches across all apps/orgs and tags results with their org/app, which is useful for the agent to understand output structure.
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 four sentences, each conveying essential information. The main action is front-loaded, and every sentence adds value. There is no redundancy or 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?
Given the tool's complexity (9 parameters) and the existence of an output schema, the description covers the core functionality, usage scope, and parameter guidance. It doesn't explain the output schema, but that is handled by the output schema itself. The description is complete enough for an agent to understand when and how to invoke the 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 100%, so the baseline is 3. The description mentions parameters like 'organization_id/application_id' but does not add significant new meaning beyond what the schema already provides. It summarizes the behavior but doesn't elaborate on parameter syntax or 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 clearly states the tool's purpose: finding vendor users (end customers) across all apps and organizations in one call. It uses specific verbs ('Find', 'locate') and resources ('vendor users', 'apps', 'organizations'), and distinguishes itself from sibling tools like didit_vendor_user_list by emphasizing cross-app search capability.
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 the tool: 'Omit organization_id/application_id to span everything; pass them to narrow.' This tells the agent how to adjust parameters based on search scope. While it doesn't explicitly state when not to use it, 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.
didit_vendor_user_updateAInspect
Update a user's profile fields. Only send the fields you want to change. To change ONLY the monitoring status, prefer didit_vendor_user_update_status.
| Name | Required | Description | Default |
|---|---|---|---|
| vendor_data | Yes | The vendor_data value that identifies the user | |
| full_name | No | ||
| display_name | No | ||
| date_of_birth | No | YYYY-MM-DD | |
| status | No | Monitoring status | |
| metadata | No | ||
| approved_emails | No | ||
| approved_phones | No | ||
| issuing_states | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutation (readOnlyHint=false) and non-destructive (destructiveHint=false). Description adds no extra behavioral context beyond stating update operation.
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?
Despite output schema existing, description lacks parameter semantics and behavioral details for a complex tool with 9 parameters and 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?
Schema coverage is low (33%), and description does not explain parameter meanings beyond a general usage tip. Does not compensate for missing 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?
Description clearly states verb 'Update' and resource 'user's profile fields'. It distinguishes from sibling didit_vendor_user_update_status by specifying when to use the sibling for status-only updates.
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 send only fields to change and to prefer didit_vendor_user_update_status for monitoring status changes, providing clear when-not and alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_vendor_user_update_statusBInspect
Set a user's monitoring status (ACTIVE, FLAGGED, or BLOCKED).
| Name | Required | Description | Default |
|---|---|---|---|
| vendor_data | Yes | The vendor_data value that identifies the user | |
| status | Yes | New status |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only and non-destructive behavior. The description adds the specific status values but does not disclose any side effects, reversibility, or authorization requirements beyond what annotations offer.
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?
A single, front-loaded sentence with no wasted words, efficiently conveying the core 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?
For a simple status update with two parameters and an output schema, the description is sufficiently complete. It lacks explanation of prerequisites or behavioral details, but the low complexity keeps it 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 coverage is 100%, so parameters are fully documented in the schema. The description adds no additional meaning beyond listing the enum values already present 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 clearly states the verb ('Set'), the resource ('user's monitoring status'), and the allowed values ('ACTIVE, FLAGGED, or BLOCKED'), distinguishing it from sibling tools that update other aspects of a vendor 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 provides no guidance on when to use this tool versus alternatives like didit_vendor_user_update, nor any prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_verify_ageBInspect
Estimate a person's age from a facial image. Also performs passive liveness check.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| image_path | Yes | Absolute path to facial image file | |
| vendor_data | No | Optional identifier to link the result to a user |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description does not clarify behavioral aspects such as whether the image is stored, if a new session or record is created, or what the output format is. While there is no contradiction with annotations, the description adds minimal extra context beyond stating the basic function.
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: one sentence with two clear clauses. It covers the core function without excess wording. Every word serves a purpose, making it easy for an agent to parse quickly.
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 that output schema exists (so return values are covered elsewhere), the description adequately states the main functions. However, it lacks context on image quality requirements, whether multiple faces are handled, or how the liveness check impacts age estimation. These gaps mean the description is merely adequate but not fully 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 100% description coverage, so the baseline is 3. The description does not add any additional parameter insights beyond what the schema already provides (e.g., vendor_data is just 'optional identifier to link result to user' in both). No enhancement is provided.
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 estimates age from a facial image and also performs a passive liveness check. This specifies the verb 'estimate' and the resource 'age', and distinguishes it from sibling tools like didit_verify_passive_liveness (which only does liveness) and didit_verify_id (which does ID verification).
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?
No guidance on when to use this tool versus alternatives. For example, it does not mention that for liveness-only checks, didit_verify_passive_liveness might be more appropriate, or that for full identity verification, didit_verify_id should be used. The description only states what the tool does, not when to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_verify_amlBInspect
AML screening against global watchlists, PEP lists, sanctions, and (optionally) adverse media. Supports person and company entity types.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| full_name | Yes | REQUIRED. Full name to screen | |
| entity_type | No | Defaults to person | |
| date_of_birth | No | YYYY-MM-DD (improves match accuracy) | |
| nationality | No | ISO country code (improves match accuracy) | |
| document_number | No | ||
| include_adverse_media | No | Include adverse-media findings | |
| include_ongoing_monitoring | No | Enroll the entity for ongoing monitoring | |
| vendor_data | No | ||
| metadata | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations set readOnlyHint=false and destructiveHint=false, implying mutation. The description only says 'screening' without clarifying side effects (e.g., if results are stored, if it triggers alerts). Adds minimal 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: first states purpose, second lists entity types. No fluff, front-loaded, 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?
Given output schema exists (not shown), description doesn't need to explain return values. But it omits prerequisites, result format, or whether it creates records. Adequate but not thorough.
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 73% (high), so description does not need to add much. The description mentions entity types already covered by the enum. No additional parameter meaning is provided beyond what's 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 clearly states the tool screens against AML-related lists (watchlists, PEP, sanctions, adverse media) and supports person and company entity types. It distinguishes from sibling tools like didit_verify_id and didit_verify_age.
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?
No guidance on when to use this tool versus alternatives (e.g., other verification tools). No when-not-to-use or alternative tool suggestions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_verify_databaseCInspect
Validate identity data against national and global authoritative data sources. issuing_state (ISO 3166-1 alpha-2) is required and selects which sources run.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| issuing_state | Yes | REQUIRED. ISO 3166-1 alpha-2 country code that selects the data sources to query | |
| first_name | No | ||
| last_name | No | ||
| middle_name | No | ||
| full_name | No | ||
| date_of_birth | No | YYYY-MM-DD | |
| document_number | No | ||
| document_type | No | ||
| personal_number | No | ||
| tax_number | No | ||
| gender | No | ||
| nationality | No | ||
| services | No | Optional service_ids to restrict which sources run | |
| partial_match_action | No | ||
| no_match_action | No | ||
| vendor_data | No | ||
| metadata | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false (mutation) and destructiveHint=false. The description does not disclose side effects (e.g., record creation, cost), permission needs, or what happens after validation. 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 very short (two sentences) with no redundancy. It front-loads the core purpose and critical parameter, but could integrate the issuing_state note more naturally.
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 19 parameters and an output schema, the description lacks coverage of how inputs map to the verification process, what outputs to expect, and how actions like partial_match_action work. The existing description is too thin for the 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?
With 26% schema description coverage, the description only elaborates on issuing_state ('selects which sources run'). Other critical parameters (e.g., first_name, document_number, partial_match_action) are not explained beyond schema labels, leaving the agent without 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?
The description clearly states the tool validates identity data against authoritative data sources and mentions issuing_state selects sources. It distinguishes from siblings like didit_verify_id (document verification) by focusing on database checks, though could specify the type of databases.
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?
No guidance on when to use this tool versus alternatives like didit_verify_id, didit_verify_aml, etc. The description does not mention prerequisites, limitations, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_verify_email_checkAInspect
Verify the OTP code sent to an email. Max 3 attempts per code.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| Yes | |||
| code | Yes | Verification code from email |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only and non-destructive nature. The description adds value by disclosing a maximum of 3 attempts per code, alerting the agent to a rate limit behavior 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?
Two sentences, each adding distinct value: the first stating the primary action, the second a critical behavioral note. No wasted words, and the key verb 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 presence of an output schema and annotations, the description covers the core action and a constraint. It does not mention the prerequisite of having sent a code, but overall it sufficiently completes the picture 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 75% (3 of 4 parameters have descriptions). The tool description does not add meaning beyond the schema, so the baseline score 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?
Description explicitly states the tool verifies an OTP code sent to an email, distinguishing it from the sending counterpart. It also adds a specific behavioral constraint (max 3 attempts). This clearly communicates the core function and 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 implies usage after sending an OTP via a companion tool like didit_verify_email_send, but does not explicitly state when to use this tool versus alternatives. No when-not-to guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_verify_email_sendAInspect
Send a one-time verification code to an email address. Code valid for 5 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| Yes | Email address to verify |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, destructiveHint=false) indicate a non-read, non-destructive operation. The description adds context by specifying the code's 5-minute validity, which is useful for agent decision-making.
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 concise sentences, front-loaded with the action, and contains 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 send-verification-code tool, the description covers core behavior and temporal constraint. Presence of output schema likely covers return values, so completeness is 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 coverage is 100% with all parameters described. The description adds no additional parameter meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends a one-time verification code to an email address, and specifies the code is valid for 5 minutes. This distinguishes it from sibling tools like didit_verify_email_check.
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 for email verification but does not provide explicit when-to-use or when-not-to-use guidance relative to sibling tools. No prerequisites or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_verify_face_matchAInspect
Compare two facial images to determine if they belong to the same person (1:1 face matching). The score is symmetric, so image order does not affect the result.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| image_1_path | Yes | Absolute path to the first facial image (e.g. the selfie) | |
| image_2_path | Yes | Absolute path to the second facial image (e.g. the ID portrait) | |
| vendor_data | No | Optional identifier to link the result to a user |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds symmetry property beyond annotations (which only give readOnlyHint=false, destructiveHint=false). However, does not disclose authorization needs, image handling, or other side effects typical for a write operation.
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 no wasted words. Front-loaded with the core purpose, making it highly 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?
Output schema exists, so return values are covered. Parameter descriptions are in schema. However, missing usage context for a specialized verification tool among many siblings (e.g., when to use face_match vs face_search).
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 tool description adds no additional parameter meaning beyond what the schema already 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 compares two facial images for 1:1 matching, with specific verb 'compare' and resource 'facial images'. It distinguishes from sibling tools like face_search (1:N) by explicitly mentioning 1:1 matching.
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?
No explicit guidance on when to use this vs alternatives like face_search or passive_liveness. Only mentions score symmetry, but no contextual usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_verify_face_searchAInspect
Search for a face against a database of previously verified faces (1:N face matching).
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| image_path | Yes | Absolute path to facial image file | |
| vendor_data | No | Optional identifier to link the result to a user |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description only says 'Search for a face'. It does not explain side effects (e.g., whether the search results in any state changes or logging). Minimal value added 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 a single sentence that efficiently conveys the tool's purpose. 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?
Given the tool's simplicity and the presence of an output schema, the description sufficiently explains the input but could benefit from clarifying output behavior (e.g., match found, confidence score). Still adequate 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 100%, and the description adds no parameter-level details beyond what the schema already provides. Baseline score 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 clearly states the action ('Search for a face') and the resource ('against a database of previously verified faces'), specifying it's 1:N matching. This distinguishes it from siblings like didit_verify_face_match (likely 1:1) and didit_verify_passive_liveness (liveness check).
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 for 1:N face matching but does not explicitly state when to use this tool versus alternatives like didit_verify_face_match or didit_verify_passive_liveness. No when-not-to-use context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_verify_idAInspect
Verify an identity document by submitting front (and optionally back) images. Returns structured OCR data and authenticity checks.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| front_image_path | Yes | Absolute path to front image file | |
| back_image_path | No | Absolute path to back image file (optional) | |
| vendor_data | No | Optional identifier to link the result to a user | |
| perform_document_liveness | No | Run document-presence (anti-screenshot) checks | |
| minimum_age | No | Decline if the extracted age is below this value | |
| preferred_characters | No | Preferred OCR script |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false. Description adds that it returns OCR data and authenticity checks, which is useful but does not elaborate on side effects, rate limits, or authentication needs. Adequate beyond annotations 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?
Description is a single sentence plus return-value context, with no redundant information. Purpose and behavior are stated upfront without 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 output schema exists, return values are sufficiently explained. Description covers purpose and basic behavior. It does not detail optional parameters or prerequisites (e.g., file path requirements), but schema handles those. Nearly complete for selection and basic 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% with descriptions for all 8 parameters. Description mentions front and optionally back images, matching schema. No additional semantic context beyond what schema provides, so baseline 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?
Description clearly states the tool verifies identity documents using front/back images and returns OCR data and authenticity checks. It distinguishes from sibling verification tools (face match, AML) through its focus on document images.
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?
Description implies usage for identity document verification but does not explicitly state when to use this tool versus alternatives like didit_verify_face_match or didit_verify_poa. No when-not or context exclusion provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_verify_kyb_searchAInspect
Search official company registries for a business by name and/or registration number. Returns candidate matches; pass a candidate's kyb_response_id to didit_verify_kyb_select to pull the full record.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| country_code | Yes | REQUIRED. ISO 3166-1 alpha-2 country code | |
| name | No | Company name to search | |
| registration_number | No | Registration number to search | |
| search_type | No | Name match strategy | |
| vendor_data | No | ||
| metadata | No | ||
| webhook_url | No | Optional URL notified when the registry result resolves |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, which may imply the tool modifies some state (e.g., logging searches), but the description only mentions 'Search' without disclosing any side effects. No additional behavioral context like rate limits or authentication requirements is provided.
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 that cover purpose, input, output, and follow-up action. No extraneous information, every sentence is meaningful.
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 complexity (9 parameters, 1 required) and the presence of an output schema, the description provides sufficient context about the tool's operation and next steps. It could improve by explaining interaction between name and registration_number or by noting any 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 high (78%), so the baseline is 3. The description adds value beyond the schema by specifying sources for organization_id and application_id (didit_org_list and didit_org_list_applications), and by clarifying the role of search_type and webhook_url. Some parameters like vendor_data and metadata remain only partially 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?
The description clearly states the action ('Search'), the resource ('official company registries'), and the input criteria ('by name and/or registration number'). It also distinguishes from the sibling tool didit_verify_kyb_select by describing the output as candidate matches and specifying the next step.
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 (search for companies by name/number) and explicitly guides the agent to pass a candidate's kyb_response_id to didit_verify_kyb_select for full records. However, it does not provide guidance on when not to use it or alternatives among other verify tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_verify_kyb_selectAInspect
Resolve a candidate from didit_verify_kyb_search into a full company registry record. kyb_response_id is the per-search candidate handle returned by the search.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| kyb_response_id | Yes | REQUIRED. Candidate handle from didit_verify_kyb_search | |
| vendor_data | No | ||
| metadata | No | ||
| save_api_request | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only (false) and not destructive (false). Description adds that it resolves a candidate, but does not disclose potential side effects or auth requirements beyond what is implied.
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, no redundant 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 the presence of an output schema, the description suffices for core usage, but could elaborate on optional parameters like vendor_data and metadata.
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 description adds meaning for kyb_response_id ('Candidate handle from didit_verify_kyb_search') but does not clarify vendor_data, metadata, or save_api_request, which lack 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 uses specific verb 'resolve' and resources 'candidate from didit_verify_kyb_search into full company registry record', clearly distinguishing it from siblings like didit_verify_kyb_search.
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 after didit_verify_kyb_search by referencing 'kyb_response_id ... returned by the search', but does not explicitly state when not to use it or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_verify_passive_livenessAInspect
Passive liveness detection -- verify a person is physically present from a single image (no interaction required).
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| image_path | Yes | Absolute path to facial image file | |
| vendor_data | No | Optional identifier to link the result to a user |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, so the tool is a non-destructive mutation. Description adds that it uses a single image for passive detection, but does not disclose side effects, authentication requirements, or result format. With annotations present, the description provides some but not extensive 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?
Single, clear sentence with no superfluous text. Essential information is front-loaded (passive liveness detection). Highly 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?
Given the tool's simplicity (4 parameters, 1 required, output schema present, annotations provided), the description adequately covers the core functionality. Could add more on typical usage contexts (e.g., identity verification workflows) but is sufficient for selection.
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 does not add meaningful detail beyond the schema; it mentions 'single image' matching image_path, but no additional 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?
Description clearly states it performs passive liveness detection from a single image, using a specific verb ('verify') and resource ('passive liveness'). It distinguishes from sibling verification tools (e.g., face match, ID verification) by emphasizing passive and single-image nature.
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?
Description implies usage for liveness verification but does not explicitly state when to use or avoid this tool versus alternatives like didit_verify_face_match or didit_verify_id. No exclusion criteria or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_verify_phone_checkAInspect
Verify the OTP code sent to a phone number. Max 3 attempts per code.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| phone_number | Yes | ||
| code | Yes | Verification code from SMS |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false. The description adds valuable behavioral context by stating the max attempts per code constraint, which influences agent decision-making (e.g., avoid exceeding attempts). 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 extremely concise: one clear sentence and a key constraint. Every word adds value, with 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?
Given the presence of an output schema, the description adequately covers the tool's purpose and constraints. It does not detail prerequisites (e.g., prior OTP send) or expiration, but for a simple verification tool this is acceptable.
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 high coverage (75%), with only phone_number lacking a description. The description does not add additional meaning to parameters beyond what the schema provides, resulting in a 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: verifying an OTP code sent to a phone number. It distinguishes itself from siblings like didit_verify_phone_send and didit_verify_email_check by focusing on verification with a specific resource (phone) and action (verify OTP).
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 implicitly suggests usage after sending an OTP via didit_verify_phone_send, but lacks explicit 'when to use' or 'when not to use' guidance. The max attempts constraint is useful but does not fully clarify the context versus alternative verification tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_verify_phone_sendAInspect
Send a one-time verification code to a phone number via SMS. Code valid for 5 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| phone_number | Yes | Phone number with country code (e.g. +1234567890) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, so mutation is expected. The description adds value by revealing that the code expires after 5 minutes, which is a behavioral detail beyond annotations. However, it does not mention potential side effects like rate limits or costs.
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 no wasted words. The action is front-loaded, and the expiration detail is included. Could be improved by structuring into a single sentence with clear action and constraint, but it is already 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?
Output schema exists, so return details are not needed. The description adequately covers the purpose and a key behavioral trait (expiration). It does not mention any prerequisites or constraints on phone number format beyond what is in the schema, but it is sufficient for a simple send action.
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%, meaning the schema already describes all three parameters. The description adds no extra semantic meaning beyond what is in the schema, so baseline score applies.
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 (send a one-time verification code via SMS) and specifies a constraint (code valid for 5 minutes). It is distinct from sibling tools like didit_verify_phone_check and didit_verify_email_send.
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 the tool is used to initiate verification before calling didit_verify_phone_check, but it does not explicitly state when to use this tool versus alternatives or provide any prerequisites. Usage guidance is implied by naming convention and sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_verify_poaBInspect
Proof of Address verification. Submit a single document image to extract and validate address information.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| document_image_path | Yes | Absolute path to the POA document image | |
| vendor_data | No | Optional identifier to link the result to a user | |
| expected_address | No | Address to validate the document against | |
| expected_country | No | ISO 3166-1 alpha-2 country code to validate against | |
| expected_first_name | No | ||
| expected_last_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, indicating mutation is possible but not destructive. The description adds that the tool 'extract[s] and validate[s] address information,' but does not disclose details like what happens on validation failure, required permissions, or whether the document is stored. It adds some context beyond annotations but not enough for full 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 extremely concise: two sentences that immediately convey the tool's purpose and action. Every word earns its place, with 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?
Given the tool's complexity (8 parameters, output schema present, 1 required param), the description is too brief. It omits prerequisites (e.g., need for organization_id/application_id from other tools), does not differentiate from siblings like didit_verify_id, and fails to explain how the validation works or what the output contains (though output schema exists). Significantly incomplete.
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 75% schema coverage, the input schema already documents most parameters. The description adds meaning by framing the tool's operation as 'extract and validate address information,' which implicitly explains expected_address, expected_country, and expected_name fields. However, it does not elaborate on required vs optional parameters or the role of vendor_data. Overall, marginal value 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's purpose: 'Proof of Address verification' by 'submit[ting] a single document image to extract and validate address information.' It uses a specific verb ('verify') and resource ('proof of address'), distinguishing it from sibling verification tools like didit_verify_id and didit_verify_age.
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 lacks guidance on when to use this tool versus alternatives like didit_verify_id or didit_verify_database. It does not mention prerequisites (e.g., need for organization_id or application_id) or scenarios where this tool is unsuitable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_webhook_createAInspect
Create a webhook destination. The response includes the signing secret used to verify the X-Signature header on delivered events.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | REQUIRED. Human-readable name | |
| url | Yes | REQUIRED. HTTPS endpoint to receive events | |
| enabled | No | Whether the destination receives events (default true) | |
| webhook_version | No | Payload version (v3 recommended) | |
| subscribed_events | No | Event types to deliver (e.g. status.updated, data.updated, user.created). Omit to receive all. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it is not read-only and not destructive, which aligns with creation. The description adds valuable behavioral information by stating that the response includes the signing secret for verifying X-Signature headers.
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 succinct sentences: first states the core purpose, second adds an important behavioral insight about the response. 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?
With an output schema available and a clear description, the tool is largely complete. Minor missing details (e.g., idempotency, duplicate handling) but acceptable for a straightforward creation 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 100%, so the schema already details all parameters. The description does not add parameter-specific semantics beyond the schema, maintaining the baseline 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 verb ('Create') and resource ('webhook destination'), and distinguishes it from sibling webhook tools (delete, get, list, update).
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?
No explicit when-to-use or alternatives guidance is provided. The description assumes the agent understands the context of webhook creation, but does not discuss prerequisites or when to avoid this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_webhook_deleteADestructiveInspect
Delete a webhook destination so it stops receiving events.
| Name | Required | Description | Default |
|---|---|---|---|
| destination_uuid | Yes | Webhook destination UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, and the description adds context that deleting stops events, providing clarity beyond annotations without 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 a single sentence, concise and front-loaded, 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 simplicity of the tool, the presence of an output schema, and thorough annotations, the description is complete and 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?
The input schema covers 100% of the parameter with a description 'Webhook destination UUID', and the tool description adds no further meaning, meeting the baseline for high 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 verb 'Delete', the resource 'webhook destination', and the effect 'stops receiving events', distinguishing it from sibling tools like create, get, list, and update.
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 for deleting a webhook, and no explicit exclusions or alternatives are needed given the simple nature of the tool. It is clear when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_webhook_getARead-onlyInspect
Get a single webhook destination, including its signing secret.
| Name | Required | Description | Default |
|---|---|---|---|
| destination_uuid | Yes | Webhook destination UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds that the response includes the signing secret, which is sensitive information. This adds value beyond 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 a single, front-loaded sentence with no unnecessary words. Every part is essential: verb, resource, scope, and inclusion of signing secret.
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 retrieval tool with one parameter and an output schema (exists but not shown), the description states what is returned (signing secret). It is complete and sufficient for an agent to understand the tool's purpose and behavior.
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 the single parameter 'destination_uuid' described as 'Webhook destination UUID'. The description does not add additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get a single webhook destination, including its signing secret.' It uses a specific verb ('Get') and resource ('webhook destination'), and identifies what is included (signing secret). This distinguishes it from sibling tools like didit_webhook_list (list all webhooks) and CRUD operations.
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: when you need details of a specific webhook. It does not explicitly state when not to use it or provide alternatives, but the context of sibling tools (list, create, update, delete) makes the usage clear. No misleading guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_webhook_listARead-onlyInspect
List configured webhook destinations. Each destination has its own URL, version, enabled flag, subscribed events, and signing secret.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 operation. The description adds value by specifying the fields returned (URL, version, enabled flag, subscribed events, signing secret), which is useful 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 very concise with two sentences. It immediately states the purpose in the first sentence and adds relevant detail in the second. No extraneous 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 simple list tool with no parameters and clear annotations, the description is complete. It provides enough context for the agent to understand what the tool returns and that it is safe to 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?
The tool has no parameters, and the schema coverage is 100%. The description does not need to explain parameters; it correctly focuses on the output.
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 configured webhook destinations', which is a specific verb-resource pair. It clearly distinguishes from sibling tools like didit_webhook_create or didit_webhook_get by indicating it returns all destinations.
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 does not explicitly state when to use this tool versus alternatives like didit_webhook_get. The purpose is implied but no usage guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_webhook_updateAInspect
Update a webhook destination's URL, version, enabled flag, or subscribed events.
| Name | Required | Description | Default |
|---|---|---|---|
| destination_uuid | Yes | Webhook destination UUID | |
| label | No | ||
| url | No | ||
| enabled | No | ||
| webhook_version | No | ||
| subscribed_events | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description's mention of 'update' is consistent but adds no additional behavioral context. No disclosure of whether updates are partial or full, how missing fields are treated, or any authorization requirements.
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 sentence with no extraneous words. It is front-loaded with the action and lists the fields concisely. Every word 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?
The tool has 6 parameters, low schema coverage, and an output schema (not shown). The description is short and covers only the list of updatable fields. It does not explain validation rules, side effects, or error scenarios. Given the complexity, more detail would be beneficial, but the output schema may mitigate the need for return value explanations.
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 17% (only destination_uuid described). The description lists which fields are updatable (URL, version, enabled flag, subscribed events) but does not explain their meaning, constraints (e.g., version enum values), or behavior when omitted. It provides a general mapping but lacks detailed 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 verb 'Update' and identifies the resource as 'webhook destination'. It lists the specific fields that can be updated (URL, version, enabled flag, subscribed events), distinguishing it from sibling tools like didit_webhook_create, didit_webhook_delete, didit_webhook_get, and didit_webhook_list.
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 does not explicitly state when to use this tool versus alternatives. While the sibling names imply it is for modifying an existing webhook, there is no guidance on prerequisites (e.g., requiring a destination_uuid) or when not to use it (e.g., for initial creation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_workflow_createAInspect
Create a SIMPLE (linear) verification workflow from an ordered list of features. Send features (uppercase feature values, in execution order) — NOT flat is_*_enabled flags or a workflow_type (those are rejected with 400). Put dependency features first (e.g. OCR before FACE_MATCH/NFC/DATABASE_VALIDATION). KYB workflows use KYB_REGISTRY/KYB_DOCUMENTS/KYB_KEY_PEOPLE. For BRANCHING / conditional logic (e.g. decline on a status, route on an extracted field, Document-AI proof-of-funds), use the graph tools instead: didit_workflow_get_field_definitions → build a graph → didit_workflow_validate_graph → didit_workflow_set_graph.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| workflow_label | No | Display name (max 50 chars) | |
| features | Yes | Verification features in execution order. Each: { feature, config?, label? }. Example: [{"feature":"OCR"},{"feature":"LIVENESS","config":{"face_liveness_method":"PASSIVE"}},{"feature":"FACE_MATCH"}] | |
| is_default | No | Set as default workflow for new sessions | |
| status | No | Omit to publish immediately; 'draft' saves without publishing | |
| is_white_label_enabled | No | ||
| is_desktop_allowed | No | ||
| max_retry_attempts | No | ||
| retry_window_days | No | ||
| session_expiration_time | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=false annotation, the description details behavioral traits: rejections of improper inputs (400), requirement for dependency-first ordering, and specifics about status parameter (omit for immediate publish, 'draft' saves without publishing). 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?
Description is efficient, front-loaded with purpose, then usage guidelines, then specific examples. Every sentence serves a purpose without redundancy. Length is justified by complexity.
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 params, nested arrays, multiple sibling tools), the description is comprehensive. It covers when to use alternatives, gives data format examples, explains execution order, and addresses common pitfalls.
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 55% schema description coverage, the description adds significant meaning: explains ordering of features (dependencies first), gives KYB workflow examples, and clarifies the status parameter behavior. For undocumented parameters, schema descriptions exist. Some value added 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 creates a simple linear verification workflow from an ordered list of features. It distinguishes itself from branching graph tools, 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?
Provides explicit guidance on when to use this tool (simple linear workflows) vs. branching/case tools, even naming specific workflow tools. Also warns against using flat flags or workflow_type, which would be rejected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_workflow_create_draftAInspect
Create an editable DRAFT version from a published workflow (graph/config edits require a DRAFT). Returns the new draft's uuid.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes | Workflow version uuid or stable workflow_id | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds context beyond annotations: identifies that edits require a draft, and that creation is not read-only nor destructive. Annotations already convey non-readOnly/non-destructive, but description reinforces with specific usage.
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 action and purpose, second states return value. No fluff, 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?
Covers purpose, usage context, and output. Could mention that the workflow must already be published, but that's implied. Given simplicity and output schema existence, 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?
Schema coverage is 100%, so description adds no extra meaning beyond what the schema provides. Baseline 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?
Clearly states it creates a draft from a published workflow, with a specific purpose (edits require draft). Distinguishes from sibling tools like create or publish by explaining the draft's role.
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 indicates when to use (before graph/config edits) and that it requires a published workflow. Does not list alternatives 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.
didit_workflow_deleteADestructiveInspect
Delete a verification workflow. Existing sessions using it are not affected.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| workflow_id | Yes | Workflow UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but the description adds crucial context: deletion does not impact existing sessions. This goes beyond annotation to explain the scope of destruction.
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 the main action, followed by a key behavioral note. 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?
Tool is straightforward; description covers the core effect (deletion) and a critical nuance (sessions unaffected). Output schema exists, so return values need not be explained. Could mention required permissions or error states for completeness.
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 descriptions for all three parameters. The description does not add parameter-specific semantics beyond the schema, hence 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?
Description states 'Delete a verification workflow' which is a specific verb-resource pair. It clearly distinguishes from sibling tools like create, update, get, and list by being the only delete operation. Additional detail about non-affect on sessions adds clarity.
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?
States 'Existing sessions using it are not affected', which gives guidance on when it's safe to use (even with active sessions). However, it does not explicitly mention when not to use or alternatives like archiving.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_workflow_edit_graphAInspect
MODIFY an existing workflow's graph with small OPERATIONS — the right tool for editing a live workflow. You send only the deltas; the MCP fetches the full current graph SERVER-SIDE, applies your ops, validates, auto-creates a DRAFT (the live version is never touched), and saves. This means huge feature configs (documents_allowed, poa_documents_allowed, phone countries) are preserved exactly and you NEVER resend them. Validation failures return applied:false with the errors (nothing saved). Example to insert a branch after OCR and rejoin the existing pipeline at the Liveness node: ops = [ {op:'set_next', node_id:'', next:'branch1'}, {op:'set_node', node_id:'branch1', node:{node_type:'branch', branches:[{id:'declined',logic:'or',rules:[{field:'kyc.status',operator:'equals',value:'Declined'}],goto:'decline1'},{id:'eng',logic:'and',rules:[{field:'kyc.extra_fields.profession',operator:'fuzzy_match',value:'Software Engineer',score:80}],goto:'pof1'}], next:''}}, {op:'set_node', node_id:'decline1', node:{node_type:'status',session_status:'Declined'}}, {op:'set_node', node_id:'pof1', node:{node_type:'feature',feature:'DOCUMENT_AI',config:{document_ai_documents:[...]},next:''}} ].
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes | Workflow version uuid or stable workflow_id | |
| operations | Yes | Ordered edits applied to the full server-side graph. Each: one of — {op:'set_node', node_id, node:{…}} upsert a node; {op:'remove_node', node_id}; {op:'set_next', node_id, next:'<id|null>'} rewire a node's unconditional next; {op:'set_branches', node_id, branches:[…]} set conditional branches; {op:'merge_node_config', node_id, config:{…}} shallow-merge config keys (preserves the big allow-lists); {op:'set_start', start_node}. | |
| publish | No | Publish after saving (default false → leaves a reviewable DRAFT) | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant behavioral context: auto-creates a draft (never touches live), server-side fetch, delta operations, validation failure behavior. Annotations already indicate not read-only and not destructive, so the description enhances 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?
Well-structured with purpose first, then operation types, then example. Slightly verbose but every part adds value. Could be slightly trimmed, but overall 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 core behavior, validation, and example. Output schema exists, so return values are not required. Lacks potential side-effects (e.g., impact on active sessions) but is sufficient for a 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?
Despite 100% schema coverage, the description adds substantial meaning: explains delta concept, lists operation types with brief explanations, and provides a detailed example. This greatly aids correct usage.
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 'MODIFY an existing workflow's graph with small OPERATIONS' and positions it as 'the right tool for editing a live workflow'. Distinguishes from siblings like set_graph (full replacement) and validate_graph (validation only) through the delta operations approach.
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 recommends this tool for live workflow editing and contrasts with resending full configs. Lacks explicit 'when not to use' statements, but the context implies alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_workflow_getBRead-onlyInspect
Get the full configuration of a specific workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| workflow_id | Yes | Workflow UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description does not need to repeat. It adds the phrase 'full configuration' implying comprehensive data but does not detail what is included.
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 sentence that is direct and contains no unnecessary words. It is optimally 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?
Given the output schema exists, the description does not need to explain return values. However, it could be more complete by clarifying what 'full configuration' entails (e.g., including graph, fields), but it is 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 coverage is 100%, so the description adds no additional meaning beyond the parameter descriptions already in the schema. Baseline 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 clearly states 'Get the full configuration of a specific workflow,' which specifies the verb (get) and the resource (full configuration). It distinguishes from sibling tools like 'didit_workflow_get_graph' which retrieves only the graph.
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?
No guidance is provided on when to use this tool versus alternatives such as 'didit_workflow_list' or 'didit_workflow_search'. No prerequisites or context are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_workflow_get_branch_fieldsARead-onlyInspect
Given a candidate graph and a branch node, return the fields actually available at that point (only features that completed on every path reaching the branch, plus dynamically-derived Document-AI/questionnaire fields).
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes | Workflow version uuid or stable workflow_id | |
| graph | Yes | Node/branching workflow graph: { start_node, nodes }. `start_node` is the id of the entry node (must be a feature node). `nodes` maps nodeId → node. Node shapes: feature = {node_type:'feature', feature:<UPPERCASE, e.g. OCR|DOCUMENT_AI>, config?:{}, next?:<id>, branches?:[]}; branch = {node_type:'branch', branches:[{id, logic:'and'|'or', rules:[{field, operator, value, score?}], goto:<id>}], next?:<id fallback>}; status (TERMINAL) = {node_type:'status', session_status:'Approved'|'Declined'|'In Review'|'Determine'}. Branches are evaluated in order, first match wins; an empty rules:[] is the else/catch-all (kept last). Operators include `fuzzy_match` (string fields only, needs a `score` 0-100). Reference a feature's outcome with e.g. kyc.status / document_ai.status, and an extracted value with kyc.extra_fields.profession. Document AI: feature:'DOCUMENT_AI' with config.document_ai_documents:[{document_key,title,description,fields:[{key,name,type:'text'|'number'|'date',required}]}]. Validate with didit_workflow_validate_graph before didit_workflow_set_graph. Get valid fields/operators from didit_workflow_get_field_definitions. | |
| node_id | No | The branch node id to evaluate availability at | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 clear. The description adds context about the return nature (fields completed on every path + dynamically-derived fields) but does not disclose additional behavioral traits such as performance implications, auth requirements, or error handling beyond what annotations imply.
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, well-structured sentence that front-loads the main action and includes parenthetical clarifications. It is concise without waste, though the density of information might slightly reduce readability. It earns a 4 for efficiency.
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 an output schema and 100% parameter coverage, the description adequately explains the core functionality. However, it lacks guidance on edge cases (e.g., if node_id is not a branch node) or prerequisites beyond cross-referencing validation tools. It is almost complete but misses some contextual nuance for a 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 100%, meaning the input schema provides descriptions for all 5 parameters. The tool description does not add new parameter-level details beyond what the schema already offers, so baseline 3 is appropriate. It reiterates the conceptual purpose of 'candidate graph' and 'branch node' but does not explain parameter constraints or formats 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 verb 'return' and the resource 'fields actually available at a branch node in a candidate graph'. It specifies the inputs (graph, branch node) and the output (available fields), distinguishing it from sibling tools like didit_workflow_get_field_definitions which focus on available field definitions rather than dynamic availability.
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 mentioning validation steps ('Validate with didit_workflow_validate_graph before didit_workflow_set_graph') and cross-referencing didit_workflow_get_field_definitions, but it does not explicitly state when to use this tool vs alternatives, nor does it provide when-not-to-use guidance or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_workflow_get_field_definitionsARead-onlyInspect
List every field you can branch on plus the operators valid for each (e.g. kyc.status, kyc.extra_fields.profession with fuzzy_match, document_ai., aml.risk_score). Call this before building branch rules so the field/operator pairs are valid.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes | Any workflow in the target application (used to resolve the app) | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the behavioral guidance to call before building branch rules, which goes beyond the readOnlyHint annotation. It does not disclose other traits like pagination, but the annotation already indicates a safe read operation.
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 primary purpose and an example. No wasted words, all sentences add 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?
Given the tool's complexity, full schema coverage, existence of output schema, and annotations, the description is complete. It tells what the tool does and when to use it, leaving 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 coverage is 100% with descriptions for all parameters. The description does not add additional meaning to the parameters beyond the schema, so 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 clearly states that the tool lists fields and operators for branching in workflows, with specific examples (kyc.status, aml.risk_score). It distinguishes itself from sibling workflow tools by focusing on field definitions for branch rules.
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 says 'Call this before building branch rules so the field/operator pairs are valid,' providing a clear when-to-use instruction. No exclusions or alternatives are needed given the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_workflow_get_graphARead-onlyInspect
Get the node/graph for a workflow (the structure: nodes, branches, conditions, Document-AI steps) + status/version/is_editable. Large feature configs (documents_allowed, poa_documents_allowed, phone countries) are SUMMARIZED by default so the response never overflows — set include_config:true for the raw config. Pass just workflow_id; the owning org/app is resolved automatically. To MODIFY the graph, prefer didit_workflow_edit_graph (small ops, no need to resend big configs).
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes | Workflow version uuid or stable workflow_id | |
| include_config | No | Return full feature configs verbatim (default false → summarized). Can be very large. | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already indicate read-only (readOnlyHint=true, destructiveHint=false), description adds critical detail about config summarization to prevent overflow and the include_config parameter to retrieve raw config. 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 concise sentences: first defines purpose and what's included; second gives usage guidance and alternative. No fluff, 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?
With output schema present, description covers return structure and behavior modifications (summarization). All parameters documented; no gaps for a read-only graph retrieval 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?
All parameters already described in schema (100% coverage); description adds context: organization_id and application_id are optional and auto-resolved, and include_config controls verbosity of configs. This enhances understanding 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?
Description provides a specific verb 'Get' and resource 'node/graph for a workflow', listing included elements (nodes, branches, conditions, etc.) and excluded configs. It clearly distinguishes from siblings like didit_workflow_edit_graph.
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 to pass only workflow_id, with automatic org/app resolution. Provides clear alternative for modifications: 'To MODIFY the graph, prefer didit_workflow_edit_graph' with rationale.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_workflow_listARead-onlyInspect
List verification workflows. With multiple apps (or no scope) it auto-spans every app, each row tagged with its org/app. To find one workflow by id/label across all apps, prefer didit_workflow_search.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds that it auto-spans every app with multiple apps or no scope, and tags each row with org/app, providing 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?
Two concise sentences with front-loaded purpose. No filler; every sentence adds value. Efficiently communicates scope and sibling differentiation.
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 (multi-app scoping, optional parameters with defaults), the description fully covers usage context, parameter semantics, and relationship with sibling. Output schema is present, so return format is covered.
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 description adds meaningful guidance: tells where to obtain UUIDs (didit_org_list, didit_org_list_applications) and explains optionality based on default org/app, which the schema alone does not convey.
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 verification workflows, explains auto-spanning across apps with row tagging, and distinguishes from the sibling didit_workflow_search for finding a specific workflow.
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 contrasts with didit_workflow_search: use list for broad listing, search for finding by id/label. Also notes scope behavior and parameter optionality based on token configuration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_workflow_publishAInspect
Publish a draft workflow version — makes it the live version for NEW sessions. Existing sessions are unaffected.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes | Draft workflow version uuid or stable workflow_id | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations do not contradict, and the description adds behavioral context: existing sessions are unaffected, which is not captured in 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 the primary action, 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?
Complete for a publish action with output schema present; could mention needing a draft version but implied.
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 3. The description adds no extra parameter 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?
The description clearly states the tool publishes a draft workflow version, making it live for new sessions, distinguishing it from sibling tools like didit_workflow_create or didit_workflow_update.
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 when a draft version is ready for publication, but does not explicitly state when to use or avoid this tool, nor mention alternatives like didit_workflow_update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_workflow_searchARead-onlyInspect
Find verification workflows ACROSS ALL your apps/orgs in one call. Pass workflow_id to locate a specific workflow by its version uuid OR stable workflow_id (returns which org/app it lives in), or search to match by label. Use this instead of guessing the application when you only have a workflow id.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | No | Match a specific workflow by version uuid or stable workflow_id | |
| search | No | Case-insensitive substring match on the workflow label | |
| limit | No | Max results after merging (default 50, max 200) | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, indicating safe read operation. The description adds that it searches across all apps/orgs and can return which org/app a workflow belongs to, but does not disclose pagination, ordering, or response format.
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 concise sentences. The first states the core purpose, and the second provides usage guidance. No redundant or extraneous 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?
Given the output schema exists, the description does not need to explain return values. It covers purpose, parameter usage, and context for all fields. It is complete for a search tool with good annotations and 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 coverage is 100% with all parameters documented. The description adds meaning: explains workflow_id matches version uuid or stable workflow_id, search is case-insensitive substring, and organization_id/application_id are optional with defaults. This complements the schema 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 verb 'Find' and resource 'verification workflows' with scope 'ACROSS ALL your apps/orgs'. It distinguishes from sibling tools like didit_workflow_list by emphasizing cross-app/org search capability and mentions specific parameters (workflow_id, search).
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 using this tool when you only have a workflow id instead of guessing the application. It implies when to use (cross-app search) but does not explicitly state when not to use or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_workflow_set_graphAInspect
Replace a workflow's ENTIRE node/graph. Use this only to build a NEW/small workflow from scratch — to modify an EXISTING workflow prefer didit_workflow_edit_graph (you'd otherwise have to resend every node incl. multi-100KB allow-lists). If the workflow is published, a DRAFT is auto-created and the graph applied there (a live version is NEVER mutated); reviewable DRAFT unless publish:true. Validate first. Example graph: OCR → branch[ kyc.status==Declined → status(Declined); kyc.extra_fields.profession fuzzy_match 'Software Engineer' score 80 → DOCUMENT_AI(proof of funds) → status(Determine) ; else → status(Determine) ].
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes | Workflow version uuid or stable workflow_id | |
| graph | Yes | Node/branching workflow graph: { start_node, nodes }. `start_node` is the id of the entry node (must be a feature node). `nodes` maps nodeId → node. Node shapes: feature = {node_type:'feature', feature:<UPPERCASE, e.g. OCR|DOCUMENT_AI>, config?:{}, next?:<id>, branches?:[]}; branch = {node_type:'branch', branches:[{id, logic:'and'|'or', rules:[{field, operator, value, score?}], goto:<id>}], next?:<id fallback>}; status (TERMINAL) = {node_type:'status', session_status:'Approved'|'Declined'|'In Review'|'Determine'}. Branches are evaluated in order, first match wins; an empty rules:[] is the else/catch-all (kept last). Operators include `fuzzy_match` (string fields only, needs a `score` 0-100). Reference a feature's outcome with e.g. kyc.status / document_ai.status, and an extracted value with kyc.extra_fields.profession. Document AI: feature:'DOCUMENT_AI' with config.document_ai_documents:[{document_key,title,description,fields:[{key,name,type:'text'|'number'|'date',required}]}]. Validate with didit_workflow_validate_graph before didit_workflow_set_graph. Get valid fields/operators from didit_workflow_get_field_definitions. | |
| publish | No | Publish the draft after saving (default false → leaves a reviewable DRAFT) | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). Description elaborates: replaces entire graph, auto-creates draft if published, live version never mutated, reviewable draft unless publish:true. 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 packed with essential details and well-structured (first sentence main purpose, then usage, then graph details). It is somewhat lengthy but every sentence adds value; could be slightly more terse.
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 complexity of the graph parameter, the description provides complete guidance: node types, branching evaluation order, operator usage, Document AI configuration, validation, and references to sibling tools. Output schema exists so return values are covered elsewhere.
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?
All parameters have schema descriptions (100% coverage). The description adds significant meaning beyond schema: explains graph node shapes (feature, branch, status), branching logic, operators like fuzzy_match, validation recommendation, and references sibling tools for field definitions.
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 'replace' and the resource 'workflow's ENTIRE node/graph'. It distinguishes from the sibling tool didit_workflow_edit_graph by specifying this is for building new/small workflows from scratch, not for modifying existing ones.
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 (new/small workflow from scratch) and when to prefer an alternative (didit_workflow_edit_graph for existing workflows). Also specifies publishing behavior: draft auto-created, publish:true to publish, and validation recommended.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_workflow_updateAInspect
Update a SIMPLE (linear) workflow's top-level settings or its flat features array (same shape as create). This does NOT add branching — to add conditional branches, a Document-AI step, or any node/graph logic, use didit_workflow_set_graph (it never flattens a graph into a linear list). Editing features retroactively affects how past sessions' decisions are read, so change deliberately.
| Name | Required | Description | Default |
|---|---|---|---|
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. | |
| workflow_id | Yes | Workflow UUID | |
| workflow_label | No | ||
| features | No | Replacement feature list in execution order (same shape as create) | |
| is_default | No | ||
| status | No | ||
| is_white_label_enabled | No | ||
| is_desktop_allowed | No | ||
| max_retry_attempts | No | ||
| retry_window_days | No | ||
| session_expiration_time | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals important behavioral traits beyond annotations: it only updates linear workflows (not graph-based ones), and editing features retroactively affects how past sessions' decisions are read. Annotations only indicate non-read-only and non-destructive, so this adds essential 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 two concise sentences, each adding value. The first states purpose and scope; the second clarifies exclusions, directs to an alternative, and adds a caution. No redundant or wasteful 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 has 12 parameters and an output schema, the description provides adequate behavioral context for an agent to select and use the tool correctly. It explains what it updates, what it doesn't, and warns about retroactive effects. Minor gaps in parameter-level explanations are acceptable because the output schema and parameter names provide some coverage.
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 (33%), and the description does not detail individual parameters. However, it mentions the features array (same shape as create) and top-level settings. Many parameters are self-explanatory, but more guidance on parameters like is_white_label_enabled, max_retry_attempts, etc., would improve semantic 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?
The description clearly states the tool updates a SIMPLE (linear) workflow's top-level settings or its flat features array. It explicitly distinguishes from didit_workflow_set_graph, which handles branching and graph logic, 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?
The description provides explicit when-to-use and when-not-to-use guidance: 'This does NOT add branching — to add conditional branches, ... use didit_workflow_set_graph'. It also warns about retroactive effects on past sessions, giving clear context for appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
didit_workflow_validate_graphARead-onlyInspect
Dry-run validate a graph WITHOUT saving. Returns per-node errors (bad field/operator, missing dependency, branching on a field before its feature runs, etc.). Always validate before didit_workflow_set_graph.
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes | Workflow version uuid or stable workflow_id | |
| graph | Yes | Node/branching workflow graph: { start_node, nodes }. `start_node` is the id of the entry node (must be a feature node). `nodes` maps nodeId → node. Node shapes: feature = {node_type:'feature', feature:<UPPERCASE, e.g. OCR|DOCUMENT_AI>, config?:{}, next?:<id>, branches?:[]}; branch = {node_type:'branch', branches:[{id, logic:'and'|'or', rules:[{field, operator, value, score?}], goto:<id>}], next?:<id fallback>}; status (TERMINAL) = {node_type:'status', session_status:'Approved'|'Declined'|'In Review'|'Determine'}. Branches are evaluated in order, first match wins; an empty rules:[] is the else/catch-all (kept last). Operators include `fuzzy_match` (string fields only, needs a `score` 0-100). Reference a feature's outcome with e.g. kyc.status / document_ai.status, and an extracted value with kyc.extra_fields.profession. Document AI: feature:'DOCUMENT_AI' with config.document_ai_documents:[{document_key,title,description,fields:[{key,name,type:'text'|'number'|'date',required}]}]. Validate with didit_workflow_validate_graph before didit_workflow_set_graph. Get valid fields/operators from didit_workflow_get_field_definitions. | |
| organization_id | No | Organization UUID (from didit_org_list). Optional if your token has a single/default org. | |
| application_id | No | Application UUID (from didit_org_list_applications). Optional if a default application is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the dry-run nature (no save), which aligns with annotations (readOnlyHint=true, destructiveHint=false). It also states that it returns per-node errors, adding 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?
The description is verbose but well-structured: first sentence states purpose, then lists error types and usage hint, followed by detailed graph structure. While it contains much information, it remains organized and front-loaded. Minor reduction could improve conciseness.
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 complexity of nested objects and multiple node types, the description provides thorough coverage. It explains error types, graph shape, branching, operators, and field references. No output schema, but return type is implied.
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 extensive detail beyond the 100% schema coverage, including node shapes, branching logic, operators, field reference syntax, and document AI configuration. This significantly aids understanding of complex 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 performs a dry-run validation of a graph without saving, listing specific error types. It distinguishes itself from sibling tools like didit_workflow_set_graph (which saves) and didit_workflow_get_graph (which retrieves).
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 validate before didit_workflow_set_graph, and references didit_workflow_get_field_definitions for valid fields/operators. This provides clear guidance on 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
121 tool updates
v5.0.0- First observed
didit_account_login - First observed
didit_account_register - First observed
didit_account_resend_otp - First observed
didit_account_verify_email - First observed
didit_alert_configure - First observed
didit_alert_list - First observed
didit_allowlist_add - First observed
didit_analytics - First observed
didit_audit_log_list - First observed
didit_blocklist_add - First observed
didit_blocklist_get - First observed
didit_blocklist_remove - First observed
didit_branding_get - First observed
didit_branding_update - First observed
didit_case_create - First observed
didit_case_get - First observed
didit_case_list - First observed
didit_case_manage - First observed
didit_case_search - First observed
didit_case_statistics - First observed
didit_context_get - First observed
didit_lists_create - First observed
didit_lists_delete - First observed
didit_lists_entries_list - First observed
didit_lists_entry_create - First observed
didit_lists_entry_delete - First observed
didit_lists_entry_upload_face - First observed
didit_lists_get - First observed
didit_lists_list - First observed
didit_lists_update - First observed
didit_org_get_application - First observed
didit_org_get_balance - First observed
didit_org_invite_member - First observed
didit_org_list - First observed
didit_org_list_api_keys - First observed
didit_org_list_applications - First observed
didit_org_list_members - First observed
didit_org_list_roles - First observed
didit_org_remove_member - First observed
didit_org_reveal_application_api_key - First observed
didit_org_top_up - First observed
didit_org_update_member - First observed
didit_questionnaire_create - First observed
didit_questionnaire_delete - First observed
didit_questionnaire_get - First observed
didit_questionnaire_list - First observed
didit_questionnaire_update - First observed
didit_report_export - First observed
didit_report_get - First observed
didit_report_get_download_url - First observed
didit_report_list - First observed
didit_session_add_review - First observed
didit_session_batch_delete - First observed
didit_session_create - First observed
didit_session_create_import - First observed
didit_session_delete - First observed
didit_session_generate_pdf - First observed
didit_session_get_decision - First observed
didit_session_get_import - First observed
didit_session_get_import_errors - First observed
didit_session_get_import_template - First observed
didit_session_import_shared - First observed
didit_session_list - First observed
didit_session_list_reviews - First observed
didit_session_search - First observed
didit_session_share - First observed
didit_session_update_data - First observed
didit_session_update_poa_data - First observed
didit_session_update_status - First observed
didit_transaction_create - First observed
didit_transaction_get - First observed
didit_transaction_list - First observed
didit_transaction_screen_wallet - First observed
didit_transaction_search - First observed
didit_vendor_business_create - First observed
didit_vendor_business_delete - First observed
didit_vendor_business_get - First observed
didit_vendor_business_list - First observed
didit_vendor_business_search - First observed
didit_vendor_business_update - First observed
didit_vendor_business_update_status - First observed
didit_vendor_user_create - First observed
didit_vendor_user_delete - First observed
didit_vendor_user_get - First observed
didit_vendor_user_list - First observed
didit_vendor_user_search - First observed
didit_vendor_user_update - First observed
didit_vendor_user_update_status - First observed
didit_verify_age - First observed
didit_verify_aml - First observed
didit_verify_database - First observed
didit_verify_email_check - First observed
didit_verify_email_send - First observed
didit_verify_face_match - First observed
didit_verify_face_search - First observed
didit_verify_id - First observed
didit_verify_kyb_search - First observed
didit_verify_kyb_select - First observed
didit_verify_passive_liveness - First observed
didit_verify_phone_check - First observed
didit_verify_phone_send - First observed
didit_verify_poa - First observed
didit_webhook_create - First observed
didit_webhook_delete - First observed
didit_webhook_get - First observed
didit_webhook_list - First observed
didit_webhook_update - First observed
didit_workflow_create - First observed
didit_workflow_create_draft - First observed
didit_workflow_delete - First observed
didit_workflow_edit_graph - First observed
didit_workflow_get - First observed
didit_workflow_get_branch_fields - First observed
didit_workflow_get_field_definitions - First observed
didit_workflow_get_graph - First observed
didit_workflow_list - First observed
didit_workflow_publish - First observed
didit_workflow_search - First observed
didit_workflow_set_graph - First observed
didit_workflow_update - First observed
didit_workflow_validate_graph
TDQS
Scored across 121 tools
Each tool targets a specific action on a distinct entity (e.g., session, vendor, workflow) with clear, detailed descriptions. Even similarly named tools like list vs. search are explicitly differentiated by scope and purpose, leaving no ambiguity.
All tools follow the pattern `didit_<domain>_<verb>` in snake_case. Verbs are consistent (create, list, get, delete, update, search, etc.), and the naming is predictable across all 121 tools.
At 121 tools, the server is extremely heavy. While the domain (identity verification and compliance) is broad, the granularity exceeds typical expectations—many sub-actions are separate tools rather than parameters. This strains discoverability and selection.
The tool surface covers account management, verification (multiple types), sessions, cases, workflows, webhooks, reporting, and vendor management with full CRUD. Minor gaps exist (e.g., no bulk user update), but the domain is comprehensively addressed.
Maintenance
Related MCP Connectors
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
Verified, pay-per-use API tools for AI agents through one authenticated connection.
100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.
Free OpenAI-compatible inference with signed provenance receipts and 3 focused MCP tools.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA comprehensive Model Context Protocol toolkit that transforms AI assistants into autonomous agents capable of executing real-world tasks across filesystems, web requests, Git workflows, databases, system commands, and AI integrations.MIT

APIVerve MCP Serverofficial
AlicenseNot gradedqualityBmaintenanceProvides access to 249+ production-ready APIs through the Model Context Protocol, enabling AI assistants to fetch weather, news, geocoding, validation, and more data.2 npm3MIT- AlicenseNot gradedqualityAmaintenanceEnables secure enterprise AI agents to access internal tools like GitHub, Gmail, Calendar, file systems, databases, and knowledge bases through the Model Context Protocol, with built-in security, audit, and observability.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to perform identity verification, KYC/KYB, PEP & sanctions screening, bank statement analysis, and workflow automation via the Model Context Protocol.MIT