摘要:对于想要深入了解 MCP 技术的开发者,AIbase 的 MCP 资源网站(https://www.aibase.com/zh/repos/topic/mcp)是一个绝佳的选择。该网站提供了丰富的学习资料、开发工具和社区支持,帮助开发者更好地掌握 MCP 技术
对于想要深入了解 MCP 技术的开发者,AIbase 的 MCP 资源网站(https://www.aibase.com/zh/repos/topic/mcp)是一个绝佳的选择。该网站提供了丰富的学习资料、开发工具和社区支持,帮助开发者更好地掌握 MCP 技术。
丰富的学习资料:从基础概念到高级应用,AIbase 提供了详细的文档和教程,适合不同水平的开发者。
实用的开发工具:包括 MCP Server 的示例代码和开发框架,帮助开发者快速搭建和测试自己的 MCP Server。
活跃的社区交流:开发者可以在社区中交流经验、分享项目、提出问题并获得解答。
通过 AIbase 的资源,您可以更深入地探索 MCP 的潜力,并将其应用于更多复杂的场景中
编写一个供 Cursor 使用的 MCP Server 涉及到理解 MCP 的基本原理、定义 Server 的功能、使用 MCP SDK 进行开发以及在 Cursor 中进行配置。
以下是详细的步骤和说明:
一、理解 MCP 的基本原理
MCP(Model Context Protocol)是一个开放协议,旨在标准化应用程序如何向大型语言模型(LLM)提供上下文信息。它通过一个标准的中间协议层,使得 AI 模型能够以一致的方式连接各种数据源、工具和功能。
MCP 架构包含三个核心组件:
MCP Host:是指启动连接的应用程序,例如 Cursor、Claude Desktop 和 Cline。
MCP Client:客户端在 Host 应用程序内维护与 Server 之间 1:1 的连接。
MCP Server:通过标准化的协议,为 Client 端提供上下文、工具和提示。您的目标是创建一个 MCP Server。
MCP Server 可以提供三种主要类型的功能:
工具(Tools):可以被 LLM 调用来执行特定操作的函数。
资源(Resources):类似文件的数据,可以被客户端读取(如 API 响应或文件内容)。
提示(Prompts):预先编写的模板,帮助用户完成特定任务。对于供 Cursor 使用的 Server,工具(Tools)是最常见的形式,允许 Cursor 的 AI 助手执行各种操作。
二、确定 MCP Server 的功能
在开始编写 Server 之前,您需要明确您的 Server 将提供哪些功能。思考一下您希望 Cursor 的 AI 助手能够通过您的 Server 完成哪些任务。
例如,如果您希望 Cursor 能够与本地文件系统交互,您可以创建一个提供以下工具的 Server:
list_files:列出指定目录下的文件。
read_file:读取指定文件的内容。
write_file:将内容写入指定文件。
另一个例子是创建一个与 GitHub 交互的 Server,提供:
search_repositories:搜索 GitHub 仓库。
search_issues:搜索 GitHub Issues。
create_issue:在 GitHub 仓库中创建新的 Issue。
三、选择技术栈和 MCP SDK
MCP 官方提供了 Python 和 TypeScript 的 SDK,您可以选择您熟悉或适合您需求的语言。
Python SDK:提供了 mcp 库,方便您创建 MCP Server。示例代码展示了如何使用 FastMCP 创建一个简单的文件统计 Server。
TypeScript SDK:同样提供了相应的库来构建 MCP Server。
根据官方信息,使用 Python 技术栈开发简单的 MCP Server 是一个不错的入门方式。
四、使用 MCP SDK 实现 Server
初始化 Server
使用 SDK 提供的类(例如 Python SDK 中的 FastMCP 或 Server)来创建您的 MCP Server 实例,并为其命名。
定义工具(Tools)
使用 SDK 提供的装饰器(例如 Python SDK 中的 @mcp.tool 或 @app.call_tool)来标记您的函数为可被 LLM 调用的工具。每个工具函数都应该有一个清晰的名称(name)和描述(description),描述其功能。这些信息将用于告知 LLM 该工具的作用。
您需要定义工具的输入参数(inputSchema),描述调用该工具所需的参数,包括参数的名称、类型和描述。MCP SDK 通常支持使用 JSON Schema 来定义 inputSchema。
工具函数应实现具体的功能逻辑,并返回 LLM 可以理解的结果(例如文本、JSON 格式的数据)。
实现 list_tools 函数
您的 Server 需要实现一个函数(通常通过装饰器标记,例如 Python SDK 中的 @app.list_tools)来返回一个包含所有可用工具信息的列表。这个列表将告知 Client 端您的 Server 提供了哪些工具,以及如何调用它们。
实现 call_tool 函数
您需要实现一个函数(通常通过装饰器标记,例如 Python SDK 中的 @app.call_tool)来处理 Client 端发送的工具调用请求。这个函数会接收被调用的工具名称和参数,然后根据名称调用相应的工具函数并返回结果。
处理通信
MCP Server 需要监听来自 Client 端的连接和请求。常见的通信方式包括标准输入输出(stdio)和 Server-Sent Events(SSE)。Python SDK 提供了 StdioServerTransport 和 SseServerTransport 等来实现不同的通信方式。对于 Cursor,通常使用命令行方式启动 Server,通过 stdio 进行通信可能更直接。
五、配置 Cursor 以使用您的 MCP Server
Cursor 使用 .cursor/mcp.json 文件来配置要连接的 MCP Server。您需要在您的项目目录(或者全局配置目录)下创建或编辑这个文件。
在 mcp.json 文件中,您需要添加一个 JSON 对象来描述您的 MCP Server。这个对象通常包含以下字段:
name:您的 MCP Server 的名称,在 Cursor 中用于标识。
command:启动您的 MCP Server 的命令,包括可执行文件的路径。如果您的 Server 是一个 Python 脚本,这可能是 Python 解释器的路径。
args:传递给启动命令的参数,例如您的 Server 脚本的路径。
type:通信类型,例如 command 表示通过命令行启动并使用 stdio 通信。
示例 mcp.json 配置(假设您的 Server 是一个名为 my_server.py 的 Python 脚本):
{ "mcpServers": { "my_custom_server": { "command": "/usr/bin/env", "args": ["python", "/path/to/your/my_server.py"], "type": "command"
}
}
}
请将 /path/to/your/my_server.py 替换为您的实际 Server 脚本路径。您可以使用 which python 命令获取 Python 解释器的路径。
对于 Windows 平台,您可能需要在 command 中使用 cmd /c 来执行命令。例如:
{ "mcpServers": { "my_custom_server": { "command": "cmd", "args": ["/c", "python", "/path/to/your/my_server.py"], "type": "command"
}
}
}
六、运行和测试您的 MCP Server
保存您的 MCP Server 代码和 mcp.json 配置文件。
重新启动 Cursor。
在 Cursor 中与 AI 助手交互,尝试触发您在 Server 中定义的工具。例如,如果您创建了一个文件系统 Server,您可以询问类似 “列出我桌面上的所有文本文件”。
Cursor 的 AI 助手会分析您的请求,如果判断需要使用您的 MCP Server 提供的工具,它会向您的 Server 发送请求。
您可以在您的 Server 端添加日志输出来查看是否收到了请求、执行了哪些工具以及返回了什么结果。
提到了可以使用 MCP Inspector 来测试 Server。您可以通过运行 mcp dev your_server.py(如果使用 Python SDK 的 CLI)来启动 Inspector,并在浏览器中查看和测试您的 Server 提供的工具。
七、注意事项
安全性:请注意您暴露的工具可能带来的安全风险,特别是涉及到文件系统操作或敏感数据访问时。确保对工具的使用进行适当的权限控制和验证。
错误处理:在您的 Server 代码中实现完善的错误处理机制,以便在工具调用失败时能够向 Cursor 提供有用的错误信息。
文档:为您的 MCP Server 提供清晰的文档,说明其提供的工具、参数和预期行为,方便您自己和其他开发者使用。
参考官方文档和示例:MCP 官方文档和 SDK 提供的示例代码是您学习和开发的宝贵资源。
通过以上步骤,您应该能够编写一个供 Cursor 使用的 MCP Server,扩展 Cursor 的 AI 助手的功能,使其能够与您定义的外部系统或数据进行交互。记住从简单的工具开始,逐步增加复杂性。
来源:站长之家