e-Tax API を呼び出す MCP サーバーを作ってみた(STEP 2)― 送受信モジュールで自動ログイン

はじめに

前回の記事(STEP 1)では、ブラウザの開発者ツールから「引継ぎ情報」を手動でコピーして Claude に渡す方法をご紹介しました。

今回の STEP 2 では、国税庁が提供する 送受信モジュール(CLICommunication COM DLL) を利用して、ログインから引継ぎ情報取得まで自動化しました。Claude に一言お願いするだけで e-Tax API が呼び出せます。


STEP 1 との違い

STEP 1STEP 2
ログインブラウザで手動自動(COM DLL 経由)
トークン取得DevTools でコピー自動取得
必要な操作毎回コピペlogin_and_set_token を呼ぶだけ

技術的なポイント:32-bit COM DLL との格闘

今回の最大の難所は、国税庁の送受信モジュールが 32-bit の Windows COM DLL であることです。

通常の 64-bit Python からは直接呼び出せないため、以下の構成を取りました。

Claude Desktop(64-bit Python MCP サーバー)
    ↓ サブプロセス起動
com_login.py(32-bit Python)
    ↓ COM 経由
CLICommunication DLL(32-bit)
    ↓
e-Tax 受付システム

64-bit の MCP サーバーが 32-bit Python をサブプロセスとして起動し、COM 呼び出しの結果(引継ぎ情報)を標準出力で受け取る方式です。また、COM メソッドの PROPERTYPUT / METHOD の区別など低レベルな IDispatch 呼び出しへの対応も必要でした。


必要環境

  • OS: Windows のみ(COM DLL のため)
  • Python 3.10 以上(64-bit) — MCP サーバー用
  • Python 3.12(32-bit) — COM DLL 呼び出し用(別途インストールが必要)
winget install Python.Python.3.12 --architecture x86
  • e-Tax デスクトップソフトウェア — Claudeを導入しているPCにインストールする必要があります

セットアップ

# リポジトリをクローン
git clone <repository-url>
cd e-tax-api

# 依存パッケージをインストール
uv sync

# 環境変数を設定
cp .env.example .env

.env に以下を設定します。

ETAX_API_KEY=your_api_key_here          # e-Tax API キー
ETAX_USER_ID=your_user_id_here          # 利用者識別番号(16桁)
ETAX_PASSWORD=your_password_here        # e-Tax ログインパスワード
ETAX_INI_PATH=C:/Program Files (x86)/etax/CLCommunication.ini  #e-Tax デスクトップ

ETAX_USER_IDETAX_PASSWORD は認証情報です。.env を Git にコミットしないでください。


Claude Desktop への登録

%APPDATA%\Claude\claude_desktop_config.json に以下を追記して Claude Desktop を再起動します。

{
  "mcpServers": {
    "e-tax-api": {
      "command": "uv",
      "args": [
        "run",
        "--project",
        "C:/Users/kin/dev/e-tax-api",
        "python",
        "C:/Users/kin/dev/e-tax-api/server.py"
      ]
    }
  }
}

ツールアイコンに login_and_set_token が表示されればe設定完了です。


使い方

自動ログイン

Claude に一言依頼するだけです。

e-Tax にログインしてください。

各種情報の取得

ログイン後はそのまま続けて依頼できます。

「e-Tax のメッセージ一覧を取得してください。」
「基本情報を確認したいです」

利用できるツール一覧

ツール名概要
login_and_set_token自動ログイン・引継ぎ情報取得(STEP 2 新規)
get_message_listメッセージ一覧参照
get_messageメッセージ詳細参照
get_received_data受信データ(申告書 XML)参照
get_basic_info基本情報参照
get_income_tax_info所得税に関する事項参照
get_corporate_tax_info法人税に関する事項参照
get_consumption_tax_info消費税に関する事項参照
(他多数)口座情報・利用者設定など

エラー時の挙動

ユーザーが困らないよう、エラーメッセージは状況に応じて丁寧に案内します。

状況返却メッセージ
Windows 以外で実行Windows 専用である旨を案内
環境変数未設定未設定の変数名を明示し .env 設定を促す
32-bit Python が見つからないインストール方法を案内
ID/パスワード誤り誤りがある旨を案内
通信エラー・タイムアウトネットワーク確認を促す

プロジェクト構成

e-tax-api/
├── server.py       # MCP サーバー本体(64-bit Python)
├── com_login.py    # COM ログインヘルパー(32-bit Python 用)
├── pyproject.toml  # 依存パッケージ定義
└── .env.example    # 環境変数テンプレート

おわりに

API仕様書、API定義書、送受信モジュール仕様書、送受信モジュールインターフェース仕様書等、かなり多くのドキュメントを読まないといけませんが、ほぼAIに解析してもらいながら、試行錯誤して実現しました。

設計書を読み込む際も、Claude Codeは複数サブエージェントを立ち上げ、並行で作業をすすめました。(トークン量もえげつなくなっていきましたが(笑))

32-bit COM DLL をサブプロセス経由で呼び出すという少し変わった構成になりましたが、おかげで Claude から e-Tax への自動ログインが実現できました。


タイトルとURLをコピーしました