MCP工具开发规范指南:从基础要素到高级实践
MCP(Microsoft Cloud Platform)工具开发规范是保障云平台工具质量与一致性的核心框架,涵盖从命名规则到架构设计的全流程标准。本文将系统讲解如何从零开始构建符合规范的MCP工具,帮助开发团队快速上手并遵循最佳实践,确保开发规范在项目全生命周期中有效落地。
第1部分:基础规范
如何让团队协作时代码风格保持一致?基础规范是开发协作的"共同语言",包含命名约定、文件组织和编码标准三个核心维度,为后续开发奠定统一基础。
1.1 命名规则的设计与应用
是什么:命名规则是标识代码元素的语法约定,确保每个组件都有清晰且一致的名称。
为什么:统一的命名可提高代码可读性,减少理解成本,尤其在多人协作场景中至关重要。
怎么做:
- 项目名称采用PascalCase(帕斯卡命名法,每个单词首字母大写),如
Azure.Mcp.Server - 工具名称需体现功能领域,格式为
[平台].[产品].[模块].[功能],如Azure.Mcp.Tools.Aks - 配置文件使用kebab-case(短横线连接),如
appsettings.Development.json
📌 规范要点:所有公共API名称必须包含功能动词,如Create、Get、Delete
反例对比
| 类型 | 错误命名 | 正确命名 | 问题说明 |
|---|---|---|---|
| 项目 | azure_mcp_server | Azure.Mcp.Server | 未使用PascalCase |
| 文件 | Appsettings.dev.json | appsettings.Development.json | 大小写不规范 |
| 类名 | aksTool | AksTool | 未使用PascalCase |
| 方法 | getconfig() | GetConfiguration() | 未使用PascalCase且缺少动词 |
1.2 文件组织的标准化方案
是什么:文件组织规范定义了代码和资源在项目中的存放位置与结构关系。
为什么:合理的文件组织可提高代码可维护性,使新成员能快速定位功能模块。
怎么做:
- 源代码统一放在
src/目录,测试代码放在tests/目录 - 工具项目必须包含
Commands/(命令定义)、Options/(命令行选项)和Services/(业务逻辑)子目录 - 资源文件放在
Resources/目录,配置文件放在项目根目录
📌 规范要点:测试项目命名必须以.Tests结尾,如Azure.Mcp.Tools.Aks.UnitTests
💡 实践建议:使用dotnet new模板快速创建符合规范的项目结构,可参考eng/scripts/目录下的项目生成脚本。
第2部分:架构设计
大型项目如何保持清晰的模块边界?架构设计阶段需解决组件划分、依赖管理和接口设计问题,确保系统具备良好的可扩展性和可维护性。
2.1 核心模块的划分原则
是什么:核心模块是工具的基础组件集合,提供跨工具共享的功能实现。
为什么:模块化设计可避免代码重复,促进功能复用,简化维护流程。
怎么做:
- 命令系统:负责解析用户输入并调度相应功能,位于core/Azure.Mcp.Core/src/Commands/
- 服务接口:定义工具与外部系统的交互契约,位于core/Azure.Mcp.Core/src/Services/
- 配置管理:处理工具的配置加载与验证,位于core/Azure.Mcp.Core/src/Configuration/
📌 规范要点:核心模块必须设计为依赖注入友好,所有服务需通过接口暴露
2.2 项目结构的规模适配方案
是什么:根据项目规模选择合适的目录结构,平衡开发效率与架构清晰度。
为什么:不同规模的项目有不同的复杂度需求,一刀切的结构会导致过度设计或维护困难。
怎么做:
微型工具(单一功能)
Azure.Mcp.Tools.SimpleTool/
├── src/
│ ├── Commands/ # 单个命令文件
│ ├── SimpleToolSetup.cs # 工具入口
│ └── SimpleTool.csproj
└── tests/ # 简单测试结构
大型项目(多功能套件)
Azure.Mcp.Tools.ComplexTool/
├── src/
│ ├── Commands/ # 按功能分组的命令
│ │ ├── Create/
│ │ ├── Update/
│ │ └── Delete/
│ ├── Models/ # 数据模型
│ ├── Options/ # 命令行选项
│ ├── Services/ # 按领域划分的服务
│ ├── Extensions/ # 扩展方法
│ └── ComplexToolSetup.cs
└── tests/
├── UnitTests/
├── IntegrationTests/
└── LiveTests/
📌 规范要点:当工具包含超过5个命令或10个服务类时,必须采用领域驱动的目录结构
💡 实践建议:定期使用eng/scripts/Analyze-Code.ps1检查项目结构合规性,该脚本会自动识别不符合规范的目录组织。
第3部分:开发实践
如何快速搭建规范的开发环境并高效编码?开发实践阶段涵盖环境配置、编码流程和常见问题解决方案,帮助开发者从搭建到交付的全流程标准化。
3.1 开发环境的标准化配置
是什么:标准化开发环境确保所有团队成员使用一致的工具链和配置。
为什么:统一的环境可消除"在我电脑上能运行"的问题,减少环境相关的调试成本。
怎么做:
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/mcp27/mcp - 安装依赖:运行
eng/scripts/Install-GitHooks.ps1配置Git钩子 - 配置开发工具:参考docs/bug-bash/installation-testing.md设置VS Code环境
- 验证环境:执行
dotnet build确认基础构建通过
重点步骤:Git钩子会自动检查提交代码是否符合规范,包括命名、格式和基本质量要求
📌 规范要点:开发环境必须包含.editorconfig文件,统一代码格式化规则
3.2 命令开发的标准流程
是什么:命令开发流程定义了从需求到实现的标准化步骤。
为什么:结构化的开发流程可确保每个命令都遵循相同的质量标准和实现模式。
怎么做:
- 创建命令类,继承
CommandBase基类 - 定义命令选项,使用
[Option]特性标记 - 实现
ExecuteAsync方法,包含核心业务逻辑 - 在
*Setup.cs文件中注册命令 - 编写单元测试,覆盖主要功能路径
public class CreateCommand : CommandBase
{
[Option("-n|--name", Description = "资源名称")]
public string Name { get; set; }
protected override async Task<int> ExecuteAsync(CommandContext context)
{
// 业务逻辑实现
_logger.LogInformation($"Creating resource: {Name}");
return await _resourceService.CreateAsync(Name);
}
}
📌 规范要点:每个命令必须包含详细的XML注释,说明功能、参数和返回值
3.3 常见卡点解决方案
是什么:开发过程中常见问题的标准化解决方法。
为什么:提前提供解决方案可减少开发者的调试时间,避免重复造轮子。
怎么做:
依赖冲突
- 问题:不同工具引用同一依赖的不同版本
- 解决:在Directory.Packages.props中统一管理依赖版本
命令行参数解析错误
- 问题:复杂参数组合导致解析异常
- 解决:使用
[ValidateSet]限制选项值,实现IValidateOptions接口进行自定义验证
测试环境配置
- 问题:测试需要特定云环境配置
- 解决:使用eng/common/TestResources/脚本创建标准化测试资源
💡 实践建议:将常见问题及解决方案记录在项目docs/TROUBLESHOOTING.md中,定期更新维护。
第4部分:质量保障
如何确保工具在各种场景下的可靠性?质量保障体系通过测试策略、代码分析和文档管理,构建从开发到交付的全流程质量防线。
4.1 测试策略的实施方法
是什么:测试策略定义了不同类型测试的覆盖范围和实施方式。
为什么:全面的测试可提前发现问题,减少生产环境故障,提高用户信任度。
怎么做:
- 单元测试:覆盖独立功能单元,目标覆盖率≥80%,位于
*UnitTests项目 - 集成测试:验证模块间交互,重点测试Services/中的服务集成
- 验收测试:模拟真实用户场景,使用tests/目录下的测试框架
执行命令:
dotnet test运行所有测试,dotnet test --filter "Category=Integration"运行指定类型测试
📌 规范要点:所有测试必须使用[Fact]或[Theory]属性标记,测试方法名需遵循MethodUnderTest_Scenario_ExpectedResult格式
4.2 代码质量的自动化保障
是什么:自动化代码质量保障通过工具和流程自动检查代码是否符合规范。
为什么:自动化检查可在开发早期发现问题,减少人工审查成本。
怎么做:
- 静态代码分析:运行
eng/scripts/Analyze-Code.ps1检测代码风格和潜在问题 - 代码覆盖率检查:使用
dotnet test --collect:"XPlat Code Coverage"生成覆盖率报告 - 合规性验证:通过eng/pipelines/中的CI流程自动执行质量检查
📌 规范要点:代码分析中发现的警告必须全部修复,不允许携带警告提交代码
4.3 文档管理的规范要求
是什么:文档管理规范确保所有功能和接口都有清晰的使用说明。
为什么:优质文档可降低用户学习成本,提高工具的易用性和 adoption 率。
怎么做:
- 工具使用文档:每个工具目录下必须包含
README.md,说明功能、安装和使用方法 - API文档:使用XML注释生成API文档,示例参考docs/design/目录
- 变更日志:遵循Keep a Changelog规范,存放于servers/Azure.Mcp.Server/changelog-entries/
📌 规范要点:文档必须包含"快速入门"部分,提供3步以内的基本使用示例
💡 实践建议:使用eng/scripts/Process-PackageReadMe.ps1脚本自动生成和更新文档,确保代码与文档同步。
开发规范是MCP工具生态系统健康发展的基础,从基础命名到架构设计,从开发流程到质量保障,每个环节的规范实施都直接影响工具的质量和可维护性。通过本文档的指导,开发团队可以构建出符合Microsoft云平台标准的高质量工具,为用户提供一致且可靠的体验。遵循这些规范不仅能提高团队协作效率,还能确保工具在不断演进中保持清晰的结构和稳定的质量。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0203- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
awesome-zig一个关于 Zig 优秀库及资源的协作列表。Makefile00

