tsurutan

📊 freee䌚蚈 MCP Server

Community tsurutan
Updated

freee䌚蚈のMCPサヌバヌ

📊 freee䌚蚈 MCP Server

Build StatusLicenseNode.js VersionTypeScript

freee䌚蚈APIず連携するModel Context Protocol (MCP) Serverです。

🎯 抂芁

このプロゞェクトは、freee䌚蚈APIを通じお䌚蚈デヌタにアクセスし、AI アシスタントが䌚蚈業務を支揎できるようにするMCPサヌバヌを提䟛したす。

⚡ 機胜

📄 Resources

  • 事業所情報の取埗 (companies://list, companies://current)
  • 勘定科目䞀芧の取埗 (account-items://list)
  • 取匕先情報の取埗 (partners://list)
  • 郚門情報の取埗 (sections://list)
  • 品目情報の取埗 (items://list)
  • メモタグ情報の取埗 (tags://list)
  • 取匕デヌタの取埗 (deals://list)
  • 詊算衚デヌタの取埗 (trial-balance://current)

🔧 Tools

  • 🔐 認蚌管理 (generate-auth-url, exchange-auth-code, check-auth-status)
  • ✅ 接続テスト (test-connection)
  • 💰 取匕管理 (create-deal, update-deal, get-deals)
  • 🏢 取匕先の䜜成 (create-partner)
  • 📊 勘定科目の䜜成 (create-account-item)
  • 📈 システム監芖 (get-rate-limit-info, get-logs, get-metrics, get-health)
  • 🗄 キャッシュ管理 (get-cache-stats, clear-cache)

💡 Prompts

  • 🚀 セットアップガむド (setup-guide)
  • ✏ 取匕入力支揎 (transaction-entry)
  • 📅 月次決算チェックリスト (monthly-closing)
  • 📊 詊算衚分析ガむド (trial-balance-analysis)

🏗 プロゞェクト構成

mcp-server/
├── 📁 apps/
│   └── freee-accounting/     # freee䌚蚈MCP server
├── 📁 packages/
│   ├── shared/               # 共通ラむブラリ
│   └── types/                # 型定矩
├── 📁 docs/
│   ├── SPECIFICATION.md      # 仕様曞
│   └── freee-mcp-todo.md     # 開発タスク䞀芧
├── 📄 package.json
├── 📄 turbo.json
└── 📄 README.md

✹ 特城

  • 🔐 OAuth 2.0認蚌: freee公匏認蚌フロヌに完党準拠
  • 🏢 事業所ID蚭定: 環境倉数で事業所IDを蚭定可胜デフォルト: 123456
  • 💰 包括的な取匕管理: 取匕の䜜成・曎新・䞀芧取埗をサポヌト
  • 🛡 型安党: TypeScriptによる完党な型定矩
  • 📊 モノレポ構成: 共通ラむブラリずアプリケヌションの分離
  • 🔄 MCP準拠: Model Context Protocolの仕様に完党準拠
  • ⚡ レヌト制限察応: 自動的なレヌト制限管理ずリトラむ機胜
  • 📊 包括的なログ: レベル別ログ機胜ず運甚監芖
  • 🚚 ゚ラヌハンドリング: 詳现な゚ラヌ情報ずリトラむ可胜性の刀定
  • 💟 認蚌情報氞続化: トヌクンの自動保存・埩元機胜
  • 🚀 高性胜キャッシュ: メモリベヌスキャッシュによる高速レスポンス
  • 🔒 セキュリティ匷化: トヌクン暗号化、セキュリティ監査、入力倀怜蚌
  • 📈 監芖・メトリクス: リアルタむム監芖、ヘルスチェック、アラヌト機胜
  • 🏭 プロダクションレディ: 䌁業レベルでの運甚に察応

🚀 セットアップ

📋 前提条件

  • Node.js Node.js 18.0.0以䞊
  • npm npm 9.0.0以䞊

📊 むンストヌル

# 䟝存関係のむンストヌル
npm install

# 開発甚ビルド
npm run dev

# 本番甚ビルド
npm run build

⚙ 環境倉数蚭定

.envファむルを䜜成し、以䞋の環境倉数を蚭定しおください

🔐 OAuth 2.0認蚌
# OAuth蚭定
FREEE_CLIENT_ID=your_client_id
FREEE_CLIENT_SECRET=your_client_secret
FREEE_REDIRECT_URI=your_redirect_uri

# 事業所ID蚭定䞋蚘「事業所IDの取埗方法」を参照
FREEE_COMPANY_ID=123456

# オプション蚭定
FREEE_API_BASE_URL=https://api.freee.co.jp

⚠ 泚意:

  • OAuth認蚌では事業所遞択機胜を制埡できたす。
  • 事業所遞択を有効にするず、認蚌時に特定の事業所を遞択しおアクセスを制限できたす。
  • 事業所遞択を無効にするず、ナヌザヌが所属する党おの事業所にアクセス可胜になりたす。
  • リダむレクトURIの蚭定は必須ではありたせん。蚭定しない堎合は urn:ietf:wg:oauth:2.0:oob が䜿甚されたす。

🏢 事業所IDの取埗方法

事業所IDを取埗する方法は耇数ありたす

  1. 🌐 freee Web版から取埗

    • freee Web版にログむンし、蚭定画面やURLから事業所IDを確認できたす
    • ブラりザのアドレスバヌで https://secure.freee.co.jp/companies/XXXXXX のXXXXXXが事業所IDです
  2. 🔌 API経由で取埗

    • 認蚌埌、get-companies ツヌルを䜿甚しお利甚可胜な事業所䞀芧を取埗できたす
    • レスポンスの id フィヌルドが事業所IDになりたす
  3. 🀖 Claude Code経由で取埗

    • Claude Codeで「利甚可胜な事業所を教えおください」ずリク゚ストするこずで確認できたす

⚠ 重芁な免責事項

🚚 本MCPサヌバヌに぀いお

  • 本MCPサヌバヌは非公匏のものです
  • freee株匏䌚瀟によっお開発・サポヌトされおいるものではありたせん
  • 本゜フトりェアの䜿甚によっお生じた䞀切の損害に぀いお、開発者は責任を負いたせん
  • 本番環境での䜿甚は自己責任でお願いしたす
  • デヌタの正確性や完党性に぀いお保蚌するものではありたせん

🀖 Claude Codeでの䜿甚方法

このMCPサヌバヌをClaude Codeで䜿甚するには、以䞋の手順でむンストヌルしおください

1⃣ MCP蚭定の远加

Claude Codeに以䞋のコマンドでMCPサヌバヌを远加したす

# プロゞェクトをビルド
npm run build

# MCPサヌバヌを远加
claude mcp add freee-accounting \
  -e FREEE_CLIENT_ID=your_client_id \
  -e FREEE_CLIENT_SECRET=your_client_secret \
  -e FREEE_REDIRECT_URI=http://localhost:3000/callback \
  -- node /path/to/mcp-server/apps/freee-accounting/dist/index.js

# 蚭定を確認
claude mcp list
claude mcp get freee-accounting

2⃣ Claude Codeでの䜿甚

MCPサヌバヌがむンストヌルされるず、Claude Codeで以䞋のリ゜ヌスずツヌルが利甚できたす

  • 📊 䌚蚈デヌタの取埗: 取匕、勘定科目、取匕先などの情報
  • ✏ 取匕の䜜成・曎新: 新芏取匕の入力や既存取匕の修正
  • 📈 詊算衚の分析: 月次・幎次の財務デヌタの分析
  • 🔐 認蚌管理: freee APIぞの認蚌ずアクセス管理

3⃣ 䜿甚䟋

Claude Codeで以䞋のようにMCPサヌバヌを掻甚できたす

# 取匕デヌタの取埗
"12月の売䞊取匕を確認しおください"

# 新芏取匕の䜜成
"消耗品費ずしお3000円の取匕を䜜成しおください"

# 詊算衚の分析
"今月の損益蚈算曞を分析しおください"

🔧 埓来の䜿甚方法

🔐 認蚌の蚭定

OAuth認蚌の堎合
  1. freeeアプリケヌションの䜜成

  2. 環境倉数を蚭定

    export FREEE_CLIENT_ID="your_client_id"
    export FREEE_CLIENT_SECRET="your_client_secret"
    export FREEE_REDIRECT_URI="http://localhost:3000/callback"
    
  3. MCP Serverを起動

    npm run build && node apps/freee-accounting/dist/index.js
    
  4. OAuth認蚌フロヌの実行

    a. 認蚌URLを生成:

    # 事業所遞択を有効にしお認蚌URL生成掚奚
    generate-auth-url --enable_company_selection=true
    
    # たたは事業所遞択を無効にしお党事業所アクセス
    generate-auth-url --enable_company_selection=false
    

    b. 生成されたURLにブラりザでアクセス:

    • freeeアカりントでログむン
    • 事業所を遞択enable_company_selection=trueの堎合
    • アプリケヌションのアクセス暩限を確認
    • 「蚱可する」をクリック

    c. 認蚌コヌドを取埗:

    • リダむレクトURLのcodeパラメヌタから認蚌コヌドを取埗

    d. 認蚌コヌドをアクセストヌクンに亀換:

    exchange-auth-code --code="取埗した認蚌コヌド"
    
  5. 認蚌状態の確認

    check-auth-status
    

📖 基本的な䜿甚䟋

# 認蚌状態の確認
check-auth-status

# 事業所䞀芧の取埗
companies://list

# 取匕䞀芧の取埗過去30日
get-deals

# 取匕䞀芧の取埗幎月指定
get-deals --year 2024 --month 12

# 取匕䞀芧の取埗日付範囲指定
get-deals --start_date 2024-12-01 --end_date 2024-12-31

# 取匕の䜜成事業所ID自動蚭定
create-deal

🏗 アヌキテクチャ

🔧 レむダヌ構成

このプロゞェクトは、クリヌンアヌキテクチャの原則に基づいお蚭蚈されおいたす

┌─────────────────────────────────────────────────────────────┐
│                    Presentation Layer                       │
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐ │
│  │   MCP Server    │  │   Handlers      │  │   Middleware    │ │
│  │   (Express)     │  │   (Tools/Res)   │  │   (Auth/Log)    │ │
│  └─────────────────┘  └─────────────────┘  └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
                                │
┌─────────────────────────────────────────────────────────────┐
│                   Application Layer                         │
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐ │
│  │   Use Cases     │  │   Services      │  │   Validators    │ │
│  │   (Business)    │  │   (Auth/Data)   │  │   (Input/Rule)  │ │
│  └─────────────────┘  └─────────────────┘  └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
                                │
┌─────────────────────────────────────────────────────────────┐
│                  Infrastructure Layer                       │
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐ │
│  │  API Client     │  │  Response       │  │  Debug/Log      │ │
│  │  (freee API)    │  │  Mapper         │  │  (Interceptor)  │ │
│  └─────────────────┘  └─────────────────┘  └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
                                │
┌─────────────────────────────────────────────────────────────┐
│                     Domain Layer                            │
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐ │
│  │   Entities      │  │   Value Objects │  │   Domain Rules  │ │
│  │   (Company/Deal)│  │   (Money/Date)  │  │   (Validation)  │ │
│  └─────────────────┘  └─────────────────┘  └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘

🔧 むンフラ局の䞻芁コンポヌネント

🌐 FreeeApiClient
  • freee APIずの通信を担圓する統䞀むンタヌフェヌス
  • レヌト制限、リトラむ、キャッシュ機胜を内蔵
  • デバッグ機胜ずログ機胜を統合
🔄 ApiResponseMapper
  • freee APIレスポンスの暙準化ずマッピング
  • 型安党なデヌタ倉換
  • ペヌゞネヌション情報の抜出
🔍 DebugInterceptor
  • HTTP リク゚スト/レスポンスのデバッグ出力
  • MCP Inspector察応
  • 機密情報のマスキング機胜
📊 LoggerSetup
  • 環境別ログ蚭定の管理
  • プロファむルベヌスの蚭定切り替え
  • 構造化ログずファむル出力

🔌 䟝存性泚入

InversifyJSを䜿甚したDIコンテナにより、各レむダヌ間の疎結合を実珟

// 䟋: サヌビスクラスでの䟝存性泚入
@injectable()
export class AuthService {
  constructor(
    @inject(TYPES.FreeeApiClient) private apiClient: FreeeApiClient,
    @inject(TYPES.Logger) private logger: Logger,
    @inject(TYPES.ErrorHandler) private errorHandler: ErrorHandler
  ) {}
}

🚚 ゚ラヌハンドリング

Result型パタヌンを採甚し、型安党な゚ラヌハンドリングを実珟

// 成功・倱敗を明瀺的に衚珟
const result = await authService.authenticate(token);
if (result.isOk()) {
  // 成功時の凊理
  console.log(result.value);
} else {
  // ゚ラヌ時の凊理
  console.error(result.error);
}

🛠 開発

📋 利甚可胜なスクリプト

  • npm run build - 党パッケヌゞのビルド
  • npm run dev - 開発モヌドでの実行
  • npm run test - テストの実行
  • npm run lint - リントの実行
  • npm run type-check - 型チェックの実行
  • npm run format - コヌドフォヌマットの実行
  • npm run debug - MCP Inspector を䜿甚したデバッグ開発版
  • npm run debug:build - MCP Inspector を䜿甚したデバッグビルド版
  • npm run inspect - MCP Inspector を䜿甚したむンタラクティブテスト開発版
  • npm run inspect:build - MCP Inspector を䜿甚したむンタラクティブテストビルド版

🏗 開発環境

このプロゞェクトはmonorepo構成でTurborepoを䜿甚しおいたす。各パッケヌゞは独立しお開発・テストできたす。

📊 ES Module察応

プロゞェクトは完党にES Moduleに察応しおおり、以䞋の特城がありたす

  • 党パッケヌゞで"type": "module"を蚭定
  • TypeScriptからES Moduleぞの自動倉換
  • 盞察むンポヌトの自動修正.js拡匵子の远加
  • Node.js 18+での最適化されたパフォヌマンス
🔧 ビルドプロセス
  1. TypeScript コンパむル: ゜ヌスコヌドをES Moduleずしおコンパむル
  2. むンポヌト修正: 盞察むンポヌトに.js拡匵子を自動远加
  3. 型定矩生成: .d.tsファむルの生成
  4. 䟝存関係解決: パッケヌゞ間の䟝存関係を自動解決

🔍 デバッグ

MCP Inspector を䜿甚したデバッグ

MCP Inspector は、MCPサヌバヌをむンタラクティブにテスト・デバッグするためのツヌルです。

🚀 基本的な䜿甚方法
# 開発版TypeScriptでのデバッグ
npm run debug

# ビルド版JavaScriptでのデバッグ
npm run debug:build

# たたは、個別のアプリケヌションで実行
cd apps/freee-accounting
npm run debug
MCP Inspector の機胜
  • Resources タブ: 利甚可胜なリ゜ヌスの䞀芧衚瀺ずテスト
  • Prompts タブ: プロンプトテンプレヌトの衚瀺ずテスト
  • Tools タブ: ツヌルの䞀芧衚瀺ず実行テスト
  • Notifications ペむン: サヌバヌからのログず通知の衚瀺
デバッグワヌクフロヌ
  1. 開発開始

    npm run debug
    
  2. HTTPリク゚スト/レスポンスのデバッグ

    # axiosのリク゚スト/レスポンスをコン゜ヌルに衚瀺
    DEBUG_AXIOS=true npm run debug
    
    # たたは環境倉数を蚭定しおから実行
    export DEBUG_AXIOS=true
    npm run debug
    

    デバッグモヌドでは以䞋の情報が衚瀺されたす

    • 🔐 OAuth認蚌リク゚スト/レスポンス機密情報はマスク
    • 📡 freee APIリク゚スト/レスポンスアクセストヌクンはマスク
    • ❌ ゚ラヌ詳现情報
  3. Inspector GUI での操䜜

    Server Connection Paneサヌバヌ接続蚭定:

    • Transport: stdio を遞択デフォルト
    • Command: tsx たたは node
    • Arguments:
      • 開発版: apps/freee-accounting/src/index.ts
      • ビルド版: apps/freee-accounting/dist/index.js
    • Environment Variables: 必芁に応じお環境倉数を蚭定

    Resources タブでのテスト:

    • companies://list - 事業所䞀芧の取埗
    • companies://current - 珟圚の事業所情報
    • account-items://list - 勘定科目䞀芧
    • partners://list - 取匕先䞀芧
    • deals://list - 取匕デヌタ䞀芧
    • trial-balance://current - 詊算衚デヌタ

    Tools タブでのテスト:

    • generate-auth-url - OAuth認蚌URL生成匕数䞍芁
    • check-auth-status - 認蚌状態確認匕数䞍芁
    • test-connection - 接続テスト匕数䞍芁
    • get-health - ヘルスチェック匕数䞍芁
    • create-deal - 取匕䜜成JSON圢匏で取匕デヌタを入力
    • create-partner - 取匕先䜜成JSON圢匏で取匕先デヌタを入力

    Prompts タブでのテスト:

    • setup-guide - セットアップガむド匕数䞍芁
    • transaction-entry - 取匕入力支揎匕数䞍芁
    • monthly-closing - 月次決算チェックリスト匕数䞍芁
    • trial-balance-analysis - 詊算衚分析ガむド匕数䞍芁
  4. 反埩テスト

    • サヌバヌコヌドを倉曎
    • サヌバヌを再ビルド
    • Inspector を再接続
    • 圱響を受ける機胜をテスト
    • Notifications ペむンでメッセヌゞを監芖
  5. ゚ッゞケヌスのテスト

    • 無効な入力倀でのツヌル実行
    • 䞍足しおいるプロンプト匕数
    • 䞊行操䜜のテスト
    • ゚ラヌハンドリングず゚ラヌレスポンスの確認
環境倉数の蚭定

デバッグ時は、.env ファむルに以䞋の環境倉数を蚭定しおください

# freee API蚭定
FREEE_CLIENT_ID=your_client_id
FREEE_CLIENT_SECRET=your_client_secret
FREEE_REDIRECT_URI=http://localhost:3000/callback
FREEE_API_BASE_URL=https://api.freee.co.jp

# デバッグ蚭定
DEBUG=true
LOG_LEVEL=debug
具䜓的なテスト䟋

1. OAuth認蚌フロヌのテスト:

Tools タブ → generate-auth-url → Execute
→ 生成されたURLでブラりザ認蚌
→ exchange-auth-code → 認蚌コヌドを入力 → Execute
→ check-auth-status → Execute認蚌状態確認

2. 基本デヌタ取埗のテスト:

Resources タブ → companies://list → Load
→ account-items://list → Load
→ partners://list → Load

3. 取匕䜜成のテスト:

Tools タブ → create-deal → 以䞋のJSONを入力:
{
  "issue_date": "2024-01-15",
  "type": "income",
  "company_id": 123456,
  "details": [
    {
      "account_item_id": 1,
      "amount": 10000,
      "tax_code": 1
    }
  ]
}

4. システム監芖のテスト:

Tools タブ → get-health → Execute
→ get-metrics → Execute
→ get-rate-limit-info → Execute
トラブルシュヌティング
  • 接続゚ラヌ: 環境倉数が正しく蚭定されおいるか確認
  • 認蚌゚ラヌ: freee APIの認蚌情報が有効か確認
  • レヌト制限: API呌び出し頻床を調敎

プロゞェクト状況

🎉 プロゞェクト完了

freee䌚蚈 MCP Serverは、5぀のフェヌズを経お完党に実装され、プロダクションレディな状態に到達したした

  • Phase 1-2: 基本機胜・OAuth認蚌・基本リ゜ヌス・ツヌル実装 ✅
  • Phase 3: 残りのリ゜ヌス・ツヌル・Prompts・認蚌情報氞続化 ✅
  • Phase 4: レヌト制限察応・゚ラヌハンドリング匷化・ログ機胜・テスト実装 ✅
  • Phase 5: パフォヌマンス最適化・セキュリティ匷化・監芖機胜・ドキュメント充実 ✅

実装枈み機胜

  • 8皮類のResources: 事業所、勘定科目、取匕先、郚門、品目、メモタグ、取匕、詊算衚
  • 12皮類のTools: 認蚌、CRUD操䜜、システム監芖、キャッシュ管理
  • 4皮類のPrompts: セットアップ、取匕入力支揎、月次決算、詊算衚分析
  • 䌁業レベルの運甚機胜: 監芖、メトリクス、セキュリティ、パフォヌマンス最適化

ラむセンス

MIT License

貢献

プルリク゚ストやむシュヌの報告を歓迎したす。詳现はdocs/development/配䞋の芏玄をご確認ください。

MCP Server · Populars

MCP Server · New