Skip to content

HTTP / JSON-RPC

The Estaite server speaks Streamable HTTP MCP (2025-03-26) — the JSON-RPC 2.0 envelope that every MCP client uses under the hood. You can call it directly from any HTTP client (curl, fetch, requests, Postman) without an MCP SDK.

Endpoint

URLhttps://mcp.estaite.com
MethodPOST
Content-Typeapplication/json
Acceptapplication/json, text/event-stream
Authx-api-key header (preferred). See Authentication.

Initialize the session

Every MCP session begins with an initialize call:

Terminal window
curl -sS -X POST https://mcp.estaite.com \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-03-26",
"capabilities": {},
"clientInfo": { "name": "curl", "version": "0.0.1" }
}
}'

The response includes a mcp-session-id header. Echo it on every subsequent request as mcp-session-id: <value>.

List tools

Terminal window
curl -sS -X POST https://mcp.estaite.com \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "x-api-key: YOUR_API_KEY" \
-H "mcp-session-id: $SESSION" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list"
}'

You’ll get back the 13 tools with their JSON schemas. See Common patterns for shared input conventions.

Call a tool

Terminal window
curl -sS -X POST https://mcp.estaite.com \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "x-api-key: YOUR_API_KEY" \
-H "mcp-session-id: $SESSION" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "search_estaite_submarkets",
"arguments": { "query": "Carmel Valley" }
}
}'

The result lives at result.content[0].text and is itself a JSON string — parse it to get the structured payload documented under API Reference.

Quick fetch example

async function callEstaite(name, args) {
const res = await fetch('https://mcp.estaite.com', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json, text/event-stream',
'x-api-key': process.env.ESTAITE_API_KEY,
},
body: JSON.stringify({
jsonrpc: '2.0',
id: Date.now(),
method: 'tools/call',
params: { name, arguments: args },
}),
});
const env = await res.json();
if (env.error) throw new Error(env.error.message);
return JSON.parse(env.result.content[0].text);
}
const matches = await callEstaite('search_estaite_submarkets', {
query: 'Carmel Valley',
});

When to skip MCP entirely

If you don’t care about the MCP handshake and just want REST-style data, contact support@estaite.com about the upcoming direct REST endpoints. The MCP server itself is the canonical interface for all 13 tools today.