
教程文档人工智能【免费下载链接】mcp-for-beginnersThis open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for developers, it focuses on practical techniques for building modular, scalable, and secure AI workflows from session setup to service orchestration.项目地址https://gitcode.com/GitHub_Trending/mc/mcp-for-beginners点击查看免费下载导读本文以 mcp-for-beginners 开源课程中「连接 Microsoft Learn Docs MCP 服务器」这一案例为骨架完整讲解如何通过 Python 客户端接入https://learn.microsoft.com/api/mcp端点调用microsoft_docs_search工具实时检索微软官方文档。你将掌握三种落地形态可交互的命令行文档检索客户端、基于 Chainlit Azure OpenAI 的对话式学习计划生成器输入「AI-900 认证8 周」即可输出逐周学习路线以及把文档检索能力直接嵌入 VS Code配合 GitHub Copilot的编辑器内工作流。文中所有代码均可在仓库的 09-CaseStudy/docs-mcp/solution/python 目录中找到可运行版本。案例背景把文档带进你的工作流现代开发早已不只是写代码更是在正确的时间找到正确的信息。文档无处不在却很少出现在你最需要它的地方——你的工具和工作流内部。Microsoft Learn Docs MCP 服务器把「实时、上下文感知的文档检索」封装成了标准的 MCP 工具任何遵循 Model Context Protocol 的客户端都可以通过统一方式调用它。这意味着无论是命令行工具、Web 应用还是 IDE 扩展都能在几行代码内获得官方文档的检索能力从而减少浏览器与编辑器之间的上下文切换显著提升开发与学习的效率。本案例的完整讲解位于 09-CaseStudy/docs-mcp/README.md其中 Python 解决方案的安装与使用说明对应 09-CaseStudy/docs-mcp/solution/python/README.md本文即围绕该说明文档展开并结合源码 scenario1.py 与 scenario2.py 进行深入解析。前置条件与环境准备运行本案例需要满足以下条件Python 3.8 或更高版本pipPython 包管理器可访问互联网用于连接 Microsoft Learn Docs MCP 服务器端点地址为https://learn.microsoft.com/api/mcpAzure OpenAI 资源仅 Scenario 2 需要用于驱动对话代理生成学习计划安装依赖只需一条命令依赖清单见 requirements.txtpip install -r requirements.txt从依赖清单可以确认本项目的技术栈构成依赖包在项目中的用途chainlit构建对话式 Web 应用界面Scenario 2mcp官方 MCP Python SDK提供streamablehttp_client与ClientSessionsemantic-kernel将 MCP 工具封装为语义内核插件供 Azure OpenAI 代理调用werkzeug3.1.6安全锁定版本修复safe_join在 Windows 设备名上的 DoS 漏洞CVE-2025-66221 / CVE-2026-21860 / CVE-2026-27199值得说明的是werkzeug是 Chainlit 的传递依赖requirements.txt 中通过版本下限强制其解析到 3.1.6 及以上体现了生产级项目对供应链安全的最小锁定实践。Scenario 1命令行文档检索客户端核心目标Scenario 1 的目标是写一个连接到 Microsoft Learn Docs MCP 服务器的控制台程序调用microsoft_docs_search工具把流式返回的文档结果解析并打印到终端。它是构建更复杂集成聊天机器人、IDE 扩展、Web 仪表盘的基础。完整实现与逐段解析完整源码位于 scenario1.py其关键结构如下① 导入与端点定义import asyncio import logging import sys import json from mcp.client.streamable_http import streamablehttp_client from mcp import ClientSession MCP_SERVER_URL https://learn.microsoft.com/api/mcp这里用到的是官方 MCP SDK 的两个核心对象streamablehttp_client可流式 HTTP 客户端负责建立传输通道和ClientSession会话层负责初始化握手与工具调用。② 日志配置与交互提示logging.basicConfig( levellogging.INFO, format%(asctime)s - %(name)s - %(levelname)s - %(message)s, datefmt%Y-%m-%d %H:%M:%S ) logger logging.getLogger(mcp_client) def prompt_user(): print(Type your Microsoft Docs search query (or exit to quit):) try: return input( ).strip() except (KeyboardInterrupt, EOFError): print(\nDetected exit signal.) return exitprompt_user兼顾了两种退出信号CtrlC 与 CtrlD保证交互循环可被干净地中断。③ 连接、初始化与循环查询async def main(): logger.info(Connecting to Microsoft Docs MCP Server at: %s, MCP_SERVER_URL) try: async with streamablehttp_client(MCP_SERVER_URL) as (read_stream, write_stream, _): async with ClientSession(read_stream, write_stream) as session: await session.initialize() # ... 打印客户端提示信息 ... while True: user_query prompt_user() if not user_query: print(Query cannot be empty. Please try again.) continue if user_query.lower() in (exit, quit): break try: result await session.call_tool(microsoft_docs_search, {question: user_query}) if hasattr(result, content): for item in result.content: my_list json.loads(item.text) for doc in my_list: print(f[Title]: {doc.get(title, No title)}) print(f[Content]: {doc.get(content, No content)}) print(---) except Exception as e: logger.error(Query failed: %s, e) print(fError: {e}. Please try a different query or check your connection.\n) except Exception as e: logger.error(Connection error: %s, e) sys.exit(1)这段代码揭示了几个关键实现细节工具参数名是question调用call_tool(microsoft_docs_search, {question: user_query})时查询参数键为question而非query这是服务端工具的约定写错键名将导致检索失败返回结构是嵌套 JSON 文本result.content中每个 item 的text字段是一个 JSON 数组字符串需要json.loads解析后才能拿到title与content字段会话复用while True循环在同一个ClientSession内多次调用工具避免了每次查询都重新建立连接的开销双层异常处理内层捕获单次查询失败如网络抖动外层捕获连接建立失败并直接退出程序对两种故障场景给出了不同的恢复策略。运行与预期输出python scenario1.py启动后按提示输入查询例如Prompt What is Azure Key Vault? Answer Azure Key Vault is a cloud service for securely storing and accessing secrets. ...每条结果会以[Title]/[Content]形式分段打印多个文档之间以---分隔。输入exit或quit即可结束会话。Scenario 2Chainlit 对话式学习计划生成器核心目标Scenario 2 把 Docs MCP 集成进 Web 开发项目用户只需在聊天窗口输入学习主题与学习周数例如「AI-900 认证8 周」应用就会分析输入、通过 MCP 服务器检索 Microsoft Learn 上的相关官方内容并组织成逐周的个性化学习计划推荐内容直接显示在对话流中方便用户跟进与追踪进度。架构剖析MCP Semantic Kernel Azure OpenAIscenario2.py 展示了比 Scenario 1 更完整的工程化设计其架构分三层第一层把 MCP 工具封装为 Semantic Kernel 插件class MCPDocsPlugin: def __init__(self, mcp_server_url): self.mcp_server_url mcp_server_url kernel_function(namesearch_docs, descriptionSearch Microsoft Docs using MCP) async def search_docs(self, question: str) - str: async with streamablehttp_client(self.mcp_server_url) as (read_stream, write_stream, _): async with ClientSession(read_stream, write_stream) as session: await session.initialize() result await session.call_tool(microsoft_docs_search, {question: question}) output [] if hasattr(result, content): for item in result.content: try: my_list json.loads(item.text) for doc in my_list: title doc.get(title, No title) content doc.get(content, No content) output.append(f**{title}**\n{content}) except Exception: output.append(item.text) return \n.join(output) else: return No content returned from the search.该插件通过kernel_function注解把 MCP 工具注册成 Semantic Kernel 可感知的函数返回内容用 Markdown 加粗标题组织便于在聊天界面直接渲染。同时源码中还保留了一个独立的mcp_docs_search辅助函数展示了「不依赖插件体系、直接调用 MCP」的备选路径。第二层构建 ChatCompletionAgent 代理kernel Kernel() service_id agent kernel.add_service(AzureChatCompletion(service_idservice_id)) settings kernel.get_prompt_execution_settings_from_service_id(service_idservice_id) settings.function_choice_behavior FunctionChoiceBehavior.Auto() mcp_plugin MCPDocsPlugin(MCP_SERVER_URL) kernel.add_plugin(mcp_plugin, plugin_nameMCPDocs) agent ChatCompletionAgent( serviceAzureChatCompletion(), nameDocsAgent, instructionsYou are a helpful assistant that uses the MCPDocs plugin to answer Microsoft Docs questions. Format your answers clearly., plugins[mcp_plugin] )关键点在于FunctionChoiceBehavior.Auto()它允许 Azure OpenAI 模型在对话过程中自主决定何时调用MCPDocs.search_docs工具这正是「代理Agent自主使用 MCP 工具」的标准模式。系统提示词instructions约束代理只通过插件回答 Microsoft Docs 相关问题。第三层Chainlit 事件驱动的聊天循环cl.on_chat_start async def start(): await cl.Message(contentWelcome! Enter your Microsoft Docs search query below.).send() # ... 构建 kernel 与 agent并通过 cl.user_session 缓存 ... cl.on_message async def handle_message(message: cl.Message): agent cl.user_session.get(agent) user_query message.content.strip() if not user_query: await cl.Message(contentQuery cannot be empty. Please try again.).send() return answer cl.Message(contentProcessing your request...) await answer.send() try: response_printed False async for content in agent.invoke(user_query): msg content.content if hasattr(msg, content): msg msg.content if msg: await answer.stream_token(str(msg)) response_printed True if not response_printed: await answer.stream_token(No response generated by the agent.\n) await answer.update() except Exception as e: await answer.stream_token(f\n\n❌ Error: {str(e)}\n\n) await answer.update()cl.on_chat_start在会话建立时初始化代理并通过cl.user_session缓存cl.on_message处理每次用户消息使用agent.invoke()流式获取响应通过answer.stream_token()实现打字机式的逐字输出并提供「无响应」兜底与异常信息内联展示。必需的 Azure OpenAI 环境变量运行 Scenario 2 前必须在python文件夹内的.env文件中设置以下变量AZURE_OPENAI_CHAT_DEPLOYMENT_NAME AZURE_OPENAI_API_KEY AZURE_OPENAI_ENDPOINT AZURE_OPENAI_API_VERSION请用你自己的 Azure OpenAI 资源信息填充这些值否则AzureChatCompletion无法完成认证与推理调用。需要部署自有模型时可借助 Microsoft Foundry 平台Azure AI 门户便捷发布。启动应用chainlit run scenario2.py终端会输出本地访问地址如http://localhost:8000在浏览器打开后在聊天窗口输入学习主题与周数即可。为什么选择 ChainlitChainlit 是一个现代、开源的对话式 Web 应用构建框架非常适合快速构建与后端服务如 Microsoft Learn Docs MCP 服务器对接的聊天界面。本项目使用它提供一种简单、交互式的实时个性化学习计划生成体验借助 Chainlit开发者可以快速构建并部署提升生产力与学习效率的对话工具。推荐查询示例以下查询展示了应用对不同学习目标与时间框架的适配能力AI-900 认证8 周学习 Azure Functions4 周Azure DevOps6 周Azure 上的数据工程10 周Microsoft 安全基础5 周Power Platform7 周Azure AI 服务12 周云架构9 周实际运行效果可参考案例文档中展示的交互截图Scenario 3在 VS Code 中直接检索与引用文档核心目标除了编写独立客户端你还可以把 Microsoft Learn 文档检索能力直接嵌入 VS Code不用再切换浏览器标签页即可在编辑器内搜索和阅读文档、在 README 或课程文件中直接插入参考链接并与 GitHub Copilot 协同实现「AI 驱动的文档工作流」。这一形态对课程作者、文档编写者和频繁查阅资料的开发者尤为适用。配置步骤第 1 步在工作区添加 MCP 配置文件在工作区根目录创建.vscode/mcp.json内容如下仓库中的完整示例见 09-CaseStudy/docs-mcp/solution/scenario3/mcp.json{ servers: { LearnDocsMCP: { url: https://learn.microsoft.com/api/mcp } } }这段配置告诉 VS Code 如何连接 Microsoft Learn Docs MCP 服务器。注意没有这个有效的mcp.jsonScenario 3 将无法工作文件位置必须是.vscode/mcp.json。第 2 步打开 GitHub Copilot Chat 面板若尚未安装 GitHub Copilot 扩展请先在 VS Code 的扩展视图中安装 Copilot Chat然后从侧边栏打开聊天面板。第 3 步启用代理模式并验证工具在 Copilot Chat 面板中启用 agent mode代理模式随后确认 MCP 服务器已出现在可用工具列表中——这保证 Copilot 代理可以访问文档服务器抓取相关信息。第 4 步新建会话并向代理提问在聊天面板中新建会话直接以自然语言提出文档查询。例如Im trying to write a study plan for topic X. Im going to study it for 8 weeks, for each week, suggest content I should take.代理将借助 MCP 服务器拉取并在编辑器内直接展示相关 Microsoft Learn 文档聊天交互效果可参考案例中的截图第 5 步实时查询与结果引用代理返回的文档链接与摘要可以直接插入 Markdown 文件或作为代码中的参考资料。完整的带截图分步指南见 09-CaseStudy/docs-mcp/solution/scenario3/README.md。适用场景与示例查询在编辑器内结合 Copilot 与 MCP你可以在编写课程或项目文档时快速向 README 添加参考链接用 Copilot 生成代码同时用 MCP 即时查找并引用相关官方文档全程保持注意力在编辑器内提升产出效率。可尝试的典型查询包括「Show me how to use Azure Functions triggers.」「Insert a link to the official documentation for Azure Key Vault.」「What are the best practices for securing Azure resources?」「Find a quickstart for Azure AI services.」三个场景的横向对比与选型建议场景运行形态关键技术适用对象Scenario 1命令行交互程序官方 MCP SDK、流式 HTTP 客户端、ClientSession需要脚本化批量检索、学习 MCP 客户端原理的开发者Scenario 2Chainlit Web 应用MCP Semantic Kernel 插件 Azure OpenAI 代理需要面向最终用户提供对话式学习/检索工具的产品Scenario 3VS Code 编辑器集成.vscode/mcp.json GitHub Copilot 代理模式课程作者、文档编写者、频繁查阅资料的开发者三者的技术底座完全相同——都通过https://learn.microsoft.com/api/mcp端点与microsoft_docs_search工具交互差异只在于调用方与呈现层。理解了 Scenario 1 的连接与会话机制就能顺理成章地把它迁移到 Web 界面Scenario 2或 IDE 插件Scenario 3中。关键技术要点回顾统一的 MCP 接入模式streamablehttp_client(url)建立传输通道 →ClientSession初始化会话 →session.call_tool(microsoft_docs_search, {question: ...})调用工具这一三段式流程贯穿全部三个场景参数键与返回结构工具参数键是question返回的content[].text是 JSON 数组字符串需解析后读取title/content字段代理化调用Scenario 2 通过FunctionChoiceBehavior.Auto()让 LLM 自主决定调用 MCP 工具是「让模型使用外部工具」的标准范式配置驱动的编辑器集成Scenario 3 仅需一份.vscode/mcp.json即可让 VS Code 与 Copilot 获得完整的文档检索能力安全基线依赖清单对传递依赖werkzeug做了版本下限锁定规避已知安全公告生产项目应同样关注传递依赖的漏洞面。将文档检索直接集成进工具链不只是便利性的提升更是生产力的质变它消除了代码与文档之间的上下文切换让开发者能够实时获取最新、最相关的官方资料并构建出更智能、更具交互性的开发工具。赞分享教程文档人工智能【免费下载链接】mcp-for-beginnersThis open-source curriculum introduces the fundamentals of Model Context Protocol (MCP) through real-world, cross-language examples in .NET, Java, TypeScript, JavaScript, Rust and Python. Designed for developers, it focuses on practical techniques for building modular, scalable, and secure AI workflows from session setup to service orchestration.项目地址https://gitcode.com/GitHub_Trending/mc/mcp-for-beginners点击查看免费下载相关推荐基于 Microsoft Learn Docs MCP 的 Python 学习计划生成器Chainlit Semantic Kernel 实战指南基于 Microsoft Learn Docs MCP 的 Python 学习计划生成器Chainlit Semantic Kernel 实战指南 Mic教程文档人工智能案例研究从自建客户端接入 Microsoft Learn Docs MCP 服务器——实时文档检索、交互式学习计划与 VS Code 内嵌文档案例研究从自建客户端接入 Microsoft Learn Docs MCP 服务器——实时文档检索、交互式学习计划与 VS Code 内嵌文档 本文是 mcp教程文档人工智能mcp-for-beginners 实战在 VS Code 内通过 MCP 服务器检索 Microsoft Learn 文档Scenario 3mcp for beginners 实战在 VS Code 内通过 MCP 服务器检索 Microsoft Learn 文档Scenario 3 本文是教程文档人工智能上一篇三步免费解锁 Wand 专业版Wand-Enhancer 完整上手与进阶玩法指南下一篇SMUDebugTool完整入门指南AMD处理器调试工具的免费全能工具箱创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考