Long-context project-memory and hybrid-retrieval MCP server for Claude Code / Cursor / Codex
bert-lab provides 16 tools with mostly complete schemas and descriptions. Naming is generally clear (verb_noun pattern: memory_search, read, write, edit, bash, grep, glob, webfetch, websearch). Descriptions range 50 - 250 chars, meeting the 10 - 1024 baseline. However, several tools lack parameter descriptions (identity, list_findings, read_ledger_rows, assemble_evidence_bundle, synthesize_artifact_body, analyze_evidence_holes), and output schemas are not documented. Error handling is minimal, no recovery guidance or categorization. The Spawn-subagent tool is vague ('handle a task') and lacks detail on failure modes. Overall: solid foundation, but incomplete parameter documentation and missing output schemas prevent a higher score.
Execute a bash command. Respects sandbox tier: Trusted = subprocess+timeout, Docker = isolated container.
Edit a file by applying a series of edits (replacements). Each edit specifies old_text and new_text.
List files matching a glob pattern.
Search for patterns in files using grep.
Read a file from the bert-lab filesystem. Returns the file contents. If the file is missing, returns an empty string (empty-state guarantee). Optional `offset` (1-indexed line number) and `limit` (line count) for large files.
Spawn a subagent to handle a task.
Fetch content from a URL using HTTP GET.
Output schemas not documented for any tool. LLMs cannot plan downstream calls or extract fields without knowing return structure.
Spawn-subagent description is vague ('handle a task'). Does not explain failure modes, retry behavior, or what constitutes success. LLM cannot determine when to use it.
assemble_evidence_bundle, synthesize_artifact_body, analyze_evidence_holes lack parameter descriptions. 'findings', 'ledger_rows', 'evidence', 'artifact' are ambiguous without context.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Search the web using DuckDuckGo.
Write content to a file (atomic: tmp + rename). Creates parent dirs. Relative paths route into the active lab's directory. Emits a finding event if writing to findings/<file>.md.
Given the objective, the evidence, and the synthesized artifact, identify what the artifact does NOT answer or support.
Combine findings (with content read from disk) + ledger rows into a deduped evidence list, each carrying provenance + quality_score.
Return the `value` arg unchanged (the skill DSL's pluck primitive).
List the .md findings under `dir` with a quality_score, filtered by min_quality.
Search the indexed project codebase for relevant code/chunks. Returns the top matching chunks (bert hybrid retrieval).
Read the SoR jsonl ledger, returning rows whose event_class/event_type is in `event_types` (all rows if None).
Given an objective and an evidence list, write ONE polished markdown artifact that answers the objective, citing evidence inline with [^n] footnotes.
Bash tool accepts arbitrary commands with optional timeout. No input validation, no sandboxing details, no error recovery guidance. Agents could execute destructive commands.
No error handling guidance across any tool. Errors should categorize as retryable, user-fixable, or fatal, and suggest recovery steps.