Skip to content
Euler Docs

MCP server quickstart

Connect a customer-side agent to Euler when you want search, saved slices, receipt verification, and feedback import inside Claude Code, Cursor, or another MCP-compatible tool. The shipped server is an in-process dispatcher today; run it inside your agent workspace next to the Euler Python package. Do not configure a hosted MCP URL until your tenant has one.

Environment

Use the hosted API for project, source, run, episode, and export routes. The MCP server uses local package primitives for search and slice operations, so it does not spend on paid APIs.

export EULER_BASE_URL="https://api.euler.sudotank.com"
export EULER_API_TOKEN="<tenant-api-token>"
export EULER_PROJECT_ID="warehouse-arm"
uv add euler
uv run python - <<'PY'
from euler.integrations import EulerMcpServer
 
server = EulerMcpServer([])
print([tool.name for tool in server.list_tools()])
PY

Claude Code

Add a local stdio wrapper that imports your tenant episodes, then exposes the Euler tools through your MCP client.

{
  "mcpServers": {
    "euler": {
      "command": "uv",
      "args": ["run", "python", "tools/euler_mcp_server.py"],
      "env": {
        "EULER_BASE_URL": "https://api.euler.sudotank.com",
        "EULER_API_TOKEN": "${EULER_API_TOKEN}",
        "EULER_PROJECT_ID": "warehouse-arm"
      }
    }
  }
}

Cursor

Use the same local wrapper in .cursor/mcp.json.

{
  "mcpServers": {
    "euler": {
      "command": "uv",
      "args": ["run", "python", "tools/euler_mcp_server.py"]
    }
  }
}

Tools

euler.search_episodes searches the local episode index with structured filters and vector-ready text.

{
  "tool": "euler.search_episodes",
  "arguments": {
    "text": "failed grasp recovery with object slip",
    "task": "pick-place",
    "outcome": "failure",
    "min_readiness_score": 0.55,
    "limit": 10
  }
}

euler.create_slice saves the selected result membership as a deterministic slice definition.

{
  "tool": "euler.create_slice",
  "arguments": {
    "slice_id": "failed-grasp-recovery",
    "created_by": "ml-lead@acme.example"
  }
}

euler.export_slice creates an export plan. Private exports or large exports return a human approval required payload instead of mutating data. Route that checkpoint through Euler approval checkpoints before any destructive or high-impact action.

{
  "tool": "euler.export_slice",
  "arguments": {
    "slice_id": "failed-grasp-recovery",
    "format": "rerun_rrd",
    "visibility": "private"
  }
}

euler.verify_receipt recomputes a readiness receipt hash before downstream systems trust an exported episode.

{
  "tool": "euler.verify_receipt",
  "arguments": {
    "receipt": {
      "content_hash": "<receipt-hash>"
    }
  }
}

euler.import_feedback imports human labels or customer review outcomes without rewriting source episodes.

{
  "tool": "euler.import_feedback",
  "arguments": {
    "records": [
      {
        "episode_id": "episode_000042",
        "label": "failure",
        "reviewer": "ml-lead@acme.example"
      }
    ]
  }
}

Guardrails

Agents can search episodes, create saved slices, verify receipts, and import feedback. Agents cannot silently perform destructive exports, make private data public, bypass approval checkpoints, or mutate canonical episode data. Approval required responses are the handoff point: show the payload to a human, approve through the Euler checkpoint route, then rerun the export request with the approved checkpoint evidence.