diff --git a/tools/search.go b/tools/search.go
new file mode 100644
index 0000000..c11caa9
--- /dev/null
+++ b/tools/search.go
@@ -0,0 +1,93 @@
+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
+}
diff --git a/tools/search_test.go b/tools/search_test.go
new file mode 100644
index 0000000..abd6bef
--- /dev/null
+++ b/tools/search_test.go
@@ -0,0 +1,63 @@
+package tools
+
+import (
+	"testing"
+
+	"github.com/korap/korap-mcp/service"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestSearchTool_Name(t *testing.T) {
+	client := &service.Client{}
+	tool := NewSearchTool(client)
+
+	assert.Equal(t, "korap_search", tool.Name())
+}
+
+func TestSearchTool_Description(t *testing.T) {
+	client := &service.Client{}
+	tool := NewSearchTool(client)
+
+	expected := "Search for words or phrases in KorAP corpora using various query languages"
+	assert.Equal(t, expected, tool.Description())
+}
+
+func TestSearchTool_InputSchema(t *testing.T) {
+	client := &service.Client{}
+	tool := NewSearchTool(client)
+
+	schema := tool.InputSchema()
+
+	// Verify it's an object type
+	assert.Equal(t, "object", schema["type"])
+
+	// Verify properties exist
+	properties, ok := schema["properties"].(map[string]interface{})
+	assert.True(t, ok)
+	assert.Contains(t, properties, "query")
+	assert.Contains(t, properties, "query_language")
+	assert.Contains(t, properties, "corpus")
+	assert.Contains(t, properties, "count")
+	// Note: offset and context will be added in future iterations
+
+	// Verify required fields
+	required, ok := schema["required"].([]string)
+	assert.True(t, ok)
+	assert.Contains(t, required, "query")
+}
+
+func TestNewSearchTool(t *testing.T) {
+	client := &service.Client{}
+	tool := NewSearchTool(client)
+
+	assert.NotNil(t, tool)
+	assert.Equal(t, client, tool.client)
+}
+
+// TestSearchTool_Execute will be implemented once the Execute method is fixed
+func TestSearchTool_Execute_WillBeImplemented(t *testing.T) {
+	t.Skip("Execute method needs to be fixed first")
+
+	// This test will be implemented once we fix the linter errors
+	// in the Execute method
+}
