imd-mcp
Integrates with Ethereum mainnet for paid IMD swarm actions. Supports the x402/Permit2 flow: quoting, checking spend caps, signing EIP-712 PermitWitnessTransferFrom and QuoteApproval payloads, and submitting signed payments for onchain settlement in 0.5 IMD per action.
Provides the imd_import_repo tool to import a public GitHub repository into the IMD swarm, returning a repoUrl and baseCommit for subsequent evaluator actions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@imd-mcpcheck the evaluator verdict for github.com/owner/repo"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 |
|
| free |
|
| free |
|
| free |
| Quote only: | free |
| Pays a quoted order. Needs | 0.5 IMD |
|
| free |
|
| free |
|
| 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 startimd-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-mcpClaude 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 |
| unset |
|
|
| Per-request cap, in IMD. |
|
| Per-UTC-day cap, in IMD. Paid servers retain reservations per wallet across restarts. |
|
| When true, |
|
| 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=falseandconfirm: trueon theimd_paycall.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 withGET /requests/capabilitieson 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)
POST /requests/{id}/submit→402challenge (accepts[],quote,resource,resourceUrl,requesterScopeHash).Verify
accepts[0]andquote.paymentagainst capabilities; check caps.Sign EIP-712
PermitWitnessTransferFrom(Permit2 domain, spender0x402085c248EeA27D92E8b30b2C58ed07f9E20001, deadline =expiresAt− 5 s, witness{to: payTo, validAfter: 0}).Sign EIP-712
QuoteApproval(IdentityMD Paid Actionv1) whosepaymentHashis the sha256 of the key-sorted JSON payment object.POST /requests/{id}/submitwithPAYMENT-SIGNATURE: base64(payment)and body{quoteSignature}→202pending /200outcome.Poll
GET /requests/{id}until it leavesquoted/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 keysTests never spend real IMD and never touch mainnet — they run against
tests/mock-server.ts.
Commissioned through paid IMD swarm requests.
Available Tools
8 toolsimd_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | Action input object | |
| action | Yes | Paid action name, e.g. from imd_capabilities |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public GitHub repository URL | |
| kind | No | Import kind, e.g. 'github' | github |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Job id | |
| report | No | Also fetch the markdown report |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes | Order/request id |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to pay | |
| orderId | Yes | orderId returned by imd_quote |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | Action input, validated against the advertised schema | |
| action | Yes | Paid action name from imd_capabilities |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | Owner address |
TDQS
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.
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.
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.
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.
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.
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.
8 tool updates
v0.1.0- First observed
imd_capabilities - First observed
imd_check - First observed
imd_import_repo - First observed
imd_job - First observed
imd_order_status - First observed
imd_pay - First observed
imd_quote - First observed
imd_schedules
TDQS
Scored across 8 tools
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.
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.
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.
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
Related MCP Connectors
Deterministic MCP utilities, validation, evidence verification, and x402 commerce on Base.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
A paid remote MCP for OpenAI Codex agent coordination MCP, built to return verdicts, receipts, usage
Agent-native MCP for governed commerce, x402 payments, paid capabilities, and verifiable receipts.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceLocal stdio MCP server for x402-powered paid crypto intelligence, decision verification, and agent automation search over USDC micropayments on Base.338 npmMIT
- AlicenseAqualityCmaintenanceMCP server exposing the Swarmwage agent hire protocol as tools for any MCP-compatible AI agent (Claude Desktop, Claude Code, Cursor, Cline, etc.)113MIT
- AlicenseBqualityAmaintenanceLocal stdio MCP bridge that delegates coding work to the Grok CLI agent via isolated git worktrees and typed receipts. Provides MCP tools for interacting with the Grok CLI across stdio, WebSocket, and legacy transports.232MIT
- FlicenseNot gradedqualityBmaintenanceEnables MCP clients such as Claude Desktop or Claude Code to drive the local daemon through stdio, listing agents and sessions, running agents, and reporting costs.-