@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
@@ -0,0 +1,182 @@
1
+ /**
2
+ * MCP Resources
3
+ *
4
+ * Read-only data sources that can be accessed by clients.
5
+ * Resources use URI schemes like tasks://list, approvals://pending
6
+ */
7
+ // ============================================
8
+ // Resource Definitions
9
+ // ============================================
10
+ export const resourceDefinitions = [
11
+ {
12
+ uri: 'tasks://list',
13
+ name: 'All Tasks',
14
+ description: 'List of all tasks in the current tenant',
15
+ mimeType: 'application/json',
16
+ },
17
+ {
18
+ uri: 'tasks://pending',
19
+ name: 'Pending Tasks',
20
+ description: 'Tasks waiting to be started',
21
+ mimeType: 'application/json',
22
+ },
23
+ {
24
+ uri: 'tasks://in-progress',
25
+ name: 'In Progress Tasks',
26
+ description: 'Tasks currently being worked on by agents',
27
+ mimeType: 'application/json',
28
+ },
29
+ {
30
+ uri: 'tasks://completed',
31
+ name: 'Completed Tasks',
32
+ description: 'Successfully completed tasks',
33
+ mimeType: 'application/json',
34
+ },
35
+ {
36
+ uri: 'approvals://pending',
37
+ name: 'Pending Approvals',
38
+ description: 'Approval requests waiting for your response',
39
+ mimeType: 'application/json',
40
+ },
41
+ ];
42
+ // ============================================
43
+ // Resource Templates (Dynamic URIs)
44
+ // ============================================
45
+ export const resourceTemplates = [
46
+ {
47
+ uriTemplate: 'tasks://{task_id}',
48
+ name: 'Task Details',
49
+ description: 'Detailed information about a specific task',
50
+ mimeType: 'application/json',
51
+ },
52
+ {
53
+ uriTemplate: 'tasks://{task_id}/messages',
54
+ name: 'Task Messages',
55
+ description: 'Conversation messages for a specific task',
56
+ mimeType: 'application/json',
57
+ },
58
+ ];
59
+ // ============================================
60
+ // Resource Handler
61
+ // ============================================
62
+ export async function handleResourceRead(uri, client) {
63
+ const url = new URL(uri);
64
+ const scheme = url.protocol.replace(':', '');
65
+ const path = url.pathname.replace('//', '');
66
+ switch (scheme) {
67
+ case 'tasks': {
68
+ return handleTasksResource(path, client);
69
+ }
70
+ case 'approvals': {
71
+ return handleApprovalsResource(path, client);
72
+ }
73
+ default:
74
+ throw new Error(`Unknown resource scheme: ${scheme}`);
75
+ }
76
+ }
77
+ // ============================================
78
+ // Tasks Resources
79
+ // ============================================
80
+ async function handleTasksResource(path, client) {
81
+ // Handle list/filtered lists
82
+ if (path === 'list' || path === '') {
83
+ const tasks = await client.listTasks({ limit: 100 });
84
+ return {
85
+ contents: [
86
+ {
87
+ uri: 'tasks://list',
88
+ mimeType: 'application/json',
89
+ text: JSON.stringify({ tasks, count: tasks.length }, null, 2),
90
+ },
91
+ ],
92
+ };
93
+ }
94
+ if (path === 'pending') {
95
+ const tasks = await client.listTasks({ status: 'pending' });
96
+ return {
97
+ contents: [
98
+ {
99
+ uri: 'tasks://pending',
100
+ mimeType: 'application/json',
101
+ text: JSON.stringify({ tasks, count: tasks.length }, null, 2),
102
+ },
103
+ ],
104
+ };
105
+ }
106
+ if (path === 'in-progress') {
107
+ const tasks = await client.listTasks({ status: 'in_progress' });
108
+ return {
109
+ contents: [
110
+ {
111
+ uri: 'tasks://in-progress',
112
+ mimeType: 'application/json',
113
+ text: JSON.stringify({ tasks, count: tasks.length }, null, 2),
114
+ },
115
+ ],
116
+ };
117
+ }
118
+ if (path === 'completed') {
119
+ const tasks = await client.listTasks({ status: 'completed' });
120
+ return {
121
+ contents: [
122
+ {
123
+ uri: 'tasks://completed',
124
+ mimeType: 'application/json',
125
+ text: JSON.stringify({ tasks, count: tasks.length }, null, 2),
126
+ },
127
+ ],
128
+ };
129
+ }
130
+ // Handle specific task: tasks://{task_id}
131
+ const parts = path.split('/');
132
+ const taskId = parts[0];
133
+ if (parts.length === 1) {
134
+ // Get task details
135
+ const task = await client.getTask(taskId);
136
+ if (!task) {
137
+ throw new Error(`Task not found: ${taskId}`);
138
+ }
139
+ return {
140
+ contents: [
141
+ {
142
+ uri: `tasks://${taskId}`,
143
+ mimeType: 'application/json',
144
+ text: JSON.stringify(task, null, 2),
145
+ },
146
+ ],
147
+ };
148
+ }
149
+ if (parts[1] === 'messages') {
150
+ // Get task messages
151
+ const messages = await client.getMessages(taskId);
152
+ return {
153
+ contents: [
154
+ {
155
+ uri: `tasks://${taskId}/messages`,
156
+ mimeType: 'application/json',
157
+ text: JSON.stringify({ messages, count: messages.length }, null, 2),
158
+ },
159
+ ],
160
+ };
161
+ }
162
+ throw new Error(`Unknown tasks resource path: ${path}`);
163
+ }
164
+ // ============================================
165
+ // Approvals Resources
166
+ // ============================================
167
+ async function handleApprovalsResource(path, client) {
168
+ if (path === 'pending' || path === '') {
169
+ const approvals = await client.getPendingApprovals();
170
+ return {
171
+ contents: [
172
+ {
173
+ uri: 'approvals://pending',
174
+ mimeType: 'application/json',
175
+ text: JSON.stringify({ approvals, count: approvals.length }, null, 2),
176
+ },
177
+ ],
178
+ };
179
+ }
180
+ throw new Error(`Unknown approvals resource path: ${path}`);
181
+ }
182
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Approval Workflow Tools
3
+ *
4
+ * MCP tools for handling approval requests (Human-in-the-Loop).
5
+ */
6
+ import { DobbyClient } from '../lib/dobby-client.js';
7
+ export declare const approvalTools: {
8
+ get_pending_approvals: {
9
+ name: string;
10
+ description: string;
11
+ inputSchema: {
12
+ type: "object";
13
+ properties: {};
14
+ };
15
+ };
16
+ approve_task: {
17
+ name: string;
18
+ description: string;
19
+ inputSchema: {
20
+ type: "object";
21
+ properties: {
22
+ approval_id: {
23
+ type: string;
24
+ description: string;
25
+ };
26
+ note: {
27
+ type: string;
28
+ description: string;
29
+ };
30
+ };
31
+ required: string[];
32
+ };
33
+ };
34
+ reject_task: {
35
+ name: string;
36
+ description: string;
37
+ inputSchema: {
38
+ type: "object";
39
+ properties: {
40
+ approval_id: {
41
+ type: string;
42
+ description: string;
43
+ };
44
+ reason: {
45
+ type: string;
46
+ description: string;
47
+ };
48
+ };
49
+ required: string[];
50
+ };
51
+ };
52
+ request_changes: {
53
+ name: string;
54
+ description: string;
55
+ inputSchema: {
56
+ type: "object";
57
+ properties: {
58
+ approval_id: {
59
+ type: string;
60
+ description: string;
61
+ };
62
+ changes: {
63
+ type: string;
64
+ description: string;
65
+ };
66
+ };
67
+ required: string[];
68
+ };
69
+ };
70
+ };
71
+ export declare function handleGetPendingApprovals(client: DobbyClient): Promise<{
72
+ content: {
73
+ type: "text";
74
+ text: string;
75
+ }[];
76
+ }>;
77
+ export declare function handleApproveTask(client: DobbyClient, args: {
78
+ approval_id: string;
79
+ note?: string;
80
+ }): Promise<{
81
+ content: {
82
+ type: "text";
83
+ text: string;
84
+ }[];
85
+ }>;
86
+ export declare function handleRejectTask(client: DobbyClient, args: {
87
+ approval_id: string;
88
+ reason?: string;
89
+ }): Promise<{
90
+ content: {
91
+ type: "text";
92
+ text: string;
93
+ }[];
94
+ }>;
95
+ export declare function handleRequestChanges(client: DobbyClient, args: {
96
+ approval_id: string;
97
+ changes: string;
98
+ }): Promise<{
99
+ content: {
100
+ type: "text";
101
+ text: string;
102
+ }[];
103
+ }>;
104
+ //# sourceMappingURL=approvals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../src/tools/approvals.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAMrD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEzB,CAAC;AAMF,wBAAsB,yBAAyB,CAAC,MAAM,EAAE,WAAW;;;;;GAyClE;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;;;;;GAYF;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;;;;;GAYF;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;;;;;GAgBF"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Approval Workflow Tools
3
+ *
4
+ * MCP tools for handling approval requests (Human-in-the-Loop).
5
+ */
6
+ // ============================================
7
+ // Tool Definitions
8
+ // ============================================
9
+ export const approvalTools = {
10
+ // Get pending approvals
11
+ get_pending_approvals: {
12
+ name: 'get_pending_approvals',
13
+ description: 'Get all pending approval requests that need your attention',
14
+ inputSchema: {
15
+ type: 'object',
16
+ properties: {},
17
+ },
18
+ },
19
+ // Approve a task/request (triggers automatic PR merge)
20
+ approve_task: {
21
+ name: 'approve_task',
22
+ description: 'Approve a pending approval request. The agent will automatically merge the PR and complete the task.',
23
+ inputSchema: {
24
+ type: 'object',
25
+ properties: {
26
+ approval_id: {
27
+ type: 'string',
28
+ description: 'The approval ID to approve',
29
+ },
30
+ note: {
31
+ type: 'string',
32
+ description: 'Optional note to include with the approval',
33
+ },
34
+ },
35
+ required: ['approval_id'],
36
+ },
37
+ },
38
+ // Reject a task/request (triggers automatic retry with feedback)
39
+ reject_task: {
40
+ name: 'reject_task',
41
+ description: 'Reject a pending approval request. The agent will automatically retry and address your feedback.',
42
+ inputSchema: {
43
+ type: 'object',
44
+ properties: {
45
+ approval_id: {
46
+ type: 'string',
47
+ description: 'The approval ID to reject',
48
+ },
49
+ reason: {
50
+ type: 'string',
51
+ description: 'Feedback explaining what changes are needed (the agent will use this to improve)',
52
+ },
53
+ },
54
+ required: ['approval_id'],
55
+ },
56
+ },
57
+ // Request changes
58
+ request_changes: {
59
+ name: 'request_changes',
60
+ description: 'Request changes to a pending approval (PR needs modifications)',
61
+ inputSchema: {
62
+ type: 'object',
63
+ properties: {
64
+ approval_id: {
65
+ type: 'string',
66
+ description: 'The approval ID',
67
+ },
68
+ changes: {
69
+ type: 'string',
70
+ description: 'Description of the changes needed',
71
+ },
72
+ },
73
+ required: ['approval_id', 'changes'],
74
+ },
75
+ },
76
+ };
77
+ // ============================================
78
+ // Tool Handlers
79
+ // ============================================
80
+ export async function handleGetPendingApprovals(client) {
81
+ const approvals = await client.getPendingApprovals();
82
+ if (approvals.length === 0) {
83
+ return {
84
+ content: [
85
+ {
86
+ type: 'text',
87
+ text: '✨ No pending approvals! All caught up.',
88
+ },
89
+ ],
90
+ };
91
+ }
92
+ const approvalList = approvals
93
+ .map((approval, i) => {
94
+ const typeEmoji = {
95
+ pr_create: 'šŸ“',
96
+ pr_merge: 'šŸ”€',
97
+ deploy: 'šŸš€',
98
+ destructive: 'āš ļø',
99
+ }[approval.approval_type] || 'ā“';
100
+ const timeSince = getTimeSince(new Date(approval.created_at));
101
+ return `${i + 1}. ${typeEmoji} **${approval.approval_type.replace('_', ' ').toUpperCase()}**
102
+ ID: \`${approval.id}\`
103
+ Task: \`${approval.task_id}\`
104
+ ${approval.description}
105
+ ā° Waiting: ${timeSince}`;
106
+ })
107
+ .join('\n\n');
108
+ return {
109
+ content: [
110
+ {
111
+ type: 'text',
112
+ text: `# šŸ”” Pending Approvals (${approvals.length})\n\n${approvalList}\n\n---\nUse \`approve_task\` or \`reject_task\` to respond.`,
113
+ },
114
+ ],
115
+ };
116
+ }
117
+ export async function handleApproveTask(client, args) {
118
+ const result = await client.approveTask(args.approval_id, args.note);
119
+ return {
120
+ content: [
121
+ {
122
+ type: 'text',
123
+ text: `āœ… **Approved!** ${args.approval_id}${args.note ? `\n\nNote: "${args.note}"` : ''}\n\nšŸ”€ The agent is now merging the PR automatically. Use \`get_task_timeline\` to track progress.`,
124
+ },
125
+ ],
126
+ };
127
+ }
128
+ export async function handleRejectTask(client, args) {
129
+ const result = await client.rejectTask(args.approval_id, args.reason);
130
+ return {
131
+ content: [
132
+ {
133
+ type: 'text',
134
+ text: `āŒ **Rejected!** ${args.approval_id}${args.reason ? `\n\nšŸ’¬ Feedback: "${args.reason}"` : ''}\n\nšŸ” The agent is now retrying and will address your feedback. Use \`get_task_timeline\` to track progress.`,
135
+ },
136
+ ],
137
+ };
138
+ }
139
+ export async function handleRequestChanges(client, args) {
140
+ // For now, this is implemented as a rejection with feedback
141
+ await client.rejectTask(args.approval_id, `Changes requested: ${args.changes}`);
142
+ return {
143
+ content: [
144
+ {
145
+ type: 'text',
146
+ text: `šŸ“ Changes requested for: ${args.approval_id}\n\n"${args.changes}"\n\nThe agent will make the requested modifications.`,
147
+ },
148
+ ],
149
+ };
150
+ }
151
+ // ============================================
152
+ // Helpers
153
+ // ============================================
154
+ function getTimeSince(date) {
155
+ const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
156
+ if (seconds < 60)
157
+ return `${seconds} seconds ago`;
158
+ if (seconds < 3600)
159
+ return `${Math.floor(seconds / 60)} minutes ago`;
160
+ if (seconds < 86400)
161
+ return `${Math.floor(seconds / 3600)} hours ago`;
162
+ return `${Math.floor(seconds / 86400)} days ago`;
163
+ }
164
+ //# sourceMappingURL=approvals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../src/tools/approvals.ts"],"names":[],"mappings":"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"}