虚拟MCP组合演示
这个演示展示了 虚拟MCP服务器的复合工具功能 -跨多个后端MCP服务器编排多步工作流的能力。
你会看到什么
🎯 演示用例
- 多源文档聚合器
- 并行从3个不同来源获取文档 - 将结果聚合到具有元数据的结构化报告中 - 演示:并行执行、输出格式模板、工作流计时
- GitHub存储库健康检查
- 通过获取信息、问题和最近的活动来分析存储库 - 显示存储库统计信息和运行状况指标 - 演示:具有依赖关系的顺序步骤、参数默认值、GitHub MCP集成
- 集装箱图像调查
- 查询OCI注册表以获取映像详细信息、清单和配置 - 提供全面的图像分析 - 演示:OCI注册表MCP、嵌套数据结构、实际调试用例
演示的主要功能
- ✅ 复合工具:由虚拟MCP编排的多步骤工作流
- ✅ 结构化输出模式:具有JSON模式定义的类型安全输出
- ✅ 输出聚合:从工作流步骤构建基于模板的值
- ✅ 并行执行:独立步骤同时运行以提高性能
- ✅ 顺序依赖关系:取决于先前结果的步骤
- ✅ 参数默认:自动应用JSON架构默认值
- ✅ 工作流元数据:时间、步数、执行细节
- ✅ 多后端编排:无缝协调fetch+GitHub+OCI注册表后端
快速开始
# 1. Setup (creates venv and installs dependencies)
./setup.sh
# 2. Build Virtual MCP (from project root)
cd ../.. && task build-vmcp && cd demos/vmcp-composition
# 3. Start backend servers
./start-backends.sh start
# 4. Run the demo
./run-demo.sh先决条件
1.设置Python环境
运行安装脚本以创建虚拟环境并安装依赖项:
./setup.sh这创建了一个 .venv 目录包含:
rich-漂亮的终端输出httpx-用于MCP调用的HTTP客户端pyyaml-YAML配置解析
2.构建虚拟MCP
从项目根:
task build-vmcp这创造了 ./bin/vmcp 二元的。
3.启动后端MCP服务器
演示需要这些后端在 default 集团。
选项A:使用辅助脚本 (推荐):
./start-backends.sh start选项B:手动启动:
# Fetch MCP (HTTP fetching)
thv run --name fetch --group default --proxy-port 8090 fetch &
# GitHub MCP (GitHub API operations)
thv run --name github --group default --proxy-port 8091 github &
# OCI Registry MCP (Container registry queries)
thv run --name oci-registry --group default --proxy-port 8092 oci-registry &检查状态:
./start-backends.sh status
# or
thv list --group default运行演示
激活虚拟环境并运行:
source .venv/bin/activate
python3 demo.py演示将:
- ✨ 以丰富的格式显示漂亮的介绍
- 📋 显示后端服务器和配置
- ✅ 验证复合工具定义
- 🚀 启动虚拟MCP服务器
- 🎯 执行三个复合工具演示:
- 多源文档聚合器 - GitHub存储库健康检查 - 集装箱图像调查
- 📊 使用语法高亮显示和表格显示结果
- 🎉 显示摘要和指标
演示模式
交互模式 (默认):
python3 demo.py在步骤之间暂停,以便进行解释和演示。
自动模式 (用于CI/测试):
AUTO_CONTINUE=1 python3 demo.py连续运行,无停顿。
快速模式:
DEMO_SPEED=fast python3 demo.py加速动画(与AUTO_CONINUE结合使用可实现最快的执行速度)。
配置
vmcp-config.yaml
配置文件定义了3个具有结构化输出模式的组合工具。
参数格式:
parameters:
param_name:
type: "string" # Type: string, integer, array, object
description: "..." # Optional
default: "value" # Optional default输出模式格式(PR#2677中的新格式):
output:
properties:
property_name:
type: "string" # Type: string, integer, boolean, number, object, array
description: "..." # Property description
value: "{{.template}}" # Go template expression
default: "value" # Optional default value
properties: {} # For nested objects
required: ["property_name"] # Optional required fields文件夹:
- vmcp-config.yaml:具有复合工具定义的虚拟MCP服务器配置
- demo.py:具有丰富库格式的交互式演示脚本
- start-backends.sh:管理后端MCP服务器的辅助脚本
建筑
┌─────────────────────────────────────────────────────┐
│ MCP Client (Demo Script) │
└─────────────────┬───────────────────────────────────┘
│
│ HTTP/Streamable
▼
┌─────────────────────────────────────────────────────┐
│ Virtual MCP Server (vmcp) │
│ • Discovers backends in 'default' group │
│ • Aggregates tools with prefix resolution │
│ • Executes composite tool workflows │
│ • Applies output_format templates │
└──────┬──────────┬──────────────┬────────────────────┘
│ │ │
│ │ │ Routes to backends
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌─────────────┐
│ fetch │ │ github │ │ oci-registry│
│ MCP │ │ MCP │ │ MCP │
└──────────┘ └──────────┘ └─────────────┘是什么让这与众不同?
传统的MCP客户端连接到单独的服务器。虚拟MCP:
- 聚合体 将多个后端集成到一个端点中
- 编排 跨后端的多步骤工作流
- 格式 使用自定义模板输出
- 管理 并行和顺序执行
- 提供 工作流元数据和时间
这使得在单个工具调用中能够进行对代理友好的复合操作,如“调查此容器映像”(需要OCI查询+文档获取)。
