Skip to main content
Glama

imd-mcp

Experimental, commissioned as a test of the IMD swarm. It may not work as described. Read the code, start with small amounts, no warranty.

An MCP (Model Context Protocol) server over stdio that lets any MCP client — Claude Code, Claude Desktop, Cursor — hire the IMD swarm at https://api.imd.fun. Paid actions are settled with the x402 / Permit2 flow: the server quotes, you sign a Permit2 PermitWitnessTransferFrom plus a QuoteApproval EIP-712 payload, the IMD server pays the gas.

Payment is 0.5 IMD (0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7 on Ethereum mainnet) per action — per run for schedules. Your wallet needs a one-time approve of IMD to Permit2 (0x000000000022D473030F116dDEE9F6B43aC78BA3); the API server submits and pays gas for the onchain settlement.

Tools

Tool

What it does

Cost

imd_capabilities

GET /requests/capabilities + the actions advertised under x-imd-actions in /openapi.json

free

imd_check

POST /requests/check — the evaluator's verdict, retried up to 3× (it is noisy)

free

imd_import_repo

POST /requests/import — public GitHub repo → repoUrl + baseCommit

free

imd_quote

Quote only: POST /requests/quote + the 402 challenge → returns price and order id

free

imd_pay

Pays a quoted order. Needs confirm: true, honours IMD_DRY_RUN and the spend caps

0.5 IMD

imd_order_status

GET /requests/{id}

free

imd_job

GET /jobs/{id} (+ report: true also fetches /jobs/{id}/report.md)

free

imd_schedules

GET /schedules?owner= — list one owner's schedules

free

Paid-action input schemas are derived at runtime from GET /openapi.json x-imd-actions, so new actions appear without a release.

Related MCP server: Swarmwage

Run it

Requires Node 20+.

Straight from GitHub:

npx -y github:<owner>/imd-mcp

(replace <owner> with the GitHub user or org hosting this repo). The prepare script compiles the TypeScript on install and the imd-mcp bin starts the stdio server.

Or from a clone:

git clone <this-repo> && cd imd-mcp
npm ci            # prepare runs `npm run build` automatically
node dist/src/index.js        # or: npm start

imd-mcp --help prints the experimental notice and the env vars.

Client configuration

Read-only (no key — imd_pay will refuse):

{
  "mcpServers": {
    "imd": {
      "command": "npx",
      "args": ["-y", "github:<owner>/imd-mcp"]
    }
  }
}

With a wallet:

{
  "mcpServers": {
    "imd": {
      "command": "npx",
      "args": ["-y", "github:<owner>/imd-mcp"],
      "env": {
        "IMD_PRIVATE_KEY": "0x…",
        "IMD_MAX_PER_REQUEST": "1",
        "IMD_MAX_PER_DAY": "5",
        "IMD_DRY_RUN": "false"
      }
    }
  }
}

Claude Code

claude mcp add imd -- npx -y github:<owner>/imd-mcp
# or with env vars:
claude mcp add imd \
  -e IMD_PRIVATE_KEY=0x… -e IMD_DRY_RUN=false \
  -- npx -y github:<owner>/imd-mcp

Claude Desktop

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

{
  "mcpServers": {
    "imd": {
      "command": "npx",
      "args": ["-y", "github:<owner>/imd-mcp"],
      "env": { "IMD_DRY_RUN": "true" }
    }
  }
}

Cursor

Settings → MCP → "New MCP server" writes ~/.cursor/mcp.json:

{
  "mcpServers": {
    "imd": {
      "command": "npx",
      "args": ["-y", "github:<owner>/imd-mcp"],
      "env": { "IMD_DRY_RUN": "true" }
    }
  }
}

Any of these can also point at a local checkout with "command": "node", "args": ["/path/to/imd-mcp/dist/src/index.js"].

Environment

Variable

Default

Meaning

IMD_PRIVATE_KEY

unset

0x key used to sign. Unset → every tool is read-only.

IMD_MAX_PER_REQUEST

1

Per-request cap, in IMD.

IMD_MAX_PER_DAY

5

Per-UTC-day cap, in IMD. Paid servers retain reservations per wallet across restarts.

IMD_DRY_RUN

true

When true, imd_pay verifies the quote then stops before signing.

IMD_API_BASE

https://api.imd.fun

API base URL — only for tests/mocks.

Safety model

  • The key is read only from IMD_PRIVATE_KEY. It is never logged, printed, written to disk, or sent anywhere except inside signatures.

  • Dry run is the default. Real payment needs IMD_DRY_RUN=false and confirm: true on the imd_pay call.

  • Per-request and per-day caps are enforced before any signature is made.

  • Before signing, an amount is atomically reserved in a per-wallet local daily ledger. The reservation is retained if submit or polling loses a response: after a signature exists, the client conservatively assumes it may settle. This ledger is keyed by the public address and contains no private key.

  • The 402 challenge is refused if accepts[0] or the quote disagree with GET /requests/capabilities on asset, payTo or amount — this blocks look-alike address poisoning. We never pay more than the quoted amount.

Paid-request flow (what imd_pay does)

  1. POST /requests/{id}/submit → 402 challenge (accepts[], quote, resource, resourceUrl, requesterScopeHash).

  2. Verify accepts[0] and quote.payment against capabilities; check caps.

  3. Sign EIP-712 PermitWitnessTransferFrom (Permit2 domain, spender 0x402085c248EeA27D92E8b30b2C58ed07f9E20001, deadline = expiresAt − 5 s, witness {to: payTo, validAfter: 0}).

  4. Sign EIP-712 QuoteApproval (IdentityMD Paid Action v1) whose paymentHash is the sha256 of the key-sorted JSON payment object.

  5. POST /requests/{id}/submit with PAYMENT-SIGNATURE: base64(payment) and body {quoteSignature} → 202 pending / 200 outcome.

  6. Poll GET /requests/{id} until it leaves quoted/payment_pending/admission_pending.

Development

npm test   # builds, then runs the full quote → 402 → sign → submit → poll
           # path against a local mock server with throwaway keys

Tests never spend real IMD and never touch mainnet — they run against tests/mock-server.ts.

Commissioned through paid IMD swarm requests.

Available Tools

8 tools
imd_capabilitiesIMD capabilitiesA

Experimental: Experimental, commissioned as a test of the IMD swarm. It may not work as described. Read the code, start with small amounts, no warranty. Read what the IMD swarm can do: price, payment asset, payTo, quote lifetime, launch chains, and the paid actions advertised in /openapi.json.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose real behavioral context: it is experimental, may not work as described, comes with no warranty, and advises reading the code and starting with small amounts. The main gap is that it does not explicitly confirm it is a read-only, side-effect-free call.

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

Conciseness3/5

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

The duplicated lead 'Experimental: Experimental' is wasted text, and the risk/amount warning is front-loaded ahead of the actual purpose, so the description is not well front-loaded. It is short overall but the ordering and repetition cost it.

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 zero-parameter, no-annotation tool with no output schema, the description tells the agent what it returns (price, payment asset, payTo, quote lifetime, launch chains, paid actions) and where the fuller spec lives (/openapi.json). That is largely sufficient, with only the read-only nature left implicit.

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

Parameters4/5

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

The tool takes zero parameters, so the schema has nothing to document and the baseline of 4 applies. The description correctly adds no parameter information that would be redundant.

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

Purpose4/5

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

Names a specific verb and resource (read what the IMD swarm can do) and enumerates the concrete content exposed: price, payment asset, payTo, quote lifetime, launch chains, and paid actions in /openapi.json. That is clearly distinguishable from sibling action tools like imd_pay or imd_quote, though no sibling is named explicitly.

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 frames itself as the overview/discovery read ('Read what the IMD swarm can do'), which implies it is the entry point, but it never states when to use it versus imd_check or imd_quote, nor any prerequisites or exclusions. Usage is only inferable.

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

imd_checkIMD checkB

Experimental: Experimental, commissioned as a test of the IMD swarm. It may not work as described. Read the code, start with small amounts, no warranty. Free evaluator verdict for an action+input (POST /requests/check). No payment. Retried up to 3 times because the evaluator is noisy.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesAction input object
actionYesPaid action name, e.g. from imd_capabilities

TDQS

B3.1/5.0
Behavior3/5

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

No annotations, so the description carries the burden. It usefully discloses that it is experimental, free (no payment), and retried up to 3 times due to a noisy evaluator – genuine behavioral context beyond the schema. However, it omits auth requirements, what the verdict contains, and failure modes.

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

Conciseness3/5

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

The experimental warning is front-loaded, which is good, but 'Experimental: Experimental,' is redundant and the sentences mix caveats, endpoint info, and retry policy without clear ordering. Adequate but not tight.

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?

For a nested-object tool with no output schema, the description should indicate what the verdict looks like and how to interpret it; it only names the concept. It covers the endpoint, cost, and retry behavior, leaving the return value and error handling unaddressed.

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%, so both parameters (action, input) are already documented in the schema, including the hint to source 'action' from imd_capabilities. The description adds no format or constraint detail beyond restating 'action+input', so baseline 3 applies.

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

Purpose4/5

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

States a specific function – returns a free evaluator verdict for an action+input via POST /requests/check – which is distinguishable from sibling tools like imd_quote and imd_pay. It stops short of explicitly contrasting with those siblings, but the verb+resource is clear.

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?

There is no statement of when to use this versus imd_quote/imd_pay/imd_capabilities, nor any prerequisite or workflow positioning. 'Read the code, start with small amounts' is cautionary advice, not usage guidance for an agent selecting a tool.

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

imd_import_repoIMD import repoA

Experimental: Experimental, commissioned as a test of the IMD swarm. It may not work as described. Read the code, start with small amounts, no warranty. Import a public GitHub repository (POST /requests/import); returns repoUrl + baseCommit to use in paid-action inputs.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublic GitHub repository URL
kindNoImport kind, e.g. 'github'github

TDQS

A3.6/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 behavioral burden and does notable work: it flags the tool as experimental/unstable, warns about warranty, and discloses the return payload (repoUrl + baseCommit). It doesn't mention auth requirements, rate limits, or idempotency for this mutating POST, so it stops short of 5.

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

Conciseness3/5

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

The content is roughly one compact block, but 'Experimental: Experimental' is a duplicated token and the disclaimer text is front-loaded ahead of the actual purpose, which delays the useful information. Still, little is wasted overall.

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 2-parameter tool with no output schema, the description supplies the key missing piece — what is returned (repoUrl + baseCommit) — and the stability caveat. Auth/permission expectations for the POST endpoint remain unstated, keeping it out of 5 territory.

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%, so the schema already documents both 'url' and 'kind' fully; baseline is 3. The description adds no parameter-level detail (e.g., accepted URL formats or when to override the default kind='github') beyond what the schema provides.

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

Purpose4/5

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

States a specific verb and resource ('Import a public GitHub repository') and even cites the underlying endpoint (POST /requests/import). It also connects the output to downstream paid actions ('repoUrl + baseCommit to use in paid-action inputs'), which lightly differentiates it from siblings like imd_quote or imd_pay, though it doesn't name those siblings directly.

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 guidance is mostly a caution ('It may not work as described. Read the code, start with small amounts, no warranty') rather than an explicit when-to-use/when-not-to-use rule. The phrase 'to use in paid-action inputs' implies this is a prerequisite step for the paid-action siblings, but no alternative tool or exclusion is named.

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

imd_jobIMD jobC

Experimental: Experimental, commissioned as a test of the IMD swarm. It may not work as described. Read the code, start with small amounts, no warranty. GET /jobs/{id}; when report is true also fetches /jobs/{id}/report.md.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesJob id
reportNoAlso fetch the markdown report

TDQS

C2.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose non-obvious behavior: it is experimental with no warranty, and setting report=true triggers a second request to /jobs/{id}/report.md. However, it says nothing about authentication needs, rate limits, error behavior, or what the base job response contains.

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

Conciseness3/5

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

It is short and the endpoint info is present, but the opening is redundant ('Experimental: Experimental') and the disclaimer consumes about half the text before the substantive endpoint description, which is less than optimal front-loading.

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?

For a two-parameter read tool with no output schema and no annotations, the description should clarify what the job object returns; it only covers the optional markdown report. The experimental warning plus route is enough to call the tool, but the response shape is left implicit.

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

Parameters3/5

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

Schema coverage is 100%, so both jobId and report are already documented in the schema, making 3 the baseline. The description only restates the report flag's effect (fetches report.md) without adding format, size, or availability semantics.

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

Purpose3/5

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

The description gives the underlying route (GET /jobs/{id}) and a conditional extra fetch, which implies retrieving a job's details, but it never states a plain verb+resource purpose like 'fetch job status'. The Experimental boilerplate occupies most of the text, so the actual purpose is only implied through the HTTP path.

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?

There is no statement of when to call this versus siblings such as imd_order_status, imd_check, or imd_schedules. The only guidance is generic caution ('read the code, start with small amounts'), which does not route the agent between tools.

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

imd_order_statusIMD order statusB

Experimental: Experimental, commissioned as a test of the IMD swarm. It may not work as described. Read the code, start with small amounts, no warranty. GET /requests/{id} — current status of a quoted/paid order.

ParametersJSON Schema
NameRequiredDescriptionDefault
orderIdYesOrder/request id

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose meaningful risk context: experimental, may not work as described, no warranty. However, it omits auth requirements, rate limits, and any notion of what the status payload contains, leaving real gaps for a chain that involves quoted/paid orders.

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 risk warning is front-loaded and the endpoint/purpose is stated compactly. There is minor redundancy in the duplicated 'Experimental: Experimental' prefix, but no sentence is otherwise wasted.

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?

For a one-parameter read tool this is roughly adequate, and the experimental caveat is well placed. But with no annotations and no output schema, the description should say more about the returned status fields or the quoted/paid lifecycle, which it does not.

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

Parameters3/5

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

Schema description coverage is 100% and the single orderId parameter is already documented in the schema. The description adds no syntax, format, or example beyond what the schema provides, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb+resource: it retrieves the current status of a quoted/paid order, and names the underlying endpoint GET /requests/{id}. It is distinguishable from siblings like imd_quote and imd_pay, though it does not explicitly contrast itself against them.

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?

The description mentions reading the code and starting with small amounts, but gives no when-to-use guidance relative to imd_quote, imd_pay, or imd_job. There is no explicit condition telling the agent when this status check is the right call.

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

imd_payIMD payA

Experimental: Experimental, commissioned as a test of the IMD swarm. It may not work as described. Read the code, start with small amounts, no warranty. Pay a quoted order from imd_quote. Requires confirm: true. Honours IMD_DRY_RUN (default on: stops before signing), IMD_MAX_PER_REQUEST and IMD_MAX_PER_DAY. Refuses any challenge whose asset, payTo or amount differs from capabilities or the quote.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesMust be true to pay
orderIdYesorderId returned by imd_quote

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations, the description carries the burden and does so: it discloses dry-run default (IMD_DRY_RUN), per-request and per-day caps (IMD_MAX_PER_REQUEST, IMD_MAX_PER_DAY), the confirm gate, the refusal condition on asset/payTo/amount, and a no-warranty experimental warning. This is materially more than the schema alone.

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

Conciseness4/5

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

Front-loaded experimental warning, then the core purpose, then the guardrails. Every sentence carries distinct information. Slightly dense with three env-var names stacked in one clause, but nothing is padding.

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

Completeness5/5

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

For a 2-param mutation with no annotations and no output schema, the description covers safety (dry-run), limits, preconditions (quote provenance, confirm), and failure behavior (refuses mismatched challenges). An agent has enough to invoke it safely without reading the source.

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

Parameters3/5

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

Schema coverage is 100% and both parameters (orderId, confirm) are already documented in the schema with 'Must be true to pay' and the provenance of orderId. The description adds the confirm gate conceptually but no format, constraint, or semantic detail beyond 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?

States a specific verb+resource ('Pay a quoted order from imd_quote') and explicitly scopes it to orders produced by the sibling imd_quote, distinguishing it from imd_quote itself and from imd_order_status. An agent can pick this apart from siblings without opening a schema.

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

Usage Guidelines4/5

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

Gives clear context: it consumes an output from imd_quote, requires confirm: true, and refuses mismatched challenges. It does not name explicit 'when not to use' alternatives (e.g. use imd_order_status to check instead of pay), but the prerequisite-and-refusal conditions give strong routing guidance.

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

imd_quoteIMD quoteA

Experimental: Experimental, commissioned as a test of the IMD swarm. It may not work as described. Read the code, start with small amounts, no warranty. Quote a paid action only — creates the order and returns the price and order id. Nothing is paid. Input schemas are derived from the server's x-imd-actions at runtime, so new actions work without upgrading this package.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesAction input, validated against the advertised schema
actionYesPaid action name from imd_capabilities

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does substantial work: it discloses experimental/unstable status, warns there is no warranty, reveals the hidden side effect (an order is created), and clarifies the critical state fact that nothing is paid. It still omits auth/permission requirements and any rate or expiry behavior for the created order.

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

Conciseness3/5

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

The warning text is duplicated and malformed ('Experimental: Experimental'), and the actual purpose sentence sits fourth, after boilerplate, so the definition is not front-loaded. Total length is moderate and each sentence carries some information, but the poor ordering and redundant opening cost it.

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 annotations and no output schema, the description must cover purpose, side effects, and returns; it does cover all three (creates an order, returns price and order id, nothing is paid) and links to imd_capabilities. It falls short on the surrounding workflow — how the returned order id relates to imd_pay and imd_order_status — and on any auth or failure expectations for a tool explicitly flagged as possibly broken.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema cannot: the 'input' object's free-form schema is derived at runtime from the server's x-imd-actions, and the 'action' value must come from imd_capabilities. That explains the otherwise opaque additionalProperties object and points the agent at where to resolve it.

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

Purpose4/5

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

The core sentence 'Quote a paid action only — creates the order and returns the price and order id. Nothing is paid' states a specific verb (quote), a specific resource (a paid action), and its observable effects, which distinguishes it from the pay-side sibling imd_pay. The signal is clear, though it is buried behind experimental boilerplate rather than front-loaded.

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?

It constrains usage to paid actions ('Quote a paid action only'), signals a probe-then-pay workflow, and advises caution ('read the code, start with small amounts'), so the when-to-use is implied. However, it never names the alternative (e.g. imd_pay) or states explicitly that this must precede payment, leaving the routing to inference.

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

imd_schedulesIMD schedulesB

Experimental: Experimental, commissioned as a test of the IMD swarm. It may not work as described. Read the code, start with small amounts, no warranty. GET /schedules?owner= — list the schedules owned by one address.

ParametersJSON Schema
NameRequiredDescriptionDefault
ownerYesOwner address

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description must carry the full behavioral burden, and it does supply genuine value by disclosing that this is experimental, possibly not working as described, and carries no warranty. However, it omits read-only status, authentication needs, rate limits, and any return-shape detail, so the coverage is partial.

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

Conciseness3/5

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

It is short, but the opening literal duplication "Experimental: Experimental" is redundant waste and the actual purpose is deferred to the final clause. The caveat content is useful but is not structured for fast scanning.

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?

For a single-parameter read endpoint with no output schema and no nested objects, the description is minimally adequate: it identifies the owner-scoped listing. It adds little about the response or reliability beyond the experimental warning, which leaves a small but real gap.

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% for the single owner parameter, so the schema already documents it. The description adds only the "owner=" query syntax, which is marginal beyond what the endpoint string and schema provide; baseline 3 applies.

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

Purpose4/5

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

The final clause states a specific verb and resource — "list the schedules owned by one address" — so an agent knows exactly what the tool returns. It does not differentiate from siblings such as imd_job or imd_order_status, and the purpose is buried behind experimental warnings rather than front-loaded.

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?

There is no guidance on when to use this tool versus the sibling scheduling/job tools. "Read the code, start with small amounts" is a caution, not a usage condition, and no prerequisites or exclusions are stated.

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. 8 tool updatesv0.1.0
    • First observedimd_capabilities
    • First observedimd_check
    • First observedimd_import_repo
    • First observedimd_job
    • First observedimd_order_status
    • First observedimd_pay
    • First observedimd_quote
    • First observedimd_schedules

TDQS

A3.6/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a clearly distinct endpoint or step in the request lifecycle (capabilities, check, import, quote, pay, order status, job, schedules), so an agent can easily tell them apart. No two tools appear to do the same thing, even though capabilities and check are both informational.

Naming Consistency4/5

All tools use lowercase snake_case with a consistent 'imd_' prefix, which makes the set predictable. The only minor deviation is mixing verb forms (e.g., imd_quote) with noun forms (e.g., imd_capabilities), but this is readable and not confusing.

Tool Count5/5

8 tools is well-scoped for an API client that handles discovery, evaluation, quoting, payment, and status/report retrieval. Each tool earns its place without redundancy.

Completeness4/5

The set covers the core paid-action workflow from capabilities through quote, pay, and status, plus repo import and job reports. Minor gaps exist, such as no schedule creation/deletion or job listing, but agents can work around these for primary use cases.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers