MCP quick start

The StGB Operome MCP server speaks JSON-RPC 2.0 over Streamable HTTP. Stateless, POST-only. Anonymous tier: 60 requests/min per client. Registered tier: 600/min with a bearer token (request one below).

Endpoint

https://operome.dev/mcp

From any command line

A plain REST convenience layer sits beside the MCP endpoint. Same evaluator, same telemetry, same rate limits. No JSON-RPC, no client library - just GET requests with query parameters. Pass the section as a paragraph number (e.g. 211) or by id (e.g. Murder), and every other query parameter is treated as a variable assignment (Name=true|false|unknown or a numeric value).

bash
curl "https://operome.dev/api/evaluate?section=211&KillsPerson=true"
bash - list all sections
curl "https://operome.dev/api/sections"

Returns {section, rule, result, derivation, facts, missing, escalations} as JSON. For the section list: {sections: [{id, ref, title_en, chapter}, ...]}.

  • rule — the composite's expression string (the top-level boolean rule).
  • derivation — an annotated tree rooted at the composite. Operator nodes carry op, value and satisfying_children; fact leaves carry a state of supplied_true, supplied_false, unknown_needed or unknown_moot.
  • facts — the leaves grouped by relevance: supplied, unknown_needed (only when the result is unknown) and unknown_not_required. Relevance is computed generically by a pivotal test, so a fact never required is never reported as missing.
  • missing — now the pivotal unknowns only (equals facts.unknown_needed), not every unsupplied variable.
  • escalations — each {note, element?}, with element naming the variable it attaches to when it derives from one.

Claude Code

claude config (~/.claude/mcp.json)
{
  "mcpServers": {
    "stgb-operome": {
      "transport": {
        "type": "http",
        "url": "https://operome.dev/mcp"
      }
    }
  }
}

Codex (OpenAI)

codex config
{
  "mcp": {
    "servers": {
      "stgb-operome": {
        "url": "https://operome.dev/mcp",
        "headers": { "Accept": "application/json, text/event-stream" }
      }
    }
  }
}

curl — list tools

bash
curl -X POST 'https://operome.dev/mcp' \
  -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

curl — evaluate a section

bash
curl -X POST 'https://operome.dev/mcp' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tools/call",
    "params": {
      "name": "stgb_evaluate",
      "arguments": {
        "id": "AbuseOfPersonUnderCare",
        "facts": {
          "VictimUnderEighteen": "true",
          "UnderCare": "true",
          "Torments": "true"
        }
      }
    }
  }'

Tools reference

ToolParametersReturns

stgb_list_sections

List sections, optionally filtered by chapter.

chapter? : stringArray<{id, ref, title_en, chapter}>

stgb_get_section

Full record for a section by id.

id : stringFull section record (variables, computables, rules, markup, flags)

stgb_get_schema

Synthesised XSD-style schema for the section.

id : stringXSD string

stgb_evaluate

Evaluate a single section deterministically (Kleene K3).

id : string, facts : {var → "true"|"false"|"unknown"|<number>}{composite, rule, result, derivation (tree), facts{supplied,unknown_needed,unknown_not_required}, missing[], escalations[]}

stgb_master_rule

Evaluate MasterRule (§13). ExceptionActApplies derived from §32 / §34 / §228 vs §35.

factsSame shape as stgb_evaluate

stgb_search

Search in titles, variable surfaces and rule bodies.

query : stringArray<{id, ref, title_en, chapter}>

Request an API key

Single field, no account, no password. We email your key once. Anonymous use does not require this — it only raises your rate limit to 600 requests/min.