MCP server that caches Notion blog posts locally with FTS5 search
Notion MCP demonstrates solid tool design with complete schemas, clear descriptions, and proper tool annotations. All 6 tools have input schemas with typed parameters and descriptions. Tool names follow verb_noun convention (blog_ingest, blog_search, blog_delete). Descriptions are substantive (100-200 chars typical). However, output schemas are not formally documented, responses are JSON strings without declared structure. Error handling is minimal (only 'Cache not initialized' check visible). No parameter validation beyond Pydantic constraints. Missing guidance on recovery paths for common failures.
Remove a blog post from the local cache.
Retrieve the full markdown content of a cached blog post.
Ingest a Notion blog post into the local cache. Call this after reading a blog post from the Notion MCP. The post content is cached locally for fast search and retrieval.
Ingest multiple blog posts at once for bulk sync.
List all cached blog posts, optionally filtered by category or status.
BM25 full-text search across cached blog posts. Searches title, content, and categories. Returns ranked results with relevance scores and text snippets.
Output schemas not formally documented. Tools return JSON strings without declared field structure. LLMs cannot plan downstream calls or extract fields reliably.
Error handling lacks recovery guidance. 'Cache not initialized' is the only visible error path. No guidance on retryability, user-fixable errors, or next steps.
blog_search and blog_list lack pagination parameters (limit, offset, cursor). Large result sets could exhaust context window.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | <=2025-11-25 | v2 |
blog_delete is destructive but lacks confirmation/dry-run pattern. Agents could accidentally delete posts without safeguards.
Parameter descriptions lack format/constraint details. E.g., 'Publication date (ISO format)' should specify exact format (YYYY-MM-DD) and validation rules.