
Multichat MCP Server
一个服务器,可以同时与多个基于 Unichat 的 MCP 服务器进行通信,允许用户查询不同的语言模型,并将它们的响应组合起来,以获得更全面的结果。
README
Multichat MCP 服务器
项目概览
本项目是重构 FiveM 资源的一个大型项目的一部分,旨在构建一个更健壮和可维护的代码库。我们正在利用模型上下文协议 (MCP) 通过与外部服务和 API 集成来扩展资源的功能。
multichat-mcp
服务器专门用于同时启用与多个基于 unichat 的 MCP 服务器的通信。这使我们能够查询不同的语言模型并组合它们的响应,从而可能产生更全面和细致的结果。它充当标准的 MCP 服务器,公开一个主机(Roo/Cline)可以使用的 multichat
工具。然后,multichat-mcp
服务器管理与其他 unichat 服务器的客户端连接。
当前问题
我们遇到了进行跨服务器 MCP 调用的问题。最初的目标是使用 multichat-mcp
服务器直接调用其他 MCP 服务器上的 unichat
工具,特别是 Lacayo 1
和 openrouter-chat
。但是,这些调用始终返回“Method not found”错误 (-32601)。
使用 use_mcp_tool
命令直接调用 Lacayo 1
和 openrouter-chat
上的 unichat
工具 可以 正常工作。这最初表明问题出在 multichat-mcp
的跨服务器通信中。然而,经过大量的故障排除和研究,我们发现 MCP 不支持 直接的服务器到服务器通信。主机 (Roo/Cline) 负责协调服务器之间的所有通信。
故障排除步骤和尝试的方法
我们已采取以下步骤来诊断和解决“Method not found”错误,并探索了各种方法:
-
验证 MCP 服务器配置: 我们仔细检查了
cline_mcp_settings.json
文件,以确保所有服务器(multichat
、Lacayo 1
和openrouter-chat
)都已正确配置,具有正确的命令、参数和环境变量。 -
检查 JSON-RPC 请求格式: 我们查阅了 MCP 文档和示例,以确保
multichat-mcp
发送的 JSON-RPC 请求格式正确,包括method
、params
和id
字段。 -
测试直接调用: 我们确认使用
use_mcp_tool
直接调用Lacayo 1
和openrouter-chat
上的unichat
工具可以按预期工作。这会将问题隔离到multichat-mcp
中的跨服务器通信尝试。 -
通过 Perplexity 查阅文档: 我们广泛使用了 Perplexity MCP 服务器来搜索相关的 MCP 文档、示例和故障排除技巧。我们专门搜索了:
- “模型上下文协议 (MCP) 跨服务器通信最佳实践。如何在 MCP 服务器之间发出请求、服务器发现和客户端连接管理。重点关注官方文档和示例。”
- “模型上下文协议 (MCP) 客户端连接处理和身份验证。如何在 MCP 中正确建立和验证客户端与服务器之间的连接。重点关注官方文档和 TypeScript SDK 示例。”
- “MCP(模型上下文协议)用于工具执行的确切方法名称。寻找工具/调用用法的真实示例、JSON-RPC 方法名称以及 TypeScript SDK 中成功的客户端-服务器交互。重点关注 GitHub 问题和关于方法命名的讨论。”
- “GitHub 上的模型上下文协议 (MCP) 实现,重点关注服务器到服务器通信和跨服务器请求处理。寻找过去一年的 TypeScript/JavaScript 示例。包括请求路由和消息传递模式。”
这些搜索帮助我们理解了 MCP 的核心原则、正确的方法名称(
tools/list
和tools/call
)以及客户端-主机-服务器架构。我们了解到 不支持 直接的服务器到服务器通信。 -
修改服务器代码(多次迭代): 我们迭代地修改了
multichat-mcp
服务器代码(src/index.ts
和src/server.ts
)以尝试不同的方法,包括:-
不正确的方法(已丢弃):
- 尝试使用原始 JSON-RPC 请求和 stdio 操作进行直接的服务器到服务器调用。这是基于对 MCP 架构的误解。
- 在循环中创建多个
Client
实例,每个实例都尝试连接到不同的服务器。这是不正确的,因为每个客户端都应连接到单个服务器。 - 尝试使用自定义
mcp_instructions
响应类型来指示主机进行调用。MCP 不支持用于跨服务器通信的自定义消息类型。 - 使用不正确的方法名称,例如
tool/call
(单数)而不是tools/call
(复数)。 - 尝试使用
rpc.discover
和mcp.tools.list
,它们不是标准的 MCP 方法。 - 尝试使用
tool/route
通知,这不是标准的 MCP 方法。
-
正确的方法(当前实现):
- 为 每个目标服务器(Lacayo 1、openrouter-chat)创建一个
Client
实例,并将它们存储在Map
中。 - 使用
StdioClientTransport
将unichat-ts-mcp-server
生成为子进程。这是必要的,因为multichat-mcp
需要充当 unichat 服务器的 客户端。 - 使用
client.listTools()
方法来验证连接并发现可用的工具。 - 使用
client.request()
方法,使用正确的tools/call
方法名称和参数,遵循标准的 JSON-RPC 2.0 格式。 - 使用
client.connect()
并正确处理传输。 - 使用 capabilities 正确初始化客户端。
- 使用 Zod 模式验证来确保请求和响应格式正确。
- 确保已安装必要的依赖项 (
package.json
) 并且代码已正确构建 (tsconfig.json
和npm run build
)。
- 为 每个目标服务器(Lacayo 1、openrouter-chat)创建一个
-
当前状态
multichat-mcp
服务器目前仍然返回“Method not found”错误。我们仍在调试该问题,但我们在理解正确的 MCP 架构和实现模式方面取得了重大进展。我们现在正在使用正确的客户端-服务器通信模型,但我们的请求格式或服务器配置可能仍然存在细微问题。
涉及的文件:
src/server.ts
:主服务器实现。src/index.ts
:服务器入口点。package.json
:依赖项和构建脚本。tsconfig.json
:TypeScript 配置。../../../../../../Users/kurror/AppData/Roaming/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/cline_mcp_settings.json
:MCP 服务器配置文件。
安装
先决条件:
- 您的系统上已安装 Node.js 和 npm。
步骤:
-
导航到 MCP 服务器目录:
cd C:\\Users\\kurror\\AppData\\Roaming\\Roo-Code\\MCP
-
克隆或创建
multichat-mcp
目录。 -
将服务器文件(
package.json
、tsconfig.json
、src/index.ts
、src/server.ts
)放在multichat-mcp
目录中。 -
安装依赖项:
npm install
-
构建 TypeScript 代码:
npm run build
配置
要启用 multichat-mcp
服务器,您需要将其配置添加到 cline_mcp_settings.json
文件中,该文件位于 C:\\Users\\kurror\\AppData\\Roaming\\Code\\User\\globalStorage\\rooveterinaryinc.roo-cline\\settings\\cline_mcp_settings.json
。
将以下条目添加到 mcpServers
对象:
{
"mcpServers": {
"multichat": {
"command": "node",
"args": [
"C:\\Users\\kurror\\AppData\\Roaming\\Roo-Code\\MCP\\multichat-mcp\\build\\index.js"
],
"env": {}
}
}
}
用法(测试)
您可以使用 Cline 环境中的 use_mcp_tool
命令来测试 multichat-mcp
服务器。
multichat
工具:
要将消息发送到多个 unichat 服务器并保存它们的响应,请使用以下格式:
<use_mcp_tool>
<server_name>multichat</server_name>
<tool_name>multichat</tool_name>
<arguments>
{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "What is your opinion about async programming?"
}
],
"servers": ["Lacayo 1", "openrouter-chat"],
"outputDir": "test_output"
}
</arguments>
</use_mcp_tool>
messages
:要发送到每个服务器的消息数组。该格式遵循标准的 unichat 消息格式(具有role
和content
的对象数组)。servers
:要调用的 unichat 服务器名称数组(例如,"Lacayo 1"
、"openrouter-chat"
)。outputDir
:响应将保存到的目录名称(在 MCP 服务器的工作目录中)。重要提示: 由于“Method not found”错误,目前无法正确保存响应。
read_response
工具:
要读取已保存的响应文件(一旦服务器正常运行),请使用:
<use_mcp_tool>
<server_name>multichat</server_name>
<tool_name>read_response</tool_name>
<arguments>
{
"outputDir": "test_output",
"server": "Lacayo 1"
}
</arguments>
</use_mcp_tool>
outputDir
:保存响应的目录。server
:您要读取其响应的服务器的名称。
测试的重要说明:
- 确保
Lacayo 1
和openrouter-chat
服务器正在运行并且已在cline_mcp_settings.json
中正确配置。 - 在对
multichat-mcp
进行代码更改后,您必须在multichat-mcp
目录中运行npm run build
以编译 TypeScript 代码。 - MCP 主机 (Roo/Cline) 会在配置文件更改时自动重启服务器,但如果遇到问题,可能需要手动重启。
使用 Perplexity 和 Unichat
-
Perplexity: 您可以使用 Perplexity MCP 服务器来研究和收集与 MCP、FiveM 开发和任何其他技术主题相关的信息。这有助于查找文档、示例和问题的解决方案。
-
Unichat 服务器:
Lacayo 1
和openrouter-chat
服务器通过unichat
工具提供对语言模型的访问。您可以使用这些服务器进行常规编码帮助、调试和生成代码片段。您可以使用use_mcp_tool
直接测试它们,以确保它们正常运行。
更新的用法和故障排除(已更正)
原始文档和故障排除步骤描述了跨服务器通信的不正确方法。本节提供更正后的用法说明,并解决了我们遇到的超时问题。
依赖项
@modelcontextprotocol/sdk
: 提供构建 MCP 服务器和客户端的核心功能。zod
: 用于模式验证和类型安全。fs/promises
,path
,url
,crypto
: Node.js 内置模块,用于文件系统操作、路径操作、URL 解析和加密功能。
multichat
工具(更正后的用法)
multichat
工具旨在将 相同 的消息发送到多个 unichat 服务器并收集它们的响应。它 不 促进直接的服务器到服务器通信。正确的使用方法如下:
重要提示: multichat
服务器和与其通信的 unichat
服务器必须在 单独 的终端窗口中运行。
-
启动 unichat 服务器: 为您要使用的每个 unichat 服务器(例如,“Lacayo 1”、“openrouter-chat”)打开单独的终端窗口。在每个终端中,导航到 unichat 服务器目录并运行:
cd C:\Users\kurror\AppData\Roaming\Roo-Code\MCP\unichat-ts-mcp-server $env:UNICHAT_MODEL="gpt-4o" # 或您所需的模型 $env:UNICHAT_API_KEY="your_api_key" # 替换为您实际的 API 密钥 node ./build/index.js
-
启动 multichat 服务器: 在 单独 的终端窗口中,导航到
multichat-mcp
目录并运行:cd C:\Users\kurror\AppData\Roaming\Roo-Code\MCP\multichat-mcp node ./build/index.js
-
发送请求: 在 第三个 终端窗口中,导航到
multichat-mcp
目录并创建一个包含请求内容的request.json
文件。然后,使用 PowerShell 发送请求:cd C:\Users\kurror\AppData\Roaming\Roo-Code\MCP\multichat-mcp $request = @{ jsonrpc = "2.0" id = 1 method = "tools/call" params = @{ name = "multichat" arguments = @{ messages = @( @{role = "system"; content = "You are a helpful assistant."}, @{role = "user"; content = "Hello, world!"} ) servers = @("Lacayo 1", "openrouter-chat") outputDir = "my-test-output" } } } | ConvertTo-Json -Depth 10 $request | Out-File -FilePath "request.json" -Encoding utf8 Get-Content "request.json" | node ./build/index.js
这将在
multichat-mcp
目录中创建一个responses/my-test-output
目录,其中包含来自每个服务器的响应(例如,Lacayo 1.json
、openrouter-chat.json
)和一个_session.json
文件来跟踪会话。如果服务器未能响应,则会创建一个错误文件(例如,Lacayo 1_error.json
)来代替。
read_response
工具(更正后的用法)
read_response
工具读取先前 multichat
调用生成的已保存响应文件。
示例请求(在 Roo 中):
<use_mcp_tool>
<server_name>multichat</server_name>
<tool_name>read_response</tool_name>
<arguments>
{
"outputDir": "my-test-output",
"server": "Lacayo 1"
}
</arguments>
</use_mcp_tool>
重要提示: outputDir
相对于 multichat-mcp/responses
目录。该工具希望在 responses
中找到一个与 outputDir
值匹配的子目录。在该子目录中,它会查找 <server>.json
文件(对于成功的响应)或 <server>_error.json
文件(对于错误)。
故障排除(已更新)
- 超时: 超时的主要原因是错误地假设
multichat
可以直接调用其他服务器。更正后的用法(所有服务器都在单独的终端中运行)解决了这个问题。确保在发送multichat
请求 之前 运行所有 unichat 服务器。 - 无效的会话目录: 当
read_response
无法在multichat-mcp/responses
目录中找到指定的outputDir
时,会发生此错误。仔细检查outputDir
值,并确保multichat
命令已成功运行并创建了输出目录。 - 未创建响应文件: 如果即使在遵循更正后的用法后,
responses
目录中也没有创建任何文件,则可能是文件系统权限存在问题,或者multichat
服务器的响应处理中存在静默错误。检查服务器日志中是否有任何错误消息。同样重要的是,验证您要定位的 unichat 服务器是否正在运行并正确响应。您可以使用带有unichat
工具的use_mcp_tool
单独测试它们。
错误是:
setRequestHandler
的使用不正确:我分别传递了方法名称和模式,而不是将方法名称包含在模式中。- 参数访问不正确:由于模式问题,
request.params
的类型不正确。 client.request
中的响应模式不正确:我使用了z.any()
,它与RequestOptions
不兼容。
修复方法是:
- 正确定义
ForwardRequestSchema
: 包含带有z.literal("mcp.forward")
的method
字段。 - 正确使用
setRequestHandler
: 仅传递模式和处理函数。 - 正确访问参数: 使用模式解析后使用
request.params
。 - 在 client.request 调用中使用
z.unknown()
。
推荐服务器

Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。