Semantic code search and call graph analysis tool exposed as an MCP server. Allows AI agents to search codebases using natural language queries and trace function dependencies.
grepai exposes 14 code-analysis tools with generally solid descriptions and well-formed input schemas. All tools are read-only, which reduces security risk. However, there are several patterns from the 54 Agentic Tool Patterns that are not fully addressed: (1) Output schemas are not explicitly documented in the source code, LLMs cannot see what fields to expect from responses; (2) Error handling guidance is absent, no indication of what to do if a search fails, index is unavailable, or a symbol is not found; (3) Some parameter descriptions lack actionable formatting constraints (e.g., 'limit' has no min/max bounds stated); (4) A few parameters use generic naming ('format') without clear enum values in descriptions; (5) No idempotency hints for tools that might be retried. The tool names are clear and verb-based (search_, trace_, list_, rpg_, refs_, stats_), and descriptions are reasonably detailed (averaging 150 - 250 chars), but they stop short of guiding an LLM on when to use one tool vs. another or what to expect from output.
Get the current status of the code index including number of files, chunks, index size, and vectorization provider/model.
List all projects in a workspace. Workspace name defaults to the server's startup workspace if not specified.
List all configured workspaces. Useful for workspace-aware clients to discover available workspaces.
Build a complete reference graph around a symbol showing both readers and writers up to a specified depth.
Find readers of a property/state symbol (non-call data usage such as store.uid reads).
Find writers of a property/state symbol (non-call data mutation such as store.uid assignments).
Output schemas not documented. LLMs cannot see what fields to expect from tool responses (e.g., does grepai_search return a list of SearchResult objects with file_path, start_line, score, content?). This forces LLMs to guess at response structure and risks misinterpreting results.
Error handling and recovery guidance missing. Tool descriptions do not explain what happens if a search returns zero results, the code index is unavailable, a symbol is not found, or the workspace/project does not exist. No guidance for LLM on next steps (e.g., 'try a broader search query', 'call grepai_list_workspaces to discover valid workspace names').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 72 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 33 | - | v1 |
Explore the request-parameter-graph (RPG) starting from a given handler, showing all related nodes and edges within a specified depth.
Fetch detailed information about a specific API endpoint including handler definition, parameters, and request/response flow.
Search the request-parameter-graph (RPG) to find API handlers and their dependencies based on query patterns and parameter names.
Semantic code search. Search your codebase using natural language queries. Returns the most relevant code chunks with file paths, line numbers, and similarity scores. Examples: - workspace-only mode: workspace='acme', path='src/' - workspace + projects mode: workspace='acme', projects='backend,shared', path='api/'
Get aggregated statistics about the codebase including code metrics, language distribution, and development activity patterns.
Find all functions called by the specified symbol. Useful for understanding what a function depends on.
Find all functions that call the specified symbol. Useful for understanding code dependencies before modifying a function.
Build a complete call graph around a symbol showing both callers and callees up to a specified depth.
Numeric parameter bounds not stated. 'limit' parameter appears in grepai_search and grepai_rpg_search with description 'Maximum number of results to return (default: 10)', but no min/max bounds documented. Without explicit constraints, LLMs may pass absurd values (0, negative, or thousands) that cause failures or timeouts.
'format' parameter uses generic name and relies on description examples instead of formal enum. Description states "Output format: 'json' (default) or 'toon'" but does not declare an enum schema constraint. LLMs may hallucinate other formats (yaml, xml, csv) if not explicitly constrained.
No tool-to-tool chaining guidance. Descriptions do not indicate which tools can be called in sequence (e.g., 'call grepai_list_workspaces first, then grepai_search with the workspace name'). This increases reasoning overhead and risks dead-end calls.
Idempotency not declared. All tools are read-only and therefore idempotent, but descriptions do not explicitly state this. LLMs benefit from knowing a tool is safe to retry without side effects.