: The Fastest Way to Build MCP Servers について
EZ-MCP は、Python/uv と TypeScript/Deno で書かれた、すぐに実行できる単一ファイルの MCP サーバーテンプレートです。MCP サーバーを素早く作成してテストしたい開発者向けで、テンプレートにはコメントによる説明が含まれ、拡張しやすい構成になっています。
主な機能
- 01Python/uv と TypeScript/Deno のテンプレート
- 02単一ファイルで設定が最小限の構成
- 03リソース、ツール、プロンプトの実装例
- 04環境変数による設定
- 05起動メッセージと入力検証の例
活用シーン
- 01ローカルでの MCP サーバーのアイデア検証
- 02スターターテンプレートへのカスタムツールの追加
- 03MCP サーバーの基本構造の学習
MCP 対応
本プロジェクトは MCP サーバーのテンプレートです。サンプルサーバーは、server://info リソース、hello_someone ツール、greeting_prompt プロンプトを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
EZ-MCP: MCP サーバーを最速で構築する方法
2 分以内に MCP サーバーを起動できます! このリポジトリには、Python/uv と TypeScript/Deno の両方に対応した、単一ファイルで完結する MCP サーバーの完全なすぐに実行できるテンプレートが含まれています。
🚀 なぜ EZ-MCP なのか?
- ⚡ 即時セットアップ: コピー、貼り付け、実行 - 複雑な設定は不要です
- 🎯 本番環境対応: 両方のテンプレートが公式の Anthropic SDK を使用しています
- 📚 包括的な例: すべてが動作するコードとともにドキュメント化されています
- 🔧 簡単に拡張可能: 独自のツール、リソース、プロンプトを数分で追加できます
- 💡 実験に最適: MCP のアイデアをローカルでテストする最速の方法です
📁 得られるもの
機能的に同一の、実戦で試された 2 つのテンプレート:
ez-mcp.py- UV を使用した公式 MCP SDK による Python サーバーez-mcp.ts- Deno を使用した公式 MCP SDK による TypeScript サーバー
各テンプレートは、MCP のすべてのコア機能を実演します:
- 📊 リソース: LLM のコンテキスト用の動的データソース
- 🛠️ ツール: LLM がアクションを実行するために呼び出せる関数
- 📝 プロンプト: LLM との対話に再利用可能なテンプレート
- ⚙️ 設定: 環境変数のサポート
⚡ クイック試用
これらのサーバーが実際に動作する様子を見てみたいですか? 使用する言語を選んで実行してください:
Python 版
# Install uv (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone and run immediately
git clone <this-repo>
cd ez-mcp
uv run ez-mcp.py
TypeScript 版
# Install Deno (if not already installed)
curl -fsSL https://deno.land/install.sh | sh
# Clone and run immediately
git clone <this-repo>
cd ez-mcp
deno run --allow-all ez-mcp.ts
どちらのサーバーもすぐに起動し、利用可能なものを表示します!
🎯 独自のサーバーを作成する (5 分でコピーしてカスタマイズ)
独自の MCP サーバーを構築する最速の方法は、テンプレートの 1 つをコピーしてカスタマイズすることです。両方のテンプレートは機能的に同一で本番環境に対応しています - お好みの言語を選ぶだけです!
Python 開発者の方へ:
-
テンプレートをコピーします:
curl -O https://raw.githubusercontent.com/your-repo/ez-mcp/main/ez-mcp.py # Or just copy the ez-mcp.py file contents from this repo -
名前を変更してカスタマイズします:
cp ez-mcp.py my-awesome-server.py -
サーバーの詳細を編集します (約 160 行目):
mcp = FastMCP( name="My Awesome Server", # <- Change this to your server name dependencies=["mcp>=1.9.0"] ) -
独自のツールを追加します (このパターンをファイル内の任意の場所にコピーします):
@mcp.tool() def my_custom_tool(input_text: str) -> str: """Describe what your tool does""" # Your logic here return f"Processed: {input_text}" -
サーバーを実行します:
uv run my-awesome-server.py
TypeScript/JavaScript 開発者の方へ:
-
テンプレートをコピーします:
curl -O https://raw.githubusercontent.com/your-repo/ez-mcp/main/ez-mcp.ts # Or just copy the ez-mcp.ts file contents from this repo -
名前を変更してカスタマイズします:
cp ez-mcp.ts my-awesome-server.ts chmod +x my-awesome-server.ts -
サーバーの詳細を編集します (約 160 行目):
const server = new McpServer({ name: "My Awesome Server", // <- Change this to your server name version: "1.0.0" }); -
独自のツールを追加します (このパターンをファイル内の任意の場所にコピーします):
server.tool( "my-custom-tool", { input_text: z.string() }, async ({ input_text }) => ({ content: [{ type: "text", text: `Processed: ${input_text}` }] }) ); -
サーバーを実行します:
deno run --allow-all my-awesome-server.ts
🎉 これで完了です!
これで動作する MCP サーバーが手に入りました! テンプレートには、以下を追加するための詳細なインラインドキュメントと例が含まれています:
- データベース接続 (SQLite、PostgreSQL など)
- API 統合 (REST API、GraphQL など)
- ファイル操作 (読み取り、書き込み、検索)
- Web スクレイピング
- 環境変数 と設定
- エラー処理 と検証
テンプレートのコードを読んでみてください - 必要なことをすべて学べるように設計されています!
� MCP クライアントへの接続
サーバーが起動したら、任意の MCP クライアントに接続します:
MCP クライアントの設定
mcp.json ファイルに追加します:
Python サーバー
{
"mcpServers": {
"my-python-server": {
"command": "uv",
"args": ["run", "/absolute/path/to/your-server.py"],
"env": {
"MY_API_KEY": "your-key-here"
}
}
}
}
TypeScript サーバー
{
"mcpServers": {
"my-typescript-server": {
"command": "deno",
"args": ["run", "--allow-all", "/absolute/path/to/your-server.ts"],
"env": {
"MY_API_KEY": "your-key-here"
}
}
}
}
🛠️ 開発とテスト
開発には MCP Inspector を使用する
MCP Inspector は、サーバーをテストするための Web インターフェースを提供します:
Python
# Install the inspector
pip install mcp
# Run with inspector
uv run mcp dev your-server.py
TypeScript
# Install the inspector
npm install -g @modelcontextprotocol/inspector
# Run with inspector
npx @modelcontextprotocol/inspector deno run --allow-all your-server.ts
これにより Web インターフェースが開き、以下が可能になります:
- 🔍 利用可能なツール、リソース、プロンプトを閲覧する
- ▶️ さまざまなパラメータでツールをテストする
- 📖 リソースの内容を表示する
- 🧪 プロンプトを試す
依存関係の追加
Python
.py ファイルの先頭にある dependencies セクションを編集します:
# dependencies = [
# "mcp>=1.9.0",
# "requests", # For HTTP requests
# "pandas", # For data manipulation
# "sqlalchemy", # For database access
# ]
TypeScript
必要なものをインポートするだけです - 残りは Deno が処理します:
import { parse } from "https://deno.land/[email protected]/csv/mod.ts";
import { serve } from "https://deno.land/[email protected]/http/server.ts";
import { DB } from "https://deno.land/x/[email protected]/mod.ts";
💡 実践的な例
クイックファイル検索ツール
# Python
@mcp.tool()
def search_files(pattern: str, directory: str = ".") -> str:
"""Search for files matching a pattern"""
import glob
import os
matches = glob.glob(os.path.join(directory, f"**/*{pattern}*"), recursive=True)
return f"Found {len(matches)} files: {matches[:10]}" # Show first 10
// TypeScript
server.tool(
"search-files",
{ pattern: z.string(), directory: z.string().default(".") },
async ({ pattern, directory }) => {
const matches = [];
for await (const entry of Deno.readDir(directory)) {
if (entry.name.includes(pattern)) {
matches.push(entry.name);
}
}
return {
content: [{ type: "text", text: `Found files: ${matches.join(", ")}` }]
};
}
);
Web スクレイパーツール
# Python (add "requests" to dependencies)
@mcp.tool()
async def scrape_url(url: str) -> str:
"""Scrape text content from a URL"""
import httpx
async with httpx.AsyncClient() as client:
response = await client.get(url)
return response.text[:1000] # First 1000 chars
// TypeScript
server.tool(
"scrape-url",
{ url: z.string() },
async ({ url }) => {
const response = await fetch(url);
const text = await response.text();
return {
content: [{ type: "text", text: text.slice(0, 1000) }]
};
}
);
データベースクエリーツール
# Python (add "sqlite3" - built-in)
@mcp.tool()
def query_db(sql: str) -> str:
"""Execute a SQL query"""
import sqlite3
conn = sqlite3.connect("data.db")
results = conn.execute(sql).fetchall()
conn.close()
return str(results)
// TypeScript
import { DB } from "https://deno.land/x/[email protected]/mod.ts";
const db = new DB("data.db");
server.tool(
"query-db",
{ sql: z.string() },
async ({ sql }) => {
const results = db.queryEntries(sql);
return {
content: [{ type: "text", text: JSON.stringify(results, null, 2) }]
};
}
);
🏗️ テンプレート機能の解説
両方のテンプレートには、すべての MCP 機能を実演するための同一の機能が含まれています:
📊 リソース (データソース)
server://info- 動的なサーバー情報- LLM がアクセスできるデータソースを作成する方法を示します
- 設定、ドキュメント、またはライブデータに最適です
🛠️ ツール(LLM 関数)
hello_someone(Python)/hello-someone(TypeScript)- パラメータの検証と環境変数の使い方を示します
- LLM に呼び出させたいあらゆる関数のテンプレート
📝 プロンプト(テンプレート)
greeting_prompt(Python)/greeting-prompt(TypeScript)- 再利用可能なプロンプトテンプレートの作成方法を示します
- 複雑な指示やワークフローに最適
⚙️ 設定
- 環境変数のサポート(
GREETING_PREFIX) - エラーハンドリングと入力検証
- 本番環境に対応したログ出力と起動メッセージ
� 一般的なユースケース
次のような用途に最適です:
- 🧪 迅速なプロトタイピング: MCP のアイデアを数分でテスト
- 🔧 個人の自動化: 日々のタスク向けのちょっとしたスクリプト
- 📊 データアクセス: LLM をデータベースや API に接続
- 🌐 Web 連携: サイトのスクレイピング、API の呼び出し、データの処理
- 📁 ファイル操作: ファイルの検索、読み取り、書き込み、整理
- 🔍 開発ツール: コード解析、ドキュメント、テスト
- 💼 ビジネスロジック: カスタムワークフローと連携
📚 さらに学ぶ・サポートを受ける
必須リソース
- 📖 MCP 仕様: https://modelcontextprotocol.io/
- 🐍 Python SDK ドキュメント: https://github.com/modelcontextprotocol/python-sdk
- 📜 TypeScript SDK ドキュメント: https://github.com/modelcontextprotocol/typescript-sdk
- � MCP コミュニティ: ディスカッションに参加してサポートを受けましょう
コードを深く掘り下げる
両方のテンプレートファイルには、次の内容を含む豊富なインラインドキュメントが含まれています:
- 行ごとの解説
- 高度な使用パターン
- 連携例(データベース、API、ファイルシステム)
- エラーハンドリングのベストプラクティス
- パフォーマンス最適化のヒント
- 本番環境へのデプロイに関するガイダンス
ソースコードを読んでください - 知っておくべきことすべてを学べるように設計されています!
🤝 コントリビューションとフィードバック
これらのテンプレートが役に立ちましたか?改善のアイデアはありますか?ぜひお聞かせください!
- 🐛 問題の報告や機能の提案
- 📝 あなたの素晴らしい MCP サーバーの作成物を共有
- 🔧 テンプレートへの改善提案を送信
- 📚 ドキュメントの改善にご協力ください
📜 ライセンス
MIT License - これらのテンプレートは自由にご利用いただけます!詳細は LICENSE ファイルをご覧ください。
© Eleanor Berger — ai.intellectronica.net
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。