メインコンテンツへスキップ
実装編:自作MCPサーバーを作る
レッスン 7 / 9|13分で読めます

実装編:自作MCPサーバーを作る

既存MCPじゃ物足りない、自分の道具をClaude Codeに生やしたい。Lesson 04で作ったPubMed検索を、MCPサーバーとして包んで配る。

このレッスンの一行サマリ

MCPを使う側から作る側へ。Lesson 04のPubMed検索を1日でMCPサーバーとして包めば、Claudeに「論文取って」と話すだけで動く。

このレッスンで終わる頃には

  • 「MCPを作る側」の発想が腹落ちしてる
  • Lesson 04のPubMed検索をMCPサーバーとして包める
  • 自分のClaude Codeに「PubMed検索」が道具として生える状態
  • GitHubに公開して、他の人にも配れる

Lesson 06の続き

Lesson 06で 既存のMCPを繋ぐ やり方をやりました。GA / Search Console / DB(Turso/Supabase)。

これらは 公式に用意されてる道具 です。

ここから先のステップは:

公式にない道具を、自分で作って配る。

たとえば、Lesson 04 で作った PubMed 検索ツール。あれは コマンドラインからしか叩けない 状態でした。

これを MCPサーバーとして包む と、Claude Code に「PubMedで小児喘息の論文取って」と話しかけるだけで動く状態になります。

Lesson 04:    pubmed-search "小児喘息"  ← ターミナルで叩く
   ↓ MCPサーバーとして包む
Lesson 07:    Claudeに「小児喘息の論文取って」← 話しかけるだけ

MCPサーバーが繋ぐ3者

01

Claude Code

話しかける側

02

自作MCPサーバー

Claudeから呼ばれる中継ぎ

03

外部API

PubMed等の本体

MCPサーバーって何

MCPサーバー = Claude Code(や対応AI)に 道具を提供する小さなプログラム。

役割
データを取ってくるPubMed検索 / 天気取得 / 自社DBクエリ
データを書き換えるカレンダーに予定追加 / Notion更新
計算する専門領域の独自計算(薬用量・統計処理)
外部APIを叩く自分が普段使うサービスを Claude に繋ぐ

公式MCPがカバーしないものを、自分で作る。それが「自作MCP」。


なぜ作るのか

3つあります。

理由1:自分の作業を完全に手放せる

ターミナルで pubmed-search を叩くのと、Claudeに「論文取って」と話しかけるの、似てるようでだいぶ違います。

前者は「自分が能動的に検索」、後者は「Claudeが文脈を踏まえて検索」。

例:「先週話してた喘息の話、最新の論文ある?」と話せば、Claudeが「喘息」というキーワードを抽出してMCPで検索してくれます。

理由2:他のツールと組み合わせられる

MCPサーバーにすると、Claude Code は 複数のMCPを組み合わせて使う ようになります。

例:「PubMedで小児喘息を検索して、結果を Notion の研究メモページに追記して」

→ PubMed MCP で検索 → Notion MCP で書き込み、を1コマンドで。

理由3:人に配れる

GitHubに公開すれば、同じ専門領域の同僚も claude mcp add の1コマンドで自分用のMCPとして導入できます。

Shin氏は動画で、自作のGSC(Google Search Console)MCPを公開してました。1人が作ると、何百人も恩恵を受ける構造です。


最小MCPサーバー:Hello World

まずは「動く最小単位」を1つ作って、感覚を掴みます。

Claude Codeに、こう投げてください:

Pythonで、最小のMCPサーバーを作ってください。 ツールは1つだけ:hello を呼ぶと「Hello from MCP!」を返す、それだけ。 UVで動かせる形に。

これでだいたい30〜50行の1ファイルが返ってきます。

# 構造のイメージ(Claude Codeが書いてくれる)

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("my-first-mcp")

@mcp.tool()
def hello(name: str = "World") -> str:
    """挨拶を返す"""
    return f"Hello from MCP, {name}!"

if __name__ == "__main__":
    mcp.run()

Claude Code に繋ぐ:

claude mcp add my-first --command "uv run my_mcp.py"

これで Claude Code に「helloツール使って」と話せば、Hello from MCP, World! が返ってきます。

ここまでで MCPサーバーの仕組み が動きました。


既存ツールをMCPで包む3ステップ

01

CLIツール

Lesson 04のpubmed-search

02

MCPで包む

FastMCPで30〜50行

03

Claudeから呼ぶ

話しかけるだけで起動

PubMed検索をMCPで包む

Hello World が動いたら、Lesson 04 で作った PubMed 検索ツールを、MCPの中に入れます。

Claude Codeに:

Lesson 04 で作った PubMed 検索ツール(pubmed-search)を、MCPサーバーとして包んでください。 ツールは1つ:pubmed_search(query, max_results=10) で、論文タイトル・著者・年を返す。 APIキーは環境変数 NCBI_API_KEY から。 UVで動かせる単一ファイル。

これでPubMed MCPが完成します。

繋ぐ:

claude mcp add pubmed --command "uv run pubmed_mcp.py"

繋いだら Claude Code に話しかける:

小児喘息の最新論文10本、タイトルだけ教えて

これで Claudeがあなたのカスタムツールを呼び、PubMedを検索し、結果を整理して返す という連鎖が走ります。


動作確認のフロー

あなた → Claude Code
         "小児喘息の論文取って"
              ↓
Claude Code がツールを選ぶ
   (あなたの pubmed_search MCP)
              ↓
       MCPサーバー起動
              ↓
       PubMed APIを叩く
              ↓
   タイトル・著者・年を整形
              ↓
Claude Code に結果を返す
              ↓
Claude が読みやすく整理
              ↓
あなた ← 「最新10本はこちらです...」

最初は時間がかかるかもしれませんが、1度動いたら、毎日の論文チェックが3秒で終わる ようになります。


GitHubに公開して配る

自作MCPは、GitHubに上げると他の人も使えます。

gh repo create my-pubmed-mcp --public --source=. --push

--public にして、READMEに「使い方」を3行書く:

# my-pubmed-mcp

PubMed 論文検索を Claude Code から使えるようにする MCP。

## 導入

1. `git clone https://github.com/[your-name]/my-pubmed-mcp`
2. `claude mcp add pubmed --command "uv run /path/to/pubmed_mcp.py"`
3. `NCBI_API_KEY` を環境変数で設定(NCBIで無料登録)

## 使い方

Claude Code に話しかけるだけ:「[キーワード] の最新論文取って」

これだけで、世界中の同業者があなたのMCPを使えます。

ソロ開発の 「1人が作って多数が恩恵」 という構造を、自分が提供する側で体感できます。


限界と次の一歩

自作MCPの注意点:

観点注意
APIキーMCPサーバー側の環境変数で管理。GitHub公開時は .env.gitignore で除外
個人情報患者データ等を扱うMCPは公開しない、ローカル専用に
レート制限外部APIのレート制限を踏まえて、リトライ設計を Claude Code に頼む
エラー処理Claude が読み解けるエラーメッセージを返す("Network error: please retry"等)

慣れてきたら、自分の業務ドメインで複数MCPを連結 していくのが次の一歩です。

例:医療職なら、

  • PubMed検索 MCP
  • 厚労省統計 MCP
  • 薬用量計算 MCP
  • 院内マニュアル検索 MCP

これらを束ねて Claude Code に繋ぐと、自分専用の医療AIアシスタント になります。


今日の宿題

3ステップで進めてください。

  1. Hello World MCPを作る(30分)
  2. Lesson 04 の PubMed 検索を MCP に包む(30分)
  3. Claude Code に繋いで、話しかけて動くか確認(10分)

完成したら、GitHubに --public で上げて、READMEを書いておくと将来の自分(と同業者)に役立ちます。


次のレッスン予告

ここまで来ると、もう「MCPを使う側」と「作る側」を行き来できます。

次のLesson 08は データを見て直す(PDCAループ)。MCPで集めたデータをどう改善に繋げるか、実装の段階に進みます。


明日のアクション

今日の宿題は3ステップ

  1. Hello World MCPを作る(30分) Claude Codeに「最小のMCPサーバーをPythonで作って」と頼む
  2. Lesson 04 のPubMed検索ツールをMCPで包む(30分)
  3. Claude Codeに繋いで、自然言語で話しかけて動くか確認(10分)

完成したらGitHubに --public で上げて、READMEを3行書いてください。それであなたは「MCPを作る側」になりました。