MCPサーバーとは?Claudeと業務をつなぐ「窓口」
MCP(Model Context Protocol)とは、Anthropicが策定したオープンなプロトコルで、ClaudeのようなAIに対して外部のデータやツールを標準化された形で渡すための仕組みです。AIとアプリケーションのあいだに共通の「コンセント」を1つ用意するイメージに近く、対応するソフトであればどれでも同じ差し込み口で接続できます。
MCPサーバーは、その差し込み口の片側を担うプログラムです。自分の業務に必要な機能を「ツール」として公開しておけば、Claude側がそのツールを認識し、必要に応じて呼び出してくれます。たとえば「請求書の未払い一覧を返す関数」をMCPサーバーに登録しておけば、Claudeとの会話のなかで「今月の未払いを教えて」と頼むだけで、Claudeが自動でその関数を実行し、結果を踏まえて回答します。
従来、AIに自社データを扱わせるにはAPIを叩くコードを毎回書くか、ファイルを手作業で貼り付ける必要がありました。MCPはこの部分を規格化したことで、一度サーバーを作れば複数のAIクライアントから再利用できるようになっています。フリーランスにとっては、自分の業務知識をAIに「資産」として持たせられる点が大きな価値です。
本記事では、プログラミングの基礎知識がある個人事業主・フリーランスを対象に、Python製の公式SDKを使って実用的なMCPサーバーをゼロから作り、Claude Desktop / Claude Codeに接続するまでの手順を、実際のコードとともに解説します。
なぜ今、フリーランスがMCPサーバーを自作すべきか
汎用AIだけでは「自分の業務」には踏み込めない
ChatGPTやClaudeは一般的な質問には強い一方、あなたの顧客リスト・見積もり基準・過去案件の経緯といった固有情報は持っていません。毎回コピペで前提を与えるのは現実的ではなく、貼り忘れによるミスも起きます。MCPサーバーで業務データへの入り口を用意すれば、AIが必要なときに必要なぶんだけ自分でデータを取りに行くようになり、前提共有の手間が消えます。
一度作れば複数のAIクライアントで使い回せる
MCPは特定のサービス専用ではなく、対応クライアントであれば共通で利用できます。Claude Desktop、Claude Code、その他のMCP対応エディタなど、接続先が増えてもサーバー側は作り直しが不要です。ツール提供側の実装を一本化できるため、長期的なメンテナンスコストが下がります。
外注していた定型作業を自分の手元に取り戻せる
請求データの集計、案件ステータスの確認、定型レポートの作成といった作業は、人に頼むほどでもないが地味に時間を奪う典型例です。これらをMCPサーバー経由でAIに任せれば、対話するだけで処理が完了します。空いた時間を単価の高い制作・提案業務に振り向けられるのが、個人で動くフリーランスにとって最大の見返りです。
MCPサーバーで自動化できる業務の具体例
実際にフリーランスがMCPサーバー化して効果が出やすい業務を整理します。
- 請求・売上管理:未入金の請求書一覧、月次売上、取引先別の累計を会話で即座に照会する
- 案件管理:進行中案件のステータス、納期が近い案件、見積もり履歴を取得する
- 顧客対応:過去のやり取りや対応方針を検索し、返信文の下書きに反映させる
- リサーチ補助:社内に蓄積した参考資料・ナレッジを検索し、提案書作成に活用する
- ファイル整理:指定フォルダの納品物を一覧化し、命名規則どおりかをチェックする
これらは「データを読み取って返す」処理が中心で、MCPサーバーのツールとして実装しやすい領域です。逆に、不可逆な操作(請求書の削除、外部への送金など)は最初は対象から外し、読み取り専用から始めるのが安全です。
MCPサーバーの全体像と仕組み

MCPサーバーが公開できる要素は、大きく3種類あります。
1. ツール(Tools):AIが呼び出せる関数。引数を受け取り処理を実行して結果を返す。「未払い請求書を返す」などのアクションを担う中心的な要素 2. リソース(Resources):AIが読み取れるデータ。URIで指定でき、ファイルやレコードのように静的・準静的な情報を渡す 3. プロンプト(Prompts):定型の指示テンプレート。「この方針で返信文を作って」といった再利用可能な雛形を提供する
処理の流れはシンプルです。Claudeクライアントが起動時にMCPサーバーへ接続し、「どんなツールがあるか」を問い合わせます。サーバーは公開しているツールの一覧と引数の型を返します。ユーザーがClaudeに依頼すると、Claudeは必要なツールを選び、引数を組み立てて実行を要求します。サーバーは関数を実行し、結果をClaudeに返却します。Claudeはその結果を踏まえて最終的な回答を生成します。
接続方式(トランスポート)は主に2つあります。1つはstdio方式で、サーバーをローカルの子プロセスとして起動し標準入出力でやり取りします。設定が最も簡単で、個人のローカル業務自動化にはこれで十分です。もう1つはHTTP方式で、サーバーをWebサービスとして常駐させ、ネットワーク経由で接続します。複数端末から使う場合や常時稼働させたい場合に向きます。本記事ではまずstdio方式で動かし、HTTP方式への切り替え方も補足します。
開発環境を準備する
必要なものはPython 3.10以降と、公式のMCP Python SDKです。パッケージ管理にはAnthropicが推奨しているuvを使うと、依存関係とサーバー実行をまとめて扱えて楽になります。
“`bash
curl -LsSf https://astral.sh/uv/install.sh | sh
uv init my-mcp-server cd my-mcp-server
uv add “mcp[cli]” “`
`mcp[cli]` を入れると、サーバーをClaude Desktopへ登録するための補助コマンドも一緒に使えるようになります。pip派の場合は仮想環境を作ったうえで `pip install “mcp[cli]”` でも同じ構成になります。
最小のMCPサーバーを作ってみる
まずは動作確認用に、足し算ツールと挨拶リソースを1つずつ持つ最小構成を作ります。`server.py` を作成し、以下を記述します。
“`python from mcp.server.fastmcp import FastMCP
mcp = FastMCP(“Demo”)
@mcp.tool() def add(a: int, b: int) -> int: “””2つの数値を足し算する””” return a + b
@mcp.resource(“greeting://{name}”) def get_greeting(name: str) -> str: “””名前を受け取って挨拶文を返す””” return f”こんにちは、{name}さん”
if __name__ == “__main__”: # 引数なしの run() は stdio トランスポートで起動する mcp.run() “`
ポイントは3つあります。1つ目は `FastMCP` を使っている点で、これは公式SDKに含まれる高レベルAPIです。デコレータを付けるだけでツールやリソースを登録でき、低レベルなプロトコル処理を自分で書く必要がありません。2つ目は関数の型ヒント(`a: int` など)が、そのままClaude側に渡る引数仕様になる点です。3つ目はdocstring(三重引用符のコメント)が、ツールの説明としてClaudeに伝わる点です。説明文が曖昧だとClaudeが誤った使い方をするため、ここは丁寧に書きます。
動作確認はSDK付属の開発ツールで行えます。
“`bash uv run mcp dev server.py “`
ブラウザベースの検証画面が立ち上がり、登録したツールを手動で実行して戻り値を確認できます。Claudeに繋ぐ前にここで挙動を固めておくと、後の切り分けが楽になります。
実用例:請求データを照会するMCPサーバー
最小構成が動いたら、フリーランスらしい実用例に発展させます。ここでは案件ごとの請求情報を持ったCSVを読み込み、「未入金の一覧」と「月次売上」を返すツールを実装します。
“`python import csv from pathlib import Path from mcp.server.fastmcp import FastMCP
mcp = FastMCP(“InvoiceAssistant”) DATA = Path(__file__).parent / “invoices.csv”
def _load() -> list[dict]: with open(DATA, encoding=”utf-8″) as f: return list(csv.DictReader(f))
@mcp.tool() def list_unpaid() -> list[dict]: “””未入金の請求書を一覧で返す””” return [r for r in _load() if r[“paid”] == “no”]
@mcp.tool() def monthly_sales(year_month: str) -> dict: “””指定した年月(例: 2026-05)の売上合計を返す””” rows = [r for r in _load() if r[“issued_at”].startswith(year_month)] total = sum(int(r[“amount”]) for r in rows) return {“year_month”: year_month, “count”: len(rows), “total”: total}
if __name__ == “__main__”: mcp.run() “`
このサーバーを繋いだ状態でClaudeに「今月の未入金を確認して、督促メールの下書きを作って」と頼むと、Claudeは `list_unpaid` を自分で実行し、結果の取引先名・金額を踏まえた文面を生成します。データの取得と文章作成が1回の対話で完結する点が、コピペ運用との決定的な差です。
実務で使う際は、戻り値に個人情報を含めすぎないこと、CSVではなく普段使っている会計ツールのエクスポートに合わせて読み込み処理を差し替えることを意識すると、そのまま日常業務に組み込めます。
Claude Desktop / Claude Code に登録する
サーバーができたら、Claude側から認識させます。用途に応じて2通りあります。
Claude Desktopで使う場合は、付属コマンドで登録できます。
“`bash
uv run mcp install server.py –name “請求アシスタント”
uv run mcp install server.py -f .env “`
実行するとClaude Desktopの設定ファイルにサーバー定義が追記され、Desktopアプリを再起動するとツール一覧に登録したサーバーが現れます。設定ファイルを手で書く場合は、`mcpServers` の項目にコマンドと引数を記述する形式になります。
Claude Codeで使う場合は、CLIから追加します。stdio方式ならコマンドと引数を、HTTP方式ならエンドポイントURLを指定します。
“`bash
claude mcp add –transport http my-server http://localhost:8000/mcp “`
HTTP方式に切り替えたいときは、サーバー側のコードを `mcp.run(transport=”streamable-http”)` に変更し、サーバーを起動した状態で上記コマンドを実行します。複数端末から使う、あるいは常時稼働させたい場合はこちらが便利です。
登録後は、Claudeとの会話で実際にツールが呼ばれるか確認します。意図せず呼ばれない場合は、docstringの説明が不十分なケースが大半なので、関数の説明文を具体的に書き直すと改善します。
自作MCPサーバーのメリットとデメリット
導入を判断するために、利点と注意点を整理します。
メリットは次のとおりです。第一に、業務固有のデータをAIに継続的に持たせられること。第二に、一度作れば複数のClaudeクライアントから再利用でき、追加コストがほぼ発生しないこと。第三に、ツール単位で機能を足していけるため、小さく始めて育てられること。第四に、ローカル完結のstdio方式なら業務データを外部に常時送信せずに済むこと。
デメリットは次のとおりです。第一に、Pythonの基礎とコマンドライン操作が前提になること。完全なノーコードではありません。第二に、AIがツールを呼ぶかどうかは説明文の書き方に左右され、調整に多少の試行錯誤が要ること。第三に、書き込み・削除系の処理を組み込む場合、誤実行を防ぐ設計を自分で考える必要があること。
総じて、定型の照会・集計業務が多いフリーランスほど投資対効果が高く、不可逆操作を含めるほど設計負荷が上がる、という構図です。
導入にかかるコスト
MCPプロトコルとPython SDKそのものは無料のオープンソースで、サーバーをローカルで動かすぶんには追加料金は発生しません。コストとして考えるべきは、サーバーを呼び出すClaude側の利用料です。日常的に業務自動化で使うなら、メッセージ量に対して定額で使えるサブスクリプションプランのほうが、結果的にコストが読みやすくなります。利用頻度が高いフリーランスは上位プランを基準に検討するとよいでしょう。具体的なプラン選定は[AFFILIATE_LINK_001]で最新の料金体系を確認するのが確実です。
常時稼働のHTTP方式にする場合は、サーバーを動かすVPSなどの維持費(月数百円〜千円程度)が別途かかります。ローカルのstdio方式で足りるうちは、この費用は不要です。まずは無料のローカル構成で効果を見極め、必要になってから常駐化を検討する順序が無駄がありません。業務自動化を一段進めたい場合は、外部サービス連携に強い自動化ツールと組み合わせる方法も有効で、導入比較は[AFFILIATE_LINK_002]が参考になります。
よくある質問(FAQ)
質問:プログラミング未経験でも作れますか。 回答:完全な未経験では難しいものの、Pythonの入門書を一冊終えた程度の知識があれば本記事の構成は再現できます。FastMCPがプロトコルの難所を隠してくれるため、必要なのは関数を書く力です。
質問:Claude以外のAIでも使えますか。 回答:MCPはオープンな規格で、対応するクライアントであれば共通で利用できます。サーバー側のコードを変えずに接続先を増やせるのが設計上の利点です。
質問:会計ソフトやスプレッドシートと連携できますか。 回答:各サービスがエクスポートできるCSVを読み込む形なら、本記事の実用例をそのまま応用できます。APIを公開しているサービスなら、ツール関数の中からそのAPIを呼び出す実装も可能です。
質問:データが外部に送信されないか心配です。 回答:stdio方式ならサーバーはローカルの子プロセスとして動き、ツールの戻り値はClaudeとの対話に必要な範囲でのみ渡されます。戻り値に不要な個人情報を含めない設計にすれば、送信範囲を自分でコントロールできます。
質問:作ったサーバーを他のフリーランスに販売できますか。 回答:技術的には配布可能ですが、特定業務向けのテンプレートとして提供する形が現実的です。導入支援込みのサービスにすると、それ自体が新しい収入源になり得ます。
セキュリティと運用上の注意点
最初は読み取り専用ツールから始めるのが鉄則です。削除・送信・支払いといった不可逆操作をいきなり組み込むと、AIの判断ミスがそのまま実害につながります。書き込み系を入れる場合は、実行前に内容を要約して確認を挟む、対象を限定する、といった歯止めを必ず設計に入れます。
認証情報の扱いにも注意します。APIキーやパスワードはコードに直書きせず、環境変数や `.env` ファイルから読み込みます。`.env` はバージョン管理から除外し、誤って公開リポジトリに含めないようにします。ツールの戻り値に機密情報をそのまま含めると、対話ログに残るリスクがあるため、返す情報は業務に必要な最小限に絞ります。
HTTP方式で常駐させる場合は、アクセス制御をかけ、社外ネットワークから直接到達できない構成にします。便利さと引き換えに攻撃面が広がるため、ローカル完結で済むならstdio方式を優先するのが安全です。運用を始めたら、どのツールがどんな引数で呼ばれたかをログに残しておくと、想定外の挙動を早期に発見できます。
つまずきやすいポイントと解決法
実際に作り始めると、同じ場所でつまずく人が多いので、典型的な3つを先回りで共有します。
1つ目は「サーバーは登録できたのにClaudeがツールを使ってくれない」というケースです。原因のほとんどはツールの説明文(docstring)の曖昧さです。Claudeは説明文を手がかりに、どのツールをいつ呼ぶか判断します。「データを返す」のような抽象的な記述では発火しにくいため、「未入金の請求書を取引先名・金額付きで一覧で返す」のように、何を・どんな形で返すのかを具体的に書き直すと改善します。引数名も `x` ではなく `year_month` のように意味の伝わる名前にすると、Claudeが正しい値を組み立てやすくなります。
2つ目は「Claude Desktopにサーバーが現れない」というケースです。登録コマンドは成功しているのに一覧に出ない場合、アプリの再起動を忘れていることが大半です。設定ファイルはアプリ起動時に読み込まれるため、登録後は必ず一度終了して立ち上げ直します。それでも出ない場合は、Pythonの実行パスがClaude Desktop側から見えているかを確認します。仮想環境のPythonを使っているのに絶対パスで指定していないと、アプリ側から実行できず接続に失敗します。
3つ目は「ツールは動くが結果がおかしい」というケースです。これはサーバー単体のバグであることが多いため、Claudeに繋ぐ前に開発ツール(`uv run mcp dev server.py`)で関数を単体実行し、戻り値を目視で確認します。AI連携の不具合に見えても、実際はCSVの列名のズレや日付文字列の比較ミスといった、普通のプログラムのバグであるケースが大半です。切り分けの順序として「まず単体で正しく動くか」「次にClaudeが呼べているか」「最後に説明文の調整」という流れを守ると、原因を素早く特定できます。
この3点を押さえておくだけで、初回の構築で発生するトラブルの大半は自力で解決できます。詰まったときは「サーバー単体の問題か、連携の問題か」を最初に切り分けるのが、遠回りしないコツです。
まとめ:MCPサーバーは「自分専用の業務AI」への第一歩
MCPサーバーの自作は、汎用AIを「自分の業務を理解した相棒」に引き上げる最短ルートです。FastMCPを使えば、関数を書いてデコレータを付けるだけで、Claudeが自分でデータを取りに来てくれる仕組みが完成します。まずは読み取り専用の小さなツールを1つ作り、Claude Desktopに繋いで「対話だけで業務照会が終わる」体験を得てください。そこから請求・案件・顧客と対象を広げていけば、人を雇わずに業務処理能力だけを増やせます。
最初の一歩として、本記事の最小構成をそのまま写経し、自分の業務データに差し替えるところから始めるのがおすすめです。日々の照会・集計に費やしていた時間を取り戻し、単価の高い仕事に集中する。その仕組みづくりを、まずは無料のローカル構成で試してみてください。Claudeの利用プランや連携ツールの選定で迷ったら、[AFFILIATE_LINK_003]から最新情報を確認したうえで、自分の業務量に合った構成を選ぶとよいでしょう。


コメント