MERCHANT-side x402 MCP paywall — self-hosted proxy that charges agents per tool call on an existing MCP server (non-custodial). Part of @cryptoapis-io/mcp.
git clone https://github.com/CryptoAPIs-io/cryptoapis-mcp-x402-accept{
"mcpServers": {
"cryptoapis-mcp-x402-accept": {
"command": "node",
"args": ["/path/to/cryptoapis-mcp-x402-accept/dist/index.js"]
}
}
}MCP Servers overview
# @cryptoapis-io/mcp-x402-accept
Put an **x402 paywall in front of an MCP server you already run** — charge AI agents per tool call
without changing a line of that server's code.
```
agent → mcp-x402-accept (your process) → your existing MCP server
```
The proxy is an MCP server to the agent and an MCP client to yours. It mirrors every tool your server
exposes; the ones you price are paywalled, the rest pass through free.
## When to use this (and when not to)
| Your situation | Use |
|---|---|
| You **can** edit your MCP server (Node/TS) | [`x402-merchant-sdk/mcp`](https://github.com/CryptoAPIs-io/cryptoapis-x402-merchant-sdk/tree/master/examples/mcp-paid-tool) — three lines around your handler, nothing in the data path |
| You **cannot** — third-party, closed-source, or not Node | **this proxy** |
If you can edit your server, do that instead. It is simpler and strictly fewer moving parts. This
package exists for the case where that is not an option.
## Why self-hosted only
**You run this process. We never do, and we do not offer a hosted version.**
That is a deliberate product decision, not a default you can flip. A proxy sits between an agent and
your server, so a hosted one would mean CryptoAPIs holding your upstream server's credentials, sitting
in the cleartext path of your tool arguments and results, and owing you uptime on your own revenue.
For a merchant whose product *is* the data flowing through those calls, that is not a reasonable thing
to ask. Self-hosting removes the question rather than answering it.
What that guarantees, structurally:
- Tool **arguments and results are opaque** to the proxy. It reads the tool *name* (is this priced?)
and `_meta["x402/payment"]` (is it paid for?) — nothing else. They are never parsed, logged,
buffered, or cached.
- Your upstream credentials are **your own env vars**, in your own process.
- The only outbound calls are to the CryptoAPIs facilitator, to `/verify` and `/settle` the payment
itself.
## Install
```bash
npm install -g @cryptoapis-io/mcp-x402-accept
```
## Configure
```jsonc
{
"upstream": {
"transport": "stdio",
"command": "node",
"args": ["/path/to/your-mcp-server.js"],
"env": { "YOUR_UPSTREAM_TOKEN": "${YOUR_UPSTREAM_TOKEN}" }
},
"apiKey": "${CRYPTOAPIS_API_KEY}",
"payTo": "0xYourReceivingAddress",
// Only these are charged for. Everything else your server exposes stays FREE.
"pricedTools": {
"premium_data": {
"network": "eip155:8453",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "10000"
}
}
}
```
`${VAR}` reads from the environment, so the config file itself holds no secrets and is safe to commit.
`amount` is in **atomic units** — USDC has 6 decimals, so `"10000"` is $0.01. Getting this wrong by
10^6 is the easiest mistake here.
An HTTP upstream instead of stdio:
```jsonc
"upstream": {
"transport": "http",
"url": "https://your-server.example.com/mcp",
"headers": { "Authorization": "Bearer ${YOUR_UPSTREAM_TOKEN}" }
}
```
To accept several assets or networks for one tool, pass an array — the agent picks one. Offer only
what `GET https://ai.cryptoapis.io/x402/merchant/supported` lists (public, no key); anything else is
advertised and then rejected at `/verify`.
## Run
```bash
cryptoapis-mcp-x402-accept --config ./x402-accept.config.json
```
Then point agents at the **proxy** instead of your server. In Claude Code:
```bash
claude mcp add my-paid-tools -- cryptoapis-mcp-x402-accept --config /abs/path/to/config.json
```
Everything is validated at boot — the config, the upstream connection, and whether the tools you
priced actually exist upstream. A typo'd tool name is a **hard failure**, not a silent revenue hole:
the alternative is believing a tool is paywalled while it quietly serves for free.
## What an agent sees
| Step | Result |
|---|---|
| Unpaid call to a priced tool | `isError: true` carrying `PaymentRequired` in **both** `structuredContent` and `content[0].text` |
| Agent pays | Signs locally, retries with the payload in `_meta["x402/payment"]` — raw JSON, no base64 |
| Paid call | Your tool's real result, with the receipt in `_meta["x402/payment-response"]` |
| Call to an unpriced tool | Forwarded, free, unchanged |
**Your server is never called until payment has settled.** The proxy charges and then forwards — it
does not forward and then bill. An unpaid call cannot reach your server at all, so it cannot be made
to do the work for free.
Priced tools advertise `[paid: x402]` in their description so an agent knows the cost *before*
calling. An agent that discovers a price only by being refused has already wasted a round-trip.
## Paying it
Agents pay with [`@cryptoapis-io/mcp-x402-pay`](https://www.npmjs.com/package/@cryptoapis-io/mcp-x402-pay)
or, in code, [`@cryptoapis-io/x402-buyer-sdk/mcp`](https://www.npmjs.com/package/@cryptoapis-io/x402-buyer-sdk).
## Notes
- Requires a CryptoAPIs API key with the **`X402_FACILITATOR`** feature.
- `"settle": false` verifies without settling — useful while wiring up, but advisory only: the buyer
proved they *could* pay, not that they did. Never ship it.
- Test end-to-end on **Base Sepolia** (`eip155:84532`) before charging real money.
- Implements the x402 v2 MCP transport
([spec](https://github.com/coinbase/x402/blob/main/specs/transports-v2/mcp.md)), sharing one
implementation with the merchant SDK — a spec fix lands in both.
What people ask about cryptoapis-mcp-x402-accept
What is CryptoAPIs-io/cryptoapis-mcp-x402-accept?
+
CryptoAPIs-io/cryptoapis-mcp-x402-accept is mcp servers for the Claude AI ecosystem. MERCHANT-side x402 MCP paywall — self-hosted proxy that charges agents per tool call on an existing MCP server (non-custodial). Part of @cryptoapis-io/mcp. It has 0 GitHub stars and was last updated yesterday.
How do I install cryptoapis-mcp-x402-accept?
+
You can install cryptoapis-mcp-x402-accept by cloning the repository (https://github.com/CryptoAPIs-io/cryptoapis-mcp-x402-accept) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is CryptoAPIs-io/cryptoapis-mcp-x402-accept safe to use?
+
CryptoAPIs-io/cryptoapis-mcp-x402-accept has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.
Who maintains CryptoAPIs-io/cryptoapis-mcp-x402-accept?
+
CryptoAPIs-io/cryptoapis-mcp-x402-accept is maintained by CryptoAPIs-io. The last recorded GitHub activity is from yesterday, with 0 open issues.
Are there alternatives to cryptoapis-mcp-x402-accept?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy cryptoapis-mcp-x402-accept to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/cryptoapis-io-cryptoapis-mcp-x402-accept)<a href="https://claudewave.com/repo/cryptoapis-io-cryptoapis-mcp-x402-accept"><img src="https://claudewave.com/api/badge/cryptoapis-io-cryptoapis-mcp-x402-accept" alt="Featured on ClaudeWave: CryptoAPIs-io/cryptoapis-mcp-x402-accept" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!