Invoice Intake — Claude Code MCP server: what it does and setup
Reference MCP implementation for supplier invoice processing, featuring separated read and commit roles, server-side approval gates, and audit trails.
claude mcp add invoice-intake-mcp -- uvx invoice-intake-mcpWhat Invoice Intake (reference) does
This project provides a blueprint for structuring agent tools safely around back-office workflows. Instead of exposing low-level endpoints, tools model concrete domain events like purchase order matching and invoice staging. An internal JSON store serves as a mock ERP backend.
The system splits responsibilities via server arguments: --role read handles non-destructive steps, while --role commit reserves irreversible actions for the primary orchestrator. An enforced server guard blocks erp_post_invoice whenever a valid human sign-off reference is absent. Every executed tool call gets written to an append-only audit.jsonl ledger.
Execution relies on Python and uvx. Any attempt to post without explicit authorization fails immediately with an approval_required typed response.
What it helps with
- Prevent agents from committing ledger entries without verified manager sign-off
- Isolate routine inspection tasks from irreversible database mutations
- Maintain a structured
audit.jsonllog of every automated tool execution - Handle data extraction failures and prompt injections using typed errors
Example prompts for the agent
- Match pending supplier invoices against active purchase orders
- List staged invoice items that exceed the automatic authorization threshold
- Commit invoice posting once approval reference APR-2291 is granted
How to install Invoice Intake (reference)
Platform CLI
claude mcp add invoice-intake-mcp -- uvx invoice-intake-mcpuvx runs the command named after the package; if the README names another one, use uvx --from invoice-intake-mcp <command>
Platform CLI
codex mcp add invoice-intake-reference -- uvx invoice-intake-mcpuvx runs the command named after the package; if the README names another one, use uvx --from invoice-intake-mcp <command>
Config file
{
"mcpServers": {
"invoice-intake-reference": {
"command": "uvx",
"args": [
"invoice-intake-mcp"
]
}
}
}uvx runs the command named after the package; if the README names another one, use uvx --from invoice-intake-mcp <command>
Config file
{
"servers": {
"invoice-intake-reference": {
"type": "stdio",
"command": "uvx",
"args": [
"invoice-intake-mcp"
]
}
}
}uvx runs the command named after the package; if the README names another one, use uvx --from invoice-intake-mcp <command>
Platform CLI
gemini mcp add invoice-intake-reference uvx invoice-intake-mcpuvx runs the command named after the package; if the README names another one, use uvx --from invoice-intake-mcp <command>
Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more
Questions about Invoice Intake (reference)
How to install Invoice Intake (reference) in Claude Code?
Run the command claude mcp add invoice-intake-mcp -- uvx invoice-intake-mcp in your terminal.
Why does the implementation separate read and commit instances?
It restricts write privileges: sub-agents only touch draft state, whereas the commit binary stays locked down for authorized workflows.
Does this tool require external enterprise software to run tests?
No external system is required, as the implementation tracks state locally through flat JSON mock data.