MCP server providing semantic search and vector embedding management for Engram observations using hybrid FTS5+KNN search with RRF fusion
Synapse has 5 tools with basic descriptions and no input schemas visible in the source. Tool names follow verb_noun convention (synapse_health, synapse_search, synapse_backfill, synapse_sync, synapse_stats), which is good. However, critical gaps undermine quality: (1) Input schemas are inferred from Go struct tags but NOT explicitly registered in the sdkmcp.Tool definitions, only Name and Description are set. (2) Parameter descriptions are absent from the MCP tool registration; they exist only in Go code comments. (3) Output schemas are undocumented, responses are JSON-marshaled maps with no declared structure. (4) Error handling is minimal, backfill checks for missing API key but returns JSON error text rather than structured guidance. (5) No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk profiles (synapse_backfill and synapse_sync are WRITE operations). This server is functional but falls short of production-grade tool definition quality.
Idempotent batch-embed of all live Engram observations into synapse.db.
Liveness check and DB reachability for both engram.db and synapse.db.
Hybrid FTS5+KNN semantic search with RRF fusion. Returns ranked results.
Returns observation count, vector count, orphan count, dims, and model.
Detects and removes orphan vectors whose observations were deleted from Engram.
Input schemas not registered in MCP tool definitions. sdkmcp.Tool only sets Name and Description; InputSchema is omitted. Parameter types and descriptions exist in Go code but are invisible to MCP clients.
Output schemas undocumented. Tools return JSON-marshaled maps (e.g., healthOut, map[string]any) with no declared structure in the MCP response. LLMs cannot infer field names or types.
Missing tool annotations. synapse_backfill and synapse_sync are destructive (WRITE risk) but lack destructiveHint annotation. synapse_health, synapse_stats, synapse_search are read-only but lack readOnlyHint. Agents cannot distinguish safe from risky tools.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
Error handling lacks recovery guidance. synapse_backfill returns JSON error text for missing API key, but does not suggest next steps (e.g., 'Set OPENAI_API_KEY environment variable'). Errors should guide the agent toward resolution.
synapse_search parameter 'limit' lacks description in MCP registration. Go struct has omitempty tag but no validation bounds (min/max). LLMs cannot infer valid range or default behavior.