npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

docuprox-mcp

v1.0.0

Published

MCP server for DocuProx document processing API

Downloads

133

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