SaneLog

Coding agents · MCP server · read API

Your coding agent reads the evidence. You keep the fix.

Logs are the record of what your code does in production. An agent that can read them stops guessing. SaneLog gives Claude Code, Cursor, Codex and any other MCP client the same view of your logs, alerts and incidents that you have on screen, read-only, in one step. The agent works in your code base, where the fix lives, and SaneLog gets out of the way.

1

Give the agent one address

The MCP server is at https://app.sanelog.com/mcp. There is no token to create or paste.

2

Approve once in the browser

The agent opens an approval page. You approve it, and from then on it reads as you, within your account's retention. Remove it any time from your settings.

3

Ask it what happened

The server tells the agent how to investigate: what to look at first, how to narrow down and when to widen. A question runs a whole investigation.

Monday morning, in Claude Code

An example of the shape of it. An alert fired overnight, and the alert email names the incident. In the project, with the server connected:

claude · payments-api

› What triggered the alerts overnight, and what was happening around each one?

One alert fired, at 02:14 UTC: payments-prod · errors ≥ 5 in 5 min. It resolved at 02:31.

In the window, 47 events matched. 44 are one pattern on worker-2: charge failed card_declined, all for the same gateway retry path. The first three are at 02:13:58, 02:14:02 and 02:14:04.

Around the first one, across all sources: worker-2 logged gateway retry 1/3 latency=2.1s twelve seconds earlier, and web-1 returned 402 on POST /checkout/confirm for the same request ids. Nothing on db-1. The latency line stops at 02:30, which matches the resolve time.

This looks like the gateway slowing down, not a change in our code. The retry path in app/Payments/GatewayClient.php treats a timeout as a decline. Want me to show the 44 lines, or open the retry code?

› Open the retry code and propose a fix.

The agent reads events, context, histograms, facets, alerts and incidents through tools that mirror the read API. It cannot change filters, alerts, sources or tokens: a person does that in SaneLog. Illustrative output; every agent phrases things its own way.

Prompts to try

Setup by client

Every client ends at the same approval page, so the entries differ only in how the address is handed over. The same snippets, with a copy button and your account's own prompts, are on the Agents page inside SaneLog.

Claude Code

In a terminal, in the project the agent works on:

claude mcp add --transport http sanelog https://app.sanelog.com/mcp

Then /mcp inside Claude Code opens the approval page in the browser. Approving connects the agent, and its tools appear on the next prompt.

Codex CLI

In a terminal, add the server and then sign in to it:

codex mcp add sanelog --url https://app.sanelog.com/mcp
codex mcp login sanelog

The login command opens the approval page in the browser. Approving connects the agent.

Cursor

In ~/.cursor/mcp.json for every project, or .cursor/mcp.json inside one project:

{
  "mcpServers": {
    "sanelog": {
      "url": "https://app.sanelog.com/mcp"
    }
  }
}

Cursor opens the approval page in the browser when the server is first used. Approving connects the agent.

VS Code

In .vscode/mcp.json inside the project (the top-level key is servers, and the type is named):

{
  "servers": {
    "sanelog": {
      "type": "http",
      "url": "https://app.sanelog.com/mcp"
    }
  }
}

Starting the server from the file opens the approval page in the browser. Approving connects the agent.

Gemini CLI

In a terminal:

gemini mcp add --transport http sanelog https://app.sanelog.com/mcp

Gemini CLI opens the approval page in the browser on its first call. Approving connects the agent.

Windsurf

In ~/.codeium/windsurf/mcp_config.json (the URL key is serverUrl):

{
  "mcpServers": {
    "sanelog": {
      "serverUrl": "https://app.sanelog.com/mcp"
    }
  }
}

Windsurf opens the approval page in the browser when the server is first used. Approving connects the agent.

Claude Desktop and claude.ai

Under Settings > Connectors, choose Add custom connector, name it SaneLog and paste the server URL:

https://app.sanelog.com/mcp

Connecting opens the approval page in the browser. Approving connects the agent, and the connector is available in every chat.

Other clients

Any MCP client that speaks Streamable HTTP with OAuth can connect with the URL alone. Most clients take it as JSON:

{
  "mcpServers": {
    "sanelog": {
      "url": "https://app.sanelog.com/mcp"
    }
  }
}

The client discovers the authorization server from the first response and opens the approval page in the browser. Approving connects the agent.

Copy for agent

Every event in the Log Explorer and every incident page has a Copy for agentbutton. It copies the event or incident with what happened around it, ready to paste into the agent's chat.What the block holds.

From the alert email

An alert email names its incident, so a connected agent can be asked to look into it straight from the inbox, and then look further on its own: more context, other sources, yesterday for comparison.

Scripts and headless agents

Anything that cannot approve a connection in a browser reads through the API with an account token. Plain-text output at about a third of the tokens of JSON, and the same investigation method.API reference.

Why there is no agent inside SaneLog

The agent that knows your code, your recent changes and what each line was meant to do is the one you already run. It goes from "something is wrong" to the cause faster than a person switching between tabs, and it is the one that can write the fix. SaneLog's job is to give it clean, complete, well-described evidence: every log line, alert and incident, on every plan, unmetered. Agents read. Every change is made by a person.

An agent that has never seen SaneLog can start from app.sanelog.com/llms.txt.