MCP server for local vector search with semantic and lexical search capabilities, knowledge base management, and workspace image handling
LocalVectorSearchMcp demonstrates solid schema coverage and clear naming conventions. All 14 tools have explicit descriptions and input schemas with typed parameters. Tool names follow verb_noun patterns (kb_reindex, kb_search, kb_read, kb_patch, kb_create, kb_move, kb_delete, kb_list_files, kb_outline, kb_save_image, kb_list_images, kb_load_image, kb_delete_image). However, descriptions vary in quality, some are verbose and technical (kb_patch at 400+ chars) while others lack actionable guidance for LLM selection. Parameter descriptions are present but often minimal (e.g., 'File path to read' for kb_read's Path param). Output schemas are documented for kb_search (UseStructuredContent=true, OutputSchemaType=SearchResponse) but not explicitly visible for other tools. Error handling is minimal, no recovery guidance, no categorization of retryable vs fatal errors. Security considerations (permission gates, audit trails) are absent from visible code.
Creates a new UTF-8 Markdown file, commits it as the source of truth, and schedules index synchronization. IndexSynchronized reports whether derived-index synchronization has already been confirmed.
Deletes a Markdown file when its source revision matches, commits the source deletion, and schedules removal from the derived index. IndexSynchronized reports whether derived-index synchronization has already been confirmed.
Deletes one supported image file under workspace images/. Requires knowledgeBase.allowWrites=true and never removes parent directories.
Lists Markdown files in the knowledge base with optional filtering.
Lists PNG, JPEG, WebP, and GIF assets recursively under workspace images/ using opaque cursor pagination.
Loads an existing supported image under workspace images/ and returns a real MCP image content block plus structured metadata.
Minimal error handling and recovery guidance. Tools return errors (e.g., IndexNotReadyException in kb_search) but do not guide LLM on next steps or categorize errors as retryable vs fatal.
Parameter descriptions are sparse and lack actionable constraints. E.g., kb_patch's Operations array lacks detail on valid Operation.Kind values, required fields per operation type, and pointer format expectations.
Output schemas not explicitly documented for 13 of 14 tools. Only kb_search declares OutputSchemaType. LLMs cannot infer response structure for kb_reindex, kb_status, kb_create, kb_move, kb_delete, kb_list_files, kb_outline, kb_save_image, kb_list_images, kb_load_image, kb_delete_image.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2025-06-18+ | v2 |
Moves a Markdown file when its source revision matches, commits the filesystem move, and schedules index reconciliation for the affected paths. IndexSynchronized reports whether derived-index synchronization has already been confirmed.
Returns the outline/table of contents for a Markdown document.
Atomically edits Markdown using hashed semantic anchors, commits the source file, and schedules index reconciliation. Public concrete pointers use logical~selfHash~subtreeHash with 16-character lowercase hashes. replace_element, insert_before, insert_after, and delete validate only selfHash, so an unchanged element can survive independent descendant edits. replace is a deprecated alias of replace_element. replace_section replaces a heading and all source in its section through the next heading with level <= the target level or end of document; use it when rewriting an entire chapter or section. It requires canonical v2 input and additionally validates subtreeHash so stale body or raw-content edits cannot be overwritten. Relocation uses only exact element kind plus selfHash. Legacy logical~selfHash input remains accepted for Self operations but is rejected for replace_section with a reread instruction. The document pointer remains unhashed and supports insert_before and insert_after at document boundaries. IndexSynchronized reports whether derived-index synchronization has already been confirmed.
Reads the current Markdown source starting at a semantic pointer or hashed semantic anchor. Reading is independent of embeddings and background indexing. Public concrete pointers are returned as logical~selfHash~subtreeHash; legacy logical~selfHash input remains valid for navigation. Omit pointer or use "document" to read from the beginning of the document.
Starts reindexing of the configured Markdown root in the background. Only one reindex can run at a time. Use kb_status to monitor progress and obtain the final result.
Saves a PNG, JPEG, WebP, or GIF supplied through the OpenAI file parameter into the workspace images/ directory. Requires knowledgeBase.allowWrites=true and never overwrites an existing image.
Searches the derived Markdown index using lexical, semantic or hybrid search. Results belong to an indexed revision identified by indexedSourceHash and may temporarily lag behind the current source. Hybrid search falls back to lexical search when the embedding provider is unavailable.
Returns local vector search index status.
No permission gates or audit trails visible. Destructive tools (kb_delete, kb_delete_image, kb_patch, kb_move) lack permission checks or logging of who called what and when.
kb_patch description is overly technical (400+ chars) and assumes deep knowledge of semantic pointers, hashes, and operation semantics. LLMs may struggle to determine when to use kb_patch vs kb_create or kb_read.