使用说明
项目简介
本项目 'azd-mcp-ts' 是一个使用 TypeScript 开发的 Model Context Protocol (MCP) 服务器示例,旨在演示如何快速搭建一个基于 MCP 协议的后端服务,并将其部署到 Azure 容器应用服务中。该示例使用了 SSE (Server-Sent Events) 作为传输协议,方便客户端与服务器进行实时的双向通信。
主要功能点
- 资源管理 (Resources): 示例中定义了一个简单的 'echo' 资源,演示了如何通过 URI 访问和获取资源内容。
- 工具注册与执行 (Tools): 示例中注册了一个 'echo' 工具,允许客户端调用该工具并传递消息参数,服务器会返回包含工具执行结果的内容。
- Prompt 模板 (Prompts): 示例中定义了一个 'echo' Prompt 模板,接受消息参数,并生成包含用户角色的消息内容,用于指导 LLM 进行处理。
- SSE 传输协议: 使用 Server-Sent Events 实现服务器向客户端推送事件和响应,以及客户端向服务器发送请求。
- 基于 Express.js: 使用流行的 Node.js Web 应用框架 Express.js 构建 HTTP 服务器,处理 SSE 连接和消息路由。
- Azure 容器应用部署: 提供 'azd' 模板,方便用户一键部署到 Azure 容器应用服务。
安装步骤
- 安装 Azure Developer CLI (azd): 如果尚未安装,请根据官方文档安装 Azure Developer CLI。
- 登录 Azure: 打开终端,运行 'azd auth login' 命令,并按照提示完成 Azure 登录。
- 初始化模板: 在终端中,导航到您希望创建项目的目录,然后运行以下命令初始化项目模板:
azd init --template powergentic/azd-mcp-ts - 部署到 Azure: 初始化完成后,在项目根目录运行以下命令,部署到 Azure 云平台:
'azd up' 命令会自动完成资源配置和应用部署,首次部署可能需要一些时间。azd up
服务器配置
MCP 客户端需要配置连接到此 MCP 服务器的信息。以下是一个 JSON 格式的配置示例,您可以根据实际部署情况进行调整:
{ "serverName": "azd-mcp-ts-mcp-server", // MCP 服务器名称,可以自定义 "command": "node", // 启动服务器的命令,这里使用 node "args": ["server.js"], // 启动命令的参数,指向编译后的 server.js 文件 (假设编译输出为 server.js,实际部署可能需要调整) "transport": "sse", // 使用 SSE 传输协议 "endpoint": "/sse", // SSE 连接的端点路径 "messageEndpoint": "/messages", // (可选) 消息接收端点,如果需要客户端主动发送消息到服务器,根据服务器实现配置 "contentType": "application/json-rpc" // (可选) 内容类型,通常为 application/json-rpc }
配置参数说明:
- 'serverName': MCP 服务器的名称,客户端可以使用此名称来标识和管理不同的 MCP 服务器连接。
- 'command': 在服务器端启动 MCP 服务器程序的命令。对于 Node.js 项目,通常使用 'node' 命令。
- 'args': 传递给启动命令的参数,用于指定要执行的服务器程序文件。 请注意,实际部署环境中,可能需要根据构建和打包方式调整 'args',例如指向编译后的 JavaScript 文件路径。 由于 'azd' 模板部署到容器应用,具体的启动命令和文件路径可能需要在容器的上下文中确定。 如果直接运行 'server.ts' (开发环境),可能需要使用 'ts-node server.ts' 作为 command 和 args。但更常见的部署方式是先编译 TypeScript 到 JavaScript,然后运行 JavaScript 文件。
- 'transport': 指定 MCP 客户端与服务器通信的传输协议,这里配置为 'sse' (Server-Sent Events)。
- 'endpoint': SSE 连接的服务器端点路径,客户端需要连接到此 URL 建立 SSE 连接。 根据 'server.ts' 代码,此处应为 '/sse'。
- 'messageEndpoint': (可选) 如果 MCP 客户端需要主动向服务器发送消息(例如,通过 POST 请求),则需要配置此项。根据 'server.ts' 代码,可能可以使用 '/messages' 或 '/message' 端点,具体取决于客户端的发送方式和服务器端的处理逻辑。 但SSE 通常是服务器主动推送,客户端发送请求更多是通过建立连接后的通道。 此项根据实际客户端需求和服务器功能支持情况配置。
- 'contentType': (可选) 指定消息的内容类型,通常 MCP 使用 'application/json-rpc'。
请注意: 上述配置中的 'command' 和 'args' 是一个 示例, 实际部署到 Azure 容器应用后,服务器的启动方式可能由容器镜像和部署配置决定。 您可能需要查看 Azure 容器应用的部署配置或容器镜像的 Dockerfile 来确定准确的启动命令。 对于本地开发和测试,可以直接运行 'node src/mcpserver/server.js' (如果已编译) 或 'ts-node src/mcpserver/server.ts' (如果使用 ts-node 直接运行 TypeScript)。
基本使用方法
- 启动服务器: 按照上述安装步骤部署到 Azure 或本地运行 'node src/mcpserver/server.js' (或 'ts-node src/mcpserver/server.ts') 启动服务器。
- 访问 SSE 端点: 在浏览器中访问部署后的 Azure 容器应用的 '/sse' 端点 (例如 'https://<your-app-url>/sse'),或者本地运行时的 'http://localhost:3001/sse',您应该能看到 SSE 流输出,表明服务器正在运行并等待客户端连接。
- 使用 MCP 客户端连接: 开发一个 MCP 客户端应用,并根据上述 服务器配置 中的信息,配置客户端连接到该 MCP 服务器。客户端可以使用 MCP SDK 提供的客户端库来简化连接和通信过程。
- 调用资源、工具和 Prompt: 通过 MCP 客户端,可以向服务器发送 JSON-RPC 请求,调用服务器提供的资源 (例如 'mcp://<serverName>/resource/echo?message=hello'),工具 (例如 'mcp://<serverName>/tool/echo' 并传递参数 '{"message": "world"}'),以及 Prompt 模板 (例如 'mcp://<serverName>/prompt/echo' 并传递参数 '{"message": "你好"}'). 服务器会根据请求类型和参数执行相应的操作,并将结果通过 SSE 连接返回给客户端。
信息
分类
开发者工具