@simple-product/mcp 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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,632 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
+ import chalk from "chalk";
6
+ import ora from "ora";
7
+ import open from "open";
8
+ import * as fs from "fs";
9
+ import * as path from "path";
10
+ import * as os from "os";
11
+ import * as crypto from "crypto";
12
+ // ============================================
13
+ // Configuration
14
+ // ============================================
15
+ const PRODUCTION_URL = "https://simple-product.app";
16
+ const DEV_URL = "http://localhost:3000";
17
+ const CONFIG_DIR = path.join(os.homedir(), ".simple-product");
18
+ const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
19
+ // ============================================
20
+ // CLI Argument Parsing
21
+ // ============================================
22
+ const args = process.argv.slice(2);
23
+ const isInstall = args.includes("--install");
24
+ const isDev = args.includes("--dev");
25
+ const isHelp = args.includes("--help") || args.includes("-h");
26
+ if (isHelp) {
27
+ console.log(`
28
+ ${chalk.bold("Simple Product MCP Server")}
29
+
30
+ Usage:
31
+ npx @simple-product/mcp [options]
32
+
33
+ Options:
34
+ --install Run the installation wizard
35
+ --dev Use local development server (localhost:3000)
36
+ --help, -h Show this help message
37
+
38
+ Examples:
39
+ npx @simple-product/mcp --install Install and configure for production
40
+ npx @simple-product/mcp --install --dev Install and configure for local dev
41
+ npx @simple-product/mcp Start the MCP server
42
+ `);
43
+ process.exit(0);
44
+ }
45
+ // ============================================
46
+ // Utility Functions
47
+ // ============================================
48
+ function ensureConfigDir() {
49
+ if (!fs.existsSync(CONFIG_DIR)) {
50
+ fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
51
+ }
52
+ }
53
+ function loadConfig() {
54
+ try {
55
+ if (fs.existsSync(CONFIG_FILE)) {
56
+ const data = fs.readFileSync(CONFIG_FILE, "utf-8");
57
+ return JSON.parse(data);
58
+ }
59
+ }
60
+ catch {
61
+ // Config doesn't exist or is invalid
62
+ }
63
+ return null;
64
+ }
65
+ function saveConfig(config) {
66
+ ensureConfigDir();
67
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), {
68
+ mode: 0o600,
69
+ });
70
+ }
71
+ function generateDeviceCode() {
72
+ const chars = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
73
+ let code = "";
74
+ for (let i = 0; i < 8; i++) {
75
+ if (i === 4)
76
+ code += "-";
77
+ code += chars[crypto.randomInt(chars.length)];
78
+ }
79
+ return code;
80
+ }
81
+ // ============================================
82
+ // Welcome Banner
83
+ // ============================================
84
+ function showWelcomeBanner() {
85
+ console.log(chalk.magenta(`
86
+ ╔═══════════════════════════════════════════════════════════╗
87
+ ║ ║
88
+ ║ ${chalk.bold("Simple Product MCP Server")} ║
89
+ ║ ║
90
+ ║ Access your docs, cards, boards, and customers ║
91
+ ║ directly from your coding agent. ║
92
+ ║ ║
93
+ ╚═══════════════════════════════════════════════════════════╝
94
+ `));
95
+ }
96
+ async function detectTools() {
97
+ const tools = [];
98
+ // Claude Code (check for claude CLI)
99
+ try {
100
+ const { execSync } = await import("child_process");
101
+ execSync("which claude", { stdio: "ignore" });
102
+ tools.push({
103
+ name: "Claude Code",
104
+ detected: true,
105
+ configType: "claude-cli",
106
+ });
107
+ }
108
+ catch {
109
+ tools.push({ name: "Claude Code", detected: false });
110
+ }
111
+ // Cursor
112
+ const cursorConfig = path.join(os.homedir(), ".cursor", "mcp.json");
113
+ tools.push({
114
+ name: "Cursor",
115
+ detected: fs.existsSync(path.dirname(cursorConfig)),
116
+ configPath: cursorConfig,
117
+ configType: "json",
118
+ });
119
+ // Windsurf
120
+ const windsurfConfig = path.join(os.homedir(), ".codeium", "windsurf", "mcp_config.json");
121
+ tools.push({
122
+ name: "Windsurf",
123
+ detected: fs.existsSync(path.dirname(windsurfConfig)),
124
+ configPath: windsurfConfig,
125
+ configType: "json",
126
+ });
127
+ // VS Code (check for settings directory)
128
+ const vscodeConfig = path.join(os.homedir(), ".vscode", "mcp.json");
129
+ const vscodeDir = path.join(os.homedir(), ".vscode");
130
+ tools.push({
131
+ name: "VS Code",
132
+ detected: fs.existsSync(vscodeDir),
133
+ configPath: vscodeConfig,
134
+ configType: "json",
135
+ });
136
+ return tools;
137
+ }
138
+ // ============================================
139
+ // Tool Configuration
140
+ // ============================================
141
+ async function configureClaudeCode(baseUrl) {
142
+ const spinner = ora("Configuring Claude Code...").start();
143
+ try {
144
+ const { execSync } = await import("child_process");
145
+ // Remove existing if present
146
+ try {
147
+ execSync("claude mcp remove simple-product", { stdio: "ignore" });
148
+ }
149
+ catch {
150
+ // Ignore if not present
151
+ }
152
+ // Add the MCP server
153
+ const envArg = baseUrl !== PRODUCTION_URL
154
+ ? `--env SIMPLE_PRODUCT_URL=${baseUrl}`
155
+ : "";
156
+ execSync(`claude mcp add simple-product -- npx @simple-product/mcp@latest ${envArg}`.trim(), { stdio: "ignore" });
157
+ spinner.succeed("Claude Code configured");
158
+ return true;
159
+ }
160
+ catch (error) {
161
+ spinner.fail("Failed to configure Claude Code");
162
+ return false;
163
+ }
164
+ }
165
+ async function configureJsonTool(toolName, configPath, baseUrl) {
166
+ const spinner = ora(`Configuring ${toolName}...`).start();
167
+ try {
168
+ // Ensure directory exists
169
+ const dir = path.dirname(configPath);
170
+ if (!fs.existsSync(dir)) {
171
+ fs.mkdirSync(dir, { recursive: true });
172
+ }
173
+ // Load existing config or create new
174
+ let config = {};
175
+ if (fs.existsSync(configPath)) {
176
+ try {
177
+ config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
178
+ }
179
+ catch {
180
+ config = {};
181
+ }
182
+ }
183
+ // Add our server
184
+ if (!config.mcpServers) {
185
+ config.mcpServers = {};
186
+ }
187
+ const mcpServers = config.mcpServers;
188
+ mcpServers["simple-product"] = {
189
+ command: "npx",
190
+ args: ["@simple-product/mcp@latest"],
191
+ env: baseUrl !== PRODUCTION_URL ? { SIMPLE_PRODUCT_URL: baseUrl } : {},
192
+ };
193
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
194
+ spinner.succeed(`${toolName} configured`);
195
+ return true;
196
+ }
197
+ catch (error) {
198
+ spinner.fail(`Failed to configure ${toolName}`);
199
+ return false;
200
+ }
201
+ }
202
+ // ============================================
203
+ // Device Flow Authentication
204
+ // ============================================
205
+ async function authenticateWithDeviceFlow(baseUrl) {
206
+ const deviceCode = generateDeviceCode();
207
+ const verificationUrl = `${baseUrl}/device`;
208
+ console.log();
209
+ console.log(chalk.bold("Step 1: Authenticate"));
210
+ console.log();
211
+ console.log(` Your device code is:`);
212
+ console.log(chalk.bold.yellow(` ${deviceCode}`));
213
+ console.log();
214
+ console.log(` Press ${chalk.bold("Enter")} to open ${chalk.cyan(verificationUrl)}`);
215
+ // Wait for user to press Enter
216
+ await new Promise((resolve) => {
217
+ process.stdin.setRawMode?.(false);
218
+ process.stdin.resume();
219
+ process.stdin.once("data", () => {
220
+ resolve();
221
+ });
222
+ });
223
+ // Register the device code with the server
224
+ const spinner = ora("Waiting for authorization...").start();
225
+ try {
226
+ // Register device code
227
+ const registerResponse = await fetch(`${baseUrl}/api/auth/device/register`, {
228
+ method: "POST",
229
+ headers: { "Content-Type": "application/json" },
230
+ body: JSON.stringify({ deviceCode }),
231
+ });
232
+ if (!registerResponse.ok) {
233
+ throw new Error("Failed to register device code");
234
+ }
235
+ const { pollToken } = await registerResponse.json();
236
+ // Open browser
237
+ try {
238
+ await open(verificationUrl);
239
+ }
240
+ catch {
241
+ // Ignore if browser can't be opened
242
+ }
243
+ // Poll for authorization
244
+ const maxAttempts = 60; // 5 minutes with 5 second intervals
245
+ for (let i = 0; i < maxAttempts; i++) {
246
+ await new Promise((resolve) => setTimeout(resolve, 5000));
247
+ const pollResponse = await fetch(`${baseUrl}/api/auth/device/poll`, {
248
+ method: "POST",
249
+ headers: { "Content-Type": "application/json" },
250
+ body: JSON.stringify({ pollToken }),
251
+ });
252
+ if (pollResponse.ok) {
253
+ const result = await pollResponse.json();
254
+ if (result.status === "authorized" && result.accessToken) {
255
+ spinner.succeed("Authenticated!");
256
+ return {
257
+ baseUrl,
258
+ accessToken: result.accessToken,
259
+ refreshToken: result.refreshToken,
260
+ expiresAt: result.expiresAt,
261
+ userEmail: result.userEmail,
262
+ workspaceId: result.workspaceId,
263
+ workspaceSlug: result.workspaceSlug,
264
+ };
265
+ }
266
+ else if (result.status === "expired") {
267
+ spinner.fail("Authorization expired. Please try again.");
268
+ return null;
269
+ }
270
+ // status === "pending" - continue polling
271
+ }
272
+ }
273
+ spinner.fail("Authorization timed out. Please try again.");
274
+ return null;
275
+ }
276
+ catch (error) {
277
+ spinner.fail(`Authentication failed: ${error instanceof Error ? error.message : "Unknown error"}`);
278
+ return null;
279
+ }
280
+ }
281
+ // ============================================
282
+ // Install Flow
283
+ // ============================================
284
+ async function runInstall() {
285
+ showWelcomeBanner();
286
+ const baseUrl = isDev ? DEV_URL : PRODUCTION_URL;
287
+ console.log(chalk.dim(` Mode: ${isDev ? "Development (localhost:3000)" : "Production"}`));
288
+ console.log();
289
+ // Step 1: Detect tools
290
+ console.log(chalk.bold("Detecting installed tools..."));
291
+ const tools = await detectTools();
292
+ const detectedTools = tools.filter((t) => t.detected);
293
+ if (detectedTools.length === 0) {
294
+ console.log(chalk.yellow(" No compatible tools detected. You can still authenticate and configure manually."));
295
+ }
296
+ else {
297
+ console.log(chalk.green(` Found ${detectedTools.length} compatible tool(s):`));
298
+ for (const tool of detectedTools) {
299
+ console.log(chalk.green(` ✓ ${tool.name}`));
300
+ }
301
+ }
302
+ console.log();
303
+ // Step 2: Authenticate
304
+ const config = await authenticateWithDeviceFlow(baseUrl);
305
+ if (!config) {
306
+ process.exit(1);
307
+ }
308
+ // Save config
309
+ saveConfig(config);
310
+ console.log(chalk.dim(` Config saved to ${CONFIG_FILE}`));
311
+ console.log();
312
+ // Step 3: Configure tools
313
+ if (detectedTools.length > 0) {
314
+ console.log(chalk.bold("Configuring tools..."));
315
+ for (const tool of detectedTools) {
316
+ if (tool.configType === "claude-cli") {
317
+ await configureClaudeCode(baseUrl);
318
+ }
319
+ else if (tool.configType === "json" && tool.configPath) {
320
+ await configureJsonTool(tool.name, tool.configPath, baseUrl);
321
+ }
322
+ }
323
+ console.log();
324
+ }
325
+ // Success!
326
+ console.log(chalk.green.bold("✓ Setup complete!"));
327
+ console.log();
328
+ console.log(" You can now use Simple Product from your coding agent.");
329
+ console.log(" Try asking Claude to:");
330
+ console.log(chalk.cyan(" • List my boards"));
331
+ console.log(chalk.cyan(" • Search for documents about authentication"));
332
+ console.log(chalk.cyan(" • Create a card for the new feature idea"));
333
+ console.log();
334
+ if (config.userEmail) {
335
+ console.log(chalk.dim(` Logged in as: ${config.userEmail}`));
336
+ }
337
+ if (config.workspaceSlug) {
338
+ console.log(chalk.dim(` Workspace: ${config.workspaceSlug}`));
339
+ }
340
+ }
341
+ // ============================================
342
+ // MCP Server
343
+ // ============================================
344
+ async function runServer() {
345
+ const config = loadConfig();
346
+ if (!config) {
347
+ console.error("Not authenticated. Run with --install first:\n npx @simple-product/mcp --install");
348
+ process.exit(1);
349
+ }
350
+ const baseUrl = process.env.SIMPLE_PRODUCT_URL || config.baseUrl;
351
+ const server = new Server({
352
+ name: "simple-product",
353
+ version: "0.1.0",
354
+ }, {
355
+ capabilities: {
356
+ tools: {},
357
+ },
358
+ });
359
+ // Define tools
360
+ const tools = [
361
+ {
362
+ name: "list_boards",
363
+ description: "List all boards in the workspace",
364
+ inputSchema: { type: "object", properties: {} },
365
+ },
366
+ {
367
+ name: "get_board",
368
+ description: "Get details about a specific board including its stages",
369
+ inputSchema: {
370
+ type: "object",
371
+ properties: {
372
+ boardId: { type: "string", description: "The ID of the board" },
373
+ },
374
+ required: ["boardId"],
375
+ },
376
+ },
377
+ {
378
+ name: "create_board",
379
+ description: "Create a new board",
380
+ inputSchema: {
381
+ type: "object",
382
+ properties: {
383
+ name: { type: "string", description: "Name of the board" },
384
+ },
385
+ required: ["name"],
386
+ },
387
+ },
388
+ {
389
+ name: "list_cards",
390
+ description: "List all cards in the workspace, optionally filtered by board",
391
+ inputSchema: {
392
+ type: "object",
393
+ properties: {
394
+ boardId: { type: "string", description: "Optional board ID to filter by" },
395
+ },
396
+ },
397
+ },
398
+ {
399
+ name: "search_cards",
400
+ description: "Search for cards by title or description",
401
+ inputSchema: {
402
+ type: "object",
403
+ properties: {
404
+ query: { type: "string", description: "Search query" },
405
+ boardId: { type: "string", description: "Optional board ID to filter by" },
406
+ },
407
+ required: ["query"],
408
+ },
409
+ },
410
+ {
411
+ name: "create_card",
412
+ description: "Create a new card on a board",
413
+ inputSchema: {
414
+ type: "object",
415
+ properties: {
416
+ boardId: { type: "string", description: "The board ID" },
417
+ title: { type: "string", description: "Card title" },
418
+ description: { type: "string", description: "Card description" },
419
+ stageName: { type: "string", description: "Stage name (e.g., 'To Do', 'In Progress', 'Done')" },
420
+ },
421
+ required: ["boardId", "title"],
422
+ },
423
+ },
424
+ {
425
+ name: "update_card",
426
+ description: "Update a card's title or description",
427
+ inputSchema: {
428
+ type: "object",
429
+ properties: {
430
+ cardId: { type: "string", description: "The card ID" },
431
+ title: { type: "string", description: "New title" },
432
+ description: { type: "string", description: "New description" },
433
+ },
434
+ required: ["cardId"],
435
+ },
436
+ },
437
+ {
438
+ name: "move_card",
439
+ description: "Move a card to a different stage",
440
+ inputSchema: {
441
+ type: "object",
442
+ properties: {
443
+ cardId: { type: "string", description: "The card ID" },
444
+ stageName: { type: "string", description: "Target stage name" },
445
+ },
446
+ required: ["cardId", "stageName"],
447
+ },
448
+ },
449
+ {
450
+ name: "search_docs",
451
+ description: "Search for documents by title",
452
+ inputSchema: {
453
+ type: "object",
454
+ properties: {
455
+ query: { type: "string", description: "Search query" },
456
+ },
457
+ required: ["query"],
458
+ },
459
+ },
460
+ {
461
+ name: "get_doc",
462
+ description: "Get a document's full content",
463
+ inputSchema: {
464
+ type: "object",
465
+ properties: {
466
+ docId: { type: "string", description: "The document ID" },
467
+ },
468
+ required: ["docId"],
469
+ },
470
+ },
471
+ {
472
+ name: "create_doc",
473
+ description: "Create a new document",
474
+ inputSchema: {
475
+ type: "object",
476
+ properties: {
477
+ title: { type: "string", description: "Document title" },
478
+ content: { type: "string", description: "Document content (markdown)" },
479
+ },
480
+ required: ["title"],
481
+ },
482
+ },
483
+ {
484
+ name: "update_doc",
485
+ description: "Update a document",
486
+ inputSchema: {
487
+ type: "object",
488
+ properties: {
489
+ docId: { type: "string", description: "The document ID" },
490
+ title: { type: "string", description: "New title" },
491
+ content: { type: "string", description: "New content" },
492
+ },
493
+ required: ["docId"],
494
+ },
495
+ },
496
+ {
497
+ name: "search_people",
498
+ description: "Search for contacts by name or email",
499
+ inputSchema: {
500
+ type: "object",
501
+ properties: {
502
+ query: { type: "string", description: "Search query" },
503
+ },
504
+ required: ["query"],
505
+ },
506
+ },
507
+ {
508
+ name: "create_person",
509
+ description: "Create a new contact",
510
+ inputSchema: {
511
+ type: "object",
512
+ properties: {
513
+ name: { type: "string", description: "Person's name" },
514
+ email: { type: "string", description: "Email address" },
515
+ phone: { type: "string", description: "Phone number" },
516
+ },
517
+ required: ["name"],
518
+ },
519
+ },
520
+ {
521
+ name: "search_orgs",
522
+ description: "Search for organizations by name or domain",
523
+ inputSchema: {
524
+ type: "object",
525
+ properties: {
526
+ query: { type: "string", description: "Search query" },
527
+ },
528
+ required: ["query"],
529
+ },
530
+ },
531
+ {
532
+ name: "create_org",
533
+ description: "Create a new organization",
534
+ inputSchema: {
535
+ type: "object",
536
+ properties: {
537
+ name: { type: "string", description: "Organization name" },
538
+ domain: { type: "string", description: "Website domain" },
539
+ },
540
+ required: ["name"],
541
+ },
542
+ },
543
+ {
544
+ name: "search",
545
+ description: "Search across all entities (docs, boards, people, orgs)",
546
+ inputSchema: {
547
+ type: "object",
548
+ properties: {
549
+ query: { type: "string", description: "Search query" },
550
+ },
551
+ required: ["query"],
552
+ },
553
+ },
554
+ ];
555
+ // Handle list tools
556
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
557
+ return { tools };
558
+ });
559
+ // Handle tool calls
560
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
561
+ const { name, arguments: args } = request.params;
562
+ try {
563
+ // Call the API endpoint
564
+ const response = await fetch(`${baseUrl}/api/mcp/execute`, {
565
+ method: "POST",
566
+ headers: {
567
+ "Content-Type": "application/json",
568
+ "Authorization": `Bearer ${config.accessToken}`,
569
+ },
570
+ body: JSON.stringify({
571
+ tool: name,
572
+ input: args,
573
+ workspaceId: config.workspaceId,
574
+ }),
575
+ });
576
+ if (!response.ok) {
577
+ const error = await response.text();
578
+ return {
579
+ content: [{ type: "text", text: `Error: ${error}` }],
580
+ isError: true,
581
+ };
582
+ }
583
+ const result = await response.json();
584
+ if (result.success) {
585
+ return {
586
+ content: [
587
+ {
588
+ type: "text",
589
+ text: result.message || JSON.stringify(result.data, null, 2),
590
+ },
591
+ ],
592
+ };
593
+ }
594
+ else {
595
+ return {
596
+ content: [{ type: "text", text: `Error: ${result.error}` }],
597
+ isError: true,
598
+ };
599
+ }
600
+ }
601
+ catch (error) {
602
+ return {
603
+ content: [
604
+ {
605
+ type: "text",
606
+ text: `Error: ${error instanceof Error ? error.message : "Unknown error"}`,
607
+ },
608
+ ],
609
+ isError: true,
610
+ };
611
+ }
612
+ });
613
+ // Start server
614
+ const transport = new StdioServerTransport();
615
+ await server.connect(transport);
616
+ }
617
+ // ============================================
618
+ // Main
619
+ // ============================================
620
+ if (isInstall) {
621
+ runInstall().catch((error) => {
622
+ console.error("Installation failed:", error);
623
+ process.exit(1);
624
+ });
625
+ }
626
+ else {
627
+ runServer().catch((error) => {
628
+ console.error("Server error:", error);
629
+ process.exit(1);
630
+ });
631
+ }
632
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@simple-product/mcp",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for Simple Product - access docs, cards, boards, and customers from your coding agent",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "simple-product-mcp": "./dist/index.js"
8
+ },
9
+ "type": "module",
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "start": "node dist/index.js",
14
+ "prepublishOnly": "npm run build"
15
+ },
16
+ "keywords": [
17
+ "mcp",
18
+ "model-context-protocol",
19
+ "claude",
20
+ "simple-product",
21
+ "ai-tools"
22
+ ],
23
+ "author": "",
24
+ "license": "MIT",
25
+ "dependencies": {
26
+ "@modelcontextprotocol/sdk": "^1.0.0",
27
+ "chalk": "^5.3.0",
28
+ "open": "^10.1.0",
29
+ "ora": "^8.0.1"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^20.10.0",
33
+ "typescript": "^5.3.0"
34
+ },
35
+ "engines": {
36
+ "node": ">=18.0.0"
37
+ },
38
+ "files": [
39
+ "dist"
40
+ ]
41
+ }