如何在 Cursor 中使用 MCP ?

如何在 Cursor 中使用 MCP ?

1 什么是 MCP

MCP(Model Control Protocol)是一个为 Cursor 编辑器设计的功能扩展协议。它能够显著增强 Cursor 中 AI 助手的能力,使其能够与外部系统和服务进行交互。

通过 MCP,AI 助手可以实现以下功能:

  • 查询实时数据和外部信息
  • 直接调用各类外部服务和 API
  • 执行复杂的任务流程和自动化操作

从架构设计的角度来看:

  • 传统模式:AI 助手仅能基于训练数据进行对话和代码分析
  • MCP 模式:AI 助手获得了与外部系统交互的能力,可以:
    • 获取实时数据(如:股票行情、天气信息)
    • 调用外部服务(如:邮件发送、图像处理)
    • 集成私有系统(如:数据库操作、API 调用)

2 MCP 的优势

MCP 作为一个强大的扩展系统,具有以下核心优势:

  1. 高度可定制

    • 支持自定义数据源接入
    • 允许集成各类 API 服务
    • 可对接企业内部系统
    • 扩展能力完全可控
  2. 实时交互

    • 支持实时数据更新
    • 提供即时查询能力
    • 确保数据同步及时性
    • 响应速度快捷高效
  3. 扩展性强

    • 兼容主流 Web API
    • 支持各类云服务集成
    • 可对接企业级系统
    • 扩展方式灵活多样
  4. 开发友好

    • 支持主流开发语言
    • 提供完整技术文档
    • 具备活跃社区支持
    • 快速上手开发

3 实战示例:股票数据查询服务

本节将通过实现一个股票数据查询服务,展示 MCP 的具体应用流程和开发方法。

3.1 环境配置

首先需要配置开发环境,确保系统满足以下要求:

  • Python 3.11 或更高版本
  • 相关依赖包

执行以下命令进行环境初始化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建项目目录
mkdir stock-data-mcp
cd stock-data-mcp

# 创建 conda 环境
conda create -n stock-data-mcp python=3.11.11
conda activate stock-data-mcp

# 安装依赖
pip install fastapi~=0.115.12 \
uvicorn~=0.24.0 \
yfinance~=0.2.55 \
mcp~=1.6.0 \
httpx~=0.28.1

3.2 API 服务开发

实现股票数据查询的 RESTful API 服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# api_server.py
import datetime

from fastapi import FastAPI
import yfinance as yf
import uvicorn

app = FastAPI()

@app.get("/stock")
def get_stock_data(ticker: str = "AAPL", days: int = 1):
"""
Get the stock data for the last n days.
:param ticker: The stock code
:param days: The number of days
:return: The stock history data
"""
end_date = datetime.datetime.today()
start_date = end_date - datetime.timedelta(days=days)

stock = yf.Ticker(ticker)
hist = stock.history(start=start_date.strftime('%Y-%m-%d'), end=end_date.strftime('%Y-%m-%d'))

if hist.empty:
return {"error": "No data found for the given stock code."}

return hist[['Open', 'High', 'Low', 'Close', 'Volume']].to_dict(orient='index')

if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=3000)

该服务提供了一个 GET 接口,支持查询指定股票代码的历史数据,包含开盘价、最高价、最低价、收盘价和交易量等信息。

3.3 MCP 服务开发

实现 MCP 服务,用于连接 Cursor 和股票数据 API:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# mcp_server.py
import httpx
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Stock Data MCP Server")

@mcp.tool()
async def get_stock_data(ticker: str = "AAPL", days: int = 1) -> dict:
"""Get the stock data for the last n days."""
async with httpx.AsyncClient() as client:
response = await client.get(f"http://localhost:3000/stock?ticker={ticker}&days={days}")
return response.json()

if __name__ == "__main__":
mcp.run("sse")

该服务将 API 接口封装为 MCP 工具,支持异步调用,确保高效的数据获取。

3.4 Cursor 配置

配置 Cursor 编辑器以支持 MCP 服务,编辑配置文件 ~/.cursor/mcp.json

1
2
3
4
5
6
7
{
"mcpServers": {
"stock-data-mcp": {
"url": "http://localhost:8000/sse"
}
}
}

3.5 服务启动

按照以下步骤启动服务:

  1. 启动 API 服务:

    1
    2
    # 终端 1
    python api_server.py
  2. 启动 MCP 服务:

    1
    2
    # 终端 2
    python mcp_server.py

3.6 功能验证

在 Cursor 编辑器中,可以通过对话框直接调用 MCP 服务。例如:帮我获取苹果公司过去7天的股票数据

image

4 开发注意事项

在开发 MCP 服务时,需要注意以下几点:

  1. 技术选型:Node.js 相比 Python 具有更好的 MCP 支持度,建议优先选择 Node.js 进行开发。

  2. 路径处理:直接启动 MCP 服务器时,文件路径需使用绝对路径,以避免路径解析错误。

  3. 启动方式:由于 Cursor 在 stdio 模式下可能存在问题,推荐使用 SSE 方式启动服务。

  4. 其他考虑

    • 注意避免端口冲突
    • 及时更新到最新版本
    • 做好异常处理

5 总结

MCP 作为 Cursor 的扩展协议,为 AI 助手提供了强大的外部系统交互能力。通过本文的股票数据查询示例,展示了 MCP 服务的开发流程和最佳实践。开发者可以基于此框架,根据实际需求开发更多功能扩展。

6 参考资料

作者

Ailln

发布于

2025-04-01

更新于

2025-04-01

许可协议

评论