Skip to main content
Glama
solara-co-jp

mf-accounting-voucher-mcp

by solara-co-jp
README.md
# mf-accounting-voucher-mcp

マネーフォワード クラウド会計の**公式MCPサーバーが未対応の機能を補完する**ローカルMCPサーバーです。REST API v3 を直接呼び出し、公式MCP(リモート)と併用します。

## 提供ツール

| ツール名 | 機能 | APIエンドポイント |
|---|---|---|
| `post_vouchers` | 証憑ファイル(PDF・画像)を仕訳に添付 | `POST /api/v3/vouchers` |
| `delete_voucher` | 証憑の添付解除 | `DELETE /api/v3/vouchers` |
| `delete_journal` | 仕訳の削除(**取り消し不可**) | `DELETE /api/v3/journals/{id}` |

> **注記**: 連携明細の「対象外」化は REST API に存在しないため提供しません。証憑ファイルのダウンロードも同様にAPI未対応です。公式MCPが提供済みの機能(`getJournals` 等)は再実装しません。

証憑ファイルのバイナリはLLMを経由しません。このサーバー(Nodeプロセス)がローカルのファイルパスを受け取り、読み込み・base64化してAPIへ送信します。

## セットアップ

### 1. アプリポータルでアプリを登録

マネーフォワードのアプリポータルでアプリを作成し、以下を設定します。

- **リダイレクトURI**: `http://127.0.0.1:53682/callback`
- **スコープ**:
  - `mfc/accounting/voucher.write`(証憑の登録、削除)
  - `mfc/accounting/journal.write`(仕訳の登録、更新、削除)

発行された **クライアントID / クライアントシークレット** を控えます。

### 2. インストールとビルド

```bash
pnpm install && pnpm run build
```

### 3. 環境変数の設定

```bash
export MF_CLIENT_ID="(クライアントID)"
export MF_CLIENT_SECRET="(クライアントシークレット)"
```

| 変数 | 既定値 | 用途 |
|---|---|---|
| `MF_CLIENT_ID` / `MF_CLIENT_SECRET` | なし(必須) | アプリポータルで発行 |
| `MF_REDIRECT_PORT` | `53682` | コールバック用ローカルポート |
| `MF_REDIRECT_URI` | `http://127.0.0.1:{PORT}/callback` | リダイレクトURI |
| `MF_TOKEN_PATH` | `~/.mf-accounting-voucher-mcp/tokens.json` | トークン保存先 |
| `MF_MAX_FILE_MB` | `20` | 1ファイルの上限(ローカル側の安全弁) |
| `MF_ALLOWED_EXT` | `.pdf,.jpg,.jpeg,.png` | 許可拡張子(カンマ区切りで上書き可) |

### 4. 初回認可

```bash
pnpm run auth
```

ブラウザが開くので、マネーフォワードにログインして認可します。トークンは `~/.mf-accounting-voucher-mcp/tokens.json`(mode 600)に保存され、以後は自動でリフレッシュされます。

## Claude Desktop / Cowork への登録

一度登録すれば、クライアントの起動時にMCPサーバーは**自動で立ち上がります**。日常的に手動起動する操作は不要です。

### 推奨: キーチェーン利用(シークレットを設定ファイルに書かない)

初回のみ、認証情報をmacOSキーチェーンに登録します:

```bash
security add-generic-password -s mf-accounting-voucher-mcp -a client_id -w '(クライアントID)' -U
security add-generic-password -s mf-accounting-voucher-mcp -a client_secret -w '(クライアントシークレット)' -U
```

`claude_desktop_config.json` の `mcpServers` には起動スクリプトを登録します(パスは実際のインストール先に置き換えてください):

```json
{
  "mcpServers": {
    "mf-accounting-voucher-mcp": {
      "command": "/path/to/mf-accounting-voucher-mcp/scripts/mf-accounting-voucher-mcp.sh",
      "args": []
    }
  }
}
```

初回OAuth認可もスクリプト経由で実行できます(環境変数の設定不要):

```bash
scripts/mf-accounting-voucher-mcp.sh auth
```

### 代替: 環境変数を設定ファイルに直接書く

```json
{
  "mcpServers": {
    "mf-accounting-voucher-mcp": {
      "command": "node",
      "args": ["/path/to/mf-accounting-voucher-mcp/dist/index.js"],
      "env": {
        "MF_CLIENT_ID": "(クライアントID)",
        "MF_CLIENT_SECRET": "(クライアントシークレット)"
      }
    }
  }
}
```

この方法はシークレットが設定ファイルに平文で残る点に注意してください。

## 使用例

```
「この領収書(/Users/xxx/Downloads/receipt.pdf)を仕訳 XXXX に添付して」
→ post_vouchers が呼ばれ、添付結果(voucher_file_ids)が返る

「仕訳 XXXX の証憑 a60cd25d-... の添付を解除して」
→ delete_voucher

「仕訳 XXXX を削除して」
→ delete_journal(実行前に仕訳内容の提示と明示的な確認が入る)
```

添付結果は公式MCPの `getJournalById` で対象仕訳を取得し、`voucher_file_ids` に反映されていることで検証できます。

## 注意

- MFのファイル種別・サイズ・枚数の正確な制限は公式仕様書 `/specs/vouchers` を参照してください(本サーバーの上限はローカル側の安全弁です)
- **事業者(オフィス)の切り替え**は `pnpm run auth` の再実行で行います
- `delete_journal` は取り消しできません。呼び出し側(LLM)はユーザーの明示的な確認を取ってから実行する設計です

TDQS

A3.6/5.0

Scored across 3 tools

Disambiguation3/5

post_vouchers与delete_voucher都涉及証憑添付,前者是添付、后者是解除添付,边界清晰;但delete_voucher和delete_journal都含'delete'前缀,容易混淆,且语义上一个删除附件、一个删除仕訳本身,描述虽说明但名称上不够鲜明。整体可区分但有轻微重叠。

Naming Consistency3/5

工具名采用动词+名词的snake_case(post_vouchers, delete_voucher, delete_journal),但动词风格不一致:post是动作,delete重复使用,且voucher与journal概念不同但都涉及删除,名词部分略显混乱。整体模式可识别但不够统一。

Tool Count3/5

3个工具属于偏少但可接受的范围。对于会计凭证管理,可能预期有获取/查询工具,但当前仅有写入和删除操作,功能面较窄,工具数接近最低阈值。

Completeness2/5

缺少核心的获取/查询功能(如获取凭证列表、获取仕訳详情),也缺少更新操作。用户无法查看已存在的凭证或仕訳,仅能添加和删除,导致操作闭环不完整,代理将面临无法验证或修订的困境。

Maintenance

ActivityMaintained
ResponsivenessNo issues