鸿蒙智能体开发实战:44.MCP插件开发 - 从注册到发布
前言
MCP(Model Context Protocol)是一种开放的模型上下文协议,它规范了应用程序向大语言模型(LLM)提供上下文的方式。在鸿蒙智能体平台中,MCP插件允许开发者通过标准化接口将智能体Agent与各种外部工具、数据源相连接,让大模型能够按需自动执行计算、操作外部系统,甚至与真实世界交互。
本文是「鸿蒙智能体开发实战」系列的第四十四篇,系统讲解MCP插件的开发流程、注册方式、合规要求和发布渠道,帮助开发者快速构建和发布自己的MCP插件。
前置条件:建议先了解MCP协议基础概念,参考MCP官方文档。已阅读本系列第6篇《插件开发与使用》。
一、MCP协议与鸿蒙智能体
1.1 什么是MCP
MCP(Model Context Protocol)由Anthropic提出并开源,是一种旨在替代传统API集成模式的开放协议标准。它定义了一套统一的接口规范,让LLM应用能够以标准化的方式连接外部工具和数据源。
MCP的核心价值:
- 标准化集成:一套接口对接所有工具,无需为每个API单独适配
- 动态发现:LLM可以动态发现可用的工具和资源
- 安全可信:提供数据安全的最佳实践和访问控制机制
- 灵活切换:能够在不同LLM提供商和供应商之间灵活切换
1.2 鸿蒙智能体中的MCP定位
在小艺开放平台中,MCP插件与云插件、端插件并列为三大插件类型,各自定位如下:
| 插件类型 | 能力提供方 | 适用场景 | 示例 |
|---|---|---|---|
| 云插件 | 云端API服务 | 在线数据查询、第三方服务 | 天气查询、新闻检索 |
| 端插件 | HarmonyOS设备侧应用 | 设备端应用操控 | 发短信、打开应用 |
| MCP插件 | MCP Server(自部署) | 自建工具链、私有数据 | 内部API、数据库查询 |
提示:MCP插件最大的优势在于开发者自部署、自管控。你可以将已经搭建的MCP Server直接注册到小艺开放平台,无需重新开发适配接口。
二、MCP插件的注册方式
MCP插件的创建入口位于小艺开放平台的「资源库」-「MCP」页面,支持两种注册方式:
2.1 标准注册 - 手动配置
标准注册需要手动填写MCP Server的连接信息和认证方式:
// MCP插件标准注册配置{"mcp_server":{"name":"my-custom-tools","description":"自定义工具集合,提供数据分析与报告生成能力","server_url":"https://api.example.com/mcp","transport":"streamable-http","auth":{"type":"api-key","header_name":"X-API-Key","api_key":"${api_key_variable}"}},"tools":[{"name":"analyze-data","description":"分析数据集并返回统计结果","input_schema":{"type":"object","properties":{"data_source":{"type":"string","description":"数据源名称或URL"},"analysis_type":{"type":"string","enum":["summary","trend","correlation"],"description":"分析类型"}},"required":["data_source"]}}]}注意:如果插件图标上传后未显示工具列表,请等待几分钟后重新进入,后台加载存在延时。如仍无法显示,请检查服务连接和鉴权信息配置。
2.2 外部平台导入
如果开发者在魔搭平台(ModelScope)已有自部署的长期有效MCP插件,可以通过此方式批量导入:
# 魔搭平台MCP插件导入流程# 1. 在魔搭平台获取访问令牌(Access Token)# 2. 在小艺开放平台选择「外部平台导入」# 3. 输入访问令牌,触发同步# 4. 选择要导入的MCP插件列表# 5. 确认创建# MCP Server端示例(Python FastMCP)fromfastmcpimportFastMCP# 创建MCP Servermcp=FastMCP("data-analysis-server")@mcp.tool()defanalyze_sales_trend(region:str,period:str)->dict:"""分析指定区域和时段的销售趋势"""# 实际的销售数据分析逻辑return{"region":region,"period":period,"total_revenue":1250000,"growth_rate":0.15,"top_category":"电子产品","trend":"上升"}@mcp.tool()defgenerate_report(template:str,data:dict)->str:"""根据模板和数据生成报告"""report_content=f"#{template}报告\n\n"forkey,valueindata.items():report_content+=f"-{key}:{value}\n"returnreport_content| 注册方式 | 适用条件 | 公开范围 | 审核要求 |
|---|---|---|---|
| 标准注册 | 任何MCP Server | 可发布到插件市场 | 需完整合规材料 |
| 外部平台导入 | 魔搭平台自部署的长期有效插件 | 仅智能体渠道调试 | 无需审核 |
重要:外部平台导入方式创建的MCP插件仅支持发布到智能体渠道供本账号调试,无法发布到插件市场和主对话渠道公开使用。
三、MCP插件信息配置
3.1 插件市场信息
如果需要发布到插件市场,需要补充以下信息:
{"marketplace_info":{"usage_description":"使用Markdown格式描述插件功能概述,包含API Key申请方式。\n\n## 快速开始\n1. 申请API Key:访问 https://api.example.com/keys\n2. 在小艺开放平台完成开发者自认证\n3. 在智能体中添加本插件即可使用","auth_type":"developer-self-auth","auth_guide_url":"https://api.example.com/auth-guide","icon_url":"https://example.com/plugin-icon.png"}}开发者自认证与华为统一认证的对比:
| 认证方式 | 说明 | 适用场景 |
|---|---|---|
| 开发者自认证 | 使用者自行申请认证Key | 插件面向广泛开发者,每个使用者需独立Key |
| 华为统一认证 | 华为统一申请并配置 | 插件面向特定合作伙伴,统一管理认证 |
3.2 人工智能生成合成服务填写
根据国家法律法规要求,MCP插件公开上架前需填写人工智能生成合成服务信息:
{"ai_generated_content":{"has_ai_content":true,"content_types":["text","code"],"labeling_method":"digital-watermark","label_position":"左上角","label_display_mode":"始终显示"}}法律依据:《生成式人工智能服务管理暂行办法》、《人工智能生成合成内容标识办法》
3.3 个人信息收集声明
插件公开上架前,需声明个人信息收集情况,该信息会在插件市场的插件详情页「隐私声明」中展示:
{"privacy_declaration":{"collect_personal_info":true,"data_items":[{"field":"user_ip","purpose":"请求来源验证","storage":"in-memory"},{"field":"query_content","purpose":"服务响应","storage":"no-storage"}],"storage_statement":"不存储用户个人信息,处理完成后立即清除","privacy_policy_url":"https://example.com/privacy"}}3.4 大模型备案信息
如果MCP插件中使用了非小艺开放平台提供的三方大模型,需要在此处申报备案:
# 查询备案信息# 生成式AI服务备案查询:# https://www.cac.gov.cn/2024-04/02/c_1713729983803145.htm# 算法备案查询:# https://beian.cac.gov.cn/#/index# 示例:在插件中配置备案信息{"model_filing":{"service_filing_number":"生成式2024XXXXX","algorithm_filing_number":"算法备2024XXXXX"}}四、发布渠道与审核
4.1 三种发布渠道
上图展示了MCP插件的三种发布渠道:智能体、小艺对话和插件市场,不同渠道的审核标准和公开范围不同。
MCP插件支持发布到以下三个渠道:
| 渠道 | 审核要求 | 可见范围 |
|---|---|---|
| 智能体 | 无需人工审核,即发即上架 | 仅开发者账号内使用 |
| 小艺对话 | 需华为侧人工审核 | 小艺对话场景公开使用 |
| 插件市场 | 需华为侧人工审核 | 所有开发者发现和使用 |
4.2 发布流程
# MCP插件发布流程# 1. 完成插件信息配置和合规材料填写# 2. 点击「发布」-「提交审核」# 3. 勾选待发布渠道(可多选)# 4. 确认后提交# 小艺对话和插件市场发布后需联系华为侧人员进行审核# 审核周期一般为3-5个工作日4.3 开发者自认证
对于发布到插件市场的MCP插件,其他开发者使用时需要进行开发者自认证:
# 使用插件市场MCP插件的认证流程# 1. 在插件详情页找到「开发者自认证」信息# 2. 点击认证链接,进入认证页面# 3. 在页面中填写从MCP Server获取的API Key# 4. 完成认证后即可在智能体中使用提示:认证信息配置完成后,该MCP插件会自动导入到开发者账号的MCP插件列表中,状态为「已认证」。
五、MCP插件实战示例
5.1 构建完整的MCP Server
以下是一个完整的MCP Server示例,使用Python FastMCP框架构建:
# server.py - 完整的MCP Server实现fromfastmcpimportFastMCPfromtypingimportOptionalimportjson# 初始化MCP Servermcp=FastMCP("enterprise-tools",description="企业级工具集:包含文档查询、代码评审、项目管理等功能")@mcp.tool()defsearch_documents(query:str,category:Optional[str]=None)->list:"""搜索内部文档库,根据关键词返回匹配的文档列表"""# 模拟文档搜索all_docs=[{"id":1,"title":"API设计规范","category":"技术规范"},{"id":2,"title":"数据库备份方案","category":"运维"},{"id":3,"title":"测试流程指南","category":"QA"}]results=[]fordocinall_docs:ifquery.lower()indoc["title"].lower():ifcategoryanddoc["category"]!=category:continueresults.append(doc)returnresults@mcp.tool()defanalyze_code_quality(code_snippet:str,language:str)->dict:"""分析代码片段的质量,返回问题和改进建议"""analysis={"language":language,"lines":len(code_snippet.split("\n")),"issues":[],"score":0}# 简单的代码质量检查lines=code_snippet.split("\n")fori,lineinenumerate(lines):stripped=line.strip()iflen(stripped)>100:analysis["issues"].append({"line":i+1,"type":"line_too_long","message":f"第{i+1}行超过100字符,建议拆分"})# 计算得分total_issues=len(analysis["issues"])analysis["score"]=max(0,100-total_issues*10)returnanalysis@mcp.tool()defcreate_project_task(project:str,title:str,assignee:str,priority:str="medium")->dict:"""在项目管理系统中创建新任务"""importuuid task={"task_id":str(uuid.uuid4())[:8],"project":project,"title":title,"assignee":assignee,"priority":priority,"status":"todo","created_at":"2026-05-14T08:00:00Z"}returntaskif__name__=="__main__":# 启动MCP Servermcp.run(transport="streamable-http")5.2 测试MCP Server
在将插件注册到平台前,可以先在本地测试MCP Server是否正常工作:
# 启动MCP Serverpython server.py# 使用MCP Inspector工具测试npx @modelcontextprotocol/inspector# 或者在代码中测试工具调用curl-XPOST https://api.example.com/mcp\-H"Content-Type: application/json"\-H"X-API-Key: your-api-key"\-d'{ "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "search_documents", "arguments": { "query": "API设计" } }, "id": 1 }'// MCP工具调用响应示例{"jsonrpc":"2.0","id":1,"result":{"content":[{"type":"text","text":"[{\"id\": 1, \"title\": \"API设计规范\", \"category\": \"技术规范\"}]"}],"isError":false}}六、常见问题与解决方案
6.1 工具列表未加载
问题:标准注册完成后,工具列表未显示。
排查步骤:
- 检查MCP Server的URL是否可公开访问
- 验证鉴权信息是否正确配置
- 检查MCP Server实现是否符合协议规范
- 等待几分钟后重新进入页面
6.2 外部平台导入失败
问题:外部平台导入方式同步后未创建插件。
| 原因 | 解决方案 |
|---|---|
| 访问令牌无效 | 重新在魔搭平台生成访问令牌 |
| MCP插件非长期有效 | 在魔搭平台更新插件的有效性设置 |
| 插件已存在 | 检查已创建的插件列表,下架并删除重复插件后重新同步 |
6.3 上架限制
注意:受隐私风险影响,当前暂不支持上架包含私有云插件及私有MCP插件的个人智能体。仅支持页面调试能力。企业开发者不受此限制。
七、MCP插件在智能体中的集成
7.1 在工作流中使用MCP插件
MCP插件可以像其他插件一样,作为插件节点添加到工作流中:
# 代码节点引用MCP插件输出defprocess_mcp_result(mcp_output:dict)->str:"""处理MCP插件的返回结果"""content_list=mcp_output.get("content",[])texts=[]forcontentincontent_list:ifcontent.get("type")=="text":texts.append(content.get("text",""))return"\n".join(texts)7.2 在大模型节点中使用
MCP插件也可以作为大模型节点的技能进行配置,大模型会自动决定何时调用插件:
{"llm_node":{"skills":[{"type":"mcp_plugin","plugin_id":"enterprise-tools","tool_ids":["search_documents","analyze_code_quality"]}],"system_prompt":"你是一个企业助手。当用户需要查询文档时,使用search_documents工具;""当用户需要代码评审时,使用analyze_code_quality工具。"}}总结
本文详细介绍了鸿蒙智能体平台中MCP插件的完整开发流程,从协议理解、注册配置、合规填写到发布上架。MCP协议作为LLM工具集成的开放标准,正在成为AI应用生态的关键基础设施。掌握MCP插件开发,意味着可以零适配成本地将已有的工具链和能力接入智能体生态。
关键要点:
- MCP插件支持标准注册和外部平台导入两种注册方式
- 发布到插件市场需要完成AI内容合规、隐私声明、备案信息等合规工作
- 三种发布渠道对应不同的审核标准和公开范围
- MCP插件可集成到工作流节点和大模型节点技能中使用
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!
相关资源:
- MCP协议官方文档:链接
- MCP插件创建指南:链接
- MCP标准注册文档:链接
- MCP外部平台导入文档:链接
- MCP插件发布说明:链接
- 插件认证指南:链接
- FastMCP Python框架:链接
- 鸿蒙智能体开发实战系列:链接
- 生成式AI服务备案查询:链接
- 互联网信息服务算法备案系统:链接
