@nacho-labs/mcp-semantic-search 0.3.1 → 0.3.3

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/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Nacho Labs LLC
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nacho Labs LLC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,174 +1,198 @@
1
- # @nacho-labs/mcp-semantic-search
2
-
3
- MCP server that gives AI coding tools persistent semantic memory. Index
4
- decisions, patterns, and project context — recall them by meaning, not keywords.
5
-
6
- Powered by [@nacho-labs/nachos-embeddings](https://github.com/nacho-labs-llc/nachos-embeddings).
7
- Runs entirely locally with [Transformers.js](https://huggingface.co/docs/transformers.js) —
8
- no API keys, no cloud, no costs.
9
-
10
- ## Prerequisites
11
-
12
- - **Node.js 18+**
13
- - **Internet on first run** to download the embedding model (~25MB, cached permanently)
14
-
15
- ## Quick start
16
-
17
- ### Claude Code
18
-
19
- ```bash
20
- claude mcp add --transport stdio semantic-search -- npx @nacho-labs/mcp-semantic-search
21
- ```
22
-
23
- ### Cursor / VS Code / any MCP client
24
-
25
- Add to your MCP config (`.mcp.json`, `mcp.json`, or client-specific config):
26
-
27
- ```json
28
- {
29
- "mcpServers": {
30
- "semantic-search": {
31
- "type": "stdio",
32
- "command": "npx",
33
- "args": ["@nacho-labs/mcp-semantic-search"]
34
- }
35
- }
36
- }
37
- ```
38
-
39
- That's it. Your AI tool now has six semantic memory tools.
40
-
41
- ## Tools
42
-
43
- | Tool | Description |
44
- | ---- | ----------- |
45
- | `semantic_search` | Search indexed documents by meaning |
46
- | `semantic_index` | Add a document to the index |
47
- | `semantic_index_batch` | Add multiple documents at once |
48
- | `semantic_remove` | Remove a document by ID |
49
- | `semantic_stats` | Get index size, store location, and config |
50
- | `semantic_clear` | Remove all documents (requires confirmation) |
51
-
52
- ## What it does
53
-
54
- ```text
55
- You ask Claude: "How do we handle rate limiting?"
56
- |
57
- Claude calls: semantic_search("rate limiting")
58
- |
59
- Server embeds: query -> 384-dimension vector
60
- |
61
- Cosine search: against all indexed vectors
62
- |
63
- Returns: "We throttle API requests using sliding windows..."
64
- (matched by meaning, not keywords)
65
- ```
66
-
67
- The embedding model understands meaning:
68
-
69
- | Query | Finds |
70
- | ----- | ----- |
71
- | "rate limiting" | "We throttle API requests using sliding windows" |
72
- | "how to deploy" | "Production runs via docker compose up with..." |
73
- | "error handling" | "We use Result types instead of try/catch for..." |
74
-
75
- ## What to index
76
-
77
- High-value content for project memory:
78
-
79
- **Architecture decisions** — "We chose PostgreSQL over DynamoDB because we need
80
- complex joins for the reporting module."
81
-
82
- **Code patterns** — "Authentication middleware is in src/middleware/auth.ts.
83
- Uses JWT with RS256, tokens expire after 1 hour, refresh tokens after 30 days."
84
-
85
- **Conventions** — "All API endpoints return { data, error, meta } shape.
86
- Errors use RFC 7807 problem details format."
87
-
88
- **Debugging insights** — "If the worker queue backs up, check Redis memory.
89
- The default maxmemory-policy is noeviction which causes write failures."
90
-
91
- ## Configuration
92
-
93
- ### CLI arguments
94
-
95
- ```bash
96
- npx @nacho-labs/mcp-semantic-search \
97
- --store /path/to/store.json \
98
- --similarity 0.5 \
99
- --model Xenova/all-mpnet-base-v2 \
100
- --cache-dir /tmp/models
101
- ```
102
-
103
- ### Environment variables
104
-
105
- | Variable | Description | Default |
106
- | -------- | ----------- | ------- |
107
- | `MCP_SEMANTIC_STORE` | Path to persistence file | `.semantic-store.json` |
108
- | `MCP_SEMANTIC_SIMILARITY` | Min similarity threshold (0-1) | `0.6` |
109
- | `MCP_SEMANTIC_MODEL` | Embedding model | `Xenova/all-MiniLM-L6-v2` |
110
- | `MCP_SEMANTIC_CACHE_DIR` | Model cache directory | `.cache/transformers` |
111
-
112
- ### With environment variables in MCP config
113
-
114
- ```json
115
- {
116
- "mcpServers": {
117
- "semantic-search": {
118
- "type": "stdio",
119
- "command": "npx",
120
- "args": ["@nacho-labs/mcp-semantic-search"],
121
- "env": {
122
- "MCP_SEMANTIC_STORE": "/home/user/.semantic-memory/project.json",
123
- "MCP_SEMANTIC_SIMILARITY": "0.5"
124
- }
125
- }
126
- }
127
- }
128
- ```
129
-
130
- ## Performance
131
-
132
- | Operation | Time |
133
- | --------- | ---- |
134
- | Server startup (model cached) | ~500ms |
135
- | Server startup (first run) | ~2-5s |
136
- | Index a document | ~10-50ms |
137
- | Search 1000 documents | ~5-10ms |
138
-
139
- **Memory:** ~100MB for model + ~1.5KB per document.
140
-
141
- The in-memory store works well up to ~10K documents. Beyond that, consider a
142
- dedicated vector database.
143
-
144
- ## Persistence
145
-
146
- The index is saved to disk automatically after every write operation (index,
147
- remove, clear). On startup, the server loads the existing store if present.
148
-
149
- Default location: `.semantic-store.json` in the working directory.
150
-
151
- ## How it's built
152
-
153
- This MCP server is a thin wrapper around two packages:
154
-
155
- - **[@nacho-labs/nachos-embeddings](https://www.npmjs.com/package/@nacho-labs/nachos-embeddings)** — Local vector embeddings and semantic search
156
- - **[@modelcontextprotocol/sdk](https://www.npmjs.com/package/@modelcontextprotocol/sdk)** — Official MCP TypeScript SDK
157
-
158
- The embeddings package can also be used directly in your own code. See its
159
- [README](https://github.com/nacho-labs-llc/nachos-embeddings) for the
160
- standalone API.
161
-
162
- ## Development
163
-
164
- ```bash
165
- git clone https://github.com/nacho-labs-llc/mcp-semantic-search.git
166
- cd mcp-semantic-search
167
- npm install
168
- npm run build
169
- npm start
170
- ```
171
-
172
- ## License
173
-
174
- MIT
1
+ # @nacho-labs/mcp-semantic-search
2
+
3
+ MCP server that gives AI coding tools persistent semantic memory. Index
4
+ decisions, patterns, and project context — recall them by meaning, not keywords.
5
+
6
+ Powered by [@nacho-labs/nachos-embeddings](https://github.com/nacho-labs-llc/nachos-embeddings).
7
+ Runs entirely locally with [Transformers.js](https://huggingface.co/docs/transformers.js) —
8
+ no API keys, no cloud, no costs.
9
+
10
+ ## Prerequisites
11
+
12
+ - **Node.js 20.9+**
13
+ - **Internet on first run** to download the embedding model (~25MB, cached permanently)
14
+
15
+ ## Quick start
16
+
17
+ ### Claude Code
18
+
19
+ ```bash
20
+ claude mcp add --transport stdio semantic-search -- npx @nacho-labs/mcp-semantic-search
21
+ ```
22
+
23
+ ### Cursor / VS Code / any MCP client
24
+
25
+ Add to your MCP config (`.mcp.json`, `mcp.json`, or client-specific config):
26
+
27
+ ```json
28
+ {
29
+ "mcpServers": {
30
+ "semantic-search": {
31
+ "type": "stdio",
32
+ "command": "npx",
33
+ "args": ["@nacho-labs/mcp-semantic-search"]
34
+ }
35
+ }
36
+ }
37
+ ```
38
+
39
+ That's it. Your AI tool now has seven semantic memory tools.
40
+
41
+ ## Tools
42
+
43
+ | Tool | Description |
44
+ | ---------------------- | ------------------------------------------------------ |
45
+ | `semantic_health` | Check server health, metrics, and active configuration |
46
+ | `semantic_search` | Search indexed documents by meaning |
47
+ | `semantic_index` | Add a document to the index |
48
+ | `semantic_index_batch` | Add multiple documents at once |
49
+ | `semantic_remove` | Remove a document by ID |
50
+ | `semantic_stats` | Get index size, store location, and config |
51
+ | `semantic_clear` | Remove all documents (requires confirmation) |
52
+
53
+ ## What it does
54
+
55
+ ```text
56
+ You ask Claude: "How do we handle rate limiting?"
57
+ |
58
+ Claude calls: semantic_search("rate limiting")
59
+ |
60
+ Server embeds: query -> 384-dimension vector
61
+ |
62
+ Cosine search: against all indexed vectors
63
+ |
64
+ Returns: "We throttle API requests using sliding windows..."
65
+ (matched by meaning, not keywords)
66
+ ```
67
+
68
+ The embedding model understands meaning:
69
+
70
+ | Query | Finds |
71
+ | ---------------- | ------------------------------------------------- |
72
+ | "rate limiting" | "We throttle API requests using sliding windows" |
73
+ | "how to deploy" | "Production runs via docker compose up with..." |
74
+ | "error handling" | "We use Result types instead of try/catch for..." |
75
+
76
+ ## What to index
77
+
78
+ High-value content for project memory:
79
+
80
+ **Architecture decisions** — "We chose PostgreSQL over DynamoDB because we need
81
+ complex joins for the reporting module."
82
+
83
+ **Code patterns** — "Authentication middleware is in src/middleware/auth.ts.
84
+ Uses JWT with RS256, tokens expire after 1 hour, refresh tokens after 30 days."
85
+
86
+ **Conventions** — "All API endpoints return { data, error, meta } shape.
87
+ Errors use RFC 7807 problem details format."
88
+
89
+ **Debugging insights** — "If the worker queue backs up, check Redis memory.
90
+ The default maxmemory-policy is noeviction which causes write failures."
91
+
92
+ ## Configuration
93
+
94
+ ### CLI arguments
95
+
96
+ ```bash
97
+ npx @nacho-labs/mcp-semantic-search \
98
+ --store /path/to/store.json \
99
+ --similarity 0.5 \
100
+ --model Xenova/all-mpnet-base-v2 \
101
+ --cache-dir /tmp/models
102
+ ```
103
+
104
+ ### Environment variables
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` |
112
+
113
+ ### With environment variables in MCP config
114
+
115
+ ```json
116
+ {
117
+ "mcpServers": {
118
+ "semantic-search": {
119
+ "type": "stdio",
120
+ "command": "npx",
121
+ "args": ["@nacho-labs/mcp-semantic-search"],
122
+ "env": {
123
+ "MCP_SEMANTIC_STORE": "/home/user/.semantic-memory/project.json",
124
+ "MCP_SEMANTIC_SIMILARITY": "0.5"
125
+ }
126
+ }
127
+ }
128
+ }
129
+ ```
130
+
131
+ ## Performance
132
+
133
+ | Operation | Time |
134
+ | ----------------------------- | -------- |
135
+ | Server startup (model cached) | ~500ms |
136
+ | Server startup (first run) | ~2-5s |
137
+ | Index a document | ~10-50ms |
138
+ | Search 1000 documents | ~5-10ms |
139
+
140
+ **Memory:** ~100MB for model + ~1.5KB per document.
141
+
142
+ The in-memory store works well up to ~10K documents. Beyond that, consider a
143
+ dedicated vector database.
144
+
145
+ ## Persistence
146
+
147
+ The index is saved to disk automatically after every write operation (index,
148
+ remove, clear). On startup, the server loads the existing store if present.
149
+
150
+ Default location: `.semantic-store.json` in the working directory.
151
+
152
+ ## How it's built
153
+
154
+ This MCP server is a thin wrapper around two packages:
155
+
156
+ - **[@nacho-labs/nachos-embeddings](https://www.npmjs.com/package/@nacho-labs/nachos-embeddings)** — Local vector embeddings and semantic search
157
+ - **[@modelcontextprotocol/sdk](https://www.npmjs.com/package/@modelcontextprotocol/sdk)** — Official MCP TypeScript SDK
158
+
159
+ The embeddings package can also be used directly in your own code. See its
160
+ [README](https://github.com/nacho-labs-llc/nachos-embeddings) for the
161
+ standalone API.
162
+
163
+ ## Development
164
+
165
+ ```bash
166
+ git clone https://github.com/nacho-labs-llc/mcp-semantic-search.git
167
+ cd mcp-semantic-search
168
+ npm install
169
+ npm run build
170
+ npm start
171
+ ```
172
+
173
+ ### Quality checks
174
+
175
+ ```bash
176
+ npm run format:check
177
+ npm run lint
178
+ npm run typecheck
179
+ npm test
180
+ npm run test:integration
181
+ ```
182
+
183
+ `npm test` runs deterministic unit/contract tests only; it does not build the
184
+ server or download a model.
185
+
186
+ `npm run test:integration` runs the network/model-backed compiled MCP stdio
187
+ smoke. It builds `dist/`, starts the server with `StdioClientTransport`, lists
188
+ tools, calls `semantic_health`, then indexes and searches a real document.
189
+
190
+ The integration smoke uses the real default Transformers.js provider. On its
191
+ first run, it needs internet access to download the model (about 25 MB); later
192
+ runs can reuse the configured model cache. The release CI workflow caches that
193
+ directory between runs and passes the same explicit cache path to the smoke, but
194
+ network availability is still required when a cache miss occurs.
195
+
196
+ ## License
197
+
198
+ MIT
package/dist/index.js CHANGED
@@ -4,32 +4,45 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
4
4
  import { z } from 'zod';
5
5
  import { EnhancedSemanticSearch } from '@nacho-labs/nachos-embeddings';
6
6
  import { resolve } from 'node:path';
7
+ const VERSION = '0.3.2';
8
+ const MAX_LENGTH = 1_000_000;
9
+ const MAX_ITEMS = 100;
10
+ const metadataValueSchema = z.union([
11
+ z.string().max(MAX_LENGTH),
12
+ z.number(),
13
+ z.boolean(),
14
+ z.array(z.string().max(MAX_LENGTH)).max(MAX_ITEMS),
15
+ ]);
7
16
  function getConfig() {
8
17
  const args = process.argv.slice(2);
9
18
  function getArg(name, fallback) {
10
19
  const idx = args.indexOf(`--${name}`);
11
20
  return idx !== -1 && idx + 1 < args.length ? args[idx + 1] : fallback;
12
21
  }
22
+ function getString(name, fallback) {
23
+ const envName = `MCP_SEMANTIC_${name.toUpperCase().replace(/-/g, '_')}`;
24
+ return process.env[envName] ?? getArg(name, fallback);
25
+ }
13
26
  function getBool(name, fallback) {
14
- const value = process.env[`MCP_SEMANTIC_${name.toUpperCase()}`] ?? getArg(name, fallback.toString());
27
+ const value = getString(name, fallback.toString());
15
28
  return value === 'true' || value === '1';
16
29
  }
17
30
  return {
18
- storePath: resolve(process.env.MCP_SEMANTIC_STORE ?? getArg('store', '.semantic-store.json')),
19
- minSimilarity: parseFloat(process.env.MCP_SEMANTIC_SIMILARITY ?? getArg('similarity', '0.4')),
20
- model: process.env.MCP_SEMANTIC_MODEL ?? getArg('model', 'Xenova/all-MiniLM-L6-v2'),
21
- cacheDir: process.env.MCP_SEMANTIC_CACHE_DIR ?? getArg('cache-dir', '.cache/transformers'),
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'),
22
35
  autoChunk: getBool('auto-chunk', true),
23
36
  deduplicateExact: getBool('deduplicate-exact', true),
24
- deduplicateSimilarity: parseFloat(process.env.MCP_SEMANTIC_DEDUPLICATE_SIMILARITY ?? getArg('deduplicate-similarity', '0.95')),
37
+ deduplicateSimilarity: parseFloat(getString('deduplicate-similarity', '0.95')),
25
38
  temporalBoost: getBool('temporal-boost', true),
26
39
  verbose: getBool('verbose', false),
27
40
  // Bedrock provider settings
28
- provider: (process.env.MCP_SEMANTIC_PROVIDER ?? getArg('provider', 'transformers')),
29
- bedrockRegion: process.env.MCP_SEMANTIC_BEDROCK_REGION ?? getArg('bedrock-region', 'us-east-1'),
30
- bedrockModel: process.env.MCP_SEMANTIC_BEDROCK_MODEL ?? getArg('bedrock-model', 'amazon.titan-embed-text-v2:0'),
31
- bedrockProfile: process.env.MCP_SEMANTIC_BEDROCK_PROFILE ?? getArg('bedrock-profile', ''),
32
- bedrockDimensions: parseInt(process.env.MCP_SEMANTIC_BEDROCK_DIMENSIONS ?? getArg('bedrock-dimensions', '1024'), 10),
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),
33
46
  };
34
47
  }
35
48
  async function createProvider(config) {
@@ -67,25 +80,31 @@ const search = new EnhancedSemanticSearch({
67
80
  temporalBoost: config.temporalBoost,
68
81
  verbose: config.verbose,
69
82
  });
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
+ }
70
100
  async function initWithRetry(maxRetries = 3) {
71
101
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
72
102
  try {
73
- if (config.verbose) {
74
- console.error(`[Init] Attempt ${attempt}/${maxRetries}`);
75
- }
76
- await search.init();
77
- if (config.verbose) {
78
- console.error(`[Init] Loaded ${search.size()} documents`);
79
- }
103
+ await initializeSearch(attempt, maxRetries);
80
104
  return;
81
105
  }
82
106
  catch (err) {
83
- if (attempt === maxRetries) {
84
- console.error('[Init] Failed after', maxRetries, 'attempts. Internet required on first run (~25MB download).', err);
85
- throw err;
86
- }
87
- console.error(`[Init] Retry in 2s...`, err);
88
- await new Promise((r) => setTimeout(r, 2000));
107
+ await handleInitializationFailure(attempt, maxRetries, err);
89
108
  }
90
109
  }
91
110
  }
@@ -95,76 +114,111 @@ try {
95
114
  catch {
96
115
  process.exit(1);
97
116
  }
117
+ function formatUptime(seconds) {
118
+ if (seconds < 60) {
119
+ return `${seconds}s`;
120
+ }
121
+ if (seconds < 3600) {
122
+ return `${Math.floor(seconds / 60)}m`;
123
+ }
124
+ return `${Math.floor(seconds / 3600)}h ${Math.floor((seconds % 3600) / 60)}m`;
125
+ }
126
+ function matchesKind(meta, kind) {
127
+ return !kind || meta?.kind === kind;
128
+ }
129
+ function matchesTags(meta, tags) {
130
+ return !tags || Boolean(meta?.tags && tags.some((tag) => meta.tags?.includes(tag)));
131
+ }
132
+ function hasValidSince(parsedSince) {
133
+ return parsedSince !== undefined && !isNaN(parsedSince);
134
+ }
135
+ function isBeforeSince(meta, parsedSince) {
136
+ return Boolean(meta?.timestamp && meta.timestamp < parsedSince);
137
+ }
138
+ function matchesSince(meta, parsedSince) {
139
+ return !hasValidSince(parsedSince) || !isBeforeSince(meta, parsedSince);
140
+ }
141
+ function matchesMetadata(meta, kind, tags, parsedSince) {
142
+ return matchesKind(meta, kind) && matchesTags(meta, tags) && matchesSince(meta, parsedSince);
143
+ }
98
144
  class OpQueue {
99
145
  queue = Promise.resolve();
100
146
  async run(fn) {
101
147
  const prev = this.queue;
102
148
  let resolve;
103
- let reject;
104
- this.queue = new Promise((res, rej) => {
149
+ this.queue = new Promise((res) => {
105
150
  resolve = res;
106
- reject = rej;
107
151
  });
108
152
  try {
109
- await prev;
153
+ await prev.catch(() => { });
110
154
  const result = await fn();
111
- resolve(result);
112
155
  return result;
113
156
  }
114
157
  catch (err) {
115
- reject(err);
116
158
  metrics.errors++;
117
159
  throw err;
118
160
  }
161
+ finally {
162
+ resolve();
163
+ }
119
164
  }
120
165
  }
121
166
  const opQueue = new OpQueue();
122
- const server = new McpServer({ name: 'mcp-semantic-search-enhanced', version: '0.2.0' }, { capabilities: { logging: {} } });
123
- server.registerTool('semantic_health', {
124
- title: 'Health Check',
125
- description: 'Server status, metrics, and configuration',
126
- inputSchema: z.object({}),
127
- }, async () => {
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}`;
172
+ return {
173
+ content: [
174
+ {
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'),
197
+ },
198
+ ],
199
+ };
200
+ }
201
+ async function getHealthResponse() {
128
202
  try {
129
203
  await search.search('test', { limit: 1 });
130
- const uptime = Math.floor((Date.now() - metrics.startTime) / 1000);
131
- const uptimeStr = uptime < 60 ? `${uptime}s` : uptime < 3600 ? `${Math.floor(uptime / 60)}m` : `${Math.floor(uptime / 3600)}h ${Math.floor((uptime % 3600) / 60)}m`;
132
- return {
133
- content: [{
134
- type: 'text',
135
- text: [
136
- '✅ Healthy',
137
- '',
138
- '📊 Metrics:',
139
- ` Documents: ${search.size()}`,
140
- ` Searches: ${metrics.searches}`,
141
- ` Added: ${metrics.documentsAdded}`,
142
- ` Removed: ${metrics.documentsRemoved}`,
143
- ` Errors: ${metrics.errors}`,
144
- ` Uptime: ${uptimeStr}`,
145
- '',
146
- '⚙️ Config:',
147
- ` Provider: ${config.provider}`,
148
- ` Model: ${config.provider === 'bedrock' ? config.bedrockModel : config.model}`,
149
- ` ${config.provider === 'bedrock' ? `Region: ${config.bedrockRegion}` : `Cache: ${config.cacheDir}`}`,
150
- ` Store: ${config.storePath}`,
151
- ` Min similarity: ${config.minSimilarity}`,
152
- ` Auto-chunk: ${config.autoChunk}`,
153
- ` Dedup: exact=${config.deduplicateExact}, fuzzy=${config.deduplicateSimilarity}`,
154
- ` Temporal boost: ${config.temporalBoost}`,
155
- ].join('\n'),
156
- }],
157
- };
204
+ return buildHealthResponse();
158
205
  }
159
206
  catch (err) {
160
207
  return {
161
- content: [{
208
+ content: [
209
+ {
162
210
  type: 'text',
163
211
  text: `❌ Unhealthy: ${err instanceof Error ? err.message : String(err)}`,
164
- }],
212
+ },
213
+ ],
165
214
  };
166
215
  }
167
- });
216
+ }
217
+ server.registerTool('semantic_health', {
218
+ title: 'Health Check',
219
+ description: 'Server status, metrics, and configuration',
220
+ inputSchema: z.object({}),
221
+ }, getHealthResponse);
168
222
  server.registerTool('semantic_search', {
169
223
  title: 'Semantic Search',
170
224
  description: 'Search by meaning with optional metadata filters',
@@ -179,27 +233,22 @@ server.registerTool('semantic_search', {
179
233
  }, async ({ query, limit, minSimilarity, kind, tags, since }) => {
180
234
  return opQueue.run(async () => {
181
235
  const startTime = Date.now();
236
+ const parsedSince = since ? Date.parse(since) : undefined;
182
237
  const results = await search.search(query, {
183
238
  limit,
184
239
  ...(minSimilarity !== undefined && { minSimilarity }),
185
- filter: (meta) => {
186
- if (kind && meta?.kind !== kind)
187
- return false;
188
- if (tags && (!meta?.tags || !tags.some((t) => meta.tags?.includes(t))))
189
- return false;
190
- if (since && meta?.timestamp && meta.timestamp < Date.parse(since))
191
- return false;
192
- return true;
193
- },
240
+ filter: (meta) => matchesMetadata(meta, kind, tags, parsedSince),
194
241
  });
195
242
  metrics.searches++;
196
243
  const elapsed = Date.now() - startTime;
197
244
  if (results.length === 0) {
198
245
  return {
199
- content: [{
246
+ content: [
247
+ {
200
248
  type: 'text',
201
249
  text: `🔍 No results for "${query}" (${elapsed}ms)`,
202
- }],
250
+ },
251
+ ],
203
252
  };
204
253
  }
205
254
  const formatted = results
@@ -210,10 +259,12 @@ server.registerTool('semantic_search', {
210
259
  })
211
260
  .join('\n\n');
212
261
  return {
213
- content: [{
262
+ content: [
263
+ {
214
264
  type: 'text',
215
265
  text: `🔍 Found ${results.length} in ${elapsed}ms:\n\n${formatted}`,
216
- }],
266
+ },
267
+ ],
217
268
  };
218
269
  });
219
270
  });
@@ -223,16 +274,17 @@ server.registerTool('semantic_index', {
223
274
  inputSchema: z.object({
224
275
  id: z.string().describe('Unique ID (e.g., "auth-pattern", "adr-012")'),
225
276
  text: z.string().describe('Content to index'),
226
- metadata: z.record(z.union([z.string(), z.number(), z.boolean(), z.array(z.string())])).optional().describe('Optional metadata'),
277
+ metadata: z.record(z.string(), metadataValueSchema).optional().describe('Optional metadata'),
227
278
  }),
228
279
  }, async ({ id, text, metadata }) => {
229
280
  return opQueue.run(async () => {
230
281
  const startTime = Date.now();
231
- await search.addDocument({ id, text, metadata: metadata });
282
+ await search.addDocument({ id, text, metadata });
232
283
  metrics.documentsAdded++;
233
284
  const elapsed = Date.now() - startTime;
234
285
  return {
235
- content: [{
286
+ content: [
287
+ {
236
288
  type: 'text',
237
289
  text: [
238
290
  `✅ Indexed "${id}" (${elapsed}ms)`,
@@ -240,7 +292,8 @@ server.registerTool('semantic_index', {
240
292
  `💾 Saved to ${config.storePath}`,
241
293
  `🔍 Test: semantic_search("${id}")`,
242
294
  ].join('\n'),
243
- }],
295
+ },
296
+ ],
244
297
  };
245
298
  });
246
299
  });
@@ -248,11 +301,13 @@ server.registerTool('semantic_index_batch', {
248
301
  title: 'Batch Index',
249
302
  description: 'Add multiple documents at once',
250
303
  inputSchema: z.object({
251
- documents: z.array(z.object({
252
- id: z.string(),
253
- text: z.string(),
254
- metadata: z.record(z.union([z.string(), z.number(), z.boolean(), z.array(z.string())])).optional(),
255
- })),
304
+ documents: z
305
+ .array(z.object({
306
+ id: z.string().max(MAX_LENGTH),
307
+ text: z.string().max(MAX_LENGTH),
308
+ metadata: z.record(z.string(), metadataValueSchema).optional(),
309
+ }))
310
+ .max(MAX_ITEMS),
256
311
  }),
257
312
  }, async ({ documents }) => {
258
313
  return opQueue.run(async () => {
@@ -261,14 +316,16 @@ server.registerTool('semantic_index_batch', {
261
316
  metrics.documentsAdded += documents.length;
262
317
  const elapsed = Date.now() - startTime;
263
318
  return {
264
- content: [{
319
+ content: [
320
+ {
265
321
  type: 'text',
266
322
  text: [
267
323
  `✅ Indexed ${documents.length} documents (${elapsed}ms)`,
268
324
  ` ${Math.round(documents.length / (elapsed / 1000))}/sec`,
269
325
  `📊 ${search.size()} documents total`,
270
326
  ].join('\n'),
271
- }],
327
+ },
328
+ ],
272
329
  };
273
330
  });
274
331
  });
@@ -285,12 +342,12 @@ server.registerTool('semantic_remove', {
285
342
  metrics.documentsRemoved++;
286
343
  }
287
344
  return {
288
- content: [{
345
+ content: [
346
+ {
289
347
  type: 'text',
290
- text: removed
291
- ? `✅ Removed "${id}"\n📊 ${search.size()} remaining`
292
- : `⚠️ "${id}" not found`,
293
- }],
348
+ text: removed ? `✅ Removed "${id}"\n📊 ${search.size()} remaining` : `⚠️ "${id}" not found`,
349
+ },
350
+ ],
294
351
  };
295
352
  });
296
353
  });
@@ -299,7 +356,8 @@ server.registerTool('semantic_stats', {
299
356
  description: 'Detailed index information',
300
357
  inputSchema: z.object({}),
301
358
  }, async () => ({
302
- content: [{
359
+ content: [
360
+ {
303
361
  type: 'text',
304
362
  text: [
305
363
  '📊 Index Stats',
@@ -322,7 +380,8 @@ server.registerTool('semantic_stats', {
322
380
  ` Removed: ${metrics.documentsRemoved}`,
323
381
  ` Errors: ${metrics.errors}`,
324
382
  ].join('\n'),
325
- }],
383
+ },
384
+ ],
326
385
  }));
327
386
  server.registerTool('semantic_clear', {
328
387
  title: 'Clear Index',
@@ -333,20 +392,24 @@ server.registerTool('semantic_clear', {
333
392
  }, async ({ confirm }) => {
334
393
  if (!confirm) {
335
394
  return {
336
- content: [{
395
+ content: [
396
+ {
337
397
  type: 'text',
338
398
  text: '⚠️ Cancelled. Set confirm: true to proceed',
339
- }],
399
+ },
400
+ ],
340
401
  };
341
402
  }
342
403
  return opQueue.run(async () => {
343
404
  const count = search.size();
344
405
  await search.clear();
345
406
  return {
346
- content: [{
407
+ content: [
408
+ {
347
409
  type: 'text',
348
410
  text: `✅ Cleared ${count} documents\n💾 Saved to ${config.storePath}`,
349
- }],
411
+ },
412
+ ],
350
413
  };
351
414
  });
352
415
  });
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/package.json CHANGED
@@ -1,74 +1,90 @@
1
- {
2
- "name": "@nacho-labs/mcp-semantic-search",
3
- "version": "0.3.1",
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
- "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
8
- "bin": {
9
- "mcp-semantic-search": "./dist/index.js"
10
- },
11
- "exports": {
12
- ".": {
13
- "types": "./dist/index.d.ts",
14
- "import": "./dist/index.js"
15
- }
16
- },
17
- "files": [
18
- "dist",
19
- "server.json",
20
- "README.md",
21
- "LICENSE"
22
- ],
23
- "scripts": {
24
- "build": "tsc",
25
- "dev": "tsc --watch",
26
- "start": "node dist/index.js",
27
- "typecheck": "tsc --noEmit",
28
- "clean": "rm -rf dist *.tsbuildinfo",
29
- "prepublishOnly": "npm run build",
30
- "version:patch": "npm version patch",
31
- "version:minor": "npm version minor",
32
- "version:major": "npm version major",
33
- "publish:npm": "npm publish --access public",
34
- "release:patch": "npm run version:patch && npm run publish:npm",
35
- "release:minor": "npm run version:minor && npm run publish:npm",
36
- "release:major": "npm run version:major && npm run publish:npm"
37
- },
38
- "keywords": [
39
- "mcp",
40
- "model-context-protocol",
41
- "semantic-search",
42
- "embeddings",
43
- "vector-search",
44
- "claude",
45
- "claude-code",
46
- "ai-memory",
47
- "local",
48
- "privacy",
49
- "bedrock",
50
- "aws"
51
- ],
52
- "author": "Nate Richardson <hello@naterichardson.com> (https://naterichardson.com)",
53
- "license": "MIT",
54
- "engines": {
55
- "node": ">=18.0.0"
56
- },
57
- "repository": {
58
- "type": "git",
59
- "url": "git+https://github.com/nacho-labs-llc/mcp-semantic-search.git"
60
- },
61
- "dependencies": {
62
- "@modelcontextprotocol/sdk": "^1.0.0",
63
- "@nacho-labs/nachos-embeddings": "^0.4.1",
64
- "zod": "^3.23.0"
65
- },
66
- "optionalDependencies": {
67
- "@aws-sdk/client-bedrock-runtime": "^3.0.0"
68
- },
69
- "devDependencies": {
70
- "@aws-sdk/client-bedrock-runtime": "^3.0.0",
71
- "@types/node": "^22.0.0",
72
- "typescript": "^5.7.0"
73
- }
74
- }
1
+ {
2
+ "name": "@nacho-labs/mcp-semantic-search",
3
+ "version": "0.3.3",
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
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "mcp-semantic-search": "dist/index.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "server.json",
20
+ "README.md",
21
+ "LICENSE"
22
+ ],
23
+ "scripts": {
24
+ "build": "tsc",
25
+ "dev": "tsc --watch",
26
+ "start": "node dist/index.js",
27
+ "typecheck": "tsc --noEmit",
28
+ "lint": "eslint .",
29
+ "format": "prettier --write .",
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",
33
+ "test": "npm run test:unit",
34
+ "clean": "rm -rf dist *.tsbuildinfo",
35
+ "prepublishOnly": "npm run build",
36
+ "version:patch": "npm version patch",
37
+ "version:minor": "npm version minor",
38
+ "version:major": "npm version major",
39
+ "publish:npm": "npm publish --access public",
40
+ "release:patch": "npm run version:patch && npm run publish:npm",
41
+ "release:minor": "npm run version:minor && npm run publish:npm",
42
+ "release:major": "npm run version:major && npm run publish:npm"
43
+ },
44
+ "keywords": [
45
+ "mcp",
46
+ "model-context-protocol",
47
+ "semantic-search",
48
+ "embeddings",
49
+ "vector-search",
50
+ "claude",
51
+ "claude-code",
52
+ "ai-memory",
53
+ "local",
54
+ "privacy",
55
+ "bedrock",
56
+ "aws"
57
+ ],
58
+ "author": "Nate Richardson <hello@naterichardson.com> (https://naterichardson.com)",
59
+ "license": "MIT",
60
+ "engines": {
61
+ "node": ">=20.9.0"
62
+ },
63
+ "repository": {
64
+ "type": "git",
65
+ "url": "git+https://github.com/Nacho-Labs-LLC/mcp-semantic-search.git"
66
+ },
67
+ "dependencies": {
68
+ "@modelcontextprotocol/sdk": "^1.30.0",
69
+ "@nacho-labs/nachos-embeddings": "^0.5.1",
70
+ "zod": "^4.4.3"
71
+ },
72
+ "optionalDependencies": {
73
+ "@aws-sdk/client-bedrock-runtime": "^3.1101.0"
74
+ },
75
+ "overrides": {
76
+ "adm-zip": "0.6.0",
77
+ "sharp": "0.35.3"
78
+ },
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",
87
+ "prettier": "^3.9.6",
88
+ "typescript": "^7.0.2"
89
+ }
90
+ }
package/server.json CHANGED
@@ -1,44 +1,86 @@
1
- {
2
- "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
- "name": "io.github.nacho-labs-llc/mcp-semantic-search",
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
- "title": "Semantic Search MCP Server",
6
- "version": "0.1.0",
7
- "repository": {
8
- "url": "https://github.com/nacho-labs-llc/mcp-semantic-search",
9
- "source": "github"
10
- },
11
- "packages": [
12
- {
13
- "registryType": "npm",
14
- "identifier": "@nacho-labs/mcp-semantic-search",
15
- "version": "0.1.0",
16
- "transport": {
17
- "type": "stdio"
18
- },
19
- "environmentVariables": [
20
- {
21
- "name": "MCP_SEMANTIC_STORE",
22
- "description": "Path to the JSON file where the index is persisted. Defaults to .semantic-store.json in the working directory.",
23
- "isRequired": false,
24
- "isSecret": false,
25
- "format": "string"
26
- },
27
- {
28
- "name": "MCP_SEMANTIC_SIMILARITY",
29
- "description": "Minimum similarity threshold (0-1). Defaults to 0.6.",
30
- "isRequired": false,
31
- "isSecret": false,
32
- "format": "string"
33
- },
34
- {
35
- "name": "MCP_SEMANTIC_MODEL",
36
- "description": "Embedding model to use. Defaults to Xenova/all-MiniLM-L6-v2.",
37
- "isRequired": false,
38
- "isSecret": false,
39
- "format": "string"
40
- }
41
- ]
42
- }
43
- ]
44
- }
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.nacho-labs-llc/mcp-semantic-search",
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
+ "title": "Semantic Search MCP Server",
6
+ "version": "0.3.2",
7
+ "repository": {
8
+ "url": "https://github.com/nacho-labs-llc/mcp-semantic-search",
9
+ "source": "github"
10
+ },
11
+ "packages": [
12
+ {
13
+ "registryType": "npm",
14
+ "identifier": "@nacho-labs/mcp-semantic-search",
15
+ "version": "0.3.2",
16
+ "transport": {
17
+ "type": "stdio"
18
+ },
19
+ "environmentVariables": [
20
+ {
21
+ "name": "MCP_SEMANTIC_STORE",
22
+ "description": "Path to the JSON file where the index is persisted. Defaults to .semantic-store.json in the working directory.",
23
+ "isRequired": false,
24
+ "isSecret": false,
25
+ "format": "string"
26
+ },
27
+ {
28
+ "name": "MCP_SEMANTIC_SIMILARITY",
29
+ "description": "Minimum similarity threshold (0-1). Defaults to 0.4.",
30
+ "isRequired": false,
31
+ "isSecret": false,
32
+ "format": "string"
33
+ },
34
+ {
35
+ "name": "MCP_SEMANTIC_MODEL",
36
+ "description": "Embedding model to use. Defaults to Xenova/all-MiniLM-L6-v2.",
37
+ "isRequired": false,
38
+ "isSecret": false,
39
+ "format": "string"
40
+ },
41
+ {
42
+ "name": "MCP_SEMANTIC_CACHE_DIR",
43
+ "description": "Model cache directory. Defaults to .cache/transformers.",
44
+ "isRequired": false,
45
+ "isSecret": false,
46
+ "format": "string"
47
+ },
48
+ {
49
+ "name": "MCP_SEMANTIC_PROVIDER",
50
+ "description": "Embedding provider: transformers or bedrock. Defaults to transformers.",
51
+ "isRequired": false,
52
+ "isSecret": false,
53
+ "format": "string"
54
+ },
55
+ {
56
+ "name": "MCP_SEMANTIC_BEDROCK_REGION",
57
+ "description": "AWS region for the Bedrock provider. Defaults to us-east-1.",
58
+ "isRequired": false,
59
+ "isSecret": false,
60
+ "format": "string"
61
+ },
62
+ {
63
+ "name": "MCP_SEMANTIC_BEDROCK_MODEL",
64
+ "description": "Bedrock embedding model ID. Defaults to amazon.titan-embed-text-v2:0.",
65
+ "isRequired": false,
66
+ "isSecret": false,
67
+ "format": "string"
68
+ },
69
+ {
70
+ "name": "MCP_SEMANTIC_BEDROCK_PROFILE",
71
+ "description": "Optional AWS shared-credentials profile name for Bedrock.",
72
+ "isRequired": false,
73
+ "isSecret": false,
74
+ "format": "string"
75
+ },
76
+ {
77
+ "name": "MCP_SEMANTIC_BEDROCK_DIMENSIONS",
78
+ "description": "Optional Bedrock embedding dimensions override. Defaults to 1024.",
79
+ "isRequired": false,
80
+ "isSecret": false,
81
+ "format": "string"
82
+ }
83
+ ]
84
+ }
85
+ ]
86
+ }