Skip to main content
Glama
QuickContractIO

QuickContract MCP

Official

@quickcontract/mcp

MCP server for QuickContract — sign contracts, release escrow, query portfolios, and verify on-chain proofs from any MCP-aware AI agent.

Drops into Claude Desktop, Cursor, Anthropic Agents SDK, and OpenAI Agents in under a minute.

Install

npx @quickcontract/mcp --help
# or install globally:
npm i -g @quickcontract/mcp
quickcontract-mcp

Requires Node 18+.

Related MCP server: remit.md MCP Server

Configure

Generate an API key at https://quickcontract.io/settings/api-keys. Raw org keys start with qc_live_; agent-bound keys (with a server- enforced mandate) start with qc_agnt_.

Set the env var:

export QC_API_KEY="qc_live_..."   # or qc_agnt_...

That's it. The server defaults to https://api.quickcontract.io. Override with QC_BASE_URL for staging or local dev.

Wire it into your AI client

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "quickcontract": {
      "command": "npx",
      "args": ["-y", "@quickcontract/mcp"],
      "env": {
        "QC_API_KEY": "qc_live_..."
      }
    }
  }
}

Restart Claude Desktop. Type @quickcontract in any conversation to invoke tools.

Cursor

In .cursor/mcp.json at the workspace root:

{
  "mcpServers": {
    "quickcontract": {
      "command": "npx",
      "args": ["-y", "@quickcontract/mcp"],
      "env": { "QC_API_KEY": "qc_live_..." }
    }
  }
}

Anthropic Agents SDK (TypeScript)

import { Agent } from '@anthropic-ai/sdk/agents';
import { StdioMcpTransport } from '@anthropic-ai/sdk/mcp';

const agent = new Agent({
  mcpServers: {
    quickcontract: new StdioMcpTransport({
      command: 'npx',
      args: ['-y', '@quickcontract/mcp'],
      env: { QC_API_KEY: process.env.QC_API_KEY! },
    }),
  },
});

OpenAI Agents SDK (Python)

from openai.agents import Agent, MCPServerStdio

qc = MCPServerStdio(
    name="quickcontract",
    command="npx",
    args=["-y", "@quickcontract/mcp"],
    env={"QC_API_KEY": os.environ["QC_API_KEY"]},
)
agent = Agent(name="contract-agent", mcp_servers=[qc])

What's exposed

Tools — READ (works with any API key)

  • list_contracts — paginated list with filters.

  • get_contract — full structured contract.

  • get_contract_status — lightweight status / signed-party flags.

  • verify_hash — public verify by SHA-256 content hash; includes signedBy[] with agent DIDs for external Ed25519 verification.

  • list_templates / get_template — 62 base templates + your custom.

  • get_organization — your plan tier + rate limit.

  • get_audit_log — tamper-evident hash-chained events.

  • get_obligations — extracted payment terms + dates via Claude.

Tools — WRITE (mandate-gated for agent keys)

  • create_contract — instantiate a draft from a template. Agent callers: template must be in mandate.limits.allowedTemplateIds.

  • update_contract — edit a draft.

  • send_contract — move draft → sent_for_review. Agent callers: recipient domain must be in allowedCounterpartyDomains.

  • add_recipient — register a human (kind=human) or agent (kind=agent) recipient.

  • sign_as_agent — produce an Ed25519 signature on a contract. Requires a qc_agnt_* key. Server enforces capability + the full 9-code mandate envelope.

  • release_milestone — release escrow. Non-custodial in both rails.

  • add_machine_term — attach an IF/THEN to a contract (when payload.delivered + schemaMatch then escrow.release).

  • report_event — fire a signed event into a contract's machine terms. Optional Ed25519 signature provides non-repudiation.

Resources

  • contract://{id-or-permalink} — full contract.

  • template://{id} — template body.

  • audit://{contractId} — hash-chained log.

  • agent://{didIdentifier} — public DID Document JSON-LD.

Prompts

  • negotiate_clause, draft_counter_offer, risk_assessment, summarize_contract, extract_obligations — pre-canned scripts that chain the AI tools.

Mandate reject codes

When an agent attempts an action that violates its mandate, the backend returns a typed envelope. The MCP tool surfaces it as a single error string with reason: line:

Reason

Trigger

mandate_revoked

Mandator revoked the mandate.

mandate_expired

Past expiresAt.

capability_not_granted

Action's capability missing from capabilities[].

mandate_exceeded_value_cap

Contract value > maxContractValueCents.

mandate_exceeded_day_cap

Daily signed-count > perDayCap.

mandate_exceeded_month_cap

Monthly signed-count > perMonthCap.

template_not_allowed

Template not in allowedTemplateIds[].

counterparty_not_allowed

Recipient domain not in allowedCounterpartyDomains[].

jurisdiction_not_allowed

Jurisdiction not in allowedJurisdictions[].

A calling agent can switch on reason to plan an alternative path (e.g. propose a smaller contract value, or hand off to a human via request_approval).

Environment variables

Var

Required

Default

Notes

QC_API_KEY

yes

qc_live_* for org or qc_agnt_* for agent.

QC_BASE_URL

no

https://api.quickcontract.io

Override for staging.

QC_PUBLIC_HOST

no

quickcontract.io

Host used to resolve agent:// DID URIs.

QC_DEBUG

no

Set to any truthy value to stream request log to stderr.

License

MIT — see LICENSE.

Available Tools

17 tools
add_machine_termA

Attach a machine-readable IF/THEN term to a contract. When the term's when+condition matches a reported event, the term's action fires (escrow.release / milestone.approve / notify / webhook.fire). Owner orgs (qc_live_*) and agents on the contract (qc_agnt_*) can both author terms.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe contract id.
idNoOptional caller-supplied term id. If omitted, the server generates one.
labelNoHuman-readable label shown on the permalink.
whenYesTrigger spec.
conditionNoPredicate guards. All keys ANDed. Supported: schemaMatch (string), before/after (ISO 8601), partyOfRecord (partyA|partyB|agent:<id>), valueGte/valueLte (number), contentHashEquals (hex).
thenYesAction to fire.

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description bears full burden. It discloses the event-driven nature and authorized users but omits side effects, error handling, or whether the term can be overwritten. Adequate but not comprehensive.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the core purpose, and each sentence adds meaningful context. No redundancy or filler.

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

Completeness4/5

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

Given the tool's complexity (nested objects, 6 params), the description covers the event-driven model, actions, and user authorization. It lacks return value details but no output schema exists. Slightly incomplete on optionality of condition.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds value by explaining the IF/THEN logic, listing actions, and clarifying the condition format. It enhances understanding beyond raw schema.

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

Purpose5/5

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

The description clearly states 'Attach a machine-readable IF/THEN term to a contract' and explains the event-driven behavior, listing available actions. This is specific and distinguishes it from sibling tools like 'report_event'.

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

Usage Guidelines3/5

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

The description mentions who can author terms (owner orgs and agents) but does not provide explicit when-to-use guidance or contrast with alternatives. Usage is implied but lacks exclusions.

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

add_recipientA

Add a recipient to a contract. kind='human' (default) requires email + name. kind='agent' requires agentDid (the DID of the agent). The mandate is snapshotted at add-time.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe contract id.
partyYesWhich side: party_a / party_b / observer.
roleNosigner
kindNohuman
emailNoRequired when kind='human'.
nameNo
agentDidNoRequired when kind='agent'. The agent's did:web identifier.

TDQS

A4/5.0
Behavior3/5

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

Discloses that the mandate is snapshotted at add-time, adding useful behavioral context. However, with no annotations, lacks details on side effects, permissions, or idempotency.

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

Conciseness5/5

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

Three concise sentences with no wasted words. Front-loaded with purpose, followed by conditional details and behavioral note.

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

Completeness4/5

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

Covers key aspects: what it does, conditional parameter requirements, and a behavioral trait. No output schema, but for a simple add operation the description is sufficient.

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

Parameters3/5

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

Adds meaning beyond schema by explaining the conditional requirements for kind ('human' requires email+name, 'agent' requires agentDid). However, other fields like role and name remain minimally described.

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

Purpose5/5

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

Clearly states verb ('Add') and resource ('recipient to a contract'). Distinguishes between human and agent kinds, making the tool's purpose specific and distinct from siblings.

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

Usage Guidelines4/5

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

Explains conditional usage based on kind (human vs agent) and required parameters. Does not explicitly exclude alternatives or state when not to use, but provides sufficient guidance for the intended use case.

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

create_contractA

Create a new draft contract from a template. Fill in template fields via filledFields. When the caller is an agent (qc_agnt_ key), the templateId must be in the agent's mandate.limits.allowedTemplateIds (server-enforced).

ParametersJSON Schema
NameRequiredDescriptionDefault
templateIdYesTemplate id to instantiate. Use list_templates / get_template to discover.
contractNameNoOptional name. Defaults to the template name.
filledFieldsNoKey-value map of field name → string. Keys come from get_template's fields[].key.
localeNoDefault 'en'.
currencyNoDefault 'USD'.

TDQS

A4/5.0
Behavior3/5

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

No annotations provided; description covers creation of a draft, permission check for agents. Does not mention return value or error behavior, but sufficient for basic use.

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

Conciseness5/5

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

Two concise sentences front-loading the purpose, with no wasted words.

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

Completeness4/5

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

Covers all parameters and essential behavior. Links to related tools. Missing output specifics, but not critical given the schema richness.

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

Parameters3/5

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

Schema coverage is 100%; description adds context that filledFields keys come from get_template and the agent restriction on templateId. Baseline 3 as schema already documents all parameters.

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

Purpose5/5

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

Clearly states the verb 'create', resource 'draft contract', and method 'from a template'. Differentiates from sibling tools like update_contract or send_contract.

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

Usage Guidelines4/5

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

Explicitly mentions the templateId permission constraint for agents, and implicitly directs to list_templates/get_template for discovery. Could be more explicit about when to use vs. update.

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

get_audit_logA

Fetch the tamper-evident audit log for a contract. Each event is hash-chained (prevHash + hash = SHA-256). Agent actions carry actor.kind='agent' + agentDid so an external auditor can resolve the actor without QC API access.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe contract id.

TDQS

A4/5.0
Behavior4/5

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

Without annotations, the description carries full burden. It discloses hash-chaining and agent-specific fields, enabling the agent to understand the data structure and external audit capability. However, it does not explicitly state read-only nature or lack of 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.

Conciseness5/5

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

Three sentences efficiently convey the core functionality and key behavioral details. No wasted words; front-loaded with the main action.

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

Completeness4/5

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

For a single-parameter tool with no output schema, the description provides sufficient context about what the audit log contains and its tamper-evident property. It lacks details on pagination or limits but is adequate for common use cases.

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

Parameters3/5

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

Schema coverage is 100% for the contractId parameter, so the description adds no extra meaning beyond the schema. Baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states that the tool fetches the tamper-evident audit log for a contract, with specific details about hash chaining and actor identification. This directly distinguishes it from sibling tools like get_contract or get_contract_status.

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

Usage Guidelines3/5

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

The description implies usage when the audit log is needed, but lacks explicit guidance on alternatives or when not to use it. No exclusions or context about preferring other tools are provided.

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

get_contractA

Fetch a single contract by id. Returns the full structured contract: sections, filledFields, recipients, signatures, status, audit summary, on-chain proof, permalink.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe contract id (MongoDB ObjectId, 24 hex chars).

TDQS

A3.8/5.0
Behavior3/5

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

No annotations provided, so the description carries full burden. It states 'Fetch' implying a read-only operation, and lists return fields, but does not disclose potential side effects, authorization requirements, or rate limits. Adequate for a simple read, but not thorough.

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

Conciseness5/5

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

A single sentence covering purpose and return fields. No wasted words, every part adds value.

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

Completeness4/5

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

No output schema, but the description enumerates key return fields. For a simple fetch operation, this is nearly complete. Could mention that contractId is required (already in schema) or that the tool only returns existing contracts.

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

Parameters3/5

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

The schema already describes the parameter fully (contractId as 24 hex chars). The description adds 'by id' but no additional semantic value 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.

Purpose5/5

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

The description clearly states the action ('Fetch a single contract') and the resource ('by id'). It lists specific return fields, distinguishing it from siblings like list_contracts or get_contract_status which return different subsets.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives. The context is implied by the purpose ('fetch a single contract by id'), but there is no mention of when not to use it or references to other tools for partial data.

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

get_contract_statusA

Lightweight status check for a contract. Returns status string + per-party signed flag + polygon-anchor flag. Use this for polling in long-running flows; cheaper than get_contract.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe contract id.

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description must convey behavior. It indicates lightweight and cheap but does not mention read-only nature, error behavior (e.g., if contract not found), or any side effects. Adequate but not fully transparent.

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

Conciseness5/5

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

Two succinct sentences that convey purpose, return value, and usage guidance without extraneous information.

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

Completeness4/5

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

For a simple one-parameter tool with no output schema, the description adequately covers purpose, return fields, and usage context. Could slightly benefit from mentioning error cases but overall complete enough for an agent.

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

Parameters3/5

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

Schema coverage is 100% and description only mentions contractId without adding details beyond the schema. Baseline score applies as description does not enhance parameter understanding.

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

Purpose5/5

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

Explicitly states it performs a lightweight status check on a contract and lists the returned fields: status string, per-party signed flag, polygon-anchor flag. Differentiates from sibling get_contract by being cheaper and suited for polling.

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

Usage Guidelines5/5

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

Directly advises to use for polling in long-running flows, noting it is cheaper than get_contract. Provides clear when-to-use and alternative.

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

get_obligationsA

Extract obligations from a contract via the Claude-based AI service. Returns structured payment terms, delivery deadlines, renewal dates, and party-specific action items. Cached after first run.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe contract id.
refreshNoForce re-extraction even if a cached result exists. Default false.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses caching ('Cached after first run') and the ability to force re-extraction with refresh. It also notes the use of a Claude-based AI service, implying a non-deterministic or processing-heavy operation. However, it does not explicitly state side effects or idempotency.

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

Conciseness5/5

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

Two sentences, front-loaded with the main action, 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.

Completeness4/5

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

Given no output schema, the description lists key return items (payment terms, deadlines, etc.), which provides a good overview. However, it could be more explicit about the full structure of the response. The caching and refresh behavior are well covered.

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

Parameters3/5

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

Schema coverage is 100% and parameters are described in the schema. The description adds minimal value beyond the schema, only linking the refresh parameter to caching. Baseline 3 is appropriate as no significant new semantic information is provided.

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

Purpose5/5

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

The description clearly states the tool 'Extract obligations from a contract' using a specific AI service, listing returned items (payment terms, deadlines, etc.), which distinguishes it from sibling tools like get_contract or get_contract_status.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives (e.g., get_contract). The caching behavior and refresh parameter are mentioned but do not clarify when extraction is appropriate or when other tools might be better.

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

get_organizationA

Get your organization metadata: id, name, plan tier (free/starter/pro/team/enterprise), API access level (read/full/none), and rate limit. Use this to introspect what surface is available before calling other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It implies a read-only operation and lists returned data, but does not disclose side effects, error handling, or authentication requirements, leaving gaps in behavioral transparency.

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

Conciseness5/5

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

The description is two sentences, front-loading the key purpose and immediate usage guidance. Every sentence contributes meaningfully without redundancy.

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

Completeness4/5

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

Despite no parameters or output schema, the description sufficiently covers the tool's output and intended use. It lacks information on errors or rate limiting behavior but is adequate for a simple introspection tool.

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

Parameters4/5

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

No parameters exist, so schema coverage is 100% trivially. The description adds value by listing the output fields, which compensates for the lack of an output schema, earning a baseline score of 4.

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

Purpose5/5

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

The description clearly states the action (get organization metadata) and lists specific fields such as id, name, plan tier, API access level, and rate limit, making it distinct from sibling tools focused on contracts.

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

Usage Guidelines4/5

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

Explicitly advises using the tool to 'introspect what surface is available before calling other tools,' providing clear context. Does not include exclusion criteria, but no alternatives are necessary given its unique role.

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

get_templateA

Fetch a template by id. Returns the full structured body: sections[] (id, title, content) and fields[] (key, label, type, required). Use the field keys when calling create_contract.filledFields.

ParametersJSON Schema
NameRequiredDescriptionDefault
templateIdYesTemplate id.

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavioral traits. It correctly indicates a read operation ('fetch') and describes the return format. However, it does not mention auth requirements, side effects, or error scenarios, which would enhance transparency for a tool without annotations.

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

Conciseness5/5

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

The description is only two sentences, front-loaded with the primary action, and includes essential details without any filler. Every sentence adds value, making it highly concise and well-structured.

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

Completeness5/5

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

Despite the lack of output schema, the description fully details the returned structure (sections and fields with key attributes) and offers a cross-reference to create_contract. For a simple fetch tool with one parameter, this provides complete contextual information for an agent to use it effectively.

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

Parameters3/5

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

Schema coverage is 100% with one parameter described as 'Template id.' The description adds no additional meaning beyond the schema, merely restating 'by id'. With high schema coverage, a score of 3 is appropriate as it does not degrade usefulness but adds no extra value.

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

Purpose5/5

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

The description clearly states the tool fetches a template by ID, with a specific verb and resource. It distinguishes from sibling list_templates by specifying retrieval of a single item, and details the returned structure, 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.

Usage Guidelines4/5

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

The description implicitly conveys when to use (when needing a specific template) and provides a valuable post-usage hint linking to create_contract. However, it does not explicitly contrast with list_templates or state when not to use, leaving some guidance implicit.

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

list_contractsA

List contracts in your organization. Filter by status, counterparty email, date range. Paginated (default 20 per page, max 100). Returns id, name, status, permalink, contentHash, polygonTxId, folder, timestamps.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by contract status. Single value (e.g. 'signed') or comma-separated list (e.g. 'draft,sent_for_review,signed').
queryNoCase-insensitive substring match against contract name.
recipientNoSubstring match against any recipient email on the contract.
fromNoISO 8601 date — earliest updatedAt. e.g. '2026-01-01'.
toNoISO 8601 date — latest updatedAt.
folderIdNoFolder ID to filter by. Use 'uncategorized' for contracts not in any folder.
pageNo
limitNo

TDQS

A3.8/5.0
Behavior3/5

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

The description adds pagination details (default 20, max 100) and return fields, but does not mention read-only nature explicitly. With no annotations, it partially compensates but lacks explicit safety cues.

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

Conciseness5/5

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

Two well-structured sentences: first introduces action, second elaborates on filters and pagination. No redundancy or fluff.

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

Completeness4/5

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

Covers all major aspects for a list tool (filters, pagination, return fields). Lacks sorting order, but that's minor. Sufficient for the parameter complexity.

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

Parameters3/5

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

Schema description coverage is 75%, so baseline is 3. The description reinforces pagination limits already in schema but adds no new semantics for page or limit parameters beyond restating defaults.

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

Purpose5/5

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

The description clearly states the tool's action ('List contracts in your organization.') and specifies key filters and return fields, distinguishing it from siblings like get_contract and send_contract.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus siblings (e.g., search vs. list all), but the description implies it for general listing with filters, which is adequate for an agent with sibling context.

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

list_templatesA

List available contract templates (62 human-vetted base templates across 12 industry categories, plus your org's custom templates). Filter by category or jurisdiction.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter to one category. One of: freelance, agency, startup, ip, sales, hr, real-estate, ecommerce, construction, healthcare, education, events.
jurisdictionNoFilter by jurisdiction. One of: US, ES, UK, FR, DE, EU.
queryNoSubstring search against template name.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It adds behavioral context about the template set (62 pre-vetted plus custom) and filtering options, but does not disclose important traits like pagination, ordering, or whether the output includes full template structures or only summaries. For a list tool, this is a notable gap.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action and scope. No redundant or extraneous information. Every word adds value.

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

Completeness3/5

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

Given no output schema or annotations, the description is moderately complete: it explains what templates are listed and how to filter. However, it omits details about the response format, pagination, and limits. For a straightforward list tool, this 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.

Parameters3/5

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

Schema coverage is 100%, so parameters are already documented. The description adds context about the template categories and jurisdictions, but does not provide additional meaning beyond the schema. The 'query' parameter is only described as 'substring search', which matches the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('List') and identifies the resource ('contract templates'), including distinguishing context (62 human-vetted base + custom templates, 12 industry categories). It clearly distinguishes from sibling tools like get_template (singular) and list_contracts (different resource).

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

Usage Guidelines3/5

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

The description mentions filtering by category or jurisdiction, providing clear usage context, but does not explicitly state when to use this tool versus alternatives like get_template for a specific template, nor any when-not-to-use conditions.

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

release_milestoneA

Release an escrow milestone. The funds settle directly on the recipient's connected account (Stripe Connect Mode B) or on-chain wallet (Mode A USDC) — non-custodial in both paths. Agent callers must have escrow.release in their mandate.capabilities.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe contract id.
milestoneIdYesThe milestone id within the contract's escrow.milestones[].

TDQS

A4/5.0
Behavior3/5

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

Discloses settlement paths and non-custodial nature, and required capability; but without annotations, more behavioral details (e.g., irreversibility, error behavior) would improve transparency.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, each sentence adds distinct value (settlement info, capability requirement). No wasted words.

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

Completeness4/5

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

Given no output schema, the description explains the core effect (funds settle) and prerequisites, but lacks mention of response or error handling.

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

Parameters3/5

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

Schema coverage is 100%, so the description adds no additional meaning beyond the schema's parameter descriptions.

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

Purpose5/5

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

The description clearly states the verb 'Release' and the resource 'escrow milestone', differentiating it from sibling tools like create_contract or get_contract.

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

Usage Guidelines4/5

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

Provides clear context for when to use the tool (to release a milestone) and the required capability, but does not explicitly state when not to use or suggest alternatives.

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

report_eventA

Report a signed event to a contract's machine-readable terms. When a term's when+condition matches, the term's action fires (typically escrow.release). Caller must use a qc_agnt_* API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe contract id.
termIdYesWhich machineTerm this event satisfies.
eventNoEvent kind. Optional — defaults to the term's when.event.
evidenceYesEvent-specific evidence (e.g. { schema, value, contentHash, deliveredAt }). Evaluated against the term's condition predicates.
timestampNoISO 8601 timestamp. Optional — defaults to now.
signatureNoOptional hex Ed25519 signature over SHA-256(termId || canonicalJson(evidence) || ISO timestamp). Provides non-repudiation when the agent can sign locally.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses behavioral traits: it reports events that can trigger actions (implied destructive), requires a specific API key, and details the optional signature for non-repudiation. No contradictions present.

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

Conciseness5/5

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

The description is extremely concise (three sentences) with front-loaded purpose. Every sentence adds essential information without redundancy or fluff.

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

Completeness4/5

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

Given the tool's complexity (6 params, nested objects, no output schema), the description adequately covers the workflow and parameter interactions. It could mention return value briefly for higher completeness.

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

Parameters5/5

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

Even though schema description coverage is 100%, the description adds significant value beyond schema. It explains default behavior for event and timestamp, the role of evidence evaluation, and the signature cryptographic method, enriching the agent's understanding.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Report a signed event to a contract's machine-readable terms.' It explains the triggering mechanism and distinguishes from siblings like release_milestone or sign_as_agent by focusing on automated term evaluation.

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

Usage Guidelines4/5

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

The description explains the chain reaction (when+condition matches fires action) and mandates using a qc_agnt_* API key. It implicitly sets context for usage but lacks explicit when-not-to-use or comparisons to other tools.

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

send_contractA

Send a draft contract to its recipients. Recipients receive an email with a tokenized claim link. When the caller is an agent, recipient email domains are checked against mandate.limits.allowedCounterpartyDomains.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe contract id.
messageNoOptional message to include in the recipient email.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It mentions email sending and domain checking but does not disclose that sending likely changes the contract status (e.g., from draft to sent), nor does it cover authorization requirements, rate limits, or reversibility. This is insufficient for a mutation tool.

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

Conciseness5/5

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

The description is very concise with two sentences. The first sentence immediately states the core purpose, and the second adds a specific behavioral condition. No extraneous words, making it efficient for an AI agent to parse.

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

Completeness3/5

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

Given the tool's simplicity (2 parameters, no output schema), the description covers the basic action and a conditional email domain check. However, it lacks details about the effect on contract status, potential errors, or return values. While adequate, it leaves some context gaps for an agent.

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

Parameters3/5

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

Schema description coverage is 100% as per context signals. The description adds no additional meaning beyond the schema: the schema already states that message is an 'Optional message to include in the recipient email.' The description repeats this and does not enhance understanding of contractId. Thus, baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Send a draft contract to its recipients.' It identifies the specific action (send) and resource (draft contract), and mentions the email notification with tokenized link. This distinguishes it from sibling tools like create_contract or add_recipient.

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

Usage Guidelines3/5

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

The description provides implicit usage guidance by noting that when the caller is an agent, recipient email domains are checked against counterparty domains. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention any prerequisites or conditions for successful use.

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

sign_as_agentA

Sign a contract as an agent. Requires a qc_agnt_* API key. Produces an Ed25519 signature over SHA-256(contentHash || timestamp || did). The signature is embedded in the contract's audit trail and resolvable externally via the agent's did:web identifier — no QC API dependency for verification.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe contract id.
partyYesWhich party slot to sign: 'A' or 'B'. Agent must either own the contract (party_a) or be registered as a recipient with kind='agent' (party_b).

TDQS

A4.3/5.0
Behavior4/5

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

Discloses key behaviors: required API key pattern, Ed25519 signature over specific fields, embedding in audit trail, and external resolvability without QC API. No annotations, so description carries full burden and does well.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose and requirement, no wasted words. Efficient and clear.

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

Completeness3/5

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

With no output schema, the description omits what the tool returns (success indicator or signature). While it explains where the signature goes, the immediate return value is missing, leaving a gap for the agent.

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

Parameters4/5

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

Schema coverage is 100% with basic descriptions. The description adds extra context for 'party' (ownership/recipient conditions) that goes beyond the schema, enhancing meaning.

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

Purpose5/5

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

The description clearly states 'Sign a contract as an agent' with specific verb and resource, and uniquely distinguishes from sibling tools like create_contract or send_contract.

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

Usage Guidelines4/5

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

Provides clear context (requires qc_agnt_* API key) but does not explicitly exclude scenarios or compare with alternatives. Implies usage is for agent signing only.

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

update_contractA

Update a draft contract: change filledFields, contractName, or edit individual section bodies. Only works while status='draft'. Returns the updated contract.

ParametersJSON Schema
NameRequiredDescriptionDefault
contractIdYesThe contract id.
contractNameNo
filledFieldsNo
editedSectionsNoReplace the sections array. Each section: { id, title, content }.

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description bears full burden. It mentions update and return of updated contract, but does not clarify whether updates are merged or overwritten. The editedSections parameter replaces the entire sections array, which is not obvious from 'edit individual section bodies'. Slight mismatch between description and schema.

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

Conciseness5/5

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

Two sentences: first lists operations, second specifies constraint and return. Every word adds value with no redundancy.

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

Completeness4/5

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

Given no output schema, the description mentions returning the updated contract. It covers the main input parameters and a key precondition. Could hint at the shape of the returned contract for completeness, but overall adequate.

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

Parameters3/5

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

Schema coverage is 50% (contractId and editedSections have descriptions). The description adds that contractName and filledFields can be changed, but no detailed semantics (e.g., constraints on filledFields keys). For editedSections, the description says 'edit individual section bodies' which is less precise than schema's 'Replace the sections array'.

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

Purpose5/5

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

The description clearly states the tool updates a draft contract, lists specific operations (change filledFields, contractName, edit section bodies), and distinguishes it from siblings like create_contract or get_contract. The constraint 'Only works while status=draft' further clarifies its scope.

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

Usage Guidelines4/5

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

The description explicitly states the tool only works on draft contracts, providing clear context. It does not mention alternatives for non-draft contracts, but the precondition is sufficient for most use cases.

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

verify_hashA

Verify a contract by its SHA-256 content hash. Returns whether the hash is registered, its on-chain Polygon transaction id, and the signedBy[] array — for agent-signed contracts this includes the DID and the externally-verifiable Ed25519 signature payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentHashYesSHA-256 content hash (64 hex chars) of the contract to verify.

TDQS

A3.9/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the full burden. It explains what is returned: registration status, on-chain Polygon transaction ID, and signedBy array with DID and Ed25519 signature payload. This gives the agent a clear picture of the tool's behavior and outputs.

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

Conciseness4/5

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

The description is a single sentence that efficiently conveys the purpose, input, and outputs. It is well structured and not verbose, though it could be slightly more concise by splitting into two sentences. Still, every word earns its place.

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

Completeness4/5

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

For a simple verification tool with one parameter and no output schema, the description provides sufficient detail: it explains what the tool does, what it returns, and the format of the hash. It is complete enough for an agent to understand the tool's functionality without additional context.

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

Parameters3/5

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

Schema description coverage is 100%, and the description repeats the same information about the parameter contentHash ('SHA-256 content hash (64 hex chars)'). No additional meaning is added beyond what the schema provides, 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.

Purpose5/5

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

Clearly states the verb 'Verify' and the resource 'contract by its SHA-256 content hash'. The description distinguishes the tool from siblings by specifying the unique input (hash) and the outputs (registration status, transaction ID, signedBy array). No ambiguity about what the tool does.

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

Usage Guidelines3/5

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

The description implies usage (when you have a hash and need to verify registration and signatures) but does not explicitly state when to use this tool over alternatives like get_contract or get_contract_status. 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.

Tool Schema Changelog

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

  1. 17 tool updatesv0.2.0
    • First observedadd_machine_term
    • First observedadd_recipient
    • First observedcreate_contract
    • First observedget_audit_log
    • First observedget_contract
    • First observedget_contract_status
    • First observedget_obligations
    • First observedget_organization
    • First observedget_template
    • First observedlist_contracts
    • First observedlist_templates
    • First observedrelease_milestone
    • First observedreport_event
    • First observedsend_contract
    • First observedsign_as_agent
    • First observedupdate_contract
    • First observedverify_hash

TDQS

A4.1/5.0

Scored across 17 tools

Disambiguation5/5

Each tool targets a distinct action in the contract lifecycle (e.g., create vs. update vs. send vs. sign). There is no ambiguity between tools like get_contract and get_contract_status, as the latter is explicitly lighter weight.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case naming pattern (e.g., create_contract, add_recipient, release_milestone). No mixing of styles or vague verbs.

Tool Count5/5

17 tools is appropriate for a contract management server covering creation, sending, signing, machine terms, milestones, auditing, and verification. Each tool serves a clear purpose without being excessive.

Completeness4/5

The tool set covers the full contract lifecycle from draft creation to signing and verification. Minor gaps exist, such as no explicit tool to remove a recipient or delete a draft, but these are minor given the domain's constraints.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables AI agents to perform financial transactions such as direct payments, escrows, and bounty management using natural language with zero code integration. It provides a comprehensive suite of tools for fund streaming, subscriptions, and reputation tracking to facilitate secure agent-to-agent commerce.
    8 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to check balances and send transactions across multiple blockchains with automatic spending limit protection and policy enforcement.
    3
    MIT