unbag.me API + MCP
Token reports, holder maps, glyphs, your watchlist and SCOUT — one key, credits per call, JSON out.
API keys
Per route · last 30 days
Credits
Plans & credit packs
- FREE100 credits / daycached reads only · no holder maps60 requests/min · no fresh scans · 2 keys
- PRO5,000 credits / monthfresh scans, holder maps, SCOUT60 requests/min · 30 fresh scans/hour · 2 keys
- WHALE10,000 credits / monthfresh scans, holder maps, SCOUT120 requests/min · 100 fresh scans/hour · 5 keys
Limits are per account, all keys and connected apps together.
Credits: 1 cached report, glyphs, watchlist, SCOUT or stored holder map · 10 fresh scan · 25 holder-map compute · 0 /me. Charged on success only.
Every quota by plan, credits included: QUOTAS
Packs add to your balance, never expire, and are spent only after your plan’s allowance.
MCP connect
STREAMABLE HTTPMCP server https://mcp.unbag.me/mcp · Streamable HTTP · your API key as Authorization: Bearer (or X-API-Key) · the same tools as the API reference below, the same credits per call.
Create a key above, then replace ubk_<your-key> with it.
- Claude CodeIn a terminal:
claude mcp add --transport http unbag https://mcp.unbag.me/mcp --header "Authorization: Bearer ubk_<your-key>" - Claude DesktopSettings → Developer → Edit Config, add to claude_desktop_config.json, then restart Claude (needs Node for npx):
{ "mcpServers": { "unbag": { "command": "npx", "args": [ "-y", "mcp-remote", "https://mcp.unbag.me/mcp", "--header", "Authorization:${UNBAG_AUTH}" ], "env": { "UNBAG_AUTH": "Bearer ubk_<your-key>" } } } }mcp-remote carries the key as a header; the colon with no space and the env value are deliberate (a space inside args breaks on Windows).
- claude.ai & Desktop connectorsSettings → Connectors → Add custom connector → URL:
https://mcp.unbag.me/mcpOnly organisations in Claude’s request-headers beta can attach a key here (header Authorization: Bearer <your key>). Everyone else: these connectors sign in with OAuth, which is coming — use Claude Code or the Desktop config above meanwhile.
- ChatGPTThrough the OpenAI API (Responses), the key goes in the MCP tool’s authorization field:
curl https://api.openai.com/v1/responses \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "<model>", "input": "What does unbag.me say about JUP on Solana?", "tools": [{ "type": "mcp", "server_label": "unbag", "server_url": "https://mcp.unbag.me/mcp", "authorization": "ubk_<your-key>", "require_approval": "never" }] }'The ChatGPT app’s connectors accept OAuth or no auth — not an API key. App sign-in comes with OAuth.
- Cursor~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{ "mcpServers": { "unbag": { "url": "https://mcp.unbag.me/mcp", "headers": { "Authorization": "Bearer ubk_<your-key>" } } } }
How the score is weighted
| Engine | Version 3 (live) | Version 2 (older reports) |
|---|---|---|
| Security | 20% | 30% |
| Liquidity | 20% | 20% |
| Holders | 20% | 20% |
| Smart Money | 15% | 15% |
| Volume | 10% | 10% |
| Utility score (UTILITY / HYBRID) or narrative score (MEME) | 15% | — |
| X Voice | — | 5% |
| Deep Authenticity (when an analysis has run) | — | 17% |
Version 3 scores every new report; version 2 is kept for reports scored before it — each report says which (score_version). Weights spread over the engines a report has: a missing reading’s share goes to the rest, never counted as zero. In version 3, a token with no class yet, or no utility / narrative score yet, holds the verdict at MIXED until it is read. Version 3 has no X Voice or Deep Authenticity.
API reference
openapi.jsonBase URL https://unbag.me/api/v1 · header X-API-Key · every response carries meta.disclaimer: “Signal, not advice.”