@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.
Files changed (147) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +382 -0
  3. package/dist/client.d.ts +285 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +414 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/index.d.ts +9 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +95 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/tools/add_checkpoint.d.ts +68 -0
  12. package/dist/tools/add_checkpoint.d.ts.map +1 -0
  13. package/dist/tools/add_checkpoint.js +108 -0
  14. package/dist/tools/add_checkpoint.js.map +1 -0
  15. package/dist/tools/archive_project.d.ts +23 -0
  16. package/dist/tools/archive_project.d.ts.map +1 -0
  17. package/dist/tools/archive_project.js +44 -0
  18. package/dist/tools/archive_project.js.map +1 -0
  19. package/dist/tools/cast_vote.d.ts +38 -0
  20. package/dist/tools/cast_vote.d.ts.map +1 -0
  21. package/dist/tools/cast_vote.js +148 -0
  22. package/dist/tools/cast_vote.js.map +1 -0
  23. package/dist/tools/check_inbox.d.ts +39 -0
  24. package/dist/tools/check_inbox.d.ts.map +1 -0
  25. package/dist/tools/check_inbox.js +99 -0
  26. package/dist/tools/check_inbox.js.map +1 -0
  27. package/dist/tools/claim_clink.d.ts +28 -0
  28. package/dist/tools/claim_clink.d.ts.map +1 -0
  29. package/dist/tools/claim_clink.js +51 -0
  30. package/dist/tools/claim_clink.js.map +1 -0
  31. package/dist/tools/complete_checkpoint.d.ts +33 -0
  32. package/dist/tools/complete_checkpoint.d.ts.map +1 -0
  33. package/dist/tools/complete_checkpoint.js +143 -0
  34. package/dist/tools/complete_checkpoint.js.map +1 -0
  35. package/dist/tools/complete_clink.d.ts +28 -0
  36. package/dist/tools/complete_clink.d.ts.map +1 -0
  37. package/dist/tools/complete_clink.js +50 -0
  38. package/dist/tools/complete_clink.js.map +1 -0
  39. package/dist/tools/complete_project.d.ts +23 -0
  40. package/dist/tools/complete_project.d.ts.map +1 -0
  41. package/dist/tools/complete_project.js +44 -0
  42. package/dist/tools/complete_project.js.map +1 -0
  43. package/dist/tools/create_milestone.d.ts +91 -0
  44. package/dist/tools/create_milestone.d.ts.map +1 -0
  45. package/dist/tools/create_milestone.js +114 -0
  46. package/dist/tools/create_milestone.js.map +1 -0
  47. package/dist/tools/create_project.d.ts +43 -0
  48. package/dist/tools/create_project.d.ts.map +1 -0
  49. package/dist/tools/create_project.js +77 -0
  50. package/dist/tools/create_project.js.map +1 -0
  51. package/dist/tools/create_proposal.d.ts +58 -0
  52. package/dist/tools/create_proposal.d.ts.map +1 -0
  53. package/dist/tools/create_proposal.js +102 -0
  54. package/dist/tools/create_proposal.js.map +1 -0
  55. package/dist/tools/delete_checkpoint.d.ts +28 -0
  56. package/dist/tools/delete_checkpoint.d.ts.map +1 -0
  57. package/dist/tools/delete_checkpoint.js +66 -0
  58. package/dist/tools/delete_checkpoint.js.map +1 -0
  59. package/dist/tools/finalize_proposal.d.ts +28 -0
  60. package/dist/tools/finalize_proposal.d.ts.map +1 -0
  61. package/dist/tools/finalize_proposal.js +86 -0
  62. package/dist/tools/finalize_proposal.js.map +1 -0
  63. package/dist/tools/get_clinks.d.ts +43 -0
  64. package/dist/tools/get_clinks.d.ts.map +1 -0
  65. package/dist/tools/get_clinks.js +110 -0
  66. package/dist/tools/get_clinks.js.map +1 -0
  67. package/dist/tools/get_milestone.d.ts +23 -0
  68. package/dist/tools/get_milestone.d.ts.map +1 -0
  69. package/dist/tools/get_milestone.js +77 -0
  70. package/dist/tools/get_milestone.js.map +1 -0
  71. package/dist/tools/get_my_permissions.d.ts +14 -0
  72. package/dist/tools/get_my_permissions.d.ts.map +1 -0
  73. package/dist/tools/get_my_permissions.js +80 -0
  74. package/dist/tools/get_my_permissions.js.map +1 -0
  75. package/dist/tools/get_project.d.ts +23 -0
  76. package/dist/tools/get_project.d.ts.map +1 -0
  77. package/dist/tools/get_project.js +88 -0
  78. package/dist/tools/get_project.js.map +1 -0
  79. package/dist/tools/get_proposal.d.ts +23 -0
  80. package/dist/tools/get_proposal.d.ts.map +1 -0
  81. package/dist/tools/get_proposal.js +102 -0
  82. package/dist/tools/get_proposal.js.map +1 -0
  83. package/dist/tools/index.d.ts +17 -0
  84. package/dist/tools/index.d.ts.map +1 -0
  85. package/dist/tools/index.js +89 -0
  86. package/dist/tools/index.js.map +1 -0
  87. package/dist/tools/list_groups.d.ts +14 -0
  88. package/dist/tools/list_groups.d.ts.map +1 -0
  89. package/dist/tools/list_groups.js +35 -0
  90. package/dist/tools/list_groups.js.map +1 -0
  91. package/dist/tools/list_members.d.ts +23 -0
  92. package/dist/tools/list_members.d.ts.map +1 -0
  93. package/dist/tools/list_members.js +52 -0
  94. package/dist/tools/list_members.js.map +1 -0
  95. package/dist/tools/list_milestones.d.ts +34 -0
  96. package/dist/tools/list_milestones.d.ts.map +1 -0
  97. package/dist/tools/list_milestones.js +78 -0
  98. package/dist/tools/list_milestones.js.map +1 -0
  99. package/dist/tools/list_pending_verifications.d.ts +28 -0
  100. package/dist/tools/list_pending_verifications.d.ts.map +1 -0
  101. package/dist/tools/list_pending_verifications.js +83 -0
  102. package/dist/tools/list_pending_verifications.js.map +1 -0
  103. package/dist/tools/list_projects.d.ts +34 -0
  104. package/dist/tools/list_projects.d.ts.map +1 -0
  105. package/dist/tools/list_projects.js +92 -0
  106. package/dist/tools/list_projects.js.map +1 -0
  107. package/dist/tools/list_proposals.d.ts +34 -0
  108. package/dist/tools/list_proposals.d.ts.map +1 -0
  109. package/dist/tools/list_proposals.js +86 -0
  110. package/dist/tools/list_proposals.js.map +1 -0
  111. package/dist/tools/release_clink.d.ts +23 -0
  112. package/dist/tools/release_clink.d.ts.map +1 -0
  113. package/dist/tools/release_clink.js +42 -0
  114. package/dist/tools/release_clink.js.map +1 -0
  115. package/dist/tools/reopen_milestone.d.ts +23 -0
  116. package/dist/tools/reopen_milestone.d.ts.map +1 -0
  117. package/dist/tools/reopen_milestone.js +54 -0
  118. package/dist/tools/reopen_milestone.js.map +1 -0
  119. package/dist/tools/reopen_project.d.ts +23 -0
  120. package/dist/tools/reopen_project.d.ts.map +1 -0
  121. package/dist/tools/reopen_project.js +44 -0
  122. package/dist/tools/reopen_project.js.map +1 -0
  123. package/dist/tools/send_clink.d.ts +33 -0
  124. package/dist/tools/send_clink.d.ts.map +1 -0
  125. package/dist/tools/send_clink.js +64 -0
  126. package/dist/tools/send_clink.js.map +1 -0
  127. package/dist/tools/submit_feedback.d.ts +38 -0
  128. package/dist/tools/submit_feedback.d.ts.map +1 -0
  129. package/dist/tools/submit_feedback.js +93 -0
  130. package/dist/tools/submit_feedback.js.map +1 -0
  131. package/dist/tools/update_checkpoint.d.ts +63 -0
  132. package/dist/tools/update_checkpoint.d.ts.map +1 -0
  133. package/dist/tools/update_checkpoint.js +105 -0
  134. package/dist/tools/update_checkpoint.js.map +1 -0
  135. package/dist/tools/update_milestone.d.ts +33 -0
  136. package/dist/tools/update_milestone.d.ts.map +1 -0
  137. package/dist/tools/update_milestone.js +62 -0
  138. package/dist/tools/update_milestone.js.map +1 -0
  139. package/dist/tools/update_project.d.ts +43 -0
  140. package/dist/tools/update_project.d.ts.map +1 -0
  141. package/dist/tools/update_project.js +74 -0
  142. package/dist/tools/update_project.js.map +1 -0
  143. package/dist/types.d.ts +236 -0
  144. package/dist/types.d.ts.map +1 -0
  145. package/dist/types.js +24 -0
  146. package/dist/types.js.map +1 -0
  147. 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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"}
@@ -0,0 +1,9 @@
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
+ export {};
9
+ //# sourceMappingURL=index.d.ts.map
@@ -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":"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"}
@@ -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"}