Files
codebase-memory-mcp/internal/tools/query.go
T
Martin Vogel bd6bbc2ab1 Add Go LSP hybrid type resolver, config store, and supporting infrastructure
- Go LSP cross-file type resolution engine (internal/cbm/lsp/) with C-based
  type registry, scope tracking, and Go stdlib data (30K+ definitions)
- lsp_bridge.go: CrossFileDef struct and RunGoLSPCrossFile CGo bridge
- config.go: persistent ConfigStore (SQLite) for auto_index, mem_limit settings
- CLI config subcommand for get/set/list/delete operations
- Store: edge batch upsert, project config columns, goleak test harness
- Pipeline: prefetch parallelism, resolver improvements, memleak tests
- CI: dry-run workflow improvements, vendor-grammar.sh enhancements
2026-03-12 13:26:13 +01:00

44 lines
1.0 KiB
Go

package tools
import (
"context"
"fmt"
"github.com/DeusData/codebase-memory-mcp/internal/cypher"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
func (s *Server) handleQueryGraph(_ context.Context, req *mcp.CallToolRequest) (*mcp.CallToolResult, error) {
args, err := parseArgs(req)
if err != nil {
return errResult(err.Error()), nil
}
query := getStringArg(args, "query")
if query == "" {
return errResult("missing required 'query' parameter"), nil
}
st, err := s.resolveStore(getStringArg(args, "project"))
if err != nil {
return errResult(fmt.Sprintf("resolve store: %v", err)), nil
}
exec := &cypher.Executor{Store: st, MaxRows: getIntArg(args, "max_rows", 0)}
result, err := exec.Execute(query)
if err != nil {
return errResult(fmt.Sprintf("query error: %v", err)), nil
}
responseData := map[string]any{
"columns": result.Columns,
"rows": result.Rows,
"total": len(result.Rows),
}
s.addIndexStatus(responseData)
res := jsonResult(responseData)
s.addUpdateNotice(res)
return res, nil
}