ack-mcp
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., "@ack-mcpCreate a signed payment request for $5 to my DID."
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.
ack-mcp
MCP server for the Agent Commerce Kit — exposes ACK-ID and ACK-Pay operations as tools for AI agents via the Model Context Protocol.
Tools
Tool | Description |
| Generate a cryptographic keypair with a |
| Create a |
| Create a |
| Resolve a DID URI to its DID Document |
| Create an unsigned controller credential (W3C VC) |
| Sign a credential, returning a JWT |
| Verify a signed credential JWT |
| Create a signed JWT with an arbitrary payload |
| Verify a signed JWT and return its payload |
| Create a signed payment request token |
| Verify and parse a payment request JWT |
| Create an unsigned payment receipt (W3C VC) |
| Verify a signed payment receipt JWT |
Related MCP server: A2A Client MCP Server
Quick start
With Claude Code
{
"mcpServers": {
"ack": {
"command": "npx",
"args": ["ack-mcp"]
}
}
}With Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"ack": {
"command": "npx",
"args": ["ack-mcp"]
}
}
}From source
git clone https://github.com/ak68a/ack-mcp.git
cd ack-mcp
npm install
npm startDevelopment
npm install
npm test # Run tests
npm run build # Build for distribution
npm start # Run the server (dev mode via tsx)How it works
The server uses stdio transport and registers 13 tools that wrap the agentcommercekit SDK. An AI agent can:
Generate identities — create DIDs and keypairs
Issue credentials — create and sign W3C Verifiable Credentials proving agent-owner relationships
Verify identities — verify credentials and resolve DIDs
Create payment requests — issue signed payment request tokens for HTTP 402 flows
Verify payments — verify payment request tokens and payment receipts
All cryptographic operations use the ACK SDK's key management — keys are passed as JWK JSON strings between tool calls, and DIDs are used as identifiers throughout.
License
MIT
Available Tools
13 toolsack_create_controller_credentialA
Create an unsigned W3C Verifiable Credential proving that a subject DID (e.g. an agent) is controlled by a controller DID (e.g. the owner). Pass the JSON output to ack_sign_credential to get a signed JWT.
| Name | Required | Description | Default |
|---|---|---|---|
| issuerDid | No | DID of the issuer. Defaults to the controller. | |
| subjectDid | Yes | DID of the agent or entity being controlled | |
| controllerDid | Yes | DID of the owner or entity with authority |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the disclosure burden. It clearly states that the operation only creates an unsigned credential and that signing is a separate follow-up step, which clarifies there are no signing or verification side effects. It does not mention potential DID validation behavior, but this is a minor gap for a stateless object-creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the key purpose and follow-up instruction are both front-loaded. Every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter creation tool with no output schema, the description provides enough context: what it creates, the relationship semantics, the output form (JSON), and the next step. The lack of an explicit return-schema description is acceptable because the credential format is standardized and the follow-up signing tool is named.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, so each parameter is already described. The tool description adds helpful real-world role examples (agent vs. owner), but it does not materially extend the schema's parameter definitions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Create'), the resource (an unsigned W3C Verifiable Credential), and the specific purpose (proving a subject DID is controlled by a controller DID). It also distinguishes this from signing and verification siblings by explicitly noting the credential is unsigned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit workflow guidance by telling the agent to pass the output to ack_sign_credential to obtain a signed JWT. It does not explicitly contrast this with alternatives like ack_create_jwt, but the intended usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ack_create_did_pkhA
Create a did:pkh DID URI from a blockchain chain ID and wallet address. Use for representing on-chain identities (e.g. Ethereum wallets) as DIDs.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Wallet address on the specified chain | |
| chainId | Yes | CAIP-2 chain ID (e.g. 'eip155:1' for Ethereum mainnet, 'eip155:8453' for Base, 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It conveys the core transformation (chain ID + wallet address → did:pkh URI) and the intended use case, which is meaningful. However, it does not disclose validation behavior, error handling, side effects, or return format, leaving some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler: the first sentence states the operation and inputs, the second provides the use case. It is appropriately sized, front-loaded, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with fully documented schema coverage, the description is nearly sufficient. It explains the output type (DID URI) and the use case, though it could also mention the exact URI structure or validation of the chainId enum. The absence of an output schema makes a small additional note desirable, but not critical.
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 schema already documents both parameters well, including a CAIP-2 explanation and examples for chainId and a clear description for address. The tool description adds no new parameter-level detail beyond a generic restatement, so the 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 description states a specific action ('Create'), a specific resource ('did:pkh DID URI'), and the exact inputs ('blockchain chain ID and wallet address'). It also distinguishes itself from the sibling ack_create_did_web by specifying the on-chain/did:pkh method, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear when-to-use guidance: 'Use for representing on-chain identities (e.g. Ethereum wallets) as DIDs.' It does not explicitly say when not to use it or name alternatives like ack_create_did_web, but the use case is specific enough to route the agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ack_create_did_webA
Create a did:web DID URI from a URL. Use for agents or services hosted at a known web address. The domain must host a .well-known/did.json document for DID resolution to work.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the DID subject (e.g. 'https://example.com' or 'https://example.com/agents/1') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It discloses the core behavior (creating a DID URI) and the resolution requirement for the resulting DID, but it does not specify whether the tool performs any validation, makes network calls, or what the exact output format is. It implies a pure string transformation without stating so explicitly. No contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with the primary action stated first, followed by usage context and a key prerequisite. There is no redundant phrasing, and the structure is front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers the core purpose and a key environmental requirement, but it leaves ambiguity about whether the tool itself validates the .well-known/did.json file or how it handles malformed URLs. It does not explicitly state the return value, though it is inferable from the purpose. Given the simplicity, this is adequate but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (the url parameter is described with an example). The description adds context that the URL is for web-hosted subjects, but it does not explain how the URL is transformed into a DID (e.g., path mapping rules, protocol normalization). This adds minimal value beyond the schema's own description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a did:web DID URI') and the resource (a DID derived from a URL). It explicitly mentions the did:web method, which distinguishes it from the sibling ack_create_did_pkh. The scope is well-defined: 'from a URL' and 'agents or services hosted at a known web address.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit usage condition: 'Use for agents or services hosted at a known web address.' It also notes a prerequisite (the domain must host .well-known/did.json), which guides correct use. However, it does not contrast with alternative DID creation tools (e.g., ack_create_did_pkh) or state when not to use this tool, so it's not a full routing guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ack_create_jwtA
Create a signed JWT with an arbitrary payload. Use for challenge-response authentication, signed messages between agents, or any custom signed payload. The JWT is signed with the provided JWK and includes the signer's DID as the issuer.
| Name | Required | Description | Default |
|---|---|---|---|
| payload | Yes | JSON string of the JWT payload (claims). Standard claims like sub, aud, exp, nbf are supported. | |
| signerDid | Yes | DID of the signer, set as the JWT issuer (iss claim) | |
| signerJwk | Yes | JWK JSON string containing the signer's private key (from ack_generate_keypair or any valid private key JWK) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It meaningfully discloses that the JWT is signed with the provided JWK and that the signer's DID becomes the issuer, which is beyond what the schema states. It does not cover return type or edge cases, but the core signing behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that front-load the core purpose, follow with explicit use cases, and add a key behavioral detail. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with fully documented inputs, the description covers purpose, use cases, signing behavior, and issuer semantics. No output schema exists, but the creation of a signed JWT is clearly implied. Minor omissions like return format and validation behavior are not critical given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description reinforces that the payload is arbitrary and that the DID is used as issuer, but it does not add substantial new parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Create a signed JWT with an arbitrary payload.' It also distinguishes itself from credential-focused siblings by emphasizing arbitrary signed payloads for challenge-response and inter-agent messages, making selection unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage contexts: 'challenge-response authentication, signed messages between agents, or any custom signed payload.' It does not explicitly list exclusions or alternatives, but the use cases are specific enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ack_create_payment_receiptA
Create an unsigned payment receipt as a W3C Verifiable Credential. The output is unsigned JSON — you must pass it to ack_sign_credential with the receipt issuer's JWK and DID to get a signed JWT, then verify it with ack_verify_payment_receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| metadata | No | Optional metadata about the payment | |
| payerDid | Yes | DID of the entity that made the payment | |
| issuerDid | Yes | DID of the receipt issuer (typically the payment receiver) | |
| paymentOptionId | Yes | ID of the payment option that was used | |
| paymentRequestToken | Yes | The original payment request JWT that was fulfilled |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the key behavior that the output is unsigned JSON, and it implies the tool does not sign or verify. It also outlines the necessary follow-up actions. However, it does not mention potential side effects, input validation, or failure modes, which would add more transparency for a creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the core purpose, and then efficiently explains the required workflow. Every sentence adds value, and there is no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for the tool's role in the payment receipt lifecycle: it explains that the output is unsigned, must be signed, and then verified. It references sibling tools and gives the necessary context. However, it does not describe the exact output structure beyond 'unsigned JSON', which might be useful, but given the lack of an output schema, the description could offer a bit more detail about what the credential contains.
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 all parameters are already documented in the schema. The description does not add extra meaning about the parameters themselves, but it does provide context about how the parameters relate to the workflow (e.g., the issuerDid is used for signing). This is adequate given the schema's thoroughness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: creating an unsigned payment receipt as a W3C Verifiable Credential. It distinguishes itself from sibling tools by explicitly mentioning that the output is unsigned and must be passed to ack_sign_credential, differentiating it from signing and verification tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: it states the output must be signed with ack_sign_credential and then verified with ack_verify_payment_receipt. This tells the agent exactly when to use this tool and what steps to take next, making the workflow clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ack_create_payment_requestA
Create a signed payment request token (JWT) for use in HTTP 402 responses. Unlike receipts, this creates AND signs in one step. Verify the result with ack_verify_payment_request.
| Name | Required | Description | Default |
|---|---|---|---|
| signerDid | Yes | DID of the payment requester (must match the JWK) | |
| signerJwk | Yes | JWK JSON string containing the signer's private key (from ack_generate_keypair or any valid private key JWK) | |
| description | No | Human-readable description of what the payment is for | |
| paymentOptions | Yes | Array of payment options (amount, currency, recipient, network) | |
| expiresInSeconds | No | Seconds until the payment request expires |
TDQS
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 discloses the key behavioral trait of combining creation and signing in one step, and mentions the signerJwk can come from ack_generate_keypair, which is helpful. However, it does not describe the output format, potential errors, or side effects, which could be relevant for a tool without annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, each serving a distinct purpose: the first states the core functionality and context, the second contrasts with receipts and points to verification. There is no wasted wording, and it is front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, no output schema, no annotations), the description provides enough to understand the tool's role and basic behavior. It mentions the 402-use case, the signing step, and the verification tool. However, it lacks details on error conditions or the exact return value, which could be inferred from the schema but are not explicitly stated. Overall, it is sufficient but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are fully documented in the schema. The description adds minimal extra value: it mentions the signerJwk source (ack_generate_keypair) and the verification tool, but does not elaborate on any parameter beyond the schema. With full schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb ('Create'), the resource ('a signed payment request token (JWT)'), and its specific context ('for use in HTTP 402 responses'). It also distinguishes itself from receipts by noting 'Unlike receipts, this creates AND signs in one step', which differentiates it from the sibling ack_create_payment_receipt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives implicit usage guidance by contrasting with receipts, implying this is for payment requests rather than receipts. It also advises verification with ack_verify_payment_request, which is a clear follow-up step. However, it does not explicitly name the alternative tool or state when not to use this tool, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ack_generate_keypairA
Generate a new cryptographic keypair with a did:key DID. Returns the JWK (private key), DID, and curve. Pass the jwk value to any tool that requires signerJwk. The DID can be used as signerDid, subjectDid, controllerDid, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| curve | No | Cryptographic curve to use | secp256k1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the tool generates a new keypair and returns the private key (JWK), which implies a security-sensitive operation. However, it doesn't disclose whether the key is persisted, whether it's ephemeral, or any security considerations (e.g., private key handling). The description adds some behavioral context beyond the schema (outputs, usage), but lacks details about side effects or security implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: what it does, what it returns, and how to use the outputs. It's front-loaded with the core purpose and immediately provides actionable guidance. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description is quite complete. It explains the return values (JWK, DID, curve) and how to use them with sibling tools. The only gap is the lack of detail about the security implications of handling a private key, but given the tool's simplicity and the schema coverage, this is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the only parameter 'curve' has a description ('Cryptographic curve to use') and an enum of valid values. The tool description adds context about the default curve (secp256k1) and how the output is used, but doesn't add new meaning to the parameter itself. Baseline 3 is appropriate since the schema already documents the parameter fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: generating a new cryptographic keypair with a did:key DID. It specifies the exact outputs (JWK private key, DID, curve) and distinguishes it from sibling tools that create credentials, sign, verify, or create other DID types. The verb 'Generate' plus the resource 'cryptographic keypair with a did:key DID' is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Pass the jwk value to any tool that requires signerJwk. The DID can be used as signerDid, subjectDid, controllerDid, etc.' This tells the agent exactly when to use this tool (when a signerJwk or DID is needed) and how the outputs feed into other tools. It also implicitly distinguishes from sibling tools that consume these values rather than generate them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ack_resolve_didA
Resolve a DID URI to its DID Document. Supports did:key, did:web, and did:pkh methods.
| Name | Required | Description | Default |
|---|---|---|---|
| did | Yes | The DID URI to resolve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the core function without mentioning network dependencies, error handling, timeouts, or any side effects. The behavior beyond the basic action is opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action and quickly specifies supported methods. There is no redundant text or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one parameter, no output schema), the description covers the essential purpose and supported methods. However, it omits potential error scenarios or response format details, which would be useful but are not critical for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter, and the tool description itself adds no extra meaning beyond restating 'DID URI'. Since the schema already fully describes the parameter, the description does not enhance semantic understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Resolve') and the resource ('DID URI to its DID Document'), and explicitly lists supported methods (did:key, did:web, did:pkh). This distinguishes it from sibling creation/verification tools, which serve entirely different purposes.
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 explicit guidance on when to use this tool versus alternatives, nor any mention of exclusions. However, since it is the only resolve tool among siblings, its purpose is implied. Still, no direct comparison or conditional usage is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ack_sign_credentialA
Sign a W3C Verifiable Credential, returning a signed JWT string. Pass the JSON output from ack_create_controller_credential or ack_create_payment_receipt as the credential parameter. The resulting JWT can be verified with ack_verify_credential or ack_verify_payment_receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| signerDid | Yes | DID of the signer (must match the JWK) | |
| signerJwk | Yes | JWK JSON string containing the signer's private key (from ack_generate_keypair or any valid private key JWK) | |
| credential | Yes | JSON string of the W3C credential to sign (output from ack_create_controller_credential or ack_create_payment_receipt) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden, and it does state the output behavior ('returning a signed JWT string') and the verification follow-up. It does not disclose behavior on key/DID mismatch or algorithm details, but for a pure signing action the core behavior and result are transparent enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly focused sentences with no filler. The core purpose is front-loaded, and the input-source and verification guidance each add necessary workflow context.
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 three-required-parameter tool with full schema coverage and no output schema, the description closes the loop: where inputs come from, what is returned, and how to use the result. Nothing essential is missing for selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even without extra parameter descriptions in the tool description. The prose mostly restates the schema hints about where credential and signerJwk come from, adding little additional meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Sign'), a precise resource ('a W3C Verifiable Credential'), and the return type ('a signed JWT string'). It also anchors the tool in a workflow by naming related creators and verifiers, which distinguishes it from generic JWT tools like ack_create_jwt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: pass output from ack_create_controller_credential or ack_create_payment_receipt as credential, and verify the result with ack_verify_credential or ack_verify_payment_receipt. It does not explicitly say when not to use it versus ack_create_jwt, but the W3C VC framing makes the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ack_verify_credentialA
Verify a signed credential JWT (from ack_sign_credential). Checks signature, expiration, and optionally trusted issuers. Set verifyControllerClaims to true to also verify the controller relationship against the subject's DID document (requires did:web or similar — did:key does not support this). Returns {valid: true/false}.
| Name | Required | Description | Default |
|---|---|---|---|
| jwt | Yes | The signed credential JWT string | |
| trustedIssuers | No | List of trusted issuer DIDs. If provided, the credential issuer must be in this list. | |
| verifyControllerClaims | No | If true, verify controller claims against the subject's DID document. Requires the subject DID to declare a controller (e.g. did:web). Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does well: it discloses the checks performed (signature, expiration, trusted issuers), the did:key limitation, and the return shape {valid: true/false}. It stops short of describing error behavior or whether validation failures throw vs return false, but the boolean return makes this mostly inferable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences front-load the core action, then cover key checks, optional behavior, a critical limitation, and the return value. Every sentence adds distinct value with no redundant restatement of the tool name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description adequately covers purpose, parameters, constraints, and return shape. Slight gaps around error handling and explicit prerequisites (e.g., needing a resolved DID document) prevent a perfect score, but the tool is callable correctly from the description alone.
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 behavioral meaning beyond the schema: it explains that trustedIssuers restricts allowed issuers and that verifyControllerClaims requires controller-supporting DID methods. This enriches the parameter semantics beyond property names and types.
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 action ('Verify'), a specific resource ('signed credential JWT'), and names its producer ('from ack_sign_credential'), which clearly distinguishes it from sibling tools like ack_verify_jwt or ack_verify_payment_receipt. The scope of verification (signature, expiration, trusted issuers) is also explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by tying it to ack_sign_credential and explains when the optional controller verification is viable or not (did:web vs did:key). It does not explicitly contrast with ack_verify_jwt or state when not to use this tool, but the context is reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ack_verify_jwtA
Verify a signed JWT and return its decoded payload. Checks the signature against the issuer's DID. Use for verifying challenge-response tokens or any signed message from another agent.
| Name | Required | Description | Default |
|---|---|---|---|
| jwt | Yes | The signed JWT string to verify | |
| issuer | No | Expected issuer DID. If provided, verifies the JWT was signed by this DID. |
TDQS
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 does disclose the core behavioral trait: it checks the signature against the issuer's DID and returns the decoded payload. However, it does not state what happens on invalid/expired tokens, whether network/DID resolution is involved, or whether there are any side effects, which leaves meaningful gaps for a verification tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the primary action and output; the second provides usage context. Information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with full schema coverage, the description covers the tool's purpose, output, and typical use case. However, there is no output schema and no explanation of error/failure behavior, which is important for a verification tool. The description is adequate but not complete enough to fully guide an agent through edge cases.
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 parameters well, giving a baseline of 3. The description adds some context by mentioning the issuer DID in the signature-check step, which reinforces the 'issuer' parameter's purpose, but it does not introduce meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Verify a signed JWT') and states the output ('return its decoded payload'). It also mentions the signature check against the issuer's DID. However, it does not explicitly differentiate this from sibling verification tools like ack_verify_credential or ack_verify_payment_receipt, though the JWT focus makes the distinction reasonably 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?
The description provides explicit usage context: 'Use for verifying challenge-response tokens or any signed message from another agent.' This tells the agent when the tool is appropriate, but it does not mention when not to use it or point to alternatives among the siblings, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ack_verify_payment_receiptA
Verify a signed payment receipt JWT (from ack_sign_credential after ack_create_payment_receipt). Checks receipt signature, receipt claims, and optionally the embedded payment request. Returns {valid: true/false}.
| Name | Required | Description | Default |
|---|---|---|---|
| receipt | Yes | The receipt as a signed JWT string | |
| paymentRequestIssuer | No | Expected payment request issuer DID | |
| trustedReceiptIssuers | No | Trusted receipt issuer DIDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it explicitly states it 'Checks receipt signature, receipt claims, and optionally the embedded payment request' and discloses the return shape {valid: true/false}. It does not describe error handling or the trust model of trustedReceiptIssuers, but the core read-only verification behavior is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core purpose, followed by verification scope and return. The parenthetical upstream-tool reference is purposeful context and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-purpose verification tool with no output schema, the description covers input provenance, what is checked, and the return format. It could explain trustedReceiptIssuers usage and failure modes, but it is sufficient for correct invocation in the obvious flow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds pipeline context but does not add parameter-level meaning beyond the schema; 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 and resource: 'Verify a signed payment receipt JWT'. It differentiates from siblings by focusing on 'payment receipt' and referencing the upstream tools (ack_sign_credential, ack_create_payment_receipt), so an agent can distinguish it from ack_verify_credential or ack_verify_jwt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear pipeline context: the receipt comes 'from ack_sign_credential after ack_create_payment_receipt', telling the agent when in the flow to use this tool. It also mentions the optional embedded payment request. However, it does not explicitly contrast with sibling verification tools (e.g., ack_verify_payment_request), so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ack_verify_payment_requestA
Verify and parse a payment request JWT (from ack_create_payment_request). Returns the decoded payment request if valid, including payment options and issuer. Returns {valid: true/false}.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | The payment request JWT string | |
| issuer | No | Expected issuer DID. If provided, verifies the token was issued by this DID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the return behavior (decoded request if valid, otherwise {valid:false}) but does not mention that the operation is read-only, nor does it detail failure modes like malformed tokens or issuer mismatch. It stops short of fully disclosing the tool's safety and edge-case behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no redundancy. The main action is front-loaded, and the return format is stated succinctly. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple verification tool with full schema coverage and no output schema, the description covers the essential return values and source context. It could elaborate on validation failure behavior, but the tool's complexity is low, and the description is sufficient for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so token and issuer are already documented. The description adds value by clarifying that the token is a payment request JWT from ack_create_payment_request and that the decoded result includes payment options and issuer, going beyond the bare schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool verifies and parses a payment request JWT, and it explicitly references the source (ack_create_payment_request). It distinguishes itself from siblings like ack_verify_payment_receipt and ack_verify_jwt by narrowing the scope to payment request JWTs and describing the return payload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it's for verifying payment request JWTs from ack_create_payment_request. However, it does not explicitly state when NOT to use it (e.g., for other JWT types) or mention alternative verify tools. The context is strong but lacks exclusions.
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.
13 tool updates
v0.1.0- First observed
ack_create_controller_credential - First observed
ack_create_did_pkh - First observed
ack_create_did_web - First observed
ack_create_jwt - First observed
ack_create_payment_receipt - First observed
ack_create_payment_request - First observed
ack_generate_keypair - First observed
ack_resolve_did - First observed
ack_sign_credential - First observed
ack_verify_credential - First observed
ack_verify_jwt - First observed
ack_verify_payment_receipt - First observed
ack_verify_payment_request
TDQS
Scored across 13 tools
Most tools target distinct operations: DID creation, key generation, JWT handling, and payment flows are clearly separated. The only potential confusion is between sign/verify JWT and sign/verify credential, but the descriptions make the arbitrary-payload vs. W3C-credential distinction clear.
All tools follow the consistent ack_<verb>_<noun> pattern, e.g., create_did_web, verify_credential, generate_keypair. There are no mixed conventions or vague generic names.
13 tools is well within the ideal range for a domain spanning DIDs, JWTs, verifiable credentials, and payment receipts. Each tool covers a distinct step in the identity/payment workflow without obvious redundancy.
The core lifecycle is well covered: keypair generation, DID creation/resolution, JWT sign/verify, credential sign/verify, and the payment request/receipt flow. Minor gaps exist, such as no generic credential-creation tool or revocation mechanism, but most workflows are composable from the provided operations.
Maintenance
Related MCP Connectors
Verifiable agent DIDs + capability discovery — the passport & directory of the A2A economy.
Give AI agents identity, permissions, and reusable proof through one MCP.
Tamper-evident proof creation and verification for AI agents via MCP, A2A, and REST.
Command your AI agents: verifiable passports, credential injection, full audit, revoke in 60s.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI applications to interact with decentralized storage through a standardized Model Context Protocol interface, allowing file uploads, retrievals, and identity management.13Apache 2.0
- FlicenseAqualityNot gradedmaintenanceEnables LLMs to interact with Agent-to-Agent (A2A) protocol compatible agents, allowing them to send tasks, receive responses, track task status, and query agent capabilities through the Model Context Protocol.5-

Cheqd MCP Toolkitofficial
AlicenseNot gradedqualityCmaintenanceEnables AI agents to securely manage decentralized identities, verifiable credentials, and trust registries on the Cheqd network via the Model Context Protocol.1Apache 2.0- AlicenseBqualityDmaintenanceProvides persistent memory, reasoning engine, agent-to-agent sharing, and immutable audit trail for AI agents via the Model Context Protocol.12MIT