@dobbyai/mcp-external 1.0.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.
Files changed (58) hide show
  1. package/README.md +527 -0
  2. package/dist/connectors/claude-desktop.d.ts +26 -0
  3. package/dist/connectors/claude-desktop.d.ts.map +1 -0
  4. package/dist/connectors/claude-desktop.js +133 -0
  5. package/dist/connectors/claude-desktop.js.map +1 -0
  6. package/dist/connectors/cursor.d.ts +25 -0
  7. package/dist/connectors/cursor.d.ts.map +1 -0
  8. package/dist/connectors/cursor.js +115 -0
  9. package/dist/connectors/cursor.js.map +1 -0
  10. package/dist/connectors/index.d.ts +11 -0
  11. package/dist/connectors/index.d.ts.map +1 -0
  12. package/dist/connectors/index.js +11 -0
  13. package/dist/connectors/index.js.map +1 -0
  14. package/dist/connectors/setup.d.ts +12 -0
  15. package/dist/connectors/setup.d.ts.map +1 -0
  16. package/dist/connectors/setup.js +230 -0
  17. package/dist/connectors/setup.js.map +1 -0
  18. package/dist/connectors/vscode.d.ts +25 -0
  19. package/dist/connectors/vscode.d.ts.map +1 -0
  20. package/dist/connectors/vscode.js +63 -0
  21. package/dist/connectors/vscode.js.map +1 -0
  22. package/dist/connectors/windsurf.d.ts +25 -0
  23. package/dist/connectors/windsurf.d.ts.map +1 -0
  24. package/dist/connectors/windsurf.js +115 -0
  25. package/dist/connectors/windsurf.js.map +1 -0
  26. package/dist/index.d.ts +14 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +185 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/lib/dobby-client.d.ts +195 -0
  31. package/dist/lib/dobby-client.d.ts.map +1 -0
  32. package/dist/lib/dobby-client.js +219 -0
  33. package/dist/lib/dobby-client.js.map +1 -0
  34. package/dist/prompts/index.d.ts +25 -0
  35. package/dist/prompts/index.d.ts.map +1 -0
  36. package/dist/prompts/index.js +208 -0
  37. package/dist/prompts/index.js.map +1 -0
  38. package/dist/resources/index.d.ts +27 -0
  39. package/dist/resources/index.d.ts.map +1 -0
  40. package/dist/resources/index.js +182 -0
  41. package/dist/resources/index.js.map +1 -0
  42. package/dist/tools/approvals.d.ts +104 -0
  43. package/dist/tools/approvals.d.ts.map +1 -0
  44. package/dist/tools/approvals.js +164 -0
  45. package/dist/tools/approvals.js.map +1 -0
  46. package/dist/tools/index.d.ts +260 -0
  47. package/dist/tools/index.d.ts.map +1 -0
  48. package/dist/tools/index.js +215 -0
  49. package/dist/tools/index.js.map +1 -0
  50. package/dist/tools/messages.d.ts +68 -0
  51. package/dist/tools/messages.d.ts.map +1 -0
  52. package/dist/tools/messages.js +105 -0
  53. package/dist/tools/messages.js.map +1 -0
  54. package/dist/tools/tasks.d.ts +180 -0
  55. package/dist/tools/tasks.d.ts.map +1 -0
  56. package/dist/tools/tasks.js +344 -0
  57. package/dist/tools/tasks.js.map +1 -0
  58. package/package.json +62 -0
package/README.md ADDED
@@ -0,0 +1,527 @@
1
+ # Dobby MCP Server
2
+
3
+ > Connect to Dobby AI Platform from Claude Desktop, Cursor, Windsurf, VS Code, and any MCP-compatible client.
4
+
5
+ ## 🚀 Quick Start
6
+
7
+ ### Option 1: Interactive Setup (Recommended)
8
+
9
+ ```bash
10
+ npx @dobbyai/mcp-external --setup
11
+ ```
12
+
13
+ This will guide you through connecting Dobby to your preferred AI tools.
14
+
15
+ ### Option 2: Manual Setup
16
+
17
+ 1. Get your API credentials from [Dobby Dashboard](https://app.dobby.ai/settings/api)
18
+ 2. Add to your MCP client config:
19
+
20
+ ```json
21
+ {
22
+ "mcpServers": {
23
+ "dobby": {
24
+ "command": "npx",
25
+ "args": ["-y", "@dobbyai/mcp-external"],
26
+ "env": {
27
+ "DOBBY_API_URL": "https://app.dobby.ai",
28
+ "DOBBY_API_KEY": "your-api-key",
29
+ "DOBBY_TENANT_ID": "your-tenant-id"
30
+ }
31
+ }
32
+ }
33
+ }
34
+ ```
35
+
36
+ ## 📱 Supported Clients
37
+
38
+ | Client | Status | Setup Command |
39
+ |--------|--------|---------------|
40
+ | Claude Desktop | ✅ Full Support | `npx @dobbyai/mcp-external --setup` |
41
+ | Cursor | ✅ Full Support | `npx @dobbyai/mcp-external --setup` |
42
+ | Windsurf | ✅ Full Support | `npx @dobbyai/mcp-external --setup` |
43
+ | VS Code (Cline) | ✅ Full Support | Manual config |
44
+ | VS Code (Continue) | ✅ Full Support | Manual config |
45
+ | Any MCP Client | ✅ STDIO Mode | Manual config |
46
+
47
+ ---
48
+
49
+ ## 🔧 Available Tools (12 Tools)
50
+
51
+ ### Task Management (6 tools)
52
+
53
+ | Tool | Description | Example |
54
+ |------|-------------|---------|
55
+ | `create_task` | Create a new task for AI agents | `create_task(title: "Add dark mode", priority: "high")` |
56
+ | `list_tasks` | List tasks with filters | `list_tasks(status: "pending", limit: 10)` |
57
+ | `get_task` | Get detailed task information | `get_task(task_id: "task-abc123")` |
58
+ | `update_task` | Update task status or priority | `update_task(task_id: "...", status: "in_progress")` |
59
+ | `get_task_timeline` | Get activity history for a task | `get_task_timeline(task_id: "...")` |
60
+ | `cancel_task` | Cancel a running task | `cancel_task(task_id: "...")` |
61
+
62
+ ### Conversation (2 tools)
63
+
64
+ | Tool | Description | Example |
65
+ |------|-------------|---------|
66
+ | `get_messages` | Get conversation for a task | `get_messages(task_id: "...", limit: 20)` |
67
+ | `send_message` | Send a message to task conversation | `send_message(task_id: "...", content: "Please add tests")` |
68
+
69
+ ### Approvals - Human-in-the-Loop (4 tools)
70
+
71
+ | Tool | Description | Example |
72
+ |------|-------------|---------|
73
+ | `get_pending_approvals` | List approvals waiting for you | `get_pending_approvals()` |
74
+ | `approve_task` | Approve a pending request (auto-merges PR) | `approve_task(approval_id: "...", note: "LGTM")` |
75
+ | `reject_task` | Reject with feedback (agent retries automatically) | `reject_task(approval_id: "...", reason: "Need tests")` |
76
+ | `request_changes` | Request specific modifications | `request_changes(approval_id: "...", changes: "...")` |
77
+
78
+ ---
79
+
80
+ ## 🔄 Approval Flow
81
+
82
+ The Dobby MCP Server supports a complete Human-in-the-Loop workflow:
83
+
84
+ ```
85
+ ┌─────────────────────────────────────────────────────────────────┐
86
+ │ APPROVAL WORKFLOW │
87
+ ├─────────────────────────────────────────────────────────────────┤
88
+ │ │
89
+ │ 1. Agent completes work → Creates PR → Requests approval │
90
+ │ │
91
+ │ 2. User receives notification via get_pending_approvals │
92
+ │ │
93
+ │ 3. User reviews and decides: │
94
+ │ │
95
+ │ ┌─────────────────┐ ┌─────────────────┐ │
96
+ │ │ approve_task │ │ reject_task │ │
97
+ │ │ │ │ │ │
98
+ │ │ ✅ Auto-merge │ │ 🔁 Auto-retry │ │
99
+ │ │ PR │ │ with feedback │ │
100
+ │ └────────┬────────┘ └────────┬────────┘ │
101
+ │ │ │ │
102
+ │ ▼ ▼ │
103
+ │ ┌─────────────────┐ ┌─────────────────┐ │
104
+ │ │ Task Completed │ │ Agent Addresses │ │
105
+ │ │ 🎉 │ │ Feedback & ... │──► Back to 1 │
106
+ │ └─────────────────┘ └─────────────────┘ │
107
+ │ │
108
+ └─────────────────────────────────────────────────────────────────┘
109
+ ```
110
+
111
+ ### Approve Flow
112
+ 1. User calls `approve_task(approval_id, note?)`
113
+ 2. Agent automatically merges the PR
114
+ 3. Task status changes to `completed`
115
+ 4. User gets confirmation via `get_task_timeline`
116
+
117
+ ### Reject Flow (with automatic retry)
118
+ 1. User calls `reject_task(approval_id, reason)`
119
+ 2. Agent receives feedback
120
+ 3. Agent re-analyzes and addresses the feedback
121
+ 4. Agent creates new implementation
122
+ 5. New approval is requested
123
+ 6. User reviews again
124
+
125
+ ---
126
+
127
+ ## 📊 Task Timeline
128
+
129
+ Track every action on a task with `get_task_timeline`:
130
+
131
+ ```
132
+ 📊 Timeline for Task task-abc123
133
+
134
+ 🆕 task created (User)
135
+ 2/2/2026, 10:00:00 AM
136
+
137
+ 📋 plan created (DevCoordinator)
138
+ 2/2/2026, 10:00:05 AM
139
+
140
+ ▶️ subtask started (dobby-frontend-agent)
141
+ 2/2/2026, 10:00:10 AM
142
+
143
+ 🎨 frontend code generated (FrontendDeveloper)
144
+ 2/2/2026, 10:01:30 AM
145
+
146
+ 📝 pr created (FrontendDeveloper)
147
+ PR #42
148
+ 2/2/2026, 10:01:45 AM
149
+
150
+ ⏳ approval requested (DevCoordinator)
151
+ 2/2/2026, 10:01:50 AM
152
+
153
+ ✅ approval approved (User)
154
+ 2/2/2026, 10:05:00 AM
155
+
156
+ 🚀 agent continuation triggered (system)
157
+ 2/2/2026, 10:05:01 AM
158
+
159
+ 🔀 pr merged (DevCoordinator)
160
+ PR #42
161
+ 2/2/2026, 10:05:10 AM
162
+
163
+ 🎉 continuation after approval completed (DevCoordinator)
164
+ 2/2/2026, 10:05:15 AM
165
+ ```
166
+
167
+ ---
168
+
169
+ ## 📚 Resources
170
+
171
+ Access data directly via MCP resources:
172
+
173
+ ```
174
+ tasks://list # All tasks
175
+ tasks://pending # Pending tasks
176
+ tasks://in-progress # In-progress tasks
177
+ tasks://completed # Completed tasks
178
+ tasks://{task_id} # Specific task details
179
+ tasks://{task_id}/messages # Task conversation
180
+ approvals://pending # Pending approvals
181
+ ```
182
+
183
+ ---
184
+
185
+ ## 💬 Prompts (Slash Commands)
186
+
187
+ | Command | Description |
188
+ |---------|-------------|
189
+ | `/create-feature` | Guided feature creation |
190
+ | `/fix-bug` | Create bug fix task |
191
+ | `/check-approvals` | Review pending approvals |
192
+ | `/task-status` | Get task status summary |
193
+ | `/review-pr` | Review a task's PR |
194
+
195
+ ---
196
+
197
+ ## 🖥️ Client-Specific Setup
198
+
199
+ ### Claude Desktop
200
+
201
+ **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
202
+ **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
203
+ **Linux:** `~/.config/Claude/claude_desktop_config.json`
204
+
205
+ ```json
206
+ {
207
+ "mcpServers": {
208
+ "dobby": {
209
+ "command": "npx",
210
+ "args": ["-y", "@dobbyai/mcp-external"],
211
+ "env": {
212
+ "DOBBY_API_URL": "https://app.dobby.ai",
213
+ "DOBBY_API_KEY": "dk_your_api_key",
214
+ "DOBBY_TENANT_ID": "your-tenant-id"
215
+ }
216
+ }
217
+ }
218
+ }
219
+ ```
220
+
221
+ ### Cursor
222
+
223
+ Settings → MCP → Add Server:
224
+
225
+ ```json
226
+ {
227
+ "dobby": {
228
+ "command": "npx",
229
+ "args": ["-y", "@dobbyai/mcp-external"],
230
+ "env": {
231
+ "DOBBY_API_URL": "https://app.dobby.ai",
232
+ "DOBBY_API_KEY": "dk_your_api_key",
233
+ "DOBBY_TENANT_ID": "your-tenant-id"
234
+ }
235
+ }
236
+ }
237
+ ```
238
+
239
+ ### Windsurf
240
+
241
+ File: `~/.codeium/windsurf/mcp_config.json`
242
+
243
+ ```json
244
+ {
245
+ "mcpServers": {
246
+ "dobby": {
247
+ "command": "npx",
248
+ "args": ["-y", "@dobbyai/mcp-external"],
249
+ "env": {
250
+ "DOBBY_API_URL": "https://app.dobby.ai",
251
+ "DOBBY_API_KEY": "dk_your_api_key",
252
+ "DOBBY_TENANT_ID": "your-tenant-id"
253
+ }
254
+ }
255
+ }
256
+ }
257
+ ```
258
+
259
+ ### VS Code with Cline
260
+
261
+ Command Palette → "Cline: Open MCP Settings" → Add:
262
+
263
+ ```json
264
+ {
265
+ "mcpServers": {
266
+ "dobby": {
267
+ "command": "npx",
268
+ "args": ["-y", "@dobbyai/mcp-external"],
269
+ "env": {
270
+ "DOBBY_API_URL": "https://app.dobby.ai",
271
+ "DOBBY_API_KEY": "dk_your_api_key",
272
+ "DOBBY_TENANT_ID": "your-tenant-id"
273
+ }
274
+ }
275
+ }
276
+ }
277
+ ```
278
+
279
+ ---
280
+
281
+ ## 🔐 Environment Variables
282
+
283
+ | Variable | Required | Description |
284
+ |----------|----------|-------------|
285
+ | `DOBBY_API_URL` | Yes | Dobby API URL (default: https://app.dobby.ai) |
286
+ | `DOBBY_API_KEY` | Yes | Your Dobby API key |
287
+ | `DOBBY_TENANT_ID` | Yes | Your workspace/tenant ID |
288
+ | `DOBBY_USER_ID` | No | User ID for messages |
289
+ | `DOBBY_USER_NAME` | No | Display name for messages |
290
+
291
+ ---
292
+
293
+ ## 📖 Usage Examples
294
+
295
+ ### Create a Feature Task
296
+
297
+ ```
298
+ You: Create a task to add dark mode to the settings page
299
+
300
+ Claude: [Uses create_task tool]
301
+ ✅ Task created: task-abc123
302
+ Title: Add dark mode to settings page
303
+ Priority: medium
304
+
305
+ The AI agents will start working on it soon.
306
+ ```
307
+
308
+ ### Check Approvals
309
+
310
+ ```
311
+ You: Check my pending approvals
312
+
313
+ Claude: [Uses get_pending_approvals]
314
+
315
+ 🔔 You have 2 pending approvals:
316
+
317
+ 1. 📝 PR CREATE - Add user authentication
318
+ ID: approval-xyz789
319
+ Waiting: 5 minutes
320
+
321
+ 2. 🔀 PR MERGE - Fix login bug
322
+ ID: approval-abc456
323
+ Waiting: 1 hour
324
+
325
+ Which one would you like to review?
326
+ ```
327
+
328
+ ### Approve a PR (Auto-Merge)
329
+
330
+ ```
331
+ You: Approve approval-xyz789 with note "looks good"
332
+
333
+ Claude: [Uses approve_task]
334
+ ✅ **Approved!** approval-xyz789
335
+
336
+ Note: "looks good"
337
+
338
+ 🔀 The agent is now merging the PR automatically.
339
+ Use `get_task_timeline` to track progress.
340
+ ```
341
+
342
+ ### Reject with Feedback (Auto-Retry)
343
+
344
+ ```
345
+ You: Reject approval-abc456 because it needs unit tests
346
+
347
+ Claude: [Uses reject_task]
348
+ ❌ **Rejected!** approval-abc456
349
+
350
+ 💬 Feedback: "needs unit tests"
351
+
352
+ 🔁 The agent is now retrying and will address your feedback.
353
+ Use `get_task_timeline` to track progress.
354
+ ```
355
+
356
+ ### Cancel Running Task
357
+
358
+ ```
359
+ You: Cancel task-def789, it's taking too long
360
+
361
+ Claude: [Uses cancel_task]
362
+ 🛑 Task task-def789 execution cancelled successfully.
363
+
364
+ The task status has been reverted to pending.
365
+ ```
366
+
367
+ ### View Task Timeline
368
+
369
+ ```
370
+ You: Show me the timeline for task-abc123
371
+
372
+ Claude: [Uses get_task_timeline]
373
+
374
+ 📊 Timeline for Task task-abc123
375
+
376
+ 🆕 **task created** (User)
377
+ 2/2/2026, 10:00:00 AM
378
+
379
+ 📋 **plan created** (DevCoordinator)
380
+ 2/2/2026, 10:00:05 AM
381
+
382
+ 🎨 **frontend code generated** (FrontendDeveloper)
383
+ 2/2/2026, 10:01:30 AM
384
+
385
+ 📝 **pr created** PR #42
386
+ 2/2/2026, 10:01:45 AM
387
+
388
+ ✅ **approval approved**
389
+ 2/2/2026, 10:05:00 AM
390
+
391
+ 🔀 **pr merged** PR #42
392
+ 2/2/2026, 10:05:10 AM
393
+ ```
394
+
395
+ ---
396
+
397
+ ## 🏗️ Architecture
398
+
399
+ ```
400
+ ┌─────────────────────────────────────────────────────────────────┐
401
+ │ MCP Client │
402
+ │ (Claude Desktop, Cursor, Windsurf, etc.) │
403
+ └──────────────────────────┬──────────────────────────────────────┘
404
+ │ MCP Protocol (STDIO)
405
+
406
+ ┌─────────────────────────────────────────────────────────────────┐
407
+ │ Dobby MCP Server │
408
+ │ ┌─────────────────────────────────────────────────────────────┐│
409
+ │ │ Tools │ Resources │ Prompts ││
410
+ │ │ - create_task │ - tasks:// │ - /create-feature ││
411
+ │ │ - list_tasks │ - approvals:// │ - /fix-bug ││
412
+ │ │ - get_task │ │ - /check-approvals ││
413
+ │ │ - update_task │ │ - /task-status ││
414
+ │ │ - get_timeline │ │ - /review-pr ││
415
+ │ │ - cancel_task │ │ ││
416
+ │ │ - get_messages │ │ ││
417
+ │ │ - send_message │ │ ││
418
+ │ │ - get_pending │ │ ││
419
+ │ │ - approve_task │ │ ││
420
+ │ │ - reject_task │ │ ││
421
+ │ │ - req_changes │ │ ││
422
+ │ └─────────────────────────────────────────────────────────────┘│
423
+ │ │ │
424
+ │ DobbyClient (API) │
425
+ └──────────────────────────────┬──────────────────────────────────┘
426
+ │ HTTPS
427
+
428
+ ┌─────────────────────────────────────────────────────────────────┐
429
+ │ Dobby API (Next.js) │
430
+ │ /api/dobby/tasks - Task CRUD │
431
+ │ /api/dobby/tasks/[id]/execute - Execute/Cancel task │
432
+ │ /api/dobby/tasks/[id]/conversation - Messages │
433
+ │ /api/dobby/approvals - Approval workflow │
434
+ └──────────────────────────────┬──────────────────────────────────┘
435
+
436
+
437
+ ┌─────────────────────────────────────────────────────────────────┐
438
+ │ Dobby Python API (FastAPI) │
439
+ │ POST /api/v1/tasks/{id}/execute - Start agent execution │
440
+ │ POST /api/v1/tasks/{id}/cancel - Cancel execution │
441
+ │ GET /api/v1/runs/{id}/status - Get run status │
442
+ └──────────────────────────────┬──────────────────────────────────┘
443
+
444
+
445
+ ┌─────────────────────────────────────────────────────────────────┐
446
+ │ AI Agents (Dobby) │
447
+ │ ┌──────────────┐ │
448
+ │ │ Chief Agent │ ─► Analyzes tasks, routes to coordinators │
449
+ │ └──────┬───────┘ │
450
+ │ │ │
451
+ │ ┌──────▼───────┐ │
452
+ │ │ DevCoordinator│ ─► Manages development workflow │
453
+ │ └──────┬───────┘ │
454
+ │ │ │
455
+ │ ┌──────▼───────────────────────────────────────┐ │
456
+ │ │ Workers │ │
457
+ │ │ - FrontendDeveloper (React, TypeScript) │ │
458
+ │ │ - BackendDeveloper (Python, FastAPI) │ │
459
+ │ │ - TestWriter (Unit tests) │ │
460
+ │ │ - CodeReviewer (PR review) │ │
461
+ │ │ - DevOpsWorker (CI/CD, PR merge) │ │
462
+ │ └───────────────────────────────────────────────┘ │
463
+ └─────────────────────────────────────────────────────────────────┘
464
+ ```
465
+
466
+ ---
467
+
468
+ ## 🛠️ Development
469
+
470
+ ```bash
471
+ # Clone the repo
472
+ git clone https://github.com/gil-dataopsvalley/repo-dobby.git
473
+ cd repo-dobby/mcp/external
474
+
475
+ # Install dependencies
476
+ npm install
477
+
478
+ # Run in development mode
479
+ npm run dev
480
+
481
+ # Build
482
+ npm run build
483
+
484
+ # Run tests
485
+ npm test
486
+ ```
487
+
488
+ ### Local Testing
489
+
490
+ ```bash
491
+ # Set environment variables
492
+ export DOBBY_API_URL=http://localhost:3000
493
+ export DOBBY_API_KEY=dev-key
494
+ export DOBBY_TENANT_ID=your-tenant-id
495
+
496
+ # Run the server
497
+ npm run dev
498
+ ```
499
+
500
+ ---
501
+
502
+ ## 📝 Changelog
503
+
504
+ ### v1.2.0 (2026-02-02)
505
+ - **NEW:** `get_task_timeline` tool - View all activity on a task
506
+ - **NEW:** `cancel_task` tool - Stop running task executions
507
+ - **IMPROVED:** `approve_task` now triggers automatic PR merge
508
+ - **IMPROVED:** `reject_task` now triggers automatic agent retry with feedback
509
+ - **IMPROVED:** Better response messages with action hints
510
+
511
+ ### v1.1.0 (2026-01-31)
512
+ - Added VS Code support (Cline, Continue)
513
+ - Added Windsurf connector
514
+ - Fixed approval endpoint compatibility
515
+
516
+ ### v1.0.0 (2026-01-29)
517
+ - Initial release
518
+ - 10 tools for task management, messaging, and approvals
519
+ - 7 resources for direct data access
520
+ - 5 slash command prompts
521
+ - Support for Claude Desktop and Cursor
522
+
523
+ ---
524
+
525
+ ## 📄 License
526
+
527
+ MIT © Dobby AI Platform
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Claude Desktop Connector
3
+ *
4
+ * Generates and installs configuration for Claude Desktop.
5
+ */
6
+ export interface ClaudeDesktopConfig {
7
+ mcpServers: {
8
+ dobby: {
9
+ command: string;
10
+ args: string[];
11
+ env: {
12
+ DOBBY_API_URL: string;
13
+ DOBBY_API_KEY: string;
14
+ DOBBY_TENANT_ID: string;
15
+ };
16
+ };
17
+ };
18
+ }
19
+ export declare function generateClaudeDesktopConfig(credentials: {
20
+ apiUrl: string;
21
+ apiKey: string;
22
+ tenantId: string;
23
+ }): ClaudeDesktopConfig;
24
+ export declare function installClaudeDesktopConfig(newConfig: ClaudeDesktopConfig): Promise<boolean>;
25
+ export declare function readClaudeDesktopConfig(): any | null;
26
+ //# sourceMappingURL=claude-desktop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-desktop.d.ts","sourceRoot":"","sources":["../../src/connectors/claude-desktop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0CH,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE;QACV,KAAK,EAAE;YACL,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,EAAE,MAAM,EAAE,CAAC;YACf,GAAG,EAAE;gBACH,aAAa,EAAE,MAAM,CAAC;gBACtB,aAAa,EAAE,MAAM,CAAC;gBACtB,eAAe,EAAE,MAAM,CAAC;aACzB,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,mBAAmB,CActB;AAMD,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,mBAAmB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAkClB;AAMD,wBAAgB,uBAAuB,IAAI,GAAG,GAAG,IAAI,CAYpD"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Claude Desktop Connector
3
+ *
4
+ * Generates and installs configuration for Claude Desktop.
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import * as os from 'os';
9
+ // ============================================
10
+ // Config Paths
11
+ // ============================================
12
+ function getConfigPath() {
13
+ const platform = os.platform();
14
+ if (platform === 'darwin') {
15
+ return path.join(os.homedir(), 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
16
+ }
17
+ else if (platform === 'win32') {
18
+ return path.join(process.env.APPDATA || '', 'Claude', 'claude_desktop_config.json');
19
+ }
20
+ else {
21
+ // Linux
22
+ return path.join(os.homedir(), '.config', 'Claude', 'claude_desktop_config.json');
23
+ }
24
+ }
25
+ export function generateClaudeDesktopConfig(credentials) {
26
+ return {
27
+ mcpServers: {
28
+ dobby: {
29
+ command: 'npx',
30
+ args: ['-y', '@dobbyai/mcp-external'],
31
+ env: {
32
+ DOBBY_API_URL: credentials.apiUrl,
33
+ DOBBY_API_KEY: credentials.apiKey,
34
+ DOBBY_TENANT_ID: credentials.tenantId,
35
+ },
36
+ },
37
+ },
38
+ };
39
+ }
40
+ // ============================================
41
+ // Config Installation
42
+ // ============================================
43
+ export async function installClaudeDesktopConfig(newConfig) {
44
+ try {
45
+ const configPath = getConfigPath();
46
+ const configDir = path.dirname(configPath);
47
+ // Create directory if it doesn't exist
48
+ if (!fs.existsSync(configDir)) {
49
+ fs.mkdirSync(configDir, { recursive: true });
50
+ }
51
+ // Read existing config or create empty
52
+ let existingConfig = {};
53
+ if (fs.existsSync(configPath)) {
54
+ const content = fs.readFileSync(configPath, 'utf-8');
55
+ existingConfig = JSON.parse(content);
56
+ }
57
+ // Merge configs
58
+ const mergedConfig = {
59
+ ...existingConfig,
60
+ mcpServers: {
61
+ ...existingConfig.mcpServers,
62
+ ...newConfig.mcpServers,
63
+ },
64
+ };
65
+ // Write config
66
+ fs.writeFileSync(configPath, JSON.stringify(mergedConfig, null, 2));
67
+ return true;
68
+ }
69
+ catch (error) {
70
+ console.error('Failed to install Claude Desktop config:', error);
71
+ return false;
72
+ }
73
+ }
74
+ // ============================================
75
+ // Config Reading
76
+ // ============================================
77
+ export function readClaudeDesktopConfig() {
78
+ try {
79
+ const configPath = getConfigPath();
80
+ if (!fs.existsSync(configPath)) {
81
+ return null;
82
+ }
83
+ const content = fs.readFileSync(configPath, 'utf-8');
84
+ return JSON.parse(content);
85
+ }
86
+ catch (error) {
87
+ return null;
88
+ }
89
+ }
90
+ // ============================================
91
+ // CLI Entry Point
92
+ // ============================================
93
+ // CLI Entry - ESM compatible
94
+ const isMain = process.argv[1]?.includes('claude-desktop');
95
+ if (isMain) {
96
+ const args = process.argv.slice(2);
97
+ if (args.includes('--setup')) {
98
+ const apiUrl = process.env.DOBBY_API_URL || 'https://app.dobby.ai';
99
+ const apiKey = process.env.DOBBY_API_KEY;
100
+ const tenantId = process.env.DOBBY_TENANT_ID;
101
+ if (!apiKey || !tenantId) {
102
+ console.error('Error: DOBBY_API_KEY and DOBBY_TENANT_ID are required');
103
+ process.exit(1);
104
+ }
105
+ const config = generateClaudeDesktopConfig({ apiUrl, apiKey, tenantId });
106
+ const success = await installClaudeDesktopConfig(config);
107
+ if (success) {
108
+ console.log('✅ Claude Desktop configured for Dobby');
109
+ console.log(' Restart Claude Desktop to apply changes.');
110
+ }
111
+ else {
112
+ console.error('❌ Failed to configure Claude Desktop');
113
+ console.log(' Add this config manually:');
114
+ console.log(JSON.stringify(config, null, 2));
115
+ }
116
+ }
117
+ else if (args.includes('--show')) {
118
+ const config = generateClaudeDesktopConfig({
119
+ apiUrl: process.env.DOBBY_API_URL || 'https://app.dobby.ai',
120
+ apiKey: process.env.DOBBY_API_KEY || '<YOUR_API_KEY>',
121
+ tenantId: process.env.DOBBY_TENANT_ID || '<YOUR_TENANT_ID>',
122
+ });
123
+ console.log(JSON.stringify(config, null, 2));
124
+ }
125
+ else {
126
+ console.log('Claude Desktop Connector for Dobby');
127
+ console.log('');
128
+ console.log('Usage:');
129
+ console.log(' --setup Install config (requires DOBBY_API_KEY, DOBBY_TENANT_ID)');
130
+ console.log(' --show Show config template');
131
+ }
132
+ }
133
+ //# sourceMappingURL=claude-desktop.js.map