docuprox-mcp
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@docuprox-mcpProcess the invoice at documents/invoice.pdf using template default."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
docuprox-mcp
MCP (Model Context Protocol) server for the DocuProx document-processing API. Exposes DocuProx as tools that any MCP-compatible AI client can call — Claude Desktop, Claude Code, Cursor, Windsurf, and more.
Quickstart (npx — no install required)
DOCUPROX_API_KEY=your_key DOCUPROX_BASE_URL=https://api.docuprox.com/v1 npx docuprox-mcpRequires Node.js ≥ 18.
Related MCP server: MCP Server for CAP
Configuration
Variable | Required | Description |
| yes | Your DocuProx API key |
| yes | Base URL of the DocuProx API (e.g. |
Connect to an MCP Client
Claude Desktop
macOS — ~/Library/Application Support/Claude/claude_desktop_config.json
Windows — %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"docuprox": {
"command": "npx",
"args": ["docuprox-mcp"],
"env": {
"DOCUPROX_API_KEY": "your_api_key_here",
"DOCUPROX_BASE_URL": "https://api.docuprox.com/v1"
}
}
}
}Claude Code (CLI)
claude mcp add docuprox -e DOCUPROX_API_KEY=your_api_key_here -e DOCUPROX_BASE_URL=https://api.docuprox.com/v1 -- npx docuprox-mcpCursor / Windsurf
Add to your MCP settings (.cursor/mcp.json or equivalent):
{
"mcpServers": {
"docuprox": {
"command": "npx",
"args": ["docuprox-mcp"],
"env": {
"DOCUPROX_API_KEY": "your_api_key_here",
"DOCUPROX_BASE_URL": "https://api.docuprox.com/v1"
}
}
}
}Available Tools
process_job
Submit a document for asynchronous processing. Returns a job_id to track with poll_job or job_results.
Argument | Type | Required | Description |
| string | yes | Path to file on disk (jpg, png, pdf, zip) |
| string | no | UUID of a DocuProx template |
| string | no* | Document category — required when no |
| object | no | Custom extraction schema |
| string | no | Free-text guidance for the AI |
| object | no | Key-value overrides for STATIC template placeholders |
Example: "Submit the invoice at
/tmp/invoice.pdfusing template123e4567-e89b-12d3-a456-426614174000"
process_agent
Submit a document for synchronous extraction. Blocks until done and returns results directly — no polling needed. Credits are automatically refunded on failure.
Argument | Type | Required | Description |
| string | yes | Path to file on disk |
| object | yes | Extraction schema |
| string | yes | Document category |
| string | no | Free-text guidance |
| object | no | Key-value STATIC overrides |
Example: "Extract passport data from
/home/user/passport.jpg. Use document_type='passport' and prompt_json{ 'name': 'full name', 'dob': 'date of birth' }"
job_status
Check the status of an async job.
Argument | Type | Required | Description |
| string | yes | UUID from |
Returns: { job_id, status } where status is one of:
NEW → UNZIP FILE → UNZIP FILE SUCCESS / UNZIP FILE FAILED → PROCESS IMAGE → PROCESS IMAGE SUCCESS / PROCESS IMAGE FAILED → SUCCESS / FAILED
poll_job
Block until a job finishes (or times out). Retries job_status internally on a timer.
Argument | Type | Required | Default | Description |
| string | yes | — | UUID from |
| number | no |
| Poll interval in ms |
| number | no |
| Max wait in ms (5 min) |
Example: "Submit
/tmp/batch.zipthen wait for the result" — Claude will callprocess_jobthenpoll_jobautomatically.
job_results
Fetch the extracted results of a completed async job.
Argument | Type | Required | Default | Description |
| string | yes | — | UUID from |
| string | no |
| Output format: |
Example: "Get the results for job
0869d5ec-5cfe-4960-878d-8b4ec1900726in CSV format"
How File Uploads Work
Every tool that accepts a file_path:
Resolves it to an absolute path
Reads the file into a
BufferDetects MIME type from the file extension
Sends it as
multipart/form-datawith field nameactual_image
The AI never sees or handles base64 — just pass a local file path.
Error Handling
Error | Cause |
File not found |
|
API error | HTTP status + response body surfaced in the tool result |
Invalid arguments | Zod validation fires before any API call |
Credit failure | 402/403 from |
Local Development
# Clone and install
git clone <repo>
cd docuprox-mcp
npm install
# Run in dev mode (no build step)
DOCUPROX_API_KEY=test DOCUPROX_BASE_URL=http://localhost:5000/v1 npm run dev
# Build
npm run build
# Inspect with MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.jsProject Structure
docuprox-mcp/
├── index.ts ← MCP server entry point (stdio transport)
├── config.ts ← Env-var config loader
├── client.ts ← Axios API client (multipart/form-data uploads)
├── tools.ts ← Zod schemas + MCP tool definitions
├── handlers.ts ← Maps tool names → client calls
├── package.json
└── tsconfig.jsonLicense
MIT
Available Tools
5 toolsjob_resultsA
Fetch the extracted results of a completed asynchronous DocuProx processing job. Requires a valid job_id and optionally a format ('json' or 'csv').
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | UUID of the job. | |
| result_format | No | Format of the results ('json' or 'csv'). Defaults to 'json'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does reasonably well: it states that this is a retrieval operation for results of a completed job. It does not discuss failure behavior or whether results are retained, but for a simple fetch operation the core behavior is transparent enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler. The key action, resource, prerequisite, and optional format are all front-loaded efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read tool with fully documented parameters, the description covers the essential prerequisites and result format. It lacks detail about the return payload, but since there is no output schema and the tool name itself communicates 'results', this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents job_id and result_format. The description adds minor value by restating the format options and the optionality in natural language, but it does not introduce meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') with a clear resource ('extracted results of a completed asynchronous DocuProx processing job'). This distinguishes it from siblings like job_status, which would report job state, and process_job, which would start a job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly conveys that the tool is for completed jobs and requires a job_id, giving an agent the core context for when to call it. It does not explicitly name alternatives or state when not to use it, but the 'completed' prerequisite provides solid usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_statusB
Check the current status of an asynchronous DocuProx processing job. Returns the job_id and status string (e.g. NEW, UNZIP FILE, UNZIP FILE SUCCESS, UNZIP FILE FAILED,PROCESS IMAGE, PROCESS IMAGE SUCCESS,PROCESS IMAGE FAILED,SUCCESS,FAILED).
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | UUID of the job returned by process_job. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does disclose the return shape (job_id and status) and enumerates expected status strings, which is useful. However, it does not state whether the call blocks, whether statuses are final, what happens for unknown job IDs, or whether polling is safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. The status enumeration is long but directly relevant, though the formatting suffers from missing spaces after commas, slightly reducing readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description provides the return fields and possible status values, making it callable and interpretable. It is mostly complete, but lacks explicit polling semantics and sibling differentiation, which would make it fully robust.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents job_id as a UUID returned by process_job, and the description adds no additional meaning or constraints. With 100% schema description coverage, this stays at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Check'), a resource ('status of an asynchronous DocuProx processing job'), and the returned fields. It is unmistakably a status-reading tool, though it does not differentiate itself from the sibling tools job_results and poll_job, which may overlap in purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus job_results or poll_job, nor does it explain whether it should be called repeatedly or after certain job states. The asynchronous context is implied but no explicit usage conditions or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
poll_jobA
Poll an asynchronous DocuProx job until it reaches a terminal status (COMPLETED, FAILED, or ERROR) or a timeout is reached. Useful to block until a job is done without manual retries.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | UUID of the job to poll. | |
| timeout_ms | No | Max wait time in ms (default: 300000). | |
| interval_ms | No | Polling interval in ms (default: 3000). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It transparently discloses that the tool blocks, polls repeatedly, and stops at terminal statuses or timeout. However, it does not explain what happens on timeout (error vs. partial result) or what the return value is, which is important for an agent invoking a blocking operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences with no redundancy. The core behavior and terminal statuses are front-loaded, followed by a succinct statement of purpose. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema is simple and fully described, but there is no output schema and no annotations. The description does not state what the tool returns or how timeout is signaled, leaving a meaningful gap for an agent that needs to act on the outcome. It should also briefly contrast with job_status for complete contextual guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents job_id, timeout_ms, and interval_ms with defaults. The description adds no additional parameter semantics beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('poll'), a resource ('asynchronous DocuProx job'), and precisely characterizes the behavior: waiting until a terminal status (COMPLETED, FAILED, ERROR) or timeout. This clearly distinguishes poll_job from a single-status check like job_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says it is 'useful to block until a job is done without manual retries,' which gives clear usage context. It does not explicitly name alternatives or state when not to use it, but the purpose is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
process_agentA
Submit a document for SYNCHRONOUS agentic extraction via DocuProx. Reads the file from disk, uploads as multipart/form-data, and waits for the result. Returns the extracted data directly (no job polling needed). Credits are deducted and refunded on failure.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Absolute or relative path to the document on disk. | |
| prompt_json | Yes | Extraction schema (JSON object or string). Required. | |
| document_type | Yes | Document category, e.g. 'invoice', 'passport'. Required. | |
| static_values | No | Key-value pairs overriding STATIC template placeholders. | |
| custom_instructions | No | Free-text instructions to guide extraction. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so well. It explains the execution flow: reads the file from disk, uploads as multipart/form-data, waits for the result, and returns extracted data directly. It also discloses the economic side effect: credits are deducted and refunded on failure. This gives the agent a clear model of what happens when the tool is invoked.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the core operation, the second summarizes the execution mechanics, and the third clarifies the return model and billing behavior. The most important differentiator (synchronous, no polling) is front-loaded, making the tool easy to classify quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters, no annotations, and no output schema, the description provides essential context: synchronous execution, file read behavior, upload mechanism, direct return, and credit handling. It could additionally mention failure modes, file size limits, or authentication requirements, but the core behavioral and selection information an agent needs is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter description coverage, so the baseline is 3. The description itself does not add much per-parameter meaning beyond what the schema states; it mainly adds context about the overall synchronous behavior. It does clarify that prompt_json acts as the extraction schema, which slightly reinforces the schema, but the schema already communicates this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Submit'), a specific resource ('a document for SYNCHRONOUS agentic extraction via DocuProx'), and clearly distinguishes itself from sibling job-polling tools by saying 'Returns the extracted data directly (no job polling needed)'. An agent can immediately tell this is the synchronous, direct-result path rather than process_job, job_status, job_results, or poll_job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: for synchronous extraction where the result is returned directly, with no polling. It implicitly contrasts with the async job-based siblings by explicitly saying 'no job polling needed', which helps an agent choose between this and process_job/poll_job. However, it does not explicitly name the alternative for async use cases or state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
process_jobA
Submit a document (image, PDF, or zip) for asynchronous processing via DocuProx. Reads the file from disk and uploads it as multipart/form-data. Returns a job_id you can track with job_status or poll_job.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Absolute or relative path to the document on disk (jpg, png, pdf, zip). | |
| prompt_json | No | Custom extraction schema (JSON object or string). | |
| template_id | No | UUID of the DocuProx template. Omit to use agentic mode. | |
| document_type | No | Document category (required in agentic mode). | |
| static_values | No | Key-value pairs overriding STATIC template placeholders. | |
| custom_instructions | No | Free-text instructions for the AI. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It discloses that the tool reads from disk, uploads as multipart/form-data, is asynchronous, and returns a job_id, which are the key runtime behaviors. It could also mention failure conditions or file-size limits, but the core behavioral profile is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: purpose, transport mechanism, and return/tracking behavior. The most important information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async upload/processing tool with no output schema, the description covers the input, the asynchronous behavior, and the returned handle, while pointing to the correct tracking tools. It does not describe how parameters interact or when process_agent should be used instead, but the rich 100% schema coverage compensates for most missing parameter context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all six parameters clearly (e.g., dicurrent_type required in agentic mode, tedplate_id UUID). The tool descriptions adds little parameter-level meaning beyond the note that file_path refers to a file on disk, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource — 'Submit a document ... for asynchronous processing via DocuProx' — so the agent knows what action is being performed. It also names the supported input types and points to job tracking tools, but it does not explicitly differentiate from the sibling process_agent, leaving some ambiguity among submission entry points.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: use this tool to upload a file from disk and start asynchronous processing, then track it with job_status or poll_job. There are no explicit exclusions or 'when not to use' conditions, and no guidance on when process_agent would be the better choice, but the intended scenario is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v1.0.0- First observed
job_results - First observed
job_status - First observed
poll_job - First observed
process_agent - First observed
process_job
TDQS
The tools are mostly distinct: process_job and process_agent both submit documents but differ clearly by async vs sync behavior, and job_status vs poll_job are differentiated as one-time check vs blocking wait. Minor ambiguity exists between job_status and poll_job since both relate to job progress, but the descriptions adequately clarify their purposes.
Names are readable and use snake_case, but the pattern is mixed: process_job, process_agent, and poll_job are verb_noun, while job_status and job_results are noun_noun. This inconsistency is noticeable but not chaotic, and each name still conveys its intended function reasonably well.
With 5 tools, the server is well-scoped for its purpose: async submission, status checking, polling, result retrieval, and sync submission. Each tool serves a discrete workflow step without unnecessary redundancy.
The toolkit covers both asynchronous and synchronous processing flows end-to-end: submit, track, wait, and retrieve results. There are no obvious dead ends for the core document-processing use case, and the missing ability to cancel or delete jobs is not essential to the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
DocForge turns documents into structured data. Upload a PDF, image, or Office file and get fielded JSON back with per-field confidence scores. 95 templates (invoices, receipts, bank statements, ID docs), custom JSON Schema mode, auto-detect, natural-language instructions. Keyless demo tool included. Free 7-day trial.
Turn documents into structured data: parse, extract, classify, split, and fill PDF forms.
1PDF tools for Claude: merge, split, compress, convert, OCR & more. Requires a PDFHaul API key.
Composable APIs for document extraction, image transformation, and document & sheet generation.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI assistants to parse and convert PDFs and images to structured text formats using the Doc2x v2 API. Supports asynchronous document processing, format conversion, and file downloads with configurable polling and timeout settings.13323MIT
- FlicenseNot gradedqualityDmaintenanceEnables Claude to interact with a document processing backend, providing tools for listing, retrieving, uploading, and processing documents, as well as resources for pending documents and statistics.-
- AlicenseAqualityCmaintenanceEnables AI assistants to extract and structure content from documents (PDFs, images, Office files) using Upstage AI's document digitization and information extraction APIs.23MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude AI to interact with Paperless-NGX document management through natural language, offering 50 tools for full CRUD operations and management.123MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/docuprox/docuprox-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server