MCP server for Void Stack - exposes service management tools to AI assistants
Strong tool coverage (28 tools) with consistent naming (verb_noun pattern) and comprehensive descriptions. All tools have descriptions (10-500+ chars, well above 20-char minimum). Input schemas present for all tools with typed parameters and descriptions. However, output schemas are not explicitly documented in the source code, only inferred from tool names and descriptions. Error handling guidance is minimal; most tools lack recovery hints. Tool composition is excellent (semantic_search chains with index_project_codebase, watch_project enables incremental updates). Security is good (no credentials in params, read-only vs write risk classification). Naming is clear and action-oriented (list_, get_, start_, stop_, read_, generate_, analyze_, suggest_). Parameter descriptions are detailed and include constraints (e.g., 'lines' is integer, 'raw' is boolean, 'format' is enum drawio|mermaid). Main gaps: no documented output schemas, limited error recovery guidance, no confirmation patterns for destructive ops (start_project, stop_project, delete operations).
Scan a directory and register it as a VoidStack project with auto-detected services. For WSL projects, set wsl=true and provide distro name.
Analyze code architecture: dependency graph, architecture patterns (MVC, Layered, Microservices), anti-patterns, complexity metrics. Requires graph_build. Returns markdown report.
Run best practices analysis (ruff, clippy, golangci-lint, react-doctor, dart analyze). Returns linter output and suggestions for code quality improvements.
Check all dependencies for a project (Python, Node, CUDA, Ollama, Docker, .env). Returns status, versions, and fix hints for each dependency. Call this before start_project if services are failing to detect missing dependencies.
List zero-caller symbols (dead code candidates) from the structural graph. Requires graph_build to have been called first. Returns functions, methods, types, and constants that are defined but never called.
Analyze Docker artifacts and generate Dockerfiles/compose. Detects services, ports, volumes, and generates docker-compose.yml if missing.
Output schemas not documented in source. Tool descriptions infer return types (e.g., 'Returns status, versions, and fix hints') but no formal JSON Schema for responses. LLMs cannot plan downstream tool calls without knowing response structure.
Destructive operations (start_project, stop_project, start_service, stop_service, add_project, generate_diagram, docker_analyze, index_project_codebase, watch_project) lack confirmation or dry-run patterns. Agents can irreversibly modify state without safeguards.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | <=2025-11-25 | v2 |
Generate architecture, API routes, and DB model diagrams. For drawio format: saves .drawio file to project dir AND returns the full XML content so you can inspect it directly. For mermaid: returns markdown. Call read_all_docs first to have project context before generating diagrams.
Get indexing status: whether codebase is indexed, file count, chunk count, last update time. Use this to decide: (1) if index exists → use semantic_search, (2) if not → call index_project_codebase first.
Get recent log output from a service. Call project_status first to see which services are running and their names before fetching logs.
Build structural dependency graph (call graph, imports, type references) from tree-sitter AST. Incremental by SHA-256. Enables dead_code, suggest_tests, and architecture analysis. Call once per session after index_project_codebase.
Index project codebase for semantic search (BAAI/bge-small-en-v1.5, local HNSW). Runs in background; check progress with get_index_stats. Subsequent semantic_search calls use this index. Incremental: only re-indexes changed files (by SHA-256 or git diff). Call once per session, then use semantic_search for code questions.
List all files in a registered project (up to 3 levels deep). Excludes sensitive files, node_modules, target, .git, and other build directories.
List all registered VoidStack projects with their services
Get the live status of all services in a project (running, stopped, PIDs, URLs)
Read project documentation (README, CHANGELOG, CLAUDE.md) from disk. Call this at session start for PROJECT CONTEXT (architecture, setup, decisions). NOT for code understanding — use semantic_search for that. Workflow: (1) get_index_stats to check if index exists, (2a) if YES: semantic_search for code questions + read_all_docs for project context, (2b) if NO: read_all_docs first, then index_project_codebase for future sessions.
Read documentation files (README.md, CHANGELOG.md, CLAUDE.md, etc.) from a project directory to understand what the project does
FALLBACK: prefer semantic_search when index exists (check with get_index_stats). Use read_project_file only when you need a SPECIFIC file by exact path and semantic_search didn't return enough context. Read any file from a registered project by relative path. Also useful after generate_diagram to read the saved .drawio file, or to read .proto files, Cargo.toml, pubspec.yaml. Blocked: .env, credentials, private keys. Max 200KB (truncated with warning if larger).
Compact review payload for the current git diff. Includes changed files, line counts, and semantic context from the index. Useful for code review preparation.
Run security audit: vulnerabilities (cargo-audit, npm audit, pip audit), secrets detection, insecure configs. Returns markdown report with severity levels and remediation hints.
Search indexed codebase semantically (BAAI/bge-small-en-v1.5 embeddings, local HNSW). Returns code chunks ranked by relevance. Requires index_project_codebase to have been called first (check with get_index_stats). Use for code understanding, architecture questions, finding implementations. NOT for project context — use read_all_docs for that.
Start all services in a project. Returns immediately. Use project_status afterwards to get detected URLs.
Start a specific service within a project. Use project_status afterwards to get the detected URL.
Stop all services in a project
Stop a specific service within a project
Generate AI-powered refactoring suggestions using Ollama (local LLM). Analyzes code patterns and suggests improvements. Requires Ollama to be running locally.
Suggest which tests cover the current git diff. Requires graph_build to have been called first. Analyzes call graph to find test functions that exercise changed code.
Stop watching a project directory for changes.
Start watching a project directory for file changes and auto-reindex (debounced ~500ms). Useful for long-running sessions where code is being edited. Call unwatch_project to stop.
Error handling lacks recovery guidance. Descriptions do not explain what to do if a tool fails (e.g., 'If service fails to start, call check_dependencies first'). Agents receive no actionable next steps on errors.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) not present in schema. Risk classification (READ_ONLY, WRITE) is documented in metadata but not exposed via MCP tool annotations for client-side filtering.
Pagination not documented for list_projects, list_project_files, semantic_search (top_k is limit, not pagination). No mention of result caps, next_cursor, or total_count. Large result sets could exhaust context.