Hosted MCP server
const url = 'https://api.getchord.xyz/v1/mcp?chain=monad';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"chord_search","arguments":{"query":"EURC"}}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url 'https://api.getchord.xyz/v1/mcp?chain=monad' \ --header 'Content-Type: application/json' \ --data '{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "chord_search", "arguments": { "query": "EURC" } } }'Model Context Protocol over stateless Streamable HTTP: POST one JSON-RPC message (or a batch of up to 20), get JSON back. Methods: initialize, ping, tools/list, tools/call. 17 tools; every data tool takes a chain. ?chain=<key> pins a default chain and names the server chord-<key>. The handshake and the tool list need no credentials and are not metered; a tool call is an ordinary request to this API made as the caller, so it is limited and metered exactly like the REST call it wraps. Send a key as X-API-Key, Authorization: Bearer, or ?apiKey=. A tool-level failure is a normal result with isError: true and a sentence the model can act on. Guide: https://getchord.xyz/docs/agents/mcp/
Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters”Default chain for this endpoint.
Your key, for connectors that cannot set a header.
Request Bodyrequired
Section titled “Request Bodyrequired”A JSON-RPC 2.0 message, or an array of them.
object
Example
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "chord_search", "arguments": { "query": "EURC" } }}Responses
Section titled “ Responses ”The JSON-RPC response. A tool result carries one text block: {chain, route, data} as JSON.
JSON-RPC 2.0 response.
object
Example
{ "jsonrpc": "2.0", "id": 1, "result": { "content": [ { "type": "text", "text": "{\"chain\":\"arc\",\"route\":\"GET /v1/tokens/search\",\"data\":{\"chain\":5042,\"q\":\"EURC\",\"tokens\":[{\"address\":\"0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1\",\"symbol\":\"EURC\",\"name\":\"Euro Coin\",\"decimals\":6,\"logoURI\":\"https://assets.coingecko.com/coins/images/26045/small/euro.png\",\"verified\":true}]}}" } ] }}A notification: nothing to answer.
Invalid parameters — error names the check that failed (INVALID_PARAMS, BAD_ADDRESS, BAD_LIMIT, BAD_HOURS, …).
Every non-2xx body.
object
Stable machine code, e.g. INVALID_PARAMS, NOT_READY, RATE_LIMIT_EXCEEDED.
For humans.
HTTP status, when included.
Example
{ "error": "INVALID_PARAMS", "message": "amount must be an integer string in the token's smallest unit"}