1. Overview
| Item | Details |
|---|---|
| MCP URL | https://api.webotexchange.com/mcp/public |
| Transport | Streamable HTTP (stateless, no Mcp-Session-Id) |
| Authentication | None — choose "no authentication" |
| Permissions | Read-only. No trading, funds or account data |
| Data scope | Webot EU spot market data, identical to the Webot EU app |
| Rate limit | 10 requests/second per IP; excess requests get HTTP 429 |
Note: the EU exchange is quoted mainly in USDC. Symbols look like
BTC_USDC; there is noBTC_USDT. Use BTC/USDC, ETH/USDC, etc. in prompts and examples. There are currently 14 pairs, all quoted in USDC: AAVE, ADA, BTC, DOGE, ETH, EUR, KAS, LINK, PEPE, SHIB, SOL, SUI, UNI, XRP.webot_get_symbolsis authoritative.
2. Connecting
2.1 ChatGPT
- Open ChatGPT Plugins, click + and choose Add custom MCP server.
- Fill in:
- Name:
Webot Market Data - Description:
Read-only public market data of the Webot EU spot exchange: trading pairs, trades, order book, 24h tickers, klines and supported currencies. - MCP server URL:
https://api.webotexchange.com/mcp/public
- Name:
- Choose no authentication. Read the risk notice, click I understand and want to continue, then Create as a plugin.
- In a chat, type
@, pick Webot Market Data, and start asking questions.
Your account or workspace policy may block custom MCP servers; if you can't see the option, ask your workspace admin.
2.2 Claude
- Claude Code:
claude mcp add --transport http webot-eu https://api.webotexchange.com/mcp/public - Claude web / desktop: go to Settings → Connectors → Add custom connector. Name:
Webot EU; URL:https://api.webotexchange.com/mcp/public; no authentication. Menu names may differ slightly by Claude version and plan.
2.3 Other clients (Cursor, etc.)
Add to mcp.json:
{ "mcpServers": { "webot-eu": { "url": "https://api.webotexchange.com/mcp/public" } } }2.4 OpenAI Responses API
from openai import OpenAI
client = OpenAI()
resp = client.responses.create(
model="<your-model>",
tools=[{
"type": "mcp",
"server_label": "webot_eu",
"server_description": "Read-only public market data of the Webot EU spot exchange.",
"server_url": "https://api.webotexchange.com/mcp/public",
"require_approval": "never", # all tools are read-only
}],
input="What's the current price of BTC/USDC?",
)
print(resp.output_text)2.5 Connectivity check
npx -y @modelcontextprotocol/inspector --cli https://api.webotexchange.com/mcp/public \
--transport http --method tools/listIf it lists 6 tools prefixed with webot_, the connection works.
3. Tools
| Tool | Purpose | Parameters |
|---|---|---|
webot_get_symbols | Trading pairs and rules (precision, minimum order size, etc.) | symbols?: array, up to 50 |
webot_get_tickers | 24h ticker (open, close, high, low, volume, amount, trade count) | symbol?: omit for all pairs |
webot_get_klines | Candlesticks | symbol; interval; endTime?; limit? (1–500, default 100) |
webot_get_depth | Order book (bids/asks) | symbol; limit? (levels per side, 1–1000, default 20) |
webot_get_trades | Recent trades | symbol; limit? (10–500, default 100) |
webot_get_currencies | Currencies, per-chain deposit/withdrawal status, limits and fees | currency?: omit for all |
Notes:
- Symbol format:
BTC_USDC. Variants likebtc/usdcorBTC-USDCare auto-corrected. - Kline
interval:1M5M15M30M60M4H8H12H1D.Mmeans minutes —1Mis one minute, not one month. - Kline paging: results are newest-first. To get older candles, set
endTimeto the oldest returned candle'stimeminus 1 (Unix ms). - Compact bulk queries: without
symbols/currency, only names and tradable/deposit/withdrawal flags are returned; pass a specific value to get full rules. - Prices and quantities are decimal strings; timestamps are Unix milliseconds (UTC).
- Freshness: market data is real-time with a 1–2 s server-side cache. Pair and currency metadata is cached for about 60 s, so listing or deposit/withdrawal switch changes can take up to ~60 s to show.
3.1 Tool safety classification
All 6 tools are read-only, non-sensitive and side-effect free. They only return public market data of the Webot EU exchange — the same data anyone can see in the Webot EU app without logging in. No tool accepts credentials, reads accounts/orders/balances, handles personal data, or changes any state.
| Tool | Read-only | Sensitive data | Side effects | What it returns |
|---|---|---|---|---|
webot_get_symbols | ✅ Yes | ❌ No | ❌ None | Public trading-pair list and trading rules (precision, minimum order size) |
webot_get_tickers | ✅ Yes | ❌ No | ❌ None | Public 24h ticker statistics |
webot_get_klines | ✅ Yes | ❌ No | ❌ None | Public historical candlesticks |
webot_get_depth | ✅ Yes | ❌ No | ❌ None | Public order book (aggregated bids/asks, no user identity) |
webot_get_trades | ✅ Yes | ❌ No | ❌ None | Public recent trades (price, size, time; no user identity) |
webot_get_currencies | ✅ Yes | ❌ No | ❌ None | Public currency list, per-chain deposit/withdrawal status, limits and fees |
Definitions:
- Read-only: the tool only queries data; it never creates, modifies or deletes anything.
- Not sensitive: no authentication, API key or login; no personal, account, order or balance data is requested or returned.
- No side effects: calling a tool any number of times does not change server or user state, place orders or move funds. The only effect of heavy use is per-IP rate limiting (see §5).
MCP tool annotations declared by the server (as returned by tools/list): readOnlyHint: true, destructiveHint: false, openWorldHint: false on all 6 tools.
4. Example prompts
- What's the current price of BTC/USDC?
- Show me the 24-hour price change, high, low and volume for ETH/USDC.
- Compare the prices and 24-hour changes of BTC, ETH and SOL.
- How has the BTC price moved over the past 30 days?
- What's the order book depth (top bids/asks) for BTC/USDC?
The BTC, ETH and SOL USDC pairs used above have been verified.
5. Errors and rate limits
- Business errors are returned as tool results with
isErrorand an error code, e.g.MARKET_INVALID_SYMBOL(unknown pair — callwebot_get_symbolsfirst) orMARKET_PARAMETER_ERROR(bad parameter). service is busy, please retry in a few seconds: the service is busy or rate-limited; retry shortly.temporarily unavailable: transient service issue; retry shortly.- HTTP 429: more than 10 requests/second from one IP. Rate limiting is enforced by Cloudflare; once triggered, the IP is blocked for a while (observed
Retry-After≈ 15 minutes) and every request returns 429 until then. Please honorRetry-After. Platforms such as ChatGPT call from shared server IPs, so many users may share one quota and hit the limit at peak times. - Headers: when calling over raw HTTP,
Acceptmust contain bothapplication/jsonandtext/event-stream, otherwise you get 400. MCP clients handle this automatically. - Request limits: body up to 64 KiB; JSON-RPC batch requests are not supported; cross-site browser requests are rejected.
6. FAQ
Do I need an API key? No. All tools are public and read-only.
Can it place orders or read my account? No. This version provides market data only.
I changed nothing but ChatGPT shows old tools? Open the connection in Plugins, click Refresh, and start a new chat.
7. Disclaimer
Data is provided for information only and is not investment advice. AI-generated answers may contain errors; verify important figures through official Webot channels before making decisions.





