rclon commited on
Commit
4cf54d8
·
verified ·
1 Parent(s): 0127f1d

Update main.go

Browse files
Files changed (1) hide show
  1. main.go +77 -116
main.go CHANGED
@@ -1,116 +1,77 @@
1
- package main
2
-
3
- import (
4
- "context"
5
- "encoding/json"
6
- "flag"
7
- "fmt"
8
- "log"
9
- "net/http"
10
- "net/url"
11
- "strconv"
12
-
13
- "github.com/mark3labs/mcp-go/mcp"
14
- "github.com/mark3labs/mcp-go/server"
15
- )
16
-
17
- func webSearchHandler(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
18
- query := request.Params.Arguments["query"].(string)
19
- fmt.Println("query:", query)
20
- client := &http.Client{}
21
-
22
- //https://www.baidu.com/s?wd=ssstn=json&rn=10
23
- u, err := url.Parse("https://www.baidu.com/s")
24
- v := url.Values{}
25
- v.Add("wd", query)
26
- v.Add("tn", "json")
27
- v.Add("rn", "10")
28
- u.RawQuery = v.Encode()
29
-
30
- fmt.Println(v.Encode())
31
-
32
- req, _ := http.NewRequest("GET", u.String(), nil)
33
- req.Header.Set("Accept", "text/html")
34
- req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36")
35
-
36
- resp, err := client.Do(req)
37
- if err != nil {
38
- return nil, err
39
- }
40
- defer resp.Body.Close()
41
- fmt.Println("resp.StatusCode:", resp.StatusCode)
42
- type Entry struct {
43
- Title string
44
- Url string
45
- Abs string
46
- }
47
-
48
- type Feed struct {
49
- Entry []Entry
50
- }
51
- type Result struct {
52
- Feed Feed
53
- }
54
-
55
- var r Result
56
- err = json.NewDecoder(resp.Body).Decode(&r)
57
- if err != nil {
58
- return nil, err
59
- }
60
- var messages []mcp.Content
61
- for _, entry := range r.Feed.Entry {
62
- if entry.Abs != "" {
63
- log.Println(entry.Title, entry.Url, entry.Abs)
64
- s := "标题:" + entry.Title + "\n链接:" + entry.Url + "\n简介:" + entry.Abs
65
- messages = append(messages, mcp.TextContent{Type: "text", Text: s})
66
- }
67
-
68
- }
69
-
70
- return &mcp.CallToolResult{
71
- Content: messages,
72
- }, nil
73
- }
74
-
75
- func NewMCPServer() *server.MCPServer {
76
- // Create a new MCP server
77
- s := server.NewMCPServer(
78
- "Calculator Demo",
79
- "1.0.0",
80
- server.WithResourceCapabilities(true, true),
81
- server.WithLogging(),
82
- )
83
- webSearchTool := mcp.NewTool("web_search",
84
- mcp.WithDescription("web search tool"),
85
- mcp.WithString("query", mcp.Description("The web search query"), mcp.Required()),
86
- )
87
-
88
- s.AddTool(webSearchTool, webSearchHandler)
89
- return s
90
- }
91
-
92
- func main() {
93
- var transport string
94
- var port int
95
- flag.StringVar(&transport, "t", "sse", "Transport type (stdio or sse)")
96
- flag.StringVar(&transport, "transport", "sse", "Transport type (stdio or sse)")
97
- flag.IntVar(&port, "p", 8080, "Port number (default 8080)")
98
- flag.IntVar(&port, "port", 8080, "Port number (default 8080)")
99
- flag.Parse()
100
-
101
- mcpServer := NewMCPServer()
102
-
103
- if transport == "stdio" {
104
- /// Start the stdio server
105
- if err := server.ServeStdio(mcpServer); err != nil {
106
- fmt.Printf("Server error: %v\n", err)
107
- }
108
- } else {
109
-
110
- sseServer := server.NewSSEServer(mcpServer)
111
- log.Printf("SSE server listening on :" + strconv.Itoa(port))
112
- if err := sseServer.Start(":" + strconv.Itoa(port)); err != nil {
113
- log.Fatalf("Server error: %v", err)
114
- }
115
- }
116
- }
 
1
+ package main
2
+
3
+ import (
4
+ "context"
5
+ "flag"
6
+ "fmt"
7
+ "log"
8
+ "strconv"
9
+
10
+ "github.com/mark3labs/mcp-go/mcp"
11
+ "github.com/mark3labs/mcp-go/server"
12
+ )
13
+
14
+ // 两数求和 handler
15
+ func addHandler(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
16
+ // 参数断言 float64 支持整数和小数
17
+ a, ok1 := request.Params.Arguments["a"].(float64)
18
+ b, ok2 := request.Params.Arguments["b"].(float64)
19
+ if !ok1 || !ok2 {
20
+ return nil, fmt.Errorf("参数类型错误,期望输入两个数字")
21
+ }
22
+
23
+ sum := a + b
24
+ resultStr := fmt.Sprintf("两数之和为: %.2f", sum)
25
+
26
+ return &mcp.CallToolResult{
27
+ Content: []mcp.Content{
28
+ mcp.TextContent{Type: "text", Text: resultStr},
29
+ },
30
+ }, nil
31
+ }
32
+
33
+ func NewMCPServer() *server.MCPServer {
34
+ // 创建 MCP server
35
+ s := server.NewMCPServer(
36
+ "Calculator Demo",
37
+ "1.0.0",
38
+ server.WithResourceCapabilities(true, true),
39
+ server.WithLogging(),
40
+ )
41
+
42
+ // 注册“求和”工具
43
+ addTool := mcp.NewTool("add",
44
+ mcp.WithDescription("两数求和工具"),
45
+ mcp.WithNumber("a", mcp.Description("第一个数字"), mcp.Required()),
46
+ mcp.WithNumber("b", mcp.Description("第二个数字"), mcp.Required()),
47
+ )
48
+
49
+ s.AddTool(addTool, addHandler)
50
+ return s
51
+ }
52
+
53
+ func main() {
54
+ var transport string
55
+ var port int
56
+ flag.StringVar(&transport, "t", "sse", "Transport type (stdio or sse)")
57
+ flag.StringVar(&transport, "transport", "sse", "Transport type (stdio or sse)")
58
+ flag.IntVar(&port, "p", 8080, "Port number (default 8080)")
59
+ flag.IntVar(&port, "port", 8080, "Port number (default 8080)")
60
+ flag.Parse()
61
+
62
+ mcpServer := NewMCPServer()
63
+
64
+ if transport == "stdio" {
65
+ // 启动 stdio server
66
+ if err := server.ServeStdio(mcpServer); err != nil {
67
+ fmt.Printf("Server error: %v\n", err)
68
+ }
69
+ } else {
70
+ // 启动 SSE server
71
+ sseServer := server.NewSSEServer(mcpServer)
72
+ log.Printf("SSE server listening on :" + strconv.Itoa(port))
73
+ if err := sseServer.Start(":" + strconv.Itoa(port)); err != nil {
74
+ log.Fatalf("Server error: %v", err)
75
+ }
76
+ }
77
+ }