Files
membank/aio-mcp/internal/tools/system/echo.go
张威33321 1a6ba86f04 0908
2026-09-08 20:36:25 +08:00

41 lines
1.2 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 system
import (
"context"
"fmt"
"strings"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
// echoArgs 是 echo 工具的输入参数。
// json tag 决定参数名jsonschema tag 提供描述供客户端LLM理解参数。
type echoArgs struct {
Message string `json:"message" jsonschema:"要回显的文本,必填"`
Times int `json:"times,omitempty" jsonschema:"回显次数,默认 1"`
}
// registerEcho 注册 echo 工具:演示带参数的工具写法。
func registerEcho(s *mcp.Server) {
mcp.AddTool(s, &mcp.Tool{
Name: "echo",
Description: "把传入的文本原样回显指定次数,用于演示参数传递与工具调用。",
}, func(_ context.Context, _ *mcp.CallToolRequest, args echoArgs) (*mcp.CallToolResult, any, error) {
times := args.Times
if times <= 0 {
times = 1
}
// 用换行分隔,避免重复文本粘连。
line := strings.TrimRight(args.Message, "\n")
lines := make([]string, times)
for i := range lines {
lines[i] = line
}
return &mcp.CallToolResult{
Content: []mcp.Content{
&mcp.TextContent{Text: fmt.Sprintf("%s\n(共 %d 次)", strings.Join(lines, "\n"), times)},
},
}, nil, nil
})
}