経費追跡のためのリモートMCPサーバー構築:ある開発者の実践的レッスン

経費追跡のためのリモートMCPサーバー構築:ある開発者の実践的レッスン

データの管理権限を諦めることなく独自ツールをClaude Desktopに接続する方法

経費追跡のためのリモートMCPサーバー構築:ある開発者の実践的レッスン

経費を記録するたびに、アプリ、スプレッドシート、ブラウザのタブを行き来することになります。これは非常に面倒で、数秒で終わるはずの作業に数分かかってしまいます。もし同僚に話しかけるように自然にAIアシスタントに記録を指示し、それが自分が管理する場所に実際に保存されるとしたらどうでしょうか?

2026年7月16日、開発者のAli Razaは、リモートMCPサーバーを構築してClaude Desktopに接続することで、この問題をどのように解決したかを共有しました。彼の経験は、このソリューションがいかにエレガントであるかと同時に、実際にどこに困難が隠れているかを示しています。

なぜこれが今重要なのか

2026年、AIアシスタントはツールへの主要なインターフェースになりつつあります。しかし、ほとんどのガイドは、ローカルで動作するサンプルやパブリックAPIのみとやり取りするトイプロジェクトの構築を前提としています。第三者に管理権限を渡すことなく、自分のデータやサービスを会話に取り入れようとした瞬間、別の問題群に直面します。これは、それらの問題をエンドツーエンドで解決したストーリーです。

MCPとは何か、なぜ重要なのか?

MCPはModel Context Protocolの略です。これをClaudeとあなたのコードとの間の会話と考えてみてください。Claude Desktopで何かを入力すると、自分が所有するサーバー上にある関数を呼び出すことができます。MCPはその会話の仕組み(リクエストの形式、レスポンスの構造、エラーの処理方法など)を定義します。魔法ではなくプロトコルですが、新たな可能性を開きます。

MCPがなければ、Claudeを個人用経費トラッカーに接続するには、APIを構築し、次にClaudeプラグインを構築し、プラグインのエコシステムが期待通りに機能することを願う必要がありました。MCPを使用すると、いくつかの関数(「経費を追加」、「先月使った額を表示」など)を公開するだけで、Claudeがそれらの呼び出し方を理解します。データはあなたのもののままであり、サーバーもあなたの管理下に残ります。

セットアップ:Razaが構築したもの

このソリューションには主に3つの部分があります:ツール定義層、データベース、そしてClaude Desktopへの接続です。

FastMCPによるツール定義

FastMCPは、Claudeが呼び出せる関数を簡単に定義できるようにするPythonライブラリです。Razaはこれを使用して4つのコアツールを公開しました:

  • add_expense — 新しい取引を記録する
  • get_summary — 経費の統計やトレンドを取得する
  • list_transactions — 最近の経費やフィルタリングされた経費を表示する
  • カテゴリ管理 — タイプ別に経費を整理する

Claudeに「コーヒー代15ドルを記録して」と頼むと、FastMCPがそれを関数呼び出しに変換してサーバーに送信します。

aiosqliteによるデータベースアクセス

単純なアプローチでは標準のSQLiteを使用しますが、これはデータベースがクエリに回答している間ブロックされます。非同期サーバー(待機することなく多くのリクエストを同時に処理するもの)では、ブロックは致命的であり、すべてを停止させてしまいます。Razaはaiosqliteに切り替え、他の作業をフリーズさせることなくデータベースリクエストを実行できるようにしました。

データベース自体は、Pythonの tempfile モジュールによって管理される一時ディレクトリ内に配置されています。これは脆弱に聞こえるかもしれませんが、実際には適応性があります。Razaのデプロイ環境(Horizon)は固定の書き込み可能パスを保証しないため、動的ストレージによってデプロイの摩擦を防ぎます。

Claude Desktopへの接続

サーバーが起動したら、Claude Desktopの設定にカスタムコネクタとして登録します。それ以降、Claude Desktopを開いて経費の処理を依頼すると、リモートサーバーに接続されます。

サーバーのデプロイ

Razaは完成したMCPサーバーをクラウドプラットフォームであるHorizonにデプロイしました。サーバーはノートPC上ではなくリモートで動作します。ローカルで動作するClaude Desktopは、インターネット経由でそれを呼び出します。この分離はスマートです。ノートPCの電源をオンにし続ける必要はなく、Claude Desktopが動作するあらゆるデバイスからサーバーにアクセスできます。

チュートリアルでは教わらない2つのレッスン

これをエンドツーエンドで構築することにより、クイックスタートガイドが見落としがちな問題が浮き彫りになりました。

レッスン1:Windows MSIXのサンドボックス化

Windows版のClaude Desktopは、MicrosoftのモダンなアプリフォーマットであるMSIXパッケージとして提供されています。オペレーティングシステムはファイルシステムを仮想化します。Claude Desktopが通常のWindows設定フォルダーに書き込んでいると思っているとき、実際にはOSが通常のように見せかけているサンドボックス化された場所に書き込んでいます。

Razaは身をもってこれを発見しました。設定ファイルは標準ドキュメントに記載されている場所には存在しませんでした。これを解決するには、単に手順に従うだけでなく、MSIX仮想化がどのように機能するかを理解する必要がありました。

レッスン2:基本を超えたOAuth

ローカル専用のMCPサーバーが外部サービスで認証を行う必要はありません。しかし、サーバーが実際のAPIと通信する(例えば銀行からデータを取得したり、サービスに経費を記録したりする)瞬間から、OAuthが必要になります。そして、OAuthは単に「ログインボタンをクリックする」以上のものです。

次を行う必要があります:

  1. OAuthリダイレクトフローの開始(ユーザーを認可サーバーに送信する)
  2. ユーザーが許可を与えたときに認可コードを受け取る
  3. そのコードをアクセストークンと交換する
  4. トークンを安全に保存する
  5. 有効期限が切れたときにトークンをリフレッシュする

ほとんどの初心者向けチュートリアルはこれらをすべて省略しています。Razaはこれを正しく行うためにOAuth仕様を直接読まなければなりませんでした。

成果:手間のない経費記録

これらの課題に取り組んだ結果、Razaは動作するシステムを完成させました。Claude Desktopでの自然言語による指示(「コーヒー代15ドルを記録、カテゴリは食事」など)がMCP経由でリモートサーバーにルーティングされ、データベースに保存されます。別のアプリやウェブフォームは不要です。

さらに重要なことに、実世界のバグが修正されています。RazaがHorizonにデプロイし、WindowsでClaude Desktopを開くと、問題なく動作します。パスに関する予想外のトラブルも、フローを停止させるトークンの期限切れもありません。

今後の展望

Razaは、マルチステップAIエージェントを構築するためのフレームワークであるLangGraphを使用して、これをエージェントワークフローに拡張しています。目標はステートフルなロジックの追加です。AIは一度に1つのツール呼び出しを実行するだけでなく、計画を立て、複数のステップにわたって実行し、進捗をチェックポイントとして保存し、重要なアクションを実行する前に一時停止して人間の承認を求めることができます。

リポジトリはGitHubで公開されています: github.com/AliRaza3485/test-remote-mcp-server。そのため、MCPやLangGraphを使って構築している場合は、パターンを直接確認できます。

結論

リモートMCPサーバーの構築は、ツールの定義、データベースへの接続、Claude Desktopへのサーバー登録という概要自体はシンプルです。しかし、細部が重要です。Windowsのパッケージング、非同期データベースアクセス、OAuthライフサイクル管理は、特殊なエッジケースではなく、実際のデプロイにおいて不可欠な要素です。Razaの試みは、トイプロジェクトと実用的なシステムの間の隔たりが思っているよりも小さいこと、しかし油断せずに取り組む必要があることを示しています。

メリット

  • データの所有権: 経費データはベンダーのクラウドではなく、ご自身のデータベースに保存されます。
  • 自然なインタラクション: 別のUIやアプリは不要です。わかりやすい英語でClaude Desktopに依頼するだけです。
  • 拡張性: 基盤が整えば、新しいツール(予算アラート、定期経費など)の追加は簡単です。
  • 学習リソース: 公開リポジトリでは、OAuth、非同期データベース、デプロイ時の特殊な挙動に関する実践的なパターンが示されています。
  • 統合: Windows、Mac、その他の動作プラットフォーム上のClaude Desktopとシームレスに連携します。

デメリット

  • 運用上の責任: サーバーはご自身で管理します。障害対応、セキュリティパッチ、データベースのバックアップはご自身の責任となります。
  • デプロイの複雑さ: Horizonなどのプラットフォームによって層が追加されます。ローカル専用を好む場合は、異なるアプローチが必要です。
  • OAuthの学習曲線: サーバーに外部認証が必要な場合は、単にチュートリアルのスニペットをコピーするだけでなく、OAuthフロー全体を理解する必要があります。
  • Claudeへの限定: MCPサーバーはClaude Desktopと通信します。他のAIクライアントで同じツールを使用したい場合は、別途統合が必要になります。
  • Tempfileの脆弱性: データベースの保存にPythonのtempfileを使用することは今のところ機能しますが、後でホスティング環境を切り替える場合は慎重な検討が必要です。

注意事項

この記事は教育目的のものであり、2026年7月16日にDEV CommunityでAli Razaによって報告された実際の開発をまとめたものです。実装を試みる場合は、まずRazaの公開リポジトリと公式のMCPドキュメントを読むことから始めてください。本番環境の作業でこの記事に依拠する前に、元の情報源と照らし合わせてすべての主張を検証してください。ここで説明されているOAuthパターンとデプロイの詳細はRazaの実装に特有のものであり、お使いの環境では異なる選択が必要になる場合があります。本番環境に移行する前に、非本番環境で設定パス、トークンリフレッシュのロジック、およびデータベースアクセスパターンを必ずテストしてください。アクセストークンや秘密情報は適切なセキュリティ手法で取り扱い、バージョン管理にコミットしたりプレーンテキストでログに出力したりしないでください。

よくある質問

Model Context Protocol (MCP) とは何ですか? — MCPは、ClaudeのようなAIアシスタントが自分が管理するサーバーによって公開された関数を呼び出せるようにする標準プロトコルであり、個別のプラグインを構築することなく独自のツールやデータをシームレスに統合できるようにします。

HorizonではなくローカルでMCPサーバーを実行できますか? — はい、サーバーはローカルまたはインターネットアクセスがある任意のプラットフォームでホストできます。HorizonはRazaが選択したものですが、FastMCPとaiosqliteはPythonが動作する場所ならどこでも動作します。

MCPサーバーを構築するにはPythonを知っている必要がありますか? — この例ではPythonとFastMCPを使用していますが、MCPは言語に依存しません。Node.js、Go、Rust、またはその他の言語でMCPサーバーを構築できます。別のライブラリを使用するだけです。

リモートサーバー上にある場合、経費データのセキュリティをどのように維持すればよいですか? — 転送中のデータを暗号化するためにHTTPSを使用し、プライベートネットワーク内または認証の背後でサーバーを実行し、サーバー自体が最新の状態に保たれていることを確認します。OAuthトークンのような機密性の高い資格情報は、プレーンファイルではなく安全なボルトに保存することを検討してください。

リモートサーバーがダウンした場合はどうなりますか? Claude Desktopは動作を停止しますか? — はい、Claude Desktopは利用不能なサーバーにホストされているツールを呼び出すことができなくなります。これが、本番環境のMCPサーバーが通常、監視、バックアップ、および迅速な復旧計画を備えている理由です。

MCPサーバーを使用して、複数のAIアシスタントを同じツールに接続できますか? — MCPはプロトコルベースであるため、理論上は可能です。ただし、Claude Desktopは現在、完全なMCPサポートを備えた主要なクライアントです。他のAIプラットフォームとの統合には、それらのプラットフォームもMCPをサポートしている必要があります。

OAuthトークンはどれくらいの頻度でリフレッシュする必要がありますか? — サービスによって異なります。ほとんどのサービスは、1時間から数日間有効なトークンを発行します。Razaの実装はこれを自動的に処理します。サーバーはトークンを保存し、有効期限が切れる前に更新します。

aiosqliteは通常のSQLiteよりも高速ですか? — 処理速度自体が必ずしも高速というわけではありませんが、非同期コンテキストにおいて安全です。データベースがクエリに回答している間、サーバー全体が停止するのを防ぎます。これは多くのリクエストを同時に処理する際に重要になります。

タグ

#mcp #aiassistant #expensetracking #clouddeployment #pythondev #fastapi #oauth2 #remoteserver

Free field guide

Docker Security Checklist

Lock down your containers from build to runtime — 29 practical controls covering images, runtime flags, secrets, and the daemon. Enter your email — you'll get the PDF instantly, plus new posts on Docker, Linux & security.