@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.
- package/README.md +527 -0
- package/dist/connectors/claude-desktop.d.ts +26 -0
- package/dist/connectors/claude-desktop.d.ts.map +1 -0
- package/dist/connectors/claude-desktop.js +133 -0
- package/dist/connectors/claude-desktop.js.map +1 -0
- package/dist/connectors/cursor.d.ts +25 -0
- package/dist/connectors/cursor.d.ts.map +1 -0
- package/dist/connectors/cursor.js +115 -0
- package/dist/connectors/cursor.js.map +1 -0
- package/dist/connectors/index.d.ts +11 -0
- package/dist/connectors/index.d.ts.map +1 -0
- package/dist/connectors/index.js +11 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors/setup.d.ts +12 -0
- package/dist/connectors/setup.d.ts.map +1 -0
- package/dist/connectors/setup.js +230 -0
- package/dist/connectors/setup.js.map +1 -0
- package/dist/connectors/vscode.d.ts +25 -0
- package/dist/connectors/vscode.d.ts.map +1 -0
- package/dist/connectors/vscode.js +63 -0
- package/dist/connectors/vscode.js.map +1 -0
- package/dist/connectors/windsurf.d.ts +25 -0
- package/dist/connectors/windsurf.d.ts.map +1 -0
- package/dist/connectors/windsurf.js +115 -0
- package/dist/connectors/windsurf.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +185 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/dobby-client.d.ts +195 -0
- package/dist/lib/dobby-client.d.ts.map +1 -0
- package/dist/lib/dobby-client.js +219 -0
- package/dist/lib/dobby-client.js.map +1 -0
- package/dist/prompts/index.d.ts +25 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +208 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/resources/index.d.ts +27 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +182 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/tools/approvals.d.ts +104 -0
- package/dist/tools/approvals.d.ts.map +1 -0
- package/dist/tools/approvals.js +164 -0
- package/dist/tools/approvals.js.map +1 -0
- package/dist/tools/index.d.ts +260 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +215 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/messages.d.ts +68 -0
- package/dist/tools/messages.d.ts.map +1 -0
- package/dist/tools/messages.js +105 -0
- package/dist/tools/messages.js.map +1 -0
- package/dist/tools/tasks.d.ts +180 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +344 -0
- package/dist/tools/tasks.js.map +1 -0
- 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
|