项目简介
BestBot (原名 BestPracticesMcp) 是一个轻量级的Model Context Protocol (MCP) 服务器,它利用Azure Functions技术,将精心策划、权威可靠的编程语言和框架最佳实践内容,以结构化的方式提供给大型语言模型 (LLM) 客户端。该项目通过MCP工具触发器,将存储在Markdown文件中的最佳实践作为可访问的资源进行暴露。它设计简洁,易于贡献和部署。
主要功能点
- 多语言最佳实践库:托管C#、Python、JavaScript、Go、Rust、Java、Swift、Kotlin、Elixir、PHP、R、Vue 3、React、.NET Aspire、C++ 和 Flutter 等多种编程语言和框架的最佳实践指南,内容以Markdown文件形式组织。
- MCP 工具集成:通过MCP工具触发器,LLM客户端可以调用特定的工具函数(例如,'get_typescript_best_practices'),以获取所需语言的最佳实践内容。
- 轻量级文件缓存:内置进程级文件缓存机制,有效减少磁盘读取,提高内容响应速度。当底层Markdown文件更新时,缓存会自动失效并重新加载。
- 集中式日志:采用统一的、源生成 (source-generated) 的日志接口,确保日志消息在所有工具中保持一致性,便于监控和故障排查。
- 简易扩展性:提供清晰的模式,开发者可以轻松地添加新的语言或框架的最佳实践内容及相应的MCP工具。
- Azure 部署支持:集成了Azure Developer CLI (azd) 和Bicep模板,支持快速部署到Azure,并可选择与Azure API Management (APIM) 集成,提供更安全、可管理的API接口。
安装步骤
该项目需要 .NET 9 SDK。本地运行还需要 Azure Functions Core Tools。
-
克隆仓库:
git clone https://github.com/boclifton-MSFT/BestBot.git cd BestBot -
恢复依赖并构建项目:
dotnet restore dotnet build BestPracticesMcp.sln -
格式化代码(可选,但推荐):
dotnet format BestPracticesMcp.sln dotnet format BestPracticesMcp.sln --verify-no-changes -
本地运行(需要 Azure Functions Core Tools):
- 创建一个 'local.settings.json' 文件(可参考项目文档中的最小示例)。
- 启动 Functions 宿主:
func host start - 宿主通常会在 'http://localhost:7071' 端口启动。
-
部署到 Azure(可选,需要 Azure Developer CLI (azd)):
- 确保已安装 'azd' 并已认证到目标 Azure 订阅。
- 从仓库根目录运行 'azd up',这将自动部署所需的 Azure 资源和函数应用。
服务器配置(供MCP客户端使用,本地开发示例)
MCP客户端可以通过以下JSON格式配置连接到本地运行的BestBot MCP服务器。请注意,'command' 和 'args' 参数用于在本地启动服务器进程。对于部署到Azure的服务器,客户端通常直接连接到其HTTP/SSE/WebSocket端点,而不是通过 'command' 启动。
{ // 服务器的名称,用于客户端识别 "server name": "BestBot本地MCP服务器", // 用于在本地启动BestBot服务器的命令行工具 // 假设Azure Functions Core Tools已安装并配置在系统PATH中 "command": "func", // 传递给command的参数,这里是启动Functions宿主并监听默认端口7071 "args": [ "host", "start", "--port", "7071" ], // 简要描述此服务器的用途 "description": "提供编程语言和框架的最佳实践,作为本地MCP服务器。" }
基本使用方法
当BestBot服务器成功运行后(无论是本地还是Azure上),MCP客户端可以通过JSON-RPC协议调用其暴露的工具函数来获取信息。
例如,要获取TypeScript的最佳实践,MCP客户端可以向服务器发送一个JSON-RPC请求,调用名为 'get_typescript_best_practices' 的工具。服务器会执行相应的逻辑,读取 'Languages/Typescript/typescript-best-practices.md' 文件(或从缓存中获取),并将Markdown格式的内容作为响应返回给客户端。
每个支持的语言都有一个对应的 'get_<language>_best_practices' 工具方法可供调用。客户端需要了解这些工具的名称和用途才能正确地进行交互。
信息
分类
开发者工具