Odel
ParseRelay

ParseRelay

Local
@parserelayTypeScriptMITUpdated 2mo ago

Parse a document into structured, confidence-scored fields. Bring your own model, pay per scan.

@parserelay/mcp

ParseRelay's scan operation as an MCP tool — so any MCP host (Claude Desktop, Cursor, …) can parse a document into structured, confidence-scored fields. Same contract as the REST API and the <DeadSimpleMicroScanner> component; one tool, scan.

The scan tool

Input mirrors the sync ScanRequestimage (required), plus schema, doc_type, engine, ocr, dry_run, model, model_key. (relay webhooks are omitted: a tool call is synchronous, so you get the envelope back inline.) The result is the full ScanEnvelope as JSON: fields, per-field confidence, needs_review, field_source, and meta (engine, credits, tokens).

Set dry_run: true to preview which fields would trigger a paid rescue — and the estimated credits — without spending anything.

Run it

stdio (Claude Desktop, Cursor)

{
  "mcpServers": {
    "parserelay": {
      "command": "npx",
      "args": ["-y", "@parserelay/mcp"],
      "env": {
        "PARSERELAY_API_KEY": "your-key",
        "PARSERELAY_BASE_URL": "https://api.parserelay.app" // optional
      }
    }
  }
}

streamable-HTTP (remote / hosted)

PARSERELAY_API_KEY=your-key PORT=8080 node node_modules/@parserelay/mcp/dist/http.js
# → POST http://localhost:8080/mcp

Stateless: a fresh server per request, so it scales horizontally. Auth per request via Authorization: Bearer <key>, falling back to PARSERELAY_API_KEY for single-tenant setups.

Programmatic

import { createMcpServer } from "@parserelay/mcp";
import { ParseRelayClient } from "@parserelay/client";

const server = createMcpServer(new ParseRelayClient({ apiKey }));
// then wire your own transport: await server.connect(transport)

Config

Env varRequiredDefaultNotes
PARSERELAY_API_KEYstdio: yesHTTP can override per request via Authorization: Bearer.
PARSERELAY_BASE_URLnohttps://api.parserelay.appPoint at a local worker for testing.
PORTno8080HTTP transport only.