| package tools |
| |
| import ( |
| "context" |
| "fmt" |
| |
| "github.com/korap/korap-mcp/service" |
| "github.com/mark3labs/mcp-go/mcp" |
| "github.com/rs/zerolog/log" |
| ) |
| |
| // SearchTool implements the Tool interface for KorAP corpus search |
| type SearchTool struct { |
| client *service.Client |
| } |
| |
| // NewSearchTool creates a new search tool instance |
| func NewSearchTool(client *service.Client) *SearchTool { |
| return &SearchTool{ |
| client: client, |
| } |
| } |
| |
| // Name returns the tool name |
| func (s *SearchTool) Name() string { |
| return "korap_search" |
| } |
| |
| // Description returns the tool description |
| func (s *SearchTool) Description() string { |
| return "Search for words or phrases in KorAP corpora using various query languages" |
| } |
| |
| // InputSchema returns the JSON schema for tool parameters |
| func (s *SearchTool) InputSchema() map[string]interface{} { |
| return map[string]interface{}{ |
| "type": "object", |
| "properties": map[string]interface{}{ |
| "query": map[string]interface{}{ |
| "type": "string", |
| "description": "The search query (word, phrase, or pattern)", |
| }, |
| "query_language": map[string]interface{}{ |
| "type": "string", |
| "description": "Query language: 'poliqarp' (default), 'cosmas2', or 'annis'", |
| "enum": []string{"poliqarp", "cosmas2", "annis"}, |
| "default": "poliqarp", |
| }, |
| "corpus": map[string]interface{}{ |
| "type": "string", |
| "description": "Virtual corpus to search in", |
| }, |
| "count": map[string]interface{}{ |
| "type": "integer", |
| "description": "Number of results to return (max 100)", |
| "minimum": 1, |
| "maximum": 100, |
| "default": 25, |
| }, |
| }, |
| "required": []string{"query"}, |
| } |
| } |
| |
| // Execute performs the search operation |
| func (s *SearchTool) Execute(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { |
| log.Debug(). |
| Str("tool", s.Name()). |
| Msg("Executing search tool") |
| |
| // Extract required query parameter using the same pattern as main.go |
| query, err := request.RequireString("query") |
| if err != nil { |
| return nil, fmt.Errorf("query parameter is required: %w", err) |
| } |
| |
| log.Debug(). |
| Str("query", query). |
| Msg("Parsed search parameters") |
| |
| // For now, return a simple response to verify the tool works |
| // TODO: Implement actual KorAP search functionality |
| result := "KorAP Search Results\n" |
| result += "====================\n\n" |
| result += fmt.Sprintf("Query: %s\n", query) |
| result += "Status: Tool is working, KorAP integration to be implemented\n" |
| |
| log.Info(). |
| Str("query", query). |
| Msg("Search tool executed successfully") |
| |
| return mcp.NewToolResultText(result), nil |
| } |