https://alpha.api.trycaesar.com/mcp — the same host as the REST API. It is remote-only today. The server is moving to its own canonical origin, https://mcp.trycaesar.com/mcp, with one-click OAuth connect for hosts like Claude and ChatGPT; the alpha path stays up as a transparent proxy, and raw Bearer keys keep working on both hosts. Until the new origin is live in your environment, use the alpha URL shown in the examples.
To make Caesar the agent’s web-search provider, connect the web-search profile. It exposes generic tool names (web_search, web_fetch) that agents naturally choose for web lookup and URL-reading tasks:
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 the agent to preserve
doc_id,search_id, andcapture_idacross tool calls.
Connection states
Server facts
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).
Legacy tools/call requests for caesar_search and caesar_read are still accepted for existing clients, but those names are not advertised by tools/list.
Connect from other clients
Authentication and rate limits
/mcp sits behind the same auth and rate-limit middleware as the REST endpoints, and supports two credential types:
- OAuth (one-click connect). Hosts that implement the MCP authorization spec need no key at all: an unauthenticated request gets HTTP 401 with a
WWW-Authenticatechallenge pointing at the server’s protected resource metadata, the host discovers the authorization server, and the user approves in the browser (authorization code + PKCES256). Access tokens are short-lived and audience-bound to the canonical/mcpresource — tokens minted for any other audience are rejected (invalid_token). - Raw Bearer API key. A
csk_orsk_live_key in theAuthorizationheader skips OAuth entirely — unchanged for CI, Codex-stylebearer_token_env_varconfigs, and every existing integration. A missing credential returns HTTP 401 (missing_api_key), a bad key HTTP 401 (invalid_api_key).
- Authenticated connections default to 100 RPS.
- Scopes are not enforced on
/mcp— any active credential 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. - Your callers’ credentials never reach upstream providers — the server always uses its own provider credentials (no token passthrough).
Tool: web_search
Search the web and get ranked results with snippets, passages, and provenance. Each result carries adoc_id you can pass to web_fetch.
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:
Tool: web_fetch
Read a web page as clean markdown with document metadata and provenance. Accepts aurl or a doc_id returned by web_search — providing neither is a tool error (validation_error: provide either url or doc_id).
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:
?profile=web-search as a named profile for the same two-tool set:
Tool errors
Tool failures come back as MCP results withisError: true and a single text block formatted as code: message, where the code matches the REST error codes (validation_error, document_not_found, provider_unavailable, internal_error).
For agents
- The
compactdefault exists to protect your context window. Stay on it for find-then-read loops; requeststandardonly when you need quotable passages,fullonly when you need capture provenance. - Thread handles: take
doc_idfrom aweb_searchresult and pass it toweb_fetch. Preservedoc_id,search_id, andcapture_idvalues verbatim — they are opaque identifiers, never reconstruct or abbreviate them. - On a truncated read, continue with the
start_charvalue from the hint instead of retrying with a biggermax_chars. - Out-of-range
max_resultsandmax_charsare 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.