-
Notifications
You must be signed in to change notification settings - Fork 21
/
Copy pathmain.go
129 lines (110 loc) · 4 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package main
import (
"log"
"os/exec"
"context"
mcp_golang "github.com/metoro-io/mcp-golang"
"github.com/metoro-io/mcp-golang/transport/stdio"
)
func main() {
// Start the server process
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 cmd.Process.Kill()
clientTransport := stdio.NewStdioServerTransportWithIO(stdout, stdin)
client := mcp_golang.NewClient(clientTransport)
if _, err := client.Initialize(context.Background()); err != nil {
log.Fatalf("Failed to initialize client: %v", err)
}
// List available tools
tools, err := client.ListTools(context.Background(), nil)
if err != nil {
log.Fatalf("Failed to list tools: %v", err)
}
log.Println("Available Tools:")
for _, tool := range tools.Tools {
desc := ""
if tool.Description != nil {
desc = *tool.Description
}
log.Printf("Tool: %s. Description: %s", tool.Name, desc)
}
// Example of calling the hello tool
helloArgs := map[string]interface{}{
"name": "World",
}
log.Println("\nCalling hello tool:")
helloResponse, err := client.CallTool(context.Background(), "hello", helloArgs)
if err != nil {
log.Printf("Failed to call hello tool: %v", err)
} else if helloResponse != nil && len(helloResponse.Content) > 0 && helloResponse.Content[0].TextContent != nil {
log.Printf("Hello response: %s", helloResponse.Content[0].TextContent.Text)
}
// Example of calling the calculate tool
calcArgs := map[string]interface{}{
"operation": "add",
"a": 10,
"b": 5,
}
log.Println("\nCalling calculate tool:")
calcResponse, err := client.CallTool(context.Background(), "calculate", calcArgs)
if err != nil {
log.Printf("Failed to call calculate tool: %v", err)
} else if calcResponse != nil && len(calcResponse.Content) > 0 && calcResponse.Content[0].TextContent != nil {
log.Printf("Calculate response: %s", calcResponse.Content[0].TextContent.Text)
}
// Example of calling the time tool
timeArgs := map[string]interface{}{
"format": "2006-01-02 15:04:05",
}
log.Println("\nCalling time tool:")
timeResponse, err := client.CallTool(context.Background(), "time", timeArgs)
if err != nil {
log.Printf("Failed to call time tool: %v", err)
} else if timeResponse != nil && len(timeResponse.Content) > 0 && timeResponse.Content[0].TextContent != nil {
log.Printf("Time response: %s", timeResponse.Content[0].TextContent.Text)
}
// List available prompts
prompts, err := client.ListPrompts(context.Background(), nil)
if err != nil {
log.Printf("Failed to list prompts: %v", err)
} else {
log.Println("\nAvailable Prompts:")
for _, prompt := range prompts.Prompts {
desc := ""
if prompt.Description != nil {
desc = *prompt.Description
}
log.Printf("Prompt: %s. Description: %s", prompt.Name, desc)
}
// Example of using the uppercase prompt
promptArgs := map[string]interface{}{
"input": "Hello, Model Context Protocol!",
}
log.Printf("\nCalling uppercase prompt:")
upperResponse, err := client.GetPrompt(context.Background(), "uppercase", promptArgs)
if err != nil {
log.Printf("Failed to get uppercase prompt: %v", err)
} else if upperResponse != nil && len(upperResponse.Messages) > 0 && upperResponse.Messages[0].Content != nil {
log.Printf("Uppercase response: %s", upperResponse.Messages[0].Content.TextContent.Text)
}
// Example of using the reverse prompt
log.Printf("\nCalling reverse prompt:")
reverseResponse, err := client.GetPrompt(context.Background(), "reverse", promptArgs)
if err != nil {
log.Printf("Failed to get reverse prompt: %v", err)
} else if reverseResponse != nil && len(reverseResponse.Messages) > 0 && reverseResponse.Messages[0].Content != nil {
log.Printf("Reverse response: %s", reverseResponse.Messages[0].Content.TextContent.Text)
}
}
}