mcpField
C
CoinStats

CoinStats

VerifiedFeaturedRemote
coinstats.appFinance17Updated 2d ago

About CoinStats

CoinStats is a hosted MCP server for agents that need crypto market, portfolio, wallet, exchange, and news data from CoinStats. Users authorize access through a browser using OAuth, without managing an API key for the hosted service.

Key features

  1. 01Read prices and market data for coins
  2. 02Review portfolio performance and P/L
  3. 03Query wallet balances and transactions
  4. 04Read exchange positions and trade history
  5. 05Compare exchange prices and retrieve crypto news

Use cases

  1. 01Check current coin prices and market charts
  2. 02Review portfolio performance over a chosen period
  3. 03Inspect wallet activity across blockchains
  4. 04Track exchange positions or find crypto news

MCP support

Provides CoinStats API capabilities to MCP clients through a hosted HTTPS server using OAuth 2.1 authorization. A developer-mode stdio server is also available for API-key-based integrations.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"coinstats": {
"command": "npx",
"args": [
"-y",
"@coinstats/coinstats-mcp"
],
"env": {
"COINSTATS_API_KEY": "<COINSTATS_API_KEY>"
}
}
}
}
Run commandnpx -y @coinstats/coinstats-mcp
Environment variables to set
COINSTATS_API_KEYSecret

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@coinstats/coinstats-mcp

Tools

30

Saved tool list · updated 2w ago

ParameterTypeRequiredDescription
namestringNoSearch coins by name
pagenumberNoPage number
limitnumberNoNumber of results per page
currencystringNoCurrency for price data
symbolstringNoGet coins by symbol
blockchainsstringNoBlockchain filters, separated by commas (e.g., ethereum,solana)
includeRiskScorestringNoInclude risk score: true or false. Default - false
categoriesstringNoCategory filters, separated by commas (e.g., memecoins,sports)
sortBystringNoField to sort by
sortDirenumNoSort directionasc | desc
marketCap-greaterThannumberNoMarketcap Greater Than
marketCap-equalsnumberNoMarketcap Equals
marketCap-lessThannumberNoMarketcap Less Than
fullyDilutedValuation-greaterThannumberNoFully Diluted Valuation Greater Than
fullyDilutedValuation-equalsnumberNoFully Diluted Valuation Equals
fullyDilutedValuation-lessThannumberNoFully Diluted Valuation Less Than
volume-greaterThannumberNoVolume Greater Than
volume-equalsnumberNoVolume Equals
volume-lessThannumberNoVolume Less Than
priceChange1h-greaterThannumberNoPrice Change 1h Greater Than
priceChange1h-equalsnumberNoPrice Change 1h Equals
priceChange1h-lessThannumberNoPrice Change 1h Less Than
priceChange1d-greaterThannumberNoPrice Change 1d Greater Than
priceChange1d-equalsnumberNoPrice Change 1d Equals
priceChange1d-lessThannumberNoPrice Change 1d Less Than
priceChange7d-greaterThannumberNoPrice Change 7d Greater Than
priceChange7d-equalsnumberNoPrice Change 7d Equals
priceChange7d-lessThannumberNoPrice Change 7d Less Than
availableSupply-greaterThannumberNoAvailable Supply Greater Than
availableSupply-equalsnumberNoAvailable Supply Equals
availableSupply-lessThannumberNoAvailable Supply Less Than
totalSupply-greaterThannumberNoTotal Supply Greater Than
totalSupply-equalsnumberNoTotal Supply Equals
totalSupply-lessThannumberNoTotal Supply Less Than
rank-greaterThannumberNoRank Greater Than
rank-equalsnumberNoRank Equals
rank-lessThannumberNoRank Less Than
price-greaterThannumberNoPrice Greater Than
price-equalsnumberNoPrice Equals
price-lessThannumberNoPrice Less Than
riskScore-greaterThannumberNoRisk Score Greater Than (Only if includeRiskScore=true)
riskScore-equalsnumberNoRisk Score Equals (Only if includeRiskScore=true)
riskScore-lessThannumberNoRisk Score Less Than (Only if includeRiskScore=true)

Details

From the project README

CoinStats MCP Server

Hosted Model Context Protocol server for the CoinStats API. Lets AI agents (Claude, Cursor, Codex, ChatGPT — anything that speaks MCP) read and act on the same crypto data the CoinStats apps use, over a single OAuth-protected HTTPS URL.

There's no API key to copy and no env var to manage: each user authorises the agent against their own CoinStats account in the browser, and the agent gets a per-user token from then on.

CoinStats Server MCP server

Server URL

https://mcp.coinstats.app/mcp

Installation

Claude.ai / Claude Desktop

Settings → Connectors → Add custom connector. Paste the server URL and click Add:

https://mcp.coinstats.app/mcp

A browser window opens at coinstats.app/openapi/consent. Sign in (or recognise your existing session), review the requested access, click Approve.

Cursor

Install MCP Server

Or add to ~/.cursor/mcp.json manually:

{
  "mcpServers": {
    "coinstats": {
      "url": "https://mcp.coinstats.app/mcp"
    }
  }
}

Restart Cursor; on first call it opens a browser window for the OAuth flow.

Claude Code
claude mcp add coinstats --transport http https://mcp.coinstats.app/mcp

Claude Code opens a browser to authorise. Verify with:

claude mcp list
Codex

codex mcp add only registers the URL; it does not open a browser. Run codex mcp login separately:

codex mcp add coinstats --url https://mcp.coinstats.app/mcp
codex mcp login coinstats

After the login step codex mcp list should show Auth: OAuth for coinstats.

Other MCP clients

Any client that speaks the Streamable HTTP transport with OAuth 2.1 authorization will work. Point it at https://mcp.coinstats.app/mcp — Dynamic Client Registration (RFC 7591) is supported, so no pre-shared client_id is needed.

What you can do

After authorising, your agent can:

  • Look up real-time prices, charts and market data for 100,000+ coins
  • Read your CoinStats portfolio coins, P/L and performance over time
  • Query wallet balances and transactions across 120+ blockchains
  • Read open perpetual and futures positions from connected exchanges, including Hyperliquid, with leverage, P/L and funding where available
  • Read synced perpetual trade history with get-perpetual-trades, including prices, realized P/L and fees where available. Supports portfolioId and limit/skip pagination; coverage depends on the connector and last sync.
  • Retrieve cash-flow-adjusted historical P/L for wallets, exchanges, and portfolios over preset or custom calendar ranges
  • Compare ticker pricing across 200+ exchanges
  • Pull crypto news (latest, trending, filtered by source or topic)

Full tool catalog: https://coinstats.app/api-docs/mcp/tools.

Authentication

Discovery + OAuth flow follows the standard MCP / RFC pattern:

EndpointSpecPurpose
GET /.well-known/oauth-protected-resourceRFC 9728Points at the authorization server (https://api.coin-stats.com)
GET /.well-known/oauth-authorization-serverRFC 8414AS metadata (also mirrored on the MCP host so older clients can find it without the indirection)
POST /v1/oauth/register (on AS)RFC 7591Dynamic Client Registration
GET /v1/oauth/authorize → consent UIOAuth 2.1 §4.1User approves access
POST /v1/oauth/token (on AS)OAuth 2.1 §4.1PKCE code exchange
POST /v1/oauth/revoke (on AS)RFC 7009Per-client disconnect

Token transport: Authorization: Bearer <token>. Single coinstats scope today; granular scopes are on the roadmap.

Self-host / stdio fallback (developer mode)

If you want to run the MCP server yourself (no per-user OAuth, just a developer API key), the legacy stdio entry point is published on npm:

npx @coinstats/coinstats-mcp

with COINSTATS_API_KEY set in the env. Wire into a client like this:

{
  "mcpServers": {
    "coinstats": {
      "command": "npx",
      "args": ["-y", "@coinstats/coinstats-mcp"],
      "env": { "COINSTATS_API_KEY": "<YOUR_API_KEY>" }
    }
  }
}

Or via Docker:

{
  "mcpServers": {
    "coinstats": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "COINSTATS_API_KEY", "coinstats/coinstats-mcp"],
      "env": { "COINSTATS_API_KEY": "<YOUR_API_KEY>" }
    }
  }
}

This path is the right choice for headless / unattended integrations where there's no human to click "Approve". Get a key from the CoinStats API Dashboard.

Architecture

The hosted server is a stateless Cloudflare Worker (~225 KiB / ~41 KiB gzipped) that:

  1. Exposes the RFC 9728 + RFC 8414 discovery endpoints.
  2. Gates POST /mcp on a Authorization: Bearer … token.
  3. Dispatches MCP JSON-RPC (initialize / tools/list / tools/call / ping) without session state.
  4. Forwards each tool call to https://openapiv1.coinstats.app carrying the same bearer.

Source: src/worker.ts. Config: wrangler.jsonc.

Local development

The repo ships two entry points:

  • src/worker.ts — Cloudflare Worker. Run with wrangler dev (port 8787 by default).
  • src/index.ts — stdio server. Run with node dist/index.js after building, or via the published npm package.
# Build the stdio CLI
npm run build

# Run the Worker locally (requires `wrangler login` first)
npm run dev

# Deploy the Worker manually — needs CLOUDFLARE_ACCOUNT_ID exported in the
# env (the account ID isn't committed to wrangler.jsonc). Normally you don't
# need this: merging to main deploys automatically (see "Deployment" below).
export CLOUDFLARE_ACCOUNT_ID=<your-cf-account-id>
npm run deploy

# Tail production logs
npm run tail

For local Worker development you can override env vars:

wrangler dev --var OAUTH_ISSUER:http://localhost:1337 \
             --var COINSTATS_API_BASE_URL:http://localhost:9999

Deployment

GitHub Actions (.github/workflows/ci.yml) builds, tests and dry-run bundles the Worker on every pull request. Each push to main runs the same checks, then deploys to mcp.coinstats.app and probes /healthz. The deploy job uses the production environment, which only protected branches can use, and reads two secrets from it: CLOUDFLARE_API_TOKEN (Workers deploy permission) and CLOUDFLARE_ACCOUNT_ID. Pull requests from forks run the checks without access to either secret. To redeploy without a new commit, run the workflow manually on main; the deploy job only ships the current tip of main, so re-running an old run fails instead of rolling back.

A failed post-deploy health check does not roll back automatically. To restore the previous version, run npx wrangler rollback (or pick a version under Workers & Pages → coinstats-mcp → Deployments in the Cloudflare dashboard), then fix forward on main.

OpenAI plugin domain verification

The OpenAI plugin submission portal verifies domain ownership by fetching https://mcp.coinstats.app/.well-known/openai-apps-challenge and expecting the token it issued as plain text. The Worker serves the OPENAI_APPS_CHALLENGE env var at that path, and returns 404 when the variable is unset. Set it per deployment, outside the committed config:

wrangler secret put OPENAI_APPS_CHALLENGE

Related

License

MIT — see LICENSE.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.