Skip to main content
Caesar serves a remote MCP server at https://search-api-staging-779189860552.europe-west1.run.app/mcp — the same host as the REST API. It is remote-only today; a local stdio shim is planned. Connect from Claude Code in one line:
claude mcp add --transport http caesar https://search-api-staging-779189860552.europe-west1.run.app/mcp
No key needed. Anonymous access is live. To attach a partner key, add the header:
claude mcp add --transport http caesar https://search-api-staging-779189860552.europe-west1.run.app/mcp \
  --header "Authorization: Bearer $CAESAR_API_KEY"
This is the product MCP server: it searches the web. The docs site will also serve its own docs-search MCP for querying these pages — they are different servers with different tools.

Use this when

  • You are in a chat or IDE client that supports remote MCP tools.
  • You want search and read without installing the CLI locally.
  • You want anonymous access first and a partner key only for higher throughput.
  • You want the agent to preserve doc_id, search_id, and capture_id across tool calls.

Connection states

StateWhat you seeNext action
Not connectedNo caesar server in the client configCopy the client-specific config below.
ConnectingConfig exists, but tools are not listedRestart or reload MCP servers in the client.
ConnectedTool list includes caesar_search and caesar_readRun a one-result search and read the best doc_id.
FailedHTTP 401, HTTP 429, or transport errorUse the matching recovery block in Install for agents or rate limits.

Server facts

FactValue
Endpointhttps://search-api-staging-779189860552.europe-west1.run.app/mcp
TransportMCP streamable HTTP, stateless, plain JSON responses (no SSE required)
Server identityname caesar, title Caesar Search, version 0.1.0
Toolsexactly 2: caesar_search, caesar_read (feedback is REST/CLI/SDK-only)
Protocol versions2025-11-25 (latest), 2025-06-18, 2025-03-26, 2024-11-05
The server returns an mcp-session-id header, but because it is stateless, follow-up JSON-RPC requests work without it. If a client requests an unsupported protocol version, the server answers with its latest (2025-11-25).

Connect from other clients

claude mcp add --transport http caesar https://search-api-staging-779189860552.europe-west1.run.app/mcp \
  --header "Authorization: Bearer $CAESAR_API_KEY"
The canonical per-client install matrix lives at Install for agents. Omit the headers block for anonymous access.

Authentication and rate limits

/mcp sits behind the same auth and rate-limit middleware as the REST endpoints:
  • Anonymous works on staging (30 requests/second per client IP).
  • Bearer keys are optional and partner-restricted but always validated when present: a bad key returns HTTP 401 (invalid_api_key) rather than falling back to anonymous. Keyed connections get the api_key tier (default 100 RPS).
  • Scopes are not enforced on /mcp — any active key works.
  • Every JSON-RPC message counts as one rate-limited request. Over the limit, the server returns HTTP 429 (rate_limited). Auth and rate-limit failures are HTTP errors, not MCP tool errors.
Search the web and get ranked results with snippets, passages, and provenance. Each result carries a doc_id you can pass to caesar_read.
ParamTypeRequiredDefaultNotes
querystringyesPut constraints (site, filetype, exact phrases, recency) directly in the query text.
objectivestringnoBroader task objective; helps retrieval and passage selection.
max_resultsintegerno81–50. Values above 50 are clamped to 50; zero or negative values fall back to the default 8. Never errored.
modestringnostandardfast, standard, or research. Anything else is a tool error.
response_formatstringnocompactcompact (title, url, snippet, dates), standard (adds passages, max 2 per result), full (adds capture provenance).
The MCP default is compact — note this differs from the REST default of standard. ids_only is not available over MCP; it (and any unknown value) silently falls back to compact. See response shaping for the shared preset table. The result is a single text content block containing JSON: search_id, results[] with rank, title, url, doc_id, snippet, score, published_at, last_crawled_at (plus passages — max 2 — source_url when it differs from url, and top-level ranker_version/score_scope at standard+, and capture_id/capture_time at full), optional warnings, truncated, and hint. Responses are capped at 20,000 characters. On overflow the server sets truncated: true, sheds all passages first, then drops trailing results (never below 1), and adds the hint:
Truncated to fit the response cap. Narrow the query, lower max_results, or read one document with caesar_read (start_char to continue).

Tool: caesar_read

Read a web page as clean markdown with document metadata and provenance. Accepts a url or a doc_id returned by caesar_search — providing neither is a tool error (validation_error: provide either url or doc_id).
ParamTypeRequiredDefaultNotes
urlstringone of url/doc_idURL of the page to read.
doc_idstringone of url/doc_idCaesar doc_id from a previous caesar_search result.
querystringnoFocuses content selection on the most relevant sections.
max_charsintegerno12000Max 50,000. Values above the max are clamped; zero or negative values fall back to the default 12,000.
start_charintegerno0Resume a truncated read from this character offset.
The result JSON contains doc_id, url, title, published_at, capture_time, start_char (omitted when 0), char_count, truncated, hint, and content (always markdown). When content is truncated, the hint tells you the exact next offset: Content truncated. Continue reading with start_char=12000. Pass that value back as start_char to get the next window. Continuation reads force full-document selection (a query alongside start_char does not excerpt), so offsets stay contiguous across calls.

Scoping the tool set

Append ?tools= to the endpoint URL to limit which tools are advertised and callable — comma-separated, empty means all:
https://search-api-staging-779189860552.europe-west1.run.app/mcp?tools=caesar_search

Tool errors

Tool failures come back as MCP results with isError: true and a single text block formatted as code: message, where the code matches the REST error codes (validation_error, unsupported_mode, document_not_found, provider_unavailable, internal_error).

For agents

  • The compact default exists to protect your context window. Stay on it for find-then-read loops; request standard only when you need quotable passages, full only when you need capture provenance.
  • Thread handles: take doc_id from a caesar_search result and pass it to caesar_read. Preserve doc_id, search_id, and capture_id values verbatim — they are opaque identifiers, never reconstruct or abbreviate them.
  • On a truncated read, continue with the start_char value from the hint instead of retrying with a bigger max_chars.
  • Out-of-range max_results and max_chars are silently coerced over MCP (high values clamped to the max, non-positive values reset to the defaults) — do not expect REST-style 400s.
  • Each JSON-RPC message spends one rate-limit token, so batch judgment matters: prefer one well-constrained search over several broad ones.