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

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

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

視点

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

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

既存のPubMed検索CLIを、Claude Codeから呼べるMCPツールとして包むデモ。
CLIをMCPで包む構造を示した画面
CLI、FastMCP、Claude Code登録の3ステップで見る。
ClaudeがMCPツールを呼ぶ流れの画面
ツール選択、実行、整形の流れを確認する。

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

  • 「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で集めたデータをどう改善に繋げるか、実装の段階に進みます。


セルフチェック

1. 「自作MCPサーバー」とは何ですか?

2. Lesson 04で作ったPubMed検索ツールをMCPで包むと、何ができるようになりますか?

3. 自作MCPをGitHubに公開する意味として、レッスンで強調されていたのは?

明日のアクション

今日の宿題は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を作る側」になりました。