ドキュメント一覧

MCP 接続ガイド

OpenTax は同じ MCP ツールを 2 つの方法で提供します。

ツール定義は packages/opentax-mcp/tools.ts にあり、両方で共有しているため食い違いは生じません。どちらも LLM の呼び出し、CSV の解析、OCR、勘定科目の分類は行いません。すべてのツール呼び出しはエージェント自身のトークンで通常の OpenTax API を経由するため、スコープの確認・確認待ち仕訳のルール・監査は Web と同じです。

リモート MCP(Claude・ChatGPT)

サーバー URL は /agent-connections(Agent接続 画面)に表示されます。

コネクタを追加すると、ホストが OpenTax の同意画面(/oauth/authorize)を開きます。サインインしてスコープを選び、許可してください。許可した接続は /agent-connections に OAuth バッジ付きで表示され、そこで取り消すと即座に接続が切れます(アクセストークン・リフレッシュトークンともに無効になります)。

しくみ

構成要素場所
MCP エンドポイント(Streamable HTTP 2026-07-28、ステートレスな 2025 版へのフォールバックあり)app/api/mcp/route.ts, lib/mcp/handler.ts
Protected Resource Metadata(RFC 9728)/.well-known/oauth-protected-resource[/api/mcp]
Authorization Server Metadata(RFC 8414)/.well-known/oauth-authorization-server(/.well-known/openid-configuration も同じ)
動的クライアント登録(RFC 7591)POST /api/oauth/register
同意画面/oauth/authorize → /api/oauth/authorize
トークン発行・失効POST /api/oauth/token, POST /api/oauth/revoke
許可情報の保存と検証lib/auth/oauth.ts

デプロイ時の注意

stdio アダプター

セットアップ

先に OpenTax を起動しておきます(npm run mcp:build で MCP の実行ファイルをビルドします)。/agent-connections で read と必要な書き込みスコープを持つ接続を作成し、表示されたトークンをコピーします。トークンは後から再表示できません。エージェントの MCP 設定にサーバー URL とトークンを設定します。

export OPENTAX_BASE_URL=https://your-opentax.example.com
export OPENTAX_AGENT_TOKEN=otk_your_one_time_token
npm run mcp:start

ローカル開発では http://localhost:3000 を使えます。それ以外の HTTPS でない URL は拒否されます。トークンが別のホストに転送されないよう、リダイレクトも拒否します。

Claude Code

リポジトリのルートで次を実行します。

claude mcp add --env OPENTAX_BASE_URL=https://your-opentax.example.com --env OPENTAX_AGENT_TOKEN=otk_your_one_time_token --transport stdio opentax -- node /absolute/path/to/opentax/packages/opentax-mcp/dist/server.mjs

Codex

Codex の設定に MCP サーバーを追加します(リポジトリの絶対パスは環境に合わせて変更してください)。

[mcp_servers.opentax]
command = "node"
args = ["/absolute/path/to/opentax/packages/opentax-mcp/dist/server.mjs"]
[mcp_servers.opentax.env]
OPENTAX_BASE_URL = "https://your-opentax.example.com"
OPENTAX_AGENT_TOKEN = "otk_your_one_time_token"

最新のホスト設定は Claude Code の MCP ガイド と Codex の MCP ガイド を参照してください。トークンを含む設定ファイルは他人と共有しないでください。トークンを紛失・漏えいした場合は /agent-connections から取り消してください。

ツール一覧

分野ツール
事業情報get_business_context, update_business_settings
取引先search_customers, create_customer, update_customer
案件search_projects, get_project, create_project, update_project
仕訳search_journals, create_journals, update_pending_journal, delete_pending_journal, update_journal_links
証憑upload_evidence, search_evidence, update_evidence, delete_evidence
請求書類search_billing_documents, get_billing_document, create_billing_draft, update_billing_draft, delete_billing_draft
固定資産list_fixed_assets, create_fixed_asset, update_fixed_asset
レポートget_profit_and_loss, get_balance_sheet, get_monthly_summary, get_tax_return_preview

create_journals は最大 200 件を受け付け、1 件ごとに結果を返します。再試行する場合は安定した idempotencyKey を指定してください。一部の失敗が成功分を隠すことはありません。エージェントが登録した仕訳は確認待ちのままで、MCP から確定することはできません。/review で確定してください。

編集・削除・紐付けの変更

操作APIスコープエージェントの制限
証憑のメタデータ編集PATCH /api/documents { documentId, updates }evidence:write—
証憑の削除DELETE /api/documents { documentId, reason }evidence:write仕訳に紐付いている間は拒否(409 EVIDENCE_LINKED)。論理削除で、保存済みファイルは残ります。
仕訳の紐付け変更PUT /api/journals/links { journalId, evidenceIds?, issuedDocumentId?, reason }journals:write確定済みの仕訳には追加のみ可能(409 CONFIRMED_JOURNAL)。
請求書類の編集(案件の変更を含む)PATCH /api/issued-documents { documentId, updates }billing:write下書きのみ。projectId を変更すると取引先情報も更新されます。
請求書類の削除DELETE /api/issued-documents { documentId }billing:write会計に転記していない下書きのみ(409 NOT_DRAFT)。
事業設定の編集PATCH /api/settings { updates }settings:writebankAccounts はユーザーのみ変更可(403 FIELD_DENIED)。未知のフィールドは拒否されます。

紐付けは双方向で保持されます: journal.evidenceIds ⇄ document.linkedJournalIds、journal.sourceDocumentId ⇄ issuedDocument.linkedJournalIds。請求書類から最後の仕訳の紐付けが外れる(または削除される)と postedToAccounting がリセットされ、再度転記できるようになります。すべての変更は監査ログに記録されます。既存の接続には settings:write が自動では付与されません。このスコープが必要な場合は /agent-connections で新しい接続を作成する(または OAuth コネクタを再接続する)必要があります。

stdio アダプターの upload_evidence は、ローカルにある最大 10 MB の PDF・JPEG・PNG の通常ファイルを受け付けます。MCP プロセスはファイル名(ベース名のみ)とともにマルチパートでアップロードし、ファイルの内容をモデルのプロンプトに含めることはありません。

GitHub でこのページを編集する ↗