mcpField
M
mcp

mcp

github.com/kimny1143开发71 次安装
代码仓库

关于 mcp

用于 Claude Code 的 MCP 服务开发技能,介绍自定义工具的创建、配置、调试和管理,并涵盖测试与数据库查询示例。

主要功能

  1. 01创建 MCP 服务和自定义工具
  2. 02配置项目级或用户级服务
  3. 03调试连接与服务日志
  4. 04停用少用服务以节省上下文

适用场景

  1. 01为项目提供专属工具
  2. 02连接外部服务或自动化任务
  3. 03创建测试运行与数据库查询工具

MCP 相关

该技能指导使用 MCP SDK 创建服务,并将其配置到 Claude Code。服务向 MCP 客户端提供自定义工具。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/kimny1143/claude-code-template --skill mcp

安装后在 Claude Code 中输入/mcp确认已加载。

详细介绍

来自项目 README

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 コマンドで接続状態を確認

ベストプラクティス

  1. エラーハンドリング: 常に try-catch で囲む
  2. タイムアウト: 長時間処理は避ける(30秒以内)
  3. 説明を明確に: description はツール選択の判断材料
  4. inputSchema 必須: パラメータの型を明示
  5. 10個以下: プロジェクトあたりのMCP数を制限

评论

支持 Markdown