paperclip-mcp 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 (78) hide show
  1. package/README.md +703 -0
  2. package/dist/auth.d.ts +9 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +17 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/client.d.ts +17 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +94 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/errors.d.ts +7 -0
  11. package/dist/errors.d.ts.map +1 -0
  12. package/dist/errors.js +13 -0
  13. package/dist/errors.js.map +1 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +23 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/tools/activity.d.ts +3 -0
  19. package/dist/tools/activity.d.ts.map +1 -0
  20. package/dist/tools/activity.js +106 -0
  21. package/dist/tools/activity.js.map +1 -0
  22. package/dist/tools/agents.d.ts +3 -0
  23. package/dist/tools/agents.d.ts.map +1 -0
  24. package/dist/tools/agents.js +373 -0
  25. package/dist/tools/agents.js.map +1 -0
  26. package/dist/tools/approvals.d.ts +3 -0
  27. package/dist/tools/approvals.d.ts.map +1 -0
  28. package/dist/tools/approvals.js +306 -0
  29. package/dist/tools/approvals.js.map +1 -0
  30. package/dist/tools/attachments.d.ts +3 -0
  31. package/dist/tools/attachments.d.ts.map +1 -0
  32. package/dist/tools/attachments.js +125 -0
  33. package/dist/tools/attachments.js.map +1 -0
  34. package/dist/tools/comments.d.ts +3 -0
  35. package/dist/tools/comments.d.ts.map +1 -0
  36. package/dist/tools/comments.js +75 -0
  37. package/dist/tools/comments.js.map +1 -0
  38. package/dist/tools/dashboard.d.ts +3 -0
  39. package/dist/tools/dashboard.d.ts.map +1 -0
  40. package/dist/tools/dashboard.js +24 -0
  41. package/dist/tools/dashboard.js.map +1 -0
  42. package/dist/tools/documents.d.ts +3 -0
  43. package/dist/tools/documents.d.ts.map +1 -0
  44. package/dist/tools/documents.js +150 -0
  45. package/dist/tools/documents.js.map +1 -0
  46. package/dist/tools/goals.d.ts +3 -0
  47. package/dist/tools/goals.d.ts.map +1 -0
  48. package/dist/tools/goals.js +128 -0
  49. package/dist/tools/goals.js.map +1 -0
  50. package/dist/tools/identity.d.ts +3 -0
  51. package/dist/tools/identity.d.ts.map +1 -0
  52. package/dist/tools/identity.js +44 -0
  53. package/dist/tools/identity.js.map +1 -0
  54. package/dist/tools/index.d.ts +25 -0
  55. package/dist/tools/index.d.ts.map +1 -0
  56. package/dist/tools/index.js +49 -0
  57. package/dist/tools/index.js.map +1 -0
  58. package/dist/tools/issues.d.ts +3 -0
  59. package/dist/tools/issues.d.ts.map +1 -0
  60. package/dist/tools/issues.js +297 -0
  61. package/dist/tools/issues.js.map +1 -0
  62. package/dist/tools/projects.d.ts +3 -0
  63. package/dist/tools/projects.d.ts.map +1 -0
  64. package/dist/tools/projects.js +233 -0
  65. package/dist/tools/projects.js.map +1 -0
  66. package/dist/tools/routines.d.ts +3 -0
  67. package/dist/tools/routines.d.ts.map +1 -0
  68. package/dist/tools/routines.js +305 -0
  69. package/dist/tools/routines.js.map +1 -0
  70. package/dist/tools/validation.d.ts +24 -0
  71. package/dist/tools/validation.d.ts.map +1 -0
  72. package/dist/tools/validation.js +33 -0
  73. package/dist/tools/validation.js.map +1 -0
  74. package/dist/types.d.ts +36 -0
  75. package/dist/types.d.ts.map +1 -0
  76. package/dist/types.js +3 -0
  77. package/dist/types.js.map +1 -0
  78. package/package.json +61 -0
@@ -0,0 +1,305 @@
1
+ import { z } from "zod";
2
+ import { validate, NoInput, handleApiError } from "./validation.js";
3
+ const RoutineIdInput = z.object({
4
+ routineId: z.string().min(1).describe("Routine UUID"),
5
+ });
6
+ const TriggerIdInput = z.object({
7
+ triggerId: z.string().min(1).describe("Routine trigger UUID"),
8
+ });
9
+ const CreateRoutineInput = z.object({
10
+ agentId: z.string().min(1).describe("Agent UUID to run the routine"),
11
+ name: z.string().min(1).describe("Routine name"),
12
+ description: z.string().optional().describe("Routine description"),
13
+ concurrencyPolicy: z
14
+ .string()
15
+ .optional()
16
+ .describe("Concurrency policy (e.g. allow, forbid, replace)"),
17
+ catchUpPolicy: z
18
+ .string()
19
+ .optional()
20
+ .describe("Catch-up policy for missed runs (e.g. skip, run_once)"),
21
+ });
22
+ const UpdateRoutineInput = z.object({
23
+ routineId: z.string().min(1).describe("Routine UUID"),
24
+ name: z.string().optional().describe("New name"),
25
+ description: z.string().optional().describe("New description"),
26
+ concurrencyPolicy: z.string().optional().describe("New concurrency policy"),
27
+ catchUpPolicy: z.string().optional().describe("New catch-up policy"),
28
+ });
29
+ const AddTriggerInput = z.object({
30
+ routineId: z.string().min(1).describe("Routine UUID"),
31
+ type: z.enum(["schedule", "webhook", "api"]).describe("Trigger type"),
32
+ config: z
33
+ .object({
34
+ cron: z.string().optional().describe("Cron expression for schedule triggers"),
35
+ })
36
+ .optional()
37
+ .describe("Trigger configuration"),
38
+ });
39
+ const UpdateTriggerInput = z.object({
40
+ triggerId: z.string().min(1).describe("Routine trigger UUID"),
41
+ type: z.enum(["schedule", "webhook", "api"]).optional().describe("New trigger type"),
42
+ config: z
43
+ .object({
44
+ cron: z.string().optional().describe("New cron expression for schedule triggers"),
45
+ })
46
+ .optional()
47
+ .describe("New trigger configuration"),
48
+ });
49
+ export const routineTools = [
50
+ {
51
+ name: "paperclip_list_routines",
52
+ description: "List all routines for the current company.",
53
+ inputSchema: {
54
+ type: "object",
55
+ properties: {},
56
+ required: [],
57
+ },
58
+ annotations: { readOnlyHint: true, openWorldHint: false },
59
+ async handler(args, client) {
60
+ try {
61
+ validate(NoInput, args);
62
+ const data = await client.get(`/api/companies/${client.companyId}/routines`);
63
+ return { content: [{ type: "text", text: JSON.stringify(data) }] };
64
+ }
65
+ catch (err) {
66
+ return handleApiError(err);
67
+ }
68
+ },
69
+ },
70
+ {
71
+ name: "paperclip_get_routine",
72
+ description: "Get a single routine by ID, including its triggers and recent runs.",
73
+ inputSchema: {
74
+ type: "object",
75
+ properties: {
76
+ routineId: { type: "string", description: "Routine UUID" },
77
+ },
78
+ required: ["routineId"],
79
+ },
80
+ annotations: { readOnlyHint: true, openWorldHint: false },
81
+ async handler(args, client) {
82
+ try {
83
+ const { routineId } = validate(RoutineIdInput, args);
84
+ const data = await client.get(`/api/routines/${routineId}`);
85
+ return { content: [{ type: "text", text: JSON.stringify(data) }] };
86
+ }
87
+ catch (err) {
88
+ return handleApiError(err);
89
+ }
90
+ },
91
+ },
92
+ {
93
+ name: "paperclip_create_routine",
94
+ description: "Create a new routine for an agent. Add triggers separately with paperclip_add_routine_trigger. Run ID header is injected automatically.",
95
+ inputSchema: {
96
+ type: "object",
97
+ properties: {
98
+ agentId: { type: "string", description: "Agent UUID to run the routine" },
99
+ name: { type: "string", description: "Routine name" },
100
+ description: { type: "string", description: "Routine description" },
101
+ concurrencyPolicy: {
102
+ type: "string",
103
+ description: "Concurrency policy (e.g. allow, forbid, replace)",
104
+ },
105
+ catchUpPolicy: {
106
+ type: "string",
107
+ description: "Catch-up policy for missed runs (e.g. skip, run_once)",
108
+ },
109
+ },
110
+ required: ["agentId", "name"],
111
+ },
112
+ annotations: { destructiveHint: false, openWorldHint: false },
113
+ async handler(args, client) {
114
+ try {
115
+ const input = validate(CreateRoutineInput, args);
116
+ const body = { agentId: input.agentId, name: input.name };
117
+ if (input.description !== undefined)
118
+ body.description = input.description;
119
+ if (input.concurrencyPolicy !== undefined)
120
+ body.concurrencyPolicy = input.concurrencyPolicy;
121
+ if (input.catchUpPolicy !== undefined)
122
+ body.catchUpPolicy = input.catchUpPolicy;
123
+ const data = await client.post(`/api/companies/${client.companyId}/routines`, body);
124
+ return { content: [{ type: "text", text: JSON.stringify(data) }] };
125
+ }
126
+ catch (err) {
127
+ return handleApiError(err);
128
+ }
129
+ },
130
+ },
131
+ {
132
+ name: "paperclip_update_routine",
133
+ description: "Update a routine's name, description, or scheduling policies. Run ID header is injected automatically.",
134
+ inputSchema: {
135
+ type: "object",
136
+ properties: {
137
+ routineId: { type: "string", description: "Routine UUID" },
138
+ name: { type: "string", description: "New name" },
139
+ description: { type: "string", description: "New description" },
140
+ concurrencyPolicy: { type: "string", description: "New concurrency policy" },
141
+ catchUpPolicy: { type: "string", description: "New catch-up policy" },
142
+ },
143
+ required: ["routineId"],
144
+ },
145
+ annotations: { destructiveHint: true, openWorldHint: false },
146
+ async handler(args, client) {
147
+ try {
148
+ const { routineId, ...rest } = validate(UpdateRoutineInput, args);
149
+ const body = {};
150
+ for (const [k, v] of Object.entries(rest)) {
151
+ if (v !== undefined)
152
+ body[k] = v;
153
+ }
154
+ const data = await client.patch(`/api/routines/${routineId}`, body);
155
+ return { content: [{ type: "text", text: JSON.stringify(data) }] };
156
+ }
157
+ catch (err) {
158
+ return handleApiError(err);
159
+ }
160
+ },
161
+ },
162
+ {
163
+ name: "paperclip_add_routine_trigger",
164
+ description: "Add a trigger to a routine (schedule, webhook, or api). Run ID header is injected automatically.",
165
+ inputSchema: {
166
+ type: "object",
167
+ properties: {
168
+ routineId: { type: "string", description: "Routine UUID" },
169
+ type: {
170
+ type: "string",
171
+ enum: ["schedule", "webhook", "api"],
172
+ description: "Trigger type",
173
+ },
174
+ config: {
175
+ type: "object",
176
+ description: "Trigger configuration",
177
+ properties: {
178
+ cron: { type: "string", description: "Cron expression for schedule triggers" },
179
+ },
180
+ },
181
+ },
182
+ required: ["routineId", "type"],
183
+ },
184
+ annotations: { destructiveHint: false, openWorldHint: false },
185
+ async handler(args, client) {
186
+ try {
187
+ const { routineId, type, config } = validate(AddTriggerInput, args);
188
+ const body = { type };
189
+ if (config !== undefined)
190
+ body.config = config;
191
+ const data = await client.post(`/api/routines/${routineId}/triggers`, body);
192
+ return { content: [{ type: "text", text: JSON.stringify(data) }] };
193
+ }
194
+ catch (err) {
195
+ return handleApiError(err);
196
+ }
197
+ },
198
+ },
199
+ {
200
+ name: "paperclip_update_routine_trigger",
201
+ description: "Update an existing routine trigger's type or config. Run ID header is injected automatically.",
202
+ inputSchema: {
203
+ type: "object",
204
+ properties: {
205
+ triggerId: { type: "string", description: "Routine trigger UUID" },
206
+ type: {
207
+ type: "string",
208
+ enum: ["schedule", "webhook", "api"],
209
+ description: "New trigger type",
210
+ },
211
+ config: {
212
+ type: "object",
213
+ description: "New trigger configuration",
214
+ properties: {
215
+ cron: { type: "string", description: "New cron expression for schedule triggers" },
216
+ },
217
+ },
218
+ },
219
+ required: ["triggerId"],
220
+ },
221
+ annotations: { destructiveHint: true, openWorldHint: false },
222
+ async handler(args, client) {
223
+ try {
224
+ const { triggerId, ...rest } = validate(UpdateTriggerInput, args);
225
+ const body = {};
226
+ if (rest.type !== undefined)
227
+ body.type = rest.type;
228
+ if (rest.config !== undefined)
229
+ body.config = rest.config;
230
+ const data = await client.patch(`/api/routine-triggers/${triggerId}`, body);
231
+ return { content: [{ type: "text", text: JSON.stringify(data) }] };
232
+ }
233
+ catch (err) {
234
+ return handleApiError(err);
235
+ }
236
+ },
237
+ },
238
+ {
239
+ name: "paperclip_delete_routine_trigger",
240
+ description: "Delete a routine trigger. The routine itself is not deleted. Run ID header is injected automatically.",
241
+ inputSchema: {
242
+ type: "object",
243
+ properties: {
244
+ triggerId: { type: "string", description: "Routine trigger UUID" },
245
+ },
246
+ required: ["triggerId"],
247
+ },
248
+ annotations: { destructiveHint: true, openWorldHint: false },
249
+ async handler(args, client) {
250
+ try {
251
+ const { triggerId } = validate(TriggerIdInput, args);
252
+ const data = await client.delete(`/api/routine-triggers/${triggerId}`);
253
+ return { content: [{ type: "text", text: JSON.stringify(data) }] };
254
+ }
255
+ catch (err) {
256
+ return handleApiError(err);
257
+ }
258
+ },
259
+ },
260
+ {
261
+ name: "paperclip_run_routine",
262
+ description: "Manually trigger a routine run immediately. Run ID header is injected automatically.",
263
+ inputSchema: {
264
+ type: "object",
265
+ properties: {
266
+ routineId: { type: "string", description: "Routine UUID" },
267
+ },
268
+ required: ["routineId"],
269
+ },
270
+ annotations: { destructiveHint: false, openWorldHint: false },
271
+ async handler(args, client) {
272
+ try {
273
+ const { routineId } = validate(RoutineIdInput, args);
274
+ const data = await client.post(`/api/routines/${routineId}/run`);
275
+ return { content: [{ type: "text", text: JSON.stringify(data) }] };
276
+ }
277
+ catch (err) {
278
+ return handleApiError(err);
279
+ }
280
+ },
281
+ },
282
+ {
283
+ name: "paperclip_list_routine_runs",
284
+ description: "List historical runs for a routine.",
285
+ inputSchema: {
286
+ type: "object",
287
+ properties: {
288
+ routineId: { type: "string", description: "Routine UUID" },
289
+ },
290
+ required: ["routineId"],
291
+ },
292
+ annotations: { readOnlyHint: true, openWorldHint: false },
293
+ async handler(args, client) {
294
+ try {
295
+ const { routineId } = validate(RoutineIdInput, args);
296
+ const data = await client.get(`/api/routines/${routineId}/runs`);
297
+ return { content: [{ type: "text", text: JSON.stringify(data) }] };
298
+ }
299
+ catch (err) {
300
+ return handleApiError(err);
301
+ }
302
+ },
303
+ },
304
+ ];
305
+ //# sourceMappingURL=routines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routines.js","sourceRoot":"","sources":["../../src/tools/routines.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ import type { ToolResult } from "./index.js";
3
+ export declare function validate<T>(schema: z.ZodType<T>, args: unknown): T;
4
+ export declare function handleApiError(err: unknown): ToolResult;
5
+ export declare const NoInput: z.ZodObject<{}, z.core.$strip>;
6
+ export declare const IssueIdSchema: z.ZodObject<{
7
+ issueId: z.ZodString;
8
+ }, z.core.$strip>;
9
+ export declare const StatusSchema: z.ZodEnum<{
10
+ backlog: "backlog";
11
+ todo: "todo";
12
+ in_progress: "in_progress";
13
+ in_review: "in_review";
14
+ done: "done";
15
+ blocked: "blocked";
16
+ cancelled: "cancelled";
17
+ }>;
18
+ export declare const PrioritySchema: z.ZodEnum<{
19
+ critical: "critical";
20
+ high: "high";
21
+ medium: "medium";
22
+ low: "low";
23
+ }>;
24
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/tools/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,CAMlE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAMvD;AAGD,eAAO,MAAM,OAAO,gCAAe,CAAC;AAEpC,eAAO,MAAM,aAAa;;iBAExB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;EAQvB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;EAAgD,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
2
+ import { z } from "zod";
3
+ import { PaperclipApiError } from "../errors.js";
4
+ export function validate(schema, args) {
5
+ const result = schema.safeParse(args);
6
+ if (!result.success) {
7
+ throw new McpError(ErrorCode.InvalidParams, result.error.message);
8
+ }
9
+ return result.data;
10
+ }
11
+ export function handleApiError(err) {
12
+ if (err instanceof PaperclipApiError) {
13
+ const text = `Paperclip API error ${err.status} ${err.statusText}: ${JSON.stringify(err.body)}`;
14
+ return { isError: true, content: [{ type: "text", text }] };
15
+ }
16
+ throw err;
17
+ }
18
+ // Common input schemas reused across tool modules
19
+ export const NoInput = z.object({});
20
+ export const IssueIdSchema = z.object({
21
+ issueId: z.string().min(1),
22
+ });
23
+ export const StatusSchema = z.enum([
24
+ "backlog",
25
+ "todo",
26
+ "in_progress",
27
+ "in_review",
28
+ "done",
29
+ "blocked",
30
+ "cancelled",
31
+ ]);
32
+ export const PrioritySchema = z.enum(["critical", "high", "medium", "low"]);
33
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/tools/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGjD,MAAM,UAAU,QAAQ,CAAI,MAAoB,EAAE,IAAa;IAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,GAAG,YAAY,iBAAiB,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,uBAAuB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAChG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAC9D,CAAC;IACD,MAAM,GAAG,CAAC;AACZ,CAAC;AAED,kDAAkD;AAClD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEpC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC;IACjC,SAAS;IACT,MAAM;IACN,aAAa;IACb,WAAW;IACX,MAAM;IACN,SAAS;IACT,WAAW;CACZ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC"}
@@ -0,0 +1,36 @@
1
+ export interface PaperclipAgent {
2
+ id: string;
3
+ companyId: string;
4
+ name: string;
5
+ role: string;
6
+ title: string | null;
7
+ status: string;
8
+ reportsTo: string | null;
9
+ capabilities: string;
10
+ urlKey: string;
11
+ budgetMonthlyCents: number;
12
+ spentMonthlyCents: number;
13
+ chainOfCommand: Array<{
14
+ id: string;
15
+ name: string;
16
+ role: string;
17
+ title: string | null;
18
+ }>;
19
+ }
20
+ export interface PaperclipIssueCompact {
21
+ id: string;
22
+ identifier: string;
23
+ title: string;
24
+ status: string;
25
+ priority: string;
26
+ projectId: string | null;
27
+ goalId: string | null;
28
+ parentId: string | null;
29
+ updatedAt: string;
30
+ activeRun?: {
31
+ id: string;
32
+ status: string;
33
+ agentId: string;
34
+ } | null;
35
+ }
36
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,KAAK,CAAC;QACpB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI,CAAC;CACV"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // Shared Paperclip API response types
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,sCAAsC"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "paperclip-mcp",
3
+ "version": "1.0.0",
4
+ "description": "Paperclip MCP server for Claude Code agents",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "paperclip-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "keywords": [
14
+ "mcp",
15
+ "paperclip",
16
+ "claude",
17
+ "model-context-protocol"
18
+ ],
19
+ "mcpName": "paperclip",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "https://github.com/paperclip-ai/paperclip-mcp.git"
23
+ },
24
+ "bugs": {
25
+ "url": "https://github.com/paperclip-ai/paperclip-mcp/issues"
26
+ },
27
+ "homepage": "https://github.com/paperclip-ai/paperclip-mcp#readme",
28
+ "scripts": {
29
+ "build": "tsc && shx chmod +x dist/*.js",
30
+ "prepare": "npm run build",
31
+ "dev": "tsx src/index.ts",
32
+ "start": "node dist/index.js",
33
+ "lint": "eslint src",
34
+ "format": "prettier --write .",
35
+ "format:check": "prettier --check .",
36
+ "typecheck": "tsc --noEmit",
37
+ "test": "node --import tsx/esm --test 'src/**/*.test.ts'",
38
+ "docs:check": "find docs -name '*.md' | xargs markdown-link-check -c .markdown-link-check.json"
39
+ },
40
+ "dependencies": {
41
+ "@modelcontextprotocol/sdk": "^1.26.0",
42
+ "zod": "^4.3.6"
43
+ },
44
+ "devDependencies": {
45
+ "@eslint/js": "^9.0.0",
46
+ "@types/node": "^22.0.0",
47
+ "eslint": "^9.0.0",
48
+ "markdown-link-check": "^3.12.0",
49
+ "prettier": "^3.0.0",
50
+ "shx": "^0.3.4",
51
+ "tsx": "^4.0.0",
52
+ "typescript": "^5.0.0",
53
+ "typescript-eslint": "^8.0.0"
54
+ },
55
+ "publishConfig": {
56
+ "access": "public"
57
+ },
58
+ "engines": {
59
+ "node": ">=22"
60
+ }
61
+ }