1. Hello World
- Claude Desktopを用いたMCP Server Hands-onです
- この回ではMCPのHello Worldコードを作成します
1. claude_desktop_config.json の作成
PATHは個人の環境に合わせて変更してください。ポイントとしては、
-
command
: venvで作成したpythonの指定 -
args
: 以下で作成するhello_mcp_server.py
の絶対PATH
claude_desktop_config.json
{
"mcpServers": {
"hello-mcp-server": {
"command": "/<your workdir>/venv/bin/python",
"args": [
"/<your workdir>/src/hello_mcp_server.py"
]
}
}
}
2. hello_mcp_server.pyの作成
workdirに移動し、Pythonスクリプト hello_mcp_server.py
を作成します。このスクリプトをHello World MCP Server として起動させます。
cd <your workdir>
vim hello_mcp_server.py
hello_mcp_server.py
#!/usr/bin/env python3
"""
最もシンプルなMCPサーバー - Hello World (FastMCP版)
挨拶機能を提供するMCPサーバー
"""
from fastmcp import FastMCP
# MCPサーバーインスタンスの作成
mcp = FastMCP("hello-mcp-server")
@mcp.tool()
def greet_person(name: str) -> str:
"""指定された名前で丁寧に挨拶します"""
return f"こんにちは、{name}さん!\nHello World MCPサーバーへようこそ!"
if __name__ == "__main__":
mcp.run()
3. テストプロンプトの実行
田中さんに挨拶してください
2. Hello World 改善版
2.1 MCPサーバはどのように選択される?
複数登録されたツールから、どのように適切なMCPサーバが選択されるのか?を理解して、先程のコードを改善してみます。
2.1 LLMがMCPサーバを選択し回答するまでの流れ
- Claude Desktop が起動時に接続中の MCP サーバーへ handshake → tools/list を行い、ツール名・説明・JSON スキーマを把握
- ユーザープロンプトを読んだモデルが「このツールを呼べば解決が速い」と判断すると、tools/call を発行(必要なら承認 UI)
- 応答(戻り値)を受け取り、最終回答に自動で統合して返す
2.2. どうすれば hello-mcp-server が選ばれやすくなる?
-
関数名・docstring を具体的に:
- greet_person/「指定された名前で丁寧に挨拶します」のように、以下を入れるとマッチ率が上がります
- 目的語(挨拶・名前)
- 期待結果(文章で返す)
- greet_person/「指定された名前で丁寧に挨拶します」のように、以下を入れるとマッチ率が上がります
-
引数スキーマを明確に:
- 型ヒント・必須引数を適切に。モデルが自動で引数を埋めやすくなります
-
トリガー語を含める:
- docstring に “greet / 挨拶 / hello / welcome” のような関連語を入れておくと、意味検索で拾われやすい
2.3. Hello World 改善版
#!/usr/bin/env python3
"""
Hello Greeting MCP Server
ユーザーに対して挨拶メッセージを返すシンプルなサーバー。
「挨拶して」「greet」「hello」などの入力に対応します。
"""
from fastmcp import FastMCP
from typing import Literal
mcp = FastMCP("hello-mcp-server")
@mcp.tool()
def greet_person(
name: str,
lang: Literal["ja", "en"] = "ja"
) -> str:
"""
名前を指定すると、その人に挨拶を返します。
- ユーザーが「挨拶」「hello」「greet」などと入力した場合に利用されます。
- lang="ja" で日本語、lang="en" で英語の挨拶を返します。
"""
if lang == "en":
return f"Hello, {name}! Welcome to the Hello World MCP server!"
return f"こんにちは、{name}さん!\nHello World MCPサーバーへようこそ!"
if __name__ == "__main__":
mcp.run()
2.4. テスト
Please greet to Tanaka-san
Appendix
FastMCP以外にどのようなライブラリがある?
1. 公式 Python SDK (mcp
)
-
Anthropic が公開している 公式の Python 用ライブラリ。
-
特徴:
- MCP プロトコルを一から扱える(低レベル API)
-
Tool
,Resource
,Server
などを手動で定義する - 柔軟だが、コード量はやや多い
2. FastMCP
-
ユーザーが最初に貼ってくれたライブラリ。
-
リポジトリ: github.com/jlowin/fastmcp
-
特徴:
- デコレータベースで 関数を簡単にツール登録できる
- 型ヒントから 自動的に JSON Schema を生成
- 最小限のコードで MCP サーバーを立てたい場合に最適
3. TypeScript/JavaScript SDK
-
Anthropic 公式が提供する TypeScript 向け SDK。
-
特徴:
- Node.js / Bun / Deno など JS ランタイムで MCP サーバーが書ける
- MCP のリファレンス実装に近い
- Web 系開発者向き
4. コミュニティ製ライブラリ
(まだ発展途上ですが、徐々に増えています)
-
LangChain MCP インテグレーション
- LangChain のツールを MCP サーバーとして公開できる仕組みが実験的に進んでいます。
-
Litellm MCP Wrapper
- LLM プロバイダに簡単にアクセスできる MCP ツールサーバー
-
カスタム実装(直書き)
- JSON-RPC over stdio を直接扱って MCP サーバーを書くことも可能。
- 公式の プロトコル仕様 に従えばライブラリ不要
5. どれを使うべき?
Claude Desktop から使うだけなら FastMCP か公式 SDK が現状ベスト
- 素早く試したい: FastMCP
-
柔軟に拡張したい / 本番運用: 公式 Python SDK (
mcp
) - Node.js や Web 環境と統合したい: TypeScript SDK
- 自分で制御したい / 学習目的: JSON-RPC を直書き
Claude Desktop以外ではどのように統合するの?
以下のQiitaでvscodeにContinueの拡張機能インストールし、Hello Worldを実行する方法を記載しています