Skip to main content
ClaudeWave
justdukkan avatar
justdukkan

invoice-intake-mcp

Ver en GitHub

Reference MCP servers for supplier invoice intake: read/draft/commit split, typed errors, server-side approval gate, audit log

MCP ServersRegistry oficial0 estrellas0 forksPythonMITActualizado today
ClaudeWave Trust Score
95/100
Verified
Passed
  • Open-source license (MIT)
  • Actively maintained (<30d)
  • Clear description
  • Topics declared
  • Documented (README)
Last scanned: 9/14/2026
Install in Claude Code / Claude Desktop
Method: pip / Python · -e
Claude Code CLI
claude mcp add invoice-intake-mcp -- python -m -e
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "invoice-intake-mcp": {
      "command": "python",
      "args": ["-m", "venv"]
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
💡 Install first: pip install -e
Casos de uso

Resumen de MCP Servers

# invoice-intake-mcp

<!-- mcp-name: com.justdukkan/invoice-intake-mcp -->

Reference implementation of the tool-design rules in
[Designing MCP servers and tools that agents can use safely](https://justdukkan.com/insights/mcp-server-and-tool-design/),
on a real back-office process: supplier invoice intake.

It is small on purpose. The fake ERP is a JSON file; everything else is the
shape we use in production systems.

## What it shows

| Rule | Where |
|---|---|
| Model the business operation, not the API | `erp_match_po`, `erp_stage_invoice`, not `PATCH /invoices` |
| Separate reads, drafts and commits | `--role read` server (reads + reversible staging) vs `--role commit` server (irreversible post) |
| Strict schemas | `Literal` enums for currency, ids not names, `found=false` as a valid empty result |
| Permissions on the server and credential | specialist agents get *read*; only the orchestrator connects to *commit* |
| Tool results are untrusted input | `invoices_extract` says so in its description; the eval set includes a prompt-injection case |
| Typed errors | `{"error": "approval_required" \| "validation_failed" \| "business_rule" \| "not_found", "retryable": bool, ...}` |
| Log for the auditor | `audit.jsonl`: actor, tool, ids, approval reference |
| Human checkpoint enforced server-side | `erp_post_invoice` refuses without a recorded approval, whatever the client believes |

## Run it

```bash
python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"

python -m invoice_intake_mcp.orchestrator            # process the inbox
python -m invoice_intake_mcp.approve list            # see what is waiting
python -m invoice_intake_mcp.approve APR-xxxx approved --by cfo
python -m invoice_intake_mcp.orchestrator --resume   # post the approved item
cat audit.jsonl
```

Expected first run:

```
plan: 4 new invoices -> extract, resolve vendor, match, stage, post-or-approve
  invoice_2291.pdf: staged STG-… -> WAITING for APR-…        (7,420 EUR > 5,000 limit)
  invoice_2292.pdf: match=goods_not_received -> REVIEW
  invoice_2293.pdf: match=variance {"variance_pct": 2.34} -> REVIEW
  invoice_2294.pdf: no PO reference -> REVIEW (ask requester)
```

The orchestrator is deterministic so the flow replays without an API key.
An LLM belongs in the places marked in `orchestrator.py` (ambiguous vendor
candidates, free-text remarks, the note back to the requester), not in the
match rule, the tolerance or the approval limit.

## Use the servers from an MCP client

```json
{
  "mcpServers": {
    "invoice-intake-read":   { "command": "uvx", "args": ["invoice-intake-mcp", "--role", "read"] },
    "invoice-intake-commit": { "command": "uvx", "args": ["invoice-intake-mcp", "--role", "commit"] }
  }
}
```

Give an agent only the *read* server unless it is the orchestrator.

## Tests and evals

```bash
pytest                 # unit tests on the core operations and the gate
python evals/run.py    # replayable decision cases, run on every change
```

## Layout

```
invoice_intake_mcp/
  core.py          business operations + policy (tolerance, approval limit), pure functions
  server.py        the two MCP servers and their tool descriptions
  orchestrator.py  minimal hub over MCP stdio: read server for work, commit server for posting
  approve.py       the human decision, as a CLI
  audit.py         append-only JSONL audit log
  erp.py           fake ERP / inbox state (JSON file)
tests/             pytest
evals/             cases.jsonl + run.py
```

MIT. Built by [JustDukkan](https://justdukkan.com), AI solutions architecture.
ai-agentsautomationinvoice-processingmcpmodel-context-protocol

Lo que la gente pregunta sobre invoice-intake-mcp

¿Qué es justdukkan/invoice-intake-mcp?

+

justdukkan/invoice-intake-mcp es mcp servers para el ecosistema de Claude AI. Reference MCP servers for supplier invoice intake: read/draft/commit split, typed errors, server-side approval gate, audit log Tiene 0 estrellas en GitHub y su última actualización registrada es del 2026-09-13.

¿Cómo se instala invoice-intake-mcp?

+

Puedes instalar invoice-intake-mcp clonando el repositorio (https://github.com/justdukkan/invoice-intake-mcp) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.

¿Es seguro usar justdukkan/invoice-intake-mcp?

+

Nuestro agente de seguridad ha analizado justdukkan/invoice-intake-mcp y le ha asignado un Trust Score de 95/100 (tier: Verified). Revisa el desglose completo de comprobaciones superadas y flags en esta página.

¿Quién mantiene justdukkan/invoice-intake-mcp?

+

justdukkan/invoice-intake-mcp es mantenido por justdukkan. La última actividad registrada en GitHub es del 2026-09-13, con 0 issues abiertos.

¿Hay alternativas a invoice-intake-mcp?

+

Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.

Despliega invoice-intake-mcp en tu cloud

Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.

¿Mantienes este repo? Añade un badge a tu README

Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.

Featured on ClaudeWave: justdukkan/invoice-intake-mcp
[![Featured on ClaudeWave](https://claudewave.com/api/badge/justdukkan-invoice-intake-mcp)](https://claudewave.com/repo/justdukkan-invoice-intake-mcp)
<a href="https://claudewave.com/repo/justdukkan-invoice-intake-mcp"><img src="https://claudewave.com/api/badge/justdukkan-invoice-intake-mcp" alt="Featured on ClaudeWave: justdukkan/invoice-intake-mcp" width="320" height="64" /></a>

Más MCP Servers

Alternativas a invoice-intake-mcp