{"id":"cd54ed6b-1a0b-4699-b1bd-f0223a0cbf03","shortId":"WTkvMw","kind":"skill","title":"Dynamic MCP Loader","tagline":"动态 MCP 工具加载器，支持运行时连接远程 HTTP/SSE MCP 服务或启动本地 MCP 进程，让 Agent 根据需求即时扩展能力。适用于用户提到不熟悉的 MCP 服务时，通过搜索发现连接方式后动态加载。","description":"# Dynamic MCP Loader\n\n## 概述\n\nDynamic MCP Loader 是一个**元工具**（Meta-Tool），赋予 Agent **\"自主扩张能力\"**。\n\n它允许 Agent 在运行时动态加载新的 MCP 工具，而无需重启服务或修改配置文件。Agent 可以：\n1. 通过 Web 搜索发现 MCP 服务的连接方式（URL 或 npx 命令）\n2. 调用 `connect_mcp` 工具动态挂载该服务\n3. 立即使用新加载的 MCP 工具完成用户任务\n\n**核心优势**：实现\"Just-in-Time Tooling\"（即时工具化）模式，Agent 不再需要背负几百个工具运行，而是按需\"下载\"技能。\n\n## 何时使用此 Skill\n\n**触发场景**：\n- 用户提到某个 MCP 服务名称（如 \"用 context7 查文档\"、\"用 brave search\"）\n- 用户要求使用特定功能但当前工具列表中没有对应工具\n- 用户明确要求\"安装\"或\"连接\"某个 MCP Server\n\n**典型工作流**：\n```\n用户请求 → Web Search 查找连接方式 → connect_mcp 动态加载 → 使用新工具\n```\n\n## 核心工具\n\n### connect_mcp\n\n**功能**：全能型 MCP 加载器，支持远程和本地两种模式。\n\n\n**参数说明**：\n\n| 参数       | 类型                    | 必需         | 说明                                              |\n| ---------- | ----------------------- | ------------ | ------------------------------------------------- |\n| `mode`     | `\"remote\"` 或 `\"local\"` | 是           | 连接模式                                          |\n| `source`   | `str`                   | 是           | 远程模式填 URL，本地模式填基础命令（如 `npx`）    |\n| `args`     | `List[str]`             | 本地模式必需 | 命令参数列表                                      |\n| `env_vars` | `Dict[str, str]`        | 否           | 本地模式专用，环境变量（如 `BRAVE_API_KEY`）      |\n| `api_key`  | `str`                   | 否           | 远程模式专用，API Key 用于服务认证（如 Context7） |\n\n**返回值**：执行结果信息字符串\n\n## 使用指南\n\n### 模式 A：远程 HTTP/SSE 服务\n\n**适用场景**：MCP 服务以 HTTP 或 Server-Sent Events (SSE) 方式提供。\n\n**执行步骤**：\n1. 通过搜索获取 MCP 服务的 URL\n2. 调用 `connect_mcp`，`mode=\"remote\"`，`source` 填写 URL\n3. ADK 会自动连接并提取工具定义\n\n**示例 1：无需认证的远程服务**\n\n用户请求：\"连接公开的 MCP 服务\"\n\n```\nTool: connect_mcp(\n    mode=\"remote\",\n    source=\"https://example.com/mcp\"\n)\nResult: \"[Success] remote MCP 工具加载成功！\"\n```\n\n**示例 2：需要 API Key 认证的远程服务（Context7）**\n\n用户请求：\"用 context7 查一下 fastmcp 库的最新版本，我的 API Key 是 ctx7sk-xxxxx\"\n\n```\nStep 1: Web Search\nTool: web_search(\"context7 mcp server url\")\nResult: \"Context7 MCP is available at https://mcp.context7.com/mcp\"\n\nStep 2: Dynamic Load with API Key\nTool: connect_mcp(\n    mode=\"remote\",\n    source=\"https://mcp.context7.com/mcp\",\n    api_key=\"ctx7sk-xxxxx\"\n)\nResult: \"[Success] remote MCP 工具加载成功！\"\n\nStep 3: Use New Tool\nTool: resolve_library_id(library_name=\"fastmcp\")\nTool: query_docs(library_id=\"/...\", query=\"latest version\")\n```\n\n**重要说明**：\n- Context7 使用自定义认证 header `CONTEXT7_API_KEY`（非标准 Bearer Token）\n- API Key 格式：`ctx7sk-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`\n- 工具会自动检测 `context7.com` 域名并使用正确的 header 名称\n\n### 模式 B：本地进程启动\n\n**适用场景**：MCP 服务需要通过 `npx`、`python` 等命令在本地启动。\n\n**执行步骤**：\n1. 通过搜索获取启动命令（如 `npx -y @modelcontextprotocol/server-git`）\n2. 将命令拆解为 `command` 和 `args` 列表\n3. 调用 `connect_mcp`，`mode=\"local\"`\n4. 如果需要 API Key，通过 `env_vars` 传入\n\n**示例 1：Git MCP**\n\n用户请求：\"帮我启用 git 的 mcp 工具\"\n\n```\nStep 1: Web Search (如果不知道启动方式)\nTool: web_search(\"modelcontextprotocol git server npx\")\nResult: \"Run using: npx -y @modelcontextprotocol/server-git\"\n\nStep 2: Dynamic Load\nTool: connect_mcp(\n    mode=\"local\",\n    source=\"npx\",\n    args=[\"-y\", \"@modelcontextprotocol/server-git\"]\n)\nResult: \"[Success] local MCP 工具加载成功！\"\n\nStep 3: Use New Tool\nTool: git_status()\nTool: git_log(limit=10)\n```\n\n**示例 2：Brave Search MCP（需要 API Key）**\n\n用户请求：\"用 Brave Search 的 MCP，我的 Key 是 BS-xxxxx\"\n\n```\nStep 1: Web Search\nTool: web_search(\"brave search mcp server installation\")\nResult: \"npx -y @modelcontextprotocol/server-brave-search\"\n\nStep 2: Dynamic Load with Env Vars\nTool: connect_mcp(\n    mode=\"local\",\n    source=\"npx\",\n    args=[\"-y\", \"@modelcontextprotocol/server-brave-search\"],\n    env_vars={\"BRAVE_API_KEY\": \"BS-xxxxx\"}\n)\nResult: \"[Success] local MCP 工具加载成功！\"\n\nStep 3: Use New Tool\nTool: brave_web_search(query=\"AI news today\")\n```\n\n## 参数构造技巧\n\n**关键点**：从搜索结果的**字符串命令**转化为**结构化参数**。\n\n### 命令拆解规则\n\n**原始命令**：`npx -y @modelcontextprotocol/server-sqlite --db-path ./data.db`\n\n**拆解为**：\n```python\nmode=\"local\"\nsource=\"npx\"\nargs=[\"-y\", \"@modelcontextprotocol/server-sqlite\", \"--db-path\", \"./data.db\"]\n```\n\n**注意事项**：\n- `args` 必须是**列表**，不能是字符串\n- 每个参数和值都是独立的列表项\n- 如果用户提供了具体文件路径，替换掉搜索结果中的示例路径\n\n### 环境变量处理\n\n**何时使用 env_vars**：\n- MCP 文档提到需要设置环境变量（如 `BRAVE_API_KEY`, `OPENAI_API_KEY`）\n- 用户明确提供了 API Key\n\n**示例**：\n```python\nenv_vars={\n    \"BRAVE_API_KEY\": \"用户提供的Key\",\n    \"DEBUG\": \"true\"  # 如果需要调试模式\n}\n```\n\n## 安全机制\n\n### 1. 命令白名单\n\n**本地模式仅允许以下基础命令**：\n- `npx`, `uvx`: Node.js 包管理工具\n- `node`: Node.js 运行时\n- `python`, `python3`: Python 解释器\n\n**拒绝示例**：\n```python\nconnect_mcp(mode=\"local\", source=\"rm\", args=[\"-rf\", \"/\"])\n# 返回: \"[Security] 拒绝执行：命令 'rm' 不在白名单中\"\n```\n\n### 2. 参数注入防护\n\n**禁止参数中包含以下字符**：\n- 管道符 `|`\n- 重定向 `>`, `<`\n- 命令分隔 `;`, `&`\n- 命令替换 `` ` ``, `$(`\n\n**拒绝示例**：\n```python\nconnect_mcp(mode=\"local\", source=\"npx\", args=[\"-y\", \"package; rm -rf /\"])\n# 返回: \"[Security] 参数 'package; rm -rf /' 含非法字符\"\n```\n\n### 3. 智能去重\n\n**防止重复加载同一服务**：\n- 远程模式：对比 URL（忽略末尾斜杠）\n- 本地模式：对比 `command + args` 完全匹配\n\n**示例**：\n```python\n# 第一次调用\nconnect_mcp(mode=\"remote\", source=\"https://mcp.context7.com/mcp\")\n# 返回: \"[Success] ...\"\n\n# 第二次调用相同 URL\nconnect_mcp(mode=\"remote\", source=\"https://mcp.context7.com/mcp/\")\n# 返回: \"无需重复连接：已连接到远程服务 https://mcp.context7.com/mcp\"\n```\n\n## 故障排查\n\n### 常见问题\n\n**问题 1**：`[System] 找不到命令 'npx'`\n\n**原因**：系统未安装 Node.js。\n\n**解决**：提示用户安装 Node.js，或使用 `bash` skill 先执行 `node --version` 确认环境。\n\n---\n\n**问题 2**：`[Error] 加载 MCP 失败: Connection timeout`\n\n**原因**：\n- 远程模式：URL 错误或服务不可用\n- 本地模式：NPM 包下载超时（首次运行需要下载）\n\n**解决**：\n- 检查网络连接\n- 确认 URL 是否正确\n- 本地模式：等待更长时间或提示用户手动预安装包\n\n---\n\n**问题 3**：工具加载成功但 Agent 没有调用新工具\n\n**原因**：ADK 的工具列表更新需要在下一轮对话时生效。\n\n**解决**：确保 `connect_mcp` 成功返回后，Agent 在**下一次思考**时会自动看到新工具。如果仍未调用，可能是工具描述不够清晰或用户需求表述不明确。\n\n## 进阶用法\n\n### 结合 Bash Skill 预检查环境\n\n**最佳实践**：在动态加载前，先用 `bash` skill 确认环境。\n\n```\nStep 1: Environment Check\nTool: bash(command=\"node --version\", timeout=5)\nResult: \"v20.10.0\"\n\nStep 2: Install if Needed\nTool: bash(command=\"npm install -g @modelcontextprotocol/server-git\", timeout=60)\n\nStep 3: Dynamic Load\nTool: connect_mcp(mode=\"local\", source=\"npx\", args=[\"-y\", \"@...\"])\n```\n\n### 会话生命周期管理\n\n**重要提示**：\n- 动态加载的 MCP 工具仅在**当前会话**有效\n- 用户的每个会话都有独立的 `agent` 实例，修改 `agent.tools` 不会影响其他用户\n- 会话结束后，本地启动的进程会被自动清理（由 ADK 的 `McpToolset` 管理）\n\n### 探索新 MCP 服务\n\n**通用流程模板**：\n\n```\nUser: \"我想试用一个叫 [SERVICE_NAME] 的 MCP 工具\"\n\nAgent 执行:\n1. web_search(\"[SERVICE_NAME] mcp server installation\")\n2. 分析搜索结果，识别连接方式\n3. 如果是 URL → connect_mcp(mode=\"remote\", source=\"URL\")\n4. 如果是命令 → 拆解后 connect_mcp(mode=\"local\", ...)\n5. 等待工具加载成功提示\n6. 探索新工具的功能并完成用户任务\n```\n\n## 系统提示词建议\n\n**为了让 Agent 正确使用此 Skill，建议在 System Prompt 中添加**：\n\n```markdown\n### 动态 MCP 能力扩展\n\n你可以使用 `connect_mcp` 工具来扩展你的能力。使用步骤：\n\n1. **先搜索**：使用搜索引擎查找目标 MCP 的安装或连接方式。\n\n2. **后连接**：\n   - **远程服务**（HTTP URL）→ `connect_mcp(mode=\"remote\", source=\"URL\")`\n   - **本地包**（npx/python 命令）→ `connect_mcp(mode=\"local\", source=\"npx\", args=[...])`\n\n3. **参数构造**：\n   - 将搜索到的命令字符串拆解为列表\n   - 例如：`npx -y pkg arg` → `args=[\"-y\", \"pkg\", \"arg\"]`\n   - 如果需要 API Key，通过 `env_vars` 参数传入\n\n4. **使用新工具**：连接成功后，下一轮思考时即可看到并使用新工具。\n```\n\n## 技术原理\n\n**运行时工具注入**：\n- 利用 ADK 的依赖注入机制，`get_tools(agent, ...)` 获取当前 `agent` 实例\n- 通过 `agent.tools.append(new_toolset)` 直接修改运行中的工具列表\n- ADK 在下一次生成 Prompt 时会自动读取更新后的 `agent.tools`，将新工具 Schema 发送给 LLM\n\n**McpToolset 自动发现**：\n- `McpToolset` 对象被添加到工具列表后，ADK 会自动调用其内部的工具发现机制\n- 远程模式：发送 `tools/list` JSON-RPC 请求获取工具定义\n- 本地模式：通过 Stdio 管道与子进程通信，握手后获取工具列表\n\n## 资源目录说明\n\n**此 Skill 不包含额外的 scripts/references/assets 资源**，因为：\n- 核心逻辑已完全封装在 `tools.py` 中\n- 不需要外部脚本或模板文件\n- 所有必要的安全规则和逻辑都在代码内部实现\n\n**如果未来需要扩展**，可以添加：\n- `references/mcp_registry.json`：预定义的常用 MCP 服务列表\n- `scripts/validate_mcp.py`：MCP 服务健康检查脚本","tags":["dynamic","mcp","google","adk","agent","valkryhx","agent-development","agent-skills","agent-swarm","agent-team","agentic-ai","dynamic-skills"],"capabilities":["skill","source-valkryhx","skill-dynamic-mcp","topic-agent-development","topic-agent-skills","topic-agent-swarm","topic-agent-team","topic-agentic-ai","topic-dynamic-skills","topic-google-adk","topic-vibe-coding"],"categories":["google_adk_agent"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/valkryhx/google_adk_agent/dynamic-mcp","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add valkryhx/google_adk_agent","source_repo":"https://github.com/valkryhx/google_adk_agent","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 6 github stars · SKILL.md body (7,346 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:14:45.335Z","embedding":null,"createdAt":"2026-05-18T13:22:13.579Z","updatedAt":"2026-05-18T19:14:45.335Z","lastSeenAt":"2026-05-18T19:14:45.335Z","tsv":"'/data.db':518,531 '/mcp':212,257,273,647,665 '/mcp/':659 '1':43,180,198,239,339,366,376,446,568,669,740,812,861 '10':424 '2':53,185,219,259,345,394,426,462,598,687,753,820,866 '3':58,194,285,351,413,492,625,710,767,823,887 '4':357,832,906 '5':749,839 '6':841 '60':765 'adk':195,715,795,913,926,939 'agent':14,33,36,41,71,712,722,787,810,845,917,919 'agent.tools':790,930 'agent.tools.append':922 'ai':501 'api':148,150,155,221,232,263,274,309,314,359,431,481,548,551,554,561,900 'arg':133,349,404,475,525,533,590,613,635,777,886,894,895,898 'avail':253 'b':330 'bash':680,730,736,744,758 'bearer':312 'brave':87,147,427,435,452,480,497,547,560 'bs':443,484 'bs-xxxxx':442,483 'check':742 'command':347,634,745,759 'connect':55,102,107,187,205,266,353,398,469,584,607,640,652,692,719,771,826,835,857,871,880 'context7':84,159,224,227,245,250,305,308 'context7.com':325 'ctx7sk':236,277,318 'ctx7sk-xxxxx':235,276 'ctx7sk-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx':317 'db':516,529 'db-path':515,528 'debug':564 'dict':140 'doc':298 'dynam':1,20,24,260,395,463,768 'env':138,362,466,478,542,558,903 'environ':741 'error':688 'event':176 'example.com':211 'example.com/mcp':210 'fastmcp':229,295 'g':762 'get':915 'git':367,371,384,418,421 'header':307,327 'http':171,869 'http/sse':8,166 'id':292,300 'instal':456,754,761,819 'json':945 'json-rpc':944 'just-in-tim':64 'key':149,151,156,222,233,264,275,310,315,360,432,440,482,549,552,555,562,901 'latest':302 'librari':291,293,299 'limit':423 'list':134 'llm':934 'load':261,396,464,769 'loader':3,22,26 'local':122,356,401,409,472,488,522,587,610,774,838,883 'log':422 'markdown':852 'mcp':2,5,9,11,17,21,25,38,47,56,60,80,95,103,108,111,169,182,188,202,206,216,246,251,267,282,333,354,368,373,399,410,429,438,454,470,489,544,585,608,641,653,690,720,772,782,800,808,817,827,836,854,858,864,872,881,969,972 'mcp.context7.com':256,272,646,658,664 'mcp.context7.com/mcp':255,271,645,663 'mcp.context7.com/mcp/':657 'mcptoolset':797,935,937 'meta':30 'meta-tool':29 'mode':119,189,207,268,355,400,471,521,586,609,642,654,773,828,837,873,882 'modelcontextprotocol':383 'modelcontextprotocol/server-brave-search':460,477 'modelcontextprotocol/server-git':344,392,406,763 'modelcontextprotocol/server-sqlite':514,527 'name':294,806,816 'need':756 'new':287,415,494,923 'news':502 'node':575,683,746 'node.js':573,576,675,678 'npm':699,760 'npx':51,132,335,342,386,390,403,458,474,512,524,571,612,672,776,885,891 'npx/python':878 'openai':550 'packag':615,621 'path':517,530 'pkg':893,897 'prompt':850,928 'python':336,520,557,578,580,583,606,638 'python3':579 'queri':297,301,500 'references/mcp_registry.json':967 'remot':120,190,208,215,269,281,643,655,829,874 'resolv':290 'result':213,249,279,387,407,457,486,750 'rf':591,617,623 'rm':589,596,616,622 'rpc':946 'run':388 'schema':932 'scripts/references/assets':957 'scripts/validate_mcp.py':971 'search':88,100,241,244,378,382,428,436,448,451,453,499,814 'secur':593,619 'sent':175 'server':96,174,247,385,455,818 'server-s':173 'servic':805,815 'skill':77,681,731,737,847,955 'skill-dynamic-mcp' 'sourc':125,191,209,270,402,473,523,588,611,644,656,775,830,875,884 'source-valkryhx' 'sse':177 'status':419 'stdio':950 'step':238,258,284,375,393,412,445,461,491,739,752,766 'str':126,135,141,142,152 'success':214,280,408,487,649 'system':670,849 'time':67 'timeout':693,748,764 'today':503 'token':313 'tool':31,68,204,242,265,288,289,296,380,397,416,417,420,449,468,495,496,743,757,770,916 'tools.py':961 'tools/list':943 'toolset':924 'topic-agent-development' 'topic-agent-skills' 'topic-agent-swarm' 'topic-agent-team' 'topic-agentic-ai' 'topic-dynamic-skills' 'topic-google-adk' 'topic-vibe-coding' 'true':565 'url':49,129,184,193,248,630,651,696,705,825,831,870,876 'use':286,389,414,493 'user':803 'uvx':572 'v20.10.0':751 'var':139,363,467,479,543,559,904 'version':303,684,747 'web':45,99,240,243,377,381,447,450,498,813 'xxxx':320,321,322 'xxxxx':237,278,444,485 'xxxxxxxx':319 'xxxxxxxxxxxx':323 'y':343,391,405,459,476,513,526,614,778,892,896 '下一次思考':724 '下一轮思考时即可看到并使用新工具':909 '下载':74 '不会影响其他用户':791 '不再需要背负几百个工具运行':72 '不包含额外的':956 '不在白名单中':597 '不能是字符串':536 '不需要外部脚本或模板文件':963 '中':962 '中添加':851 '为了让':844 '从搜索结果的':506 '会自动调用其内部的工具发现机制':940 '会自动连接并提取工具定义':196 '会话生命周期管理':779 '会话结束后':792 '传入':364 '何时使用':541 '何时使用此':76 '你可以使用':856 '使用指南':162 '使用搜索引擎查找目标':863 '使用新工具':105,907 '使用步骤':860 '使用自定义认证':306 '例如':890 '修改':789 '元工具':28 '先执行':682 '先搜索':862 '先用':735 '全能型':110 '关键点':505 '典型工作流':97 '分析搜索结果':821 '列表':350,535 '利用':912 '功能':109 '加载':689 '加载器':112 '动态':4,853 '动态加载':104 '动态加载的':781 '包下载超时':700 '包管理工具':574 '即时工具化':69 '原因':673,694,714 '原始命令':511 '参数':115,620 '参数传入':905 '参数构造':888 '参数构造技巧':504 '参数注入防护':599 '参数说明':114 '发送':942 '发送给':933 '可以':42 '可以添加':966 '可能是工具描述不够清晰或用户需求表述不明确':727 '名称':328 '后连接':867 '否':143,153 '含非法字符':624 '命令':52,595,879 '命令分隔':603 '命令参数列表':137 '命令拆解规则':510 '命令替换':604 '命令白名单':569 '和':348 '因为':959 '在':723 '在下一次生成':927 '在动态加载前':734 '在运行时动态加载新的':37 '域名并使用正确的':326 '填写':192 '失败':691 '如':82,131,146,158,341,546 '如果不知道启动方式':379 '如果仍未调用':726 '如果是':824 '如果是命令':833 '如果未来需要扩展':965 '如果用户提供了具体文件路径':538 '如果需要':358,899 '如果需要调试模式':566 '字符串命令':507 '它允许':35 '安全机制':567 '安装':91 '完全匹配':636 '实例':788,920 '实现':63 '对比':629,633 '对象被添加到工具列表后':938 '将命令拆解为':346 '将搜索到的命令字符串拆解为列表':889 '将新工具':931 '工具':39,374,809 '工具仅在':783 '工具会自动检测':324 '工具加载器':6 '工具加载成功':217,283,411,490 '工具加载成功但':711 '工具动态挂载该服务':57 '工具完成用户任务':61 '工具来扩展你的能力':859 '已连接到远程服务':662 '帮我启用':370 '常见问题':667 '库的最新版本':230 '建议在':848 '当前会话':784 '必需':117 '必须是':534 '忽略末尾斜杠':631 '成功返回后':721 '我想试用一个叫':804 '我的':231,439 '或':50,92,121,172 '或使用':679 '所有必要的安全规则和逻辑都在代码内部实现':964 '执行':811 '执行步骤':179,338 '执行结果信息字符串':161 '找不到命令':671 '技术原理':910 '技能':75 '拆解为':519 '拆解后':834 '拒绝执行':594 '拒绝示例':582,605 '探索新':799 '探索新工具的功能并完成用户任务':842 '提示用户安装':677 '握手后获取工具列表':952 '搜索发现':46 '支持运行时连接远程':7 '支持远程和本地两种模式':113 '故障排查':666 '文档提到需要设置环境变量':545 '方式提供':178 '无需认证的远程服务':199 '无需重复连接':661 '时会自动看到新工具':725 '时会自动读取更新后的':929 '是':123,127,234,441 '是一个':27 '是否正确':706 '智能去重':626 '替换掉搜索结果中的示例路径':539 '最佳实践':733 '有效':785 '服务':167,203,801 '服务以':170 '服务健康检查脚本':973 '服务列表':970 '服务名称':81 '服务或启动本地':10 '服务时':18 '服务的':183 '服务的连接方式':48 '服务需要通过':334 '本地包':877 '本地启动的进程会被自动清理':793 '本地模式':632,698,707,948 '本地模式专用':144 '本地模式仅允许以下基础命令':570 '本地模式填基础命令':130 '本地模式必需':136 '本地进程启动':331 '某个':94 '查一下':228 '查找连接方式':101 '查文档':85 '核心优势':62 '核心工具':106 '核心逻辑已完全封装在':960 '根据需求即时扩展能力':15 '格式':316 '检查网络连接':703 '概述':23 '模式':70,163,329 '正确使用此':846 '此':954 '每个参数和值都是独立的列表项':537 '没有调用新工具':713 '注意事项':532 '环境变量':145 '环境变量处理':540 '用':83,86,226,434 '用于服务认证':157 '用户提供的key':563 '用户提到某个':79 '用户明确提供了':553 '用户明确要求':90 '用户的每个会话都有独立的':786 '用户要求使用特定功能但当前工具列表中没有对应工具':89 '用户请求':98,200,225,369,433 '由':794 '的':372,437,796,807 '的依赖注入机制':914 '的安装或连接方式':865 '的工具列表更新需要在下一轮对话时生效':716 '直接修改运行中的工具列表':925 '确保':718 '确认':704 '确认环境':685,738 '示例':197,218,365,425,556,637 '禁止参数中包含以下字符':600 '立即使用新加载的':59 '第一次调用':639 '第二次调用相同':650 '等命令在本地启动':337 '等待工具加载成功提示':840 '等待更长时间或提示用户手动预安装包':708 '管理':798 '管道与子进程通信':951 '管道符':601 '类型':116 '系统提示词建议':843 '系统未安装':674 '结合':729 '结构化参数':509 '而无需重启服务或修改配置文件':40 '而是按需':73 '能力扩展':855 '自主扩张能力':34 '自动发现':936 '获取当前':918 '解决':676,702,717 '解释器':581 '触发场景':78 '认证的远程服务':223 '让':13 '识别连接方式':822 '说明':118 '请求获取工具定义':947 '调用':54,186,352 '资源':958 '资源目录说明':953 '赋予':32 '转化为':508 '运行时':577 '运行时工具注入':911 '返回':592,618,648,660 '返回值':160 '进程':12 '进阶用法':728 '远程':165 '远程服务':868 '远程模式':628,695,941 '远程模式专用':154 '远程模式填':128 '连接':93 '连接公开的':201 '连接成功后':908 '连接模式':124 '适用于用户提到不熟悉的':16 '适用场景':168,332 '通用流程模板':802 '通过':44,361,902,921,949 '通过搜索发现连接方式后动态加载':19 '通过搜索获取':181 '通过搜索获取启动命令':340 '重定向':602 '重要提示':780 '重要说明':304 '错误或服务不可用':697 '问题':668,686,709 '防止重复加载同一服务':627 '需要':220,430 '非标准':311 '预定义的常用':968 '预检查环境':732 '首次运行需要下载':701","prices":[{"id":"4050bf41-3440-42d9-bc04-6902e117f1cc","listingId":"cd54ed6b-1a0b-4699-b1bd-f0223a0cbf03","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"valkryhx","category":"google_adk_agent","install_from":"skills.sh"},"createdAt":"2026-05-18T13:22:13.579Z"}],"sources":[{"listingId":"cd54ed6b-1a0b-4699-b1bd-f0223a0cbf03","source":"github","sourceId":"valkryhx/google_adk_agent/dynamic-mcp","sourceUrl":"https://github.com/valkryhx/google_adk_agent/tree/main/skills/dynamic-mcp","isPrimary":false,"firstSeenAt":"2026-05-18T13:22:13.579Z","lastSeenAt":"2026-05-18T19:14:45.335Z"}],"details":{"listingId":"cd54ed6b-1a0b-4699-b1bd-f0223a0cbf03","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"valkryhx","slug":"dynamic-mcp","github":{"repo":"valkryhx/google_adk_agent","stars":6,"topics":["agent-development","agent-skills","agent-swarm","agent-team","agentic-ai","dynamic-skills","google-adk","vibe-coding"],"license":null,"html_url":"https://github.com/valkryhx/google_adk_agent","pushed_at":"2026-04-23T07:34:09Z","description":"a startup but not simple agent demo using  google adk.","skill_md_sha":"c6ee0c8fce03438b0cc6ba14dd373d8bea1a6ae2","skill_md_path":"skills/dynamic-mcp/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/valkryhx/google_adk_agent/tree/main/skills/dynamic-mcp"},"layout":"multi","source":"github","category":"google_adk_agent","frontmatter":{"name":"Dynamic MCP Loader","description":"动态 MCP 工具加载器，支持运行时连接远程 HTTP/SSE MCP 服务或启动本地 MCP 进程，让 Agent 根据需求即时扩展能力。适用于用户提到不熟悉的 MCP 服务时，通过搜索发现连接方式后动态加载。"},"skills_sh_url":"https://skills.sh/valkryhx/google_adk_agent/dynamic-mcp"},"updatedAt":"2026-05-18T19:14:45.335Z"}}