Skip to main content
Glama
docuprox
by docuprox

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.


Related MCP server: MCP Server for CAP

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.pdf using template 123e4567-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: NEWUNZIP FILEUNZIP FILE SUCCESS / UNZIP FILE FAILEDPROCESS IMAGEPROCESS IMAGE SUCCESS / PROCESS IMAGE FAILEDSUCCESS / 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.zip then wait for the result" — Claude will call process_job then poll_job automatically.


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-8b4ec1900726 in CSV format"


How File Uploads Work

Every tool that accepts a file_path:

  1. Resolves it to an absolute path

  2. Reads the file into a Buffer

  3. Detects MIME type from the file extension

  4. Sends it as multipart/form-data with field name actual_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

Available Tools

5 tools
job_resultsA

Fetch the extracted results of a completed asynchronous DocuProx processing job. Requires a valid job_id and optionally a format ('json' or 'csv').

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesUUID of the job.
result_formatNoFormat of the results ('json' or 'csv'). Defaults to 'json'.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesUUID of the job returned by process_job.

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesUUID of the job to poll.
timeout_msNoMax wait time in ms (default: 300000).
interval_msNoPolling interval in ms (default: 3000).

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesAbsolute or relative path to the document on disk.
prompt_jsonYesExtraction schema (JSON object or string). Required.
document_typeYesDocument category, e.g. 'invoice', 'passport'. Required.
static_valuesNoKey-value pairs overriding STATIC template placeholders.
custom_instructionsNoFree-text instructions to guide extraction.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesAbsolute or relative path to the document on disk (jpg, png, pdf, zip).
prompt_jsonNoCustom extraction schema (JSON object or string).
template_idNoUUID of the DocuProx template. Omit to use agentic mode.
document_typeNoDocument category (required in agentic mode).
static_valuesNoKey-value pairs overriding STATIC template placeholders.
custom_instructionsNoFree-text instructions for the AI.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

  1. 5 tool updatesv1.0.0
    • First observedjob_results
    • First observedjob_status
    • First observedpoll_job
    • First observedprocess_agent
    • First observedprocess_job

TDQS

A3.8/5.0
Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    13
    32
    3
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables Claude AI to interact with Paperless-NGX document management through natural language, offering 50 tools for full CRUD operations and management.
    123
    MIT

Latest Blog Posts

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