Skip to main content
Glama

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

ack_generate_keypair

Generate a cryptographic keypair with a did:key DID

ack_create_did_web

Create a did:web DID URI from a URL

ack_create_did_pkh

Create a did:pkh DID URI from a chain ID and wallet address

ack_resolve_did

Resolve a DID URI to its DID Document

ack_create_controller_credential

Create an unsigned controller credential (W3C VC)

ack_sign_credential

Sign a credential, returning a JWT

ack_verify_credential

Verify a signed credential JWT

ack_create_jwt

Create a signed JWT with an arbitrary payload

ack_verify_jwt

Verify a signed JWT and return its payload

ack_create_payment_request

Create a signed payment request token

ack_verify_payment_request

Verify and parse a payment request JWT

ack_create_payment_receipt

Create an unsigned payment receipt (W3C VC)

ack_verify_payment_receipt

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 start

Development

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:

  1. Generate identities — create DIDs and keypairs

  2. Issue credentials — create and sign W3C Verifiable Credentials proving agent-owner relationships

  3. Verify identities — verify credentials and resolve DIDs

  4. Create payment requests — issue signed payment request tokens for HTTP 402 flows

  5. 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 tools
ack_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
issuerDidNoDID of the issuer. Defaults to the controller.
subjectDidYesDID of the agent or entity being controlled
controllerDidYesDID of the owner or entity with authority

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesWallet address on the specified chain
chainIdYesCAIP-2 chain ID (e.g. 'eip155:1' for Ethereum mainnet, 'eip155:8453' for Base, 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' for Solana)

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL of the DID subject (e.g. 'https://example.com' or 'https://example.com/agents/1')

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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

For a simple one-parameter tool, 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
payloadYesJSON string of the JWT payload (claims). Standard claims like sub, aud, exp, nbf are supported.
signerDidYesDID of the signer, set as the JWT issuer (iss claim)
signerJwkYesJWK JSON string containing the signer's private key (from ack_generate_keypair or any valid private key JWK)

TDQS

A4.2/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 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.

Conciseness5/5

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.

Completeness4/5

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.

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 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
metadataNoOptional metadata about the payment
payerDidYesDID of the entity that made the payment
issuerDidYesDID of the receipt issuer (typically the payment receiver)
paymentOptionIdYesID of the payment option that was used
paymentRequestTokenYesThe original payment request JWT that was fulfilled

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's purpose: 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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
signerDidYesDID of the payment requester (must match the JWK)
signerJwkYesJWK JSON string containing the signer's private key (from ack_generate_keypair or any valid private key JWK)
descriptionNoHuman-readable description of what the payment is for
paymentOptionsYesArray of payment options (amount, currency, recipient, network)
expiresInSecondsNoSeconds until the payment request expires

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's 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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
curveNoCryptographic curve to usesecp256k1

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description clearly states the tool's 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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
didYesThe DID URI to resolve

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

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 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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
signerDidYesDID of the signer (must match the JWK)
signerJwkYesJWK JSON string containing the signer's private key (from ack_generate_keypair or any valid private key JWK)
credentialYesJSON string of the W3C credential to sign (output from ack_create_controller_credential or ack_create_payment_receipt)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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}.

ParametersJSON Schema
NameRequiredDescriptionDefault
jwtYesThe signed credential JWT string
trustedIssuersNoList of trusted issuer DIDs. If provided, the credential issuer must be in this list.
verifyControllerClaimsNoIf 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

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

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 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
jwtYesThe signed JWT string to verify
issuerNoExpected issuer DID. If provided, verifies the JWT was signed by this DID.

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries 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.

Conciseness5/5

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.

Completeness3/5

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.

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 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.

Purpose4/5

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.

Usage Guidelines4/5

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}.

ParametersJSON Schema
NameRequiredDescriptionDefault
receiptYesThe receipt as a signed JWT string
paymentRequestIssuerNoExpected payment request issuer DID
trustedReceiptIssuersNoTrusted receipt issuer DIDs

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

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 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.

Purpose5/5

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.

Usage Guidelines4/5

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}.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYesThe payment request JWT string
issuerNoExpected issuer DID. If provided, verifies the token was issued by this DID.

TDQS

A4.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. 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.

Conciseness5/5

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.

Completeness4/5

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

For a simple verification tool with 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 13 tool updatesv0.1.0
    • First observedack_create_controller_credential
    • First observedack_create_did_pkh
    • First observedack_create_did_web
    • First observedack_create_jwt
    • First observedack_create_payment_receipt
    • First observedack_create_payment_request
    • First observedack_generate_keypair
    • First observedack_resolve_did
    • First observedack_sign_credential
    • First observedack_verify_credential
    • First observedack_verify_jwt
    • First observedack_verify_payment_receipt
    • First observedack_verify_payment_request

TDQS

A4.1/5.0

Scored across 13 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers