neuro-vault-mcp 2.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/dist/cli.d.ts +5 -63
- package/dist/cli.js +1270 -895
- package/dist/cli.js.map +1 -1
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -13,8 +13,9 @@
|
|
|
13
13
|
## ✨ Why Neuro Vault?
|
|
14
14
|
|
|
15
15
|
- 🧠 **Semantic search over your existing vault** — reuses [Smart Connections](https://github.com/brianpetro/obsidian-smart-connections) embeddings already in your vault. No re-indexing, no API keys, no extra infrastructure.
|
|
16
|
-
- 🎯 **Mode-aware retrieval** — `quick` for direct lookups, `deep` for exploratory questions with block-level results and semantic expansion of related notes.
|
|
16
|
+
- 🎯 **Mode-aware retrieval** — `quick` for direct lookups, `deep` for exploratory questions with block-level results and semantic expansion of related notes. Pass `query: string[]` (up to 8) for synonyms, reformulations, or cross-language pairs — one merged result list with `matched_queries` per entry.
|
|
17
17
|
- ✍️ **Direct vault operations** — read, create, append, and prepend notes; manage frontmatter properties and inspect tags (including daily notes) straight from your AI assistant via the [Obsidian CLI](https://github.com/AlexMost/obsidian-cli).
|
|
18
|
+
- 🔎 **Structured queries** — one MongoDB-style call (`query_notes`) replaces N+1 chains like "list tags → read each note's property". Ask "active projects with #ai" or "todo tasks created this week" and get a single ranked response.
|
|
18
19
|
- ⚡ **Zero infrastructure** — local stdio MCP server, in-memory index, no database, no background processes, no watchers.
|
|
19
20
|
- 🔌 **Drop-in for any MCP client** — Claude Code, Cursor, Windsurf — configuration is a single JSON block.
|
|
20
21
|
|
|
@@ -70,7 +71,7 @@ User guide lives in [`docs/guide/`](./docs/guide/README.md):
|
|
|
70
71
|
|
|
71
72
|
- [Installation](./docs/guide/installation.md)
|
|
72
73
|
- [Semantic Search](./docs/guide/semantic-search.md) — `search_notes`, `get_similar_notes`, `find_duplicates`, `get_stats`
|
|
73
|
-
- [Vault Operations](./docs/guide/vault-operations.md) — note CRUD, daily notes, properties, tags
|
|
74
|
+
- [Vault Operations](./docs/guide/vault-operations.md) — note CRUD, daily notes, properties, tags, structured queries (`query_notes`)
|
|
74
75
|
- [Routing Between Tools](./docs/guide/routing.md)
|
|
75
76
|
- [Configuration](./docs/guide/configuration.md) — CLI args, troubleshooting, limitations, **migration to 2.0**, development
|
|
76
77
|
|
package/dist/cli.d.ts
CHANGED
|
@@ -2,16 +2,6 @@
|
|
|
2
2
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
4
|
|
|
5
|
-
interface RetrievalOutput {
|
|
6
|
-
results: SearchResult[];
|
|
7
|
-
blockResults?: BlockSearchResult[];
|
|
8
|
-
}
|
|
9
|
-
interface MultiRetrievalOutput {
|
|
10
|
-
results: MultiSearchResult[];
|
|
11
|
-
blockResults?: MultiBlockSearchResult[];
|
|
12
|
-
truncated: boolean;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
5
|
interface SmartBlock {
|
|
16
6
|
key: string;
|
|
17
7
|
heading: string;
|
|
@@ -32,6 +22,7 @@ interface BlockSearchResult {
|
|
|
32
22
|
interface SearchResult {
|
|
33
23
|
path: string;
|
|
34
24
|
similarity: number;
|
|
25
|
+
via_expansion?: true;
|
|
35
26
|
}
|
|
36
27
|
interface DuplicatePair {
|
|
37
28
|
note_a: string;
|
|
@@ -61,49 +52,7 @@ interface SearchEngine {
|
|
|
61
52
|
threshold: number;
|
|
62
53
|
}): DuplicatePair[];
|
|
63
54
|
}
|
|
64
|
-
type SearchMode = 'quick' | 'deep';
|
|
65
|
-
interface SearchNotesInput {
|
|
66
|
-
query: string | string[];
|
|
67
|
-
mode?: SearchMode;
|
|
68
|
-
limit?: number;
|
|
69
|
-
threshold?: number;
|
|
70
|
-
}
|
|
71
|
-
interface GetSimilarNotesInput {
|
|
72
|
-
path: string;
|
|
73
|
-
limit?: number;
|
|
74
|
-
threshold?: number;
|
|
75
|
-
}
|
|
76
|
-
interface FindDuplicatesInput {
|
|
77
|
-
threshold?: number;
|
|
78
|
-
}
|
|
79
|
-
interface ToolStats {
|
|
80
|
-
totalNotes: number;
|
|
81
|
-
totalBlocks: number;
|
|
82
|
-
embeddingDimension: number;
|
|
83
|
-
modelKey: string;
|
|
84
|
-
}
|
|
85
55
|
type PathExistsCheck = (vaultRelativePath: string) => Promise<boolean>;
|
|
86
|
-
interface ToolHandlerDependencies {
|
|
87
|
-
loader: {
|
|
88
|
-
sources: Map<string, SmartSource>;
|
|
89
|
-
};
|
|
90
|
-
embeddingProvider: EmbeddingProvider;
|
|
91
|
-
searchEngine: SearchEngine;
|
|
92
|
-
modelKey: string;
|
|
93
|
-
pathExists?: PathExistsCheck;
|
|
94
|
-
}
|
|
95
|
-
interface ToolHandlers {
|
|
96
|
-
searchNotes(input: SearchNotesInput): Promise<RetrievalOutput | MultiRetrievalOutput>;
|
|
97
|
-
getSimilarNotes(input: GetSimilarNotesInput): Promise<SearchResult[]>;
|
|
98
|
-
findDuplicates(input?: FindDuplicatesInput): Promise<DuplicatePair[]>;
|
|
99
|
-
getStats(): Promise<ToolStats>;
|
|
100
|
-
}
|
|
101
|
-
interface MultiSearchResult extends SearchResult {
|
|
102
|
-
matched_queries: string[];
|
|
103
|
-
}
|
|
104
|
-
interface MultiBlockSearchResult extends BlockSearchResult {
|
|
105
|
-
matched_queries: string[];
|
|
106
|
-
}
|
|
107
56
|
|
|
108
57
|
interface SmartConnectionsCorpus {
|
|
109
58
|
sources: Map<string, SmartSource>;
|
|
@@ -113,7 +62,6 @@ interface SemanticModuleDeps {
|
|
|
113
62
|
loadCorpus?: (smartEnvPath: string, modelKey: string) => Promise<SmartConnectionsCorpus>;
|
|
114
63
|
embeddingServiceFactory?: (modelId: string) => EmbeddingProvider;
|
|
115
64
|
searchEngine?: SearchEngine;
|
|
116
|
-
toolHandlersFactory?: (deps: ToolHandlerDependencies) => ToolHandlers;
|
|
117
65
|
pathExists?: PathExistsCheck;
|
|
118
66
|
}
|
|
119
67
|
|
|
@@ -175,15 +123,6 @@ interface TagListEntry {
|
|
|
175
123
|
name: string;
|
|
176
124
|
count: number;
|
|
177
125
|
}
|
|
178
|
-
interface GetTagInput {
|
|
179
|
-
name: string;
|
|
180
|
-
includeFiles?: boolean;
|
|
181
|
-
}
|
|
182
|
-
interface GetTagResult {
|
|
183
|
-
name: string;
|
|
184
|
-
count: number;
|
|
185
|
-
files?: string[];
|
|
186
|
-
}
|
|
187
126
|
interface VaultProvider {
|
|
188
127
|
createNote(input: CreateNoteInput): Promise<CreateNoteResult>;
|
|
189
128
|
editNote(input: EditNoteInput): Promise<void>;
|
|
@@ -194,7 +133,6 @@ interface VaultProvider {
|
|
|
194
133
|
removeProperty(input: RemovePropertyInput): Promise<void>;
|
|
195
134
|
listProperties(): Promise<PropertyListEntry[]>;
|
|
196
135
|
listTags(): Promise<TagListEntry[]>;
|
|
197
|
-
getTag(input: GetTagInput): Promise<GetTagResult>;
|
|
198
136
|
}
|
|
199
137
|
|
|
200
138
|
type ExecFn = (binary: string, args: string[], options: {
|
|
@@ -228,8 +166,12 @@ interface ReadNotesInput {
|
|
|
228
166
|
paths: string[];
|
|
229
167
|
fields: ReadNotesField[];
|
|
230
168
|
}
|
|
169
|
+
interface ScanOptions {
|
|
170
|
+
pathPrefix?: string;
|
|
171
|
+
}
|
|
231
172
|
interface VaultReader {
|
|
232
173
|
readNotes(input: ReadNotesInput): Promise<ReadNotesItem[]>;
|
|
174
|
+
scan(opts?: ScanOptions): Promise<string[]>;
|
|
233
175
|
}
|
|
234
176
|
|
|
235
177
|
interface OperationsModuleDeps {
|