71 lines
1.4 KiB
Go
71 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/mark3labs/mcp-go/mcp"
|
|
"github.com/mark3labs/mcp-go/server"
|
|
)
|
|
|
|
func main() {
|
|
mode := os.Args[1]
|
|
switch mode {
|
|
case "server":
|
|
startServer()
|
|
case "client":
|
|
startClient()
|
|
}
|
|
}
|
|
|
|
func startServer() {
|
|
// Create a new MCP server
|
|
s := server.NewMCPServer(
|
|
"Demo 🚀",
|
|
"1.0.0",
|
|
server.WithToolCapabilities(false),
|
|
)
|
|
|
|
// Add tool
|
|
tool := mcp.NewTool("hello_world",
|
|
mcp.WithDescription("Say hello to someone"),
|
|
mcp.WithString("name",
|
|
mcp.Required(),
|
|
mcp.Description("Name of the person to greet"),
|
|
),
|
|
)
|
|
|
|
// Add tool handler
|
|
s.AddTool(tool, helloHandler)
|
|
|
|
// Start the stdio server
|
|
testServer := server.NewTestServer(s,
|
|
server.WithDynamicBasePath(func(r *http.Request, sessionID string) string {
|
|
tenant := r.Header.Get("X-Tenant-ID")
|
|
return "/api/" + tenant
|
|
}),
|
|
server.WithBaseURL("http://localhost:9090"),
|
|
server.WithUseFullURLForMessageEndpoint(true))
|
|
|
|
mux := http.NewServeMux()
|
|
// mux.Handle("/api/{tenant}/sse", testServer.)
|
|
if err := http.ListenAndServe(":9090", mux); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func helloHandler(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
|
name, err := request.RequireString("name")
|
|
if err != nil {
|
|
return mcp.NewToolResultError(err.Error()), nil
|
|
}
|
|
|
|
return mcp.NewToolResultText(fmt.Sprintf("Hello, %s!", name)), nil
|
|
}
|
|
|
|
func startClient() {
|
|
// Client implementation goes here
|
|
}
|