はじめに — 便利すぎて見落としていたコスト
前回の記事で、freee-mcpを使って確定申告の経費登録を8時間→30分に短縮した話を書きました。
便利。最高。もう手入力には戻れない。
…と思っていたのですが、ふとトークン消費量を確認して目が覚めました。
270個のAPIツール定義が、毎ターン注入される
freee-mcpをClaude Codeに接続すると、270個のAPIツール定義がコンテキストに載ります。毎ターンです。
会計API(31エンドポイント)、人事労務API(27エンドポイント)、請求書API、工数管理API、販売API — 経費登録に必要なのはほんの一部なのに、全API分のスキーマがall-or-nothingで注入されます。
2026年3月時点で、API絞り込み設定は未対応です。
勘定科目一覧、1回のレスポンスで108,734文字
さらに衝撃だったのがレスポンスサイズです。
GET /api/1/account_items(勘定科目一覧): 108,734文字
10万文字超え。 1回のAPI呼び出しで、文庫本1冊分のテキストがコンテキストに流れ込みます。
取引一覧も全2,902件。limit を指定しないと全件返ってきます。
経費1件あたりのトークンコスト
実測してみました。
| 方式 | 入力トークン(推定) | 出力トークン(推定) | 備考 |
|---|---|---|---|
| MCP経由 1件 | ~15,000〜20,000 | ~300 | 270 APIツール定義がinputに毎回載る |
| CLI Skill 1件 | ~2,000〜3,000 | ~50 | curlコマンド+jqフィルタのみ |
| CLI Skill 12件一括 | ~3,000〜4,000 | ~500 | forループで1回のBash呼び出し |
MCP経由だと、経費1件登録するだけで約17,500トークンを消費します。そのうち大半はAPIツール定義のオーバーヘッドです。
freee月額 vs トークン代
Claude Sonnet 4の入力トークン単価は $3/MTk(100万トークンあたり$3)です。
| シナリオ | トークン数 | コスト | 備考 |
|---|---|---|---|
| MCP経由で10件/月 | 175,000 | $0.53(約79円) | 個人事業主の現実的な件数 |
| MCP経由で年間 | 2,100,000 | $6.3(約945円) | 12ヶ月分 |
| freeeスターター | — | 月額1,480円 | 年間17,760円 |
MCP経由のトークン代だけで、年間約945円。freeeの月額1ヶ月分に迫ります。
かなり安いですが、複雑な気持ちになりました。経費登録を自動化して時間を節約したのに、トークン代という新しい経費が生まれている。しかもこれ、経費登録するたびに増えていく経費です。経費を登録するために経費が発生する — なんとも皮肉な話ですが、確定申告で計上できるのがせめてもの救いです。
解決策: CLI Skill化でトークン90%以上削減
MCP経由の問題は明確です:
- 270 APIツール定義のオーバーヘッド — 毎ターン注入、絞り込み不可
- レスポンスの冗長性 — 全フィールドが返却される
解決策として、必要なAPIだけをCLI Skill化しました。
Before: MCP経由
Claude → Skill呼び出し(APIリファレンス注入) → MCP Tool → freee API
↑ 270 API分のスキーマが毎回注入
After: CLI Skill
Claude → Bash(curl + jq) → freee API
↑ 必要なエンドポイントだけ、レスポンスもjqでフィルタ
実測比較
| API | MCP経由 | CLI Skill(jqフィルタ) | 削減率 |
|---|---|---|---|
| 取引一覧(3件) | ~3,000文字 | ~200文字 | 93%減 |
| 勘定科目一覧 | 108,734文字 | ~200文字 | 99.8%減 |
| 取引登録レスポンス | ~800文字/件 | ~80文字/件 | 90%減 |
勘定科目一覧は500分の1になりました。 CLI Skillでは必要なフィールド(ID・名前・カテゴリ)だけをjqで抽出するので、10万文字が200文字になります。
コスト比較
| 方式 | 経費10件/月 | 年間コスト |
|---|---|---|
| MCP経由 | $0.53(79円) | 945円 |
| CLI Skill | $0.08(12円) | 138円 |
| CLI 一括 | $0.01(2円) | 19円 |
CLI一括登録なら、年間のトークン代は19円。MCP経由の約50分の1です。
OAuthトークンの再利用
CLI Skill化で気になるのが認証ですが、freee-mcpのOAuthトークンをそのまま再利用できます。
# freee-mcpのトークンファイル
~/.config/freee-mcp/tokens.json
ここに保存されたアクセストークンをcurlで使えば、追加の認証フローは不要です。
実際に作ったCLI Skill
Claude Codeの .claude/skills/ に以下のSkillを作りました。freee APIをcurlで直接呼び出すシンプルなSkillです。
# 共通変数
ACCESS_TOKEN=$(jq -r .access_token ~/.config/freee-mcp/tokens.json)
COMPANY_ID=$(jq -r .currentCompanyId ~/.config/freee-mcp/config.json)
# GETの例(取引一覧を3件取得)
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
"https://api.freee.co.jp/api/1/deals?company_id=$COMPANY_ID&limit=3" \
| jq '.deals[] | {id, issue_date, amount, status}'
# POSTの例(経費登録)
curl -s -X POST -H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"company_id": "'$COMPANY_ID'",
"issue_date": "2025-07-15",
"type": "expense",
"details": [{
"account_item_id": YOUR_ACCOUNT_ITEM_ID,
"tax_code": 136,
"item_id": YOUR_ITEM_ID,
"amount": 8432,
"description": "電気代7月分"
}],
"payments": [{
"date": "2025-07-15",
"from_walletable_type": "wallet",
"from_walletable_id": YOUR_WALLET_ID,
"amount": 8432
}]
}' "https://api.freee.co.jp/api/1/deals" \
| jq '{id: .deal.id, date: .deal.issue_date, amount: .deal.amount}'
ポイントは jqで必要なフィールドだけ返すこと。freee APIのレスポンスは全フィールド返却されるため、そのままだと勘定科目一覧で10万文字超えます。jqフィルタで {id, name, category} だけ抽出すれば200文字に収まります。
まとめ
freee-mcpは間違いなく便利です。確定申告の経費登録が8時間→30分になった体験は本物です。
ただし、MCP経由のトークン消費には注意が必要です:
- 270個のAPIツール定義が毎ターン注入される
- 勘定科目一覧は1回で10万文字超え
- 経費登録を月30件続けると年間2,835円のトークン代
確定申告のように使うAPIが限定的な場合は、CLI Skill化でトークン消費を90%以上削減できます。
そして次の記事では、freee-mcpを使っていて気づいたさらに致命的な問題について書きます。MCPには、そもそもファイルが送れないのです。
→ 次回:「個人事業主がfreee-mcpで確定申告しようとしたら、MCPには領収書すら送れなかった話」
📘 CLAUDE.mdのセキュリティ設計やClaude Codeの実践ノウハウは、『実践Claude Code(Kindle版)』で体系的にまとめています。
📘 MCPのセキュリティ・トークンコスト・ワークアラウンドについては、『MCP実践セキュリティ(Kindle版)』で体系的にまとめています。