本包力求成为最及时的 模型上下文协议 (MCP) 客户端及其功能数据库,以使 MCP 服务器了解客户端支持哪些特性以及如何响应这些特性,从而提供最佳的用户和代理体验。不幸的是,初始握手期间的 MCP 协议能力协商不足以实现这一点——详情请参见下文的背景部分。
换句话说,本包是社区 MCP 客户端表的程序化版本。 社区 MCP 客户端
本包提供了一个名为 mcp-clients.json 的 JSON 文件,列出了所有已知的 MCP 客户端、它们的元数据和功能。这是一个单一的 JSON 文件,便于多种编程语言访问数据,同时为 NPM 包启用 TypeScript 类型安全。
JSON 文件包含一个对象,其中键为客户名称,值为客户信息的对象:
{
// 客户端名称对应于 MCP 客户端 `initialize` 请求中的 `params.clientInfo.name`,例如 "ExampleClient"
"<client-name>": {
// MCP 客户端的显示名称,例如 "Example Client"
title: string,
// 客户端主页的 URL
url: string,
// 对应于 MCP 客户端 `initialize` 请求中的 `params.protocolVersion`,例如 "2.0.0"
protocolVersion: string,
// 如果客户端支持访问服务器资源,则存在,包括是否可以处理其动态变化,以及是否可以订阅资源更新
resources?: { listChanged?: boolean, subscribe?: boolean },
// 如果客户端支持访问服务器提示,则存在,包括是否可以处理其动态变化
prompts?: { listChanged?: boolean },
// 如果客户端支持访问服务器工具,则存在,包括是否可以处理其动态变化
tools?: { listChanged?: boolean },
// 如果客户端支持从服务器获取信息,则存在
elicitation?: object,
// 如果客户端支持从大型语言模型 (LLM) 中采样,则存在
sampling?: object,
// 如果客户端支持列出其根目录,则存在,包括是否可以通知服务器其动态变化
roots?: { listChanged?: boolean },
// 如果客户端支持处理服务器的参数自动补全建议,则存在
completions?: object,
// 如果客户端支持读取服务器的日志消息,则存在
logging?: object,
},
"<client-name-2>": { ... },
...
}
请注意,客户端对象受到 MCP 的 ClientCapabilities 和 ServerCapabilities 对象的启发,并且相应的字段类型兼容。未来可能会添加额外的字段。
重要:MCP 服务器必须始终优先考虑从 MCP 客户端的 initialize 请求中通过 params.capabilities 字段(类型为
ClientCapabilities)接收到的信息,而不是本包提供的能力信息,因为前者总是更准确!
对于每个唯一的客户端名称,JSON 文件仅包含一个记录,代表最新已知公开发布的版本信息。这一假设基于大多数用户将使用 MCP 客户端的最新版本。
protocolVersion 仅作为粗略检查:如果从 MCP 客户端接收到的版本与 JSON 文件中提供的版本不匹配,MCP 服务器应忽略 JSON 文件提供的任何信息,因为它显然已过时。
如果新发布的 MCP 客户端相比之前的版本引入了对新服务器功能的支持,我们强烈建议 MCP 客户端使用新的客户端名称,以避免混淆服务器并提供最佳的用户体验。
| 显示名称 | 客户端名称 | 资源 | 提示 | 工具 | 发现 | 采样 | 根目录 | 激发 |
|---|---|---|---|---|---|---|---|---|
| Amazon Q 开发者 CLI | Q CLI | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Apify MCP 客户端 | apify-mcp-client | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Claude AI | claude-ai | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Claude Code | claude-code | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ |
| Cursor 编辑器 | cursor-vscode | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ |
| LibreChat | @librechat/api-client | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Opencode | opencode | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Visual Studio Code | Visual Studio Code | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Windsurf 编辑器 | windsurf-client | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
notifications/tools/list_changed 通知动态发现工具。这允许在连接活动期间添加或移除工具。通过运行以下命令安装 NPM 包:
npm install mcp-client-capabilities
import { mcpClients } from 'mcp-client-capabilities';
const claudeClient = mcpClients['claude-ai'];
console.log('Claude AI 元数据和功能:', claudeClient);
console.log('显示名称:', claudeClient.title);
// 列出所有可用客户端
console.log('可用客户端:', Object.keys(mcpClients));
const { mcpClients } = require('mcp-client-capabilities');
const claudeClient = mcpClients['claude-ai'];
console.log('Claude AI 元数据和功能:', claudeClient);
console.log('显示名称:', claudeClient.title);
// 列出所有可用客户端
console.log('可用客户端:', Object.keys(mcpClients));
通过运行以下命令安装 PyPI 包:
pip install mcp-client-capabilities
from mcp_client_capabilities import mcp_clients
claude_client = mcp_clients['claude-ai']
print('Claude AI 元数据和功能:', claude_client)
print('显示名称:', claude_client['title'])
# 列出所有可用客户端
print('可用客户端:', mcp_clients.keys())
你可以从以下 URL 获取原始的 mcp-clients.json 文件:
当 MCP 客户端 连接 到 MCP 服务器时,它必须发送一个 initialize 请求,如:
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {
"roots": { "listChanged": true },
"sampling": {},
"elicitation": {}
},
"clientInfo": {
"name": "ExampleClient",
"title": "Example Client Display Name",
"version": "1.0.0"
}
}
}
然后,MCP 服务器必须回复如下消息:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2024-11-05",
"capabilities": {
"logging": {},
"prompts": { "listChanged": true },
"resources": { "subscribe": true, "listChanged": true },
"tools": { "listChanged": true }
},
"serverInfo": {
"name": "ExampleServer",
"title": "Example Server Display Name",
"version": "1.0.0"
},
"instructions": "给客户端的可选指令"
}
}
不幸的是,这种 能力协商 不足以让 MCP 服务器完全理解客户端支持哪些特性。例如,服务器无法知道客户端是否支持通过 notifications/tools/list_changed 通知动态发现工具,或者是否应用了初始服务器 instructions 到模型上下文中。但这些信息对于服务器来说至关重要,以便了解它可以向客户端提供什么样的接口,例如是否应该提供用于动态发现和调用的替代工具,或将指令放入工具描述中。
MCP 的这一限制导致了“最低共同标准”方法,即服务器只采用基本的 MCP 特性,这些特性它们可以确定大多数客户端都支持。最终,这导致了 MCP 协议的停滞,服务器和客户端都没有动力采用最新的协议特性。
虽然有 MCP 标准提案,如 SEP-1381,旨在从协议层面解决这个问题,但这些提案需要时间才能被批准并广泛采用。因此,我们发布了这个包,希望能加速 MCP 生态系统的发展。
我们非常感谢社区贡献,使 MCP 客户端及其功能列表完整且及时。要添加新客户端或更新现有客户端,只需编辑 src/mcp-clients.json 文件并提交拉取请求:
构建过程包括验证以确保 JSON 结构符合 TypeScript 接口。
# 验证 JSON 文件结构
npm run test
# 构建项目(包括验证)
npm run build
# 运行示例
npm run example
为了方便地从 MCP 初始化请求中获取客户端名称和版本,以便添加或更新客户端功能,可以使用简单的 netcat 和 ngrok 设置:
nc -lvp 3001ngrok http 3001在 netcat 终端中,你会看到包含客户端信息的 initialize 请求,例如:
{
"jsonrpc": "2.0",
"id": 0,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {
"sampling": {},
"elicitation": {},
"roots": { "listChanged": true }
},
"clientInfo": {
"name": "mcp-inspector",
"version": "0.16.5"
}
}
}
McpClientRecord - 完整的 MCP 客户端能力集,带有强制性的 title 和 url 字段ClientsIndex - 客户端对象结构的类型mcpClients - 按客户端名称索引的所有客户端能力的对象types.ts 中的所有 TypeScript 接口