@astramindapp/mcp-server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +136 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +41 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/mind-client.d.ts +172 -0
- package/dist/mind-client.d.ts.map +1 -0
- package/dist/mind-client.js +138 -0
- package/dist/mind-client.js.map +1 -0
- package/dist/server.d.ts +18 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +401 -0
- package/dist/server.js.map +1 -0
- package/dist/setup.d.ts +12 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +332 -0
- package/dist/setup.js.map +1 -0
- package/package.json +46 -0
- package/src/cli.ts +47 -0
- package/src/index.ts +15 -0
- package/src/mind-client.ts +324 -0
- package/src/server.ts +457 -0
- package/src/setup.ts +372 -0
- package/tsconfig.json +20 -0
package/dist/setup.js
ADDED
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* MIND MCP Server — Interactive Setup Wizard
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx @mindapp/mcp-server setup
|
|
8
|
+
* mind-mcp-setup
|
|
9
|
+
*
|
|
10
|
+
* Auto-detects installed AI tools and configures MIND as their memory layer.
|
|
11
|
+
*/
|
|
12
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
+
}
|
|
18
|
+
Object.defineProperty(o, k2, desc);
|
|
19
|
+
}) : (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
o[k2] = m[k];
|
|
22
|
+
}));
|
|
23
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
24
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
25
|
+
}) : function(o, v) {
|
|
26
|
+
o["default"] = v;
|
|
27
|
+
});
|
|
28
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
29
|
+
var ownKeys = function(o) {
|
|
30
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
31
|
+
var ar = [];
|
|
32
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
33
|
+
return ar;
|
|
34
|
+
};
|
|
35
|
+
return ownKeys(o);
|
|
36
|
+
};
|
|
37
|
+
return function (mod) {
|
|
38
|
+
if (mod && mod.__esModule) return mod;
|
|
39
|
+
var result = {};
|
|
40
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
41
|
+
__setModuleDefault(result, mod);
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
})();
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
const os = __importStar(require("os"));
|
|
49
|
+
const readline = __importStar(require("readline"));
|
|
50
|
+
const HOME = os.homedir();
|
|
51
|
+
function getToolConfigs() {
|
|
52
|
+
const platform = process.platform;
|
|
53
|
+
const tools = [];
|
|
54
|
+
// Claude Desktop
|
|
55
|
+
if (platform === "darwin") {
|
|
56
|
+
tools.push({
|
|
57
|
+
name: "Claude Desktop",
|
|
58
|
+
configPath: path.join(HOME, "Library", "Application Support", "Claude", "claude_desktop_config.json"),
|
|
59
|
+
configKey: "mcpServers",
|
|
60
|
+
detected: false,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
else if (platform === "win32") {
|
|
64
|
+
tools.push({
|
|
65
|
+
name: "Claude Desktop",
|
|
66
|
+
configPath: path.join(process.env.APPDATA ?? path.join(HOME, "AppData", "Roaming"), "Claude", "claude_desktop_config.json"),
|
|
67
|
+
configKey: "mcpServers",
|
|
68
|
+
detected: false,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// Linux
|
|
73
|
+
tools.push({
|
|
74
|
+
name: "Claude Desktop",
|
|
75
|
+
configPath: path.join(HOME, ".config", "Claude", "claude_desktop_config.json"),
|
|
76
|
+
configKey: "mcpServers",
|
|
77
|
+
detected: false,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// Cursor
|
|
81
|
+
const cursorConfig = path.join(HOME, ".cursor", "mcp.json");
|
|
82
|
+
tools.push({
|
|
83
|
+
name: "Cursor",
|
|
84
|
+
configPath: cursorConfig,
|
|
85
|
+
configKey: "mcpServers",
|
|
86
|
+
detected: false,
|
|
87
|
+
});
|
|
88
|
+
// Windsurf
|
|
89
|
+
const windsurfConfig = path.join(HOME, ".windsurf", "mcp.json");
|
|
90
|
+
tools.push({
|
|
91
|
+
name: "Windsurf",
|
|
92
|
+
configPath: windsurfConfig,
|
|
93
|
+
configKey: "mcpServers",
|
|
94
|
+
detected: false,
|
|
95
|
+
});
|
|
96
|
+
// VS Code (Copilot MCP)
|
|
97
|
+
const vscodeConfig = path.join(HOME, ".vscode", "mcp.json");
|
|
98
|
+
tools.push({
|
|
99
|
+
name: "VS Code (Copilot)",
|
|
100
|
+
configPath: vscodeConfig,
|
|
101
|
+
configKey: "servers",
|
|
102
|
+
detected: false,
|
|
103
|
+
});
|
|
104
|
+
// Detect which tools exist
|
|
105
|
+
for (const tool of tools) {
|
|
106
|
+
const configDir = path.dirname(tool.configPath);
|
|
107
|
+
tool.detected = fs.existsSync(configDir);
|
|
108
|
+
}
|
|
109
|
+
return tools;
|
|
110
|
+
}
|
|
111
|
+
// ─── CLI Helpers ──────────────────────────────────────────
|
|
112
|
+
function createRL() {
|
|
113
|
+
return readline.createInterface({
|
|
114
|
+
input: process.stdin,
|
|
115
|
+
output: process.stdout,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
function ask(rl, question) {
|
|
119
|
+
return new Promise((resolve) => {
|
|
120
|
+
rl.question(question, (answer) => resolve(answer.trim()));
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
function print(msg) {
|
|
124
|
+
console.log(msg);
|
|
125
|
+
}
|
|
126
|
+
function printHeader() {
|
|
127
|
+
print("");
|
|
128
|
+
print("╔══════════════════════════════════════════╗");
|
|
129
|
+
print("║ 🧠 MIND MCP Server — Setup Wizard ║");
|
|
130
|
+
print("║ Give your AI agents persistent memory ║");
|
|
131
|
+
print("╚══════════════════════════════════════════╝");
|
|
132
|
+
print("");
|
|
133
|
+
}
|
|
134
|
+
// ─── Config Writing ───────────────────────────────────────
|
|
135
|
+
function getMindServerConfig(apiKey) {
|
|
136
|
+
// Use the globally installed CLI path, or fall back to local
|
|
137
|
+
const cliPath = path.resolve(__dirname, "cli.js");
|
|
138
|
+
return {
|
|
139
|
+
command: "node",
|
|
140
|
+
args: [cliPath],
|
|
141
|
+
env: {
|
|
142
|
+
MIND_API_KEY: apiKey,
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function writeToolConfig(tool, apiKey) {
|
|
147
|
+
try {
|
|
148
|
+
const configDir = path.dirname(tool.configPath);
|
|
149
|
+
if (!fs.existsSync(configDir)) {
|
|
150
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
151
|
+
}
|
|
152
|
+
let config = {};
|
|
153
|
+
if (fs.existsSync(tool.configPath)) {
|
|
154
|
+
try {
|
|
155
|
+
const raw = fs.readFileSync(tool.configPath, "utf-8");
|
|
156
|
+
config = JSON.parse(raw);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// If the file exists but is invalid JSON, start fresh
|
|
160
|
+
config = {};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// Get or create the MCP servers section
|
|
164
|
+
const serversKey = tool.configKey;
|
|
165
|
+
if (!config[serversKey] || typeof config[serversKey] !== "object") {
|
|
166
|
+
config[serversKey] = {};
|
|
167
|
+
}
|
|
168
|
+
// Add MIND server
|
|
169
|
+
config[serversKey]["mind"] =
|
|
170
|
+
getMindServerConfig(apiKey);
|
|
171
|
+
// Write back
|
|
172
|
+
fs.writeFileSync(tool.configPath, JSON.stringify(config, null, 2) + "\n", "utf-8");
|
|
173
|
+
return { success: true };
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
return { success: false, error: String(err) };
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// ─── API Key Validation ──────────────────────────────────
|
|
180
|
+
async function validateApiKey(apiKey, baseUrl) {
|
|
181
|
+
try {
|
|
182
|
+
const res = await fetch(`${baseUrl}/developer/v1/profile`, {
|
|
183
|
+
headers: { "X-API-Key": apiKey },
|
|
184
|
+
});
|
|
185
|
+
if (res.ok) {
|
|
186
|
+
return { valid: true };
|
|
187
|
+
}
|
|
188
|
+
return { valid: false, error: `API returned ${res.status}: ${res.statusText}` };
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
return { valid: false, error: String(err) };
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// ─── Main ─────────────────────────────────────────────────
|
|
195
|
+
async function main() {
|
|
196
|
+
printHeader();
|
|
197
|
+
const rl = createRL();
|
|
198
|
+
// Step 1: API Key
|
|
199
|
+
print("Step 1: Connect to your MIND");
|
|
200
|
+
print("─────────────────────────────");
|
|
201
|
+
print("You need a MIND API key. Get one at: https://m-i-n-d.ai → Settings → Developer → API Keys");
|
|
202
|
+
print("");
|
|
203
|
+
let apiKey = process.env.MIND_API_KEY ?? "";
|
|
204
|
+
if (apiKey) {
|
|
205
|
+
print(`Found MIND_API_KEY in environment: ${apiKey.slice(0, 12)}...`);
|
|
206
|
+
const useExisting = await ask(rl, "Use this key? (Y/n): ");
|
|
207
|
+
if (useExisting.toLowerCase() === "n") {
|
|
208
|
+
apiKey = "";
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (!apiKey) {
|
|
212
|
+
apiKey = await ask(rl, "Paste your MIND API key: ");
|
|
213
|
+
}
|
|
214
|
+
if (!apiKey) {
|
|
215
|
+
print("\n❌ No API key provided. Exiting.");
|
|
216
|
+
rl.close();
|
|
217
|
+
process.exit(1);
|
|
218
|
+
}
|
|
219
|
+
// Validate
|
|
220
|
+
const baseUrl = process.env.MIND_BASE_URL ?? "https://m-i-n-d.ai";
|
|
221
|
+
print("\nValidating API key...");
|
|
222
|
+
const validation = await validateApiKey(apiKey, baseUrl);
|
|
223
|
+
if (!validation.valid) {
|
|
224
|
+
print(`\n⚠️ Could not validate key: ${validation.error}`);
|
|
225
|
+
const proceed = await ask(rl, "Continue anyway? (y/N): ");
|
|
226
|
+
if (proceed.toLowerCase() !== "y") {
|
|
227
|
+
rl.close();
|
|
228
|
+
process.exit(1);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
print("✅ API key is valid!\n");
|
|
233
|
+
}
|
|
234
|
+
// Step 2: Detect AI tools
|
|
235
|
+
print("Step 2: Detect your AI tools");
|
|
236
|
+
print("─────────────────────────────");
|
|
237
|
+
const tools = getToolConfigs();
|
|
238
|
+
const detected = tools.filter((t) => t.detected);
|
|
239
|
+
const notDetected = tools.filter((t) => !t.detected);
|
|
240
|
+
if (detected.length > 0) {
|
|
241
|
+
print("Found these AI tools on your machine:");
|
|
242
|
+
for (const tool of detected) {
|
|
243
|
+
print(` ✅ ${tool.name}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (notDetected.length > 0) {
|
|
247
|
+
print("\nNot detected (you can still configure manually):");
|
|
248
|
+
for (const tool of notDetected) {
|
|
249
|
+
print(` ⬜ ${tool.name}`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
print("");
|
|
253
|
+
// Step 3: Configure each detected tool
|
|
254
|
+
print("Step 3: Configure MIND memory");
|
|
255
|
+
print("──────────────────────────────");
|
|
256
|
+
const configured = [];
|
|
257
|
+
for (const tool of detected) {
|
|
258
|
+
const answer = await ask(rl, `Add MIND to ${tool.name}? (Y/n): `);
|
|
259
|
+
if (answer.toLowerCase() === "n") {
|
|
260
|
+
print(` ⏭️ Skipped ${tool.name}`);
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
const result = writeToolConfig(tool, apiKey);
|
|
264
|
+
if (result.success) {
|
|
265
|
+
print(` ✅ ${tool.name} configured!`);
|
|
266
|
+
configured.push(tool.name);
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
print(` ❌ Failed: ${result.error}`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Also offer non-detected tools
|
|
273
|
+
for (const tool of notDetected) {
|
|
274
|
+
const answer = await ask(rl, `Configure MIND for ${tool.name} anyway? (y/N): `);
|
|
275
|
+
if (answer.toLowerCase() !== "y")
|
|
276
|
+
continue;
|
|
277
|
+
const result = writeToolConfig(tool, apiKey);
|
|
278
|
+
if (result.success) {
|
|
279
|
+
print(` ✅ ${tool.name} configured!`);
|
|
280
|
+
configured.push(tool.name);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
print(` ❌ Failed: ${result.error}`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Done
|
|
287
|
+
print("");
|
|
288
|
+
print("══════════════════════════════════════════");
|
|
289
|
+
print("🧠 MIND MCP Server setup complete!");
|
|
290
|
+
print("══════════════════════════════════════════");
|
|
291
|
+
print("");
|
|
292
|
+
if (configured.length > 0) {
|
|
293
|
+
print("Configured for:");
|
|
294
|
+
for (const name of configured) {
|
|
295
|
+
print(` ✅ ${name}`);
|
|
296
|
+
}
|
|
297
|
+
print("");
|
|
298
|
+
print("⚠️ Restart your AI tools for changes to take effect.");
|
|
299
|
+
print(" (Fully quit and reopen — not just close the window)");
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
print("No tools configured. You can run this again anytime:");
|
|
303
|
+
print(" npx @mindapp/mcp-server setup");
|
|
304
|
+
}
|
|
305
|
+
print("");
|
|
306
|
+
print("Your AI agents now have persistent memory. 🧠");
|
|
307
|
+
print("Everything they learn gets stored in your MIND knowledge graph.");
|
|
308
|
+
print("");
|
|
309
|
+
rl.close();
|
|
310
|
+
}
|
|
311
|
+
// Entry point
|
|
312
|
+
const args = process.argv.slice(2);
|
|
313
|
+
if (args.includes("setup") || args.includes("--setup")) {
|
|
314
|
+
main().catch((err) => {
|
|
315
|
+
console.error("Setup failed:", err);
|
|
316
|
+
process.exit(1);
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
// If called directly without "setup", show help
|
|
321
|
+
print("MIND MCP Server Setup");
|
|
322
|
+
print("");
|
|
323
|
+
print("Usage:");
|
|
324
|
+
print(" mind-mcp-setup Run interactive setup wizard");
|
|
325
|
+
print(" mind-mcp-setup setup Same as above");
|
|
326
|
+
print("");
|
|
327
|
+
main().catch((err) => {
|
|
328
|
+
console.error("Setup failed:", err);
|
|
329
|
+
process.exit(1);
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":";;AACA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,mDAAqC;AAErC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;AAW1B,SAAS,cAAc;IACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,KAAK,GAAiB,EAAE,CAAC;IAE/B,iBAAiB;IACjB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,gBAAgB;YACtB,UAAU,EAAE,IAAI,CAAC,IAAI,CACnB,IAAI,EACJ,SAAS,EACT,qBAAqB,EACrB,QAAQ,EACR,4BAA4B,CAC7B;YACD,SAAS,EAAE,YAAY;YACvB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,gBAAgB;YACtB,UAAU,EAAE,IAAI,CAAC,IAAI,CACnB,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAC5D,QAAQ,EACR,4BAA4B,CAC7B;YACD,SAAS,EAAE,YAAY;YACvB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,QAAQ;QACR,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,gBAAgB;YACtB,UAAU,EAAE,IAAI,CAAC,IAAI,CACnB,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,4BAA4B,CAC7B;YACD,SAAS,EAAE,YAAY;YACvB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;IACL,CAAC;IAED,SAAS;IACT,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,YAAY;QACxB,SAAS,EAAE,YAAY;QACvB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,WAAW;IACX,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IAChE,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,cAAc;QAC1B,SAAS,EAAE,YAAY;QACvB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,wBAAwB;IACxB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC;QACT,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,YAAY;QACxB,SAAS,EAAE,SAAS;QACpB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,2BAA2B;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6DAA6D;AAE7D,SAAS,QAAQ;IACf,OAAO,QAAQ,CAAC,eAAe,CAAC;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,GAAG,CAAC,EAAsB,EAAE,QAAgB;IACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,KAAK,CAAC,GAAW;IACxB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,WAAW;IAClB,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACtD,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACtD,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACtD,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACtD,KAAK,CAAC,EAAE,CAAC,CAAC;AACZ,CAAC;AAED,6DAA6D;AAE7D,SAAS,mBAAmB,CAAC,MAAc;IACzC,6DAA6D;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAElD,OAAO;QACL,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,CAAC,OAAO,CAAC;QACf,GAAG,EAAE;YACH,YAAY,EAAE,MAAM;SACrB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,IAAgB,EAChB,MAAc;IAEd,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,MAAM,GAA4B,EAAE,CAAC;QACzC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACtD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,sDAAsD;gBACtD,MAAM,GAAG,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,QAAQ,EAAE,CAAC;YAClE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QAC1B,CAAC;QAED,kBAAkB;QACjB,MAAM,CAAC,UAAU,CAA6B,CAAC,MAAM,CAAC;YACrD,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAE9B,aAAa;QACb,EAAE,CAAC,aAAa,CACd,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EACtC,OAAO,CACR,CAAC;QAEF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAChD,CAAC;AACH,CAAC;AAED,4DAA4D;AAE5D,KAAK,UAAU,cAAc,CAC3B,MAAc,EACd,OAAe;IAEf,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,uBAAuB,EAAE;YACzD,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;SACjC,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;IAClF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,6DAA6D;AAE7D,KAAK,UAAU,IAAI;IACjB,WAAW,EAAE,CAAC;IAEd,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IAEtB,kBAAkB;IAClB,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACtC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACvC,KAAK,CAAC,2FAA2F,CAAC,CAAC;IACnG,KAAK,CAAC,EAAE,CAAC,CAAC;IAEV,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;IAC5C,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,sCAAsC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAC;QAC3D,IAAI,WAAW,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;YACtC,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,2BAA2B,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC3C,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,WAAW;IACX,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,oBAAoB,CAAC;IAClE,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,CAAC,iCAAiC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,0BAA0B,CAAC,CAAC;QAC1D,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;YAClC,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACjC,CAAC;IAED,0BAA0B;IAC1B,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACtC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAEvC,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAErD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC/C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAC5D,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,EAAE,CAAC,CAAC;IAEV,uCAAuC;IACvC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACvC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAExC,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,eAAe,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;YACjC,KAAK,CAAC,iBAAiB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACpC,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC;YACtC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,eAAe,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,GAAG,CACtB,EAAE,EACF,sBAAsB,IAAI,CAAC,IAAI,kBAAkB,CAClD,CAAC;QACF,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG;YAAE,SAAS;QAE3C,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC;YACtC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,eAAe,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO;IACP,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACpD,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC5C,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACpD,KAAK,CAAC,EAAE,CAAC,CAAC;IAEV,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,KAAK,CAAC,EAAE,CAAC,CAAC;QACV,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC/D,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC9D,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACvD,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACzE,KAAK,CAAC,EAAE,CAAC,CAAC;IAEV,EAAE,CAAC,KAAK,EAAE,CAAC;AACb,CAAC;AAED,cAAc;AACd,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;IACvD,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,CAAC;IACN,gDAAgD;IAChD,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChB,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAChE,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@astramindapp/mcp-server",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MIND MCP Server — Universal AI memory layer. Give any LLM agent persistent memory, structured context, and automatic knowledge capture via the Model Context Protocol.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"mind-mcp": "dist/cli.js",
|
|
9
|
+
"mind-mcp-setup": "dist/setup.js"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"dev": "tsx src/cli.ts",
|
|
14
|
+
"start": "node dist/cli.js",
|
|
15
|
+
"lint": "eslint src/",
|
|
16
|
+
"test": "vitest run"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"mcp",
|
|
20
|
+
"model-context-protocol",
|
|
21
|
+
"ai-memory",
|
|
22
|
+
"knowledge-graph",
|
|
23
|
+
"llm",
|
|
24
|
+
"mind",
|
|
25
|
+
"mindapp"
|
|
26
|
+
],
|
|
27
|
+
"author": "Astra AI <hello@theastraway.com>",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/theastraway/MINDapp.git",
|
|
32
|
+
"directory": "mcp-server"
|
|
33
|
+
},
|
|
34
|
+
"engines": {
|
|
35
|
+
"node": ">=18"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"@modelcontextprotocol/sdk": "^1.12.1"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/node": "^22.0.0",
|
|
42
|
+
"typescript": "^5.7.0",
|
|
43
|
+
"tsx": "^4.19.0",
|
|
44
|
+
"vitest": "^3.0.0"
|
|
45
|
+
}
|
|
46
|
+
}
|
package/src/cli.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* MIND MCP Server — CLI Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* MIND_API_KEY=mind_xxx mind-mcp
|
|
7
|
+
* MIND_API_KEY=mind_xxx MIND_BASE_URL=https://m-i-n-d.ai mind-mcp
|
|
8
|
+
*
|
|
9
|
+
* Environment variables:
|
|
10
|
+
* MIND_API_KEY — Required. Your MIND Developer API key.
|
|
11
|
+
* MIND_BASE_URL — Optional. Defaults to https://m-i-n-d.ai
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
15
|
+
import { MindClient } from "./mind-client.js";
|
|
16
|
+
import { createMindMcpServer } from "./server.js";
|
|
17
|
+
|
|
18
|
+
const API_KEY = process.env.MIND_API_KEY;
|
|
19
|
+
const BASE_URL = process.env.MIND_BASE_URL ?? "https://m-i-n-d.ai";
|
|
20
|
+
|
|
21
|
+
if (!API_KEY) {
|
|
22
|
+
console.error(
|
|
23
|
+
"Error: MIND_API_KEY environment variable is required.\n" +
|
|
24
|
+
"Get your API key at https://m-i-n-d.ai → Settings → Developer → API Keys\n"
|
|
25
|
+
);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async function main() {
|
|
30
|
+
const apiKey = API_KEY!;
|
|
31
|
+
const client = new MindClient({ baseUrl: BASE_URL, apiKey });
|
|
32
|
+
const server = createMindMcpServer(client);
|
|
33
|
+
const transport = new StdioServerTransport();
|
|
34
|
+
|
|
35
|
+
await server.connect(transport);
|
|
36
|
+
|
|
37
|
+
// Log to stderr so it doesn't interfere with MCP stdio protocol
|
|
38
|
+
console.error(`MIND MCP Server v0.1.0 started`);
|
|
39
|
+
console.error(` → Base URL: ${BASE_URL}`);
|
|
40
|
+
console.error(` → API Key: ${apiKey.slice(0, 8)}...`);
|
|
41
|
+
console.error(` → Tools: mind_query, mind_remember, mind_context, mind_life, mind_crm, mind_graph`);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
main().catch((err) => {
|
|
45
|
+
console.error("Fatal error starting MIND MCP Server:", err);
|
|
46
|
+
process.exit(1);
|
|
47
|
+
});
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @mindapp/mcp-server
|
|
3
|
+
*
|
|
4
|
+
* MIND MCP Server — Universal AI memory layer.
|
|
5
|
+
* Give any LLM agent persistent memory via the Model Context Protocol.
|
|
6
|
+
*
|
|
7
|
+
* Programmatic usage:
|
|
8
|
+
* import { createMindMcpServer, MindClient } from "@mindapp/mcp-server";
|
|
9
|
+
* const client = new MindClient({ baseUrl: "https://m-i-n-d.ai", apiKey: "mind_xxx" });
|
|
10
|
+
* const server = createMindMcpServer(client);
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export { createMindMcpServer } from "./server.js";
|
|
14
|
+
export { MindClient } from "./mind-client.js";
|
|
15
|
+
export type * from "./mind-client.js";
|