Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Discovery surfaces

Endpoints that describe oculr itself. Call them once at startup to learn the rest of the API. All return 200 and are free - no payment required.

EndpointReturnsWhen to use
GET /openapi.jsonOpenAPI 3.1 spec - full REST schemaGeneric OpenAPI tooling, code generators
GET /tool-spec.jsonAnthropic + OpenAI tool-call schemasSub-agents using LLM tool-use APIs
GET /SKILL.mdProse entry point for autonomous agentsSkill-mode integrations
GET /llms.txtDiscovery index, one line per docLLM crawlers / first fetch
GET /llms-full.txtConcatenated full doc corpusLLM crawlers wanting one-shot

Use from an agent

One prompt hands an agent the whole surface - it reads the discovery doc, learns the call shape, and dispatches:

Claude Code
claude -p "Use the oculr MPP at https://mpp.oculr.xyz/SKILL.md to analyse EVM transaction 0xYOUR_TX_HASH on Ethereum - what happened, any risks?"

For a broader working context (the entire docs corpus, not just the task instructions), point the agent at llms-full.txt instead: "Fetch https://mpp.oculr.xyz/llms-full.txt for complete oculr context, then …".


GET /openapi.json

Machine-readable OpenAPI 3.1 definition of every endpoint, schema, and security scheme. Drop into any OpenAPI client generator (openapi-typescript-codegen, openapi-generator, etc.).

curl https://mpp.oculr.xyz/openapi.json | jq '.info'
{
  "title": "oculr",
  "version": "1"
}

GET /tool-spec.json

Typed Anthropic + OpenAI tool-call schemas. Drop the appropriate array straight into your LLM's tool-use call - no markdown parsing.

Shape

{
  "version": 1,
  "baseUrl": "https://mpp.oculr.xyz",
  "auth": "mpp-x402",
  "anthropic": [ /* 3 tools - Anthropic Messages format */ ],
  "openai":    [ /* 3 tools - OpenAI Chat Completions format */ ],
  "endpoints": {
    "explain_transaction": { "method": "POST", "path": "/explain" },
    "start_explain_job":   { "method": "POST", "path": "/explain/async" },
    "get_job_result":      { "method": "GET",  "path": "/result/{jobId}" }
  },
  "skillUrl":   "https://mpp.oculr.xyz/SKILL.md",
  "openapiUrl": "https://mpp.oculr.xyz/openapi.json"
}

Tools exposed

ToolWrapsBlocking?
explain_transactionPOST /explainYes
start_explain_jobPOST /explain/asyncNo
get_job_resultGET /result/:jobIdNo

Use it

const spec = await fetch('https://mpp.oculr.xyz/tool-spec.json').then(r => r.json())
 
const response = await anthropic.messages.create({
  model: 'claude-opus-5',
  tools: spec.anthropic,
  messages: [{ role: 'user', content: 'Analyse tx 0x4e4b8ed4…' }],
})

Full integration walkthrough at Use as an agent → Tool-use mode.


GET /SKILL.md

Prose entry point for autonomous coding agents. The agent fetches it once at startup, learns the call shape, and dispatches with an MPP client.

Use cases:

  • Interactive CLIs (Claude Code, Amp, Codex CLI) where a human asks an agent to look at a transaction.
  • Persistent skill installation - save it into your agent's skills directory (for Claude Code, ~/.claude/skills/oculr/SKILL.md).

See Use as an agent → Skill mode.


GET /llms.txt

Compact discovery index - one line per doc, designed for LLM crawlers and first-fetch context.

curl https://mpp.oculr.xyz/llms.txt

GET /llms-full.txt

Concatenated full doc corpus. Use when an LLM crawler wants the entire documentation surface in one fetch.

curl https://mpp.oculr.xyz/llms-full.txt

Related