mcpField
I
Invoice Intake (reference)

Invoice Intake (reference)

ローカル
justdukkan.com開発ツール07 週間前に更新

Invoice Intake (reference) について

Invoice Intake (reference)は、仕入先請求書処理を題材にしたMCPサーバーの実装例で、安全なバックオフィスワークフローを設計する開発者向けです。読み取り・仮登録・確定の分離、型付きエラー、監査ログ、サーバー側の承認制御を示します。

主な機能

  1. 01読み取り・仮登録・確定の分離
  2. 02厳密なツール入力スキーマ
  3. 03再試行情報付き型エラー
  4. 04承認ゲートと監査ログ
  5. 05再実行可能な決定的ワークフロー

活用シーン

  1. 01人の承認を含む請求書処理を設計
  2. 02MCPツールの権限分離を検討
  3. 03請求処理の判断やエラーをテスト

MCP 対応

読み取りと取り消し可能な仮登録用、不可逆な計上用に、役割別のMCPサーバーを提供します。計上前にはサーバー側で記録済みの人間による承認を必須とします。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"com-justdukkan-invoice-intake": {
"command": "uvx",
"args": [
"invoice-intake-mcp"
]
}
}
}
起動コマンドuvx invoice-intake-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiinvoice-intake-mcp0.1.1

ツール

8

掲載時のツール一覧 · 3 週間前に更新

パラメーター型必須説明
namestringはい

詳細

invoice-intake-mcp

実際のバックオフィス業務である仕入先請求書の受付を題材にした、エージェントが安全に使える MCP サーバーとツールの設計におけるツール設計ルールのリファレンス実装です。

意図的に小規模にしています。模擬 ERP は JSON ファイルで、それ以外は本番システムで使用している構成です。

何を示しているか

ルール該当箇所
API ではなく、業務上の操作をモデル化するPATCH /invoices ではなく、erp_match_po、erp_stage_invoice
読み取り、下書き、確定を分離する--role read サーバー(読み取り+取り消し可能なステージング)と --role commit サーバー(取り消し不可能な登録)
厳格なスキーマ通貨に Literal 列挙型を使用し、名前ではなく ID を使い、found=false を有効な空の結果として扱う
サーバーと認証情報で権限を設定する専門エージェントには読み取り権限を付与し、オーケストレーターのみが確定サーバーに接続する
ツールの結果は信頼できない入力として扱うinvoices_extract の説明に明記し、評価セットにはプロンプトインジェクションのケースを含める
型付きエラー{"error": "approval_required" | "validation_failed" | "business_rule" | "not_found", "retryable": bool, ...}
監査担当者向けにログを記録するaudit.jsonl:実行者、ツール、ID、承認の参照情報
人による確認チェックポイントをサーバー側で強制するerp_post_invoice は、クライアントがどう認識していても、記録された承認がなければ拒否する

実行方法

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

初回実行時に想定される結果:

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)

オーケストレーターは決定論的なため、API キーがなくても処理を再実行できます。 LLM を使うのは orchestrator.py で示されている箇所(曖昧な仕入先候補、自由記述の備考、依頼者への返信メモ)であり、照合ルール、許容範囲、承認上限ではありません。

MCP クライアントからサーバーを使う

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

オーケストレーター以外のエージェントには、読み取りサーバーのみを利用させてください。

テストと評価

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

ディレクトリ構成

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。AI ソリューションアーキテクチャを手がける JustDukkan が開発しました。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。