Docparser MCP by usefulapi
Run Docparser parsers: import documents by URL or upload, check status, read parsed results.
Should I use this
Quality & Safety
Findings (2)
- LOWin docparser_list_document_results
- LOWin docparser_fetch_document_from_url
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"docparser": {
"url": "https://docparser.usefulapi.io/mcp"
}
}
}Remote endpoints
https://docparser.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (9)
🟢docparser_ping
Check that the connected Docparser API key works. Returns {msg: "pong"} when it does. GET /v1/ping.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢docparser_list_parsers
List all Document Parsers on the account (id and label). Start here: the parser id is needed by every other tool. GET /v1/parsers.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢docparser_list_parser_models(parser_id)
List the model layouts of one parser (id and label). GET /v1/parser/models/{parser_id}.
Input Schema
{
"type": "object",
"properties": {
"parser_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Docparser parser id (from docparser_list_parsers)."
}
},
"required": [
"parser_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢docparser_get_document_status(parser_id, document_id)
Processing status of one document: importing/processing flags, page count, timestamps (uploaded, imported, processed), webhook dispatch and failed jobs. Poll this after a fetch/upload: the document is done when importing_in_progress and processing_in_progress are false, processed_at is set and failed_jobs is empty (a non-empty failed_jobs means it failed); then read the results. GET /v2/document/status/{parser_id}/{document_id}.
Input Schema
{
"type": "object",
"properties": {
"parser_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Docparser parser id (from docparser_list_parsers)."
},
"document_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Docparser document id (the `id` / `document_id` of an uploaded document)."
}
},
"required": [
"parser_id",
"document_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢docparser_get_document_results(parser_id, document_id, format, include_children)
The parsed data of one document (the fields and tables the parser extracted, plus file name, page count and upload/processing times). Docparser allows 60 of these calls per minute. GET /v1/results/{parser_id}/{document_id}.
Input Schema
{
"type": "object",
"properties": {
"parser_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Docparser parser id (from docparser_list_parsers)."
},
"document_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Docparser document id (the `id` / `document_id` of an uploaded document)."
},
"format": {
"description": "`object` (default): nested data. `flat`: simple key/value pairs.",
"type": "string",
"enum": [
"object",
"flat"
]
},
"include_children": {
"description": "Also return data of child documents created during preprocessing (for example split documents).",
"type": "boolean"
}
},
"required": [
"parser_id",
"document_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢docparser_list_document_results(parser_id, list, date, limit, offset, ...)
Parsed data of several documents of one parser: the last uploaded ones (default), or those uploaded/processed after a date. Returns up to 100 documents per call; page with offset (next_offset is null on the last page). Docparser allows 30 of these calls per minute. GET /v1/results/{parser_id}.
Input Schema
{
"type": "object",
"properties": {
"parser_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Docparser parser id (from docparser_list_parsers)."
},
"list": {
"description": "Which documents (default last_uploaded). uploaded_after and processed_after need `date`.",
"type": "string",
"enum": [
"last_uploaded",
"uploaded_after",
"processed_after"
]
},
"date": {
"description": "ISO 8601 date-time (e.g. 2026-10-01T00:00:00Z) or a Unix timestamp. Required with list=uploaded_after or processed_after.",
"type": "string",
"minLength": 8,
"maxLength": 40
},
"limit": {
"description": "Documents per call, 1-100 (default 10).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"offset": {
"description": "Skip this many documents (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"remote_id": {
"description": "Only documents uploaded with this remote_id.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"include_processing_queue": {
"description": "Also include documents that are not fully processed yet.",
"type": "boolean"
},
"sort_by": {
"description": "Sort field (default: upload order).",
"type": "string",
"enum": [
"parsed_at",
"processed_at",
"uploaded_at",
"first_processed_at",
"imported_at",
"integrated_at",
"dispatched_webhook_at",
"preprocessed_at"
]
},
"sort_order": {
"description": "Default DESC.",
"type": "string",
"enum": [
"ASC",
"DESC"
]
},
"format": {
"description": "`object` (default): nested data. `flat`: simple key/value pairs.",
"type": "string",
"enum": [
"object",
"flat"
]
}
},
"required": [
"parser_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡docparser_fetch_document_from_url(parser_id, url, remote_id)
WRITE: ask Docparser to download a document from a publicly reachable URL and parse it with the given parser. Uses page credits of the account's plan (documents queue when credits run out). Docparser may buy extra credits by itself only if the account owner turned on automatic credit replenishment, or the account is on an annual plan that renews early when credits run out - check the Docparser billing settings first. This server never buys credits or changes the plan. Returns the new document_id: poll docparser_get_document_status, then read docparser_get_document_results. POST /v2/document/fetch/{parser_id}.
Input Schema
{
"type": "object",
"properties": {
"parser_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Docparser parser id (from docparser_list_parsers)."
},
"url": {
"type": "string",
"minLength": 8,
"maxLength": 2000,
"description": "Public http(s) URL of the file (PDF, image, Word, Excel, CSV, ...)."
},
"remote_id": {
"description": "Your own reference for the document (stored by Docparser; usable as a filter later).",
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"parser_id",
"url"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡docparser_upload_document(parser_id, file_content, file_name, remote_id)
WRITE: upload one small file as base64 content to a parser and parse it. Uses page credits of the account's plan. Docparser may buy extra credits by itself only if the account owner turned on automatic credit replenishment, or the account is on an annual plan that renews early when credits run out - check the Docparser billing settings first. This server never buys credits or changes the plan. Prefer docparser_fetch_document_from_url for large files. Returns the new document id and the remaining quota. POST /v1/document/upload/{parser_id}.
Input Schema
{
"type": "object",
"properties": {
"parser_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Docparser parser id (from docparser_list_parsers)."
},
"file_content": {
"type": "string",
"minLength": 4,
"maxLength": 8388608,
"pattern": "^[A-Za-z0-9+/=_-]+$",
"description": "The file, base64 encoded."
},
"file_name": {
"description": "File name with extension (e.g. invoice.pdf); a time-based name is used if omitted.",
"type": "string",
"minLength": 1,
"maxLength": 255
},
"remote_id": {
"description": "Your own reference for the document (stored by Docparser; usable as a filter later).",
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"parser_id",
"file_content"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴docparser_reparse_documents(parser_id, document_ids)
WRITE: run the parser again over already imported documents (for example after changing parsing rules). Replaces their parsed data. Re-parsing documents already in the account does not use additional credits. 1-50 document ids per call. POST /v1/document/reparse/{parser_id}.
Input Schema
{
"type": "object",
"properties": {
"parser_id": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Docparser parser id (from docparser_list_parsers)."
},
"document_ids": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$",
"description": "Docparser document id (the `id` / `document_id` of an uploaded document)."
},
"description": "Ids of the documents to re-parse."
}
},
"required": [
"parser_id",
"document_ids"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence