rclon commited on
Commit
8019bac
·
verified ·
1 Parent(s): 310c45f

Create main.go

Browse files
Files changed (1) hide show
  1. main.go +115 -0
main.go ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ client := &http.Client{}
20
+
21
+ //https://www.baidu.com/s?wd=ssstn=json&rn=10
22
+ u, err := url.Parse("https://www.baidu.com/s")
23
+ v := url.Values{}
24
+ v.Add("wd", query)
25
+ v.Add("tn", "json")
26
+ v.Add("rn", "10")
27
+ u.RawQuery = v.Encode()
28
+
29
+ fmt.Println(v.Encode())
30
+
31
+ req, _ := http.NewRequest("GET", u.String(), nil)
32
+ req.Header.Set("Accept", "text/html")
33
+ 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")
34
+
35
+ resp, err := client.Do(req)
36
+ if err != nil {
37
+ return nil, err
38
+ }
39
+ defer resp.Body.Close()
40
+
41
+ type Entry struct {
42
+ Title string
43
+ Url string
44
+ Abs string
45
+ }
46
+
47
+ type Feed struct {
48
+ Entry []Entry
49
+ }
50
+ type Result struct {
51
+ Feed Feed
52
+ }
53
+
54
+ var r Result
55
+ err = json.NewDecoder(resp.Body).Decode(&r)
56
+ if err != nil {
57
+ return nil, err
58
+ }
59
+ var messages []mcp.Content
60
+ for _, entry := range r.Feed.Entry {
61
+ if entry.Abs != "" {
62
+ log.Println(entry.Title, entry.Url, entry.Abs)
63
+ s := "标题:" + entry.Title + "\n链接:" + entry.Url + "\n简介:" + entry.Abs
64
+ messages = append(messages, mcp.TextContent{Type: "text", Text: s})
65
+ }
66
+
67
+ }
68
+
69
+ return &mcp.CallToolResult{
70
+ Content: messages,
71
+ }, nil
72
+ }
73
+
74
+ func NewMCPServer() *server.MCPServer {
75
+ // Create a new MCP server
76
+ s := server.NewMCPServer(
77
+ "Calculator Demo",
78
+ "1.0.0",
79
+ server.WithResourceCapabilities(true, true),
80
+ server.WithLogging(),
81
+ )
82
+ webSearchTool := mcp.NewTool("web_search",
83
+ mcp.WithDescription("web search tool"),
84
+ mcp.WithString("query", mcp.Description("The web search query"), mcp.Required()),
85
+ )
86
+
87
+ s.AddTool(webSearchTool, webSearchHandler)
88
+ return s
89
+ }
90
+
91
+ func main() {
92
+ var transport string
93
+ var port int
94
+ flag.StringVar(&transport, "t", "sse", "Transport type (stdio or sse)")
95
+ flag.StringVar(&transport, "transport", "sse", "Transport type (stdio or sse)")
96
+ flag.IntVar(&port, "p", 8080, "Port number (default 8080)")
97
+ flag.IntVar(&port, "port", 8080, "Port number (default 8080)")
98
+ flag.Parse()
99
+
100
+ mcpServer := NewMCPServer()
101
+
102
+ if transport == "stdio" {
103
+ /// Start the stdio server
104
+ if err := server.ServeStdio(mcpServer); err != nil {
105
+ fmt.Printf("Server error: %v\n", err)
106
+ }
107
+ } else {
108
+
109
+ sseServer := server.NewSSEServer(mcpServer)
110
+ log.Printf("SSE server listening on :" + strconv.Itoa(port))
111
+ if err := sseServer.Start(":" + strconv.Itoa(port)); err != nil {
112
+ log.Fatalf("Server error: %v", err)
113
+ }
114
+ }
115
+ }