MCP服务器工具

MCP服务器是一个基于Bun的工具,用于创建和管理MCP项目,支持与Claude Desktop集成,提供标准化的项目结构和工具开发框架。

  • by katjes733
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 katjes733/create-mcp-server-app-bun

使用说明

MCP服务器

MCP服务器提供使用Bun设置自己的MCP服务器项目的功能。

背景

该项目利用模型上下文协议(MCP)来促进标准化工具(MCP服务器)在预定义的位置创建示例MCP项目。

在这个例子中,我们与Claude Desktop集成以运行MCP服务器,同时充当MCP客户端与MCP服务器交互。

生成的示例项目遵循与此项目相同的结构,并使用示例工具计算两个数值的总和。

选择使用Bun而不是NodeJS也是有意展示Bun在成为NodeJS的真正替代品方面取得了重大进展。它速度极快,易于设置,并具有许多开箱即用的功能。它还可以与现有的工具链(如ESLint等)很好地集成。

先决条件

  1. 包子 必须安装。
  2. 克劳德桌面 应该安装。

安装项目

  1. 克隆存储库。

  2. 运行:

    bun install
    
  3. 创建一个 .env 根目录下的文件基于 /env/sample.env。根据需要和描述提供值。

    注: 如果您希望通过以下方式在开发模式下运行服务器,这一点最为重要 bun run start.

  4. (可选) 运行以下命令以验证项目的完整性:

    bun run verify
    

构建

  1. 运行:

    bun run build
    

这将捆绑条目 build/main.js,然后可以食用。

设置克劳德桌面

本节受此总则的影响 指南 详细说明此用例。

  1. 启动克劳德桌面并打开设置

  2. 点击 Developer 在“设置”窗格的左侧栏中,然后单击 Edit Config:

  3. 编辑文件 claude_desktop_config.json 并添加以下内容:

    {
      "mcpServers": {
        "create-mcp-app-bun": {
          "command": "bun",
          "args": ["run", "<path_to_project>/build/main.js"]
        }
      }
    }
    

    将<path_to_project>替换为项目的路径;例如。: /Users/username/Documents/projects/create-mcp-server-app-bun

  4. 重新启动克劳德桌面;这很重要,否则Claude Desktop将不会将更改应用于 claude_desktop_config.json.

  5. 在主屏幕上,单击 Search and Tools 按钮,然后显示您的MCP服务器名称:

确保它已启用。

用法

  1. 您可以简单地让Claude创建一个新的MCP项目: create a new mcp project

    作为回应,克劳德会要求你指定一个名字(例如。 my-test-mcp-server),然后创建项目。

  2. 该实现还将正确处理项目已经存在的情况,并提示用户指定后续操作。

发展

新工具

可以通过确保中的每个新工具模块来添加新工具 ./src/tools 扩展 AbstractTool 并实施 ITool 并提供显式构造函数(用于测试覆盖率):

...
export class NewTool extends AbstractTool implements ITool {
  // Explicit constructor definition to ensure test coverage in Bun tracks constructor.
  constructor(fetch: typeof globalThis.fetch = globalThis.fetch) {
    super(fetch);
  }
...

此外,必须实施以下方法(参见其相应的 JSDoc 了解详情。):

  • getName
  • getDescription
  • getInputSchema
  • validateWithDefaults
  • processToolWorkflow

使用现有工具作为实施指南,不要忘记实施相应的测试。

无需进一步配置即可注册任何其他工具;它们在MCP服务器重新启动时自动包含在内。

测试覆盖率

使用以下方法分析测试覆盖率差距可能很有用 lcov 报告,以更好地了解所覆盖的线路和功能。

笔记:

  • 类的构造函数应该在相应的类中定义,因为Bun只跟踪类函数(包括构造函数)。当你从一个具有自己构造函数的抽象类继承时,这是有问题的,而构造函数又不被跟踪。因此,只需在类中定义抽象构造函数并调用 super.
  • 有一些进口(例如。 import dedent from "dedent";)在模块顶部可能会导致Bun无法正确跟踪所覆盖的线路。只需将其移至其他导入项之后,它就会正确跟踪。

先决条件(开发)

  1. 安装 lcov:

    brew install lcov
    
  2. 安装VSCode扩展 ryanluker.vscode-coverage-gutters (已在中定义 settings.json).

运行测试覆盖率

  1. 在大多数情况下,运行以下命令就足够了:

    bun run test:coverage
    

    注: 如果覆盖范围小于100,但不是 Uncovered Line #s 如果报告了,您可能需要按照以下步骤进行进一步调查并重新访问 备注 上面。

  2. 对于高级情况,请运行:

    bun run test:coverage:lcov
    

    它产生了 lcov 覆盖率报告 VSCode扩展所使用的 ryanluker.vscode-coverage-gutters 在编辑器中可视化被覆盖的行。

  3. 如果您更喜欢HTML报告,请在终端中运行:

    genhtml --function-coverage --branch-coverage --output-directory coverage-report coverage/lcov.info
    

    它生成一个HTML 覆盖率报告 您可以在首选浏览器中查看。