blob: b6d7b1094366451dfff8892df7221739106402ad [file] [log] [blame]
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]interface{}, 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
}