Shumi MCP agent

Shumi crypto trade-intelligence MCP server — markets, funding rates, narratives, regime, and delta-neutral research for any MCP client.

by shumi-ai·MIT license·★ 2 Stars on the repo·GitHub ↗

Inside this agent

README.md · the author's own words
# @shumi-ai/mcp

Shumi crypto trade-intelligence as an [MCP](https://modelcontextprotocol.io) server — the same
market intelligence the [`shumi` CLI](https://www.npmjs.com/package/shumi) provides, for any MCP
client (Claude Desktop, Claude Code, Cursor, agents).

It's a thin wrapper over Shumi's data API: prices, trends, funding rates, sentiment, narratives,
market regime, synthesized signals, pair / delta-neutral ideas, real-world assets, holder and
wallet tracking, and transcript highlights. All tools are read-only.

## Quick start

You need a Shumi API key (`shumi_sk_…`). Create one at <https://shumi.ai>.

### Claude Desktop / Claude Code

Word-for-word excerpt, not a result. Read the full README.md ↓

Files of Shumi MCP

shumi-ai/main1 file
README.md
Show the full text161 lines

@shumi-ai/mcp

Shumi crypto trade-intelligence as an MCP server — the same market intelligence the shumi CLI provides, for any MCP client (Claude Desktop, Claude Code, Cursor, agents).

It's a thin wrapper over Shumi's data API: prices, trends, funding rates, sentiment, narratives, market regime, synthesized signals, pair / delta-neutral ideas, real-world assets, holder and wallet tracking, and transcript highlights. All tools are read-only.

Quick start

You need a Shumi API key (shumi_sk_…). Create one at https://shumi.ai.

Claude Desktop / Claude Code

Add to your MCP config (claude_desktop_config.json, or claude mcp add for Claude Code):

{
  "mcpServers": {
    "shumi": {
      "command": "npx",
      "args": ["-y", "@shumi-ai/mcp"],
      "env": {
        "SHUMI_TOKEN": "shumi_sk_your_key_here"
      }
    }
  }
}

Restart the client. The shumi tools (e.g. get_coin_risk, get_market_health, ask_shumi) appear automatically.

Cursor

~/.cursor/mcp.json uses the same command / args / env shape as above.

Plugin directories

This repo also ships plugin.json and mcp.json at its root, so it installs as an Agent Plugin from Cursor's directory and any other client on that standard.

Set SHUMI_TOKEN in your environment before starting the client when you install this way. The Agent Plugins schema takes literal environment values only — it has no placeholder for a secret — so the manifest deliberately omits env rather than shipping a ${SHUMI_TOKEN} string that would be passed through verbatim and fail as an invalid key.

Tools

Typed (deterministic): get_coin_risk, lookup_coin, resolve_coin, get_coin_sentiment, get_coin_historical, get_market_health, get_market_crossing, get_global_market, get_prices, scan_trends, scan_coins, get_market_sentiment, list_narratives, get_narrative, list_categories, get_category, get_funding_momentum, get_funding_alerts, get_regime, get_signal, get_signal_quality, get_pair_suggestions, list_rwa_assets, get_rwa_asset, get_unlocks, get_unlock_calendar, get_holders, get_wallets, get_futures_signals, get_basket, get_transcripts.

Real-world assets (list_rwa_assets, get_rwa_asset) cover stocks, ETFs, commodities, indices and FX trading as perps on Hyperliquid builder DEXes. They are not crypto tokens — the coin tools will not find them.

Free-form: ask_shumi (natural-language questions — Shumi classifies, fetches, and synthesizes) and search_web.

List-returning tools accept top (keep first N items) and fields (comma-separated keys to keep) to save tokens.

Resources: shumi://capabilities (the data surface) and shumi://billing/tier (your current entitlement).

Configuration

Env var Default Purpose
SHUMI_TOKEN — API key (shumi_sk_*). Required.
SHUMI_API_URL production coinrotator-ai endpoint Override the API base URL.
SHUMI_WALLET — Wallet address to include in NLP query context.

Gating (free / access / pro tiers and pay-per-call) is enforced server-side, exactly as for the CLI — out-of-quota responses come back as a structured error with an actionable hint.

Remote (HTTP)

For a hosted, multi-user deployment:

PORT=8787 SHUMI_MCP_ALLOWED_ORIGINS=https://yourapp.com npm run start:http

Each request authenticates with its own key header; that token is forwarded to the upstream API per request. Endpoint: POST /mcp, health: GET /health.

Connecting from Claude (static_headers)

Claude supports a fixed credential entered as a request header, so no OAuth server is needed. In Add custom connector → request headers, an organisation administrator enters:

field value
URL https://mcp.shumi.ai/mcp
Header name Authorization
Header value Bearer shumi_sk_…

x-api-key: shumi_sk_… works too, and so does an Authorization value with the Bearer prefix omitted — an admin types this once by hand, and a mistyped pair fails closed with no error they can see, so all three shapes are accepted. x-api-key wins if both are present, on the grounds that an admin who set it meant it.

Do not put the key in the URL. The MCP authorization spec prohibits access tokens in the URI query string and Anthropic documents a credential in a URL as a security vulnerability — URLs land in server logs, proxies and browser history. The ?shumiToken= / ?config= query forms exist only because Smithery injects session config that way.

One thing to know before buying for a team: a static_headers credential is shared by the organisation, not per user. Everyone connecting through that connector shares one Shumi account, one free-tier allowance and one quota. Per-user metering needs OAuth — see docs/oauth-plan.md.

An unauthenticated call is answered with 200 and an in-band AUTH_REQUIRED error, not 401. That is deliberate: Claude treats a 401 as the start of an OAuth flow, and a server with no authorization server behind it would send the client into a handshake that cannot complete. The 401 path exists but is gated behind SHUMI_MCP_AUTH_SERVER, so it lights up only once there is an authorization server to point at.

The server is stateless. One endpoint serves both protocol revisions:

  • 2026-07-28 — no initialize, no Mcp-Session-Id. A request carries its own routing in headers (Mcp-Method, plus Mcp-Name on tools/call) and its protocol envelope in params._meta, so an intermediary can route and meter a call without parsing the body.
  • 2025-11-25 and earlier — still served. Old clients keep their initialize handshake, but each exchange is answered by its own instance rather than a session.

Because nothing outlives a request, GET and DELETE (the 2025 session operations) return 405, and the session tunables that used to live here — SHUMI_MCP_SESSION_TTL_MS, SHUMI_MCP_MAX_SESSIONS, SHUMI_MCP_SESSION_SWEEP_MS — are gone. They are safe to delete from any deployment; unset they do nothing. The idle-session reaper they configured existed to stop liveness probes from growing the heap, which cannot happen when no session is kept.

Develop

npm install
npm test                # unit tests (no network)
npm run inspect         # open the MCP Inspector against the stdio server
SHUMI_TOKEN=… npm start # run the stdio server

Deliberately not exposed

Two CLI routes have no MCP tool, both on purpose:

  • walkforward — the route exists, but two of its three actions have nothing behind them while Engine B is paused: positions is empty and outcomes holds a single row from 2026-05-28. Shipping it would hand a caller an empty array with no reason attached. It goes in when the engine resumes.
  • watch — server-sent events, which do not fit MCP tool semantics.

Everything else in the CLI's typed surface has a tool.

1# @shumi-ai/mcp
2 
3Shumi crypto trade-intelligence as an [MCP](https://modelcontextprotocol.io) server — the same
4market intelligence the [`shumi` CLI](https://www.npmjs.com/package/shumi) provides, for any MCP
5client (Claude Desktop, Claude Code, Cursor, agents).
6 
7It's a thin wrapper over Shumi's data API: prices, trends, funding rates, sentiment, narratives,
8market regime, synthesized signals, pair / delta-neutral ideas, real-world assets, holder and
9wallet tracking, and transcript highlights. All tools are read-only.
10 
11## Quick start
12 
13You need a Shumi API key (`shumi_sk_…`). Create one at <https://shumi.ai>.
14 
15### Claude Desktop / Claude Code
16 
17Add to your MCP config (`claude_desktop_config.json`, or `claude mcp add` for Claude Code):
18 
19```json
20{
21 "mcpServers": {
22 "shumi": {
23 "command": "npx",
24 "args": ["-y", "@shumi-ai/mcp"],
25 "env": {
26 "SHUMI_TOKEN": "shumi_sk_your_key_here"
27 }
28 }
29 }
30}
31```
32 
33Restart the client. The `shumi` tools (e.g. `get_coin_risk`, `get_market_health`, `ask_shumi`)
34appear automatically.
35 
36### Cursor
37 
38`~/.cursor/mcp.json` uses the same `command` / `args` / `env` shape as above.
39 
40### Plugin directories
41 
42This repo also ships `plugin.json` and `mcp.json` at its root, so it installs as an
43[Agent Plugin](https://agent-plugins.org) from Cursor's directory and any other client on that
44standard.
45 
46Set `SHUMI_TOKEN` in your environment before starting the client when you install this way. The
47Agent Plugins schema takes literal environment values only — it has no placeholder for a secret —
48so the manifest deliberately omits `env` rather than shipping a `${SHUMI_TOKEN}` string that would
49be passed through verbatim and fail as an invalid key.
50 
51## Tools
52 
53**Typed (deterministic):** `get_coin_risk`, `lookup_coin`, `resolve_coin`, `get_coin_sentiment`,
54`get_coin_historical`, `get_market_health`, `get_market_crossing`, `get_global_market`,
55`get_prices`, `scan_trends`, `scan_coins`, `get_market_sentiment`, `list_narratives`,
56`get_narrative`, `list_categories`, `get_category`, `get_funding_momentum`, `get_funding_alerts`,
57`get_regime`, `get_signal`, `get_signal_quality`, `get_pair_suggestions`, `list_rwa_assets`,
58`get_rwa_asset`, `get_unlocks`, `get_unlock_calendar`, `get_holders`, `get_wallets`, `get_futures_signals`, `get_basket`,
59`get_transcripts`.
60 
61**Real-world assets** (`list_rwa_assets`, `get_rwa_asset`) cover stocks, ETFs, commodities,
62indices and FX trading as perps on Hyperliquid builder DEXes. They are not crypto tokens — the
63coin tools will not find them.
64 
65**Free-form:** `ask_shumi` (natural-language questions — Shumi classifies, fetches, and synthesizes)
66and `search_web`.
67 
68List-returning tools accept `top` (keep first N items) and `fields` (comma-separated keys to keep)
69to save tokens.
70 
71**Resources:** `shumi://capabilities` (the data surface) and `shumi://billing/tier` (your current
72entitlement).
73 
74## Configuration
75 
76| Env var | Default | Purpose |
77| --- | --- | --- |
78| `SHUMI_TOKEN` | — | API key (`shumi_sk_*`). **Required.** |
79| `SHUMI_API_URL` | production coinrotator-ai endpoint | Override the API base URL. |
80| `SHUMI_WALLET` | — | Wallet address to include in NLP query context. |
81 
82Gating (free / access / pro tiers and pay-per-call) is enforced server-side, exactly as for the CLI —
83out-of-quota responses come back as a structured error with an actionable hint.
84 
85## Remote (HTTP)
86 
87For a hosted, multi-user deployment:
88 
89```bash
90PORT=8787 SHUMI_MCP_ALLOWED_ORIGINS=https://yourapp.com npm run start:http
91```
92 
93Each request authenticates with its own key header; that token is forwarded to the upstream API per
94request. Endpoint: `POST /mcp`, health: `GET /health`.
95 
96### Connecting from Claude (`static_headers`)
97 
98Claude supports a fixed credential entered as a request header, so no OAuth server is needed. In
99**Add custom connector → request headers**, an organisation administrator enters:
100 
101| field | value |
102|---|---|
103| URL | `https://mcp.shumi.ai/mcp` |
104| Header name | `Authorization` |
105| Header value | `Bearer shumi_sk_…` |
106 
107`x-api-key: shumi_sk_…` works too, and so does an `Authorization` value with the `Bearer ` prefix
108omitted — an admin types this once by hand, and a mistyped pair fails closed with no error they can
109see, so all three shapes are accepted. `x-api-key` wins if both are present, on the grounds that an
110admin who set it meant it.
111 
112**Do not put the key in the URL.** The MCP authorization spec prohibits access tokens in the URI
113query string and Anthropic documents a credential in a URL as a security vulnerability — URLs land in
114server logs, proxies and browser history. The `?shumiToken=` / `?config=` query forms exist only
115because Smithery injects session config that way.
116 
117One thing to know before buying for a team: a `static_headers` credential is **shared by the
118organisation, not per user**. Everyone connecting through that connector shares one Shumi account,
119one free-tier allowance and one quota. Per-user metering needs OAuth — see `docs/oauth-plan.md`.
120 
121An unauthenticated call is answered with **`200` and an in-band `AUTH_REQUIRED` error, not `401`**.
122That is deliberate: Claude treats a `401` as the start of an OAuth flow, and a server with no
123authorization server behind it would send the client into a handshake that cannot complete. The
124`401` path exists but is gated behind `SHUMI_MCP_AUTH_SERVER`, so it lights up only once there is an
125authorization server to point at.
126 
127**The server is stateless.** One endpoint serves both protocol revisions:
128 
129- **`2026-07-28`** — no `initialize`, no `Mcp-Session-Id`. A request carries its own routing in
130 headers (`Mcp-Method`, plus `Mcp-Name` on `tools/call`) and its protocol envelope in `params._meta`,
131 so an intermediary can route and meter a call without parsing the body.
132- **`2025-11-25` and earlier** — still served. Old clients keep their `initialize` handshake, but each
133 exchange is answered by its own instance rather than a session.
134 
135Because nothing outlives a request, `GET` and `DELETE` (the 2025 session operations) return `405`,
136and the session tunables that used to live here — `SHUMI_MCP_SESSION_TTL_MS`, `SHUMI_MCP_MAX_SESSIONS`,
137`SHUMI_MCP_SESSION_SWEEP_MS` — are gone. They are safe to delete from any deployment; unset they do
138nothing. The idle-session reaper they configured existed to stop liveness probes from growing the
139heap, which cannot happen when no session is kept.
140 
141## Develop
142 
143```bash
144npm install
145npm test # unit tests (no network)
146npm run inspect # open the MCP Inspector against the stdio server
147SHUMI_TOKEN=… npm start # run the stdio server
148```
149 
150## Deliberately not exposed
151 
152Two CLI routes have no MCP tool, both on purpose:
153 
154- **`walkforward`** — the route exists, but two of its three actions have nothing behind them
155 while Engine B is paused: positions is empty and outcomes holds a single row from 2026-05-28.
156 Shipping it would hand a caller an empty array with no reason attached. It goes in when the
157 engine resumes.
158- **`watch`** — server-sent events, which do not fit MCP tool semantics.
159 
160Everything else in the CLI's typed surface has a tool.
161 

Discussion

Alternatives