@nacho-labs/mcp-semantic-search 0.3.3 → 0.5.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 CHANGED
@@ -10,7 +10,7 @@ no API keys, no cloud, no costs.
10
10
  ## Prerequisites
11
11
 
12
12
  - **Node.js 20.9+**
13
- - **Internet on first run** to download the embedding model (~25MB, cached permanently)
13
+ - **Internet on first run** to download the embedding model (~25MB, cached in a per-user directory)
14
14
 
15
15
  ## Quick start
16
16
 
@@ -103,12 +103,32 @@ npx @nacho-labs/mcp-semantic-search \
103
103
 
104
104
  ### Environment variables
105
105
 
106
- | Variable | Description | Default |
107
- | ------------------------- | ------------------------------ | ------------------------- |
108
- | `MCP_SEMANTIC_STORE` | Path to persistence file | `.semantic-store.json` |
109
- | `MCP_SEMANTIC_SIMILARITY` | Min similarity threshold (0-1) | `0.4` |
110
- | `MCP_SEMANTIC_MODEL` | Embedding model | `Xenova/all-MiniLM-L6-v2` |
111
- | `MCP_SEMANTIC_CACHE_DIR` | Model cache directory | `.cache/transformers` |
106
+ | Variable | Description | Default |
107
+ | ------------------------------------- | ------------------------------------------------------------------------------ | -------------------------- |
108
+ | `MCP_SEMANTIC_STORE` | Path to persistence file | `.semantic-store.json` |
109
+ | `MCP_SEMANTIC_SIMILARITY` | Min similarity threshold (0-1) | `0.4` |
110
+ | `MCP_SEMANTIC_MODEL` | Embedding model | `Xenova/all-MiniLM-L6-v2` |
111
+ | `MCP_SEMANTIC_CACHE_DIR` | Model cache directory | per-user cache (see below) |
112
+ | `MCP_SEMANTIC_ON_CORRUPT_STORE` | `throw` or `quarantine` when the store file is corrupt | `throw` |
113
+ | `MCP_SEMANTIC_DEDUPLICATE_EXACT` | Exact-duplicate detection (maps to `deduplicate: 'normalized'`) | `true` |
114
+ | `MCP_SEMANTIC_DEDUPLICATE_SIMILARITY` | Near-duplicate threshold; `> 0` takes precedence over exact (`{ similarity }`) | `0.95` |
115
+
116
+ Both dedup settings off (`false` and `0`) disables deduplication.
117
+
118
+ ### Model cache
119
+
120
+ Unless `MCP_SEMANTIC_CACHE_DIR` is set, models are cached per user and shared
121
+ across projects: `$NACHOS_EMBEDDINGS_CACHE`, else the XDG cache directory, else
122
+ `~/.cache/nachos-embeddings`. Earlier versions used `.cache/transformers` in the
123
+ working directory; set `MCP_SEMANTIC_CACHE_DIR` to that path to keep using an
124
+ existing cache instead of re-downloading (~90MB).
125
+
126
+ ### Corrupt store
127
+
128
+ If the store file cannot be parsed, the server exits with a non-zero status and
129
+ a message naming the file; it does not retry. Repair or delete the file, or set
130
+ `MCP_SEMANTIC_ON_CORRUPT_STORE=quarantine` to rename the corrupt file aside and
131
+ start with an empty index.
112
132
 
113
133
  ### With environment variables in MCP config
114
134
 
@@ -0,0 +1,30 @@
1
+ export type DeduplicateOption = 'off' | 'exact' | 'normalized' | {
2
+ similarity: number;
3
+ };
4
+ export type CorruptStoreMode = 'throw' | 'quarantine';
5
+ /**
6
+ * Map the legacy exact/similarity settings onto nachos-embeddings' `deduplicate` option.
7
+ * similarity > 0 wins; otherwise exact on means 'normalized'; both off means 'off'.
8
+ */
9
+ export declare function resolveDeduplicate(exact: boolean, similarity: number): DeduplicateOption;
10
+ export declare function parseCorruptStoreMode(value: string): CorruptStoreMode;
11
+ export declare function getConfig(argv?: string[], env?: NodeJS.ProcessEnv): {
12
+ storePath: string;
13
+ minSimilarity: number;
14
+ model: string;
15
+ cacheDir: string | undefined;
16
+ autoChunk: boolean;
17
+ deduplicateExact: boolean;
18
+ deduplicateSimilarity: number;
19
+ deduplicate: DeduplicateOption;
20
+ onCorruptStore: CorruptStoreMode;
21
+ temporalBoost: boolean;
22
+ verbose: boolean;
23
+ provider: 'transformers' | 'bedrock';
24
+ bedrockRegion: string;
25
+ bedrockModel: string;
26
+ bedrockProfile: string;
27
+ bedrockDimensions: number;
28
+ };
29
+ export type Config = ReturnType<typeof getConfig>;
30
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,OAAO,GAAG,YAAY,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AACxF,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,YAAY,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAGxF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAGrE;AAED,wBAAgB,SAAS,CAAC,IAAI,GAAE,MAAM,EAA0B,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB;;;;;;;;;;;;cAmC/C,cAAc,GAAG,SAAS;;;;;EAMhF;AAED,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Map the legacy exact/similarity settings onto nachos-embeddings' `deduplicate` option.
3
+ * similarity > 0 wins; otherwise exact on means 'normalized'; both off means 'off'.
4
+ */
5
+ export function resolveDeduplicate(exact, similarity) {
6
+ if (Number.isFinite(similarity) && similarity > 0)
7
+ return { similarity };
8
+ return exact ? 'normalized' : 'off';
9
+ }
10
+ export function parseCorruptStoreMode(value) {
11
+ if (value === 'throw' || value === 'quarantine')
12
+ return value;
13
+ throw new Error(`Invalid MCP_SEMANTIC_ON_CORRUPT_STORE "${value}". Expected "throw" or "quarantine".`);
14
+ }
15
+ export function getConfig(argv = process.argv.slice(2), env = process.env) {
16
+ function getArg(name, fallback) {
17
+ const idx = argv.indexOf(`--${name}`);
18
+ return idx !== -1 && idx + 1 < argv.length ? argv[idx + 1] : fallback;
19
+ }
20
+ function getString(name, fallback) {
21
+ const envName = `MCP_SEMANTIC_${name.toUpperCase().replace(/-/g, '_')}`;
22
+ return env[envName] ?? getArg(name, fallback);
23
+ }
24
+ function getBool(name, fallback) {
25
+ const value = getString(name, fallback.toString());
26
+ return value === 'true' || value === '1';
27
+ }
28
+ const deduplicateExact = getBool('deduplicate-exact', true);
29
+ const deduplicateSimilarity = parseFloat(getString('deduplicate-similarity', '0.95'));
30
+ // Empty means "use the library's per-user cache".
31
+ const cacheDir = getString('cache-dir', '');
32
+ return {
33
+ storePath: getString('store', '.semantic-store.json'),
34
+ minSimilarity: parseFloat(getString('similarity', '0.4')),
35
+ model: getString('model', 'Xenova/all-MiniLM-L6-v2'),
36
+ cacheDir: cacheDir === '' ? undefined : cacheDir,
37
+ autoChunk: getBool('auto-chunk', true),
38
+ deduplicateExact,
39
+ deduplicateSimilarity,
40
+ deduplicate: resolveDeduplicate(deduplicateExact, deduplicateSimilarity),
41
+ onCorruptStore: parseCorruptStoreMode(getString('on-corrupt-store', 'throw')),
42
+ temporalBoost: getBool('temporal-boost', true),
43
+ verbose: getBool('verbose', false),
44
+ // Bedrock provider settings
45
+ provider: getString('provider', 'transformers'),
46
+ bedrockRegion: getString('bedrock-region', 'us-east-1'),
47
+ bedrockModel: getString('bedrock-model', 'amazon.titan-embed-text-v2:0'),
48
+ bedrockProfile: getString('bedrock-profile', ''),
49
+ bedrockDimensions: parseInt(getString('bedrock-dimensions', '1024'), 10),
50
+ };
51
+ }
52
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,10 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
3
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { ErrorCode, ListResourcesRequestSchema, ListResourceTemplatesRequestSchema, McpError, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
4
5
  import { z } from 'zod';
5
- import { EnhancedSemanticSearch } from '@nacho-labs/nachos-embeddings';
6
+ import { SemanticSearch } from '@nacho-labs/nachos-embeddings';
6
7
  import { resolve } from 'node:path';
7
- const VERSION = '0.3.2';
8
+ import { getConfig } from './config.js';
9
+ import { initWithRetry } from './init.js';
10
+ import { OpQueue } from './op-queue.js';
11
+ import { DEFAULT_INDEX_ID, DOCUMENT_RESOURCE_TEMPLATE_URI, INDEX_MANIFEST_URI, INDEX_STATS_URI, REGISTERED_RESOURCE_URIS, buildDocumentResourceUri, } from './product.js';
12
+ const VERSION = '0.5.0';
8
13
  const MAX_LENGTH = 1_000_000;
9
14
  const MAX_ITEMS = 100;
10
15
  const metadataValueSchema = z.union([
@@ -13,38 +18,6 @@ const metadataValueSchema = z.union([
13
18
  z.boolean(),
14
19
  z.array(z.string().max(MAX_LENGTH)).max(MAX_ITEMS),
15
20
  ]);
16
- function getConfig() {
17
- const args = process.argv.slice(2);
18
- function getArg(name, fallback) {
19
- const idx = args.indexOf(`--${name}`);
20
- return idx !== -1 && idx + 1 < args.length ? args[idx + 1] : fallback;
21
- }
22
- function getString(name, fallback) {
23
- const envName = `MCP_SEMANTIC_${name.toUpperCase().replace(/-/g, '_')}`;
24
- return process.env[envName] ?? getArg(name, fallback);
25
- }
26
- function getBool(name, fallback) {
27
- const value = getString(name, fallback.toString());
28
- return value === 'true' || value === '1';
29
- }
30
- return {
31
- storePath: resolve(getString('store', '.semantic-store.json')),
32
- minSimilarity: parseFloat(getString('similarity', '0.4')),
33
- model: getString('model', 'Xenova/all-MiniLM-L6-v2'),
34
- cacheDir: getString('cache-dir', '.cache/transformers'),
35
- autoChunk: getBool('auto-chunk', true),
36
- deduplicateExact: getBool('deduplicate-exact', true),
37
- deduplicateSimilarity: parseFloat(getString('deduplicate-similarity', '0.95')),
38
- temporalBoost: getBool('temporal-boost', true),
39
- verbose: getBool('verbose', false),
40
- // Bedrock provider settings
41
- provider: getString('provider', 'transformers'),
42
- bedrockRegion: getString('bedrock-region', 'us-east-1'),
43
- bedrockModel: getString('bedrock-model', 'amazon.titan-embed-text-v2:0'),
44
- bedrockProfile: getString('bedrock-profile', ''),
45
- bedrockDimensions: parseInt(getString('bedrock-dimensions', '1024'), 10),
46
- };
47
- }
48
21
  async function createProvider(config) {
49
22
  if (config.provider !== 'bedrock') {
50
23
  return undefined; // Use default Transformers.js
@@ -58,7 +31,15 @@ async function createProvider(config) {
58
31
  progressLogging: config.verbose,
59
32
  });
60
33
  }
61
- const config = getConfig();
34
+ let config;
35
+ try {
36
+ config = getConfig();
37
+ }
38
+ catch (err) {
39
+ console.error(err instanceof Error ? err.message : String(err));
40
+ process.exit(1);
41
+ }
42
+ config.storePath = resolve(config.storePath);
62
43
  const metrics = {
63
44
  searches: 0,
64
45
  documentsAdded: 0,
@@ -67,49 +48,21 @@ const metrics = {
67
48
  startTime: Date.now(),
68
49
  };
69
50
  const provider = await createProvider(config);
70
- const search = new EnhancedSemanticSearch({
51
+ const search = new SemanticSearch({
71
52
  ...(provider ? { provider } : {}),
72
53
  minSimilarity: config.minSimilarity,
73
54
  model: config.model,
74
- cacheDir: config.cacheDir,
55
+ ...(config.cacheDir ? { cacheDir: config.cacheDir } : {}),
75
56
  autoSave: true,
76
57
  storePath: config.storePath,
77
58
  autoChunk: config.autoChunk,
78
- deduplicateExact: config.deduplicateExact,
79
- deduplicateSimilarity: config.deduplicateSimilarity,
59
+ deduplicate: config.deduplicate,
60
+ onCorruptStore: config.onCorruptStore,
80
61
  temporalBoost: config.temporalBoost,
81
62
  verbose: config.verbose,
82
63
  });
83
- async function initializeSearch(attempt, maxRetries) {
84
- if (config.verbose) {
85
- console.error(`[Init] Attempt ${attempt}/${maxRetries}`);
86
- }
87
- await search.init();
88
- if (config.verbose) {
89
- console.error(`[Init] Loaded ${search.size()} documents`);
90
- }
91
- }
92
- async function handleInitializationFailure(attempt, maxRetries, err) {
93
- if (attempt === maxRetries) {
94
- console.error('[Init] Failed after', maxRetries, 'attempts. Internet required on first run (~25MB download).', err);
95
- throw err;
96
- }
97
- console.error(`[Init] Retry in 2s...`, err);
98
- await new Promise((resolve) => setTimeout(resolve, 2000));
99
- }
100
- async function initWithRetry(maxRetries = 3) {
101
- for (let attempt = 1; attempt <= maxRetries; attempt++) {
102
- try {
103
- await initializeSearch(attempt, maxRetries);
104
- return;
105
- }
106
- catch (err) {
107
- await handleInitializationFailure(attempt, maxRetries, err);
108
- }
109
- }
110
- }
111
64
  try {
112
- await initWithRetry();
65
+ await initWithRetry({ search, storePath: config.storePath, verbose: config.verbose });
113
66
  }
114
67
  catch {
115
68
  process.exit(1);
@@ -123,85 +76,195 @@ function formatUptime(seconds) {
123
76
  }
124
77
  return `${Math.floor(seconds / 3600)}h ${Math.floor((seconds % 3600) / 60)}m`;
125
78
  }
126
- function matchesKind(meta, kind) {
127
- return !kind || meta?.kind === kind;
79
+ const opQueue = new OpQueue(() => {
80
+ metrics.errors++;
81
+ });
82
+ const server = new McpServer({ name: 'mcp-semantic-search-enhanced', version: VERSION }, { capabilities: { logging: {} } });
83
+ function getResourceDocuments() {
84
+ return search.export();
128
85
  }
129
- function matchesTags(meta, tags) {
130
- return !tags || Boolean(meta?.tags && tags.some((tag) => meta.tags?.includes(tag)));
86
+ function getResourceModelLabel() {
87
+ return config.provider === 'bedrock' ? config.bedrockModel : config.model;
131
88
  }
132
- function hasValidSince(parsedSince) {
133
- return parsedSince !== undefined && !isNaN(parsedSince);
89
+ function getLatestDocumentTimestamp(documents) {
90
+ const latest = documents.reduce((current, document) => {
91
+ const timestamp = document.metadata?.timestamp;
92
+ return timestamp !== undefined && (current === undefined || timestamp > current) ? timestamp : current;
93
+ }, undefined);
94
+ return latest === undefined || Number.isNaN(latest) ? undefined : new Date(latest).toISOString();
134
95
  }
135
- function isBeforeSince(meta, parsedSince) {
136
- return Boolean(meta?.timestamp && meta.timestamp < parsedSince);
96
+ function countMetadata(documents, key) {
97
+ const counts = {};
98
+ for (const document of documents) {
99
+ const values = key === 'tags' ? (document.metadata?.tags ?? []) : document.metadata?.kind ? [document.metadata.kind] : [];
100
+ for (const value of values)
101
+ counts[value] = (counts[value] ?? 0) + 1;
102
+ }
103
+ return counts;
137
104
  }
138
- function matchesSince(meta, parsedSince) {
139
- return !hasValidSince(parsedSince) || !isBeforeSince(meta, parsedSince);
105
+ function renderJsonResource(uri, value) {
106
+ return {
107
+ contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(value, null, 2) }],
108
+ };
140
109
  }
141
- function matchesMetadata(meta, kind, tags, parsedSince) {
142
- return matchesKind(meta, kind) && matchesTags(meta, tags) && matchesSince(meta, parsedSince);
110
+ function formatSearchResults(results) {
111
+ return results
112
+ .map((r, i) => {
113
+ const preview = r.text.substring(0, 200) + (r.text.length > 200 ? '...' : '');
114
+ const metaStr = r.metadata && Object.keys(r.metadata).length > 0 ? `\n 📎 ${JSON.stringify(r.metadata)}` : '';
115
+ return `${i + 1}. [${(r.similarity * 100).toFixed(0)}%] ${preview}${metaStr}`;
116
+ })
117
+ .join('\n\n');
143
118
  }
144
- class OpQueue {
145
- queue = Promise.resolve();
146
- async run(fn) {
147
- const prev = this.queue;
148
- let resolve;
149
- this.queue = new Promise((res) => {
150
- resolve = res;
151
- });
152
- try {
153
- await prev.catch(() => { });
154
- const result = await fn();
155
- return result;
156
- }
157
- catch (err) {
158
- metrics.errors++;
159
- throw err;
160
- }
161
- finally {
162
- resolve();
163
- }
119
+ function parseSemanticResourceUri(uri) {
120
+ try {
121
+ const parsed = new URL(uri);
122
+ if (parsed.protocol !== 'semantic-search:' || parsed.hostname !== 'indexes')
123
+ return undefined;
124
+ const [indexId, resourceType, documentId, extra] = parsed.pathname
125
+ .split('/')
126
+ .filter(Boolean)
127
+ .map((segment) => decodeURIComponent(segment));
128
+ if (indexId !== DEFAULT_INDEX_ID || extra !== undefined)
129
+ return undefined;
130
+ if (resourceType === 'manifest' && documentId === undefined)
131
+ return { type: 'manifest' };
132
+ if (resourceType === 'stats' && documentId === undefined)
133
+ return { type: 'stats' };
134
+ if (resourceType === 'documents' && documentId)
135
+ return { type: 'document', documentId };
136
+ }
137
+ catch {
138
+ return undefined;
164
139
  }
140
+ return undefined;
165
141
  }
166
- const opQueue = new OpQueue();
167
- const server = new McpServer({ name: 'mcp-semantic-search-enhanced', version: VERSION }, { capabilities: { logging: {} } });
168
- function buildHealthResponse() {
169
- const uptime = Math.floor((Date.now() - metrics.startTime) / 1000);
170
- const model = config.provider === 'bedrock' ? config.bedrockModel : config.model;
171
- const providerSetting = config.provider === 'bedrock' ? `Region: ${config.bedrockRegion}` : `Cache: ${config.cacheDir}`;
142
+ server.server.registerCapabilities({ resources: {} });
143
+ server.server.setRequestHandler(ListResourcesRequestSchema, async () => {
144
+ const documents = getResourceDocuments();
145
+ const lastModified = getLatestDocumentTimestamp(documents);
146
+ const annotations = {
147
+ audience: ['user', 'assistant'],
148
+ ...(lastModified ? { lastModified } : {}),
149
+ };
172
150
  return {
173
- content: [
151
+ resources: [
152
+ {
153
+ uri: INDEX_MANIFEST_URI,
154
+ name: 'semantic_index_manifest',
155
+ title: 'Semantic Index Manifest',
156
+ description: 'Stable manifest for the active semantic-search index.',
157
+ mimeType: 'application/json',
158
+ annotations: { ...annotations, priority: 1 },
159
+ },
174
160
  {
175
- type: 'text',
176
- text: [
177
- '✅ Healthy',
178
- '',
179
- '📊 Metrics:',
180
- ` Documents: ${search.size()}`,
181
- ` Searches: ${metrics.searches}`,
182
- ` Added: ${metrics.documentsAdded}`,
183
- ` Removed: ${metrics.documentsRemoved}`,
184
- ` Errors: ${metrics.errors}`,
185
- ` Uptime: ${formatUptime(uptime)}`,
186
- '',
187
- '⚙️ Config:',
188
- ` Provider: ${config.provider}`,
189
- ` Model: ${model}`,
190
- ` ${providerSetting}`,
191
- ` Store: ${config.storePath}`,
192
- ` Min similarity: ${config.minSimilarity}`,
193
- ` Auto-chunk: ${config.autoChunk}`,
194
- ` Dedup: exact=${config.deduplicateExact}, fuzzy=${config.deduplicateSimilarity}`,
195
- ` Temporal boost: ${config.temporalBoost}`,
196
- ].join('\n'),
161
+ uri: INDEX_STATS_URI,
162
+ name: 'semantic_index_stats',
163
+ title: 'Semantic Index Stats',
164
+ description: 'Corpus stats and runtime counters for the active semantic-search index.',
165
+ mimeType: 'application/json',
166
+ annotations: { ...annotations, priority: 0.9 },
197
167
  },
198
168
  ],
199
169
  };
200
- }
201
- async function getHealthResponse() {
170
+ });
171
+ server.server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => ({
172
+ resourceTemplates: [
173
+ {
174
+ name: 'semantic_document',
175
+ title: 'Indexed Document',
176
+ uriTemplate: DOCUMENT_RESOURCE_TEMPLATE_URI,
177
+ description: 'Read a single indexed document by id from the active semantic-search index.',
178
+ mimeType: 'application/json',
179
+ annotations: { audience: ['user', 'assistant'], priority: 0.8 },
180
+ },
181
+ ],
182
+ }));
183
+ server.server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
184
+ const resource = parseSemanticResourceUri(request.params.uri);
185
+ if (!resource)
186
+ throw new McpError(ErrorCode.InvalidParams, `Resource ${request.params.uri} not found`);
187
+ const documents = getResourceDocuments();
188
+ if (resource.type === 'manifest') {
189
+ return renderJsonResource(INDEX_MANIFEST_URI, {
190
+ indexId: DEFAULT_INDEX_ID,
191
+ resourceRoot: `semantic-search://indexes/${DEFAULT_INDEX_ID}`,
192
+ storePath: config.storePath,
193
+ provider: config.provider,
194
+ model: getResourceModelLabel(),
195
+ documentCount: documents.length,
196
+ listedResources: [...REGISTERED_RESOURCE_URIS],
197
+ resourceTemplates: [DOCUMENT_RESOURCE_TEMPLATE_URI],
198
+ metricsStartedAt: new Date(metrics.startTime).toISOString(),
199
+ });
200
+ }
201
+ if (resource.type === 'stats') {
202
+ return renderJsonResource(INDEX_STATS_URI, {
203
+ indexId: DEFAULT_INDEX_ID,
204
+ storePath: config.storePath,
205
+ provider: config.provider,
206
+ model: getResourceModelLabel(),
207
+ counts: {
208
+ documents: documents.length,
209
+ rootDocuments: documents.filter((document) => !document.metadata?.parentId).length,
210
+ chunkDocuments: documents.filter((document) => document.metadata?.parentId).length,
211
+ },
212
+ metadata: { kinds: countMetadata(documents, 'kind'), tags: countMetadata(documents, 'tags') },
213
+ usage: {
214
+ searches: metrics.searches,
215
+ documentsAdded: metrics.documentsAdded,
216
+ documentsRemoved: metrics.documentsRemoved,
217
+ errors: metrics.errors,
218
+ uptimeSeconds: Math.floor((Date.now() - metrics.startTime) / 1000),
219
+ },
220
+ });
221
+ }
222
+ const document = documents.find((candidate) => candidate.id === resource.documentId);
223
+ if (!document)
224
+ throw new McpError(ErrorCode.InvalidParams, `Document ${resource.documentId} not found`);
225
+ return renderJsonResource(buildDocumentResourceUri(document.id), {
226
+ id: document.id,
227
+ text: document.text,
228
+ metadata: document.metadata ?? {},
229
+ });
230
+ });
231
+ server.registerTool('semantic_health', {
232
+ title: 'Health Check',
233
+ description: 'Server status, metrics, and configuration',
234
+ inputSchema: z.object({}),
235
+ }, async () => {
202
236
  try {
203
237
  await search.search('test', { limit: 1 });
204
- return buildHealthResponse();
238
+ const uptime = Math.floor((Date.now() - metrics.startTime) / 1000);
239
+ const uptimeStr = formatUptime(uptime);
240
+ return {
241
+ content: [
242
+ {
243
+ type: 'text',
244
+ text: [
245
+ '✅ Healthy',
246
+ '',
247
+ '📊 Metrics:',
248
+ ` Documents: ${search.size()}`,
249
+ ` Searches: ${metrics.searches}`,
250
+ ` Added: ${metrics.documentsAdded}`,
251
+ ` Removed: ${metrics.documentsRemoved}`,
252
+ ` Errors: ${metrics.errors}`,
253
+ ` Uptime: ${uptimeStr}`,
254
+ '',
255
+ '⚙️ Config:',
256
+ ` Provider: ${config.provider}`,
257
+ ` Model: ${config.provider === 'bedrock' ? config.bedrockModel : config.model}`,
258
+ ` ${config.provider === 'bedrock' ? `Region: ${config.bedrockRegion}` : `Cache: ${config.cacheDir ?? 'library default (per-user)'}`}`,
259
+ ` Store: ${config.storePath}`,
260
+ ` Min similarity: ${config.minSimilarity}`,
261
+ ` Auto-chunk: ${config.autoChunk}`,
262
+ ` Dedup: ${JSON.stringify(config.deduplicate)}`,
263
+ ` Temporal boost: ${config.temporalBoost}`,
264
+ ].join('\n'),
265
+ },
266
+ ],
267
+ };
205
268
  }
206
269
  catch (err) {
207
270
  return {
@@ -213,19 +276,14 @@ async function getHealthResponse() {
213
276
  ],
214
277
  };
215
278
  }
216
- }
217
- server.registerTool('semantic_health', {
218
- title: 'Health Check',
219
- description: 'Server status, metrics, and configuration',
220
- inputSchema: z.object({}),
221
- }, getHealthResponse);
279
+ });
222
280
  server.registerTool('semantic_search', {
223
281
  title: 'Semantic Search',
224
282
  description: 'Search by meaning with optional metadata filters',
225
283
  inputSchema: z.object({
226
284
  query: z.string().describe('Search query'),
227
- limit: z.number().optional().default(5).describe('Max results'),
228
- minSimilarity: z.number().optional().describe('Min score (0-1)'),
285
+ limit: z.number().int().min(1).max(100).optional().default(5).describe('Max results'),
286
+ minSimilarity: z.number().min(0).max(1).optional().describe('Min score (0-1)'),
229
287
  kind: z.string().optional().describe('Filter by metadata.kind'),
230
288
  tags: z.array(z.string()).optional().describe('Filter by metadata.tags'),
231
289
  since: z.string().optional().describe('Filter by metadata.timestamp >= ISO date'),
@@ -234,10 +292,19 @@ server.registerTool('semantic_search', {
234
292
  return opQueue.run(async () => {
235
293
  const startTime = Date.now();
236
294
  const parsedSince = since ? Date.parse(since) : undefined;
295
+ const targetTags = tags ? new Set(tags) : undefined;
237
296
  const results = await search.search(query, {
238
297
  limit,
239
298
  ...(minSimilarity !== undefined && { minSimilarity }),
240
- filter: (meta) => matchesMetadata(meta, kind, tags, parsedSince),
299
+ filter: (meta) => {
300
+ if (kind && meta?.kind !== kind)
301
+ return false;
302
+ if (targetTags && (!meta?.tags || !meta.tags.some((t) => targetTags.has(t))))
303
+ return false;
304
+ if (parsedSince !== undefined && !isNaN(parsedSince) && meta?.timestamp && meta.timestamp < parsedSince)
305
+ return false;
306
+ return true;
307
+ },
241
308
  });
242
309
  metrics.searches++;
243
310
  const elapsed = Date.now() - startTime;
@@ -251,19 +318,20 @@ server.registerTool('semantic_search', {
251
318
  ],
252
319
  };
253
320
  }
254
- const formatted = results
255
- .map((r, i) => {
256
- const preview = r.text.substring(0, 200) + (r.text.length > 200 ? '...' : '');
257
- const metaStr = r.metadata && Object.keys(r.metadata).length > 0 ? `\n 📎 ${JSON.stringify(r.metadata)}` : '';
258
- return `${i + 1}. [${(r.similarity * 100).toFixed(0)}%] ${preview}${metaStr}`;
259
- })
260
- .join('\n\n');
321
+ const formatted = formatSearchResults(results);
261
322
  return {
262
323
  content: [
263
324
  {
264
325
  type: 'text',
265
326
  text: `🔍 Found ${results.length} in ${elapsed}ms:\n\n${formatted}`,
266
327
  },
328
+ ...results.map((result) => ({
329
+ type: 'resource_link',
330
+ uri: buildDocumentResourceUri(result.id),
331
+ name: result.id,
332
+ mimeType: 'application/json',
333
+ description: `Indexed document "${result.id}"`,
334
+ })),
267
335
  ],
268
336
  };
269
337
  });
@@ -312,7 +380,7 @@ server.registerTool('semantic_index_batch', {
312
380
  }, async ({ documents }) => {
313
381
  return opQueue.run(async () => {
314
382
  const startTime = Date.now();
315
- await search.addDocuments(documents.map((d) => ({ ...d, metadata: d.metadata })));
383
+ await search.addDocuments(documents);
316
384
  metrics.documentsAdded += documents.length;
317
385
  const elapsed = Date.now() - startTime;
318
386
  return {
@@ -370,8 +438,7 @@ server.registerTool('semantic_stats', {
370
438
  '',
371
439
  'Features:',
372
440
  ` Auto-chunk: ${config.autoChunk}`,
373
- ` Dedup (exact): ${config.deduplicateExact}`,
374
- ` Dedup (fuzzy): ${config.deduplicateSimilarity > 0 ? config.deduplicateSimilarity : 'off'}`,
441
+ ` Dedup: ${JSON.stringify(config.deduplicate)}`,
375
442
  ` Temporal boost: ${config.temporalBoost}`,
376
443
  '',
377
444
  'Usage:',
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/init.d.ts ADDED
@@ -0,0 +1,23 @@
1
+ export declare function isStoreCorruptError(err: unknown): err is Error & {
2
+ path?: string;
3
+ };
4
+ export interface InitDeps {
5
+ search: {
6
+ init(): Promise<void>;
7
+ size(): number;
8
+ };
9
+ storePath: string;
10
+ verbose: boolean;
11
+ maxRetries?: number;
12
+ retryDelayMs?: number;
13
+ log?: (...args: unknown[]) => void;
14
+ }
15
+ export declare function corruptStoreMessage(err: Error & {
16
+ path?: string;
17
+ }, storePath: string): string;
18
+ /**
19
+ * Initialise the search index. Corrupt stores are never retried. Throws on final failure
20
+ * after logging an actionable message.
21
+ */
22
+ export declare function initWithRetry(deps: InitDeps): Promise<void>;
23
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,KAAK,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAElF;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE;QAAE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,IAAI,IAAI,MAAM,CAAA;KAAE,CAAC;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACpC;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,KAAK,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAS7F;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BjE"}
package/dist/init.js ADDED
@@ -0,0 +1,46 @@
1
+ import { StoreCorruptError } from '@nacho-labs/nachos-embeddings';
2
+ export function isStoreCorruptError(err) {
3
+ return err instanceof StoreCorruptError || (err instanceof Error && err.name === 'StoreCorruptError');
4
+ }
5
+ export function corruptStoreMessage(err, storePath) {
6
+ const file = err.path ?? storePath;
7
+ return [
8
+ `[Init] The semantic store file is corrupt and could not be loaded: ${file}`,
9
+ ` ${err.message}`,
10
+ ' To fix it, do one of:',
11
+ ' - repair the file by hand, or delete it (the index will start empty)',
12
+ ' - set MCP_SEMANTIC_ON_CORRUPT_STORE=quarantine to rename the corrupt file aside and start empty',
13
+ ].join('\n');
14
+ }
15
+ /**
16
+ * Initialise the search index. Corrupt stores are never retried. Throws on final failure
17
+ * after logging an actionable message.
18
+ */
19
+ export async function initWithRetry(deps) {
20
+ const { search, storePath, verbose, maxRetries = 3, retryDelayMs = 2000, log = console.error } = deps;
21
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
22
+ try {
23
+ if (verbose)
24
+ log(`[Init] Attempt ${attempt}/${maxRetries}`);
25
+ await search.init();
26
+ if (verbose)
27
+ log(`[Init] Loaded ${search.size()} documents`);
28
+ return;
29
+ }
30
+ catch (err) {
31
+ if (isStoreCorruptError(err)) {
32
+ log(corruptStoreMessage(err, storePath));
33
+ throw err;
34
+ }
35
+ if (attempt === maxRetries) {
36
+ log(`[Init] Failed after ${maxRetries} attempts: ${err instanceof Error ? err.message : String(err)}\n` +
37
+ ' Check the store path, model name, and provider settings. If this is the first run, ' +
38
+ 'the model download (~25MB) needs network access, which is one possible cause.', err);
39
+ throw err;
40
+ }
41
+ log('[Init] Retry in 2s...', err);
42
+ await new Promise((r) => setTimeout(r, retryDelayMs));
43
+ }
44
+ }
45
+ }
46
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,OAAO,GAAG,YAAY,iBAAiB,IAAI,CAAC,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC;AACxG,CAAC;AAWD,MAAM,UAAU,mBAAmB,CAAC,GAA8B,EAAE,SAAiB;IACnF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC;IACnC,OAAO;QACL,sEAAsE,IAAI,EAAE;QAC5E,UAAU,GAAG,CAAC,OAAO,EAAE;QACvB,8BAA8B;QAC9B,+EAA+E;QAC/E,0GAA0G;KAC3G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc;IAChD,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC;IACtG,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,IAAI,OAAO;gBAAE,GAAG,CAAC,kBAAkB,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC;YAC5D,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,OAAO;gBAAE,GAAG,CAAC,iBAAiB,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;gBACzC,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC3B,GAAG,CACD,uBAAuB,UAAU,cAAc,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI;oBACjG,4FAA4F;oBAC5F,+EAA+E,EACjF,GAAG,CACJ,CAAC;gBACF,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,GAAG,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;YAClC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare class OpQueue {
2
+ private onError?;
3
+ private queue;
4
+ constructor(onError?: ((err: unknown) => void) | undefined);
5
+ run<T>(fn: () => Promise<T>): Promise<T>;
6
+ }
7
+ //# sourceMappingURL=op-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"op-queue.d.ts","sourceRoot":"","sources":["../src/op-queue.ts"],"names":[],"mappings":"AAAA,qBAAa,OAAO;IAGN,OAAO,CAAC,OAAO,CAAC;IAF5B,OAAO,CAAC,KAAK,CAAqB;IAElC,YAAoB,OAAO,CAAC,GAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,aAAA,EAAI;IAElD,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAoB7C;CACF"}
@@ -0,0 +1,29 @@
1
+ export class OpQueue {
2
+ onError;
3
+ queue = Promise.resolve();
4
+ constructor(onError) {
5
+ this.onError = onError;
6
+ }
7
+ async run(fn) {
8
+ const prev = this.queue;
9
+ let resolve;
10
+ this.queue = new Promise((res) => {
11
+ resolve = res;
12
+ });
13
+ try {
14
+ await prev.catch(() => { });
15
+ const result = await fn();
16
+ return result;
17
+ }
18
+ catch (err) {
19
+ if (this.onError) {
20
+ this.onError(err);
21
+ }
22
+ throw err;
23
+ }
24
+ finally {
25
+ resolve();
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=op-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"op-queue.js","sourceRoot":"","sources":["../src/op-queue.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,OAAO;IAGE,OAAO;IAFnB,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAElC,YAAoB,OAAgC;uBAAhC,OAAO;IAA4B,CAAC;IAExD,KAAK,CAAC,GAAG,CAAI,EAAoB;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,OAA8D,CAAC;QAEnE,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE;YACrC,OAAO,GAAG,GAAG,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,OAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ export declare const RESOURCE_URI_SCHEME = "semantic-search";
2
+ export declare const RESOURCE_URI_HOST = "indexes";
3
+ export declare const DEFAULT_INDEX_ID = "default";
4
+ export declare function buildIndexBaseUri(indexId?: string): string;
5
+ export declare function buildDocumentResourceUri(documentId: string, indexId?: string): string;
6
+ export declare const INDEX_MANIFEST_URI: string;
7
+ export declare const INDEX_STATS_URI: string;
8
+ export declare const DOCUMENT_RESOURCE_TEMPLATE_URI = "semantic-search://indexes/{indexId}/documents/{documentId}";
9
+ export declare const REGISTERED_RESOURCE_URIS: readonly [string, string];
10
+ //# sourceMappingURL=product.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.d.ts","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,oBAAoB,CAAC;AACrD,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAC3C,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAE1C,wBAAgB,iBAAiB,CAAC,OAAO,SAAmB,GAAG,MAAM,CAEpE;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,SAAmB,GAAG,MAAM,CAE/F;AAED,eAAO,MAAM,kBAAkB,QAAoC,CAAC;AACpE,eAAO,MAAM,eAAe,QAAiC,CAAC;AAC9D,eAAO,MAAM,8BAA8B,+DAAmF,CAAC;AAC/H,eAAO,MAAM,wBAAwB,2BAAiD,CAAC"}
@@ -0,0 +1,14 @@
1
+ export const RESOURCE_URI_SCHEME = 'semantic-search';
2
+ export const RESOURCE_URI_HOST = 'indexes';
3
+ export const DEFAULT_INDEX_ID = 'default';
4
+ export function buildIndexBaseUri(indexId = DEFAULT_INDEX_ID) {
5
+ return `${RESOURCE_URI_SCHEME}://${RESOURCE_URI_HOST}/${encodeURIComponent(indexId)}`;
6
+ }
7
+ export function buildDocumentResourceUri(documentId, indexId = DEFAULT_INDEX_ID) {
8
+ return `${buildIndexBaseUri(indexId)}/documents/${encodeURIComponent(documentId)}`;
9
+ }
10
+ export const INDEX_MANIFEST_URI = `${buildIndexBaseUri()}/manifest`;
11
+ export const INDEX_STATS_URI = `${buildIndexBaseUri()}/stats`;
12
+ export const DOCUMENT_RESOURCE_TEMPLATE_URI = `${RESOURCE_URI_SCHEME}://${RESOURCE_URI_HOST}/{indexId}/documents/{documentId}`;
13
+ export const REGISTERED_RESOURCE_URIS = [INDEX_MANIFEST_URI, INDEX_STATS_URI];
14
+ //# sourceMappingURL=product.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product.js","sourceRoot":"","sources":["../src/product.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AACrD,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAE1C,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAG,gBAAgB;IAC1D,OAAO,GAAG,mBAAmB,MAAM,iBAAiB,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,UAAkB,EAAE,OAAO,GAAG,gBAAgB;IACrF,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,cAAc,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,iBAAiB,EAAE,WAAW,CAAC;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,iBAAiB,EAAE,QAAQ,CAAC;AAC9D,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,mBAAmB,MAAM,iBAAiB,mCAAmC,CAAC;AAC/H,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,kBAAkB,EAAE,eAAe,CAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nacho-labs/mcp-semantic-search",
3
- "version": "0.3.3",
3
+ "version": "0.5.0",
4
4
  "description": "MCP server for semantic search — give Claude Code, Cursor, and other AI tools persistent memory via local Transformers.js or AWS Bedrock embeddings",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -28,8 +28,8 @@
28
28
  "lint": "eslint .",
29
29
  "format": "prettier --write .",
30
30
  "format:check": "prettier --check .",
31
- "test:unit": "node --test test/integration-support.test.mjs test/release-contract.test.mjs",
32
- "test:integration": "npm run build && node --test test/stdio-smoke.test.mjs",
31
+ "test:unit": "npm run build && node --test test/integration-support.test.mjs test/release-contract.test.mjs test/op-queue.test.mjs test/config-init.test.mjs",
32
+ "test:integration": "npm run build && node --test test/stdio-smoke.test.mjs test/corrupt-store.test.mjs",
33
33
  "test": "npm run test:unit",
34
34
  "clean": "rm -rf dist *.tsbuildinfo",
35
35
  "prepublishOnly": "npm run build",
@@ -65,25 +65,24 @@
65
65
  "url": "git+https://github.com/Nacho-Labs-LLC/mcp-semantic-search.git"
66
66
  },
67
67
  "dependencies": {
68
- "@modelcontextprotocol/sdk": "^1.30.0",
69
- "@nacho-labs/nachos-embeddings": "^0.5.1",
70
- "zod": "^4.4.3"
68
+ "@modelcontextprotocol/sdk": "^1.32.2",
69
+ "@nacho-labs/nachos-embeddings": "^0.6.0",
70
+ "zod": "^4.6.7"
71
71
  },
72
72
  "optionalDependencies": {
73
- "@aws-sdk/client-bedrock-runtime": "^3.1101.0"
73
+ "@aws-sdk/client-bedrock-runtime": "^3.1161.0"
74
74
  },
75
75
  "overrides": {
76
- "adm-zip": "0.6.0",
77
- "sharp": "0.35.3"
76
+ "adm-zip": "0.6.1",
77
+ "sharp": "0.35.5"
78
78
  },
79
79
  "devDependencies": {
80
- "@aws-sdk/client-bedrock-runtime": "^3.1101.0",
81
- "@babel/core": "^7.29.7",
82
- "@babel/eslint-parser": "^7.29.7",
83
- "@babel/preset-typescript": "^7.29.7",
84
- "@eslint/js": "^9.39.5",
85
- "@types/node": "^26.1.2",
86
- "eslint": "^9.39.5",
80
+ "@aws-sdk/client-bedrock-runtime": "^3.1161.0",
81
+ "@babel/core": "^8.0.10",
82
+ "@babel/eslint-parser": "^8.0.1",
83
+ "@eslint/js": "^10.0.1",
84
+ "@types/node": "^26.6.6",
85
+ "eslint": "^10.14.0",
87
86
  "prettier": "^3.9.6",
88
87
  "typescript": "^7.0.2"
89
88
  }
package/server.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "name": "io.github.nacho-labs-llc/mcp-semantic-search",
4
4
  "description": "Local semantic search for AI coding tools. Index decisions, patterns, and context — recall them by meaning, not keywords. Powered by nachos-embeddings (Transformers.js). No API keys, no cloud, no costs.",
5
5
  "title": "Semantic Search MCP Server",
6
- "version": "0.3.2",
6
+ "version": "0.5.0",
7
7
  "repository": {
8
8
  "url": "https://github.com/nacho-labs-llc/mcp-semantic-search",
9
9
  "source": "github"
@@ -12,7 +12,7 @@
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "@nacho-labs/mcp-semantic-search",
15
- "version": "0.3.2",
15
+ "version": "0.5.0",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  },
@@ -40,7 +40,14 @@
40
40
  },
41
41
  {
42
42
  "name": "MCP_SEMANTIC_CACHE_DIR",
43
- "description": "Model cache directory. Defaults to .cache/transformers.",
43
+ "description": "Model cache directory. Defaults to the nachos-embeddings per-user cache ($NACHOS_EMBEDDINGS_CACHE, else XDG, else ~/.cache/nachos-embeddings).",
44
+ "isRequired": false,
45
+ "isSecret": false,
46
+ "format": "string"
47
+ },
48
+ {
49
+ "name": "MCP_SEMANTIC_ON_CORRUPT_STORE",
50
+ "description": "What to do when the store file is corrupt: throw (exit with an error) or quarantine (rename the file aside and start empty). Defaults to throw.",
44
51
  "isRequired": false,
45
52
  "isSecret": false,
46
53
  "format": "string"