@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 +27 -7
- package/dist/config.d.ts +30 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +52 -0
- package/dist/config.js.map +1 -0
- package/dist/index.js +218 -151
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +23 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +46 -0
- package/dist/init.js.map +1 -0
- package/dist/op-queue.d.ts +7 -0
- package/dist/op-queue.d.ts.map +1 -0
- package/dist/op-queue.js +29 -0
- package/dist/op-queue.js.map +1 -0
- package/dist/product.d.ts +10 -0
- package/dist/product.d.ts.map +1 -0
- package/dist/product.js +14 -0
- package/dist/product.js.map +1 -0
- package/package.json +15 -16
- package/server.json +10 -3
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
|
|
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
|
|
107
|
-
|
|
|
108
|
-
| `MCP_SEMANTIC_STORE`
|
|
109
|
-
| `MCP_SEMANTIC_SIMILARITY`
|
|
110
|
-
| `MCP_SEMANTIC_MODEL`
|
|
111
|
-
| `MCP_SEMANTIC_CACHE_DIR`
|
|
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
|
|
package/dist/config.d.ts
ADDED
|
@@ -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 {
|
|
6
|
+
import { SemanticSearch } from '@nacho-labs/nachos-embeddings';
|
|
6
7
|
import { resolve } from 'node:path';
|
|
7
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
79
|
-
|
|
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
|
-
|
|
127
|
-
|
|
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
|
|
130
|
-
return
|
|
86
|
+
function getResourceModelLabel() {
|
|
87
|
+
return config.provider === 'bedrock' ? config.bedrockModel : config.model;
|
|
131
88
|
}
|
|
132
|
-
function
|
|
133
|
-
|
|
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
|
|
136
|
-
|
|
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
|
|
139
|
-
return
|
|
105
|
+
function renderJsonResource(uri, value) {
|
|
106
|
+
return {
|
|
107
|
+
contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(value, null, 2) }],
|
|
108
|
+
};
|
|
140
109
|
}
|
|
141
|
-
function
|
|
142
|
-
return
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
const
|
|
170
|
-
const
|
|
171
|
-
|
|
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
|
-
|
|
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
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
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
|
|
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
|
-
|
|
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) =>
|
|
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
|
|
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
|
|
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
|
package/dist/init.js.map
ADDED
|
@@ -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 @@
|
|
|
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"}
|
package/dist/op-queue.js
ADDED
|
@@ -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"}
|
package/dist/product.js
ADDED
|
@@ -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
|
+
"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.
|
|
69
|
-
"@nacho-labs/nachos-embeddings": "^0.
|
|
70
|
-
"zod": "^4.
|
|
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.
|
|
73
|
+
"@aws-sdk/client-bedrock-runtime": "^3.1161.0"
|
|
74
74
|
},
|
|
75
75
|
"overrides": {
|
|
76
|
-
"adm-zip": "0.6.
|
|
77
|
-
"sharp": "0.35.
|
|
76
|
+
"adm-zip": "0.6.1",
|
|
77
|
+
"sharp": "0.35.5"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
80
|
-
"@aws-sdk/client-bedrock-runtime": "^3.
|
|
81
|
-
"@babel/core": "^
|
|
82
|
-
"@babel/eslint-parser": "^
|
|
83
|
-
"@
|
|
84
|
-
"@
|
|
85
|
-
"
|
|
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.
|
|
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.
|
|
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
|
|
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"
|