CorpStacking MCP server,
for any AI agent.
Point Claude Desktop, Claude Code, Cursor, or ChatGPT custom GPTs at corporate BTC, ETH, and SOL treasury data. Eight read-only tools. The same API key as /api/v1.
What you need
- An API key on the API Pro plan ($499/mo) or higher. The same key powers /api/v1 — there's no separate MCP plan.
- A client that speaks MCP — Claude Desktop, Claude Code, Cursor, ChatGPT custom GPTs, and so on.
Connection
Endpoint
POST https://www.corpstacking.com/api/mcpAuthentication
Authorization: Bearer cs_live_YOUR_KEYThe x-api-keyheader is also accepted — useful if you're reusing curl examples from /api/v1. Either header value resolves to the same plan and quota.
Transport
Streamable HTTP, the current MCP transport (spec 2025-03-26). Request and response share one connection, so the client has no session state to manage.
Quickstart
Pick your client. Replace cs_live_YOUR_KEY with your key from /settings → API.
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%/Claude/claude_desktop_config.json (Windows), then restart Claude.
{
"mcpServers": {
"corpstacking": {
"type": "http",
"url": "https://www.corpstacking.com/api/mcp",
"headers": {
"Authorization": "Bearer cs_live_YOUR_KEY"
}
}
}
}Claude Code
Run from any project directory. Once added, "corpstacking" is callable in every Claude Code session on your machine.
claude mcp add --transport http corpstacking https://www.corpstacking.com/api/mcp \
--header "Authorization: Bearer cs_live_YOUR_KEY"Cursor
Add to ~/.cursor/mcp.json (or the workspace-scoped .cursor/mcp.json), then restart Cursor.
{
"mcpServers": {
"corpstacking": {
"url": "https://www.corpstacking.com/api/mcp",
"headers": {
"Authorization": "Bearer cs_live_YOUR_KEY"
}
}
}
}Other clients (ChatGPT custom GPTs via the MCP Connector, Continue.dev, Replit Agent, Sourcegraph Cody, etc.) connect the same way: point at https://www.corpstacking.com/api/mcp with the same Authorization: Bearer header.
Tool reference
All tools are read-only. They appear in tools/list once the client connects.
list_treasuriestoken?, limit?, offset?Public companies, ETFs, and governments holding crypto, ranked by position size.
get_treasuryslugOne entity's full holdings + 10 most-recent disclosed purchases.
list_signalssignal_type?, token?, since?, limit?Recent signal feed — SEC filings, wire-news, ETF milestones, sales, capital raises.
get_signalslugSingle signal detail with associated company.
list_recent_activitytoken?, since?, min_usd?, limit?Every disclosed purchase across every tracked entity, most-recent first.
get_market_stats(none)Aggregate totals: entity count, holdings per token, breakdown by entity type.
list_tokens(none)BTC, ETH, SOL reference — current spot price, 24h move, market cap.
get_usage(none)Your current plan, remaining monthly quota, and per-minute rate limit headroom.
Raw JSON-RPC example
If you're wiring up a non-standard client or want to test the wire protocol directly, hit the endpoint with curl. The transport replies in newline-delimited Server-Sent-Events frames (event: message followed by data: …).
# List the top 5 BTC treasuries
curl -s -X POST https://www.corpstacking.com/api/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
-H "authorization: Bearer cs_live_YOUR_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_treasuries",
"arguments": { "token": "bitcoin", "limit": 5 }
}
}'Plans & limits
- API Pro — $499/mo: 500,000 requests/month, 2,000 requests/minute burst.
- Team — Contact sales: 1,000,000 requests/month, 3,000 requests/minute burst, 5 seats included. Talk to our team.
- Enterprise — custom: unmetered + custom rate limits. Talk to our team.
One MCP request equals one /api/v1 request against your monthly quota and per-minute rate limit. A tool that runs multiple database queries internally still counts as one request. Call get_usage to read your remaining quota before you hit the cap.
Errors
401 Unauthorized — missing or invalid Authorization header. Check the key starts with cs_live_ and has not been rotated.
403 Forbidden — your plan does not include API access. Upgrade at /upgrade to API Pro or higher.
429 Too Many Requests — you hit the per-minute or monthly limit. Inspect the X-RateLimit-Remaining and X-Quota-Remaining response headers; either wait for the bucket to reset or upgrade.
Tool errors — when a specific tool fails (bad slug, etc.) the request still returns HTTP 200; the result has isError: true and a human-readable text block explaining what went wrong.
FAQ
Why MCP and not just REST?▾
For backends, dashboards, and ETL jobs, use /api/v1. MCP is for AI agents that pick which tool to call from a natural-language prompt; the protocol hands the model every tool's schema so it can choose.
Does an MCP call cost the same as an /api/v1 call?▾
Yes. One MCP request equals one /api/v1 request against your monthly quota and per-minute rate limit. No separate billing.
Do you support batched tool calls?▾
Yes. JSON-RPC batch requests (array of calls in one POST) work as the spec defines; each call in the batch consumes one quota unit.
Can an agent subscribe to alerts or submit new entities via MCP?▾
Not yet. The current tools are all read-only. Write tools that change account state are on the roadmap, gated behind a customer opt-in toggle so an autonomous agent can't change anything by default. Talk to our team if you have a use case.
Which MCP protocol version is this?▾
MCP 2025-03-26 over streamable HTTP. The older HTTP+SSE transport (2024-11-05) is deprecated and not exposed.
Connect
Get an API key, add the connection string to your client config, ask the model a question.