tools

package
v0.4.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 25, 2026 License: Apache-2.0 Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AutoBridge

func AutoBridge(
	server *mcp.Server,
	connFn GRPCConnFunc,
	httpClient *http.Client,
	httpBaseURL string,
	gatewayCfg *serviceconfig.Service,
	swaggerCfg *openapiconfig.OpenAPIConfig,
	assets fs.FS,
	swaggerAssetName string,
	allowedTags []string,
	logger *logrus.Entry,
) error

AutoBridge 将已注册的 gRPC 方法自动转换为 MCP Tools。

工作流程:

  1. 构建 selector -> swagger Operation 映射表(用于提取 description / tags)
  2. 遍历 gatewayCfg.Http.GetRules(),对每个 HttpRule: - 解析 selector 提取 serviceName / methodName - 转换为 snake_case 命名 - 处理主绑定 + AdditionalBindings(每个 binding 独立 tool + 后缀) - 从 path template 提取 path 参数构建 input schema - 通过 server.AddTool 注册
  3. 每个 Tool 的 handler 将请求转发到 httpBaseURL + path(替换 path 参数), 并通过 httpClient.Do 发送实际 HTTP 请求。

nil 保护:

  • server == nil: 返回 nil
  • gatewayCfg == nil: 返回 nil(无规则可遍历)
  • swaggerCfg == nil: 仍注册 tool,但 description 为空
  • httpClient == nil: 使用 http.DefaultClient 兜底

AutoBridge 永远不会因配置缺失而 panic;遇到无法识别的规则时记录警告并跳过。

func RegisterBuiltinResources

func RegisterBuiltinResources(server *mcp.Server, cfg BuiltinResourcesConfig)

RegisterBuiltinResources 注册框架内置 Resources:version + openapi-spec(microservice[/admin])。

这些 resource 镜像已公开的 HTTP 端点(/version、/openapi-spec),不引入新安全面 (与被移除的 get_config 内部运行配置暴露本质不同,见 ADR-009)。

nil/缺失保护:

  • server == nil:直接返回。
  • VersionText 为空仍注册 version resource(返回空文本),保持资源可发现。
  • 微服务 swagger 资产缺失:跳过 microservice resource。
  • AdminEnabled=false 或 admin 资产缺失:跳过 admin resource。

幂等:AddResource 对同 URI 为覆盖语义,可安全重复调用。

func RegisterGettingStartedPrompt

func RegisterGettingStartedPrompt(server *mcp.Server, swaggerFS fs.FS, swaggerName string)

RegisterGettingStartedPrompt 注册框架唯一内置 Prompt:getting_started。

设计要点(见 Phase 9 / ADR-010):

  • 服务名取自 microservice swagger 的 info.title(如 oneops-netdev-v1),不使用 "grpc-kit" 字样作服务标识。
  • prompt 文本不含 "grpc-kit":不硬编码 grpc-kit:// URI,改让 LLM 用 resources/list / tools/list 协议发现、按 resource Name 取用。
  • 明确 openapi-* 是 REST 开发者文档,AI 经 tools 调用、勿直接打 REST 端点。

swaggerFS/swaggerName 用于读取 info.title;读取失败时开头文案退化为「你已连接到本服务的 MCP 端点」。 server 为 nil 时直接返回。幂等:AddPrompt 对同名 prompt 为覆盖语义。

Types

type BuiltinResourcesConfig

type BuiltinResourcesConfig struct {
	// VersionText 是 /version 端点返回的版本 JSON(vars.GetVersion().String())。
	VersionText string

	// MicroserviceSwaggerFS / MicroserviceSwaggerName:微服务 swagger 资产。
	// 来自 adminServer.GetMicroserviceGatewaySwaggerJSON();资产位于 openapi/<name>.swagger.json。
	// 二者为空时跳过 grpc-kit://openapi-spec/microservice 注册。
	MicroserviceSwaggerFS   fs.FS
	MicroserviceSwaggerName string

	// AdminEnabled 控制是否注册 grpc-kit://openapi-spec/admin。
	// 对应 c.Services.hasEnableIntegrationAdminServer()。
	AdminEnabled bool

	// AdminSwaggerFS 是框架内置 admin 服务的 swagger 资产(adminv1.Assets)。
	// 仅当 AdminEnabled=true 时使用;资产位于 openapi/admin.swagger.json。
	AdminSwaggerFS fs.FS
}

BuiltinResourcesConfig 汇总内置 Resources 注册所需的输入。

各字段由 pkg/cfg 调用方注入,避免 pkg/mcp/tools 反向依赖 pkg/vars / pkg/admin。

type GRPCConnFunc

type GRPCConnFunc func() (*grpc.ClientConn, error)

GRPCConnFunc 返回本地 gRPC 连接,供 AutoBridge 等需要直连 gRPC 的场景使用。 连接应由调用方惰性创建并缓存。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL