/** * Three-tier lazy tool discovery (Phase 1 of unity-mcp-server tool-system migration). * * 对标 unity-mcp-server/src/tool-tiers.js:284-451 的 catalogTool(2026-08-10 深挖报告)。 * godot-mcp-enhanced 已有 merged tool 架构(40 工具 = 228 actions)和 advanced-proxy, * 本模块只服务 godot_list_dynamic_routes 的三级 drill-down,不改动 tools/list 暴露。 * * 三级协议(对齐 unity): * Level 1 无参 → category 计数(summary) * Level 2a search=kw → 模糊匹配 + 排序,上限 20(不带 schema) * Level 2b category=N → 该类工具清单 + brief + 参数名(lean 视图) * Level 3 tool=name → 单工具完整 schema * * includeSchemas=true 配合 category 可一次性返回完整 schema(单次往返场景)。 * * 本模块是纯函数集合,无副作用,便于单测。调用方(advanced-proxy.ts)负责接入。 */ import type { Tool } from '@modelcontextprotocol/server'; /** Discovery 请求参数(对齐 unity catalogTool,字段名本土化)。 */ export interface DiscoveryParams { /** 关键词,空格分隔,全部命中才匹配;名字命中排名优先。 */ search?: string; /** 类别名,返回该类工具清单 + brief + 参数名(lean)。 */ category?: string; /** 工具名,返回单个完整 schema。优先级最高。 */ tool?: string; /** 配合 category,一次性返回完整 schema(体积大,慎用)。 */ includeSchemas?: boolean; } /** * 从工具名提取 category,对齐 unity tool-tiers.js:226-232 的按首段归类。 * * 规则: * - 去掉 godot_ 前缀后的第一段下划线分隔 = category * - 无下划线的(如 merged tool: scene/nav/script)→ 'core' * * 示例: * godot_terrain_raise_lower → 'terrain' * scene → 'core' * godot_custom_thing → 'custom' */ export declare function categoryOf(toolName: string): string; /** * Level 1:无参 → category 计数。 * 对齐 unity tool-tiers.js:441-450,返回 summary(实测 < 2KB)。 */ export declare function buildSummary(staticTools: Tool[], dynamicTools: Tool[]): { totalTools: number; totalDynamic: number; categories: Record; hint: string; }; /** searchTools 的单条结果。 */ export interface SearchResultEntry { name: string; category: string; brief?: string; dynamic?: boolean; } /** * Level 2a:search=keywords → 模糊匹配 + 排序,上限 20(不带 schema)。 * 对齐 unity tool-tiers.js:363-400。 * * 规则: * - tokens(空格分隔)全部命中(name+category+description 拼接的 blob)才匹配 * - 名字命中所有 tokens → rank=0(优先);否则 rank=1 * - 按 rank 升序、name 字母序排序,取前 SEARCH_RESULTS_LIMIT(20)条 * - 可选 opts.category 限定类别 */ export declare function searchTools(query: string, tools: Tool[], opts?: { category?: string; dynamicNames?: Set; limit?: number; }): { totalMatches: number; results: SearchResultEntry[]; }; /** * Level 2b:category=name → 该类工具清单 + brief + 参数名(lean 视图)。 * 对齐 unity tool-tiers.js:402-438(默认 lean,< 8KB)。 * * includeSchemas=true 时返回完整 schema(体积大,单次往返场景)。 * category 不存在时返回 {error}。 */ export declare function listCategory(category: string, tools: Tool[], includeSchemas: boolean): unknown; /** * Level 3:tool=name → 单工具完整 schema。 * 对齐 unity tool-tiers.js:329-360。 * 找不到时返回 null(调用方负责附加 did-you-mean 建议)。 */ export declare function getToolSchema(toolName: string, tools: Tool[]): unknown;