cryptunnel-mcp
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., "@cryptunnel-mcpcreate a sandbox payment for 10 USD for order test-1 and give me the checkout link"
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.
cryptunnel-mcp
An MCP server that lets a coding agent - Claude Code, Cursor, anything speaking the Model Context Protocol - create and look up Cryptunnel crypto payments. Build a payment integration by prompting: "create a sandbox payment for 10 USD and give me the checkout link".
It runs on your machine over stdio, wraps the cryptunnel
client, and talks to nothing but api.cryptunnel.io. No hosted service, no OAuth.
Setup
You need your merchant id and an API key, both from the merchant page in the cabinet. Node 20+.
Claude Code
claude mcp add cryptunnel \
--env CRYPTUNNEL_MERCHANT_ID=<merchant id> \
--env CRYPTUNNEL_API_KEY=<api key> \
-- npx -y cryptunnel-mcpOr, to share it with a project, in .mcp.json at the repository root:
{
"mcpServers": {
"cryptunnel": {
"command": "npx",
"args": ["-y", "cryptunnel-mcp"],
"env": {
"CRYPTUNNEL_MERCHANT_ID": "<merchant id>",
"CRYPTUNNEL_API_KEY": "<api key>"
}
}
}
}Cursor
In .cursor/mcp.json (per project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"cryptunnel": {
"command": "npx",
"args": ["-y", "cryptunnel-mcp"],
"env": {
"CRYPTUNNEL_MERCHANT_ID": "<merchant id>",
"CRYPTUNNEL_API_KEY": "<api key>"
}
}
}
}Try it
Create a sandbox payment for 10 USD for order
test-1and give me the checkout link.
The agent calls create_payment, and the link opens the checkout page listing testnet coins. If the
list is empty, attach a testnet wallet to the merchant in the cabinet first - see
Sandbox and faucets.
Related MCP server: Yolfi MCP Server
Environment
Variable | Meaning |
| Your public merchant id. Required - the server exits naming it when missing |
| Your API key. Required |
| Set to |
| Point the server at another API host, for a local backend |
The live-mode gate
An agent holding a live key must not be one prompt away from a real invoice. So by default every
payment this server creates is a sandbox payment: the buyer is offered testnet coins only, nothing
is charged, and the payment stays out of your stats. Asking for is_test: false is refused with a
message that names the variable - the payment is not silently downgraded, the agent is told why.
Set CRYPTUNNEL_ALLOW_LIVE=1 to let the agent create real payments. Even then a payment is a
sandbox one unless the agent passes is_test: false explicitly.
Tools
Tool | What the agent gets |
| A checkout url for a given amount and currency, keyed by your |
| One payment by id, with its status - deliver on |
| The merchant's payments, newest first, paged |
| The currencies the merchant can receive - only those with an active wallet |
Every tool returns the API response as JSON text; an API error comes back as a tool error carrying
the API code, e.g. ValidationError (WALLET_NOT_FOUND): Wallet not found.
Links
cryptunnelclient the server wrapsSupport: GitHub Issues
MIT licensed.
Available Tools
4 toolscreate_paymentCreate a paymentA
Create a Cryptunnel payment and get a checkout url to send the buyer to. On that page the buyer picks a cryptocurrency and pays straight to the merchant's own wallet. Use it whenever someone has to be charged. Returns the payment id (keep it - get_payment needs it), the checkout url and the status "created". By default the payment is a sandbox payment: the buyer is offered testnet coins only and nothing real moves. Repeating an external_id returns the payment already created for it instead of a second one.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | The amount to charge, in the fiat currency below, e.g. 10 or 49.99 | |
| is_test | No | true creates a sandbox payment (testnet coins, no fees, excluded from stats). false creates a real invoice and is only allowed when the server runs with CRYPTUNNEL_ALLOW_LIVE=1 | |
| currency | Yes | The fiat currency the amount is in: USD or EUR | |
| fail_url | No | Where the buyer is sent after a failure | |
| description | No | What the buyer is paying for, shown on the checkout page | |
| external_id | Yes | Your own order or invoice id. One payment per external_id | |
| success_url | No | Where the buyer is sent after paying | |
| callback_url | No | Webhook url called when the payment reaches a terminal status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and mostly succeeds: it discloses the sandbox default (testnet coins, nothing real moves), the idempotent external_id behavior, and the returned fields/status. It omits auth/credential requirements and any rate-limit or error behavior, which leaves a real gap for a write tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the return value, and every sentence carries information (sandbox default, idempotency). It is slightly dense but there is no filler; the only mild redundancy is restating the sandbox notion across two clauses.
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 an 8-param write tool with no annotations and no output schema, the description covers the essential contract: what is created, what comes back, the sandbox/live distinction, and idempotency. Missing auth requirements and the exact live-mode gating (deferred to the schema) keep it from being fully self-contained.
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 semantics beyond the schema: the default sandbox mode and the idempotency contract for external_id ('repeating an external_id returns the payment already created for it'). Those are behavioral facts the schema's field text does not convey.
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 ('Create a Cryptunnel payment') plus the concrete outcome (checkout url) and the flow that follows (buyer picks a coin, pays to merchant's wallet). It also names the sibling it hands off to ('get_payment needs it'), so an agent can place it in the workflow 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?
'Use it whenever someone has to be charged' gives a clear trigger condition, and the note about repeating external_id tells the agent how to handle retries. It never states when NOT to use it or how it relates to list_payments/list_currencies, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paymentGet a paymentA
Look up one payment by the id create_payment returned. The status says where it stands: "created" - waiting for the buyer to pick a coin; "pending" - coin picked, transfer awaited; "confirmed" or "confirmed_manual" - paid, safe to deliver; "failed"; "expired". Only a payment past "created" carries a crypto amount, currency and wallet address.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The Cryptunnel payment id, e.g. n9cdFaTccYbXecVekHKW8Q |
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 enumerates the status lifecycle and discloses the conditional behavior that only payments past 'created' return crypto amount, currency and wallet address. It omits error behavior for an unknown or malformed id, which is the main remaining gap for a lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its input source, then a compact status glossary. Every clause earns its place: the status meanings and the conditional-fields note both affect how an agent interprets the result.
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?
There is no output schema, so the description must cover return semantics, and it does by decoding the status field and the conditional crypto fields. Only the failure mode for a nonexistent id is left unaddressed, and for a one-parameter read tool the remaining picture is essentially complete.
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 the single id parameter is already documented with type, minLength and an example, so the baseline is 3. The description adds meaningful provenance by tying the id to create_payment's return value, which is not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Look up one payment by the id create_payment returned' states exactly what is fetched and the scoping is a single record, which cleanly separates it from list_payments. It also names the sibling that produces the required id, so an agent can identify both the input source and the tool's boundary.
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 establishes the usage context (call after create_payment, to check where a payment stands) and explains what each status means operationally, including 'safe to deliver' for confirmed states. It stops short of naming an explicit alternative (list_payments) or stating when not to use it, so it is strong context without full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_currenciesList receivable currenciesA
List the cryptocurrencies this merchant can actually receive - only currencies with an active wallet appear, each with its blockchain. An empty list means no wallet is attached for that family yet; a testnet wallet has to be attached in the cabinet before a sandbox payment can be paid.
| Name | Required | Description | Default |
|---|---|---|---|
| is_test | No | true lists the testnet family sandbox payments are paid in, false the mainnet family |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: filtering to wallets that are actually active, the meaning of an empty result (no wallet attached for that family), and the sandbox prerequisite. It omits auth/permission requirements and any pagination or ordering behavior, which keeps it short of 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 tight sentences with the core behavior front-loaded and the empty-list edge case plus testnet prerequisite following. Dense and largely waste-free, though the final clause about attaching a wallet is more setup guidance than tool behavior.
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 does the work of describing the return: a list of currencies each with its blockchain, and the empty-list case. Combined with the testnet/mainnet explanation, an agent has enough to call and interpret this tool; only minor gaps like auth requirements remain.
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 the single is_test parameter is fully documented in the schema itself (true = testnet family, false = mainnet). The description reinforces testnet semantics only indirectly via the sandbox-payment sentence, adding little beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (list the cryptocurrencies the merchant can receive) and narrows scope precisely: only currencies with an active wallet, each with its blockchain. This is clearly distinguishable from the payment siblings (create_payment, get_payment, list_payments), which operate on payments rather than the merchant's receivable currency set.
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 context: use it to see what can actually be received, and the note that a testnet wallet must be attached in the cabinet before a sandbox payment can be paid frames the prerequisite flow. No explicit alternative tool or exclusion is named, but with unrelated siblings there is no real ambiguity to resolve.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_paymentsList paymentsA
List the merchant's payments, newest first, with paging. Use it to find a payment when you only know your own order id (external_id), or to review recent activity. Test and live payments are listed together - check is_test on each.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Page size, 1 to 100 | |
| offset | No | How many payments to skip |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description must carry the behavioral burden, and it discloses meaningful traits: reverse-chronological ordering, paging, and that test and live payments are interleaved with the is_test field to distinguish them. It omits auth requirements, rate limits, and what a page of results contains, but the core behavioral context is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what is listed and how it is ordered, then usage, then a caveat about mixed test/live data. Every sentence carries information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only list tool with no output schema and no annotations, the description covers ordering, paging, use cases, and the test/live mixing caveat. It could say more about result contents or lighten the agent's need to infer the response shape, but it is nearly complete.
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 limit and offset are already fully documented with defaults and bounds. The description only alludes to 'paging' without adding format or constraint details, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the merchant's payments') plus scope details: ordering (newest first) and paging. It also implicitly separates itself from get_payment by describing the external_id lookup and recent-activity review use cases, so an agent can distinguish it from its 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?
Explicitly says when to use it: to find a payment when only the external_id is known, or to review recent activity. However, it never names an alternative or an exclusion (e.g. use get_payment when you already have the payment id), so routing guidance is contextual rather than complete.
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.
4 tool updates
v1.0.0- First observed
create_payment - First observed
get_payment - First observed
list_currencies - First observed
list_payments
TDQS
Scored across 4 tools
Each tool targets a distinct operation on a distinct resource: create_payment (create checkout), get_payment (single lookup by id), list_payments (paged enumeration), list_currencies (static currency catalog). No two tools overlap in purpose and the descriptions reinforce the boundaries (e.g. get_payment needs the id from create_payment).
Consistent snake_case verb_noun pattern throughout (create_payment, get_payment, list_payments, list_currencies). The singular/plural resource suffix follows a predictable creates-one vs lists-many convention.
Four tools is slightly thin but well-matched to a narrowly scoped payment-checkout surface. Each tool earns its place with no redundancy, though the set is at the low end of the typical 3-15 range.
Covers the core accept-a-payment lifecycle: create checkout, poll status (created→pending→confirmed/failed/expired), enumerate by external_id, and enumerate receivable currencies. No explicit cancel/refund tool, but these are plausibly out of scope for a checkout-only surface, so only a minor gap remains.
Related MCP Connectors
Keyless non-custodial crypto payments for AI agents: payment links and tip jars, no API key.
Crypto pay links and API for people and AI agents. BTC, Lightning, USDC, USDT, EURC, SOL, ETH.
Non-custodial crypto payments for AI assistants: balances, payments, and create payment links.
Stripe payments for AI agents. Create links, verify, manage customers.
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceEnables AI coding agents to add stablecoin crypto checkout, payment links, payment status checks, webhook verification, and webhook-based access logic to applications through hosted payment APIs.-
- 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.-
- FlicenseNot gradedqualityAmaintenanceLets AI coding agents integrate crypto checkout, payment links, payment status checks, and webhook-based entitlements into applications.-
- FlicenseNot gradedqualityAmaintenanceEnables AI coding agents to add stablecoin checkout, payment links, payment status checks, webhook verification, and webhook-based entitlement logic to applications. It also provides tools for workspace registration, settlement and webhook configuration, paylink creation, and crypto payment status checks.-