Summary
When users create or update notes in Move37, those notes should be embedded and stored in a vector store. Move37's MCP server would then expose a semantic search tool, allowing connected clients (Claude, Codex, etc.) to run natural-language queries over the user's notes.
Motivation
MCP clients can already interact with Move37 via tool calls, but there's no way to retrieve relevant notes by meaning — only by direct lookup. Adding semantic search unlocks personal knowledge retrieval: a user can ask Claude "what did I write about distributed systems last month?" and get back relevant notes without knowing exact titles or tags.
Proposed behaviour
- Embedding pipeline — on note create/update, generate an embedding (e.g. via OpenAI
text-embedding-3-small or a local model) and upsert it into a vector store (e.g. pgvector, Qdrant, or Chroma).
- MCP tool — the
note.search MCP tool already exists in the server; this feature wires it to an actual populated vector store so queries return meaningful results.
- Deletion — when a note is deleted, its vector is removed from the store.
Dependencies
The MCP layer already exposes note.search (semantic note search) and the full notes CRUD (note.create, note.update, note.get, note.list). This feature builds on that foundation by wiring in the embedding pipeline that actually populates the vector store — without which note.search has nothing to query against.
If the notes API is not yet fully exposed in MCP, that must be completed first.
Acceptance criteria
Summary
When users create or update notes in Move37, those notes should be embedded and stored in a vector store. Move37's MCP server would then expose a semantic search tool, allowing connected clients (Claude, Codex, etc.) to run natural-language queries over the user's notes.
Motivation
MCP clients can already interact with Move37 via tool calls, but there's no way to retrieve relevant notes by meaning — only by direct lookup. Adding semantic search unlocks personal knowledge retrieval: a user can ask Claude "what did I write about distributed systems last month?" and get back relevant notes without knowing exact titles or tags.
Proposed behaviour
text-embedding-3-smallor a local model) and upsert it into a vector store (e.g. pgvector, Qdrant, or Chroma).note.searchMCP tool already exists in the server; this feature wires it to an actual populated vector store so queries return meaningful results.Dependencies
The MCP layer already exposes
note.search(semantic note search) and the full notes CRUD (note.create,note.update,note.get,note.list). This feature builds on that foundation by wiring in the embedding pipeline that actually populates the vector store — without whichnote.searchhas nothing to query against.If the notes API is not yet fully exposed in MCP, that must be completed first.
Acceptance criteria
note.search(query, top_k)MCP tool returns ranked, relevant notes.