目录MCP 是什么工具层标准协议MCP 的核心能力边界工具发现Tool Discovery工具调用Tool Invocation工具隔离Tool Isolation从协议到实践用 GitHub MCP Server 落地 MCP使用 Microsoft Agent Framework 调用 MCP 工具环境变量的配置开启 MCP 客户端获取工具集创建 AI Agent运行 Agent自然语言触发任务补充说明MCP GitHub Server 启动失败排查排查步骤解释解决方案最简单创建目录即可总结围绕 Agent 的讨论经常停留在“Prompt 写法”或“模型选择”但在工程实现层面Agent 的关键并不在对话能力而在工具接入、执行编排、状态管理与可治理性。本文从知识体系解释两个关键组件Model Context ProtocolMCP工具层协议Tool / Context Protocol LayerMicrosoft Agent FrameworkMicrosoft.Agents.AI / Microsoft.Extensions.AIAgent 编排层Orchestration LayerMCP 是什么工具层标准协议MCP 是一个开放协议用于标准化模型LLM与外部工具/上下文的连接方式。它解决的是工具接入的一致性问题工具如何被发现、被调用、被隔离。除 tools 外MCP 生态中还常见 resources / prompts 等上下文能力具体取决于 MCP Server 实现。在没有 MCP 的情况下工具接入通常会退化为胶水工程每个工具都要单独封装 function calling schema每个工具都要单独处理鉴权、参数校验、错误语义工具返回值格式不一致模型侧需要大量适配MCP 用协议消解这些重复劳动让工具以统一方式被发现和调用。MCP 的核心能力边界工具发现Tool Discovery系统可以通过协议接口获取工具列表工具成为“可被发现”的资源而不是写死在 prompt 或代码里。直接收益工具接入从“代码级集成”变成“协议级对接”工具能力变动可通过 server 侧演进client 侧按协议消费工具调用Tool Invocation工具参数与返回结果具备结构化 schema。模型调用工具不依赖自然语言猜测而依赖协议描述更稳定。工具隔离Tool IsolationMCP 鼓励工具在 Server 侧实现从而实现运行时隔离与权限治理。常见部署形态包括stdio本地 transportHTTP SSE远程 transport隔离是 MCP 推动的工程实践特性不是协议强制但几乎是默认形态。从协议到实践用 GitHub MCP Server 落地 MCP上面我们从协议层定义 MCP它统一工具发现、工具调用与运行隔离。接下来我们用一个真实可运行的示例把这些概念落到工程实现上。选择 GitHub MCP Server 的原因是GitHub 场景具备典型的“外部系统工具调用特征”包括鉴权、分页、资源读取、PR/Commit 查询等非常适合作为 MCP tool calling 的参考实现。本文将通过 GitHub MCP Servermodelcontextprotocol/server-github提供的工具集让 Agent 具备“读取仓库提交记录并总结”的能力。示例目标让 Agent 基于 GitHub MCP tools查询microsoft/semantic-kernel仓库最近提交并总结输出。该示例将完整覆盖 MCP 的三个关键步骤启动 MCP Serverstdio transportTool Discovery运行时拉取 tools 列表Tool Calling模型自动选择工具并调用 GitHub API使用 Microsoft Agent Framework 调用 MCP 工具环境变量的配置var endpoint Environment.GetEnvironmentVariable(AZURE_OPENAI_ENDPOINT) ?? throw new InvalidOperationException(AZURE_OPENAI_ENDPOINT is not set.); var deploymentName Environment.GetEnvironmentVariable(AZURE_OPENAI_DEPLOYMENT_NAME) ?? gpt-4o-mini;AZURE_OPENAI_ENDPOINT调用 Azure OpenAI 服务的地址未配置时抛异常提醒。AZURE_OPENAI_DEPLOYMENT_NAME指定默认的模型部署未配置时默认使用 gpt-4o-mini。更多配置请查看使用 Microsoft Agent Framework 构建你的第一个 Agent 应用开启 MCP 客户端对于 Agent 来说工具tools不是写死在代码里而是由 MCP Server 以统一标准暴露出来Agent 运行时再进行工具发现Tool Discovery并绑定。await using var mcpClient await McpClient.CreateAsync(new StdioClientTransport(new() { Name MCPServer, Command npx, Arguments [-y, --verbose, modelcontextprotocol/server-github], }));说明Command npx通过 npx 启动 MCP Servermodelcontextprotocol/server-githubGitHub MCP Server-y自动确认执行--verbose输出详细日志便于排查关键点程序并不是连接远程 URL 的 MCP Server而是在本机启动一个 Node 进程作为 MCP Server并通过 stdio 通信。获取工具集var mcpTools await mcpClient.ListToolsAsync().ConfigureAwait(false);MCP Server 会暴露一组 tools运行时通过工具发现Tool Discovery获取列表后续通过 tool calling 调用。ListToolsAsync() 会向 MCP Server 发送 tools/list 请求 MCP Server 返回 tools 的 schema名称、描述、参数结构等 这些 schema 会被映射为 AI Agent 可用的 AITool创建 AI AgentAIAgent agent new AzureOpenAIClient( new Uri(endpoint), new AzureCliCredential()) .GetChatClient(deploymentName) .AsAIAgent(instructions: 你是一个只回答与GitHub仓库相关问题的AI助手。, tools: [.. mcpTools.CastAITool()]);创建 Azure OpenAI Client并使用 AzureCliCredential 认证获取 ChatClient模型对话客户端将 ChatClient 包装为 AIAgent并注入 MCP tools关键参数instructions角色边界回答范围与行为约束tools绑定工具列表赋予 Agent 工具调用能力运行 Agent自然语言触发任务Console.WriteLine(await agent.RunAsync(总结一下 microsoft/semantic-kernel 仓库的最近四次提交));调用RunAsync以自然语言触发任务Agent 结合 MCP 工具与模型完成指令并输出结果。运行结果补充说明MCP GitHub Server 启动失败排查如果你遇到下面那问题说明 MCP GitHub Server 进程没启动成功npx modelcontextprotocol/server-github 启动失败所以 .CreateAsync(...)直接抛异常。排查步骤1先确认你电脑 Node/NPM 能正常用打开 PowerShell / CMDnode -v npm -v npx -v必须都有版本输出。2先在命令行单独启动 MCP Server确认它能跑npx -y --verbose modelcontextprotocol/server-github如果这一步都报错那就是 npm 环境问题Agent执行流程解释npm 默认把全局可执行文件放在C:\Users\用户名\AppData\Roaming\npm但你的机器上这个目录-不存在所以 npx 在执行时去访问这个路径 →lstat失败 → 直接退出解决方案最简单创建目录即可请你在 PowerShell 执行mkdir $env:APPDATA\npm -Force mkdir $env:APPDATA\npm-cache -Force然后检查 npm 的 prefix 是否正确npm config get prefix npm config get cache重新设置 prefix/cache推荐强制设置一次npm config set prefix $env:APPDATA\npm npm config set cache $env:LOCALAPPDATA\npm-cache再跑一次 npx 测试npx -y --verbose modelcontextprotocol/server-github总结本文从工程视角澄清了两个关键事实MCP 并不是 Agent 框架而是一种用于标准化工具与上下文接入的开放协议。它把工具接入从“每个工具单独集成”提升为“按协议统一消费”核心能力体现在 Tool Discovery、Tool Invocation 以及运行时隔离与权限治理的工程实践上。Microsoft Agent FrameworkMAF承担的是编排层职责负责把模型推理、工具调用、对话线程与执行流程串成一个可运行、可观测、可扩展的 Agent Runtime。通过 GitHub MCP Server 的示例可以看到一个工程级 Agent 的关键不在 Prompt 写法而在于“工具以协议方式被发现并注入”并在运行时由模型自动选择调用最终形成可落地的工具型智能体。源代码地址https://github.com/bingbing-gui/dotnet-platform/tree/master/src/09-AI-Agent/Agent-Framework引入地址