使用说明
气象MCP服务器
这是一个利用模型上下文协议(MCP)和Bun提供LLM天气报告工具集的项目。
背景
它演示了如何设置一个可以处理工具请求并执行它们的基本MCP服务器。它支持给定邮政编码的当前和未来天气预报(每小时和每天)。多个工具协同工作,LLM正在根据工具的配置编排工具的使用。 此实现还提供了一个简单的框架,可以以整合和结构化的方式添加其他工具。有关更多信息,请参阅 新工具 部分在 发展.
先决条件
安装项目
-
克隆存储库。
-
运行:
bun install -
创建一个
.env根目录下的文件基于/env/sample.env。根据需要和描述提供值。注: 如果您希望通过以下方式在开发模式下运行服务器,这一点最为重要
bun run start. -
(可选) 运行以下命令以验证项目的完整性:
bun run verify
构建
-
运行:
bun run build
这将捆绑条目 build/main.js,然后可以食用。
设置克劳德桌面
本节受此总则的影响 指南 详细说明此用例。
-
启动克劳德桌面并打开设置(不 帐户设置)。
-
点击
Developer在“设置”窗格的左侧栏中,然后单击Edit Config. -
编辑文件
claude_desktop_config.json并添加以下内容:{ "mcpServers": { "weather-mcp-server": { "command": "bun", "args": ["run", "<path_to_project>/build/main.js"], "env": { "APP_NAME": "weather-mcp-server", "APP_EMAIL": "<app-email>" } } } }- 替换
<path_to_project>与你的项目之路;例如。:/Users/username/Documents/projects/create-mcp-server-app-bun - 替换
<app-email>带有将用于识别某些API请求的电子邮件;例如。:my@email.com
- 替换
-
重新启动克劳德桌面;这很重要,否则Claude Desktop将不会将更改应用于
claude_desktop_config.json. -
在主屏幕上,单击
Search and Tools按钮,然后显示您的MCP服务器名称。确保它已启用。
用法
以下是一些关于如何与Claude和此MCP服务器交互的提示。
- 你可以简单地问克劳德你的邮政编码的当前天气:例如。
current weather for 90210,输出相应的结果。您可能会观察到,Claude顺序、动态和独立地使用多个工具来提供所需的结果。 - 您也可以要求克劳德提供未来几天的天气预报:
what's the weather this weekend?。这将触发后续请求(除非上一个问题的上下文中有之前的邮政编码),以提供所需的邮政编码。一旦提供,响应将包含相应的结果。- 请注意Claude如何自动重用以前工具调用的结果(如果适用)来回答这个问题。
发展
新工具
可以通过确保中的每个新工具模块来添加新工具 ./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 了解详情。):
getNamegetDescriptiongetInputSchemavalidateWithDefaultsprocessToolWorkflow
使用现有工具作为实施指南,不要忘记实施相应的测试。
无需进一步配置即可注册任何其他工具;它们在MCP服务器重新启动时自动包含在内。
测试覆盖率
使用以下方法分析测试覆盖率差距可能很有用 lcov 报告,以更好地了解所覆盖的线路和功能。
笔记:
- 类的构造函数应该在相应的类中定义,因为Bun只跟踪类函数(包括构造函数)。当你从一个具有自己构造函数的抽象类继承时,这是有问题的,而构造函数又不被跟踪。因此,只需在类中定义抽象构造函数并调用
super. - 有一些进口(例如。
import dedent from "dedent";)在模块顶部可能会导致Bun无法正确跟踪所覆盖的线路。只需将其移至其他导入项之后,它就会正确跟踪。
先决条件(开发)
-
安装
lcov:brew install lcov -
安装VSCode扩展
ryanluker.vscode-coverage-gutters(已在中定义 settings.json).
运行测试覆盖率
-
在大多数情况下,运行以下命令就足够了:
bun run test:coverage注: 如果覆盖范围小于100,但不是
Uncovered Line #s如果报告了,您可能需要按照以下步骤进行进一步调查并重新访问 备注 上面。 -
对于高级情况,请运行:
bun run test:coverage:lcov它产生了
lcov覆盖率报告 VSCode扩展所使用的ryanluker.vscode-coverage-gutters在编辑器中可视化被覆盖的行。 -
如果您更喜欢HTML报告,请在终端中运行:
genhtml --function-coverage --branch-coverage --output-directory coverage-report coverage/lcov.info它生成一个HTML 覆盖率报告 您可以在首选浏览器中查看。
