1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

freee MCPで確定申告の事前チェックを自動化した — 仕訳漏れ・売上突き合わせをターミナルから5分で

1
Last updated at Posted at 2026-03-20

確定申告の前日。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つだけ。

  1. freee Developers(developer.freee.co.jp)でアプリ登録。コールバックURLに http://localhost:3000/callback を設定
  2. .mcp.json にClient IDとClient Secretを書く
  3. 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/dealsstatus=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/invoicespayment_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/dealstype=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_postfreee_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の場合、確定申告前の事前チェックがちょうどいいユースケースだった。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?