mirror of
https://github.com/DeusData/codebase-memory-mcp.git
synced 2026-11-03 08:03:38 +08:00
- 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
44 lines
1.0 KiB
Go
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
|
|
}
|