Documentation
¶
Overview ¶
Package mcp 是 Flux 的 MCP(Model Context Protocol)接入层。
主线二 阶段 A(consume):Flux 作为 MCP client,连上 MCP server,把它的工具 接进 flux/tool.Registry,让 planner 像调本地工具一样调远端工具。
范围(M1 阶段,故意收窄):
- 仅 stdio transport(子进程 + 换行分隔 JSON-RPC);HTTP/SSE 只预留 Transport 接口位。
- 仅 tools 切面:initialize / tools/list / tools/call。 不做 resources / prompts / sampling / roots / progress / cancellation。
Index ¶
- func RegisterAll(ctx context.Context, client *Client, reg *tool.Registry, prefix string) ([]string, error)
- type CallToolResult
- type Client
- type ContentBlock
- type RPCError
- type Server
- type ToolAdapter
- func (a *ToolAdapter) Definition() tool.ToolDefinition
- func (a *ToolAdapter) Description() string
- func (a *ToolAdapter) Execute(ctx context.Context, input map[string]any, _ tool.ToolEmitter) (*tool.Result, error)
- func (a *ToolAdapter) InputSchema() tool.DataSchema
- func (a *ToolAdapter) Mode() tool.ExecutionMode
- func (a *ToolAdapter) Name() string
- func (a *ToolAdapter) OutputSchema() tool.DataSchema
- type ToolInfo
- type Transport
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type CallToolResult ¶
type CallToolResult struct {
Content []ContentBlock `json:"content"`
IsError bool `json:"isError"`
}
CallToolResult 是 tools/call 的返回。
func (*CallToolResult) Text ¶
func (r *CallToolResult) Text() string
Text 把所有 text 块拼起来 —— 适配 tool.Result.Data 时用。
type Client ¶
type Client struct {
ServerName string
ServerVersion string
ProtocolVersion string
// contains filtered or unexported fields
}
Client 是一个 MCP server 的会话(tools 切面)。
func NewStdioClient ¶
NewStdioClient 启动一个 stdio MCP server 子进程并完成 initialize 握手。
c, err := mcp.NewStdioClient(ctx, "npx",
[]string{"-y", "@modelcontextprotocol/server-filesystem", dir}, nil)
type ContentBlock ¶
ContentBlock:MCP 的内容块(text/image/resource...)。M1 只重点用 text; 其余类型保留 Raw,等主线二 C 阶段做完整 content 映射(诚实标注的有损点)。
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server 把一个 flux/tool.Registry 暴露成 MCP server —— stage A(consume) 的对称面。 让 Flux 的工具能被 Claude Code / Codex 等 MCP 客户端调用。
范围同 consume:仅 stdio、仅 tools 切面(initialize / tools/list / tools/call)。 请求串行处理(一个 Execute 跑完再读下一条)—— M1 够用,不引入并发。
type ToolAdapter ¶
type ToolAdapter struct {
// contains filtered or unexported fields
}
ToolAdapter 把一个 MCP 工具包装成 flux/tool.Tool,使其能注册进 tool.Registry, 让 planner 像调本地工具一样调它。
名字双轨:name 是注册/展示给 LLM 的名字(可带前缀防撞),serverName 是调 server 用的原名。
func (*ToolAdapter) Definition ¶
func (a *ToolAdapter) Definition() tool.ToolDefinition
Definition 直供 MCP 原生定义(JSON Schema 原样)。这是阶段 C 把旧 RawInputSchema 旁路 转正后的正式出口:DefinitionOf 见到 DefinedTool 即直接采用,不走 DataSchema 合成。
func (*ToolAdapter) Description ¶
func (a *ToolAdapter) Description() string
func (*ToolAdapter) Execute ¶
func (a *ToolAdapter) Execute(ctx context.Context, input map[string]any, _ tool.ToolEmitter) (*tool.Result, error)
Execute 转译到 MCP tools/call。
关键语义(与本地 compile 工具一致):MCP 工具内部错误(CallToolResult.IsError) 是给 planner 看的**反馈**,不是 run 终结错误——所以 Success 仍为 true,把 content+isError 放进 Data。只有传输/协议层失败才返回 Go error(真基础设施故障)。
TODO(主线二 C):MCP content 是 text/image/resource 块数组,这里压成 {content:text,isError} 是有损的;多模态/资源块需要在 C 阶段做完整 content 映射。
func (*ToolAdapter) InputSchema ¶
func (a *ToolAdapter) InputSchema() tool.DataSchema
InputSchema 把 MCP 的 JSON Schema 有损压成 DataSchema(仅为满足 tool.Tool 接口 / 兼容仍读 DataSchema 的旧消费者)。需要无损定义的消费者请用 tool.DefinitionOf。
func (*ToolAdapter) Mode ¶
func (a *ToolAdapter) Mode() tool.ExecutionMode
func (*ToolAdapter) Name ¶
func (a *ToolAdapter) Name() string
func (*ToolAdapter) OutputSchema ¶
func (a *ToolAdapter) OutputSchema() tool.DataSchema
OutputSchema:MCP tools/list 不带 output schema,返回空。