Model Context Protocol

Three tools, two ways to connect

Two ways to connect. Over HTTP you need nothing but a URL and a key — no file, no Python, no install. The stdio server remains for clients that want to run it locally.

Remote — one command

The instance speaks MCP over HTTP directly. Point a client at it:

claude mcp add --transport http oort \
  https://oort.is-a-good.dev/v1/mcp \
  --header "Authorization: Bearer YOUR_KEY"

That is the whole setup. The same API key works here, over curl, and in the playground — one credential, one rate limit, one audit trail.

Local — stdio

If you would rather run it yourself, the stdio server is one file that imports nothing outside the standard library — it runs under whatever python3 is on your PATH.

curl -o ~/oort_mcp.py https://oort.is-a-good.dev/assets/oort_mcp.py

Then point your client at that file — the stdio tab above generates the command.

Tools

ToolArgumentsReturns
oort_search query, max_results, max_tokens, depth, include_domains, exclude_domains, freshness_days Ranked passages with offsets and headings
oort_extract urls, max_tokens, extract_fields, screenshot Clean markdown per URL, plus structured fields
oort_map url, limit, search, include_subdomains Site URLs, from sitemap or the local index

Environment

VariableDefaultNotes
OORT_MCP_BASE_URLhttp://127.0.0.1:8080Must be http or https; anything else is refused at import
OORT_MCP_API_KEYRequired. Keep it in your client config, not in the file
OORT_MCP_TIMEOUT_S60Browser rendering and PDFs are legitimately slow

Design notes

Failures are results

A tool that cannot reach the API returns isError with the reason, not a protocol error — so the model can read what went wrong and adapt instead of stalling.

Scheme is validated

urlopen honours file://. The base URL is checked at import, because a config typo should not become a local file read.

Untrusted content stays fenced

Passages reach the model inside the same delimiters the API returns. The MCP layer does not unwrap them.

No SDK

JSON-RPC over stdio is about 80 lines. Vendoring an SDK to save them would add a dependency that outlives its usefulness.

Verify the connection with claude mcp list — Oort should report three tools. If it reports none, check that OORT_MCP_API_KEY is exported in the shell that launched your client.