项目简介
Snippy 是一个基于 Azure Functions 实现的无服务器智能代码片段管理服务。它展示了如何将后端功能通过 Model Context Protocol (MCP) 暴露为可被大型语言模型 (LLM) 客户端(如 GitHub Copilot Chat)调用的工具。该服务集成了 Azure Durable Functions、Azure OpenAI、Azure Cosmos DB 和 Azure AI Agents,提供代码片段的存储、检索、智能分析和风格指南生成等功能。
主要功能点
- 保存代码片段: 接收代码内容、名称和项目ID,将其存储到 Blob Storage,生成向量嵌入并保存到 Cosmos DB。
- 获取代码片段: 根据名称从 Cosmos DB 检索并返回存储的代码片段及其元数据。
- 深度研究代码: 获取指定代码片段及其相似片段,利用 Azure AI Agents 对其进行详细的技术分析和建议。
- 生成代码风格指南: 获取指定代码片段及其相似片段,利用 Azure AI Agents 生成一份基于这些代码的语言特定风格指南。
这些功能既可以通过标准的 HTTP API 调用,也可以作为 MCP 工具被 LLM 客户端调用。
安装步骤
- 克隆仓库:
git clone https://github.com/Azure-Samples/snippy.git cd snippy - 创建并激活 Python 虚拟环境:
python -m venv .venv # Windows: .venv\Scripts\activate # macOS/Linux: source .venv/bin/activate - 安装依赖:
pip install -r requirements.txt - 配置本地设置:
- 复制示例设置文件:'cp local.settings.example.json local.settings.json'
- 编辑 'local.settings.json': 填写 Azure Storage (Azurite 或真实连接串)、Cosmos DB (Emulator 或真实连接串)、Azure OpenAI (Endpoint, Key, Embedding Model 部署名称) 和 Azure AI Project 的连接字符串。Azure OpenAI 和 Azure AI Project 没有本地模拟器,需要真实的 Azure 资源。
- 启动模拟器/确保服务就绪: 启动 Azurite 和 Cosmos DB Emulator (如果使用),确保 Azure OpenAI 和 Azure AI Project 资源已部署并可访问。
- 运行 Azure Functions Host:
函数应用将在本地运行,通常在 'http://localhost:7071'。func start
(您也可以使用 Azure Developer CLI ('azd') 通过 'azd up' 命令一键部署到 Azure。)
服务器配置
MCP客户端(如 VS Code 中的 GitHub Copilot Agent Mode)需要配置 MCP 服务器的网络地址和连接类型来建立连接。对于本项目的 MCP 服务器实现,您需要配置以下信息:
- 类型 (Type): 'HTTP (SSE)'
- 地址 (Address):
- 本地运行时: 'http://localhost:7071/runtime/webhooks/mcp/sse'
- 部署到 Azure 后: 您的 Azure Function App 的 SSE 端点 URL (可以在 'azd up' 输出或 Azure 门户中找到)。
- 认证 (Authentication, 云端部署通常需要): 可能需要配置函数密钥 ('x-functions-key') 或使用其他 Azure Functions 支持的认证方式。具体配置方法取决于您的 MCP 客户端。
基本使用方法
在 MCP 客户端中(例如在 VS Code 的 GitHub Copilot Chat 中处于 Agent Mode),连接到 Snippy 服务器后,您可以使用以下命令调用 MCP 工具:
- 保存代码片段: '/#[tool name] [argument name] [argument value]' 例如:'/ #save_snippet snippetname my-first-snippet projectid test-proj snippet [选中的代码]'
- 获取代码片段: '/ #get_snippet snippetname my-first-snippet'
- 对代码进行深度研究: '/ #deep_research snippetname my-first-snippet'
- 生成代码风格指南: '/ #code_style snippetname my-first-snippet'
其中 '[tool name]' 是 MCP 工具的名称 ('save_snippet', 'get_snippet', 'deep_research', 'code_style'),'[argument name]' 是工具参数的名称 ('snippetname', 'projectid', 'snippet'),'[argument value]' 是参数的值。
信息
分类
开发者工具