Claude-skill-registry-data mcp
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry-data
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry-data "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/mcp-kimny1143-claude-code-template" ~/.claude/skills/majiayu000-claude-skill-registry-data-mcp-46ca58 && rm -rf "$T"
manifest:
data/mcp-kimny1143-claude-code-template/SKILL.mdsource content
mcp - MCP Server 作成
Model Context Protocol (MCP) サーバーの作成・管理。
概要
MCP は Claude Code にカスタムツールを追加するためのプロトコル。
用途:
- プロジェクト固有のツール提供
- 外部サービス連携
- 自動化タスク
基本構造
// scripts/mcp/my-tool.js import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; const server = new Server( { name: "my-tool", version: "1.0.0" }, { capabilities: { tools: {} } } ); // ツール一覧 server.setRequestHandler("tools/list", async () => ({ tools: [ { name: "my_custom_tool", description: "カスタムツールの説明", inputSchema: { type: "object", properties: { param1: { type: "string", description: "パラメータ1" }, }, required: ["param1"], }, }, ], })); // ツール実行 server.setRequestHandler("tools/call", async (request) => { const { name, arguments: args } = request.params; if (name === "my_custom_tool") { const result = await doSomething(args.param1); return { content: [{ type: "text", text: JSON.stringify(result) }] }; } throw new Error(`Unknown tool: ${name}`); }); // サーバー起動 const transport = new StdioServerTransport(); await server.connect(transport);
設定
プロジェクトレベル (.mcp.json)
{ "mcpServers": { "my-tool": { "command": "node", "args": ["scripts/mcp/my-tool.js"] } } }
ユーザーレベル (~/.claude/settings.json)
{ "mcpServers": { "my-global-tool": { "command": "node", "args": ["/path/to/tool.js"] } } }
実用例
テストランナー
server.setRequestHandler("tools/list", async () => ({ tools: [ { name: "run_tests", description: "ユニットテストを実行", inputSchema: { type: "object", properties: { pattern: { type: "string", description: "テストパターン" }, }, }, }, ], })); server.setRequestHandler("tools/call", async (request) => { if (request.params.name === "run_tests") { const pattern = request.params.arguments?.pattern || ""; const result = await runTests(pattern); return { content: [{ type: "text", text: result }] }; } }); async function runTests(pattern) { const { execSync } = await import("child_process"); try { const output = execSync(`npm test -- ${pattern}`, { encoding: "utf-8" }); return output; } catch (error) { return error.stdout + error.stderr; } }
DB クエリ
{ name: "query_database", description: "データベースにクエリを実行", inputSchema: { type: "object", properties: { query: { type: "string", description: "SQL クエリ" }, }, required: ["query"], }, }
コンテキスト節約
使わないMCPサーバーを無効化してコンテキストを節約:
// .mcp.json { "mcpServers": { "frequently-used": { "command": "node", "args": ["tool1.js"] } }, "disabledMcpServers": [ "rarely-used-tool", "heavy-context-tool" ] }
デバッグ
# 直接実行 node scripts/mcp/my-tool.js # ログ確認 DEBUG=mcp* node scripts/mcp/my-tool.js # Claude Code で確認 # /mcp コマンドで接続状態を確認
ベストプラクティス
- エラーハンドリング: 常に try-catch で囲む
- タイムアウト: 長時間処理は避ける(30秒以内)
- 説明を明確に: description はツール選択の判断材料
- inputSchema 必須: パラメータの型を明示
- 10個以下: プロジェクトあたりのMCP数を制限