Skip to content
This page has been auto-translated and may contain errors.View in English

在本地运行 Model Context Protocol ​

使用这个页面在你的电脑上运行提取的 MCP 天气服务器,并通过 MCP Inspector 调用其天气工具。有两点与你的预期可能不同:启动脚本需要项目遗漏列出的一个工具,服务器不会打开自己的页面。它通过终端的输入和输出与启动它的任何程序通信,所以你用 Inspector 来测试它,Inspector 会启动它并给你一个可以交互的页面。

你需要先做什么 ​

安装 Node.js 24,它包含 npm。MCP Inspector 需要 Node 22.19 或更新的版本,Node 24 远超这个要求。

检查一下版本。你的版本可能更新:

bash
$ node --version
v24.18.0

你不需要 API key 也不需要 .env 文件:天气数据已经写在服务器的代码里。

Juno你需要先做什么 安装 Node 24 并检查 node --version 输出的版本以 24 或更高数字开头。就这么简单:不需要密钥,不需要 .env 文件。
Juno你需要先做什么 服务器本身可以在更老的 Node 版本上运行。版本很关键是因为同一个 Node 也要运行 Inspector(你测试用的工具),而 Inspector 的当前版本需要 22.19 或更新。
Juno你需要先做什么 在 Node 22.19 之前的 22 版本上,npx 不会拒绝 Inspector:它会悄悄选择接受该 Node 的最新版本,即已弃用的 1.0 版。所以问题表现为 Inspector 版本不同,而不是错误。

安装包并添加 tsx ​

在提取的项目文件夹中打开一个终端。这是包含 package.json 和 server.ts 的文件夹:

bash
$ cd path-to-your-extracted-project

项目的启动脚本运行 tsx server.ts。tsx 是直接运行 TypeScript 文件的工具,但 package.json 没有列出它,所以一次普通安装会遗漏它,npm start 会停止并显示 sh: tsx: command not found。安装列出的包,然后添加 tsx:

bash
$ npm ci
added 91 packages, and audited 92 packages in 3s
…
$ npm install --save-dev tsx
added 3 packages, and audited 95 packages in 7s
…

npm 可能还会报告漏洞并建议 npm audit fix。暂时忽略它。它也可能打印一个以 npm warn allow-scripts 开头的警告,并提到 esbuild;这不会阻止 tsx 工作。

Juno安装包并添加 tsx 在包含 package.json 的文件夹中,运行 npm ci,然后运行 npm install --save-dev tsx。每个命令都会报告它添加了多少包。

如果 npm 说找不到 package.json,说明你在错误的文件夹里。

Juno安装包并添加 tsxnpm ci 安装的正是发布的 lockfile 记录的内容,而 tsx 不在其中。--save-dev 会把它添加到 package.json 和 lockfile,这样启动脚本从此之后就能在 node_modules 中找到它。
Juno安装包并添加 tsx 在项目中记录 tsx 而不是全局安装它,这样后来桌面客户端可以从任何文件夹用 npm exec 启动这个服务器:运行程序随着项目而不是依赖某个人的 PATH。

检查服务器是否启动 ​

启动一次服务器:

bash
$ npm start

> s09eelk0uf@1.0.0 start
> tsx server.ts

🌤️  Weather MCP Server Started!
🛠️  Tool: getWeatherDataByCityName
📚 Resource: weather://cities
🏙️  Supported Cities: 北京, 伦敦
✅ Server ready!

在 Server ready! 之后,终端就安静了。这是正常的服务器:它在等待某个程序给它发消息,它永远不会打印一个地址来打开。在启动 Inspector 之前用 Ctrl+C 停止它。

Juno检查服务器是否启动 运行 npm start 并等待 Server ready!。不会有其他事情发生,也不应该有:按下 Ctrl+C 然后继续使用 Inspector。
Juno检查服务器是否启动 通过标准输入和输出的 MCP 服务器没有端口。它从启动它的任何程序读取请求,所以你的终端可以启动它但不能与它通信。这是 Inspector 的工作。
Juno检查服务器是否启动 这五行状态消息有意写入标准错误:标准输出是为协议消息保留的,任何意外的 console.log 会破坏与任何客户端的连接。

在 MCP Inspector 中调用天气工具 ​

从同一个项目文件夹,运行 官方 MCP Inspector,后面跟启动你的服务器的命令:

bash
$ npx @modelcontextprotocol/inspector npx tsx server.ts

第一次时,npx 会在下载 Inspector 前询问。检查包是否是 @modelcontextprotocol/inspector,然后输入 y:

text
Need to install the following packages:
@modelcontextprotocol/inspector@2.11.0
Ok to proceed? (y)

Inspector 打印它的地址并在你的浏览器中打开它:

text
Starting MCP inspector...
…
MCP Inspector Web is up and running at:
   http://127.0.0.1:6274?MCP_INSPECTOR_API_TOKEN=…
…
Opening browser...

如果浏览器没有打开,把整个地址(包括 token)复制到一个浏览器中。

页面列出一个服务器 npx,标记为 Disconnected。忽略上面的 Read-only session 提示。打开服务器旁的开关:Inspector 启动你的服务器,标签变为 Connected。然后:

  1. 在顶部打开 Tools 并选择 getWeatherDataByCityName。
  2. 在 city 字段中输入 北京 并点击 Execute Tool。
  3. 结果出现在 Results 下方:
json
{
  "temp": "22°C",
  "forecast": "晴朗,有微风"
}

伦敦 也可以。其他任何城市都会返回课程的 Weather data not available for this city 消息,这说明工具按照编写方式工作。工具使用章节 解释了这样的工具对模型意味着什么。

Resources 列出 weather://cities,但选择它会显示 Read Error 和 Invalid URL。这来自课程代码注册资源的方式,不是你的设置问题;工具是要测试的部分。

完成后,在终端中按 Ctrl+C。这会停止 Inspector 和它启动的服务器。

Juno在 MCP Inspector 中调用天气工具 运行 Inspector 命令,如果 npx 询问就输入 y,然后在打开的页面中打开服务器开关。然后去 Tools,选择天气工具,输入北京并点击 Execute Tool。

如果标签显示 Failed 而不是 Connected,打开 Inspector 右边的 Console 标签,查找以 Error 开头的行。

Juno在 MCP Inspector 中调用天气工具 这里 Inspector 是客户端。它包名称之后的所有内容都是它运行来启动你的服务器的命令,所以它自己启动 tsx server.ts 并通过该进程的输入和输出与之通信。页面是 Inspector 自己的;你的服务器仍然没有页面。
Juno在 MCP Inspector 中调用天气工具 资源失败是因为 SDK 将 server.resource 的参数读作名称、地址然后选项。课程首先传递地址,其次是描述,所以资源在名称 weather://cities 下列出,其地址是 List of supported cities,这不是 URL,读取函数从未被注册。

连接另一个 MCP 客户端 ​

桌面 MCP 客户端也启动服务器,但从它自己的工作文件夹,所以它需要完整路径。复制提取的项目文件夹的绝对路径,然后给客户端这个命令和这些参数,替换两个示例路径:

text
command: npm
arguments:
  - --prefix
  - /absolute/path/to/project
  - exec
  - --
  - tsx
  - /absolute/path/to/project/server.ts

--prefix 告诉 npm 无论客户端从哪里启动,都要使用哪个项目的 tsx。将每个参数作为单独的项,这样包含空格的路径保持为一个值,不要添加任何 URL 或端口。

每个客户端对这些字段的名称不同,所以把命令和参数放在它的 MCP 设置说明指出的位置,然后重启客户端。你不需要其他下载:这就是你已经在 Inspector 中测试过的服务器。agents 章节 涵盖了当客户端的模型使用像这样的工具时客户端运行的循环。

Juno连接另一个 MCP 客户端 将命令设为 npm,添加六个参数,在两个位置使用你的项目路径,然后重启客户端。

服务器已经在 Inspector 中工作了,所以如果客户端无法访问它,先检查其设置中的路径。

Juno连接另一个 MCP 客户端 客户端运行同一个服务器,但通过 npm --prefix,所以启动可以从客户端自己的文件夹工作:--prefix 选择项目,exec -- tsx 运行其服务器文件。
Juno连接另一个 MCP 客户端 桌面客户端很少继承你的终端 PATH,所以一个裸 tsx 命令只在全局安装碰巧可见的地方工作。通过 npm --prefix 会把启动与这个项目中记录的 tsx 关联起来。如果客户端说找不到 npm,用 which npm 打印的完整路径作为命令。

故障排除 ​

npm start 显示 sh: tsx: command not found: tsx 还没有安装到项目中。在项目文件夹中运行 npm install --save-dev tsx。对于桌面客户端,还要检查其命令是否为 npm,参数是否以 --prefix 和项目的绝对路径开头。

Inspector 显示 @modelcontextprotocol/inspector v1 is deprecated: 你的 Node 版本低于 22.19,所以 npx 获取了旧 Inspector。安装 Node 24,打开一个新终端,检查 node --version,然后再次运行 Inspector 命令。

服务器显示 Failed,Inspector 的 Console 标签显示 Cannot find module 以 server.ts 结尾: Inspector 在项目文件夹外启动了。用 Ctrl+C 停止它,cd 进入包含 server.ts 的文件夹,然后再次运行命令。

Juno故障排除 将你看到的内容与上面的粗体标题匹配。当 Inspector 显示 Failed 时,原因在其 Console 标签中,而不在你的终端。
Juno故障排除 分开三个步骤:npm 找到 tsx、npx 选择你的 Node 能运行的 Inspector、Inspector 启动你的服务器。每个步骤在不同的地方失败:终端、终端,然后是 Inspector 的 Console 标签。
Juno故障排除 Inspector 将服务器的标准错误收集到其 Console 标签中,所以缺少文件或启动时崩溃时,终端中运行 Inspector 的部分保持安静,这些问题会出现在那里。