Skip to content

CoinVello

io.github.CoinVello/coinvelloCoinVellostreamable-httpv0.1.4Scanned

Non-custodial crypto payments: checkout sessions, invoices, webhooks and test payments. No KYC.

18 tools: 2 do something that can't be undone, 5 change things and 11 only read.

Tools: 0 delete, 2 irreversible, 5 write, 11 read.
  • Reads private data · 2
  • Reads text others write · 3
  • Can send data out · 1
  • No findings

Anlyon alternative

7 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

18 tools

Can't be undone 2Claude Code: ask
  • create_checkout_sessionCreate a CoinVello hosted checkout session (an invoice plus a payment page at pay.coinvello.com).No findings

    Why it is in this group

    • The name "create_checkout_session" says "create": a word for a change.
    • The input carries an amount (input.amount) and a currency, so it moves money.
    Description, as the server wrote it
    Create a CoinVello hosted checkout session (an invoice plus a payment page at pay.coinvello.com). Redirect the customer to the returned `url`. Amounts are decimal strings. `currency` is an ISO code (USD, EUR...) or an asset id to price in crypto. Fulfil orders from the invoice.paid webhook, never from the redirect.
  • simulate_test_paymentCreate a synthetic on-chain payment for an invoice (inv_) or credit purchase (cpu_) and run it through the real state machine and webhook pipeline.No findings

    Why it is in this group

    • The name "simulate_test_payment" says "payment": a word that usually means money moves, which cannot be taken back.
    Description, as the server wrote it
    Create a synthetic on-chain payment for an invoice (inv_) or credit purchase (cpu_) and run it through the real state machine and webhook pipeline. Test keys only. confirmations=0 -> payment.detected / invoice.pending; confirmations >= required -> invoice.paid. Use a smaller/larger amount to simulate underpaid/overpaid. Reuse tx_hash to advance the same payment.
Changes things 5Claude Code: ask
  • create_credit_purchaseCreate a crypto credit purchase (cpu_...).No findings

    Why it is in this group

    • The name "create_credit_purchase" says "create": a word for a change.
    Description, as the server wrote it
    Create a crypto credit purchase (cpu_...). Returns payment.payment_options with the address/amount to pay (CoinVello's operator wallet) and a hosted checkout_url. Credits are added when the payment confirms. Card purchases and automatic top-up are set up by the merchant in the dashboard, not through this tool. In test mode credits are free, so this is mainly for exercising the flow (pay it with simulate_test_payment).
  • create_exportCreate an export of the records (default), another dataset, or `all` (the year-end package) for a period, or for the entire history when period is null or omitted.No findings

    Why it is in this group

    • The name "create_export" says "create": a word for a change.
    Description, as the server wrote it
    Create an export of the records (default), another dataset, or `all` (the year-end package) for a period, or for the entire history when period is null or omitted. Returns the export object: small exports are already `ready` with `file` (name, content_type, bytes, sha256) and a signed `download_url` valid until `download_expires_at` (files are kept 7 days); while `queued` or `processing` call get_export. Vendor presets (quickbooks, xero, koinly, cointracker, coinledger) and journal need dataset=records and format=csv (otherwise 422). Verify the downloaded file against file.sha256. With a test key pass include_simulated=true to include simulated payments.
  • create_walletRegister a receiving wallet the merchant controls.No findings

    Why it is in this group

    • The name "create_wallet" says "create": a word for a change.
    Description, as the server wrote it
    Register a receiving wallet the merchant controls. type=xpub for bitcoin (CoinVello derives a fresh address per invoice from the extended PUBLIC key); type=address for ethereum, base, arbitrum, optimism, polygon, bnb, avalanche, robinhood, solana, tron. Never pass a private key or seed phrase. The wallet is usable at once in live and test mode; addresses are validated strictly (format, checksum, network, no token contracts). For xpubs, show the returned first_address so the merchant can compare it with their wallet's first receive address. Signed-message verification (POST /wallets/{id}/verification then /verify) is optional and never required.
  • create_webhookRegister a webhook endpoint.Can send data outNo findings

    Why it is in this group

    • The name "create_webhook" says "create": a word for a change.

    What it can reach

    • outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
    Description, as the server wrote it
    Register a webhook endpoint. The response contains `secret` (whsec_...) ONCE: store it as COINVELLO_WEBHOOK_SECRET. Live endpoints must be HTTPS; test endpoints may be http://localhost. Use events ["*"] for everything or a list such as ["invoice.paid","invoice.expired"].
  • verify_webhook_signatureVerify a webhook delivery locally (no API call).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    Verify a webhook delivery locally (no API call). Pass the exact raw request body, the CoinVello-Signature header (t=...,v1=...) and the endpoint secret (whsec_...). Implements the spec: HMAC-SHA256 over "<t>.<raw body>", 300 s tolerance, constant-time compare against any v1. Returns valid=true/false with the reason and the parsed event. Set ignore_timestamp=true when checking an old captured delivery.
Only reads 11Show 11 read-only tools
  • get_credits_balanceReturn the merchant's prepaid processing-credit balance: balance (= available + reserved, never negative), available (free to spend), reserved (estimated fees of open invoices paid…No findings

    Why it is in this group

    • The name "get_credits_balance" says "get": a word for reading.
    Description, as the server wrote it
    Return the merchant's prepaid processing-credit balance: balance (= available + reserved, never negative), available (free to spend), reserved (estimated fees of open invoices paid with credits), low_balance_threshold, estimated_payments_remaining, auto_topup. There are no free live credits. 1 credit = $0.01 nominal; a confirmed payment consumes about 30 bps of its fiat value (floor 2, cap 2000).
  • get_exportRetrieve an export (exp_...): status (queued, processing, ready, failed, expired), rows, file { name, content_type, bytes, sha256 }, download_url and download_expires_at, failure_r…Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "get_export" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "retrieve" and "file": it reads files.
    • untrusted-inputThe description's first sentence says "retrieve" and "url": it reads web pages, which anyone can write.
    Description, as the server wrote it
    Retrieve an export (exp_...): status (queued, processing, ready, failed, expired), rows, file { name, content_type, bytes, sha256 }, download_url and download_expires_at, failure_reason. Poll after create_export until ready.
  • get_invoiceRetrieve an invoice (inv_...) with its status, payment_options (address, amount, payment_uri, qr_payload) and paid summary.Reads text others writeNo findings

    Why it is in this group

    • The name "get_invoice" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "retrieve" and "uri": it reads web pages, which anyone can write.
    Description, as the server wrote it
    Retrieve an invoice (inv_...) with its status, payment_options (address, amount, payment_uri, qr_payload) and paid summary. Use for polling or reconciliation. Accepts a checkout session id (cs_...) too and returns the session with the invoice expanded.
  • get_ratesMid-market rates for supported assets against a fiat base (default USD).No findings

    Why it is in this group

    • The name "get_rates" says "get": a word for reading.
    Description, as the server wrote it
    Mid-market rates for supported assets against a fiat base (default USD). Indicative only; invoices lock their own rate at creation.
  • get_records_summarySales (invoiced at the locked rates), received_market_value (what the coins were worth when they landed), valuation_difference, tax_collected, refunds, fees_prepaid and credits_con…No findings

    Why it is in this group

    • The name "get_records_summary" says "get": a word for reading.
    Description, as the server wrote it
    Sales (invoiced at the locked rates), received_market_value (what the coins were worth when they landed), valuation_difference, tax_collected, refunds, fees_prepaid and credits_consumed, fees_onchain, network_fees, credit_purchases and net_received, with payment counts, over occurred_at in the given timezone and currency. period_start is inclusive and period_end exclusive (a date such as 2026-01-01, or a date-time). group_by returns the same totals per month, asset, chain, type or address in `groups`. With a test key, simulated rows count only with include_simulated=true.
  • list_assetsEvery asset CoinVello accepts in the API key's mode: id (btc:bitcoin, usdc:polygon, eurc:base...), symbol, chain, kind (native/token), contract_address, decimals, required_confirma…No findings

    Why it is in this group

    • The name "list_assets" says "list": a word for reading.
    Description, as the server wrote it
    Every asset CoinVello accepts in the API key's mode: id (btc:bitcoin, usdc:polygon, eurc:base...), symbol, chain, kind (native/token), contract_address, decimals, required_confirmations, min_amount, testnet name and the wallet_type (xpub or address) needed to accept it. Tokens without a testnet contract (DAI, usdc:bnb, usdt on base/arbitrum/optimism/avalanche/solana, and the Bitcoin tokens wbtc/cbbtc/btcb) are live-only, so a test key does not list them.
  • list_credit_bundlesList purchasable credit bundles with USD price, price_per_credit and indicative crypto_prices per asset.No findings

    Why it is in this group

    • The name "list_credit_bundles" says "list": a word for reading.
    Description, as the server wrote it
    List purchasable credit bundles with USD price, price_per_credit and indicative crypto_prices per asset. Bigger bundles cost less per credit (effective rate ~0.30% down to <0.10%).
  • list_invoicesList invoices, newest first, filterable by status, order_id or customer_email.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "list_invoices" says "list": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "list" and "email": it reads mail.
    • untrusted-inputThe description's first sentence says "list" and "email": it reads inbound email, which other people can write.
    Description, as the server wrote it
    List invoices, newest first, filterable by status, order_id or customer_email. Returns { object: 'list', data, has_more, next_cursor }.
  • list_paymentsList on-chain payments (pay_...) with tx_hash, confirmations, amount and status (detected, confirming, confirmed, failed).No findings

    Why it is in this group

    • The name "list_payments" says "list": a word for reading.
    Description, as the server wrote it
    List on-chain payments (pay_...) with tx_hash, confirmations, amount and status (detected, confirming, confirmed, failed). Filter by invoice_id, status, chain or tx_hash.
  • list_recordsList the account's book of record, newest first: one immutable row per movement of value (payment_received, fee_prepaid, credit_purchase, refund_sent, fee_onchain, conversion, offr…No findings

    Why it is in this group

    • The name "list_records" says "list": a word for reading.
    Description, as the server wrote it
    List the account's book of record, newest first: one immutable row per movement of value (payment_received, fee_prepaid, credit_purchase, refund_sent, fee_onchain, conversion, offramp_payout...) valued when it happened. Each record has `value` (market value at the block time in the reporting currency, rate and source included), `value_usd`, `contract_value` (what the customer owed at the invoice's locked rate), `tax`, the on-chain proof (tx_hash, block_height, addresses, explorer_url) and an invoice snapshot. `currency` re-values from value_usd at the historical rate. With a test key, rows created by simulate_test_payment appear only with include_simulated=true. Returns { object: 'list', data, has_more, next_cursor }.
  • list_walletsList registered wallets with chain, type, status (active/verified/archived) and accepted assets.No findings

    Why it is in this group

    • The name "list_wallets" says "list": a word for reading.
    Description, as the server wrote it
    List registered wallets with chain, type, status (active/verified/archived) and accepted assets. Use it to see which assets can be offered on an invoice.

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

6 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 1 outbound tool breaks every one.

Reads private data2
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write3
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out1
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
deny to break every path
{
  "permissions": {
    "deny": [
      "mcp__coinvello__create_webhook"
    ]
  }
}

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

No check matched anything in these tool definitions. That is not a safety guarantee.

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 0.1.4. Values in angle brackets are yours to fill in.

claude mcp add --transport http coinvello https://mcp.coinvello.com/mcp --header 'Authorization: <your-authorization>'
claude mcp add --transport http coinvello https://mcp.coinvello.com/mcp --header 'Authorization: <your-authorization>'

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__coinvello__get_invoice",
      "mcp__coinvello__list_invoices",
      "mcp__coinvello__list_payments",
      "mcp__coinvello__list_wallets",
      "mcp__coinvello__get_credits_balance",
      "mcp__coinvello__list_credit_bundles",
      "mcp__coinvello__list_records",
      "mcp__coinvello__get_records_summary",
      "mcp__coinvello__get_export",
      "mcp__coinvello__get_rates",
      "mcp__coinvello__list_assets"
    ],
    "ask": [
      "mcp__coinvello__create_checkout_session",
      "mcp__coinvello__create_wallet",
      "mcp__coinvello__create_webhook",
      "mcp__coinvello__verify_webhook_signature",
      "mcp__coinvello__create_credit_purchase",
      "mcp__coinvello__create_export",
      "mcp__coinvello__simulate_test_payment"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as coinvello. Review it before you use it.

Capability tags behind 4 rules
  • mcp__coinvello__get_invoice untrusted-input
  • mcp__coinvello__list_invoices private-data, untrusted-input
  • mcp__coinvello__create_webhook outbound
  • mcp__coinvello__get_export private-data, untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/io.github.CoinVello/coinvello/verify?hash=9daa3f6aeec5f6145ddb291a3ef782c2b5c15f4822b76cd00e1767324e9fbd09" | jq -e '.changed == false'

Pinned hash 9daa3f6aeec5, from Nov 1, 2026, 02:18 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/io.github.CoinVello/coinvello/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for io.github.CoinVello/coinvello
[![anlyon.dev](https://anlyon.dev/badge/io.github.CoinVello/coinvello.svg)](https://anlyon.dev/servers/io.github.CoinVello/coinvello)

Source: MCP Registry · repository. Synced Nov 1, 2026, 02:17 UTC.