You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.4 KiB
62 lines
1.4 KiB
package main
|
|
|
|
import (
|
|
"context"
|
|
mcp "github.com/metoro-io/mcp-golang"
|
|
"github.com/metoro-io/mcp-golang/transport/stdio"
|
|
"log"
|
|
"os"
|
|
"os/exec"
|
|
)
|
|
|
|
// CalculateArgs Define type-safe arguments
|
|
type CalculateArgs struct {
|
|
Operation string `json:"operation"`
|
|
A int `json:"a"`
|
|
B int `json:"b"`
|
|
}
|
|
|
|
func main() {
|
|
cmd := exec.Command("go", "run", "./server/main.go")
|
|
stdin, err := cmd.StdinPipe()
|
|
if err != nil {
|
|
log.Fatalf("Failed to get stdin pipe: %v", err)
|
|
}
|
|
stdout, err := cmd.StdoutPipe()
|
|
if err != nil {
|
|
log.Fatalf("Failed to get stdout pipe: %v", err)
|
|
}
|
|
|
|
if err := cmd.Start(); err != nil {
|
|
log.Fatalf("Failed to start server: %v", err)
|
|
}
|
|
defer func(Process *os.Process) {
|
|
err := Process.Kill()
|
|
if err != nil {
|
|
log.Fatalf("Failed to kill server: %v", err)
|
|
}
|
|
}(cmd.Process)
|
|
// Create and initialize client
|
|
transport := stdio.NewStdioServerTransportWithIO(stdout, stdin)
|
|
client := mcp.NewClient(transport)
|
|
|
|
if _, err := client.Initialize(context.Background()); err != nil {
|
|
log.Fatalf("Failed to initialize: %v", err)
|
|
}
|
|
|
|
// Call a tool with typed arguments
|
|
args := CalculateArgs{
|
|
Operation: "add",
|
|
A: 10,
|
|
B: 5,
|
|
}
|
|
|
|
response, err := client.CallTool(context.Background(), "calculate", args)
|
|
if err != nil {
|
|
log.Fatalf("Failed to call tool: %v", err)
|
|
}
|
|
|
|
if response != nil && len(response.Content) > 0 {
|
|
log.Printf("Result: %s", response.Content[0].TextContent.Text)
|
|
}
|
|
}
|
|
|