跳到主要内容

如何使用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://(安全,推荐)
  • 主机名:服务器地址(例如,localhostmcp.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的设置中:

  1. 打开Cursor
  2. 转到设置(⚙️)
  3. 搜索"MCP"
  4. 添加你的服务器配置
  5. 保存更改

使用示例

以下是使用带有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的功能。

其他资源