coinopai-mcp
Local stdio MCP server for x402-powered paid crypto intelligence, decision verification, and agent automation search over USDC micropayments on Base.
README
coinopai-mcp
Paid decision infrastructure for autonomous agents.
An MCP server that charges AI agents per verified intelligence request — using x402 micropayments on Base. Every decision gets a decision_id. Every decision_id can be audited against real prices.
This repo is the MCP client layer; paid intelligence is served from hosted CoinOpAI x402 endpoints.
Wrong predictions are shown too. That's the point.
Architecture
┌──────────────────────────────────┐
│ Claude Code / AI Agent │
└──────────────┬───────────────────┘
│ MCP (stdio)
▼
┌──────────────────────────────────┐
│ coinopai-mcp │
│ npx coinopai-mcp │
└──────────────┬───────────────────┘
│ HTTP + 402 payment header
▼
┌──────────────────────────────────┐
│ x402.coinopai.com │
│ Kronos intelligence API │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ Coinbase x402 Facilitator │
│ USDC settled on Base mainnet │
└──────────────────────────────────┘
The agent calls a tool → the MCP server receives an HTTP 402 → automatically signs a USDC micropayment → retries with the payment header → data returned. Configure once, pay automatically from the configured low-balance wallet.
The Verified Loop ($0.27/cycle)
check_trade_preflight ──→ get_crypto_decision ──→ [wait 1h] ──→ audit_trade_decision
$0.05 $0.15 $0.07
Is now allowed? CONSIDER_LONG/SHORT GOOD_DECISION
Cooldown check? NO_ACTION BAD_DIRECTION
Regime ok? + decision_id NOISE
Signal strength? + next_step hint + pnl_pct
Every decision is self-verifying. The decision_id links the prediction to the outcome. The audit fetches real market prices and produces a verdict. Nothing is hidden.
Real Output
Step 1 — Preflight (BTC, $0.05)
{
"allowed": true,
"symbol": "BTC/USD",
"market_state": "NORMAL",
"signal_strength": 0.72,
"regime": "TREND",
"cooldown_remaining_seconds": 0
}
Step 2 — Decision (BTC, $0.15)
{
"symbol": "BTC/USD",
"suggested_action": "CONSIDER_LONG",
"confidence": 0.72,
"regime": "TREND",
"decision_id": "a3f8c1d2-9472-4dfe-b459-5df17b282614",
"next_step": "Call audit_trade_decision with this decision_id after 1h using window=1h"
}
Step 3 — Audit (1h later, $0.07)
{
"decision_id": "a3f8c1d2-9472-4dfe-b459-5df17b282614",
"direction_held": true,
"pnl_pct": 0.82,
"verdict": "GOOD_DECISION"
}
Live results from real runs:
| Symbol | Decision | Confidence | 1h Outcome | Verdict |
|---|---|---|---|---|
| XRP | SHORT | 1.0 | -0.54% | ✅ GOOD_DECISION |
| ETH | LONG | 0.68 | -0.32% | ❌ BAD_DIRECTION |
| BTC | LONG | 0.40 | +0.01% | — NOISE |
It gets some right. It gets some wrong. The loop makes both visible.
Tools
| Tool | What it does | Cost |
|---|---|---|
check_trade_preflight |
Gate check: market allowed, cooldown, regime, signal strength | $0.05 |
get_crypto_decision |
CONSIDER_LONG/SHORT/NO_ACTION + decision_id |
$0.15 |
audit_trade_decision |
Verify against real prices: verdict + PnL% | $0.07 |
get_crypto_signals |
Live directional signals for BTC, ETH, SOL, XRP, ADA | $0.05 |
get_crypto_risk |
Market risk state + regime detection | $0.02 |
get_crypto_signal_history |
Up to 168h of signal history | $0.05 |
search_agent_automations |
Search 819 agent automation prompts | $0.01 |
get_agent_automation |
Full prompt + workflow steps by slug | $0.01 |
list_automation_categories |
All 35 automation categories with counts | $0.005 |
No API keys. No subscriptions. Pay per call in USDC.
Install
Claude Code
Add to ~/.claude/settings.json:
{
"mcpServers": {
"coinopai": {
"command": "npx",
"args": ["-y", "coinopai-mcp"],
"env": {
"WALLET_PRIVATE_KEY": "0x<your-base-wallet-private-key>"
}
}
}
}
Restart Claude Code. The 9 tools appear automatically.
Claude Desktop
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"coinopai": {
"command": "npx",
"args": ["-y", "coinopai-mcp"],
"env": {
"WALLET_PRIVATE_KEY": "0x<your-base-wallet-private-key>"
}
}
}
}
Smithery
Install via Smithery. Configure a dedicated low-balance payment wallet. Do not use your primary wallet.
Get a Wallet
- Install Coinbase Wallet or any EVM wallet
- Switch to Base network
- Buy or bridge USDC ($1 = ~3 full verified cycles)
- Use a dedicated low-balance Base wallet for agent payments and provide its private key locally via environment variable.
Your wallet key stays local. It never leaves your machine. Each payment is a signed micropayment — not a blanket approval.
Agent Code Example
// Step 1 — gate check ($0.05)
const pre = await mcp.call("check_trade_preflight", { symbol: "BTC" })
if (!pre.allowed) return // cooldown, bad regime, or stale data
// Step 2 — get decision ($0.15)
const dec = await mcp.call("get_crypto_decision", { symbol: "BTC" })
if (dec.suggested_action === "NO_ACTION") return
// Store the decision_id — you'll need it to close the loop
const { decision_id, suggested_action, confidence } = dec
// Step 3 — act on the decision here...
// Step 4 — audit 1 hour later ($0.07)
const audit = await mcp.call("audit_trade_decision", {
decision_id,
window: "1h"
})
// verdict: "GOOD_DECISION" | "BAD_DIRECTION" | "NOISE"
console.log(audit.verdict, audit.pnl_pct + "%")
Every decision response includes a next_step field — your agent always knows when and how to audit.
Symbol unavailable? If a symbol isn't in the current Kronos cycle:
{
"status": "UNAVAILABLE_THIS_CYCLE",
"available_symbols": ["BTC/USD", "ETH/USD", "XRP/USD"],
"retry_hint_seconds": 900
}
Route to an available symbol or wait 15 minutes for the next cycle.
Payment Stack
| Component | Value |
|---|---|
| Protocol | x402 |
| Scheme | ExactEvmScheme (EIP-3009 transferWithAuthorization) |
| Network | Base mainnet (eip155:8453) |
| Token | USDC (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913) |
| Facilitator | Coinbase |
Disclaimer
Decision outputs are probabilistic signals for experimental automated workflows only. Not financial advice. Early system with a small sample size. Results will vary. Never risk capital you can't afford to lose.
License
MIT — see LICENSE
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.