Static source inference · medium confidence · detected: Logging
Deprecated protocol patterns detected
Summary
ragex-mcp is a code search and indexing server with 7 tools covering regex search, semantic search, symbol finding, and codebase indexing. While tool names follow verb_noun conventions and descriptions are present, there are significant gaps in schema completeness, parameter descriptions, and error handling. Most tools lack explicit input validation documentation, output schemas are not documented, and error recovery guidance is absent. The server shows basic competence but falls short of production quality by Arcade standards.
Tools (7)
find_symbolsread only50/100
Find code symbols (functions, classes, methods) using Tree-sitter AST parsing
get_symbol_detailsread only50/100
Get detailed information about a code symbol including docstring and signature
index_codebasewritesource verified55/100
Index a codebase for semantic search using embeddings
list_filesread only50/100
List code files in specified paths
regex_searchread only50/100
Search code using regex patterns with ripgrep backend
search_referencesread only50/100
Find all references to a symbol across the codebase
semantic_searchread only50/100
Search code semantically using embeddings and vector similarity
No output schemas documented for any tool. LLMs cannot predict returned fields, types, or structure, forcing them to infer downstream requirements and increasing error rates.
Parameter descriptions are minimal (many under 50 chars) and lack actionable constraints. Examples: 'Paths to search in' provides no guidance on format (absolute? relative? glob?); 'File types to include' does not clarify whether filters apply by extension or MIME type; 'limit' parameters lack min/max bounds.
Enum-like parameters not formalized as JSON Schema enums. The 'model' param in semantic_search lists options in the description (fast/balanced/accurate/multilingual) but is typed as a string, allowing LLMs to pass invalid values. Same issue with 'symbol_types' in find_symbols.
Recommendations
Document the complete output schema for each tool. For 'regex_search', specify: [{file: string, line: int, column: int, match: string, context: string}, ...]. For 'index_codebase', specify: {indexed_paths: [string], file_count: int, embedding_model: string, index_location: string}.
Add constraints to parameters: 'limit' (minimum 1, maximum 100, default 20); 'paths' (must be relative paths or absolute paths starting with /); 'file_types' (filter by extension; examples: .py, .js, .go).
Formalize enum parameters in JSON Schema. Change 'model' in semantic_search from type string to an enum with values ["fast", "balanced", "accurate", "multilingual"].
Add guidance on tool selection. Example for 'regex_search': 'Use for exact pattern matching in code. For natural language queries, use semantic_search instead. For finding function/class definitions, use find_symbols.'
Document dependencies. Add to 'semantic_search' and 'find_symbols': 'Requires index_codebase to be called first on the target paths.'
Add pagination guidance. For 'regex_search': 'If results are truncated (count == limit), the response will include a next_offset field. Pass it to get the next batch.'
Expand error handling documentation. Specify common errors: 'If regex_search returns empty results, the pattern may be invalid or no matches exist. Verify pattern syntax or try a simpler pattern.' For 'index_codebase', specify: 'If indexing times out, try calling with smaller paths or force=true to rebuild.'
Clarify the distinction between 'search_references' and 'regex_search'. Example: 'search_references finds all usages of a symbol (definitions, imports, function calls). regex_search finds text pattern matches anywhere in code. Use search_references for refactoring, regex_search for text search.'
Spec posture evidence
Inferred effective spec: <=2025-11-25.
Relies on Logging (deprecated) - log to stderr or use OpenTelemetry
No error handling documentation. No guidance on recovery strategies (e.g., 'If index_codebase times out, call it with force=true'; 'If regex_search returns no results, try semantic_search instead'). Error responses are not specified, leaving LLMs without next steps.
No pagination documented. Tools like 'regex_search', 'semantic_search', 'find_symbols', and 'search_references' accept a 'limit' parameter but do not specify whether they return a total count, next cursor, or indicate truncation. Large result sets will blow context windows.
Overlapping tool purposes create LLM selection ambiguity. 'regex_search' and 'semantic_search' both search code but differ in method; 'find_symbols' also searches but via AST. Tool descriptions do not clarify when to use each, forcing the LLM to reason about trade-offs rather than following clear guidelines.
No documentation of tool dependencies. 'semantic_search', 'find_symbols', and 'search_references' likely depend on 'index_codebase' being called first, but this is not stated. LLMs may call tools in wrong order, causing failures.
Result limits and truncation behavior not documented. No guidance on what happens when 'limit=10' but 100 matches exist. Does the tool return top 10? Random 10? Truncate and warn? LLMs cannot reason about completeness without this information.
Add default values and ranges. Example: 'limit' defaults to 20 (minimum 1, maximum 100). 'recursive' defaults to true.
Document the 'file' and 'line' parameters in 'get_symbol_details'. Example: 'file: absolute or relative path to the source file. line: optional line number for disambiguation if multiple symbols have the same name.'
Specify 'index_codebase' side effects and output location. Example: 'Builds semantic index in ~/.ragex_cache/indexes/. With force=true, clears and rebuilds the index (slow operation, may take minutes for large codebases).'
Add idempotency guarantees. Example: 'index_codebase with the same paths and force=false is idempotent, calling twice returns the same result without re-indexing.'
Document encoding and newline handling. Example: 'Paths with spaces, Unicode, or special characters are supported. Results use UTF-8 encoding with Unix line endings (\n).'
Add examples to improve clarity. Example for 'regex_search': 'To find all function definitions in Python, use pattern: ^def \w+. To find imports, use: ^(from|import) \w+.'