introduction
MCP 是一个开放协议,旨在标准化应用程序如何为 LLMs 提供上下文。你可以将 MCP 想象为 AI 应用的 USB-C 接口。正如 USB-C 提供了一种标准化的方式来连接你的设备到各种外设和配件,MCP 提供了一种标准化的方式来连接 AI 模型到不同的数据源和工具。
为什么选择 MCP?
MCP 帮助你在 LLMs 之上构建代理和复杂的工作流。LLMs 经常需要与数据和工具集成,而 MCP 提供了:
- 一个不断增长的预构建集成列表,你的 LLM 可以直接插入
- 在不同 LLM 提供商和供应商之间切换的灵活性
- 在你的基础设施内保护数据的最佳实践
通用架构
MCP 的核心遵循客户端-服务器架构,其中主机应用程序可以连接到多个服务器:
- MCP 主机:如 Claude Desktop、IDE 或 AI 工具,希望通过 MCP 访问数据的程序
- MCP 客户端:与服务器保持 1:1 连接的协议客户端
- MCP 服务器:通过标准化的 Model Context Protocol 暴露特定功能的轻量级程序
- 本地数据源:你的计算机文件、数据库和服务,MCP 服务器可以安全访问
- 远程服务:通过互联网(例如通过 API)可用的外部系统,MCP 服务器可以连接
For Server Developers
在本教程中,我们将构建一个简单的MCP天气服务器,并将其连接到主机Claude for Desktop。我们将从基本设置开始,然后逐步深入到更复杂的用例。
我们将构建什么
许多LLM(包括Claude)目前还没有获取天气预报和恶劣天气警报的能力。让我们使用MCP来解决这个问题!
我们将构建一个暴露两个工具的服务器:get-alerts和get-forecast。然后,我们将服务器连接到MCP主机(在本例中为Claude for Desktop):
注意:服务器可以连接到任何客户端。我们在这里选择Claude for Desktop是为了简单起见,但我们也有关于构建自己的客户端的指南,以及其他客户端的列表。
核心MCP概念
MCP服务器可以提供三种主要类型的功能:
- 资源:客户端可以读取的类似文件的数据(如API响应或文件内容)
- 工具:LLM可以调用的函数(需要用户批准)
- Prompts:帮助用户完成特定任务的预写模板
本教程将主要关注工具。
开始构建我们的天气服务器
让我们开始构建我们的天气服务器!你可以在这里找到我们将要构建的完整代码。
先决知识
本快速入门假设你熟悉:
- Python
- 像Claude这样的LLM
系统要求
- 已安装Python 3.10或更高版本。
- 你必须使用Python MCP SDK 1.2.0或更高版本。
设置你的环境
首先,让我们安装uv并设置我们的Python项目和环境:
curl -LsSf https://astral.sh/uv/install.sh | sh
确保之后重新启动终端,以确保uv命令被正确识别。
现在,让我们创建并设置我们的项目:
# Create a new directory for our project
uv init weather
cd weather
# Create virtual environment and activate it
uv venv
.venv\Scripts\activate
# Install dependencies
uv add mcp[cli] httpx
# Create our server file
new-item weather.py
现在让我们深入构建你的服务器。
构建你的服务器
导入包并设置实例
将这些添加到你的weather.py文件的顶部:
from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP
# Initialize FastMCP server
mcp = FastMCP("weather")
# Constants
NWS_API_BASE = "https://api.weather.gov"
USER_AGENT = "weather-app/1.0"
FastMCP类使用Python类型提示和文档字符串自动生成工具定义,使得创建和维护MCP工具变得容易。
帮助函数
接下来,让我们添加用于查询和格式化来自国家气象局API数据的辅助函数:
async def make_nws_request(url: str) -> dict[str, Any] | None:
"""Make a request to the NWS API with proper error handling."""
headers = {
"User-Agent": USER_AGENT,
"Accept": "application/geo+json"
}
async with httpx.AsyncClient() as client:
try:
response = await client.get(url, headers=headers, timeout=30.0)
response.raise_for_status()
return response.json()
except Exception:
return None
def format_alert(feature: dict) -> str:
"""Format an alert feature into a readable string."""
props = feature["properties"]
return f"""
Event: {props.get('event', 'Unknown')}
Area: {props.get('areaDesc', 'Unknown')}
Severity: {props.get('severity', 'Unknown')}
Description: {props.get('description', 'No description available')}
Instructions: {props.get('instruction', 'No specific instructions provided')}
"""
实现工具执行
工具执行处理程序负责实际执行每个工具的逻辑。让我们添加它:
@mcp.tool()
async def get_alerts(state: str) -> str:
"""Get weather alerts for a US state.
Args:
state: Two-letter US state code (e.g. CA, NY)
"""
url = f"{NWS_API_BASE}/alerts/active/area/{state}"
data = await make_nws_request(url)
if not data or "features" not in data:
return "Unable to fetch alerts or no alerts found."
if not data["features"]:
return "No active alerts for this state."
alerts = [format_alert(feature) for feature in data["features"]]
return "\n---\n".join(alerts)
@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:
"""Get weather forecast for a location.
Args:
latitude: Latitude of the location
longitude: Longitude of the location
"""
# First get the forecast grid endpoint
points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"
points_data = await make_nws_request(points_url)
if not points_data:
return "Unable to fetch forecast data for this location."
# Get the forecast URL from the points response
forecast_url = points_data["properties"]["forecast"]
forecast_data = await make_nws_request(forecast_url)
if not forecast_data:
return "Unable to fetch detailed forecast."
# Format the periods into a readable forecast
periods = forecast_data["properties"]["periods"]
forecasts = []
for period in periods[:5]: # Only show next 5 periods
forecast = f"""
{period['name']}:
Temperature: {period['temperature']}°{period['temperatureUnit']}
Wind: {period['windSpeed']} {period['windDirection']}
Forecast: {period['detailedForecast']}
"""
forecasts.append(forecast)
return "\n---\n".join(forecasts)
运行服务器
最后,让我们初始化并运行服务器:
if __name__ == "__main__":
# Initialize and run the server
mcp.run(transport='stdio')
你的服务器已经完成!运行uv run weather.py以确认一切正常。
现在让我们从现有的MCP主机Claude for Desktop测试你的服务器。
使用Claude for Desktop测试你的服务器
首先,确保你已经安装了Claude for Desktop。你可以在这里安装最新版本。 如果你已经安装了Claude for Desktop,请确保它已更新到最新版本。
我们需要为你想使用的MCP服务器配置Claude for Desktop。为此,请在文本编辑器中打开你的Claude for Desktop应用程序配置~/Library/Application Support/Claude/claude_desktop_config.json。如果文件不存在,请创建它。
例如,如果你安装了VS Code:
code ~/Library/Application Support/Claude/claude_desktop_config.json
然后,你将在mcpServers键中添加你的服务器。只有在至少正确配置了一个服务器时,MCP UI元素才会在Claude for Desktop中显示。
在本例中,我们将添加我们的单个天气服务器,如下所示:
{
"mcpServers": {
"weather": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/PARENT/FOLDER/weather",
"run",
"weather.py"
]
}
}
}
警告:你可能需要在
command字段中传递uv可执行文件的完整路径。你可以通过在MacOS/Linux上运行which uv或在Windows上运行where uv来获取此路径。
注意:确保你传递的是服务器的绝对路径。
这告诉Claude for Desktop:
- 有一个名为“weather”的MCP服务器
- 通过运行
uv --directory /ABSOLUTE/PATH/TO/PARENT/FOLDER/weather run weather.py来启动它
保存文件,并重新启动Claude for Desktop。
使用命令进行测试
让我们确保Claude for Desktop能够识别我们在weather服务器中暴露的两个工具。你可以通过查找锤子图标来做到这一点:
点击锤子图标后,你应该看到列出的两个工具:
如果你的服务器没有被Claude for Desktop识别,请继续到故障排除部分以获取调试提示。
如果锤子图标已经显示,你现在可以通过在Claude for Desktop中运行以下命令来测试你的服务器:
- 萨克拉门托的天气怎么样?
- 德克萨斯州有哪些活跃的天气警报?
注意:由于这是美国国家气象局服务,查询仅适用于美国地点。
幕后发生了什么
当你提出问题时:
- 客户端将你的问题发送给Claude
- Claude分析可用的工具并决定使用哪个工具
- 客户端通过MCP服务器执行所选工具
- 结果被发送回Claude
- Claude制定自然语言响应
- 响应显示给你!
For Client Developers
在本教程中,您将学习如何构建一个连接MCP服务器的LLM驱动的聊天机器人客户端。建议您先完成Server quickstart教程,该教程将引导您完成构建第一个服务器的基本步骤。
系统要求
在开始之前,请确保您的系统满足以下要求:
- Mac或Windows电脑
- 已安装最新版本的Python
- 已安装最新版本的
uv
设置您的环境
首先,使用uv创建一个新的Python项目:
# Create project directory
uv init mcp-client
cd mcp-client
# Create virtual environment
uv venv
# Activate virtual environment
# On Windows:
.venv\Scripts\activate
# On Unix or MacOS:
source .venv/bin/activate
# Install required packages
uv add mcp anthropic python-dotenv
# Remove boilerplate files
rm hello.py
# Create our main file
touch client.py
设置您的API密钥
您需要从Anthropic Console获取一个Anthropic API密钥。
创建一个.env文件来存储它:
touch .env
将您的密钥添加到.env文件中:
ANTHROPIC_API_KEY=your_api_key_here
将.env添加到您的.gitignore文件中:
echo ".env" >> .gitignore
注意: 请确保您的ANTHROPIC_API_KEY安全!
创建客户端
基本客户端结构
首先,设置我们的导入并创建基本的客户端类:
import asyncio
from typing import Optional
from contextlib import AsyncExitStack
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
from anthropic import Anthropic
from dotenv import load_dotenv
load_dotenv() # load environment variables from .env
class MCPClient:
def __init__(self):
# Initialize session and client objects
self.session: Optional[ClientSession] = None
self.exit_stack = AsyncExitStack()
self.anthropic = Anthropic()
# methods will go here
服务器连接管理
接下来,我们将实现连接到MCP服务器的方法:
async def connect_to_server(self, server_script_path: str):
"""Connect to an MCP server
Args:
server_script_path: Path to the server script (.py or .js)
"""
is_python = server_script_path.endswith('.py')
is_js = server_script_path.endswith('.js')
if not (is_python or is_js):
raise ValueError("Server script must be a .py or .js file")
command = "python" if is_python else "node"
server_params = StdioServerParameters(
command=command,
args=[server_script_path],
env=None
)
stdio_transport = await self.exit_stack.enter_async_context(stdio_client(server_params))
self.stdio, self.write = stdio_transport
self.session = await self.exit_stack.enter_async_context(ClientSession(self.stdio, self.write))
await self.session.initialize()
# List available tools
response = await self.session.list_tools()
tools = response.tools
print("\nConnected to server with tools:", [tool.name for tool in tools])
查询处理逻辑
现在让我们添加处理查询和处理工具调用的核心功能:
async def process_query(self, query: str) -> str:
"""Process a query using Claude and available tools"""
messages = [
{
"role": "user",
"content": query
}
]
response = await self.session.list_tools()
available_tools = [{
"name": tool.name,
"description": tool.description,
"input_schema": tool.inputSchema
} for tool in response.tools]
# Initial Claude API call
response = self.anthropic.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1000,
messages=messages,
tools=available_tools
)
# Process response and handle tool calls
final_text = []
assistant_message_content = []
for content in response.content:
if content.type == 'text':
final_text.append(content.text)
assistant_message_content.append(content)
elif content.type == 'tool_use':
tool_name = content.name
tool_args = content.input
# Execute tool call
result = await self.session.call_tool(tool_name, tool_args)
final_text.append(f"[Calling tool {tool_name} with args {tool_args}]")
assistant_message_content.append(content)
messages.append({
"role": "assistant",
"content": assistant_message_content
})
messages.append({
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": content.id,
"content": result.content
}
]
})
# Get next response from Claude
response = self.anthropic.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1000,
messages=messages,
tools=available_tools
)
final_text.append(response.content[0].text)
return "\n".join(final_text)
交互式聊天界面
现在我们将添加聊天循环和清理功能:
async def chat_loop(self):
"""Run an interactive chat loop"""
print("\nMCP Client Started!")
print("Type your queries or 'quit' to exit.")
while True:
try:
query = input("\nQuery: ").strip()
if query.lower() == 'quit':
break
response = await self.process_query(query)
print("\n" + response)
except Exception as e:
print(f"\nError: {str(e)}")
async def cleanup(self):
"""Clean up resources"""
await self.exit_stack.aclose()
主入口点
最后,我们将添加主执行逻辑:
async def main():
if len(sys.argv) < 2:
print("Usage: python client.py <path_to_server_script>")
sys.exit(1)
client = MCPClient()
try:
await client.connect_to_server(sys.argv[1])
await client.chat_loop()
finally:
await client.cleanup()
if __name__ == "__main__":
import sys
asyncio.run(main())
您可以在此处找到完整的client.py文件:完整代码
关键组件解释
1. 客户端初始化
MCPClient类初始化时会管理会话和API客户端- 使用
AsyncExitStack进行资源管理 - 配置Anthropic客户端以与Claude交互
2. 服务器连接
- 支持Python和Node.js服务器
- 验证服务器脚本类型
- 设置正确的通信通道
- 初始化会话并列出可用工具
3. 查询处理
- 维护对话上下文
- 处理Claude的响应和工具调用
- 管理Claude和工具之间的消息流
- 将结果组合成连贯的响应
4. 交互式界面
- 提供简单的命令行界面
- 处理用户输入并显示响应
- 包括基本的错误处理
- 允许优雅退出
5. 资源管理
- 正确清理资源
- 处理连接问题的错误处理
- 优雅的关闭程序
常见自定义点
-
工具处理
- 修改
process_query()以处理特定工具类型 - 添加工具调用的自定义错误处理
- 实现工具特定的响应格式化
- 修改
-
响应处理
- 自定义工具结果的格式化方式
- 添加响应过滤或转换
- 实现自定义日志记录
-
用户界面
- 添加GUI或Web界面
- 实现丰富的控制台输出
- 添加命令历史记录或自动完成功能
运行客户端
要使用任何MCP服务器运行您的客户端:
uv run client.py path/to/server.py # python server
uv run client.py path/to/build/index.js # node server
注意: 如果您正在继续服务器快速入门中的天气教程,您的命令可能如下所示:python client.py .../weather/src/weather/server.py
客户端将:
- 连接到指定的服务器
- 列出可用工具
- 启动一个交互式聊天会话,您可以在其中:
- 输入查询
- 查看工具执行
- 从Claude获取响应
以下是连接到服务器快速入门中的天气服务器时的示例:
工作原理
当您提交查询时:
- 客户端从服务器获取可用工具列表
- 您的查询与工具描述一起发送给Claude
- Claude决定使用哪些工具(如果有)
- 客户端通过服务器执行任何请求的工具调用
- 结果发送回Claude
- Claude提供自然语言响应
- 响应显示给您
最佳实践
-
错误处理
- 始终将工具调用包装在try-catch块中
- 提供有意义的错误消息
- 优雅地处理连接问题
-
资源管理
- 使用
AsyncExitStack进行正确清理 - 完成后关闭连接
- 处理服务器断开连接
- 使用
-
安全性
- 将API密钥安全地存储在
.env中 - 验证服务器响应
- 谨慎处理工具权限
- 将API密钥安全地存储在
故障排除
服务器路径问题
- 仔细检查您的服务器脚本路径是否正确
- 如果相对路径不起作用,请使用绝对路径
- 对于Windows用户,请确保在路径中使用正斜杠(/)或转义的反斜杠(\)
- 验证服务器文件具有正确的扩展名(.py表示Python,.js表示Node.js)
正确路径使用示例:
python client.py /absolute/path/to/server.py
响应时间
- 第一次响应可能需要长达30秒才能返回
- 这是正常的,发生在以下情况:
- 服务器初始化
- Claude处理查询
- 工具正在执行
- 后续响应通常更快
- 在此初始等待期间不要中断进程
常见错误消息
如果您看到:
FileNotFoundError:检查您的服务器路径Connection refused:确保服务器正在运行且路径正确Tool execution failed:验证工具所需的环境变量是否已设置Timeout error:考虑增加客户端配置中的超时时间
示例客户端
本页面提供了支持Model Context Protocol (MCP)的应用程序概述。每个客户端可能支持不同的MCP功能,允许与MCP服务器进行不同级别的集成。
功能支持矩阵
| 客户端 | 资源 | 提示 | 工具 | 采样 | 根 | 备注 |
|---|---|---|---|---|---|---|
| Claude桌面应用 | ✅ | ✅ | ✅ | ❌ | ❌ | 支持所有MCP功能 |
| 5ire | ❌ | ❌ | ✅ | ❌ | ❌ | 支持工具 |
| BeeAI框架 | ❌ | ❌ | ✅ | ❌ | ❌ | 支持工具,用于代理工作流 |
| Cline | ✅ | ❌ | ✅ | ❌ | ❌ | 支持工具和资源 |
| Continue | ✅ | ✅ | ✅ | ❌ | ❌ | 支持所有MCP功能 |
| Cursor | ❌ | ❌ | ✅ | ❌ | ❌ | 支持工具 |
| Emacs Mcp | ❌ | ❌ | ✅ | ❌ | ❌ | 支持Emacs中的工具 |
| Firebase Genkit | ⚠️ | ✅ | ✅ | ❌ | ❌ | 通过工具支持资源列表和查找 |
| GenAIScript | ❌ | ❌ | ✅ | ❌ | ❌ | 支持工具 |
| Goose | ❌ | ❌ | ✅ | ❌ | ❌ | 支持工具 |
| LibreChat | ❌ | ❌ | ✅ | ❌ | ❌ | 支持代理的工具 |
| mcp-agent | ❌ | ❌ | ✅ | ⚠️ | ❌ | 支持工具、服务器连接管理和代理工作流 |
| Roo Code | ✅ | ❌ | ✅ | ❌ | ❌ | 支持工具和资源 |
| Sourcegraph Cody | ✅ | ❌ | ❌ | ❌ | ❌ | 通过OpenCTX支持资源 |
| Superinterface | ❌ | ❌ | ✅ | ❌ | ❌ | 支持工具 |
| TheiaAI/TheiaIDE | ❌ | ❌ | ✅ | ❌ | ❌ | 支持Theia AI和AI驱动的Theia IDE中的代理工具 |
| Windsurf Editor | ❌ | ❌ | ✅ | ❌ | ❌ | 支持AI Flow协作开发的工具 |
| Zed | ❌ | ✅ | ❌ | ❌ | ❌ | 提示显示为斜杠命令 |
| SpinAI | ❌ | ❌ | ✅ | ❌ | ❌ | 支持TypeScript AI代理的工具 |
| OpenSumi | ❌ | ❌ | ✅ | ❌ | ❌ | 支持OpenSumi中的工具 |
| Daydreams代理 | ✅ | ✅ | ✅ | ❌ | ❌ | 支持将服务器嵌入到Daydreams代理中 |
客户端详情
Claude桌面应用
Claude桌面应用程序提供了对MCP的全面支持,能够与本地工具和数据源进行深度集成。
主要功能:
- 完全支持资源,允许附加本地文件和数据
- 支持提示模板
- 工具集成,用于执行命令和脚本
- 本地服务器连接,增强隐私和安全性
ⓘ 注意:Claude.ai网页应用目前不支持MCP。MCP功能仅在桌面应用中可用。
5ire
5ire 是一个开源的跨平台桌面AI助手,通过MCP服务器支持工具。
主要功能:
- 内置的MCP服务器可以快速启用和禁用
- 用户可以通过修改配置文件添加更多服务器
- 开源且用户友好,适合初学者
- 未来将持续改进对MCP的支持
BeeAI框架
BeeAI框架 是一个用于构建、部署和服务强大代理工作流的开源框架。该框架包括MCP工具,这是一个简化MCP服务器集成到代理工作流中的原生功能。
主要功能:
- 无缝将MCP工具集成到代理工作流中
- 快速实例化来自连接的MCP客户端的框架原生工具
- 计划未来支持代理MCP功能
了解更多:
Cline
Cline 是VS Code中的自主编码代理,可以编辑文件、运行命令、使用浏览器等——在每一步都需要您的许可。
主要功能:
- 通过自然语言创建和添加工具(例如“添加一个可以搜索网络的工具”)
- 通过
~/Documents/Cline/MCP目录与他人分享Cline创建的自定义MCP服务器 - 显示配置的MCP服务器及其工具、资源和任何错误日志
Continue
Continue 是一个开源的AI代码助手,内置支持所有MCP功能。
主要功能:
- 输入“@”提及MCP资源
- 提示模板显示为斜杠命令
- 在聊天中直接使用内置和MCP工具
- 支持VS Code和JetBrains IDE,兼容任何LLM
Cursor
Cursor 是一个AI代码编辑器。
主要功能:
- 支持Cursor Composer中的MCP工具
- 支持STDIO和SSE
Emacs Mcp
Emacs Mcp 是一个设计用于与MCP服务器接口的Emacs客户端,能够实现无缝连接和交互。它为AI插件(如gptel和llm)提供MCP工具调用支持,遵循Emacs的标准工具调用格式。此集成增强了Emacs生态系统中AI工具的功能。
主要功能:
- 为Emacs提供MCP工具支持
Firebase Genkit
Genkit 是Firebase的SDK,用于构建和集成GenAI功能到应用程序中。genkitx-mcp 插件支持作为客户端消费MCP服务器或从Genkit工具和提示创建MCP服务器。
主要功能:
- 客户端支持工具和提示(部分支持资源)
- 在Genkit的Dev UI游乐场中支持丰富的发现
- 与Genkit现有工具和提示的无缝互操作性
- 兼容来自顶级提供商的各种GenAI模型
GenAIScript
使用GenAIScript(在JavaScript中)以编程方式组装LLM的提示。在JavaScript中编排LLM、工具和数据。
主要功能:
- 用于处理提示的JavaScript工具箱
- 抽象化使其易于使用且高效
- 无缝的Visual Studio Code集成
Goose
Goose 是一个开源的AI代理,通过自动化编码任务来增强您的软件开发。
主要功能:
- 通过工具向Goose暴露MCP功能
- MCP可以通过扩展目录、CLI或UI直接安装
- Goose允许您通过构建自己的MCP服务器扩展其功能
- 包括用于开发、网络抓取、自动化、内存以及JetBrains和Google Drive集成的内置工具
LibreChat
LibreChat 是一个开源的、可定制的AI聊天UI,支持多个AI提供商,现在包括MCP集成。
主要功能:
mcp-agent
mcp-agent 是一个简单、可组合的框架,用于使用Model Context Protocol构建代理。
主要功能:
- 自动管理MCP服务器的连接
- 向LLM暴露来自多个服务器的工具
- 实现了构建有效代理中定义的每种模式
- 支持工作流暂停/恢复信号,例如等待人类反馈
Roo Code
Roo Code 通过MCP提供AI编码辅助。
主要功能:
- 支持MCP工具和资源
- 与开发工作流集成
- 可扩展的AI功能
Sourcegraph Cody
Cody 是Sourcegraph的AI编码助手,通过OpenCTX实现MCP。
主要功能:
- 支持MCP资源
- 与Sourcegraph的代码智能集成
- 使用OpenCTX作为抽象层
- 计划未来支持更多MCP功能
SpinAI
SpinAI 是一个用于构建可观察AI代理的开源TypeScript框架。该框架提供原生MCP兼容性,允许代理无缝集成MCP服务器和工具。
主要功能:
- 为AI代理提供内置的MCP兼容性
- 开源TypeScript框架
- 可观察的代理架构
- 原生支持MCP工具集成
Superinterface
Superinterface 是一个AI基础设施和开发者平台,用于构建支持MCP的应用内AI助手、交互组件、客户端函数调用等。
主要功能:
- 在通过React组件或脚本标签嵌入的助手中使用MCP服务器的工具
- 支持SSE传输
- 使用来自任何AI提供商(OpenAI、Anthropic、Ollama等)的任何AI模型
TheiaAI/TheiaIDE
Theia AI 是一个用于构建AI增强工具和IDE的框架。AI驱动的Theia IDE 是一个基于Theia AI构建的开放且灵活的开发环境。
主要功能:
- 工具集成:Theia AI使AI代理(包括Theia IDE中的代理)能够利用MCP服务器进行无缝工具交互
- 可定制的提示:Theia IDE允许用户定义和调整提示,动态集成MCP服务器以定制工作流
- 自定义代理:Theia IDE支持创建利用MCP功能的自定义代理,使用户能够设计专用工作流
Theia AI和Theia IDE的MCP集成为用户提供了灵活性,使其成为探索和适应MCP的强大平台。
了解更多:
Windsurf Editor
Windsurf Editor 是一个将AI助手与开发者工作流结合的代理IDE。它采用创新的AI Flow系统,支持协作和独立的AI交互,同时保持开发者控制。
主要功能:
- 革命性的AI Flow范式,用于人机协作
- 智能代码生成和理解
- 丰富的开发工具,支持多模型
Zed
Zed 是一个高性能代码编辑器,内置MCP支持,专注于提示模板和工具集成。
主要功能:
- 提示模板显示为编辑器中的斜杠命令
- 工具集成,增强编码工作流
- 与编辑器功能和工作区上下文紧密集成
- 不支持MCP资源
OpenSumi
OpenSumi 是一个帮助您快速构建AI原生IDE产品的框架。
主要功能:
- 支持OpenSumi中的MCP工具
- 支持内置IDE MCP服务器和自定义MCP服务器
Daydreams
Daydreams 是一个用于在链上执行任何操作的生成代理框架。
主要功能:
- 支持配置中的MCP服务器
- 暴露MCP客户端
为您的应用程序添加MCP支持
如果您已经为您的应用程序添加了MCP支持,我们鼓励您提交拉取请求将其添加到此列表中。MCP集成可以为您的用户提供强大的上下文AI功能,并使您的应用程序成为不断增长的MCP生态系统的一部分。
添加MCP支持的好处:
- 允许用户带来自己的上下文和工具
- 加入不断增长的互操作AI应用程序生态系统
- 为用户提供灵活的集成选项
- 支持本地优先的AI工作流
要开始在您的应用程序中实现MCP,请查看我们的Python或TypeScript SDK文档
示例server
本页面展示了各种Model Context Protocol (MCP)服务器,展示了该协议的功能和多样性。这些服务器使大型语言模型(LLMs)能够安全地访问工具和数据源。
参考实现
这些官方参考服务器展示了MCP的核心功能和SDK的使用:
数据和文件系统
- Filesystem - 具有可配置访问控制的安全文件操作
- PostgreSQL - 具有模式检查功能的只读数据库访问
- SQLite - 数据库交互和商业智能功能
- Google Drive - Google Drive的文件访问和搜索功能
开发工具
- Git - 读取、搜索和操作Git仓库的工具
- GitHub - 仓库管理、文件操作和GitHub API集成
- GitLab - GitLab API集成,支持项目管理
- Sentry - 从Sentry.io检索和分析问题
网页和浏览器自动化
- Brave Search - 使用Brave的Search API进行网页和本地搜索
- Fetch - 为LLM使用优化的网页内容抓取和转换
- Puppeteer - 浏览器自动化和网页抓取功能
生产力和通信
- Slack - 频道管理和消息功能
- Google Maps - 位置服务、路线和地点详情
- Memory - 基于知识图谱的持久记忆系统
AI和专用工具
- EverArt - 使用各种模型生成AI图像
- Sequential Thinking - 通过思维序列进行动态问题解决
- AWS KB Retrieval - 使用Bedrock Agent Runtime从AWS知识库中检索信息
官方集成
这些MCP服务器由公司为其平台维护:
- Axiom - 使用自然语言查询和分析日志、跟踪和事件数据
- Browserbase - 在云端自动化浏览器交互
- Cloudflare - 在Cloudflare开发者平台上部署和管理资源
- E2B - 在安全的云沙箱中执行代码
- Neon - 与Neon无服务器Postgres平台交互
- Obsidian Markdown Notes - 在Obsidian库中读取和搜索Markdown笔记
- Qdrant - 使用Qdrant向量搜索引擎实现语义记忆
- Raygun - 访问崩溃报告和监控数据
- Search1API - 用于搜索、爬取和站点地图的统一API
- Stripe - 与Stripe API交互
- Tinybird - 与Tinybird无服务器ClickHouse平台交互
社区亮点
不断增长的社区开发服务器生态系统扩展了MCP的功能:
- Docker - 管理容器、镜像、卷和网络
- Kubernetes - 管理Pod、部署和服务
- Linear - 项目管理和问题跟踪
- Snowflake - 与Snowflake数据库交互
- Spotify - 控制Spotify播放和管理播放列表
- Todoist - 任务管理集成
注意: 社区服务器未经测试,使用风险自负。它们与Anthropic无关,也不受其认可。
有关社区服务器的完整列表,请访问MCP Servers Repository。
入门指南
使用参考服务器
基于TypeScript的服务器可以直接使用npx:
npx -y @modelcontextprotocol/server-memory
基于Python的服务器可以使用uvx(推荐)或pip:
# 使用uvx
uvx mcp-server-git
# 使用pip
pip install mcp-server-git
python -m mcp_server_git
配置Claude
要将MCP服务器与Claude一起使用,请将其添加到您的配置中:
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
},
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/files"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
}
}
}
}
其他资源
- MCP Servers Repository - 参考实现和社区服务器的完整集合
- Awesome MCP Servers - 精选的MCP服务器列表
- MCP CLI - 用于测试MCP服务器的命令行检查器
- MCP Get - 安装和管理MCP服务器的工具
- Supergateway - 通过SSE运行MCP stdio服务器
访问我们的GitHub Discussions与MCP社区互动。
用大模型帮助搭建MCP
本指南将帮助你使用LLMs(大型语言模型)来构建自定义的Model Context Protocol(MCP)服务器和客户端。本教程将重点介绍Claude,但你可以使用任何前沿的LLM来完成此任务。
准备文档
在开始之前,收集必要的文档以帮助Claude理解MCP:
- 访问 modelcontextprotocol.io/llms-full.t… 并复制完整的文档文本
- 导航到 MCP TypeScript SDK 或 Python SDK 仓库
- 复制README文件和其他相关文档
- 将这些文档粘贴到你与Claude的对话中
描述你的服务器
在提供文档后,向Claude清楚地描述你想要构建的服务器类型。具体说明:
- 你的服务器将暴露哪些资源
- 它将提供哪些工具
- 它应该提供哪些提示
- 它需要与哪些外部系统交互
例如:
Build an MCP server that:
- Connects to my company's PostgreSQL database
- Exposes table schemas as resources
- Provides tools for running read-only SQL queries
- Includes prompts for common data analysis tasks
与Claude合作
在与Claude合作构建MCP服务器时:
- 首先从核心功能开始,然后逐步添加更多功能
- 要求Claude解释你不理解的代码部分
- 根据需要请求修改或改进
- 让Claude帮助你测试服务器并处理边缘情况
Claude可以帮助实现所有关键的MCP功能:
- 资源管理和暴露
- 工具定义和实现
- 提示模板和处理程序
- 错误处理和日志记录
- 连接和传输设置
最佳实践
在使用Claude构建MCP服务器时:
- 将复杂的服务器分解为较小的部分
- 在继续之前彻底测试每个组件
- 注意安全性——验证输入并适当限制访问
- 为未来的维护做好代码文档
- 仔细遵循MCP协议规范
下一步
在Claude帮助你构建服务器后:
- 仔细检查生成的代码
- 使用MCP Inspector工具测试服务器
- 将其连接到Claude.app或其他MCP客户端
- 根据实际使用情况和反馈进行迭代
请记住,Claude可以帮助你根据需求的变化修改和改进你的服务器。
需要更多指导?只需向Claude提出关于实现MCP功能或解决出现的问题的具体问题。