Discovery surfaces
Endpoints that describe oculr itself. Call them once at startup to learn the rest of the API. All return
200and are free - no payment required.
| Endpoint | Returns | When to use |
|---|---|---|
GET /openapi.json | OpenAPI 3.1 spec - full REST schema | Generic OpenAPI tooling, code generators |
GET /tool-spec.json | Anthropic + OpenAI tool-call schemas | Sub-agents using LLM tool-use APIs |
GET /SKILL.md | Prose entry point for autonomous agents | Skill-mode integrations |
GET /llms.txt | Discovery index, one line per doc | LLM crawlers / first fetch |
GET /llms-full.txt | Concatenated full doc corpus | LLM 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 -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
| Tool | Wraps | Blocking? |
|---|---|---|
explain_transaction | POST /explain | Yes |
start_explain_job | POST /explain/async | No |
get_job_result | GET /result/:jobId | No |
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.txtGET /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.txtRelated
- Endpoints overview
- Use as an agent -
SKILL.mdvstool-spec.jsondecision guidance