From 368a8fc7237b7ee17c7ec06e5e5bcb7642dfa62c Mon Sep 17 00:00:00 2001 From: Chris Battarbee Date: Thu, 12 Dec 2024 16:18:35 +0000 Subject: [PATCH] Add weather tool example --- .../get_weather_tool_server.go | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 examples/get_weather_tool_server/get_weather_tool_server.go diff --git a/examples/get_weather_tool_server/get_weather_tool_server.go b/examples/get_weather_tool_server/get_weather_tool_server.go new file mode 100644 index 0000000..89b1a39 --- /dev/null +++ b/examples/get_weather_tool_server/get_weather_tool_server.go @@ -0,0 +1,38 @@ +package main + +import ( + "fmt" + mcp_golang "github.com/metoro-io/mcp-golang" + "github.com/metoro-io/mcp-golang/transport/stdio" + "io" + "net/http" +) + +type WeatherArguments struct { + Longitude float64 `json:"longitude" jsonschema:"required,description=The longitude of the location to get the weather for"` + Latitude float64 `json:"latitude" jsonschema:"required,description=The latitude of the location to get the weather for"` +} + +// This is explained in the docs at https://mcpgolang.com/tools +func main() { + done := make(chan struct{}) + server := mcp_golang.NewServer(stdio.NewStdioServerTransport()) + err := server.RegisterTool("get_weather", "Get the weather forecast for temperature, wind speed and relative humidity", func(arguments WeatherArguments) (*mcp_golang.ToolResponse, error) { + url := fmt.Sprintf("https://api.open-meteo.com/v1/forecast?latitude=%f&longitude=%f¤t=temperature_2m,wind_speed_10m&hourly=temperature_2m,relative_humidity_2m,wind_speed_10m", arguments.Latitude, arguments.Longitude) + resp, err := http.Get(url) + if err != nil { + return nil, err + } + defer resp.Body.Close() + output, err := io.ReadAll(resp.Body) + if err != nil { + return nil, err + } + return mcp_golang.NewToolReponse(mcp_golang.NewTextContent(string(output))), nil + }) + err = server.Serve() + if err != nil { + panic(err) + } + <-done +}