Second Brain with Semantic Search using ChromaDB for vector storage and MCP SDK OAuth 2.1 for Cowork compatibility. Provides semantic search, document indexing, and RAG capabilities with Obsidian vault integration.
RAG Brain MCP has 12 tools with consistent naming (verb_noun pattern: search, list, read, add_*, delete_*, sync_*, tag_*, get_). All tools have descriptions (avg ~80 chars, within baseline 34-392). Input schemas are present with type definitions and parameter descriptions. However, output schemas are not documented, critical for LLM planning. Error handling is minimal; no recovery guidance or actionable error messages visible. Some parameter descriptions lack format/constraint details (e.g., 'query' in search lacks length/format guidance). No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Composition is sound: tools are single-responsibility and chainable (e.g., search → read → tag_source). Security: no visible secrets in params, but no explicit permission gates or audit logging in the code sample.
Add a new document to the RAG index with semantic chunking
Upload and index a PDF document
Fetch and index content from a web URL
Fetch and index transcript from a YouTube video
Delete a source and all its chunks from the RAG index
Get all tags and their usage counts
List all indexed sources with optional tag filtering
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., what does search() return? Does it include source_id for read()?).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, DESTRUCTIVE). LLMs cannot infer safety/retry semantics.
Error handling not visible in code sample. No recovery guidance (e.g., 'source not found, try list() to see available sources'). Agents cannot self-correct on failures.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | <=2025-11-25 | v2 |
Retrieve full content of a specific source by source_id
Semantic search across indexed documents using vector similarity
Get statistics about indexed sources and chunks
Synchronize Obsidian vault with RAG index (incremental, mtime-based)
Add or update tags for a source
Parameter descriptions lack format/constraint details. 'query' in search() should specify max length, character restrictions. 'limit' should specify range (e.g., 1 - 100). LLMs may pass invalid values.
No pagination guidance in list() or search(). If results exceed context window, LLM has no way to fetch next page. Descriptions should mention limit caps and pagination strategy.