Skip to main content
Glama
cryptunnel

cryptunnel-mcp

Official
by cryptunnel

cryptunnel-mcp

Test License: MIT

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

Or, 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-1 and 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

CRYPTUNNEL_MERCHANT_ID

Your public merchant id. Required - the server exits naming it when missing

CRYPTUNNEL_API_KEY

Your API key. Required

CRYPTUNNEL_ALLOW_LIVE

Set to 1 to allow real payments. Unset by default - see below

CRYPTUNNEL_BASE_URL

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

create_payment

A checkout url for a given amount and currency, keyed by your external_id

get_payment

One payment by id, with its status - deliver on confirmed or confirmed_manual

list_payments

The merchant's payments, newest first, paged

list_currencies

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.

MIT licensed.

Available Tools

4 tools
create_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesThe amount to charge, in the fiat currency below, e.g. 10 or 49.99
is_testNotrue 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
currencyYesThe fiat currency the amount is in: USD or EUR
fail_urlNoWhere the buyer is sent after a failure
descriptionNoWhat the buyer is paying for, shown on the checkout page
external_idYesYour own order or invoice id. One payment per external_id
success_urlNoWhere the buyer is sent after paying
callback_urlNoWebhook url called when the payment reaches a terminal status

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

Conciseness4/5

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.

Completeness4/5

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.

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

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe Cryptunnel payment id, e.g. n9cdFaTccYbXecVekHKW8Q

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

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
is_testNotrue lists the testnet family sandbox payments are paid in, false the mainnet family

TDQS

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

Conciseness4/5

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.

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

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1 to 100
offsetNoHow many payments to skip

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

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 4 tool updatesv1.0.0
    • First observedcreate_payment
    • First observedget_payment
    • First observedlist_currencies
    • First observedlist_payments

TDQS

A4.3/5.0

Scored across 4 tools

Disambiguation5/5

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

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables 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.
    -