Paymos MCP Server
OfficialClick 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., "@Paymos MCP ServerCreate a sandbox invoice for order #123 and simulate it as paid"
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.
@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 |
| Test key id, |
| Test secret, |
| Optional |
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 |
| Creates a sandbox invoice; idempotent per |
| Fetches the current invoice state |
| One cursor page of invoices with filters (status, dates, order id) |
| Cancels an unpaid invoice with a stored reason |
| Sandbox only: drives an invoice through |
| Locally verifies |
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.ioexclusively 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 toolscancel_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.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why the invoice is cancelled (1–500 chars, stored) | |
| invoice_id | Yes | Invoice identifier (inv_…) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Decimal string, e.g. "50.00" — amounts are strings, never floats | |
| network | No | Locks 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 | |
| currency | Yes | Fiat code (USD, EUR…) or stablecoin symbol (USDT, USDC…) | |
| client_id | No | Your customer reference (≤200 chars) | |
| project_id | Yes | Project receiving the invoice (prj_…) | |
| external_order_id | Yes | Your order identifier (≤128 chars); idempotency key per project | |
| customer_fee_percent | No | 0–100 service fee percent charged to the customer; overrides the project setting | |
| allow_multiple_payments | No | Allow the customer to pay an invoice in several transfers (default true) |
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 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| invoice_id | Yes | Invoice identifier (inv_…) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size; the server default and maximum apply | |
| cursor | No | Cursor from a previous list_invoices response | |
| status | No | Repeatable status filter: awaiting_client | awaiting_payment | confirming | underpaid_waiting | paid | paid_over | underpaid | expired | cancelled | |
| created_to | No | Unix seconds, inclusive upper bound | |
| project_id | Yes | Project whose invoices to list (prj_…) | |
| created_from | No | Unix seconds, inclusive lower bound | |
| external_order_id | No | Filter by your order identifier |
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 — 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| stage | Yes | Outcome to simulate: paid | overpaid | underpay | cancel | |
| invoice_id | Yes | Test invoice identifier (is_test=true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| secret | No | Webhook secret (whsec_…); defaults to PAYMOS_WEBHOOK_SECRET | |
| payload | Yes | The raw webhook body exactly as received | |
| signature_header | Yes | The X-Webhook-Signature header value, e.g. t=1760000000,v1=9f2c… | |
| tolerance_seconds | No | Max age of the t= timestamp (default 300); older headers are rejected as expired |
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v1.1.1- First observed
cancel_invoice - First observed
create_invoice - First observed
get_invoice - First observed
list_invoices - First observed
simulate_invoice_payment - First observed
verify_webhook_signature
TDQS
Scored across 6 tools
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.
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.
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.
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
Related MCP Connectors
Build custom POS apps with your AI agent. Final's MCP server gives developers what they need to ship a custom point of sale: scaffold a checkout flow, adapt vetted screen blueprints for counter POS, self-checkout kiosks, restaurant ordering and payment terminals, ground every call in Final's version-locked POS APIs, validate, boot a live preview and deploy to real hardware with integrated card payments. The same server also manages the store behind it: products, stock, orders, customers and sales reports. Remote Streamable HTTP with OAuth 2.1.
Agent-to-business commerce sandbox: intents, offers, bookings. Demo data, ed25519-signed calls.
Agent-commerce MCP server for x402/USDC payments and affiliate splits on Base.
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Related MCP Servers
AlicenseAqualityBmaintenanceEnables 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.8MIT
cryptunnel-mcpofficial
AlicenseAqualityCmaintenanceEnables 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.4MIT- AlicenseCqualityBmaintenanceEnables AI agents and CLI users to perform confirmed shop operations, manage products, orders, collections, webhooks, and promotions, and handle bounded metadata exports and private uploads through a local stdio server.8627 npmAGPL 3.0
- FlicenseNot gradedqualityAmaintenanceEnables AI coding agents to set up crypto checkout integration by registering workspaces, creating paylinks and public payment invoices, configuring webhook endpoints, verifying webhook signatures, and checking stablecoin payment status.-