Files
contracts/mcp.go
T
what 8b122816a1 重构: 各类型 Controller 接口精简,配合 framework-v2 internal/handler 收拢公共实现
app.go/condflow.go/cron.go/event_stream.go/executor.go/gobridge.go/grpc.go/job.go/mcp.go/mqtt.go/res_virtual_table.go/ws.go/controller.go/support/service.go 精简掉搬到 framework-v2 internal/handler 里的公共默认实现,只保留接口定义。
2026-07-22 09:14:57 +08:00

77 lines
2.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package contracts
import (
"context"
"git.fsdpf.net/go/req"
"github.com/mark3labs/mcp-go/mcp"
"github.com/mark3labs/mcp-go/server"
openai "github.com/sashabaranov/go-openai"
)
// InjectOption 是 InjectTools 的可选配置项。
type InjectOption func(*InjectOptions)
type InjectOptions struct {
Codes []string
OnCall func(openai.ToolCall) // 工具执行前回调
OnResult func(openai.ToolCall, string) // 工具执行后回调
}
// WithFilter 只注入指定 apiCode 的 MCP server 工具;不传则注入全部已注册的。
func WithFilter(codes ...string) InjectOption {
return func(o *InjectOptions) { o.Codes = codes }
}
// WithOnCall 设置工具执行前回调,tc 为完整的 ToolCall 对象。
func WithOnCall(fn func(tc openai.ToolCall)) InjectOption {
return func(o *InjectOptions) { o.OnCall = fn }
}
// WithOnResult 设置工具执行后回调,tc 为 ToolCall 对象,result 为返回文本。
func WithOnResult(fn func(tc openai.ToolCall, result string)) InjectOption {
return func(o *InjectOptions) { o.OnResult = fn }
}
type MCPService interface {
Serve(req.Route) MCPServer
Shutdown() error
// InjectTools 将工具列表注入 ChatCompletionRequest.Tools,同时返回 Instructions 和工具调用执行器。
// ctx 须携带 req.UserWithToolFilter 据此过滤工具)。
// 通过 WithOnCall / WithOnResult 设置实时进度回调,WithFilter 限定注入范围。
InjectTools(ctx context.Context, impl mcp.Implementation, req *openai.ChatCompletionRequest, opts ...InjectOption) (
instructions string,
handleToolCalls func(toolCalls []openai.ToolCall) []openai.ChatCompletionMessage,
err error,
)
}
type MCPServer interface {
Server
Shutdown() error
}
type MCPTool interface {
Controller
// 获取 MCPServer
MCP() *server.MCPServer
// Sent 在工具执行期间通过 notifications/progress 向客户端推送进度消息。
// 客户端请求须携带 _meta.progressToken,否则本方法为空操作。
Sent(ctx context.Context, data string) error
// Execute 处理请求并返回响应数据,返回值支持以下类型:
// - mcp.Content / []mcp.Content 直接作为工具内容返回
// - *mcp.CallToolResult 完整结果,直接透传
// - contracts.Errno / *contracts.Errno 业务错误码,转为工具错误
// - contracts.Err / *contracts.Err 同上
// - string 文本结果
// - []byte 文本结果(原始字节)
// - error 工具错误
// - nil 空结果
// - 其他任意类型 JSON 序列化后返回,同时填充 StructuredContent
Execute(context.Context, req.GlobalParams) any
}
type MCPResource interface {
Controller
}