Guest

You are exploring as a guest. Schemas save in this browser. Sign up free for API keys and to parse your own documents.

MCP server

Connect Cursor, Claude Code, or any MCP client to doc2json. Parse PDFs and images into JSON that matches your schema, and manage saved schemas, over remote MCP.

Endpoint

The server speaks JSON-RPC 2.0 over Streamable HTTP at POST https://doc2json.manoonlabs.com/mcp. Each response is a single JSON body. Protocol 2025-06-18, server name doc2json. It runs the same operations as the REST API.

Authentication

initialize, ping, tools/list, and notifications answer without a key, so a client can connect and see the tools first. tools/call needs an API key, sent as Authorization: Bearer <key> or x-api-key: <key>. Without a valid key it returns HTTP 401 with a JSON-RPC error that says where to get one.

Get an API key. Sign up, create a key, and copy the secret. It is shown once. Each parsed page costs 1 credit, the same as REST. See the pricing page.

Connect a client

Cursor reads .cursor/mcp.json. Claude Code registers the HTTP server from a terminal. Replace bk_live_... with your key, then call whoami to confirm the workspace.

.cursor/mcp.json
{
  "mcpServers": {
    "doc2json": {
      "url": "https://doc2json.manoonlabs.com/mcp",
      "headers": {
        "Authorization": "Bearer bk_live_..."
      }
    }
  }
}

Tools

This is the list tools/list returns. parse_document takes the file as file_base64 (base64), or plain text as text, and an optional schema, the same names as the REST JSON body. Every tool acts on the workspace that owns the key.

  • whoami

    Return the workspace and token for the bearer credential, and the credits left this month.

    Arguments: none

  • parse_document

    Extract invoice fields from a PDF, PNG, JPEG, or text file sent as base64 in file_base64, or from plain text sent in text (10 MB and 10 pages on Free, 25 MB and 50 pages on paid). 1 credit per page; an image is 1 page; text is 1 credit per 3,000 characters. Nothing is stored. Send exactly one of file_base64 or text. The result has status and values.

    Arguments: schema, file_base64, text

  • list_schemas

    List the extraction schemas saved in this workspace.

    Arguments: none

  • get_schema

    Read one saved extraction schema by name.

    Arguments: name (required)

  • create_schema

    Save a named extraction schema in this workspace. A schema is {"type":"object","properties":{...}}. Each property is {"type":T} where T is one of any, null, boolean, string, number, date, array, object. An optional description, at most 400 characters, tells the model how to read that field. An optional required array lists the keys that must be present. A date is a string yyyy-mm-dd. An array adds "items" (one node). An object adds "properties" and may add "required". At most 4 levels below the root, 100 keys, and 16384 bytes.

    Arguments: name (required), schema (required)

  • update_schema

    Rename a saved schema, replace its definition, or both. A schema is {"type":"object","properties":{...}}. Each property is {"type":T} where T is one of any, null, boolean, string, number, date, array, object. An optional description, at most 400 characters, tells the model how to read that field. An optional required array lists the keys that must be present. A date is a string yyyy-mm-dd. An array adds "items" (one node). An object adds "properties" and may add "required". At most 4 levels below the root, 100 keys, and 16384 bytes.

    Arguments: name (required), newName, schema

Example messages

tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "parse_document",
    "arguments": {
      "file_base64": "<base64 PDF, PNG, or JPEG>",
      "schema": "invoice"
    }
  }
}

Full request and response details are in the API docs.