@moorchehai/mcp 1.3.2 → 1.3.4
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 +16 -10
- package/package.json +1 -1
- package/src/server/index.js +247 -225
- package/src/server/tools/data-tools.js +356 -209
- package/src/server/tools/namespace-tools.js +129 -129
- package/src/server/tools/search-tools.js +13 -1
- package/src/server/utils/prompts.js +358 -358
- package/src/server/utils/resources.js +7 -18
package/README.md
CHANGED
|
@@ -208,7 +208,10 @@ The Moorcheh MCP server provides tools for:
|
|
|
208
208
|
### Data Tools
|
|
209
209
|
- **`upload-text`**: Upload text documents to a namespace
|
|
210
210
|
- **`upload-vectors`**: Upload vector embeddings to a namespace
|
|
211
|
-
- **`upload-file`**: Upload files
|
|
211
|
+
- **`upload-file`**: Upload files to a text namespace via pre-signed URL (supported types: .pdf, .docx, .xlsx, .json, .txt, .csv, .md)
|
|
212
|
+
- **`list-files`**: List raw file objects in S3 storage for a namespace (`GET /list-files`; see [List Files](https://docs.moorcheh.ai/api-reference/files/list-files))
|
|
213
|
+
- **`delete-file`**: Delete one or more raw files from S3 storage (`DELETE /delete-file` with `file_name` and/or `file_names`; see [Delete File](https://docs.moorcheh.ai/api-reference/data/delete-file))
|
|
214
|
+
- **`fetch-text-data`**: List text and summary chunks from a text namespace (GET `/documents/fetch-text-data`, up to 100 items per response; see [Fetch Text Data](https://docs.moorcheh.ai/api-reference/data/fetch-text-data))
|
|
212
215
|
- **`get-data`**: Retrieve text documents by ID from text namespaces
|
|
213
216
|
- **`delete-data`**: Remove specific data items from a namespace
|
|
214
217
|
|
|
@@ -216,18 +219,21 @@ The Moorcheh MCP server provides tools for:
|
|
|
216
219
|
- **`search`**: Search across namespaces with vector similarity
|
|
217
220
|
- **`answer`**: Get AI-generated answers based on top of your search
|
|
218
221
|
|
|
219
|
-
## Supported
|
|
222
|
+
## Supported AI models
|
|
223
|
+
|
|
224
|
+
These IDs match the current Moorcheh [Available Models](https://docs.moorcheh.ai/python-sdk/ai/generate#available-models) list (REST `answer` / Python `answer.generate`).
|
|
220
225
|
|
|
221
226
|
| Model ID | Name | Provider | Description |
|
|
222
227
|
|----------|------|----------|-------------|
|
|
223
|
-
| `anthropic.claude-sonnet-4-
|
|
224
|
-
| `anthropic.claude-
|
|
225
|
-
| `meta.llama4-maverick-17b-instruct-v1:0` | Llama 4 Maverick 17B | Meta |
|
|
226
|
-
| `
|
|
227
|
-
| `
|
|
228
|
-
| `deepseek.
|
|
229
|
-
| `openai.gpt-oss-120b-1:0` | OpenAI GPT OSS 120B | OpenAI |
|
|
230
|
-
| `qwen.qwen3-32b-v1:0` | Qwen 3 32B | Qwen |
|
|
228
|
+
| `anthropic.claude-sonnet-4-6` | Claude Sonnet 4.6 | Anthropic | Fast flagship: coding, tools, long docs and RAG (~1M context) |
|
|
229
|
+
| `anthropic.claude-opus-4-6-v1` | Claude Opus 4.6 | Anthropic | Deepest reasoning and hardest tasks; pick when quality matters most (~1M context) |
|
|
230
|
+
| `meta.llama4-maverick-17b-instruct-v1:0` | Llama 4 Maverick 17B | Meta | Long context, summarization, function calling, fine-tuning friendly |
|
|
231
|
+
| `amazon.nova-pro-v1:0` | Amazon Nova Pro | Amazon | Chat, math, and structured answers for AWS-style workloads |
|
|
232
|
+
| `deepseek.r1-v1:0` | DeepSeek R1 | DeepSeek | Step-by-step reasoning; math, logic, and technical explanations |
|
|
233
|
+
| `deepseek.v3.2` | DeepSeek V3.2 | DeepSeek | Efficient general Q&A, multilingual, everyday RAG (~164K context) |
|
|
234
|
+
| `openai.gpt-oss-120b-1:0` | OpenAI GPT OSS 120B | OpenAI | Large generalist: research-style answers and long-form writing |
|
|
235
|
+
| `qwen.qwen3-32b-v1:0` | Qwen 3 32B | Qwen | Code and bilingual (EN/ZH) tasks in a smaller footprint |
|
|
236
|
+
| `qwen.qwen3-next-80b-a3b` | Qwen3 Next 80B A3B | Qwen | MoE model for long chats, docs, and code at scale (~256K context) |
|
|
231
237
|
|
|
232
238
|
## Prerequisites
|
|
233
239
|
|
package/package.json
CHANGED
package/src/server/index.js
CHANGED
|
@@ -1,226 +1,248 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
4
|
-
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
5
|
-
|
|
6
|
-
// Import tools
|
|
7
|
-
import { listNamespacesTool, createNamespaceTool, deleteNamespaceTool } from './tools/namespace-tools.js';
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
//
|
|
50
|
-
server
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
apiDocsResource.
|
|
67
|
-
apiDocsResource.
|
|
68
|
-
apiDocsResource.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
configHelpResource.
|
|
74
|
-
configHelpResource.
|
|
75
|
-
configHelpResource.
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
namespaceCreationGuideResource.
|
|
81
|
-
namespaceCreationGuideResource.
|
|
82
|
-
namespaceCreationGuideResource.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
searchOptimizationGuideResource.
|
|
88
|
-
searchOptimizationGuideResource.
|
|
89
|
-
searchOptimizationGuideResource.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
dataOrganizationGuideResource.
|
|
95
|
-
dataOrganizationGuideResource.
|
|
96
|
-
dataOrganizationGuideResource.
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
aiAnswerSetupGuideResource.
|
|
102
|
-
aiAnswerSetupGuideResource.
|
|
103
|
-
aiAnswerSetupGuideResource.
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
listNamespacesTool.
|
|
112
|
-
listNamespacesTool.
|
|
113
|
-
listNamespacesTool.
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
createNamespaceTool.
|
|
119
|
-
createNamespaceTool.
|
|
120
|
-
createNamespaceTool.
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
deleteNamespaceTool.
|
|
126
|
-
deleteNamespaceTool.
|
|
127
|
-
deleteNamespaceTool.
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
uploadTextTool.
|
|
134
|
-
uploadTextTool.
|
|
135
|
-
uploadTextTool.
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
uploadVectorsTool.
|
|
141
|
-
uploadVectorsTool.
|
|
142
|
-
uploadVectorsTool.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
deleteDataTool.
|
|
148
|
-
deleteDataTool.
|
|
149
|
-
deleteDataTool.
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
getDataTool.
|
|
155
|
-
getDataTool.
|
|
156
|
-
getDataTool.
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
server.tool(
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
);
|
|
173
|
-
|
|
174
|
-
server.tool(
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
);
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
// Register
|
|
206
|
-
server.registerPrompt(
|
|
207
|
-
|
|
208
|
-
{
|
|
209
|
-
title: '
|
|
210
|
-
description:
|
|
211
|
-
argsSchema:
|
|
212
|
-
},
|
|
213
|
-
async (args) =>
|
|
214
|
-
);
|
|
215
|
-
|
|
216
|
-
//
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
4
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
5
|
+
|
|
6
|
+
// Import tools
|
|
7
|
+
import { listNamespacesTool, createNamespaceTool, deleteNamespaceTool } from './tools/namespace-tools.js';
|
|
8
|
+
import {
|
|
9
|
+
uploadTextTool,
|
|
10
|
+
uploadVectorsTool,
|
|
11
|
+
deleteDataTool,
|
|
12
|
+
getDataTool,
|
|
13
|
+
fetchTextDataTool,
|
|
14
|
+
uploadFileTool,
|
|
15
|
+
listFilesTool,
|
|
16
|
+
deleteFileTool,
|
|
17
|
+
} from './tools/data-tools.js';
|
|
18
|
+
import { searchTool, answerTool } from './tools/search-tools.js';
|
|
19
|
+
|
|
20
|
+
// Import resources
|
|
21
|
+
import {
|
|
22
|
+
namespacesResource,
|
|
23
|
+
apiDocsResource,
|
|
24
|
+
configHelpResource,
|
|
25
|
+
namespaceCreationGuideResource,
|
|
26
|
+
searchOptimizationGuideResource,
|
|
27
|
+
dataOrganizationGuideResource,
|
|
28
|
+
aiAnswerSetupGuideResource
|
|
29
|
+
} from './utils/resources.js';
|
|
30
|
+
|
|
31
|
+
// Import prompts
|
|
32
|
+
import {
|
|
33
|
+
searchOptimizationPrompt,
|
|
34
|
+
dataOrganizationPrompt,
|
|
35
|
+
aiAnswerSetupPrompt
|
|
36
|
+
} from './utils/prompts.js';
|
|
37
|
+
|
|
38
|
+
// Suppress stdout to prevent any non-MCP output
|
|
39
|
+
const originalStdoutWrite = process.stdout.write;
|
|
40
|
+
process.stdout.write = (chunk, encoding, callback) => {
|
|
41
|
+
// Only allow JSON-RPC messages to stdout
|
|
42
|
+
if (typeof chunk === 'string' && (chunk.trim().startsWith('{') || chunk.trim().startsWith('['))) {
|
|
43
|
+
return originalStdoutWrite.call(process.stdout, chunk, encoding, callback);
|
|
44
|
+
}
|
|
45
|
+
// Redirect everything else to stderr
|
|
46
|
+
process.stderr.write(chunk, encoding, callback);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
// Create server instance
|
|
50
|
+
const server = new McpServer({
|
|
51
|
+
name: "Moorcheh",
|
|
52
|
+
version: "1.0.0",
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// ========== REGISTER RESOURCES ==========
|
|
56
|
+
|
|
57
|
+
// Register all resources
|
|
58
|
+
server.resource(
|
|
59
|
+
namespacesResource.uri,
|
|
60
|
+
namespacesResource.description,
|
|
61
|
+
namespacesResource.mimeType,
|
|
62
|
+
namespacesResource.handler
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
server.resource(
|
|
66
|
+
apiDocsResource.uri,
|
|
67
|
+
apiDocsResource.description,
|
|
68
|
+
apiDocsResource.mimeType,
|
|
69
|
+
apiDocsResource.handler
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
server.resource(
|
|
73
|
+
configHelpResource.uri,
|
|
74
|
+
configHelpResource.description,
|
|
75
|
+
configHelpResource.mimeType,
|
|
76
|
+
configHelpResource.handler
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
server.resource(
|
|
80
|
+
namespaceCreationGuideResource.uri,
|
|
81
|
+
namespaceCreationGuideResource.description,
|
|
82
|
+
namespaceCreationGuideResource.mimeType,
|
|
83
|
+
namespaceCreationGuideResource.handler
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
server.resource(
|
|
87
|
+
searchOptimizationGuideResource.uri,
|
|
88
|
+
searchOptimizationGuideResource.description,
|
|
89
|
+
searchOptimizationGuideResource.mimeType,
|
|
90
|
+
searchOptimizationGuideResource.handler
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
server.resource(
|
|
94
|
+
dataOrganizationGuideResource.uri,
|
|
95
|
+
dataOrganizationGuideResource.description,
|
|
96
|
+
dataOrganizationGuideResource.mimeType,
|
|
97
|
+
dataOrganizationGuideResource.handler
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
server.resource(
|
|
101
|
+
aiAnswerSetupGuideResource.uri,
|
|
102
|
+
aiAnswerSetupGuideResource.description,
|
|
103
|
+
aiAnswerSetupGuideResource.mimeType,
|
|
104
|
+
aiAnswerSetupGuideResource.handler
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
// ========== REGISTER TOOLS ==========
|
|
108
|
+
|
|
109
|
+
// Register namespace tools
|
|
110
|
+
server.tool(
|
|
111
|
+
listNamespacesTool.name,
|
|
112
|
+
listNamespacesTool.description,
|
|
113
|
+
listNamespacesTool.parameters,
|
|
114
|
+
listNamespacesTool.handler,
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
server.tool(
|
|
118
|
+
createNamespaceTool.name,
|
|
119
|
+
createNamespaceTool.description,
|
|
120
|
+
createNamespaceTool.parameters,
|
|
121
|
+
createNamespaceTool.handler,
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
server.tool(
|
|
125
|
+
deleteNamespaceTool.name,
|
|
126
|
+
deleteNamespaceTool.description,
|
|
127
|
+
deleteNamespaceTool.parameters,
|
|
128
|
+
deleteNamespaceTool.handler,
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
// Register data tools
|
|
132
|
+
server.tool(
|
|
133
|
+
uploadTextTool.name,
|
|
134
|
+
uploadTextTool.description,
|
|
135
|
+
uploadTextTool.parameters,
|
|
136
|
+
uploadTextTool.handler,
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
server.tool(
|
|
140
|
+
uploadVectorsTool.name,
|
|
141
|
+
uploadVectorsTool.description,
|
|
142
|
+
uploadVectorsTool.parameters,
|
|
143
|
+
uploadVectorsTool.handler,
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
server.tool(
|
|
147
|
+
deleteDataTool.name,
|
|
148
|
+
deleteDataTool.description,
|
|
149
|
+
deleteDataTool.parameters,
|
|
150
|
+
deleteDataTool.handler,
|
|
151
|
+
);
|
|
152
|
+
|
|
153
|
+
server.tool(
|
|
154
|
+
getDataTool.name,
|
|
155
|
+
getDataTool.description,
|
|
156
|
+
getDataTool.parameters,
|
|
157
|
+
getDataTool.handler,
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
server.tool(
|
|
161
|
+
fetchTextDataTool.name,
|
|
162
|
+
fetchTextDataTool.description,
|
|
163
|
+
fetchTextDataTool.parameters,
|
|
164
|
+
fetchTextDataTool.handler,
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
server.tool(
|
|
168
|
+
uploadFileTool.name,
|
|
169
|
+
uploadFileTool.description,
|
|
170
|
+
uploadFileTool.parameters,
|
|
171
|
+
uploadFileTool.handler,
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
server.tool(
|
|
175
|
+
listFilesTool.name,
|
|
176
|
+
listFilesTool.description,
|
|
177
|
+
listFilesTool.parameters,
|
|
178
|
+
listFilesTool.handler,
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
server.tool(
|
|
182
|
+
deleteFileTool.name,
|
|
183
|
+
deleteFileTool.description,
|
|
184
|
+
deleteFileTool.parameters,
|
|
185
|
+
deleteFileTool.handler,
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
// Register search tools
|
|
189
|
+
server.tool(
|
|
190
|
+
searchTool.name,
|
|
191
|
+
searchTool.description,
|
|
192
|
+
searchTool.parameters,
|
|
193
|
+
searchTool.handler,
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
server.tool(
|
|
197
|
+
answerTool.name,
|
|
198
|
+
answerTool.description,
|
|
199
|
+
answerTool.parameters,
|
|
200
|
+
answerTool.handler,
|
|
201
|
+
);
|
|
202
|
+
|
|
203
|
+
// ========== REGISTER PROMPTS ==========
|
|
204
|
+
|
|
205
|
+
// Register search optimization prompt (new SDK signature)
|
|
206
|
+
server.registerPrompt(
|
|
207
|
+
searchOptimizationPrompt.name,
|
|
208
|
+
{
|
|
209
|
+
title: 'Search Optimization',
|
|
210
|
+
description: searchOptimizationPrompt.description,
|
|
211
|
+
argsSchema: searchOptimizationPrompt.argsSchema,
|
|
212
|
+
},
|
|
213
|
+
async (args) => searchOptimizationPrompt.handler(args)
|
|
214
|
+
);
|
|
215
|
+
|
|
216
|
+
// Register data organization prompt
|
|
217
|
+
server.registerPrompt(
|
|
218
|
+
dataOrganizationPrompt.name,
|
|
219
|
+
{
|
|
220
|
+
title: 'Data Organization',
|
|
221
|
+
description: dataOrganizationPrompt.description,
|
|
222
|
+
argsSchema: dataOrganizationPrompt.argsSchema,
|
|
223
|
+
},
|
|
224
|
+
async (args) => dataOrganizationPrompt.handler(args)
|
|
225
|
+
);
|
|
226
|
+
|
|
227
|
+
// Register AI answer setup prompt
|
|
228
|
+
server.registerPrompt(
|
|
229
|
+
aiAnswerSetupPrompt.name,
|
|
230
|
+
{
|
|
231
|
+
title: 'AI Answer Setup',
|
|
232
|
+
description: aiAnswerSetupPrompt.description,
|
|
233
|
+
argsSchema: aiAnswerSetupPrompt.argsSchema,
|
|
234
|
+
},
|
|
235
|
+
async (args) => aiAnswerSetupPrompt.handler(args)
|
|
236
|
+
);
|
|
237
|
+
|
|
238
|
+
// Start the server
|
|
239
|
+
async function main() {
|
|
240
|
+
const transport = new StdioServerTransport();
|
|
241
|
+
await server.connect(transport);
|
|
242
|
+
console.error("Server started");
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
main().catch((error) => {
|
|
246
|
+
console.error("Fatal error in main():", error);
|
|
247
|
+
process.exit(1);
|
|
226
248
|
});
|