A ready-to-paste configuration for every AI agent.
initializeconnectedtools/list11 toolsX-API-KEYIt stays in this page: it fills the blocks below and is never sent or saved. Get a free key
Claude Desktop
API key or OAuth sign-inWithout a key (recommended): in Claude Desktop, open Customize → Connectors → Add custom connector, paste this URL and sign in to your BytNode account.
https://api.bytnode.com/mcpWith your API key: open Settings → Developer → Edit config, paste this into
claude_desktop_config.jsonand restart Claude Desktop. It runs themcp-remotebridge, so Node.js 18+ must be installed: this file only starts local servers.{ "mcpServers": { "bytnode": { "command": "npx", "args": [ "-y", "mcp-remote@latest", "https://api.bytnode.com/mcp", "--header", "X-API-KEY:${BYTNODE_API_KEY}", "--transport", "http-only" ], "env": { "BYTNODE_API_KEY": "YOUR_API_KEY" } } } }
claude.ai
No key: OAuth sign-inOn claude.ai, open Customize → Connectors → Add custom connector, name it BytNode, paste this URL, then sign in to your BytNode account. No key to paste: the connector also works in Claude Desktop and on mobile.
https://api.bytnode.com/mcpOn a Team or Enterprise plan, an owner adds it once for everyone under Organization settings → Connectors.
ChatGPT
No key: OAuth sign-inChatGPT can’t send an API key, so it connects with OAuth. In ChatGPT’s apps settings, turn on developer mode, then add a custom MCP server with this URL and choose OAuth.
https://api.bytnode.com/mcpChatGPT opens the BytNode sign-in page: approve access, and the eleven tools appear in your chats. Developer mode depends on your ChatGPT plan.
Claude Code
API key or OAuth sign-inRun this in a terminal.
--scope usermakes BytNode available in every project:claude mcp add --transport http --scope user bytnode https://api.bytnode.com/mcp --header "X-API-KEY: YOUR_API_KEY"Without a key: add the server alone, then type
/mcpin Claude Code to sign in to BytNode.claude mcp add --transport http --scope user bytnode https://api.bytnode.com/mcpFor a shared repository: commit this
.mcp.jsonat the project root. Each developer keeps the key in theBYTNODE_API_KEYenvironment variable, never in the file.{ "mcpServers": { "bytnode": { "type": "http", "url": "https://api.bytnode.com/mcp", "headers": { "X-API-KEY": "${BYTNODE_API_KEY}" } } } }
Cursor
API keyEdit
~/.cursor/mcp.jsonfor all your projects, or.cursor/mcp.jsonfor this one:{ "mcpServers": { "bytnode": { "url": "https://api.bytnode.com/mcp", "headers": { "X-API-KEY": "YOUR_API_KEY" } } } }BytNode shows up in the MCP list with its eleven tools. Keep the file out of git: it holds your key.
Codex
API key or OAuth sign-inAdd this table to
~/.codex/config.toml, or to.codex/config.tomlin a trusted project. The CLI, the IDE extension and the app share it:[mcp_servers.bytnode] url = "https://api.bytnode.com/mcp" http_headers = { "X-API-KEY" = "YOUR_API_KEY" }Without a key: register the URL, then sign in to BytNode in the browser that opens:
codex mcp add bytnode --url https://api.bytnode.com/mcpcodex mcp login bytnode
VS Code (GitHub Copilot)
API keyFor GitHub Copilot’s agent mode, one command adds the server to your VS Code profile:
code --add-mcp '{"name":"bytnode","type":"http","url":"https://api.bytnode.com/mcp","headers":{"X-API-KEY":"YOUR_API_KEY"}}'For a workspace: commit
.vscode/mcp.json. VS Code asks each developer for the key the first time, so it never lands in the repository:{ "inputs": [ { "type": "promptString", "id": "bytnode-key", "description": "BytNode API key", "password": true } ], "servers": { "bytnode": { "type": "http", "url": "https://api.bytnode.com/mcp", "headers": { "X-API-KEY": "${input:bytnode-key}" } } } }
Windsurf (Devin)
API keyWindsurf is now Devin Desktop. Open
~/.config/devin/mcp_config.json(on Windows,%AppData%\devin\mcp_config.json) and add BytNode:{ "mcpServers": { "bytnode": { "url": "https://api.bytnode.com/mcp", "headers": { "X-API-KEY": "YOUR_API_KEY" } } } }
Gemini CLI
API keyRun this in a terminal.
-s useradds BytNode to every project:gemini mcp add -s user --transport http -H "X-API-KEY: YOUR_API_KEY" bytnode https://api.bytnode.com/mcpOr edit
~/.gemini/settings.json. For Streamable HTTP the key ishttpUrl, noturl:{ "mcpServers": { "bytnode": { "httpUrl": "https://api.bytnode.com/mcp", "headers": { "X-API-KEY": "YOUR_API_KEY" } } } }
n8n
API keyIn your workflow, open the AI Agent node and add a tool: MCP Client Tool (n8n 1.104 or later).
Endpoint:
https://api.bytnode.com/mcpServer Transport: HTTP Streamable. Authentication: Header Auth, with a new credential: Name then Value:
X-API-KEYYOUR_API_KEYTools to Include: All. Your AI agent can now call BytNode on every run.
LangChain
API keyInstall LangChain and its MCP adapters, then put your key in the environment:
pip install langchain langchain-anthropic langchain-mcp-adaptersexport BYTNODE_API_KEY=YOUR_API_KEYLoad the eleven tools and give them to a LangChain agent. Any chat model works; this one uses Claude:
import asyncio, os from langchain.agents import create_agent from langchain_mcp_adapters.client import MultiServerMCPClient async def main(): client = MultiServerMCPClient({ "bytnode": { "transport": "streamable_http", "url": "https://api.bytnode.com/mcp", "headers": {"X-API-KEY": os.environ["BYTNODE_API_KEY"]}, } }) tools = await client.get_tools() agent = create_agent("anthropic:claude-opus-5-5", tools) result = await agent.ainvoke( {"messages": [{"role": "user", "content": "Top 5 pairs by open interest?"}]} ) print(result["messages"][-1].content) asyncio.run(main())
OpenAI Agents SDK
API keyInstall the OpenAI Agents SDK, then put your key in the environment:
pip install openai-agentsexport BYTNODE_API_KEY=YOUR_API_KEYAttach BytNode to an agent as a Streamable HTTP MCP server:
import asyncio, os from agents import Agent, Runner from agents.mcp import MCPServerStreamableHttp async def main(): async with MCPServerStreamableHttp( name="bytnode", params={ "url": "https://api.bytnode.com/mcp", "headers": {"X-API-KEY": os.environ["BYTNODE_API_KEY"]}, }, cache_tools_list=True, ) as bytnode: agent = Agent( name="Crypto analyst", instructions="Answer with BytNode live crypto market data.", mcp_servers=[bytnode], ) result = await Runner.run(agent, "What is the BTC funding rate now?") print(result.final_output) asyncio.run(main())
Claude API
API keyInstall the Anthropic SDK, then put your BytNode key in the environment:
pip install anthropicexport BYTNODE_API_KEY=YOUR_API_KEYThe Messages API connects to the MCP server itself, with no client code: declare the server and its toolset. The key travels as a bearer token, which BytNode accepts:
import os import anthropic client = anthropic.Anthropic() response = client.beta.messages.create( model="claude-opus-5-5", max_tokens=16000, betas=["mcp-client-2025-11-20"], mcp_servers=[{ "type": "url", "url": "https://api.bytnode.com/mcp", "name": "bytnode", "authorization_token": os.environ["BYTNODE_API_KEY"], }], tools=[{"type": "mcp_toolset", "mcp_server_name": "bytnode"}], messages=[{"role": "user", "content": "Which pairs have the highest funding?"}], ) for block in response.content: if block.type == "text": print(block.text)
OpenAI API
API keyInstall the OpenAI SDK, then put your BytNode key in the environment:
pip install openaiexport BYTNODE_API_KEY=YOUR_API_KEYThe Responses API calls remote MCP servers for you: declare BytNode as an
mcptool:import os from openai import OpenAI client = OpenAI() response = client.responses.create( model="gpt-5", tools=[{ "type": "mcp", "server_label": "bytnode", "server_url": "https://api.bytnode.com/mcp", "headers": {"X-API-KEY": os.environ["BYTNODE_API_KEY"]}, "require_approval": "never", }], input="Which pairs have the highest funding right now?", ) print(response.output_text)
Any other MCP client
API key or OAuth sign-inMost MCP clients read this
mcpServersobject. Some leave outtype, or call itstreamableHttp: check your client’s documentation.{ "mcpServers": { "bytnode": { "type": "http", "url": "https://api.bytnode.com/mcp", "headers": { "X-API-KEY": "YOUR_API_KEY" } } } }If your client can only send a bearer token, BytNode reads the key from it:
Authorization: Bearer YOUR_API_KEYIf your client supports OAuth, paste the URL alone and sign in to BytNode: the server announces its authorization server itself.
https://api.bytnode.com/mcp
One command in your terminal, or a configuration file.
claude mcp add --transport http --scope user bytnode https://api.bytnode.com/mcp --header "X-API-KEY: YOUR_API_KEY"claude mcp add --transport http --scope user bytnode https://api.bytnode.com/mcpclaude mcp list{
"mcpServers": {
"bytnode": {
"type": "http",
"url": "https://api.bytnode.com/mcp",
"headers": { "X-API-KEY": "${BYTNODE_API_KEY}" }
}
}
}
Coding agents add BytNode in one command. The configuration file does the same by hand, pasted as is.
Your coding agentOne command adds BytNode to every project. Without a key, type /mcp in Claude Code to sign in.
Without a key, an OAuth sign-in.
ChatGPT, claude.ai and Claude Desktop connect with the address alone. You sign in to BytNode: no key ever leaves your account.
Your AI appIn the apps settings, turn on developer mode, add an MCP server with this address and choose OAuth.
https://api.bytnode.com/mcphttps://api.bytnode.com/mcpAddIn your agent’s code, a few lines are enough.
import asyncio, os
from langchain.agents import create_agent
from langchain_mcp_adapters.client import MultiServerMCPClient
async def main():
client = MultiServerMCPClient({
"bytnode": {
"transport": "streamable_http",
"url": "https://api.bytnode.com/mcp",
"headers": {"X-API-KEY": os.environ["BYTNODE_API_KEY"]},
}
})
tools = await client.get_tools()
agent = create_agent("anthropic:claude-opus-5-5", tools)
result = await agent.ainvoke(
{"messages": [{"role": "user", "content": "Top 5 pairs by open interest?"}]}
)
print(result["messages"][-1].content)
asyncio.run(main())
pip install langchain langchain-anthropic langchain-mcp-adaptersexport BYTNODE_API_KEY=YOUR_API_KEYAgent frameworks and LLM APIs load the eleven tools from the address. The key stays in BYTNODE_API_KEY, never in the code.
Your framework or APIMultiServerMCPClient loads the eleven tools and hands them to any LangChain agent.
Eleven tools, inspect them before your agent does.
What your AI agent gets from tools/list. All read-only and idempotent: one target per tool, the same parameters everywhere, simple tool calling for the LLM.
Pair brief
read-onlyThe state of a pair in one call, always the same shape: price and changes, next funding, basis, open interest, CVD and the last 24 hours of liquidations. Each value comes with its context: where it sits in its own recent history.
Example callget_pair_brief(symbol="BTCUSDT")Every parameter, field and response of the eleven tools, with a complete Python client. MCP reference
Pair data
read-onlyCandles, trades, order book, order flow, open interest, funding, basis and liquidations for one pair or up to ten, now or over a dated window.
Example callget_pair_data(symbol="ETHUSDT", fields=["basis", "cvd"], last="12h")Every parameter, field and response of the eleven tools, with a complete Python client. MCP reference
Rank pairs
read-onlyEvery served pair ranked on one metric, such as open interest, volume or funding, for a single quota request.
Example callrank_pairs(metric="oi_usd", limit=5)Every parameter, field and response of the eleven tools, with a complete Python client. MCP reference
Technical indicators
read-onlyNineteen indicators computed on demand, from RSI and MACD to ADX, for one to ten pairs: the LLM never does the math.
Example callget_market_indicators(symbol="BTCUSDT", timeframe="1h", indicators=[{"id": "rsi_14", "type": "rsi", "period": 14}])Every parameter, field and response of the eleven tools, with a complete Python client. MCP reference
Options and spot ETFs
read-onlyOpen interest, put/call, implied volatility, max pain, greeks and OI by strike per expiry, plus the SEC filings of spot ETFs.
Example callget_options_data(asset="BTC", fields=["options_summary"], expiries=True)Every parameter, field and response of the eleven tools, with a complete Python client. MCP reference
Whole market
read-onlyTotal market cap and volume, BTC and ETH dominance, two Fear & Greed indices, altcoin season and the CMC20 and CMC100 indices.
Example callget_market_overview(fields=["fear_greed", "global_market"])Every parameter, field and response of the eleven tools, with a complete Python client. MCP reference
On-chain
read-onlyBitcoin and Ethereum on-chain: mempool, fees, mining, MVRV, NVT, active addresses, gas, staking, supply and DeFi.
Example callget_onchain_data(fields=["btc_mvrv", "eth_staking"])Every parameter, field and response of the eleven tools, with a complete Python client. MCP reference
Macro
read-onlyUS and global macro from FRED series, intraday instruments, net liquidity, crypto-macro correlations and a risk score.
Example callget_macro_data(series="DGS10", fields=["macro"])Every parameter, field and response of the eleven tools, with a complete Python client. MCP reference
Field definitions
read-onlyWhat a field returns, the unit of every column and the thresholds of every label, so the AI agent reads numbers right. Free.
Example calldescribe_fields(fields=["fear_greed_cmc"])Every parameter, field and response of the eleven tools, with a complete Python client. MCP reference
Plan and service
read-onlyYour plan, its history depth and remaining quota, the served pairs, data freshness and the catalogues. Free.
Example callget_system_info(include=["symbols", "freshness"])Every parameter, field and response of the eleven tools, with a complete Python client. MCP reference
Read the rest
read-onlyA long answer is cut to fit the LLM’s context: read_export pages through the full data for an hour, with no quota used.
Example callread_export(export_id="…", key="cvd@15m", offset=200)Every parameter, field and response of the eleven tools, with a complete Python client. MCP reference
What your AI agent needs to know.
- Connect
- One address, Streamable HTTP. The key goes in
X-API-KEY, or afterAuthorization: Bearerfor clients that only send a token. Apps that can’t send a header sign in with OAuth: the access token lasts an hour and renews itself. - Units and time
_pctis a percent (58.5 means 58.5 %),_ratioa fraction (0.585). Times are ISO 8601 in UTC; a row is dated at the start of its bucket, newest first.describe_fieldsgives every unit, for free.- Now or history
- Without a window, a tool returns the current value.
last(for example48h), orsince_msanduntil_ms, returns the history, closed buckets only.contextplaces each latest value in its own recent history (percentile, z-score): always inget_pair_brief, on request elsewhere. - Plans and limits
- Every plan connects and reads its own data:
get_system_infotells your AI agent which. Outside the plan, a tool answers 403 withplan_familyorhistory_depth.dry_run=truegives the cost of a call and your remaining quota without making it;max_quota_costrefuses any call above a budget. - Response size
- About 6,000 tokens per response by default, up to 16,000 with
max_tokens. A longer series keeps its newest rows;read_exportpages through the rest for an hour, with no quota used. - Errors
- A failed call returns
isErrorwith a code, a message and often ahint;wrong_toolnames the right tool. On a 429, waitretry_after_sseconds, then call again.
Then let your AI agent ask.
A free key connects every client on this page, with no card. Add the skills, and your AI agent also knows which tool to call and how to read the answer.