package main
import (
"context"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"github.com/xanaduAI/mcp-golang/mcp"
"github.com/xanaduAI/mcp-golang/mcp/transports/stdio"
)
// 定义一个结构体来表示工具的参数
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"`
}
// 定义工具函数
func getWeather(ctx context.Context, args *WeatherArguments) (interface{}, error) {
// 这里可以添加实际的逻辑来获取天气信息
return fmt.Sprintf("The weather at %.2f, %.2f is sunny.", args.Longitude, args.Latitude), nil
}
func main() {
// 创建一个通道来通知服务器停止
done := make(chan struct{})
// 创建一个新的MCP服务器,使用标准I/O作为传输
server := mcp.NewServer(stdio.NewStdioServerTransport())
// 注册一个工具
err := server.RegisterTool("get_weather", "Get the weather for a location", getWeather, &WeatherArguments{})
if err != nil {
log.Fatal(err)
}
// 在单独的goroutine中运行服务器
go func() {
<-done
server.Stop()
}()
// 运行服务器
err = server.Run()
if err != nil {
log.Fatal(err)
}
}
package main
import (
"context"
"fmt"
"io"
"log"
"net/http"
"github.com/metoro-io/mcp-golang"
"github.com/metoro-io/mcp-golang/transport/stdio"
)
// 定义一个结构体来表示工具的参数
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"`
}
// 定义工具函数
func getWeather(ctx context.Context, args *WeatherArguments) (interface{}, error) {
// 这里可以添加实际的逻辑来获取天气信息
return fmt.Sprintf("The weather at %.2f, %.2f is sunny.", args.Longitude, args.Latitude), nil
}
func main() {
// 创建一个通道来通知服务器停止
done := make(chan struct{})
// 创建一个新的MCP服务器,使用标准I/O作为传输
server := mcp_golang.NewServer(stdio.NewStdioServerTransport())
// 注册一个工具
err := server.RegisterTool("get_weather", "Get the weather for a location", getWeather, &WeatherArguments{})
if err != nil {
log.Fatal(err)
}
// 在单独的goroutine中运行服务器
go func() {
<-done
server.Stop()
}()
// 运行服务器
err = server.Run()
if err != nil {
log.Fatal(err)
}
}
# 安装xanaduAI/mcp-golang依赖
go get github.com/xanaduAI/mcp-golang/mcp
go get github.com/xanaduAI/mcp-golang/mcp/transports/stdio
# 或者安装metoro-io/mcp-golang依赖
go get github.com/metoro-io/mcp-golang
go get github.com/metoro-io/mcp-golang/transport/stdio
package main
import (
"github.com/xanaduAI/mcp-golang/mcp"
"github.com/xanaduAI/mcp-golang/mcp/transports/stdio"
)
func main() {
// 创建一个新的MCP服务器,使用标准I/O作为传输
server := mcp.NewServer(stdio.NewStdioServerTransport())
// 运行服务器
err := server.Run()
if err != nil {
panic(err)
}
}
// 定义一个结构体来表示工具的参数
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"`
}
// 定义工具函数
func getWeather(ctx context.Context, args *WeatherArguments) (interface{}, error) {
// 这里可以添加实际的逻辑来获取天气信息
return fmt.Sprintf("The weather at %.2f, %.2f is sunny.", args.Longitude, args.Latitude), nil
}
// 在main函数中注册工具
func main() {
server := mcp.NewServer(stdio.NewStdioServerTransport())
// 注册一个工具
err := server.RegisterTool("get_weather", "Get the weather for a location", getWeather, &WeatherArguments{})
if err != nil {
log.Fatal(err)
}
// 运行服务器
err = server.Run()
if err != nil {
log.Fatal(err)
}
}
func getWeather(ctx context.Context, args *WeatherArguments) (interface{}, error) {
// 从上下文中获取额外的信息
deadline, ok := ctx.Deadline()
if ok {
fmt.Printf("Request deadline: %v\n", deadline)
}
// 模拟天气查询
weatherInfo := fmt.Sprintf("The weather at %.2f, %.2f is sunny.", args.Longitude, args.Latitude)
return weatherInfo, nil
}
import "log"
// 在main函数中添加错误处理
func main() {
server := mcp.NewServer(stdio.NewStdioServerTransport())
// 注册工具
err := server.RegisterTool("get_weather", "Get the weather for a location", getWeather, &WeatherArguments{})
if err != nil {
log.Fatal(err)
}
// 创建一个通道来通知服务器停止
done := make(chan struct{})
// 在单独的goroutine中运行服务器
go func() {
err := server.Run()
if err != nil {
log.Printf("Server error: %v\n", err)
}
}()
// 等待退出信号
<-done
// 停止服务器
server.Stop()
}
import "github.com/xanaduAI/mcp-golang/mcp/transports/http"
// 创建一个新的MCP服务器,使用HTTP作为传输
server := mcp.NewServer(http.NewHTTPServerTransport(":8080"))