| package mcp |
| |
| import ( |
| "context" |
| "fmt" |
| |
| "github.com/mark3labs/mcp-go/mcp" |
| "github.com/mark3labs/mcp-go/server" |
| ) |
| |
| // Server wraps the mcp-go server with KorAP-specific functionality |
| type Server struct { |
| mcpServer *server.MCPServer |
| name string |
| version string |
| } |
| |
| // NewServer creates a new KorAP MCP server |
| func NewServer(name, version string) *Server { |
| mcpServer := server.NewMCPServer( |
| name, |
| version, |
| server.WithToolCapabilities(true), |
| ) |
| |
| return &Server{ |
| mcpServer: mcpServer, |
| name: name, |
| version: version, |
| } |
| } |
| |
| // AddTool registers a new tool with the server |
| func (s *Server) AddTool(name, description string, inputSchema map[string]any, handler func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error)) error { |
| if name == "" { |
| return fmt.Errorf("tool name cannot be empty") |
| } |
| if description == "" { |
| return fmt.Errorf("tool description cannot be empty") |
| } |
| |
| // Create tool using mcp-go's NewTool function |
| tool := mcp.NewTool(name, mcp.WithDescription(description)) |
| |
| // Add the tool and handler to the MCP server |
| s.mcpServer.AddTool(tool, handler) |
| |
| return nil |
| } |
| |
| // Serve starts the MCP server using stdio transport |
| func (s *Server) Serve() error { |
| return server.ServeStdio(s.mcpServer) |
| } |
| |
| // GetMCPServer returns the underlying mcp-go server for advanced usage |
| func (s *Server) GetMCPServer() *server.MCPServer { |
| return s.mcpServer |
| } |
| |
| // GetServerInfo returns server information |
| func (s *Server) GetServerInfo() (string, string) { |
| return s.name, s.version |
| } |