@nacho-labs/mcp-semantic-search 0.3.1 → 0.4.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/LICENSE +21 -21
- package/README.md +198 -174
- package/dist/index.js +240 -50
- package/dist/index.js.map +1 -1
- 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 +89 -74
- package/server.json +86 -44
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
|
|
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
|
|
40
|
-
|
|
41
|
-
## Tools
|
|
42
|
-
|
|
43
|
-
| Tool
|
|
44
|
-
|
|
|
45
|
-
| `
|
|
46
|
-
| `
|
|
47
|
-
| `
|
|
48
|
-
| `
|
|
49
|
-
| `
|
|
50
|
-
| `
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
|
71
|
-
|
|
|
72
|
-
| "
|
|
73
|
-
| "
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
--
|
|
99
|
-
--
|
|
100
|
-
--
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
|
107
|
-
|
|
|
108
|
-
| `
|
|
109
|
-
| `
|
|
110
|
-
| `
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
"
|
|
120
|
-
"
|
|
121
|
-
"
|
|
122
|
-
|
|
123
|
-
"
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
|
134
|
-
|
|
|
135
|
-
| Server startup (
|
|
136
|
-
|
|
|
137
|
-
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
- **[@
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
npm
|
|
169
|
-
npm
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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
|
@@ -1,35 +1,50 @@
|
|
|
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
6
|
import { EnhancedSemanticSearch } from '@nacho-labs/nachos-embeddings';
|
|
6
7
|
import { resolve } from 'node:path';
|
|
8
|
+
import { DEFAULT_INDEX_ID, DOCUMENT_RESOURCE_TEMPLATE_URI, INDEX_MANIFEST_URI, INDEX_STATS_URI, REGISTERED_RESOURCE_URIS, buildDocumentResourceUri, } from './product.js';
|
|
9
|
+
const VERSION = '0.3.2';
|
|
10
|
+
const MAX_LENGTH = 1_000_000;
|
|
11
|
+
const MAX_ITEMS = 100;
|
|
12
|
+
const metadataValueSchema = z.union([
|
|
13
|
+
z.string().max(MAX_LENGTH),
|
|
14
|
+
z.number(),
|
|
15
|
+
z.boolean(),
|
|
16
|
+
z.array(z.string().max(MAX_LENGTH)).max(MAX_ITEMS),
|
|
17
|
+
]);
|
|
7
18
|
function getConfig() {
|
|
8
19
|
const args = process.argv.slice(2);
|
|
9
20
|
function getArg(name, fallback) {
|
|
10
21
|
const idx = args.indexOf(`--${name}`);
|
|
11
22
|
return idx !== -1 && idx + 1 < args.length ? args[idx + 1] : fallback;
|
|
12
23
|
}
|
|
24
|
+
function getString(name, fallback) {
|
|
25
|
+
const envName = `MCP_SEMANTIC_${name.toUpperCase().replace(/-/g, '_')}`;
|
|
26
|
+
return process.env[envName] ?? getArg(name, fallback);
|
|
27
|
+
}
|
|
13
28
|
function getBool(name, fallback) {
|
|
14
|
-
const value =
|
|
29
|
+
const value = getString(name, fallback.toString());
|
|
15
30
|
return value === 'true' || value === '1';
|
|
16
31
|
}
|
|
17
32
|
return {
|
|
18
|
-
storePath: resolve(
|
|
19
|
-
minSimilarity: parseFloat(
|
|
20
|
-
model:
|
|
21
|
-
cacheDir:
|
|
33
|
+
storePath: resolve(getString('store', '.semantic-store.json')),
|
|
34
|
+
minSimilarity: parseFloat(getString('similarity', '0.4')),
|
|
35
|
+
model: getString('model', 'Xenova/all-MiniLM-L6-v2'),
|
|
36
|
+
cacheDir: getString('cache-dir', '.cache/transformers'),
|
|
22
37
|
autoChunk: getBool('auto-chunk', true),
|
|
23
38
|
deduplicateExact: getBool('deduplicate-exact', true),
|
|
24
|
-
deduplicateSimilarity: parseFloat(
|
|
39
|
+
deduplicateSimilarity: parseFloat(getString('deduplicate-similarity', '0.95')),
|
|
25
40
|
temporalBoost: getBool('temporal-boost', true),
|
|
26
41
|
verbose: getBool('verbose', false),
|
|
27
42
|
// Bedrock provider settings
|
|
28
|
-
provider: (
|
|
29
|
-
bedrockRegion:
|
|
30
|
-
bedrockModel:
|
|
31
|
-
bedrockProfile:
|
|
32
|
-
bedrockDimensions: parseInt(
|
|
43
|
+
provider: getString('provider', 'transformers'),
|
|
44
|
+
bedrockRegion: getString('bedrock-region', 'us-east-1'),
|
|
45
|
+
bedrockModel: getString('bedrock-model', 'amazon.titan-embed-text-v2:0'),
|
|
46
|
+
bedrockProfile: getString('bedrock-profile', ''),
|
|
47
|
+
bedrockDimensions: parseInt(getString('bedrock-dimensions', '1024'), 10),
|
|
33
48
|
};
|
|
34
49
|
}
|
|
35
50
|
async function createProvider(config) {
|
|
@@ -95,31 +110,178 @@ try {
|
|
|
95
110
|
catch {
|
|
96
111
|
process.exit(1);
|
|
97
112
|
}
|
|
113
|
+
function formatUptime(seconds) {
|
|
114
|
+
if (seconds < 60) {
|
|
115
|
+
return `${seconds}s`;
|
|
116
|
+
}
|
|
117
|
+
if (seconds < 3600) {
|
|
118
|
+
return `${Math.floor(seconds / 60)}m`;
|
|
119
|
+
}
|
|
120
|
+
return `${Math.floor(seconds / 3600)}h ${Math.floor((seconds % 3600) / 60)}m`;
|
|
121
|
+
}
|
|
98
122
|
class OpQueue {
|
|
99
123
|
queue = Promise.resolve();
|
|
100
124
|
async run(fn) {
|
|
101
125
|
const prev = this.queue;
|
|
102
126
|
let resolve;
|
|
103
|
-
|
|
104
|
-
this.queue = new Promise((res, rej) => {
|
|
127
|
+
this.queue = new Promise((res) => {
|
|
105
128
|
resolve = res;
|
|
106
|
-
reject = rej;
|
|
107
129
|
});
|
|
108
130
|
try {
|
|
109
|
-
await prev;
|
|
131
|
+
await prev.catch(() => { });
|
|
110
132
|
const result = await fn();
|
|
111
|
-
resolve(result);
|
|
112
133
|
return result;
|
|
113
134
|
}
|
|
114
135
|
catch (err) {
|
|
115
|
-
reject(err);
|
|
116
136
|
metrics.errors++;
|
|
117
137
|
throw err;
|
|
118
138
|
}
|
|
139
|
+
finally {
|
|
140
|
+
resolve();
|
|
141
|
+
}
|
|
119
142
|
}
|
|
120
143
|
}
|
|
121
144
|
const opQueue = new OpQueue();
|
|
122
|
-
const server = new McpServer({ name: 'mcp-semantic-search-enhanced', version:
|
|
145
|
+
const server = new McpServer({ name: 'mcp-semantic-search-enhanced', version: VERSION }, { capabilities: { logging: {} } });
|
|
146
|
+
function getResourceDocuments() {
|
|
147
|
+
return search.export();
|
|
148
|
+
}
|
|
149
|
+
function getResourceModelLabel() {
|
|
150
|
+
return config.provider === 'bedrock' ? config.bedrockModel : config.model;
|
|
151
|
+
}
|
|
152
|
+
function getLatestDocumentTimestamp(documents) {
|
|
153
|
+
const latest = documents.reduce((current, document) => {
|
|
154
|
+
const timestamp = document.metadata?.timestamp;
|
|
155
|
+
return timestamp !== undefined && (current === undefined || timestamp > current) ? timestamp : current;
|
|
156
|
+
}, undefined);
|
|
157
|
+
return latest === undefined || Number.isNaN(latest) ? undefined : new Date(latest).toISOString();
|
|
158
|
+
}
|
|
159
|
+
function countMetadata(documents, key) {
|
|
160
|
+
const counts = {};
|
|
161
|
+
for (const document of documents) {
|
|
162
|
+
const values = key === 'tags' ? (document.metadata?.tags ?? []) : document.metadata?.kind ? [document.metadata.kind] : [];
|
|
163
|
+
for (const value of values)
|
|
164
|
+
counts[value] = (counts[value] ?? 0) + 1;
|
|
165
|
+
}
|
|
166
|
+
return counts;
|
|
167
|
+
}
|
|
168
|
+
function renderJsonResource(uri, value) {
|
|
169
|
+
return {
|
|
170
|
+
contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(value, null, 2) }],
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function parseSemanticResourceUri(uri) {
|
|
174
|
+
try {
|
|
175
|
+
const parsed = new URL(uri);
|
|
176
|
+
if (parsed.protocol !== 'semantic-search:' || parsed.hostname !== 'indexes')
|
|
177
|
+
return undefined;
|
|
178
|
+
const [indexId, resourceType, documentId, extra] = parsed.pathname
|
|
179
|
+
.split('/')
|
|
180
|
+
.filter(Boolean)
|
|
181
|
+
.map((segment) => decodeURIComponent(segment));
|
|
182
|
+
if (indexId !== DEFAULT_INDEX_ID || extra !== undefined)
|
|
183
|
+
return undefined;
|
|
184
|
+
if (resourceType === 'manifest' && documentId === undefined)
|
|
185
|
+
return { type: 'manifest' };
|
|
186
|
+
if (resourceType === 'stats' && documentId === undefined)
|
|
187
|
+
return { type: 'stats' };
|
|
188
|
+
if (resourceType === 'documents' && documentId)
|
|
189
|
+
return { type: 'document', documentId };
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return undefined;
|
|
193
|
+
}
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
server.server.registerCapabilities({ resources: {} });
|
|
197
|
+
server.server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
198
|
+
const documents = getResourceDocuments();
|
|
199
|
+
const lastModified = getLatestDocumentTimestamp(documents);
|
|
200
|
+
const annotations = {
|
|
201
|
+
audience: ['user', 'assistant'],
|
|
202
|
+
...(lastModified ? { lastModified } : {}),
|
|
203
|
+
};
|
|
204
|
+
return {
|
|
205
|
+
resources: [
|
|
206
|
+
{
|
|
207
|
+
uri: INDEX_MANIFEST_URI,
|
|
208
|
+
name: 'semantic_index_manifest',
|
|
209
|
+
title: 'Semantic Index Manifest',
|
|
210
|
+
description: 'Stable manifest for the active semantic-search index.',
|
|
211
|
+
mimeType: 'application/json',
|
|
212
|
+
annotations: { ...annotations, priority: 1 },
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
uri: INDEX_STATS_URI,
|
|
216
|
+
name: 'semantic_index_stats',
|
|
217
|
+
title: 'Semantic Index Stats',
|
|
218
|
+
description: 'Corpus stats and runtime counters for the active semantic-search index.',
|
|
219
|
+
mimeType: 'application/json',
|
|
220
|
+
annotations: { ...annotations, priority: 0.9 },
|
|
221
|
+
},
|
|
222
|
+
],
|
|
223
|
+
};
|
|
224
|
+
});
|
|
225
|
+
server.server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => ({
|
|
226
|
+
resourceTemplates: [
|
|
227
|
+
{
|
|
228
|
+
name: 'semantic_document',
|
|
229
|
+
title: 'Indexed Document',
|
|
230
|
+
uriTemplate: DOCUMENT_RESOURCE_TEMPLATE_URI,
|
|
231
|
+
description: 'Read a single indexed document by id from the active semantic-search index.',
|
|
232
|
+
mimeType: 'application/json',
|
|
233
|
+
annotations: { audience: ['user', 'assistant'], priority: 0.8 },
|
|
234
|
+
},
|
|
235
|
+
],
|
|
236
|
+
}));
|
|
237
|
+
server.server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
238
|
+
const resource = parseSemanticResourceUri(request.params.uri);
|
|
239
|
+
if (!resource)
|
|
240
|
+
throw new McpError(ErrorCode.InvalidParams, `Resource ${request.params.uri} not found`);
|
|
241
|
+
const documents = getResourceDocuments();
|
|
242
|
+
if (resource.type === 'manifest') {
|
|
243
|
+
return renderJsonResource(INDEX_MANIFEST_URI, {
|
|
244
|
+
indexId: DEFAULT_INDEX_ID,
|
|
245
|
+
resourceRoot: `semantic-search://indexes/${DEFAULT_INDEX_ID}`,
|
|
246
|
+
storePath: config.storePath,
|
|
247
|
+
provider: config.provider,
|
|
248
|
+
model: getResourceModelLabel(),
|
|
249
|
+
documentCount: documents.length,
|
|
250
|
+
listedResources: [...REGISTERED_RESOURCE_URIS],
|
|
251
|
+
resourceTemplates: [DOCUMENT_RESOURCE_TEMPLATE_URI],
|
|
252
|
+
metricsStartedAt: new Date(metrics.startTime).toISOString(),
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
if (resource.type === 'stats') {
|
|
256
|
+
return renderJsonResource(INDEX_STATS_URI, {
|
|
257
|
+
indexId: DEFAULT_INDEX_ID,
|
|
258
|
+
storePath: config.storePath,
|
|
259
|
+
provider: config.provider,
|
|
260
|
+
model: getResourceModelLabel(),
|
|
261
|
+
counts: {
|
|
262
|
+
documents: documents.length,
|
|
263
|
+
rootDocuments: documents.filter((document) => !document.metadata?.parentId).length,
|
|
264
|
+
chunkDocuments: documents.filter((document) => document.metadata?.parentId).length,
|
|
265
|
+
},
|
|
266
|
+
metadata: { kinds: countMetadata(documents, 'kind'), tags: countMetadata(documents, 'tags') },
|
|
267
|
+
usage: {
|
|
268
|
+
searches: metrics.searches,
|
|
269
|
+
documentsAdded: metrics.documentsAdded,
|
|
270
|
+
documentsRemoved: metrics.documentsRemoved,
|
|
271
|
+
errors: metrics.errors,
|
|
272
|
+
uptimeSeconds: Math.floor((Date.now() - metrics.startTime) / 1000),
|
|
273
|
+
},
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
const document = documents.find((candidate) => candidate.id === resource.documentId);
|
|
277
|
+
if (!document)
|
|
278
|
+
throw new McpError(ErrorCode.InvalidParams, `Document ${resource.documentId} not found`);
|
|
279
|
+
return renderJsonResource(buildDocumentResourceUri(document.id), {
|
|
280
|
+
id: document.id,
|
|
281
|
+
text: document.text,
|
|
282
|
+
metadata: document.metadata ?? {},
|
|
283
|
+
});
|
|
284
|
+
});
|
|
123
285
|
server.registerTool('semantic_health', {
|
|
124
286
|
title: 'Health Check',
|
|
125
287
|
description: 'Server status, metrics, and configuration',
|
|
@@ -128,9 +290,10 @@ server.registerTool('semantic_health', {
|
|
|
128
290
|
try {
|
|
129
291
|
await search.search('test', { limit: 1 });
|
|
130
292
|
const uptime = Math.floor((Date.now() - metrics.startTime) / 1000);
|
|
131
|
-
const uptimeStr =
|
|
293
|
+
const uptimeStr = formatUptime(uptime);
|
|
132
294
|
return {
|
|
133
|
-
content: [
|
|
295
|
+
content: [
|
|
296
|
+
{
|
|
134
297
|
type: 'text',
|
|
135
298
|
text: [
|
|
136
299
|
'✅ Healthy',
|
|
@@ -153,15 +316,18 @@ server.registerTool('semantic_health', {
|
|
|
153
316
|
` Dedup: exact=${config.deduplicateExact}, fuzzy=${config.deduplicateSimilarity}`,
|
|
154
317
|
` Temporal boost: ${config.temporalBoost}`,
|
|
155
318
|
].join('\n'),
|
|
156
|
-
}
|
|
319
|
+
},
|
|
320
|
+
],
|
|
157
321
|
};
|
|
158
322
|
}
|
|
159
323
|
catch (err) {
|
|
160
324
|
return {
|
|
161
|
-
content: [
|
|
325
|
+
content: [
|
|
326
|
+
{
|
|
162
327
|
type: 'text',
|
|
163
328
|
text: `❌ Unhealthy: ${err instanceof Error ? err.message : String(err)}`,
|
|
164
|
-
}
|
|
329
|
+
},
|
|
330
|
+
],
|
|
165
331
|
};
|
|
166
332
|
}
|
|
167
333
|
});
|
|
@@ -179,6 +345,7 @@ server.registerTool('semantic_search', {
|
|
|
179
345
|
}, async ({ query, limit, minSimilarity, kind, tags, since }) => {
|
|
180
346
|
return opQueue.run(async () => {
|
|
181
347
|
const startTime = Date.now();
|
|
348
|
+
const parsedSince = since ? Date.parse(since) : undefined;
|
|
182
349
|
const results = await search.search(query, {
|
|
183
350
|
limit,
|
|
184
351
|
...(minSimilarity !== undefined && { minSimilarity }),
|
|
@@ -187,7 +354,7 @@ server.registerTool('semantic_search', {
|
|
|
187
354
|
return false;
|
|
188
355
|
if (tags && (!meta?.tags || !tags.some((t) => meta.tags?.includes(t))))
|
|
189
356
|
return false;
|
|
190
|
-
if (
|
|
357
|
+
if (parsedSince !== undefined && !isNaN(parsedSince) && meta?.timestamp && meta.timestamp < parsedSince)
|
|
191
358
|
return false;
|
|
192
359
|
return true;
|
|
193
360
|
},
|
|
@@ -196,10 +363,12 @@ server.registerTool('semantic_search', {
|
|
|
196
363
|
const elapsed = Date.now() - startTime;
|
|
197
364
|
if (results.length === 0) {
|
|
198
365
|
return {
|
|
199
|
-
content: [
|
|
366
|
+
content: [
|
|
367
|
+
{
|
|
200
368
|
type: 'text',
|
|
201
369
|
text: `🔍 No results for "${query}" (${elapsed}ms)`,
|
|
202
|
-
}
|
|
370
|
+
},
|
|
371
|
+
],
|
|
203
372
|
};
|
|
204
373
|
}
|
|
205
374
|
const formatted = results
|
|
@@ -210,10 +379,19 @@ server.registerTool('semantic_search', {
|
|
|
210
379
|
})
|
|
211
380
|
.join('\n\n');
|
|
212
381
|
return {
|
|
213
|
-
content: [
|
|
382
|
+
content: [
|
|
383
|
+
{
|
|
214
384
|
type: 'text',
|
|
215
385
|
text: `🔍 Found ${results.length} in ${elapsed}ms:\n\n${formatted}`,
|
|
216
|
-
}
|
|
386
|
+
},
|
|
387
|
+
...results.map((result) => ({
|
|
388
|
+
type: 'resource_link',
|
|
389
|
+
uri: buildDocumentResourceUri(result.id),
|
|
390
|
+
name: result.id,
|
|
391
|
+
mimeType: 'application/json',
|
|
392
|
+
description: `Indexed document "${result.id}"`,
|
|
393
|
+
})),
|
|
394
|
+
],
|
|
217
395
|
};
|
|
218
396
|
});
|
|
219
397
|
});
|
|
@@ -223,16 +401,17 @@ server.registerTool('semantic_index', {
|
|
|
223
401
|
inputSchema: z.object({
|
|
224
402
|
id: z.string().describe('Unique ID (e.g., "auth-pattern", "adr-012")'),
|
|
225
403
|
text: z.string().describe('Content to index'),
|
|
226
|
-
metadata: z.record(z.
|
|
404
|
+
metadata: z.record(z.string(), metadataValueSchema).optional().describe('Optional metadata'),
|
|
227
405
|
}),
|
|
228
406
|
}, async ({ id, text, metadata }) => {
|
|
229
407
|
return opQueue.run(async () => {
|
|
230
408
|
const startTime = Date.now();
|
|
231
|
-
await search.addDocument({ id, text, metadata
|
|
409
|
+
await search.addDocument({ id, text, metadata });
|
|
232
410
|
metrics.documentsAdded++;
|
|
233
411
|
const elapsed = Date.now() - startTime;
|
|
234
412
|
return {
|
|
235
|
-
content: [
|
|
413
|
+
content: [
|
|
414
|
+
{
|
|
236
415
|
type: 'text',
|
|
237
416
|
text: [
|
|
238
417
|
`✅ Indexed "${id}" (${elapsed}ms)`,
|
|
@@ -240,7 +419,8 @@ server.registerTool('semantic_index', {
|
|
|
240
419
|
`💾 Saved to ${config.storePath}`,
|
|
241
420
|
`🔍 Test: semantic_search("${id}")`,
|
|
242
421
|
].join('\n'),
|
|
243
|
-
}
|
|
422
|
+
},
|
|
423
|
+
],
|
|
244
424
|
};
|
|
245
425
|
});
|
|
246
426
|
});
|
|
@@ -248,11 +428,13 @@ server.registerTool('semantic_index_batch', {
|
|
|
248
428
|
title: 'Batch Index',
|
|
249
429
|
description: 'Add multiple documents at once',
|
|
250
430
|
inputSchema: z.object({
|
|
251
|
-
documents: z
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
431
|
+
documents: z
|
|
432
|
+
.array(z.object({
|
|
433
|
+
id: z.string().max(MAX_LENGTH),
|
|
434
|
+
text: z.string().max(MAX_LENGTH),
|
|
435
|
+
metadata: z.record(z.string(), metadataValueSchema).optional(),
|
|
436
|
+
}))
|
|
437
|
+
.max(MAX_ITEMS),
|
|
256
438
|
}),
|
|
257
439
|
}, async ({ documents }) => {
|
|
258
440
|
return opQueue.run(async () => {
|
|
@@ -261,14 +443,16 @@ server.registerTool('semantic_index_batch', {
|
|
|
261
443
|
metrics.documentsAdded += documents.length;
|
|
262
444
|
const elapsed = Date.now() - startTime;
|
|
263
445
|
return {
|
|
264
|
-
content: [
|
|
446
|
+
content: [
|
|
447
|
+
{
|
|
265
448
|
type: 'text',
|
|
266
449
|
text: [
|
|
267
450
|
`✅ Indexed ${documents.length} documents (${elapsed}ms)`,
|
|
268
451
|
` ${Math.round(documents.length / (elapsed / 1000))}/sec`,
|
|
269
452
|
`📊 ${search.size()} documents total`,
|
|
270
453
|
].join('\n'),
|
|
271
|
-
}
|
|
454
|
+
},
|
|
455
|
+
],
|
|
272
456
|
};
|
|
273
457
|
});
|
|
274
458
|
});
|
|
@@ -285,12 +469,12 @@ server.registerTool('semantic_remove', {
|
|
|
285
469
|
metrics.documentsRemoved++;
|
|
286
470
|
}
|
|
287
471
|
return {
|
|
288
|
-
content: [
|
|
472
|
+
content: [
|
|
473
|
+
{
|
|
289
474
|
type: 'text',
|
|
290
|
-
text: removed
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
}],
|
|
475
|
+
text: removed ? `✅ Removed "${id}"\n📊 ${search.size()} remaining` : `⚠️ "${id}" not found`,
|
|
476
|
+
},
|
|
477
|
+
],
|
|
294
478
|
};
|
|
295
479
|
});
|
|
296
480
|
});
|
|
@@ -299,7 +483,8 @@ server.registerTool('semantic_stats', {
|
|
|
299
483
|
description: 'Detailed index information',
|
|
300
484
|
inputSchema: z.object({}),
|
|
301
485
|
}, async () => ({
|
|
302
|
-
content: [
|
|
486
|
+
content: [
|
|
487
|
+
{
|
|
303
488
|
type: 'text',
|
|
304
489
|
text: [
|
|
305
490
|
'📊 Index Stats',
|
|
@@ -322,7 +507,8 @@ server.registerTool('semantic_stats', {
|
|
|
322
507
|
` Removed: ${metrics.documentsRemoved}`,
|
|
323
508
|
` Errors: ${metrics.errors}`,
|
|
324
509
|
].join('\n'),
|
|
325
|
-
}
|
|
510
|
+
},
|
|
511
|
+
],
|
|
326
512
|
}));
|
|
327
513
|
server.registerTool('semantic_clear', {
|
|
328
514
|
title: 'Clear Index',
|
|
@@ -333,20 +519,24 @@ server.registerTool('semantic_clear', {
|
|
|
333
519
|
}, async ({ confirm }) => {
|
|
334
520
|
if (!confirm) {
|
|
335
521
|
return {
|
|
336
|
-
content: [
|
|
522
|
+
content: [
|
|
523
|
+
{
|
|
337
524
|
type: 'text',
|
|
338
525
|
text: '⚠️ Cancelled. Set confirm: true to proceed',
|
|
339
|
-
}
|
|
526
|
+
},
|
|
527
|
+
],
|
|
340
528
|
};
|
|
341
529
|
}
|
|
342
530
|
return opQueue.run(async () => {
|
|
343
531
|
const count = search.size();
|
|
344
532
|
await search.clear();
|
|
345
533
|
return {
|
|
346
|
-
content: [
|
|
534
|
+
content: [
|
|
535
|
+
{
|
|
347
536
|
type: 'text',
|
|
348
537
|
text: `✅ Cleared ${count} documents\n💾 Saved to ${config.storePath}`,
|
|
349
|
-
}
|
|
538
|
+
},
|
|
539
|
+
],
|
|
350
540
|
};
|
|
351
541
|
});
|
|
352
542
|
});
|
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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"}
|
|
@@ -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,74 +1,89 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@nacho-labs/mcp-semantic-search",
|
|
3
|
-
"version": "0.
|
|
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": "
|
|
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
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
"
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
"
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@nacho-labs/mcp-semantic-search",
|
|
3
|
+
"version": "0.4.0",
|
|
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": "^8.0.1",
|
|
82
|
+
"@babel/eslint-parser": "^8.0.1",
|
|
83
|
+
"@eslint/js": "^10.0.1",
|
|
84
|
+
"@types/node": "^26.1.2",
|
|
85
|
+
"eslint": "^10.9.0",
|
|
86
|
+
"prettier": "^3.9.6",
|
|
87
|
+
"typescript": "^7.0.2"
|
|
88
|
+
}
|
|
89
|
+
}
|
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.
|
|
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.
|
|
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.
|
|
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
|
+
}
|