@voxos-ai/clink-mcp-server 0.4.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/LICENSE +21 -0
- package/README.md +382 -0
- package/dist/client.d.ts +285 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +414 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/add_checkpoint.d.ts +68 -0
- package/dist/tools/add_checkpoint.d.ts.map +1 -0
- package/dist/tools/add_checkpoint.js +108 -0
- package/dist/tools/add_checkpoint.js.map +1 -0
- package/dist/tools/archive_project.d.ts +23 -0
- package/dist/tools/archive_project.d.ts.map +1 -0
- package/dist/tools/archive_project.js +44 -0
- package/dist/tools/archive_project.js.map +1 -0
- package/dist/tools/cast_vote.d.ts +38 -0
- package/dist/tools/cast_vote.d.ts.map +1 -0
- package/dist/tools/cast_vote.js +148 -0
- package/dist/tools/cast_vote.js.map +1 -0
- package/dist/tools/check_inbox.d.ts +39 -0
- package/dist/tools/check_inbox.d.ts.map +1 -0
- package/dist/tools/check_inbox.js +99 -0
- package/dist/tools/check_inbox.js.map +1 -0
- package/dist/tools/claim_clink.d.ts +28 -0
- package/dist/tools/claim_clink.d.ts.map +1 -0
- package/dist/tools/claim_clink.js +51 -0
- package/dist/tools/claim_clink.js.map +1 -0
- package/dist/tools/complete_checkpoint.d.ts +33 -0
- package/dist/tools/complete_checkpoint.d.ts.map +1 -0
- package/dist/tools/complete_checkpoint.js +143 -0
- package/dist/tools/complete_checkpoint.js.map +1 -0
- package/dist/tools/complete_clink.d.ts +28 -0
- package/dist/tools/complete_clink.d.ts.map +1 -0
- package/dist/tools/complete_clink.js +50 -0
- package/dist/tools/complete_clink.js.map +1 -0
- package/dist/tools/complete_project.d.ts +23 -0
- package/dist/tools/complete_project.d.ts.map +1 -0
- package/dist/tools/complete_project.js +44 -0
- package/dist/tools/complete_project.js.map +1 -0
- package/dist/tools/create_milestone.d.ts +91 -0
- package/dist/tools/create_milestone.d.ts.map +1 -0
- package/dist/tools/create_milestone.js +114 -0
- package/dist/tools/create_milestone.js.map +1 -0
- package/dist/tools/create_project.d.ts +43 -0
- package/dist/tools/create_project.d.ts.map +1 -0
- package/dist/tools/create_project.js +77 -0
- package/dist/tools/create_project.js.map +1 -0
- package/dist/tools/create_proposal.d.ts +58 -0
- package/dist/tools/create_proposal.d.ts.map +1 -0
- package/dist/tools/create_proposal.js +102 -0
- package/dist/tools/create_proposal.js.map +1 -0
- package/dist/tools/delete_checkpoint.d.ts +28 -0
- package/dist/tools/delete_checkpoint.d.ts.map +1 -0
- package/dist/tools/delete_checkpoint.js +66 -0
- package/dist/tools/delete_checkpoint.js.map +1 -0
- package/dist/tools/finalize_proposal.d.ts +28 -0
- package/dist/tools/finalize_proposal.d.ts.map +1 -0
- package/dist/tools/finalize_proposal.js +86 -0
- package/dist/tools/finalize_proposal.js.map +1 -0
- package/dist/tools/get_clinks.d.ts +43 -0
- package/dist/tools/get_clinks.d.ts.map +1 -0
- package/dist/tools/get_clinks.js +110 -0
- package/dist/tools/get_clinks.js.map +1 -0
- package/dist/tools/get_milestone.d.ts +23 -0
- package/dist/tools/get_milestone.d.ts.map +1 -0
- package/dist/tools/get_milestone.js +77 -0
- package/dist/tools/get_milestone.js.map +1 -0
- package/dist/tools/get_my_permissions.d.ts +14 -0
- package/dist/tools/get_my_permissions.d.ts.map +1 -0
- package/dist/tools/get_my_permissions.js +80 -0
- package/dist/tools/get_my_permissions.js.map +1 -0
- package/dist/tools/get_project.d.ts +23 -0
- package/dist/tools/get_project.d.ts.map +1 -0
- package/dist/tools/get_project.js +88 -0
- package/dist/tools/get_project.js.map +1 -0
- package/dist/tools/get_proposal.d.ts +23 -0
- package/dist/tools/get_proposal.d.ts.map +1 -0
- package/dist/tools/get_proposal.js +102 -0
- package/dist/tools/get_proposal.js.map +1 -0
- package/dist/tools/index.d.ts +17 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +89 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list_groups.d.ts +14 -0
- package/dist/tools/list_groups.d.ts.map +1 -0
- package/dist/tools/list_groups.js +35 -0
- package/dist/tools/list_groups.js.map +1 -0
- package/dist/tools/list_members.d.ts +23 -0
- package/dist/tools/list_members.d.ts.map +1 -0
- package/dist/tools/list_members.js +52 -0
- package/dist/tools/list_members.js.map +1 -0
- package/dist/tools/list_milestones.d.ts +34 -0
- package/dist/tools/list_milestones.d.ts.map +1 -0
- package/dist/tools/list_milestones.js +78 -0
- package/dist/tools/list_milestones.js.map +1 -0
- package/dist/tools/list_pending_verifications.d.ts +28 -0
- package/dist/tools/list_pending_verifications.d.ts.map +1 -0
- package/dist/tools/list_pending_verifications.js +83 -0
- package/dist/tools/list_pending_verifications.js.map +1 -0
- package/dist/tools/list_projects.d.ts +34 -0
- package/dist/tools/list_projects.d.ts.map +1 -0
- package/dist/tools/list_projects.js +92 -0
- package/dist/tools/list_projects.js.map +1 -0
- package/dist/tools/list_proposals.d.ts +34 -0
- package/dist/tools/list_proposals.d.ts.map +1 -0
- package/dist/tools/list_proposals.js +86 -0
- package/dist/tools/list_proposals.js.map +1 -0
- package/dist/tools/release_clink.d.ts +23 -0
- package/dist/tools/release_clink.d.ts.map +1 -0
- package/dist/tools/release_clink.js +42 -0
- package/dist/tools/release_clink.js.map +1 -0
- package/dist/tools/reopen_milestone.d.ts +23 -0
- package/dist/tools/reopen_milestone.d.ts.map +1 -0
- package/dist/tools/reopen_milestone.js +54 -0
- package/dist/tools/reopen_milestone.js.map +1 -0
- package/dist/tools/reopen_project.d.ts +23 -0
- package/dist/tools/reopen_project.d.ts.map +1 -0
- package/dist/tools/reopen_project.js +44 -0
- package/dist/tools/reopen_project.js.map +1 -0
- package/dist/tools/send_clink.d.ts +33 -0
- package/dist/tools/send_clink.d.ts.map +1 -0
- package/dist/tools/send_clink.js +64 -0
- package/dist/tools/send_clink.js.map +1 -0
- package/dist/tools/submit_feedback.d.ts +38 -0
- package/dist/tools/submit_feedback.d.ts.map +1 -0
- package/dist/tools/submit_feedback.js +93 -0
- package/dist/tools/submit_feedback.js.map +1 -0
- package/dist/tools/update_checkpoint.d.ts +63 -0
- package/dist/tools/update_checkpoint.d.ts.map +1 -0
- package/dist/tools/update_checkpoint.js +105 -0
- package/dist/tools/update_checkpoint.js.map +1 -0
- package/dist/tools/update_milestone.d.ts +33 -0
- package/dist/tools/update_milestone.d.ts.map +1 -0
- package/dist/tools/update_milestone.js +62 -0
- package/dist/tools/update_milestone.js.map +1 -0
- package/dist/tools/update_project.d.ts +43 -0
- package/dist/tools/update_project.d.ts.map +1 -0
- package/dist/tools/update_project.js +74 -0
- package/dist/tools/update_project.js.map +1 -0
- package/dist/types.d.ts +236 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +24 -0
- package/dist/types.js.map +1 -0
- package/package.json +49 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clink API Client
|
|
3
|
+
*
|
|
4
|
+
* HTTP client for communicating with the Clink API using API key authentication.
|
|
5
|
+
*/
|
|
6
|
+
import { ClinkApiError, } from './types.js';
|
|
7
|
+
// Configuration from environment
|
|
8
|
+
const API_URL = process.env.CLINK_API_URL || 'https://api.clink.voxos.ai';
|
|
9
|
+
const API_KEY = process.env.CLINK_API_KEY;
|
|
10
|
+
/**
|
|
11
|
+
* Check if API key is configured
|
|
12
|
+
*/
|
|
13
|
+
export function isConfigured() {
|
|
14
|
+
return !!API_KEY && API_KEY.startsWith('sk_live_');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get configuration status message
|
|
18
|
+
*/
|
|
19
|
+
export function getConfigStatus() {
|
|
20
|
+
if (!API_KEY) {
|
|
21
|
+
return 'CLINK_API_KEY environment variable is not set. Get your API key from https://app.clink.voxos.ai/settings';
|
|
22
|
+
}
|
|
23
|
+
if (!API_KEY.startsWith('sk_live_')) {
|
|
24
|
+
return 'CLINK_API_KEY must start with "sk_live_". Check your API key.';
|
|
25
|
+
}
|
|
26
|
+
return 'Configured';
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Make an authenticated request to the Clink API
|
|
30
|
+
*/
|
|
31
|
+
async function request(method, path, body) {
|
|
32
|
+
if (!isConfigured()) {
|
|
33
|
+
throw new ClinkApiError(getConfigStatus(), 401);
|
|
34
|
+
}
|
|
35
|
+
const url = `${API_URL}${path}`;
|
|
36
|
+
const headers = {
|
|
37
|
+
'Authorization': `Bearer ${API_KEY}`,
|
|
38
|
+
'Content-Type': 'application/json',
|
|
39
|
+
};
|
|
40
|
+
const options = {
|
|
41
|
+
method,
|
|
42
|
+
headers,
|
|
43
|
+
};
|
|
44
|
+
if (body) {
|
|
45
|
+
options.body = JSON.stringify(body);
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const response = await fetch(url, options);
|
|
49
|
+
const data = await response.json();
|
|
50
|
+
if (!response.ok || !data.success) {
|
|
51
|
+
throw new ClinkApiError(data.message || `Request failed: ${response.statusText}`, response.status, data.error);
|
|
52
|
+
}
|
|
53
|
+
return data.data;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (error instanceof ClinkApiError) {
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
throw new ClinkApiError(`Failed to connect to Clink API: ${error.message}`, 0);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// ============================================================================
|
|
63
|
+
// Groups API
|
|
64
|
+
// ============================================================================
|
|
65
|
+
/**
|
|
66
|
+
* List all groups the user belongs to
|
|
67
|
+
*/
|
|
68
|
+
export async function listGroups() {
|
|
69
|
+
const response = await request('GET', '/groups');
|
|
70
|
+
return response.groups;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if a string looks like a UUID
|
|
74
|
+
*/
|
|
75
|
+
function isUUID(str) {
|
|
76
|
+
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
77
|
+
return uuidRegex.test(str);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Resolve a group reference (slug or ID) to a group ID.
|
|
81
|
+
* If it looks like a UUID, returns it directly.
|
|
82
|
+
* Otherwise, looks up the group by slug.
|
|
83
|
+
*
|
|
84
|
+
* @param groupRef - Group slug or group ID
|
|
85
|
+
* @returns The group ID
|
|
86
|
+
* @throws ClinkApiError if group is not found
|
|
87
|
+
*/
|
|
88
|
+
export async function resolveGroup(groupRef) {
|
|
89
|
+
// If it looks like a UUID, use it directly
|
|
90
|
+
if (isUUID(groupRef)) {
|
|
91
|
+
return groupRef;
|
|
92
|
+
}
|
|
93
|
+
// Otherwise, look up by slug
|
|
94
|
+
const response = await request('GET', `/groups?slug=${encodeURIComponent(groupRef)}`);
|
|
95
|
+
if (!response.groups || response.groups.length === 0) {
|
|
96
|
+
throw new ClinkApiError(`Group not found: "${groupRef}". Use list_groups to see available groups.`, 404);
|
|
97
|
+
}
|
|
98
|
+
return response.groups[0].group_id;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get details of a specific group
|
|
102
|
+
*/
|
|
103
|
+
export async function getGroup(groupId) {
|
|
104
|
+
return await request('GET', `/groups/${groupId}`);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* List members of a group
|
|
108
|
+
*/
|
|
109
|
+
export async function listMembers(groupId) {
|
|
110
|
+
const response = await request('GET', `/groups/${groupId}/members`);
|
|
111
|
+
return response.members;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get clinks with optional filters
|
|
115
|
+
*/
|
|
116
|
+
export async function getClinks(options = {}) {
|
|
117
|
+
const params = new URLSearchParams();
|
|
118
|
+
if (options.groupId) {
|
|
119
|
+
params.set('group_id', options.groupId);
|
|
120
|
+
}
|
|
121
|
+
if (options.since) {
|
|
122
|
+
params.set('since', options.since);
|
|
123
|
+
}
|
|
124
|
+
if (options.limit) {
|
|
125
|
+
params.set('limit', options.limit.toString());
|
|
126
|
+
}
|
|
127
|
+
if (options.status) {
|
|
128
|
+
params.set('status', options.status);
|
|
129
|
+
}
|
|
130
|
+
if (options.forMe) {
|
|
131
|
+
params.set('for_me', 'true');
|
|
132
|
+
}
|
|
133
|
+
if (options.unreadOnly) {
|
|
134
|
+
params.set('unread_only', 'true');
|
|
135
|
+
}
|
|
136
|
+
if (options.markRead) {
|
|
137
|
+
params.set('mark_read', 'true');
|
|
138
|
+
}
|
|
139
|
+
const query = params.toString();
|
|
140
|
+
const path = query ? `/clinks?${query}` : '/clinks';
|
|
141
|
+
const response = await request('GET', path);
|
|
142
|
+
return response.clinks;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Mark clinks in groups as read
|
|
146
|
+
*/
|
|
147
|
+
export async function markRead(groupIds) {
|
|
148
|
+
return await request('POST', '/clinks/mark-read', { group_ids: groupIds });
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Send a clink to a group
|
|
152
|
+
*/
|
|
153
|
+
export async function sendClink(groupId, content, options = {}) {
|
|
154
|
+
const body = { content };
|
|
155
|
+
if (options.forRecipient) {
|
|
156
|
+
body.for = options.forRecipient;
|
|
157
|
+
}
|
|
158
|
+
return await request('POST', `/groups/${groupId}/clinks`, body);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Check inbox with claim/ack support
|
|
162
|
+
*/
|
|
163
|
+
export async function checkInbox(options = {}) {
|
|
164
|
+
const params = new URLSearchParams();
|
|
165
|
+
if (options.status) {
|
|
166
|
+
params.set('status', options.status);
|
|
167
|
+
}
|
|
168
|
+
if (options.forMe !== undefined) {
|
|
169
|
+
params.set('for_me', options.forMe.toString());
|
|
170
|
+
}
|
|
171
|
+
if (options.claim) {
|
|
172
|
+
params.set('claim', 'true');
|
|
173
|
+
}
|
|
174
|
+
if (options.limit) {
|
|
175
|
+
params.set('limit', options.limit.toString());
|
|
176
|
+
}
|
|
177
|
+
if (options.since) {
|
|
178
|
+
params.set('since', options.since);
|
|
179
|
+
}
|
|
180
|
+
const query = params.toString();
|
|
181
|
+
const path = query ? `/inbox?${query}` : '/inbox';
|
|
182
|
+
return await request('GET', path);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Claim a clink for processing
|
|
186
|
+
*/
|
|
187
|
+
export async function claimClink(clinkId, options = {}) {
|
|
188
|
+
const body = {};
|
|
189
|
+
if (options.timeoutSeconds) {
|
|
190
|
+
body.timeout_seconds = options.timeoutSeconds;
|
|
191
|
+
}
|
|
192
|
+
return await request('POST', `/clinks/${clinkId}/claim`, body);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Release a claimed clink without completing
|
|
196
|
+
*/
|
|
197
|
+
export async function releaseClink(clinkId) {
|
|
198
|
+
return await request('POST', `/clinks/${clinkId}/release`, {});
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Complete a claimed clink
|
|
202
|
+
*/
|
|
203
|
+
export async function completeClink(clinkId, options = {}) {
|
|
204
|
+
const body = {};
|
|
205
|
+
if (options.response) {
|
|
206
|
+
body.response = options.response;
|
|
207
|
+
}
|
|
208
|
+
return await request('POST', `/clinks/${clinkId}/complete`, body);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Create a milestone with checkpoints
|
|
212
|
+
*/
|
|
213
|
+
export async function createMilestone(groupId, options) {
|
|
214
|
+
return await request('POST', `/groups/${groupId}/milestones`, options);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* List milestones for a group
|
|
218
|
+
*/
|
|
219
|
+
export async function listMilestones(groupId, options = {}) {
|
|
220
|
+
const params = new URLSearchParams();
|
|
221
|
+
if (options.status) {
|
|
222
|
+
params.set('status', options.status);
|
|
223
|
+
}
|
|
224
|
+
if (options.limit) {
|
|
225
|
+
params.set('limit', options.limit.toString());
|
|
226
|
+
}
|
|
227
|
+
const query = params.toString();
|
|
228
|
+
const path = query ? `/groups/${groupId}/milestones?${query}` : `/groups/${groupId}/milestones`;
|
|
229
|
+
const response = await request('GET', path);
|
|
230
|
+
return response.milestones;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get a milestone with its checkpoints
|
|
234
|
+
*/
|
|
235
|
+
export async function getMilestone(milestoneId) {
|
|
236
|
+
return await request('GET', `/milestones/${milestoneId}`);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Update a milestone
|
|
240
|
+
*/
|
|
241
|
+
export async function updateMilestone(milestoneId, options) {
|
|
242
|
+
return await request('PATCH', `/milestones/${milestoneId}`, options);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Complete a checkpoint
|
|
246
|
+
*/
|
|
247
|
+
export async function completeCheckpoint(milestoneId, order, hilExpirySeconds) {
|
|
248
|
+
const body = {};
|
|
249
|
+
if (hilExpirySeconds !== undefined) {
|
|
250
|
+
body.hil_expiry_seconds = hilExpirySeconds;
|
|
251
|
+
}
|
|
252
|
+
return await request('POST', `/milestones/${milestoneId}/checkpoints/${order}/complete`, body);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Update a checkpoint
|
|
256
|
+
*/
|
|
257
|
+
export async function updateCheckpoint(milestoneId, order, options) {
|
|
258
|
+
return await request('PATCH', `/milestones/${milestoneId}/checkpoints/${order}`, options);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Delete a checkpoint
|
|
262
|
+
*/
|
|
263
|
+
export async function deleteCheckpoint(milestoneId, order) {
|
|
264
|
+
return await request('DELETE', `/milestones/${milestoneId}/checkpoints/${order}`);
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Add a checkpoint to an existing milestone
|
|
268
|
+
*/
|
|
269
|
+
export async function addCheckpoint(milestoneId, options) {
|
|
270
|
+
return await request('POST', `/milestones/${milestoneId}/checkpoints`, options);
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Re-open a closed milestone
|
|
274
|
+
*/
|
|
275
|
+
export async function reopenMilestone(milestoneId) {
|
|
276
|
+
return await request('POST', `/milestones/${milestoneId}/reopen`, {});
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Create a project in a group
|
|
280
|
+
*/
|
|
281
|
+
export async function createProject(groupId, options) {
|
|
282
|
+
return await request('POST', `/groups/${groupId}/projects`, options);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* List projects for a group
|
|
286
|
+
*/
|
|
287
|
+
export async function listProjects(groupId, options = {}) {
|
|
288
|
+
const params = new URLSearchParams();
|
|
289
|
+
if (options.status) {
|
|
290
|
+
params.set('status', options.status);
|
|
291
|
+
}
|
|
292
|
+
if (options.limit) {
|
|
293
|
+
params.set('limit', options.limit.toString());
|
|
294
|
+
}
|
|
295
|
+
const query = params.toString();
|
|
296
|
+
const path = query ? `/groups/${groupId}/projects?${query}` : `/groups/${groupId}/projects`;
|
|
297
|
+
const response = await request('GET', path);
|
|
298
|
+
return response.projects;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Get a project by ID
|
|
302
|
+
*/
|
|
303
|
+
export async function getProject(projectId) {
|
|
304
|
+
return await request('GET', `/projects/${projectId}`);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Update a project
|
|
308
|
+
*/
|
|
309
|
+
export async function updateProject(projectId, options) {
|
|
310
|
+
return await request('PATCH', `/projects/${projectId}`, options);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Mark a project as completed
|
|
314
|
+
*/
|
|
315
|
+
export async function completeProject(projectId) {
|
|
316
|
+
return await request('POST', `/projects/${projectId}/complete`, {});
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Archive a project
|
|
320
|
+
*/
|
|
321
|
+
export async function archiveProject(projectId) {
|
|
322
|
+
return await request('POST', `/projects/${projectId}/archive`, {});
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Reopen a completed or archived project
|
|
326
|
+
*/
|
|
327
|
+
export async function reopenProject(projectId) {
|
|
328
|
+
return await request('POST', `/projects/${projectId}/reopen`, {});
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* List milestones in a project
|
|
332
|
+
*/
|
|
333
|
+
export async function listProjectMilestones(projectId, options = {}) {
|
|
334
|
+
const params = new URLSearchParams();
|
|
335
|
+
if (options.status) {
|
|
336
|
+
params.set('status', options.status);
|
|
337
|
+
}
|
|
338
|
+
if (options.limit) {
|
|
339
|
+
params.set('limit', options.limit.toString());
|
|
340
|
+
}
|
|
341
|
+
const query = params.toString();
|
|
342
|
+
const path = query ? `/projects/${projectId}/milestones?${query}` : `/projects/${projectId}/milestones`;
|
|
343
|
+
const response = await request('GET', path);
|
|
344
|
+
return response.milestones;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Create a voting proposal
|
|
348
|
+
*/
|
|
349
|
+
export async function createProposal(groupId, options) {
|
|
350
|
+
return await request('POST', `/groups/${groupId}/proposals`, options);
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* List proposals for a group
|
|
354
|
+
*/
|
|
355
|
+
export async function listProposals(groupId, options = {}) {
|
|
356
|
+
const params = new URLSearchParams();
|
|
357
|
+
if (options.status) {
|
|
358
|
+
params.set('status', options.status);
|
|
359
|
+
}
|
|
360
|
+
if (options.limit) {
|
|
361
|
+
params.set('limit', options.limit.toString());
|
|
362
|
+
}
|
|
363
|
+
const query = params.toString();
|
|
364
|
+
const path = query ? `/groups/${groupId}/proposals?${query}` : `/groups/${groupId}/proposals`;
|
|
365
|
+
const response = await request('GET', path);
|
|
366
|
+
return response.proposals;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Get a proposal with votes
|
|
370
|
+
*/
|
|
371
|
+
export async function getProposal(proposalId) {
|
|
372
|
+
return await request('GET', `/proposals/${proposalId}`);
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* Cast a vote on a proposal
|
|
376
|
+
*/
|
|
377
|
+
export async function castVote(proposalId, options) {
|
|
378
|
+
return await request('POST', `/proposals/${proposalId}/vote`, options);
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Finalize a proposal and compute result
|
|
382
|
+
*/
|
|
383
|
+
export async function finalizeProposal(proposalId, options = {}) {
|
|
384
|
+
return await request('POST', `/proposals/${proposalId}/finalize`, options);
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Submit feedback to help improve Clink.
|
|
388
|
+
* Requires an API key with feedback permission enabled.
|
|
389
|
+
*/
|
|
390
|
+
export async function submitFeedback(options) {
|
|
391
|
+
return await request('POST', '/feedback', options);
|
|
392
|
+
}
|
|
393
|
+
// ============================================================================
|
|
394
|
+
// Permissions API
|
|
395
|
+
// ============================================================================
|
|
396
|
+
/**
|
|
397
|
+
* Get the permissions for the currently authenticated API key.
|
|
398
|
+
*/
|
|
399
|
+
export async function getMyPermissions() {
|
|
400
|
+
return await request('GET', '/api-keys/me/permissions');
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* List pending HIL verifications for a group.
|
|
404
|
+
* Useful for agents to see what's awaiting human approval.
|
|
405
|
+
*/
|
|
406
|
+
export async function listPendingVerifications(groupId, limit) {
|
|
407
|
+
const params = new URLSearchParams();
|
|
408
|
+
if (limit)
|
|
409
|
+
params.append('limit', limit.toString());
|
|
410
|
+
const query = params.toString() ? `?${params.toString()}` : '';
|
|
411
|
+
const response = await request('GET', `/groups/${groupId}/hil/pending${query}`);
|
|
412
|
+
return response.verifications;
|
|
413
|
+
}
|
|
414
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Clink MCP Server
|
|
4
|
+
*
|
|
5
|
+
* MCP server for Clink messaging platform integration with Claude Code.
|
|
6
|
+
* Allows sending and receiving clinks across Claude Code sessions.
|
|
7
|
+
*/
|
|
8
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
9
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
10
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
11
|
+
import { tools } from './tools/index.js';
|
|
12
|
+
import { isConfigured, getConfigStatus } from './client.js';
|
|
13
|
+
// Create server instance
|
|
14
|
+
const server = new Server({
|
|
15
|
+
name: 'clink-mcp-server',
|
|
16
|
+
version: '0.4.0',
|
|
17
|
+
}, {
|
|
18
|
+
capabilities: {
|
|
19
|
+
tools: {},
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
// Handle list tools request
|
|
23
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
24
|
+
return {
|
|
25
|
+
tools: tools.map((t) => ({
|
|
26
|
+
name: t.definition.name,
|
|
27
|
+
description: t.definition.description,
|
|
28
|
+
inputSchema: t.definition.inputSchema,
|
|
29
|
+
})),
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
// Handle tool calls
|
|
33
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
34
|
+
const { name, arguments: args } = request.params;
|
|
35
|
+
// Check configuration before executing tools
|
|
36
|
+
if (!isConfigured()) {
|
|
37
|
+
return {
|
|
38
|
+
content: [
|
|
39
|
+
{
|
|
40
|
+
type: 'text',
|
|
41
|
+
text: `Clink MCP is not configured.\n\n${getConfigStatus()}`,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Find and execute the tool
|
|
47
|
+
const tool = tools.find((t) => t.definition.name === name);
|
|
48
|
+
if (!tool) {
|
|
49
|
+
return {
|
|
50
|
+
content: [
|
|
51
|
+
{
|
|
52
|
+
type: 'text',
|
|
53
|
+
text: `Unknown tool: ${name}`,
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
isError: true,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
const result = await tool.handler(args || {});
|
|
61
|
+
return {
|
|
62
|
+
content: [
|
|
63
|
+
{
|
|
64
|
+
type: 'text',
|
|
65
|
+
text: result,
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
72
|
+
return {
|
|
73
|
+
content: [
|
|
74
|
+
{
|
|
75
|
+
type: 'text',
|
|
76
|
+
text: `Error executing ${name}: ${message}`,
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
isError: true,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
// Start the server
|
|
84
|
+
async function main() {
|
|
85
|
+
const transport = new StdioServerTransport();
|
|
86
|
+
await server.connect(transport);
|
|
87
|
+
// Log startup (goes to stderr, not stdout)
|
|
88
|
+
console.error('Clink MCP server started');
|
|
89
|
+
console.error(`Configuration: ${isConfigured() ? 'OK' : getConfigStatus()}`);
|
|
90
|
+
}
|
|
91
|
+
main().catch((error) => {
|
|
92
|
+
console.error('Failed to start Clink MCP server:', error);
|
|
93
|
+
process.exit(1);
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE5D,yBAAyB;AACzB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,4BAA4B;AAC5B,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;IAC1D,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI;YACvB,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,WAAW;YACrC,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,WAAW;SACtC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,oBAAoB;AACpB,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAEjD,6CAA6C;IAC7C,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,mCAAmC,eAAe,EAAE,EAAE;iBAC7D;aACF;SACF,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAE3D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,iBAAiB,IAAI,EAAE;iBAC9B;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,MAAM;iBACb;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,mBAAmB,IAAI,KAAK,OAAO,EAAE;iBAC5C;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,mBAAmB;AACnB,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,2CAA2C;IAC3C,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1C,OAAO,CAAC,KAAK,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* add_checkpoint tool - Add a checkpoint to an existing milestone
|
|
3
|
+
*/
|
|
4
|
+
export declare const definition: {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: "object";
|
|
9
|
+
properties: {
|
|
10
|
+
milestone_id: {
|
|
11
|
+
type: string;
|
|
12
|
+
description: string;
|
|
13
|
+
};
|
|
14
|
+
title: {
|
|
15
|
+
type: string;
|
|
16
|
+
description: string;
|
|
17
|
+
};
|
|
18
|
+
description: {
|
|
19
|
+
type: string;
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
22
|
+
requires_consensus: {
|
|
23
|
+
type: string;
|
|
24
|
+
description: string;
|
|
25
|
+
};
|
|
26
|
+
depends_on: {
|
|
27
|
+
type: string;
|
|
28
|
+
items: {
|
|
29
|
+
oneOf: {
|
|
30
|
+
type: string;
|
|
31
|
+
}[];
|
|
32
|
+
};
|
|
33
|
+
description: string;
|
|
34
|
+
};
|
|
35
|
+
position: {
|
|
36
|
+
type: string;
|
|
37
|
+
description: string;
|
|
38
|
+
};
|
|
39
|
+
git_branch_url: {
|
|
40
|
+
type: string;
|
|
41
|
+
description: string;
|
|
42
|
+
};
|
|
43
|
+
git_pr_url: {
|
|
44
|
+
type: string;
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
git_commit_url: {
|
|
48
|
+
type: string;
|
|
49
|
+
description: string;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
required: string[];
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
interface AddCheckpointArgs {
|
|
56
|
+
milestone_id: string;
|
|
57
|
+
title: string;
|
|
58
|
+
description?: string;
|
|
59
|
+
requires_consensus?: boolean;
|
|
60
|
+
depends_on?: (number | string)[];
|
|
61
|
+
position?: number;
|
|
62
|
+
git_branch_url?: string;
|
|
63
|
+
git_pr_url?: string;
|
|
64
|
+
git_commit_url?: string;
|
|
65
|
+
}
|
|
66
|
+
export declare function handler(args: AddCheckpointArgs): Promise<string>;
|
|
67
|
+
export {};
|
|
68
|
+
//# sourceMappingURL=add_checkpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add_checkpoint.d.ts","sourceRoot":"","sources":["../../src/tools/add_checkpoint.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CtB,CAAC;AAEF,UAAU,iBAAiB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyDtE"}
|