Skip to main content
Glama
reshma449

docintel-mcp

by reshma449

docintel-mcp

A Document Intelligence MCP server — extract text and structured fields from business documents, route low-confidence extractions to a human review queue, and search everything you've processed. Built on the Model Context Protocol so any MCP client (Claude Desktop, Claude Code, or your own agent) can drive it.

This project packages the operating pattern I've shipped in production document pipelines: extract → score → route, with explicit confidence thresholds and a human in the loop for exactly the cases automation shouldn't decide alone.

Architecture

flowchart LR
    subgraph client [MCP Client]
        A[Claude Desktop / agent]
    end
    subgraph server [docintel-mcp]
        B[process_document]
        C[Extractor<br/>pypdf + pattern fields]
        D{Confidence router}
        E[(Document store<br/>BM25 search)]
        F[(Review queue<br/>JSONL)]
    end
    A -- MCP over stdio --> B
    B --> C --> D
    D -- ">= accept" --> E
    D -- "review band" --> F
    D -- "below review" --> X[rejected]
    A -- search_documents --> E
    A -- review_queue_pending / review_resolve --> F

Every extracted field carries a confidence score and a source snippet, so a reviewer can confirm or correct a value in seconds without reopening the document. Thresholds are explicit and tunable — the difference between a demo and something an operations team will trust.

Related MCP server: PDF Reader MCP Server

Tools exposed

Tool

What it does

process_document(path)

Extract text + fields from a .pdf/.txt/.md, route by confidence, index for search

search_documents(query, top_k)

BM25 keyword search across processed documents

get_document_text(document_id)

Retrieve extracted text

list_documents()

List processed documents

review_queue_pending()

Fields awaiting human review

review_resolve(item_id, corrected_value)

Record the human-confirmed value

Quick start

git clone https://github.com/reshma449/docintel-mcp.git
cd docintel-mcp
pip install -e ".[dev]"

# run the test suite
pytest

# run the server directly (stdio transport)
docintel-mcp

Connect from Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "docintel": {
      "command": "docintel-mcp",
      "env": {
        "DOCINTEL_ACCEPT_THRESHOLD": "0.85",
        "DOCINTEL_REVIEW_THRESHOLD": "0.30"
      }
    }
  }
}

Then ask Claude: "Process examples/sample_invoice.txt and show me anything that needs review."

Configuration

Env var

Default

Meaning

DOCINTEL_ACCEPT_THRESHOLD

0.85

Confidence at or above → auto-accept

DOCINTEL_REVIEW_THRESHOLD

0.30

Confidence at or above (but below accept) → human review

DOCINTEL_REVIEW_QUEUE

.docintel/review_queue.jsonl

Where the review queue persists

Design notes

  • Why regex + heuristics instead of an LLM call in the default extractor? Determinism. The pipeline shape (extract → score → route) is what matters; the FieldExtractor protocol in extraction.py is a one-method interface, so swapping in an LLM or cloud OCR extractor is a ~20-line change that doesn't touch routing, storage, or the MCP surface.

  • Why JSONL for the review queue? It's inspectable with cat, diffable in git, and importable into a spreadsheet — which is how real review teams actually start before anyone builds them a UI.

  • Why BM25 and not embeddings? For short business documents, BM25 is strong, explainable ("it matched these terms"), and dependency-free. An embedding index would slot in behind the same search_documents tool without changing the client contract.

  • Scanned PDFs produce an explicit warning instead of a silent empty extraction — silent empties are how bad data reaches dashboards.

Project layout

src/docintel_mcp/
  server.py       # FastMCP server + tool definitions
  extraction.py   # text + field extraction (FieldExtractor protocol)
  confidence.py   # thresholds, routing, review queue
  store.py        # BM25 document store
  models.py       # dataclasses shared across the pipeline
tests/            # unit tests for every module

License

MIT

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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/reshma449/docintel-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server