@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/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":"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"}
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";