如何使用MCP服务器(SSE URL)
模型上下文协议(MCP)服务器是Cursor中的一项强大功能,通过专门的服务器实现增强的AI能力。本指南将带你了解和使用带有服务器发送事件(SSE)URL的MCP服务器,以扩展Cursor的功能。
MCP服务器和SSE简介
MCP(模型上下文协议)服务器充当Cursor与各种AI模型或服务之间的专门中间件。它们提供额外的上下文、工具和功能,增强Cursor的AI特性。服务器发送事件(SSE)是一种允许服务器通过HTTP连接向客户端推送更新的技术,实现实时通信。
什么是MCP服务器?
MCP服务器是实现模型上下文协议的专门服务器,允许Cursor:
- 访问额外的工具和资源
- 连接到外部API和服务
- 在发送到AI模型之前处理和转换数据
- 用自定义功能扩展Cursor的能力
为什么使用SSE URL?
SSE(服务器发送事件)URL提供了一种标准化的方式来建立Cursor与MCP服务器之间的连接,提供:
- 实时更新和流式响应
- 从服务器到客户端的高效单向通信
- 自动重连处理
- 与标准HTTP基础设施的兼容性
理解SSE URL结构
MCP服务器的SSE URL通常遵循这种结构:
http(s)://<hostname>:<port>/sse?token=<auth_token>
组件解释:
- 协议:
http://
或https://
(安全,推荐) - 主机名:服务器地址(例如,
localhost
,mcp.example.com
) - 端口:MCP服务器监听的端口号(例如,
3000
) - 路径:通常是服务器发送事件端点的
/sse
- 令牌:用于安全访问的认证令牌
配置步骤
设置和使用带有SSE URL的MCP服务器涉及几个步骤:
1. 安装必要的依赖
首先,确保你已安装必要的依赖:
npm install @modelcontextprotocol/sdk
2. 创建MCP服务器配置
为你的MCP服务器创建一个配置文件。这可以放在Cursor的配置目录中:
{
"mcpServers": {
"example-server": {
"command": "node",
"args": ["/path/to/your/mcp-server.js"],
"env": {
"API_KEY": "your-api-key-here",
"OTHER_ENV_VAR": "value"
},
"disabled": false,
"autoApprove": ["tool1", "tool2"]
}
}
}
3. 设置SSE连接
在你的MCP服务器实现中,设置SSE端点:
import express from 'express';
import cors from 'cors';
const app = express();
app.use(cors());
app.get('/sse', (req, res) => {
// 验证令牌
const token = req.query.token;
if (!validateToken(token)) {
return res.status(401).send('Unauthorized');
}
// 设置SSE的头信息
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
res.setHeader('Connection', 'keep-alive');
// 发送初始连接消息
res.write('event: connected\ndata: {"status": "connected"}\n\n');
// 处理客户端断开连接
req.on('close', () => {
console.log('Client disconnected');
});
// 设置定期消息或对事件的响应
// ...
});
app.listen(3000, () => {
console.log('MCP Server listening on port 3000');
});
4. 配置Cursor使用你的MCP服务器
将你的MCP服务器配置添加到Cursor的设置中:
- 打开Cursor
- 转到设置(⚙️)
- 搜索"MCP"
- 添加你的服务器配置
- 保存更改
使用示例
以下是使用带有SSE URL的MCP服务器的一些实际示例:
示例1:基本工具实现
// 在你的MCP服务器实现中
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [
{
name: 'weather_lookup',
description: '获取位置的当前天气',
inputSchema: {
type: 'object',
properties: {
location: {
type: 'string',
description: '城市名称或邮政编码'
}
},
required: ['location']
}
}
]
}));
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === 'weather_lookup') {
const location = request.params.arguments.location;
const weatherData = await fetchWeatherData(location);
return {
content: [
{
type: 'text',
text: JSON.stringify(weatherData, null, 2)
}
]
};
}
});
示例2:资源实现
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
resources: [
{
uri: 'docs://api/reference',
name: 'API参考文档',
mimeType: 'text/markdown',
description: '项目的完整API参考'
}
]
}));
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
if (request.params.uri === 'docs://api/reference') {
return {
contents: [
{
uri: request.params.uri,
mimeType: 'text/markdown',
text: await fs.readFile('path/to/api-docs.md', 'utf-8')
}
]
};
}
});
常见问题故障排除
连接被拒绝
问题:Cursor无法连接到MCP服务器。
解决方案:
- 验证服务器是否正在运行
- 检查防火墙设置
- 确保端口正确且可访问
- 验证主机名解析正确
认证失败
问题:连接时出现"未授权"错误。
解决方案:
- 检查令牌是否正确配置
- 验证令牌验证逻辑
- 确保环境变量正确设置
服务器崩溃
问题:MCP服务器意外崩溃。
解决方案:
- 实现适当的错误处理
- 添加日志以识别问题
- 检查内存泄漏
- 在处理前验证输入数据
响应缓慢
问题:MCP服务器响应缓慢。
解决方案:
- 优化服务器代码
- 在适当的地方实现缓存
- 考虑扩展资源
- 检查阻塞操作
最佳实践
安全性
- 生产环境的MCP服务器始终使用HTTPS
- 实现适当的认证和授权
- 验证所有输入以防止注入攻击
- 限制暴露的功能仅为必要的功能
性能
- 为频繁访问的资源实现缓存
- 使用高效的数据结构和算法
- 考虑对大数据使用流式响应
- 监控服务器性能并优化瓶颈
可靠性
- 实现适当的错误处理
- 添加日志用于调试
- 设置健康检查
- 为崩溃的服务器实现自动重启
开发工作流程
- 使用本地开发环境进行测试
- 为你的MCP服务器实现版本控制
- 记录你的服务器的功能和要求
- 为你的服务器功能创建自动化测试
结论
带有SSE URL的MCP服务器提供了一种强大的方式,通过自定义功能和外部服务扩展Cursor的能力。通过遵循本指南中概述的配置步骤和最佳实践,你可以创建健壮、安全和高效的MCP服务器,增强你的开发工作流程。
无论你是连接到外部API,实现自定义工具,还是为AI模型提供额外的上下文,MCP服务器都提供了一种灵活且标准化的方法来扩展Cursor的功能。