OpenAPI Tool:将 REST API 动态生成 Agent 可调用的 Tool

很多内部服务有 REST API,但没有 MCP 接口。OpenAPI Tool 从 OpenAPI spec 动态生成 Tool——只要 API 有文档,就能接入 Agent。

使用场景

  • 内部 REST API,不支持 MCP
  • 第三方 REST API,有 OpenAPI spec
  • 需要快速把一个 API 接入 Agent,不想手写 Tool

快速开始

1. 准备 OpenAPI spec

假设有一个天气 API,OpenAPI spec 大概长这样:

openapi: 3.0.0
info:
  title: Weather API
  version: 1.0.0
paths:
  /weather:
    get:
      operationId: getWeather
      parameters:
        - name: city
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  temp:
                    type: number
                  condition:
                    type: string

保存为 weather-api.yaml

2. 生成 Tool

import "google.golang.org/adk/tool/openapi"

openapiTool, err := openapi.NewOpenAPITool(ctx,
    openapi.WithSpecFile("weather-api.yaml"),
)

3. 注册到 Agent

agent, _ := llmagent.New(llmagent.Config{
    Name:        "weather_assistant",
    Model:       model,
    Instruction: "你是天气助手,帮我查询天气信息。",
    Tools: []tool.Tool{
        openapiTool,  // 暴露 getWeather Tool
    },
})

从 URL 加载 spec

除了本地文件,还可以从 URL 加载:

openapiTool, err := openapi.NewOpenAPITool(ctx,
    openapi.WithSpecURL("https://api.example.com/openapi.yaml"),
)

认证配置

如果 API 需要认证:

openapiTool, err := openapi.NewOpenAPITool(ctx,
    openapi.WithSpecFile("internal-api.yaml"),
    openapi.WithAuth(openapi.APIKeyAuth("X-API-Key", "your-key")),
)

支持的方式:

  • API Key(header 或 query)
  • Bearer Token
  • Basic Auth

常见问题

Q:spec 太复杂,生成 Tool 报错了 A:简化 spec,只暴露必要的端点。OpenAPI Tool 对部分 spec 可能支持不完整。

Q:API 需要 POST body,但 Tool 调用失败 A:检查 spec 里 content/application/jsonschema 定义是否完整。


下一步

最后来看 Tool Confirmation——当 Agent 要做有风险的操作(删除数据、转账)时,如何让用户确认后再执行。

MCP Server 接入实战 | Tool Confirmation 与安全认证 →


想跟着学更多 Go ADK 实战?关注「全栈之巅-梦兽编程」公众号,每周更新 Go / AI 编程实战干货。