You are exploring as a guest. Schemas save in this browser. Sign up free for API keys and to parse your own documents.
Create a free accountMCP 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.
{
"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.
whoamiReturn the workspace and token for the bearer credential, and the credits left this month.
Arguments: none
parse_documentExtract 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,textlist_schemasList the extraction schemas saved in this workspace.
Arguments: none
get_schemaRead one saved extraction schema by name.
Arguments:
name(required)create_schemaSave 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_schemaRename 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
{
"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.