Skip to content

扩展工具

Foggy MCP 支持通过扩展模块添加额外工具。这些工具需要额外的依赖和配置才能启用。

Data Viewer

Data Viewer 是一个数据浏览器扩展,提供 dataset.open_in_viewer 工具,用于生成可分享的浏览器链接,支持交互式浏览大数据集。

启用条件

Data Viewer 需要以下依赖:

  1. MongoDB - 用于缓存查询上下文
  2. foggy-data-viewer 模块 - 包含在 foggy-mcp-launcher

配置

确保 MongoDB 已启动并配置:

yaml
spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/foggy_test
      auto-index-creation: true

# 可选:禁用 Data Viewer
foggy:
  data-viewer:
    enabled: true  # 默认 true
    base-url: http://localhost:7108/data-viewer

启动 MongoDB(使用 demo docker):

bash
cd foggy-dataset-demo/docker
docker-compose up -d mongo

验证

启动服务后,调用 tools/list 检查工具是否可用:

bash
curl -X POST http://localhost:7108/mcp/analyst/rpc \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":"1","method":"tools/list","params":{}}'

如果 dataset.open_in_viewer 出现在列表中,说明扩展已启用。


dataset.open_in_viewer

生成可分享的浏览器链接,用于交互式浏览大数据集。

使用场景

适用:

  • 明细数据查询,预期返回大量行(500+)
  • 用户要求"全部"、"列表"、"导出"类查询
  • 需要交互式探索(过滤、排序、分页)

不适用(改用 dataset.query_model):

  • 带 groupBy 的聚合查询(结果集小)
  • 明确限制 ≤100 行的查询
  • AI 需要直接分析数据内容

参数

参数类型必需说明
modelstring查询模型名称
payloadobject查询参数(与 query_model 格式一致)
payload.columnsarray要显示的列列表
payload.slicearray过滤条件(至少一个)
payload.orderByarray排序配置
payload.groupByarray分组/聚合字段
titlestring数据视图的标题

重要payload.slice 必须提供至少一个过滤条件,防止无界查询。

调用示例

json
{
  "jsonrpc": "2.0",
  "id": "1",
  "method": "tools/call",
  "params": {
    "name": "dataset.open_in_viewer",
    "arguments": {
      "model": "FactOrderQueryModel",
      "payload": {
        "columns": ["orderNo", "customer$caption", "orderDate$caption", "totalAmount"],
        "slice": [
          {"field": "orderDate$id", "op": "[)", "value": ["20250101", "20250131"]}
        ],
        "orderBy": [
          {"field": "orderDate$id", "dir": "DESC"}
        ]
      },
      "title": "2025年1月订单"
    }
  }
}

返回值

json
{
  "viewerUrl": "http://localhost:7108/data-viewer/view/abc123",
  "queryId": "abc123",
  "expiresAt": "2025-01-06T10:00:00",
  "estimatedRowCount": 1500,
  "message": "Data viewer link created. The link expires at 2025-01-06T10:00:00. Users can browse, filter, sort, and export the data interactively."
}
字段说明
viewerUrl浏览器访问链接
queryId查询缓存 ID
expiresAt链接过期时间
estimatedRowCount预估行数(可选)

权限

端点可用
/mcp/admin/rpc
/mcp/analyst/rpc
/mcp/business/rpc

与 query_model 的区别

特性query_modelopen_in_viewer
返回数据直接返回查询结果返回浏览器链接
适合数据量小(≤100行)大(500+行)
AI 分析✅ AI 可直接分析❌ 需用户在浏览器查看
交互能力❌ 静态结果✅ 过滤/排序/分页/导出
过滤条件可选必需(至少一个)

典型工作流

用户: "导出上个月的所有订单"

AI 判断:
1. "所有订单" → 数据量可能很大
2. 用户要求"导出" → 需要交互式浏览
3. 选择 open_in_viewer 而非 query_model

AI 调用 open_in_viewer:
→ 返回浏览器链接
→ 用户可在浏览器中查看、筛选、导出

开发自定义扩展

如需开发自定义 MCP 工具扩展,请参考 foggy-data-viewer 模块的实现:

1. 创建工具类

实现 McpTool 接口(来自 foggy-mcp-spi):

java
public class MyCustomTool implements McpTool {

    @Override
    public String getName() {
        return "my.custom_tool";
    }

    @Override
    public Set<ToolCategory> getCategories() {
        return Set.of(ToolCategory.QUERY);
    }

    @Override
    public Object execute(Map<String, Object> arguments,
                          ToolExecutionContext context) {
        // 工具逻辑
        return Map.of("success", true);
    }
}

2. 创建自动配置类

使用 @AutoConfiguration 注册工具 Bean:

java
@AutoConfiguration
@ConditionalOnProperty(prefix = "my.extension", name = "enabled",
                       havingValue = "true", matchIfMissing = true)
public class MyExtensionAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public MyCustomTool myCustomTool() {
        return new MyCustomTool();
    }
}

3. 注册自动配置

src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 中添加:

com.example.MyExtensionAutoConfiguration

4. 添加依赖

扩展模块需要依赖 foggy-mcp-spi

xml
<dependency>
    <groupId>com.foggysource</groupId>
    <artifactId>foggy-mcp-spi</artifactId>
    <version>${foggy.version}</version>
</dependency>

工具将被 McpToolDispatcher 自动发现并注册。

下一步