メインコンテンツへスキップ
AMPL/ dev
開発系講座一覧

自分のMCPを作る

使う側から作る側へ。公式MCPにない自分専用の機能をMCPサーバーとして包む。Pythonで最小構成から始めて、業務固有のツールをClaudeに生やす。

この講座は「AMPL dev 教科書」に移しています。はじめて学ぶ方は、教科書から読んでください。

このレッスンで

終わる頃には、次ができるようになります

  • FastMCPで最小のMCPサーバーを作りuvでClaude Codeに接続できる
  • 既存の計算ロジックや外部APIをMCPツールとして包んで動かせる
  • openFDAは米国添付文書であり日本の臨床判断にそのまま使えないと説明できる

第8回 自分のMCPを作る

「使う側」から「作る側」へ

Lesson 02〜07では、Notion・Slack・PubMed・Calendarという、誰かが作ったMCPを使わせてもらってきました。 ここから先は自分が作る番です。自分の業務に特化した機能、公式MCPにない機能を、Claudeに「道具」として生やします。


なぜ自分で作るのか

なぜ自分で作るのか

1

公式MCPがカバーしていない領域がある

厚労省の薬剤情報DB・CiNiiの日本語論文・学会の演題検索システムには、まだ公式MCPがない

2

自分のツールをClaudeと統合できる

Level 201で作ったPythonスクリプトをMCPで包むと「ターミナルで叩く」が「話しかける」に変わる

3

同業者に配れる

GitHubに公開すれば同じ専門領域の医師・研究者が claude mcp add で使える。1人が作れば何百人の手間が省ける

Level 201:  python pubmed_search.py "小児喘息"  ← ターミナルで叩く
   ↓ MCPで包む
Level 301:  「PubMedで小児喘息の論文を検索して」 ← 話しかけるだけ

事前準備

Pythonと uv がインストールされていることを確認します。

python --version
# Python 3.10以上

uv --version
# バージョンが出ればOK

uv がなければ:

curl -LsSf https://astral.sh/uv/install.sh | sh

ステップ1:Hello World MCPを作る

まず「動く最小単位」を作ります。Claude Codeに以下を投げてください。

Pythonで、最小のMCPサーバーを作ってください。
FastMCPを使って、ツールは1つだけ:
helloというツールを呼ぶと「Hello from my MCP!」を返す、それだけ。
uvで動かせる単一ファイルにしてください。

Claudeが生成するコードはこういう形になります。

from mcp.server.fastmcp import FastMCP

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

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

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

いきなりClaude Codeに繋がず、まずFastMCP・@mcp.tool()・mcp.run()があることを確認し、構文チェックが通るところまで見ます。 これを my_mcp.py として保存します。

Claude Codeに繋ぐ

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

Claude Codeを再起動して:

続けてAIに送る
helloツールを使って

「Hello from my MCP, World!」が返ってきたら成功です。あなたは「MCPを作る側」になりました。


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

Hello Worldが動いたら、実用的なツールをMCPにします。

例:簡易計算ツールのMCP化

Level 101で作った「解熱薬の用量計算ツール」をMCPにします。Claude Codeに:

続けてAIに送る
以下の計算ロジックをMCPサーバーとして包んでください。

ツール名:calc_antipyretic_dose
入力:weight(体重、kg、数値)
出力:アセトアミノフェンの1回量の目安(mg)
計算式:体重 × 10〜15 mg/kg、最大量500mg

FastMCPで、uvで動かせる単一ファイルで。

できあがったMCPを繋ぐと:

続けてAIに送る
体重12.5kgの子の解熱薬の量を計算して

Claudeがツールを呼び出し、計算結果を返します。


ステップ3:外部APIを叩くMCPを作る

実際に外部からデータを取得するMCPです。

どのAPIを使うか

日本のPMDA(医薬品医療機器総合機構)は、誰でも自由に叩ける公開APIを、いまのところ出していません。だから「PMDAのAPIで」とお願いしても、Claudeは動くものを作れません。

仕組みを学ぶには、実際に鍵なしで動くAPIを題材にします。ここでは、米国FDAが公開している openFDA を使います。無料で、APIキーもいりません。 日本語の薬剤データを引きたいときは、KEGG(https://rest.kegg.jp)が同じく鍵なしで使えます。

openFDAは米国の添付文書です。日本の臨床判断にそのまま持ち込むものではありません。今日はあくまで、外部APIをMCPで包む手順を体で覚えるための題材として使います。

例:薬剤情報検索MCP

Claude Codeに:

続けてAIに送る
Pythonで、openFDAのAPIを使って薬剤情報を検索するMCPサーバーを作ってください。

ツール名:search_drug_label
入力:drug_name(一般名、英語の文字列。例: acetaminophen)
出力:適応(indications_and_usage)と警告(warnings)の要点

エンドポイント:
https://api.fda.gov/drug/label.json?search=openfda.generic_name:"<drug_name>"&limit=1
APIキーは不要です。

FastMCPで、uvで動かせる単一ファイルで。
結果が0件のときと、通信に失敗したときのエラー処理も入れて。

コードが生成されたら、動作確認します。

続けてAIに送る
openFDAで acetaminophen の添付文書情報を検索して

うまくいけば、適応と警告の要点が返ってきます。 0件やエラーが返ったら、その文面をそのままClaude Codeに貼って直してもらいます(鍵は扱わないので、貼って困る情報はありません)。


MCPを設計するときの考え方

MCPを設計するときの考え方

1

「何を話しかけたいか」から始める

先にユーザーストーリーを書く。例:「アモキシシリンの子どもの用量」と話しかけたい

2

入力と出力を決める

話しかける内容(入力)と、欲しい返答(出力)を具体化する

3

Claude Codeにコードを書かせる

設計が決まったら詳細な仕様を渡す。コードを自分で書く必要はない

入力出力
薬剤名(文字列)適応・用量・警告の要点
体重(数値) + 薬剤名(文字列)1回量(mg)の目安
疾患名 + 年号範囲論文一覧

GitHubで公開する

完成したMCPをGitHubに上げると、他の人も使えます。

# 新しいリポジトリを作ってプッシュ
gh repo create my-medical-mcp --public --source=. --push

READMEに最低3行書きます。

# my-medical-mcp

小児科外来向けの薬剤情報・用量計算MCPサーバー

## 使い方

1. git clone
2. claude mcp add medical --command "uv run medical_mcp.py"
3. 話しかけるだけ:「アモキシシリンの子どもの用量は?」

公開したらURLをメモしておきます。同僚に「このコマンドを実行するだけで使えるよ」と共有できます。


Level 301 の終わりに

Lesson 01「単体は性能の1割」から始まり、02でMCPの概念を、03でPubMed検索を、04でNotion・Slack・カレンダーを、05でDispatchを、06で5経路の全体像を、07でセキュリティの基準を扱いました。そして08で、使う側から作る側に変わりました。

単体のClaudeから、複数ツールと連携するClaudeへ。この変化は、「AIに聞く」から「AIが動く」への転換です。

次のLevel 401では、さらに複雑なシステム設計と、複数エージェントを協調させる仕組みを扱います。


最終演習:自分専用MCPを1つ作る

このコースの締めくくりとして、以下を達成してください。

テーマ:自分の業務で「毎回手でやってること」を1つMCPにする

  1. 何をMCPにするかを1行で書く(例:「解熱薬の用量計算」「外来後の気づきメモ保存」)
  2. Claude Codeに仕様を伝えてコードを生成させる
  3. 動かして確認する
  4. GitHubに上げる(オプション)

小さくていいです。「話しかけるだけで動く」自分専用の道具が1つできれば、それがLevel 301の卒業基準です。


視点

Level 301 を終えて

「使う側」から「作る側」への移行は、Vibe Codingの本来の姿の一つです。

既存のツールを繋ぐMCPから、自分の業務に最適化したMCPへ。

ここからは、作って・使って・改善するサイクルが続きます。 そのサイクルを回す習慣が、Level 401・501へと続く道です。

このレッスンは役に立ちましたか?