DevTools MCP
DevTools MCP
MCP をサーバー実装からローカルテスト、既存 MCP の利用、パブリックデプロイ、Smithery への公開までエンドツーエンドで学ぶために作った、小規模な開発者向けユーティリティ MCP サーバーです。
1. 概要
DevTools MCP は、Model Context Protocol 上で 4 つの小規模な開発者向けツールを公開します。エラーメッセージの説明、JSON の検証・整形、説明文からの正規表現生成、LLM(Groq)によるテキスト要約です。最小限の TypeScript/Vite 製ダッシュボードにより、実際の MCP クライアントとして接続し、ブラウザからこれらのツールを実行できます。
Related MCP server: Log Analyzer MCP
2. なぜ MCP か
MCP は、LLM ホスト(Claude Desktop、IDE、エージェント)がツールを発見して呼び出す方法を標準化します。個々のプロジェクトが独自の tool-calling API を発明する必要はありません。MCP とラベルを貼っただけの REST API ではなく、実際の MCP サーバーを構築することが、このプロジェクトの主な学習目標でした。
3. アーキテクチャ
MCP Client
|
MCP Protocol
|
DevTools MCP Server
|-- explain_error (local/deterministic)
|-- format_json (local/deterministic)
|-- generate_regex (local/deterministic)
`-- summarize_text
|
Groq API
|
GPT-OSS 120Bサーバー (server/server.py) は mcp.server.MCPServer(MCP Python SDK v2)です。ローカルテストでは stdio 経由で実行され(MCP Inspector、Client(mcp))、リモート・ブラウザアクセスには Streamable HTTP(/mcp)経由で実行されます。TypeScript フロントエンド (frontend/) は本物の MCP クライアントです。@modelcontextprotocol/sdk の Client と StreamableHTTPClientTransport を使い、手作りの REST ブリッジではなく、Streamable HTTP(サーバー側で CORS 有効)経由で直接サーバーと通信します。
4. ツール
ツール | 入力 | 説明 |
|
| エラーを一般的なエラーパターン(Python/JS/一般)のライブラリと照合し、考えられる原因と実践的な修正方法を返します。ローカルで完結し、決定的です。 |
|
| JSON を検証し、プリティプリントした結果を返すか、正確な構文エラー(行/列)を返します。ローカルで完結し、決定的です。 |
|
| 説明文を一般的な正規表現パターン(メール、URL、IPv4、日付、UUID など)の小規模なライブラリと照合し、パターンとその説明を返します。ローカルで完結し、決定的です。 |
|
| Groq( |
5. プロジェクト構造
devtools-mcp/
├── server/
│ ├── server.py # MCPServer + tool registration + ASGI app
│ ├── tools.py # explain_error / format_json / generate_regex logic
│ ├── ai.py # Groq-backed summarize_text logic
│ └── tests/
│ └── test_server.py # pytest suite using the SDK's in-memory Client
├── frontend/
│ ├── index.html
│ ├── src/
│ │ ├── main.ts # real MCP client (StreamableHTTPClientTransport)
│ │ └── style.css
│ ├── package.json
│ ├── tsconfig.json
│ └── vite.config.ts
├── .env.example
├── .gitignore
├── requirements.txt
├── render.yaml # optional Render Blueprint
├── README.md
└── EXISTING_MCP_EXPERIENCE.md6. 前提条件
Python 3.10+
Node.js 18+ と npm(フロントエンド用
npxで MCP Inspector を実行するため)A Groq API キー(
summarize_textにのみ必要)
7. インストール
git clone <this-repo>
cd devtools-mcp
python3 -m venv .venv
. .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt8. 環境変数
.env.example を .env にコピーし、必要なものを記入してください:
GROQ_API_KEY= # required for summarize_text
GROQ_MODEL=openai/gpt-oss-120b
MCP_ALLOWED_HOSTS= # only needed when deployed behind a real hostname
MCP_ALLOWED_ORIGINS= # comma-separated browser origins allowed via CORS.env は gitignore されています。実際の機密情報をコミットしないでください。
9. ローカルセットアップ
Stdio(デフォルト。ローカル MCP クライアント用):
python -m server.serverStreamable HTTP(フロントエンドや HTTP ベースの任意の MCP クライアント用。ローカルのみ):
uvicorn server.server:app --host 127.0.0.1 --port 8000MCP_ALLOWED_HOSTS はローカルでは未設定のままで構いません。SDK 組み込みの localhost 限定 DNS リバインディング保護によって、127.0.0.1/localhost は自動的にカバーされます。ヘルスチェック: curl http://127.0.0.1:8000/health。
10. MCP Inspector テスト
# Against stdio:
uv run mcp dev server/server.py # requires uv; or: npx @modelcontextprotocol/inspector
# Against a running Streamable HTTP server:
npx @modelcontextprotocol/inspector --cli http://127.0.0.1:8000/mcp --method tools/listこれは開発時にローカルの Streamable HTTP サーバーに対して実行され、4 つのツールすべてが正しい入出力スキーマで検出可能であることを確認しました(正確な結果については、下記の「テスト」を参照)。
11. フロントエンドのセットアップ
cd frontend
npm install
npm run dev # http://localhost:5173実行中のダッシュボードで、サーバー URL フィールドに MCP サーバーの /mcp エンドポイント(デフォルトでは http://localhost:8000/mcp)を設定し、Connect をクリックします。ツールを選択し、フォームに入力して Run をクリックします。ローカルで使用するには、バックグラウンドを MCP_ALLOWED_ORIGINS=http://localhost:5173 で起動して、CORS を許可します。
本番ビルド: npm run build(出力先は frontend/dist/)
12. Groq のセットアップ
console.groq.com で API キーを作成します。
.envか、デプロイプラットフォームの環境変数にGROQ_API_KEYを設定します(必要に応じてGROQ_MODELも。デフォルトは、openai/gpt-oss-120b)。このプロジェクトで使用している LLM プロバイダーは他にありません。
13. 既存 MCP の利用
既存の MCP サーバー(Context7)を使うデモについては、EXISTING_MCP_EXPERIENCE.md を参照してください。それが何か、どのように接続したか、実行した実際のクエリ、学んだことを記載しています。
14. Render へのデプロイ
Render のネイティブ Python ランタイムを使用しています(Docker は不要)。
ダッシュボード設定:
このリポジトリを GitHub にプッシュします。
Render で: New → Web Service → リポジトリを接続します。
ランタイム: Python 3。ビルドコマンド:
pip install -r requirements.txt。開始するコマンド:uvicorn server.server:app --host 0.0.0.0 --port $PORT。環境変数を設定します:
GROQ_API_KEY、GROQ_MODEL、MCP_ALLOWED_HOSTS=<your-service>.onrender.com,<your-service>.onrender.com:*、MCP_ALLOWED_ORIGINS=<your-frontend-origin>(フロントエンドもデプロイする場合)。デプロイします。MCP エンドポイントは
https://<your-service>.onrender.com/mcpになります。
同じセットアップを簡単にするために、render.yaml Blueprint も同梱しています。
手動確認が必須の手順: 実際にデプロイするには Render アカウントが必要ですが、この対応の一環としては実行されていません。手動手順として残る詳細は完了レポートを参照してください。
15. Smithery での公開
現在の Smithery CLI は、ホストされているリモート MCP サーバーの URL を直接公開できます(この経路では Docker/コンテナのパッケージングは不要です):
npm install -g smithery
smithery auth login
smithery mcp publish "https://<your-service>.onrender.com/mcp" -n "<your-org>/devtools-mcp"公開後、4 つのツールが露出していることを確認します:
smithery mcp add "https://<your-service>.onrender.com/mcp" --id devtools-mcp
smithery tool list devtools-mcp手動手順が必要です: 先に Smithery アカウントと、公開可能な Render デプロイが必要です。これはこの対応の一部としては実行されていません。
16. パブリック MCP 利用
デプロイ後は、任意の Streamable HTTP MCP クライアントで次の場所に接続できます:
https://<your-service>.onrender.com/mcpSDK の Client を使った例:
from mcp import Client
from mcp.client.streamable_http import streamable_http_client
async with streamable_http_client("https://<your-service>.onrender.com/mcp") as (r, w, _):
async with Client(r, w) as client:
await client.initialize()
print(await client.list_tools())17. テスト
この環境で実際に実行:
pytest server/tests/ -v結果: 11 passed - ツール検出、format_json の有効・不正・空の入力、explain_error のパターン一致・不正一致(空の入力含む)、既知のパターンに対する generate_regex(実際の正規表現一致チェックを含む)と未一致の説明、GROQ_API_KEY がない場合の summarize_text、空の入力。
また、(pytest 以外、手動で)実際に実行:
uvicorn server.server:appは正常に起動し、/healthは{"status":"ok",...}を返しました。/mcpの生のinitializeという name の JSON-RPC POST が200を返しました。実際の MCP Inspector CLI(
npx @modelcontextprotocol/inspector --cli)が Streamable HTTP 経由で接続し、4 つのツールを正しいスキーマで列挙し、generate_regex、explain_error、format_json(JSON の有効・無効の両方)、summarize_text(この環境では実際の Groq キーがなかったため、不足中の API キーエラーを正しく報告)を正常に呼び出しました。トランスポートのセキュリティ: 偽装した
X-Forwarded-Proto付けない Host で、期待通り421 Misdirectedエラーを受け取ることを確認。CORS プリフライト:
MCP_ALLOWED_ORIGINSを有効にした後、Origin: http://localhost:5173を持つ元の/mcpへのOPTIONSリクエストが 200 と正しいaccess-control-*をヘッダーで返した。フロントエンド:
npx tsc --noEmitがエラーなしでき、npm run buildが成功しfrontend/dist/を生成しました。
未検証 (この環境には存在しない外部アカウント・認証が必要): 実 Groq API キー を使った実地の summarize_text 呼び出し、Render デプロイ自体、Smithery の公開・一覧表示。
18. 制限
summarize_textは短くて、エラーのある旨のパスだけがエンドツーエンドでテストされました。実際の Groq 資格情報では呼び出されていません。Render デプロイと Smithery 公開は、ご自身のアカウントでの手動手順が必要で(セクション14〜15参照)、この対応では実行されていません。
explain_errorとgenerate_regexは、LLM ではなく小規模な手書きのパターン・ライブラリを使います。意図的にシンプルで決定的な内容になっているため、あらゆるエラーやパターン記述を認識できるわけではありません。フロントエンドには認証がありません。このプロジェクトで明示的に「アカウントなし・認証なし」という範囲にしているため、ローカル・デモ用です。
6. 学習内容
MCP とは何か: 標準化されたプロトコルで、「LLM にコンテキスト/アクションを提供すること」と「LLM 本体のやりとり」を分離します。そのため、一度作成したサーバーは(このしれたい)、対応している任意のクライアントで問題なく動きます。
ホスト / クライアント / サーバー: ホストは LLM アプリ(Claude ・デスクトップ、ブラウザーのダッシュボードの背後にあるアプリ)、クライアントはその中にある MCP を話す部分(SDK の
Client、当社のフロントエンドのStreamableHTTPClientTransportベースのクライアント)、サーバーは私たちが構築したものです。サーバーはモデルに直接話しかけません。ツール vs リソース vs プロンプト: ツールはモデルが操作する内容(LLM が
format_jsonを呼ぶかどうか); リソースはアプリが投入するデータ; プロンプトはユーザーが呼び出すテンプレート。このプロジェクトに必要なのはツールだけ。ツール発見と起動: クライアントは
tools/list使って利用できる内容(名前、説明、JSON スキーマの入出力、すべて便利なタイプヒントと docstring から自動生成される)を学習し、次にtools/callを使い、名前と引数を指定してツールを起動します。MCP vs プレーンな REST API: REST API はクライアントごとに個別の統合が必要です。MCP サーバーは自分自身のは、機能とスキーマを説明するので、MCP 対応ホストならカスタムのグルー・コードなしで使えます。サーバー側の変更なしで、同じサーバーを MCP Inspector と、自作フロントエンド・クライアントの両方につなぐことで実証されています。
LLMが使われる部分はどこか: それは
summarize_textだけです。Groq を呼び出します。サーバーの他の部分は平易きな決定論コードで、これは「MCP サーバー」と「AI アプリケーション」が同じものではないという、役立つ気付きです。デプロイの現実: Streamable HTTP サーバーは、既定では localhost だけに ホスト/IP 許可を制限しています。実ホストネームで運用する場合は、明示的に開ける(
TransportSecuritySettings)必要があります。この環境で実際に421を発生させ、手を動かして確認しました。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables interaction with OpenAI's Chat Completion and Assistants APIs, supporting assistant management, file operations, and direct queries to GPT models through standardized MCP tools.92
- FlicenseBqualityCmaintenanceEnables AI-assisted analysis of log files through advanced searching, filtering, and test execution capabilities. Supports time-based queries, pattern matching, test summarization, and code coverage reporting directly within compatible MCP clients.12
- AlicenseAqualityBmaintenanceEnables AI clients to use developer utilities like JSON formatting, JWT decoding, UUID generation, and more via MCP.122792MIT
- FlicenseNot gradedqualityDmaintenanceEnables conversational API testing via MCP, allowing users to make HTTP requests, decode JWT tokens, and validate JSON schemas through natural language.
Related MCP Connectors
Connect MCP clients to 2,000+ AI models without managing provider API keys.
An AI concierge that turns static forms into adaptive AI conversations. From any MCP client.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/shxheerkhn/devTools-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server