確定申告の前日。freeeの画面で「未決済」のフィルターをかけて、一件ずつ目視で追う。「この取引、勘定科目入ってなくない?」「12月の請求書、入金あったっけ?」。フィルター変えて、タブ切り替えて、また戻って。目がしょぼしょぼしてくる頃には、何を確認し終えて何がまだなのか、よくわからなくなっている。
毎年やってるこの作業、ターミナルから5分で片付くようになった。freee MCPのおかげで。
freee MCPとは
freee公式のMCPサーバー。OAuth認証でfreee APIに接続し、MCP対応エディタからfreeeの会計データを直接読み書きできる。
対応エディタはClaude Codeに限らない。Cursor、Windsurf、Cline、VS Code + Copilot Agentなど、MCPプロトコルに対応していれば何でもいける。npmパッケージとして公開されていて、設定はJSON数行。
接続手順は公式ドキュメントに譲る。やることは3つだけ。
- freee Developers(
developer.freee.co.jp)でアプリ登録。コールバックURLにhttp://localhost:3000/callbackを設定 -
.mcp.jsonにClient IDとClient Secretを書く -
freee_authenticateでOAuth認証を通す
{
"mcpServers": {
"freee": {
"command": "npx",
"args": ["-y", "freee-mcp-server"],
"env": {
"FREEE_CLIENT_ID": "あなたのClient ID",
"FREEE_CLIENT_SECRET": "あなたのClient Secret"
}
}
}
}
トークンの管理はMCPサーバーが勝手にやる。リフレッシュも自動。一度通せばしばらく触らなくていい。
ここからが本題。この記事の目的は「繋いだ」じゃなくて「何に使えるか」だ。
事前チェック①: 未分類・未確定取引の洗い出し
確定申告前に一番怖いのが「仕訳漏れ」。freeeの画面だと、取引一覧を開いてステータスで絞り込んで……という手順になる。MCPなら一発。
freee_api_get(
path="/api/1/deals",
query={
"status": "unsettled",
"limit": 100
}
)
/api/1/deals に status=unsettled を投げるだけ。未決済の取引がずらっと返ってくる。
さらに実用的なのが、勘定科目が未設定の取引を探すこと。取引一覧を取得して、account_item_id が空のものをフィルタリングする。
→ 取引一覧を取得
→ 勘定科目が未設定の取引: 3件
- 2025-11-15 ○○サービス 5,500円
- 2025-12-03 △△ストア 12,800円
- 2026-01-22 □□オンライン 3,300円
freeeの画面をスクロールして探すより圧倒的に速い。「あと3件だけ科目を振ればOK」という状況が5秒でわかる。これだけでも申告前の精神的な安心感が違う。
事前チェック②: 勘定科目の偏りチェック
仕訳は入っているが、金額がおかしい——というパターンも怖い。交際費が先月の3倍になっていたら、仕訳ミスか、入力先の科目を間違えた可能性がある。
勘定科目一覧を /api/1/account_items で取得し、取引データと突き合わせる。
freee_api_get(path="/api/1/account_items")
freee_api_get(
path="/api/1/deals",
query={
"start_issue_date": "2025-04-01",
"end_issue_date": "2026-03-31",
"type": "expense",
"limit": 100
}
)
取引データの type=expense(支出)を期間指定で取得して、勘定科目ごとに月別集計する。Claude Codeに「勘定科目別に月ごとの経費を集計して」と言えば、テーブルにまとめてくれる。
→ 月別経費サマリー(抜粋)
科目 | 10月 | 11月 | 12月 | 1月
交際費 | 25,000 | 18,000 | 82,000 | 30,000 ← 12月だけ突出
旅費交通費 | 12,000 | 15,000 | 11,000 | 14,000
消耗品費 | 8,000 | 45,000 | 7,000 | 9,000 ← 11月だけ突出
12月の交際費が突出している。忘年会シーズンだから妥当かもしれないし、会議費にすべき経費が混入しているかもしれない。こういう異常値の早期発見が、ターミナルからサクッとできる。
freeeのレポート機能でも月次推移は見られる。だが「数字を見てから、その取引の明細を追う」という一連の流れが、ターミナル上だと途切れない。異常値を見つけた瞬間に「12月の交際費の内訳を見せて」と続けられる。画面遷移ゼロ。
事前チェック③: 売上と入金の突き合わせ
請求書を出したのに入金がない。確定申告の直前に気づくと冷や汗が出る。
freee MCPでは請求書データと取引データの両方にアクセスできる。
freee_api_get(
path="/api/1/invoices",
query={
"payment_status": "unsettled",
"start_issue_date": "2025-04-01",
"end_issue_date": "2026-03-31"
}
)
/api/1/invoices に payment_status=unsettled を渡すと、未入金の請求書だけ返ってくる。
→ 未入金の請求書: 2件
- 2025-12-15発行 ○○株式会社宛 330,000円(支払期日: 2026-01-31 ← 超過)
- 2026-02-28発行 △△合同会社宛 110,000円(支払期日: 2026-03-31)
12月の請求書が1月末期限で未入金。これは催促が要る。2月分は期日前だからまだ大丈夫。
freeeの画面でも未入金フィルタはかけられる。ただ、MCPの真価はここから。取引一覧(/api/1/deals)の入金データと請求書を突き合わせて、「請求額と入金額の差異」まで出せる。部分入金があるケースも拾える。
→ 突き合わせ結果
○○株式会社: 請求 330,000円 / 入金 0円 → 未回収 330,000円
△△合同会社: 請求 110,000円 / 入金 0円 → 期日前(3/31まで)
税理士に渡す前にここまで整理できていると、確認作業が格段に減る。
事前チェック④: 試算表(BS/PL)の確認
申告前の最終チェック。試算表が合っているかの確認もターミナルからできる。
freee_api_get(
path="/api/1/reports/trial_pl",
query={
"start_month": 4,
"end_month": 3,
"fiscal_year": 2025
}
)
/api/1/reports/trial_pl で損益計算書、/api/1/reports/trial_bs で貸借対照表。前年比較が要るなら /api/1/reports/trial_pl_two_years もある。3期比較版まで用意されている。
「売上高の前年比を出して」「経常利益率は?」。数字を引っ張って計算するまでが一つの流れで終わる。スプレッドシートにコピペする工程が消える。
おまけ: 月次サマリーも一言で
事前チェックとは別に、日常的に使えるのが月次の数字確認。
「今月の売上いくら?」と聞くだけ。Claude Codeが /api/1/deals を type=income で叩いて集計する。
freee_api_get(
path="/api/1/deals",
query={
"type": "income",
"start_issue_date": "2026-03-01",
"end_issue_date": "2026-03-31"
}
)
→ 3月の売上: 5件 / 合計 ○○円
総勘定元帳も /api/1/reports/general_ledgers から引ける。「旅費交通費の今期の明細を出して」で一発。freeeの画面を開くまでもない。
注意点
APIレートリミット
freee APIには1時間あたりのリクエスト上限がある。普通に手動で確認する分には引っかからない。ただし全取引を一括取得するようなループ処理を走らせると到達する可能性がある。limit パラメータで取得件数を絞り、必要な分だけ取る。
権限設計は最小限に
freeeアプリ作成時にスコープ(権限範囲)を設定する。事前チェック用途なら読み取り権限だけで十分。freee_api_post や freee_api_delete は実データを作成・削除できてしまうので、確認目的ならスコープを絞っておくのが安全。本番データで試す前に、テスト用の事業所で動作確認した方がいい。
事業所の切り替え忘れ
法人を複数持っている場合、freee_get_current_company で今どの事業所を操作しているか確認する癖をつけること。別法人のデータを触ってしまうと面倒なことになる。作業前の1コマンドで防げる。
取得件数の上限
/api/1/deals などのリスト系エンドポイントは、1回のリクエストで取得できる件数に上限がある(デフォルト20件、最大100件)。年間の全取引を確認したいなら、offset パラメータでページ送りするか、期間を月ごとに区切って取得する。
確定申告前の5分チェックリスト
まとめると、freee MCPで確定申告前にやるべき事前チェックはこの4つ。
□ 未分類・未確定取引の洗い出し(/api/1/deals → status=unsettled)
□ 勘定科目の偏りチェック(/api/1/deals → 月別集計で異常値検出)
□ 未入金請求書の確認(/api/1/invoices → payment_status=unsettled)
□ 試算表の確認(/api/1/reports/trial_pl, trial_bs)
全部ターミナルから、自然言語で聞くだけ。所要時間は慣れれば5分。
freeeの画面でフィルターかけてスクロールして、を繰り返していた作業が消えた。正直、確定申告が怖くなくなった——は言い過ぎか。でも「漏れてないかな」の不安は確実に減った。
MCPは「繋いだ」で終わらせるともったいない。実務の中で「これ毎回やってるな」という作業にぶつけると、一気に価値が出る。freee MCPの場合、確定申告前の事前チェックがちょうどいいユースケースだった。