docuprox-mcp
Enables AI clients like Claude to process documents (invoices, passports, etc.) via the DocuProx API, with tools for submitting jobs, checking status, and retrieving results.
README
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-mcp
Requires Node.js ≥ 18.
Configuration
| Variable | Required | Description |
|---|---|---|
DOCUPROX_API_KEY |
yes | Your DocuProx API key |
DOCUPROX_BASE_URL |
yes | Base URL of the DocuProx API (e.g. https://api.docuprox.com/v1) |
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-mcp
Cursor / 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 |
|---|---|---|---|
file_path |
string | yes | Path to file on disk (jpg, png, pdf, zip) |
template_id |
string | no | UUID of a DocuProx template |
document_type |
string | no* | Document category — required when no template_id |
prompt_json |
object | no | Custom extraction schema |
custom_instructions |
string | no | Free-text guidance for the AI |
static_values |
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 |
|---|---|---|---|
file_path |
string | yes | Path to file on disk |
prompt_json |
object | yes | Extraction schema |
document_type |
string | yes | Document category |
custom_instructions |
string | no | Free-text guidance |
static_values |
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 |
|---|---|---|---|
job_id |
string | yes | UUID from process_job |
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 |
|---|---|---|---|---|
job_id |
string | yes | — | UUID from process_job |
interval_ms |
number | no | 3000 |
Poll interval in ms |
timeout_ms |
number | no | 300000 |
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 |
|---|---|---|---|---|
job_id |
string | yes | — | UUID from process_job |
result_format |
string | no | "json" |
Output format: "json" or "csv" |
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
Buffer - Detects 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 | file_path does not exist — a clear message with the resolved path is returned |
| 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 /process-agent surfaced clearly |
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.js
Project 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.json
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.