Skip to main content
Glama
Paymos-labs

Paymos MCP Server

Official
by Paymos-labs

@paymos/mcp

The official Paymos MCP server. A local stdio server: your coding agent — Claude Code, Cursor, or your own LLM bot — builds and verifies a Paymos merchant integration in minutes. It creates sandbox invoices, opens the payment URL, simulates payment, watches the status turn paid, verifies webhook signatures, then writes the production integration around @paymos/sdk for you. No docs to read, no skeleton code to copy.

Sandbox only in v1: the server accepts test key pairs (pk_test_ / sk_test_) and refuses live and payout keys with a clear error. Live operation arrives with the hosted mcp.paymos.io (phase 2).

Requirements

  • Node.js ≥ 20

  • A Paymos merchant account with a test key pair: Dashboard → Developers → API keys

Related MCP server: cryptunnel-mcp

Install

Nothing to install globally — run it through npx from your MCP client config.

Configure

Credentials come from the environment (the --api-key-id / --api-secret flags also work; the environment wins on conflict):

Env

Meaning

PAYMOS_API_KEY_ID

Test key id, pk_test_…

PAYMOS_API_SECRET

Test secret, sk_test_…

PAYMOS_WEBHOOK_SECRET

Optional whsec_… for verify_webhook_signature

Claude Code

{
  "mcpServers": {
    "paymos": {
      "command": "npx",
      "args": ["-y", "@paymos/mcp"],
      "env": {
        "PAYMOS_API_KEY_ID": "pk_test_…",
        "PAYMOS_API_SECRET": "sk_test_…",
        "PAYMOS_WEBHOOK_SECRET": "whsec_…"
      }
    }
  }
}

Claude Desktop

Same mcpServers block in claude_desktop_config.json — Claude → Settings → Developer → Edit Config (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json, Windows: %APPDATA%\Claude\claude_desktop_config.json).

Cursor

~/.cursor/mcp.json (or .cursor/mcp.json in the project) uses the same shape:

{
  "mcpServers": {
    "paymos": {
      "command": "npx",
      "args": ["-y", "@paymos/mcp"],
      "env": {
        "PAYMOS_API_KEY_ID": "pk_test_…",
        "PAYMOS_API_SECRET": "sk_test_…"
      }
    }
  }
}

Windsurf

Same mcpServers block in ~/.codeium/windsurf/mcp_config.json.

Cline / Roo Code

Same mcpServers block in cline_mcp_settings.json for Cline and roo_mcp_settings.json for Roo Code (MCP Servers → Configure in the extension).

VS Code (Copilot)

.vscode/mcp.json (or the user-level mcp.json) wraps the entry in servers with an explicit transport type:

{
  "servers": {
    "paymos": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@paymos/mcp"],
      "env": {
        "PAYMOS_API_KEY_ID": "pk_test_…",
        "PAYMOS_API_SECRET": "sk_test_…"
      }
    }
  }
}

Zed

~/.zed/settings.json, same fields under context_servers:

{
  "context_servers": {
    "paymos": {
      "command": "npx",
      "args": ["-y", "@paymos/mcp"],
      "env": {
        "PAYMOS_API_KEY_ID": "pk_test_…",
        "PAYMOS_API_SECRET": "sk_test_…"
      }
    }
  }
}

GLM (Z.ai)

GLM Coding Plan plugs into Claude Code as its model backend (see the Z.ai docs for the Claude Code endpoint setup). Once Claude Code runs on GLM, add the paymos server with the Claude Code config above — the MCP layer is identical.

ChatGPT

The ChatGPT app and web chat cannot launch local stdio servers; they talk to remote MCP servers over HTTP. The hosted mcp.paymos.io (phase 2) will cover ChatGPT and other hosted clients. Developers building on the OpenAI Agents SDK can mount this stdio server in their own agent code today.

Generic MCP client

Any client that speaks MCP over stdio: command npx, args ["-y", "@paymos/mcp"], env as above.

Tools (frozen public surface)

Names and schemas are fixed from 1.0.0 — breaking changes mean a new major version.

Tool

What it does

create_invoice

Creates a sandbox invoice; idempotent per external_order_id; returns payment_url

get_invoice

Fetches the current invoice state

list_invoices

One cursor page of invoices with filters (status, dates, order id)

cancel_invoice

Cancels an unpaid invoice with a stored reason

simulate_invoice_payment

Sandbox only: drives an invoice through paid / overpaid / underpay / cancel

verify_webhook_signature

Locally verifies X-Webhook-Signature against a raw webhook body

Tool errors are { "code": "paymos/<api_error_code>", "message": "…" }; the gate refusals use paymos/sandbox-only, paymos/missing-credentials and paymos/invalid-credentials.

Resources

Five static doc pages are served as MCP resources so the agent never leaves the session: paymos://docs/quick-start, paymos://docs/hosted-checkout, paymos://docs/webhooks, paymos://docs/testing-sandbox, paymos://docs/server-sdks.

Security notes

  • stdio only: no network listener is opened; the server talks to https://api.paymos.io exclusively through @paymos/sdk.

  • The secret never appears in logs, stdout or error text.

  • Live (pk_live_/sk_live_) and payout (rk_…) keys are refused at startup and on every call: paymos/sandbox-only.

FAQ

Can my agent move real money? No. v1 is deliberately sandbox-only. When the agent has written and verified your integration, your own code goes live with your live keys — the MCP server stays out of production paths.

Why does my live key pair fail? By design. Create a test pair in Dashboard → Developers → API keys.

Is there a hosted version? Phase 2: mcp.paymos.io with OAuth 2.1 login, agent entities with scoped keys, and live operation.

Development

npm install          # deps (@paymos/sdk resolves from ../typescript-sdk)
npm run build:resources   # regenerate doc resources from the docs corpus
npm test             # vitest suite incl. the contract-freeze snapshot
npm run build        # tsup bundle to dist/

License: MIT — see LICENSE.

Available Tools

6 tools
cancel_invoiceCancel an invoiceA

Cancel an invoice that has not been paid yet; the reason is stored on the record. Invoices in a final status (paid, paid_over, underpaid, expired, cancelled) cannot be cancelled. Returns the invoice in wire form: invoice_id, status, payment_url, order, payment (expected, address, transfers), expires_at. status: awaiting_client | awaiting_payment | confirming | underpaid_waiting | paid | paid_over | underpaid | expired | cancelled.

NameRequiredDescriptionDefault
reasonYesWhy the invoice is cancelled (1–500 chars, stored)
invoice_idYesInvoice identifier (inv_…)

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are provided, so the description must carry the burden — and it discloses the side effect (reason persisted on the record), the refusal conditions for terminal states, and the full returned wire form. It omits permission/auth requirements and whether cancellation is reversible, which keeps it from a 5.

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

Conciseness4/5

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

Front-loads the action and precondition, then the exclusion list and return shape. Dense but every clause earns its place; the trailing status enumeration is long though it doubles as valid value documentation.

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 two-param mutation with no annotations and no output schema, it supplies the missing behavioral and return-value context. Missing only auth/permission details and reversibility.

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

Parameters3/5

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

Schema coverage is 100% and both parameters carry their own descriptions with length bounds, so the schema already does the work. The description only adds that the reason is stored, which is marginal incremental value.

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

Purpose5/5

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

Specific verb+resource ('Cancel an invoice') plus a crisp precondition ('that has not been paid yet') and an explicit exclusion list of final statuses, which distinguishes it cleanly from sibling get_invoice/create_invoice.

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 clearly states when the tool applies (unpaid invoices) and enumerates the terminal statuses where cancellation is refused, giving strong negative guidance. It does not name an alternative tool (e.g., refund flows) for already-paid invoices, so it stops short of a 5.

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

create_invoiceCreate a sandbox invoiceA

Create a Paymos invoice and get a hosted payment_url the customer opens. Idempotent per project: reuse the same external_order_id and you get the existing invoice back instead of a duplicate. Returns the invoice in wire form: invoice_id, status, payment_url, order, payment (expected, address, transfers), expires_at. status: awaiting_client | awaiting_payment | confirming | underpaid_waiting | paid | paid_over | underpaid | expired | cancelled.

NameRequiredDescriptionDefault
amountYesDecimal string, e.g. "50.00" — amounts are strings, never floats
networkNoLocks the crypto invoice to one network: TRC20, ERC20, BEP20, POLYGON, ARBITRUM, OPTIMISM, BASE, TON, AVAX, SOL, NEAR, SUI, PLASMA. Omit to let the customer choose on the payment page
currencyYesFiat code (USD, EUR…) or stablecoin symbol (USDT, USDC…)
client_idNoYour customer reference (≤200 chars)
project_idYesProject receiving the invoice (prj_…)
external_order_idYesYour order identifier (≤128 chars); idempotency key per project
customer_fee_percentNo0–100 service fee percent charged to the customer; overrides the project setting
allow_multiple_paymentsNoAllow the customer to pay an invoice in several transfers (default true)

TDQS

A4.1/5.0
Behavior4/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 and does meaningful work: it discloses idempotency-per-project semantics, the return payload shape, and the full status lifecycle enum. It omits auth/permission requirements, error behavior, and anything about expiry duration or rate limits.

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

Conciseness4/5

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

Three sentences, front-loaded with purpose and outcome, then idempotency, then the return/status detail. The long status enum is dense but earns its place given there is no output schema to carry the state machine.

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?

With no output schema, the description usefully enumerates the returned fields and status values, which an agent needs to interpret responses. It is still silent on auth requirements and failure modes for a mutation endpoint, leaving a modest gap.

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

Parameters3/5

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

Schema description coverage is 100%, so every one of the 8 parameters is already documented in the schema, including the external_order_id idempotency note. The description adds no syntax or meaning beyond what the schema provides, which is the baseline-3 case.

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

Purpose5/5

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

States a specific verb+resource ('Create a Paymos invoice') plus the concrete outcome ('get a hosted payment_url the customer opens'). This cleanly separates it from get_invoice, list_invoices, cancel_invoice, and simulate_invoice_payment without needing their schemas.

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

Usage Guidelines4/5

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

Gives real conditional guidance for the idempotency key: reuse the same external_order_id and the existing invoice is returned rather than a duplicate. It does not name alternatives or state exclusions (e.g. when to cancel vs recreate), so it stops short of a full when/when-not prescription.

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

get_invoiceRead an invoiceA

Fetch the current state of one Paymos invoice by invoice_id. Returns the invoice in wire form: invoice_id, status, payment_url, order, payment (expected, address, transfers), expires_at. status: awaiting_client | awaiting_payment | confirming | underpaid_waiting | paid | paid_over | underpaid | expired | cancelled.

NameRequiredDescriptionDefault
invoice_idYesInvoice identifier (inv_…)

TDQS

A4.1/5.0
Behavior4/5

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

No annotations, so the description carries the burden. It discloses the full wire-form return shape and enumerates all nine status values, which is genuinely useful behavioral context (e.g. idempotent read, state machine values). It doesn't explicitly state read-only or error behavior, keeping it from a 5.

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 front-loaded sentences: the action and key come first, then the return shape and enum values. No wasted words; every clause adds information.

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 simple one-param read tool with no output schema, the description fully compensates by listing the returned fields and status enum. Nothing needed to call it correctly is missing.

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 single invoice_id parameter is already documented with format (inv_…) and minLength. The description adds no syntax or format detail beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Fetch the current state of one Paymos invoice') and names the exact key ('by invoice_id'). Distinguishable from siblings create_invoice and list_invoices. Clear what it retrieves.

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?

Usage is implied by the 'fetch by id' framing, but there is no explicit when-to-use guidance or mention of alternatives. It does not say e.g. to use list_invoices to find an id first. Implied usage only, so a 3.

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

list_invoicesList invoicesA

Read one cursor-paginated page of invoices for a project. Filters: status (repeatable), external_order_id, created_from/created_to (Unix seconds). The result carries items[] and next_cursor — next_cursor is absent on the last page. Poll with the returned cursor; do not guess offsets.

NameRequiredDescriptionDefault
limitNoPage size; the server default and maximum apply
cursorNoCursor from a previous list_invoices response
statusNoRepeatable status filter: awaiting_client | awaiting_payment | confirming | underpaid_waiting | paid | paid_over | underpaid | expired | cancelled
created_toNoUnix seconds, inclusive upper bound
project_idYesProject whose invoices to list (prj_…)
created_fromNoUnix seconds, inclusive lower bound
external_order_idNoFilter by your order identifier

TDQS

A4.2/5.0
Behavior4/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 — and it does disclose key behavior: cursor pagination, next_cursor absent on the last page, and the read-only nature implied by 'Read'. It omits auth/permission needs and rate limits, keeping it below 5.

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

Conciseness4/5

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

Three dense, front-loaded sentences with no filler; the pagination contract is stated immediately. Minor redundancy in re-listing filters already enumerated in the schema.

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?

With no output schema, the description correctly supplies the return shape (items[] and next_cursor) plus the terminal-page condition. Combined with full schema coverage, an agent has everything needed to call and iterate correctly.

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 every parameter is already documented (status enum list, Unix seconds bounds, cursor origin). The description restates the filter set and Unix-seconds semantics without adding syntax the schema lacks — baseline 3.

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

Purpose5/5

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

States a specific verb+resource with scope: 'Read one cursor-paginated page of invoices for a project.' An agent can distinguish this page-listing tool from the sibling get_invoice (single invoice) without opening the schema.

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

Usage Guidelines4/5

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

Gives clear operational guidance ('Poll with the returned cursor; do not guess offsets') and implies the filter-driven retrieval context. It does not name sibling alternatives or state when-not-to-use, so it stops short of 5.

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

simulate_invoice_paymentSimulate a sandbox paymentA

Sandbox only: drive a test invoice through a payment outcome without touching a blockchain. The server derives the amounts — never compute money client-side. stage=paid marks it fully paid; overpaid pays more than expected; underpay pays less (invoice lands in underpaid waiting for a top-up); cancel voids it. Returns the invoice in wire form: invoice_id, status, payment_url, order, payment (expected, address, transfers), expires_at. status: awaiting_client | awaiting_payment | confirming | underpaid_waiting | paid | paid_over | underpaid | expired | cancelled.

NameRequiredDescriptionDefault
stageYesOutcome to simulate: paid | overpaid | underpay | cancel
invoice_idYesTest invoice identifier (is_test=true)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that no blockchain is touched, that the server derives all amounts and money must never be computed client-side, what each stage produces, and the resulting statuses. It still omits auth/permission requirements, idempotency behavior, and whether the simulation triggers downstream effects such as webhooks (relevant given the verify_webhook_signature sibling).

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?

Front-loaded with the safety constraint and the 'server derives amounts' rule, then each stage in four short clauses, then the return shape. Information density is high and the final status enumeration is defensible because there is no output 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?

With no output schema, explaining the returned wire fields and the full status enum is exactly what the agent needs, and the mutation semantics are fully spelled out. The remaining gap is operational context: permission prerequisites, rate limits, and how this interacts with cancel_invoice and webhook verification.

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 real meaning the schema lacks: paid marks fully paid, overpaid pays more than expected, underpay leaves the invoice in underpaid awaiting a top-up, and cancel voids the invoice. It also explains that invoice_id must be a test invoice (is_test=true).

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 and resource ('drive a test invoice through a payment outcome') plus the critical scope constraint 'Sandbox only ... without touching a blockchain'. That distinguishes it immediately from create_invoice, get_invoice, and list_invoices, which are the read/create siblings.

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

Usage Guidelines4/5

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

It gives a clear selection condition ('Sandbox only', 'test invoice'), which tells the agent when this applies versus real payment paths, and explains the semantics of each stage outcome. It never names an alternative, however, and notably fails to clarify the overlap between stage=cancel here and the sibling cancel_invoice tool.

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

verify_webhook_signatureVerify a webhook signatureA

Verify the X-Webhook-Signature header of a Paymos webhook against its raw body, locally (no API call). Header format: t={unix},v1={hmac_hex("{unix}.{payload}")}; during secret rotation two v1= values are present and either may match. Use the raw request body byte-for-byte — re-serialized JSON breaks the signature.

NameRequiredDescriptionDefault
secretNoWebhook secret (whsec_…); defaults to PAYMOS_WEBHOOK_SECRET
payloadYesThe raw webhook body exactly as received
signature_headerYesThe X-Webhook-Signature header value, e.g. t=1760000000,v1=9f2c…
tolerance_secondsNoMax age of the t= timestamp (default 300); older headers are rejected as expired

TDQS

A4.4/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 delivers unusually rich detail: the header grammar t/v1, the HMAC construction over '{unix}.{payload}', the secret-rotation case where two v1 values exist and either may match, and the byte-exactness requirement. What it omits is the outcome representation — nothing says whether a mismatch throws, returns false, or what expiry produces.

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 tight sentences, front-loaded with what the tool does and back-loaded with the two pitfalls (dual v1 values, re-serialization). Every clause carries information the caller must act on; nothing is padding.

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 four-parameter, no-annotation, no-output-schema tool, the description covers the mechanics thoroughly. The remaining gap is return semantics — an agent cannot know from this text what a successful verification looks like versus an expired or mismatched one, which matters more here because no output schema fills that in.

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 real meaning beyond the schema: it explains that signature_header may legitimately carry two v1 values during rotation and pins down that payload must be the untouched raw bytes. Those constraints directly affect how the caller supplies the required parameters.

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

Purpose5/5

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

States a specific verb (verify) plus the exact resource (the X-Webhook-Signature header of a Paymos webhook) and the scope (against the raw body, locally). It is unmistakably distinct from the invoice siblings in create_invoice/list_invoices, so an agent can route to it without schema inspection.

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 supplies the operating conditions an agent needs: this is local, 'no API call', and the payload must be the raw body byte-for-byte rather than re-serialized JSON. There is no competing sibling that needs naming, but it also never states the failure/expiry conditions that would guide retry or error handling.

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. 6 tool updatesv1.1.1
    • First observedcancel_invoice
    • First observedcreate_invoice
    • First observedget_invoice
    • First observedlist_invoices
    • First observedsimulate_invoice_payment
    • First observedverify_webhook_signature

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: create/get/list/cancel target the invoice lifecycle, simulate_invoice_payment is explicitly sandbox-only, and verify_webhook_signature is a local crypto check. No overlap or ambiguity between any two tools.

Naming Consistency5/5

All six tools follow a consistent verb_noun snake_case pattern (create_invoice, get_invoice, list_invoices, cancel_invoice, simulate_invoice_payment, verify_webhook_signature). The singular/plural shift (get_invoice vs list_invoices) is idiomatic and does not hurt predictability.

Tool Count5/5

Six tools is well-scoped for an invoice/payment server, covering CRUD reads/writes plus sandbox and webhook concerns without padding. Each tool earns its place with no redundant variants.

Completeness4/5

Core lifecycle (create, get, list, cancel) plus sandbox testing and webhook verification is covered, with no obvious dead ends for standard flows. Minor gaps exist — no refund/dispute tool and no manual (non-sandbox) payment status adjustment — but these are edge operations agents can work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to answer Cryptbrew product questions and check live API health without merchant authentication. Exposes tools for pricing, FAQs, invoice flow, and health probes over stdio or streamable HTTP.
    8
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables coding agents to create and look up crypto payments over stdio, returning checkout links, payment statuses, paged payment lists, and receivable currencies, with real payments gated behind an explicit opt-in environment flag.
    4
    MIT