From d3fff5551735cf0077984e2ac8ae59b5e97f0a60 Mon Sep 17 00:00:00 2001 From: Sabir Ribas Date: Thu, 24 Apr 2025 17:31:41 +1000 Subject: [PATCH 1/3] Counting objects in the index --- cmd/mcp/main.go | 4 +++ pkg/search/stats/countobjects.go | 47 ++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 pkg/search/stats/countobjects.go diff --git a/cmd/mcp/main.go b/cmd/mcp/main.go index 1c848d1..41b591d 100644 --- a/cmd/mcp/main.go +++ b/cmd/mcp/main.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "github.com/algolia/mcp/pkg/search/stats" "log" "os" @@ -82,6 +83,9 @@ func main() { synonyms.RegisterInsertSynonym(mcps, writeIndex, algoliaAppID, algoliaWriteAPIKey) synonyms.RegisterSearchSynonym(mcps, index) + // Tools for index stats + stats.RegisterCountObjects(mcps, client, index) + if err := server.ServeStdio(mcps); err != nil { fmt.Printf("Server error: %v\n", err) } diff --git a/pkg/search/stats/countobjects.go b/pkg/search/stats/countobjects.go new file mode 100644 index 0000000..f6e1d21 --- /dev/null +++ b/pkg/search/stats/countobjects.go @@ -0,0 +1,47 @@ +package stats + +import ( + "context" + "fmt" + "log" + "time" + + "github.com/mark3labs/mcp-go/mcp" + "github.com/mark3labs/mcp-go/server" + + "github.com/algolia/algoliasearch-client-go/v3/algolia/opt" + "github.com/algolia/algoliasearch-client-go/v3/algolia/search" + "github.com/algolia/mcp/pkg/mcputil" +) + +func RegisterCountObjects(mcps *server.MCPServer, client *search.Client, index *search.Index) { + runQueryTool := mcp.NewTool( + "count_objects", + mcp.WithDescription("Count the number of objects in the Algolia search index."), + mcp.WithString( + "indexName", + mcp.Description("The index to count the objects"), + ), + ) + + mcps.AddTool(runQueryTool, func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { + indexName, _ := req.Params.Arguments["indexName"].(string) + query, _ := req.Params.Arguments["query"].(string) + + opts := []any{opt.HitsPerPage(0)} + + currentIndex := index + if indexName != "" { + currentIndex = client.InitIndex(indexName) + } + + start := time.Now() + resp, err := currentIndex.Search(query, opts...) + if err != nil { + return nil, fmt.Errorf("could not search: %w", err) + } + log.Printf("Search for %q took %v", query, time.Since(start)) + + return mcputil.JSONToolResult("query results", resp.NbHits) + }) +} From 0d87c940c47568840453abfe85be14c6bb48ff48 Mon Sep 17 00:00:00 2001 From: Sabir Ribas Date: Thu, 24 Apr 2025 17:38:53 +1000 Subject: [PATCH 2/3] Addressing unused variable --- pkg/search/stats/countobjects.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/search/stats/countobjects.go b/pkg/search/stats/countobjects.go index f6e1d21..110a1d7 100644 --- a/pkg/search/stats/countobjects.go +++ b/pkg/search/stats/countobjects.go @@ -24,7 +24,7 @@ func RegisterCountObjects(mcps *server.MCPServer, client *search.Client, index * ), ) - mcps.AddTool(runQueryTool, func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { + mcps.AddTool(runQueryTool, func(_ context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { indexName, _ := req.Params.Arguments["indexName"].(string) query, _ := req.Params.Arguments["query"].(string) From ebce6c014bed743d9b940568841eadea7b3e80a9 Mon Sep 17 00:00:00 2001 From: Sabir Ribas Date: Thu, 24 Apr 2025 17:42:32 +1000 Subject: [PATCH 3/3] Formatting imports --- cmd/mcp/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/mcp/main.go b/cmd/mcp/main.go index 41b591d..4ac25af 100644 --- a/cmd/mcp/main.go +++ b/cmd/mcp/main.go @@ -2,7 +2,6 @@ package main import ( "fmt" - "github.com/algolia/mcp/pkg/search/stats" "log" "os" @@ -13,6 +12,7 @@ import ( "github.com/algolia/mcp/pkg/search/query" "github.com/algolia/mcp/pkg/search/records" "github.com/algolia/mcp/pkg/search/rules" + "github.com/algolia/mcp/pkg/search/stats" "github.com/algolia/mcp/pkg/search/synonyms" )