blob: c11caa961c036b246dadb689b9b2edccfe1d18f0 [file] [log] [blame]
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
}