MCP tool reference

Full reference for the 14 dureach.* MCP tools: arguments, bounds, scopes, risk tiers, outputs, and examples.

Dureach exposes 14 MCP tools named dureach.<action>. Every tool validates unknown fields strictly: extra fields return a validation error. Use the exact bounds below; out-of-range values return invalid_arguments.

Which tools are available?

ToolRiskRequired scopePurpose
dureach.workspace.contextR0workspace:readReturn workspace ID, name, caller role, and granted scopes.
dureach.workspace.capabilitiesR0workspace:readList actions available to this connection.
dureach.companies.searchR1companies:readSearch company records by keyword.
dureach.companies.readR1companies:readRead one company by UUID.
dureach.trade.searchR1trade:readSearch trade activity records.
dureach.trade.queryR1trade:readRun a read-only SQL query against the shipments view.
dureach.contacts.searchR1contacts:readSearch contact records by keyword.
dureach.contacts.queryR1contacts:readRun a read-only SQL query against the contacts view.
dureach.leads.listR1leads:readList workspace leads with pagination.
dureach.leads.createR2leads:createCreate a lead; supports dry_run and idempotency_key.
dureach.campaigns.listR1campaigns:readList campaigns with pagination.
dureach.campaigns.draftR2campaigns:createDraft a campaign; supports dry_run and idempotency_key.
dureach.email.sendR3emails:sendSend via an owner-reviewed standing policy; requires an active policy_id, and supports dry_run previews and idempotency keys.
dureach.sms.sendR3sms:sendSend via an owner-reviewed standing policy; same rules as email send.

Use tools/list to discover the tools available to your connection. Availability depends on the granted permissions and workspace access. Start with read scopes; ask a workspace administrator to review missing access rather than requesting broad permissions.

What arguments does each tool accept?

workspace.context and workspace.capabilities

No arguments. Send {}.

{"jsonrpc": "2.0", "id": 1, "method": "tools/call",
 "params": {"name": "dureach.workspace.capabilities", "arguments": {}}}

companies.search

FieldTypeBoundsDefault
querystring1–200 chars, non-blankrequired
pageinteger1–201
limitinteger1–5025
{"query": "industrial valves", "page": 1, "limit": 10}

companies.read

FieldTypeDetails
company_idUUIDrequired

Unknown IDs return company_not_found.

trade.search

FieldTypeBoundsDefault
querystring3–100 charsrequired
datasetenumall, imports, exports, shipmentsall
pageinteger1–201
limitinteger1–5025

contacts.search

FieldTypeBoundsDefault
querystring3–100 charsrequired
pageinteger1–401
limitinteger1–2525

Short queries under 3 characters return a validation error. Use contacts.query when keyword search is not selective enough.

contacts.query and trade.query

FieldTypeBoundsDefault
sqlstringat most 16 KiB UTF-8, read-only grammarrequired
pageinteger1–201
limitinteger1–5025

Do not include SQL LIMIT/OFFSET; use page/limit instead. Page 2 and higher require ORDER BY. Grammar details are in the MCP SQL reader.

leads.list and campaigns.list

FieldTypeBoundsDefault
pageinteger1–201
limitinteger1–5025

leads.create

FieldTypeDetails
emailemailrequired, at most 254 chars
first_namestringoptional, at most 255 chars
last_namestringoptional, at most 255 chars
company_namestringoptional, at most 255 chars
idempotency_keyUUIDRequired for an actual write or send; reuse the same UUID when retrying the same action with unchanged arguments.
dry_runbooleanoptional, default false; true previews without writing

campaigns.draft

FieldTypeDetails
namestringrequired, at most 255 chars
idempotency_keyUUIDRequired for an actual write or send; reuse the same UUID when retrying the same action with unchanged arguments.
dry_runbooleanoptional, default false

email.send and sms.send

FieldTypeDetails
policy_idUUIDrequired; standing send policy that authorizes the send
recipientstringrequired, at most 255 chars
idempotency_keyUUIDRequired for an actual write or send; reuse the same UUID when retrying the same action with unchanged arguments.
dry_runbooleanoptional, default false

Sends without an active policy return policy_not_found or policy_not_authorized. Budget, suppression, and quota failures return policy_budget_exceeded, policy_daily_cap_exceeded, recipient_suppressed, recipient_already_attempted, or send_quota_exceeded. Never retry a send with a fresh idempotency key; reuse the original key.

How are results and errors shaped?

Success returns one text item with JSON plus a matching structuredContent object validated against the tool output contract. Results larger than 1 MiB return result_too_large instead of partial data.

Failures return isError: true:

{"error": {"code": "invalid_arguments", "details": {"field": "limit"}},
 "request_id": "REQ_ID"}

Common codes: unknown_action (use a name from the table with the dureach. prefix), invalid_arguments, scope_required, plan_capability_required, quota_exceeded (with limit_type, reset_at, retry_after), company_not_found, policy_not_found, policy_not_authorized, result_too_large, action_internal_error.