模型上下文协议服务器

一个模块化的模型上下文协议(MCP)服务器,为AI助手提供与代码库交互的自定义工具,增强开发工作流程。

  • by Fernandocgomez
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Fernandocgomez/mcp-server

使用说明

DemoTool MCP 服务器

为DemoTool项目设计的一个模块化模型上下文协议(MCP)服务器。该服务器提供了自定义工具,供Cursor中的AI助手使用,以便更好地理解和与代码库进行交互。

什么是MCP?

模型上下文协议(MCP)是一种开放协议,允许人工智能助手安全地与外部数据源和工具进行交互。该服务器提供了项目专用的工具,Cursor可以利用这些工具来优化开发工作流程。

项目结构

服务器采用模块化架构设计,便于维护和扩展:

mcp-server/
├── src/
│   ├── config/           # Server configuration
│   │   ├── server.config.ts
│   │   └── index.ts
│   ├── server/           # Server setup and request handlers
│   │   ├── setup.ts
│   │   └── index.ts
│   ├── tools/            # Tool implementations
│   │   ├── tool-registry.ts    # Tool registry pattern
│   │   ├── hello-world.tool.ts # Example tool
│   │   └── index.ts
│   ├── types/            # TypeScript type definitions
│   │   ├── tool.types.ts
│   │   ├── server.types.ts
│   │   └── index.ts
│   └── index.ts          # Main entry point
├── dist/                 # Compiled JavaScript output
├── package.json
└── tsconfig.json

可用工具

这个MCP服务器目前提供:

  1. 你好,世界 - 返回一条友好的“hello world”消息
    • 可选参数: name (字符串) - 要问候的名称,默认为“World”

安装

  1. 安装依赖项:
cd mcp-server
npm install
  1. 构建服务器:
npm run build

在Cursor中的配置

将此MCP服务器与Cursor集成:

方法1:使用光标设置用户界面

  1. 打开光标设置
  2. 导航至 特点 → MCP(Multiple Choice Question)——多项选择题
  3. 点击 + 添加新的MCP服务器
  4. 配置:
    • 名字: kids-daily-tool
    • 类型: stdio
    • 命令: node /home/fernando/code/kids-daily-tool/mcp-server/dist/index.js

方法2:手动配置(高级)

直接编辑光标(Cursor)的MCP配置文件:

Linux/Mac(可译为:Linux系统/Mac系统): ~/.config/cursor/mcp.json Windows: %APPDATA%\Cursor\mcp.json

添加此配置:

{
  "mcpServers": {
    "kids-daily-tool": {
      "command": "node",
      "args": ["/home/fernando/code/kids-daily-tool/mcp-server/dist/index.js"],
      "env": {}
    }
  }
}

在Cursor中的使用

配置完成后,您可以在Cursor Composer中使用自然语言提示来调用该工具:

  • “替我问好!”
  • “使用hello_world工具”
  • “调用名为Fernando的hello_world MCP工具”

Cursor 会自动检测何时需要使用 MCP 工具,并代表您执行该工具。工具将返回一条友好的问候信息。

发展

修改服务器:

  1. 在(某个地方)编辑文件 src/
  2. 重建: npm run build
  3. 重启光标以应用更改

故障排除

服务器未在Cursor中显示

  • 确保你已经构建了服务器(npm run build)
  • 验证你的配置中的路径是否为绝对路径
  • 在更改配置后重启光标(或:在更改配置后重置光标)

工具错误

  • 检查光标开发者控制台中的错误信息
  • 验证项目目录中的文件权限
  • 确保您的 PATH 中包含 Node.js

扩展服务器

模块化架构使得添加新工具变得轻松简单。请按照以下步骤操作:

1. 创建一个新工具

在(某个位置/目录)创建一个新文件 src/tools/,例如。, my-new-tool.tool.ts:

import {
  Tool,
  ToolDefinition,
  ToolArguments,
  ToolResult,
} from "../types/index.js";

export class MyNewTool implements Tool {
  getDefinition(): ToolDefinition {
    return {
      name: "my_new_tool",
      description: "Description of what your tool does",
      inputSchema: {
        type: "object",
        properties: {
          param1: {
            type: "string",
            description: "Description of param1",
          },
        },
        required: ["param1"],
      },
    };
  }

  async execute(args: ToolArguments): Promise<ToolResult> {
    // Implement your tool logic here
    const result = `Processing: ${args.param1}`;

    return {
      content: [
        {
          type: "text",
          text: result,
        },
      ],
    };
  }
}

2. 注册工具

将你的工具添加到 src/tools/index.ts:

export * from "./my-new-tool.tool.js";
import { MyNewTool } from "./my-new-tool.tool.js";

export function getAllTools(): Tool[] {
  return [
    new HelloWorldTool(),
    new MyNewTool(), // Add your tool here
  ];
}

3. 重建与测试

npm run build

就是这样!工具注册表会自动识别您的新工具。

架构优势

  • 模块化每个工具都独立存在于自己的文件中
  • 类型安全全面支持 TypeScript,配备适当的接口
  • 可扩展性易于添加新工具,而无需修改核心逻辑
  • 可维护性明确的职责分离
  • 可测试性可以单独测试各个工具

安全注意事项

  • 此服务器仅提供对项目信息的只读访问权限
  • 它在本地运行,并不将数据发送到外部服务
  • 在将MCP服务器代码与您的编辑器集成之前,务必先进行审查