basecamp-mcp 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -134,7 +134,8 @@ npm run dev
134
134
  - `basecamp_move_kanban_card` - Move a card to a different column and/or position
135
135
 
136
136
  #### Activity
137
- - `basecamp_list_recordings` - Browse recent activity globally or across specific projects, with filtering by type, date range, person, and text search. All filters except text search support multiple values (e.g., multiple project IDs, person IDs, or types for OR-matching)
137
+ - `basecamp_list_recordings` - Browse recent activity globally or across specific projects, with filtering by type, date range, person, and text search. All filters support multiple values for OR-matching (e.g., multiple project IDs, person IDs, types, or search terms)
138
+ - `basecamp_list_campfire_messages` - Browse chat messages from Campfires with filtering by campfire, person, text content, and date range. All filters support multiple values for OR-matching
138
139
 
139
140
  ## Development
140
141
 
package/dist/index.js CHANGED
@@ -21,12 +21,14 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
21
21
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
22
22
  import { registerActivityTools } from "./tools/activity.js";
23
23
  import { registerCommentTools } from "./tools/comments.js";
24
+ import { registerDocumentTools } from "./tools/documents.js";
24
25
  import { registerKanbanTools } from "./tools/kanban.js";
25
26
  import { registerMessageTools } from "./tools/messages.js";
26
27
  import { registerPeopleTools } from "./tools/people.js";
27
28
  // Import tool registration functions
28
29
  import { registerProjectTools } from "./tools/projects.js";
29
30
  import { registerTodoTools } from "./tools/todos.js";
31
+ import { registerUploadTools } from "./tools/uploads.js";
30
32
  /**
31
33
  * Main server initialization and startup
32
34
  */
@@ -58,6 +60,8 @@ async function main() {
58
60
  registerPeopleTools(server);
59
61
  registerKanbanTools(server);
60
62
  registerActivityTools(server);
63
+ registerDocumentTools(server);
64
+ registerUploadTools(server);
61
65
  console.error("Tools registered successfully");
62
66
  // Create stdio transport
63
67
  const transport = new StdioServerTransport();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,qCAAqC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,0CAA0C;IAC1C,MAAM,eAAe,GAAG;QACtB,oBAAoB;QACpB,wBAAwB;QACxB,wBAAwB;QACxB,qBAAqB;KACtB,CAAC;IAEF,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CACX,kDAAkD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvE,CAAC;QACF,OAAO,CAAC,KAAK,CACX,+EAA+E,CAChF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,6BAA6B;IAC7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,+BAA+B;IAC/B,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACtC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAE/C,yBAAyB;IACzB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,8BAA8B;IAC9B,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACtD,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACpD,CAAC;AAED,iBAAiB;AACjB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,qCAAqC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,0CAA0C;IAC1C,MAAM,eAAe,GAAG;QACtB,oBAAoB;QACpB,wBAAwB;QACxB,wBAAwB;QACxB,qBAAqB;KACtB,CAAC;IAEF,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CACX,kDAAkD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvE,CAAC;QACF,OAAO,CAAC,KAAK,CACX,+EAA+E,CAChF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,6BAA6B;IAC7B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,+BAA+B;IAC/B,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACtC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAE/C,yBAAyB;IACzB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,8BAA8B;IAC9B,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACtD,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACpD,CAAC;AAED,iBAAiB;AACjB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/tools/activity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuHzE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqQ7D"}
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/tools/activity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAwHzE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqiB7D"}
@@ -18,6 +18,7 @@ const DEFAULT_RECORDING_TYPES = [
18
18
  "Document",
19
19
  "Comment",
20
20
  "Upload",
21
+ "Kanban::Card",
21
22
  ];
22
23
  /** Map of friendly type aliases to canonical Basecamp API type names */
23
24
  const TYPE_ALIASES = {
@@ -120,13 +121,14 @@ Use this tool to:
120
121
  - Filter activity by content type (todos, messages, documents, etc.)
121
122
  - Search activity by title text
122
123
 
123
- All filters except query support multiple values for OR-matching.
124
+ All filters support multiple values for OR-matching.
124
125
 
125
126
  Examples:
126
127
  - "What happened in the last 24 hours?" → since: "24h"
127
128
  - "Show recent todos in project 12345" → project_ids: [12345], type: ["todo"]
128
129
  - "What did Alice and Bob do this week?" → person_ids: [111, 222], since: "7d"
129
- - "Find messages mentioning launch across projects 1 and 2" → project_ids: [1, 2], type: ["message"], query: "launch"
130
+ - "Find messages mentioning launch across projects 1 and 2" → project_ids: [1, 2], type: ["message"], query: ["launch"]
131
+ - "Find items about design or UX" → query: ["design", "UX"]
130
132
  - "List all messages across projects" → type: ["message"]`,
131
133
  inputSchema: {
132
134
  project_ids: z
@@ -139,7 +141,7 @@ Examples:
139
141
  .describe('Recording type filter. Options: "todo", "message", "document", "comment", "upload", ' +
140
142
  '"todolist", "question", "schedule", "vault". ' +
141
143
  "Supports multiple values for OR-matching. " +
142
- "Omit to fetch all common types (todo, message, document, comment, upload)."),
144
+ "Omit to fetch all common types (todo, message, document, comment, upload, card)."),
143
145
  since: z
144
146
  .string()
145
147
  .optional()
@@ -150,9 +152,9 @@ Examples:
150
152
  .optional()
151
153
  .describe("Filter by creator person IDs. Supports multiple IDs for OR-matching. Use basecamp_list_people to find person IDs."),
152
154
  query: z
153
- .string()
155
+ .array(z.string())
154
156
  .optional()
155
- .describe("Case-insensitive text search against recording titles."),
157
+ .describe("Case-insensitive text search against recording titles. Supports multiple terms for OR-matching."),
156
158
  sort: z
157
159
  .enum(["created_at", "updated_at"])
158
160
  .optional()
@@ -237,10 +239,13 @@ Examples:
237
239
  const personIdSet = new Set(params.person_ids);
238
240
  filtered = filtered.filter((r) => r.creator && personIdSet.has(r.creator.id));
239
241
  }
240
- // Filter by text search (case-insensitive substring match on title)
241
- if (params.query) {
242
- const lowerQuery = params.query.toLowerCase();
243
- filtered = filtered.filter((r) => r.title.toLowerCase().includes(lowerQuery));
242
+ // Filter by text search (case-insensitive substring match on title, OR-matching)
243
+ if (params.query && params.query.length > 0) {
244
+ const lowerQueries = params.query.map((q) => q.toLowerCase());
245
+ filtered = filtered.filter((r) => {
246
+ const lowerTitle = r.title.toLowerCase();
247
+ return lowerQueries.some((q) => lowerTitle.includes(q));
248
+ });
244
249
  }
245
250
  // Sort merged results
246
251
  const sortDir = params.direction || "desc";
@@ -317,5 +322,226 @@ Examples:
317
322
  };
318
323
  }
319
324
  });
325
+ server.registerTool("basecamp_list_campfire_messages", {
326
+ title: "List Campfire Messages",
327
+ description: `Browse chat messages from Basecamp Campfires. Campfires are real-time chat rooms within projects.
328
+
329
+ Use this tool to:
330
+ - See recent chat activity across all campfires or specific ones
331
+ - Find messages from specific people
332
+ - Search message content for keywords
333
+ - Review chat history since a specific date or time period
334
+
335
+ All filters support multiple values for OR-matching.
336
+
337
+ Examples:
338
+ - "What's been discussed in chat today?" → since: "today"
339
+ - "Show messages from Alice and Bob" → person_ids: [111, 222]
340
+ - "Find chat messages mentioning deploy or release" → query: ["deploy", "release"]
341
+ - "Recent messages in campfire 12345" → campfire_ids: [12345]`,
342
+ inputSchema: {
343
+ campfire_ids: z
344
+ .array(BasecampIdSchema)
345
+ .optional()
346
+ .describe("Filter to specific campfires by ID. Supports multiple IDs for OR-matching. Omit to browse all campfires."),
347
+ person_ids: z
348
+ .array(BasecampIdSchema)
349
+ .optional()
350
+ .describe("Filter by sender person IDs. Supports multiple IDs for OR-matching. Use basecamp_list_people to find person IDs."),
351
+ query: z
352
+ .array(z.string())
353
+ .optional()
354
+ .describe("Case-insensitive text search against message content. Supports multiple terms for OR-matching."),
355
+ since: z
356
+ .string()
357
+ .optional()
358
+ .describe('Show messages since this time. Accepts ISO 8601 dates (e.g., "2024-01-15"), ' +
359
+ 'relative durations ("24h", "7d", "2w"), or keywords ("today", "yesterday").'),
360
+ limit: z
361
+ .number()
362
+ .min(1)
363
+ .max(100)
364
+ .optional()
365
+ .describe(`Maximum number of messages to return (default: ${DEFAULT_LIMIT}, max: 100).`),
366
+ },
367
+ annotations: {
368
+ readOnlyHint: true,
369
+ destructiveHint: false,
370
+ idempotentHint: true,
371
+ openWorldHint: true,
372
+ },
373
+ }, async (params) => {
374
+ try {
375
+ const client = await initializeBasecampClient();
376
+ // Parse since date upfront if provided
377
+ const sinceDate = params.since ? parseSince(params.since) : null;
378
+ // Determine which campfires to fetch from
379
+ let campfiresToFetch = [];
380
+ if (params.campfire_ids && params.campfire_ids.length > 0) {
381
+ // Fetch all campfires to get bucket IDs for the requested campfire IDs
382
+ const allCampfires = [];
383
+ for await (const campfire of asyncPagedIterator({
384
+ fetchPage: client.campfires.list,
385
+ request: {},
386
+ })) {
387
+ allCampfires.push(campfire);
388
+ }
389
+ const campfireIdSet = new Set(params.campfire_ids);
390
+ campfiresToFetch = allCampfires
391
+ .filter((c) => campfireIdSet.has(c.id))
392
+ .map((c) => ({
393
+ bucketId: c.bucket.id,
394
+ campfireId: c.id,
395
+ campfireName: c.title,
396
+ projectName: c.bucket.name,
397
+ }));
398
+ if (campfiresToFetch.length === 0) {
399
+ return {
400
+ content: [
401
+ {
402
+ type: "text",
403
+ text: JSON.stringify({
404
+ error: "No campfires found matching the provided IDs.",
405
+ provided_ids: params.campfire_ids,
406
+ }, null, 2),
407
+ },
408
+ ],
409
+ };
410
+ }
411
+ }
412
+ else {
413
+ // Fetch all campfires, filtering by updated_at if since is provided
414
+ for await (const campfire of asyncPagedIterator({
415
+ fetchPage: client.campfires.list,
416
+ request: {},
417
+ })) {
418
+ // Skip campfires that haven't been updated since the filter date
419
+ if (sinceDate) {
420
+ const campfireUpdatedAt = new Date(campfire.updated_at);
421
+ if (campfireUpdatedAt < sinceDate) {
422
+ continue;
423
+ }
424
+ }
425
+ campfiresToFetch.push({
426
+ bucketId: campfire.bucket.id,
427
+ campfireId: campfire.id,
428
+ campfireName: campfire.title,
429
+ projectName: campfire.bucket.name,
430
+ });
431
+ }
432
+ if (campfiresToFetch.length === 0) {
433
+ return {
434
+ content: [
435
+ {
436
+ type: "text",
437
+ text: JSON.stringify({ messages: [], total_fetched: 0, returned: 0 }, null, 2),
438
+ },
439
+ ],
440
+ };
441
+ }
442
+ }
443
+ // Fetch lines from each campfire in parallel
444
+ const fetchPromises = campfiresToFetch.map(async ({ bucketId, campfireId, campfireName, projectName }) => {
445
+ const lines = [];
446
+ for await (const line of asyncPagedIterator({
447
+ fetchPage: client.campfires.listLines,
448
+ request: {
449
+ params: { bucketId, campfireId },
450
+ },
451
+ })) {
452
+ // API returns newest first - early termination if since is set
453
+ if (sinceDate) {
454
+ const lineDate = new Date(line.created_at);
455
+ if (lineDate < sinceDate) {
456
+ break;
457
+ }
458
+ }
459
+ lines.push({
460
+ ...line,
461
+ campfire_name: campfireName,
462
+ project_name: projectName,
463
+ });
464
+ }
465
+ return lines;
466
+ });
467
+ const results = await Promise.all(fetchPromises);
468
+ let allLines = results.flat();
469
+ // Filter by person IDs (OR-match)
470
+ if (params.person_ids && params.person_ids.length > 0) {
471
+ const personIdSet = new Set(params.person_ids);
472
+ allLines = allLines.filter((line) => line.creator && personIdSet.has(line.creator.id));
473
+ }
474
+ // Filter by text search (case-insensitive substring match on content, OR-matching)
475
+ if (params.query && params.query.length > 0) {
476
+ const lowerQueries = params.query.map((q) => q.toLowerCase());
477
+ allLines = allLines.filter((line) => {
478
+ const lowerContent = line.content.toLowerCase();
479
+ return lowerQueries.some((q) => lowerContent.includes(q));
480
+ });
481
+ }
482
+ // Sort all messages by created_at desc (newest first)
483
+ allLines.sort((a, b) => {
484
+ const dateA = new Date(a.created_at).getTime();
485
+ const dateB = new Date(b.created_at).getTime();
486
+ return dateB - dateA;
487
+ });
488
+ // Apply limit
489
+ const limit = params.limit || DEFAULT_LIMIT;
490
+ const total = allLines.length;
491
+ allLines = allLines.slice(0, limit);
492
+ // Serialize response
493
+ const serialized = allLines.map((line) => ({
494
+ id: line.id,
495
+ content: line.content,
496
+ created_at: line.created_at,
497
+ url: line.app_url,
498
+ creator: line.creator
499
+ ? {
500
+ id: line.creator.id,
501
+ name: line.creator.name,
502
+ email: line.creator.email_address,
503
+ }
504
+ : null,
505
+ campfire: {
506
+ id: line.parent?.id,
507
+ name: line.campfire_name,
508
+ },
509
+ project: {
510
+ id: line.bucket.id,
511
+ name: line.project_name,
512
+ },
513
+ }));
514
+ const result = {
515
+ messages: serialized,
516
+ total_fetched: total,
517
+ returned: serialized.length,
518
+ };
519
+ if (total > limit) {
520
+ result.truncated = true;
521
+ result.truncation_message = `Showing ${limit} of ${total} messages. Increase limit or narrow filters to see more.`;
522
+ }
523
+ let jsonStr = JSON.stringify(result, null, 2);
524
+ // Handle response size limit
525
+ if (jsonStr.length > CHARACTER_LIMIT) {
526
+ const reducedLimit = Math.floor(serialized.length / 2);
527
+ const reduced = serialized.slice(0, reducedLimit);
528
+ jsonStr = JSON.stringify({
529
+ messages: reduced,
530
+ total_fetched: total,
531
+ returned: reduced.length,
532
+ truncated: true,
533
+ truncation_message: `Response truncated to ${reduced.length} messages due to size limits. Use more specific filters or a smaller limit.`,
534
+ }, null, 2);
535
+ }
536
+ return {
537
+ content: [{ type: "text", text: jsonStr }],
538
+ };
539
+ }
540
+ catch (error) {
541
+ return {
542
+ content: [{ type: "text", text: handleBasecampError(error) }],
543
+ };
544
+ }
545
+ });
320
546
  }
321
547
  //# sourceMappingURL=activity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/tools/activity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/tools/activity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Document, Vault & File download tools for Basecamp MCP server
3
+ *
4
+ * Vaults are folders in Basecamp's "Docs & Files" section.
5
+ * Documents are rich-text documents stored inside vaults.
6
+ * Uploads are files stored in vaults.
7
+ * Blobs are inline attachments embedded in rich text via <bc-attachment> tags.
8
+ */
9
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
10
+ export declare function registerDocumentTools(server: McpServer): void;
11
+ //# sourceMappingURL=documents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6gB7D"}
@@ -0,0 +1,453 @@
1
+ /**
2
+ * Document, Vault & File download tools for Basecamp MCP server
3
+ *
4
+ * Vaults are folders in Basecamp's "Docs & Files" section.
5
+ * Documents are rich-text documents stored inside vaults.
6
+ * Uploads are files stored in vaults.
7
+ * Blobs are inline attachments embedded in rich text via <bc-attachment> tags.
8
+ */
9
+ import { asyncPagedToArray } from "basecamp-client";
10
+ import { z } from "zod";
11
+ import { BasecampIdSchema } from "../schemas/common.js";
12
+ import { initializeBasecampClient } from "../utils/auth.js";
13
+ import { applyContentOperations, ContentOperationFields, htmlRules, validateContentOperations, } from "../utils/contentOperations.js";
14
+ import { handleBasecampError } from "../utils/errorHandlers.js";
15
+ import { serializePerson } from "../utils/serializers.js";
16
+ export function registerDocumentTools(server) {
17
+ // basecamp_list_vaults
18
+ server.registerTool("basecamp_list_vaults", {
19
+ title: "List Basecamp Vaults",
20
+ description: "List sub-vaults (folders) under a parent vault in the Docs & Files section.",
21
+ inputSchema: {
22
+ bucket_id: BasecampIdSchema.describe("Project/bucket ID"),
23
+ parent_vault_id: BasecampIdSchema.describe("Parent vault ID (use the vault ID from the project's dock)"),
24
+ filter: z
25
+ .string()
26
+ .optional()
27
+ .describe("Optional regular expression to filter vaults by title"),
28
+ },
29
+ annotations: {
30
+ readOnlyHint: true,
31
+ destructiveHint: false,
32
+ idempotentHint: true,
33
+ openWorldHint: true,
34
+ },
35
+ }, async (params) => {
36
+ try {
37
+ const client = await initializeBasecampClient();
38
+ const vaults = await asyncPagedToArray({
39
+ fetchPage: client.vaults.list,
40
+ request: {
41
+ params: {
42
+ bucketId: params.bucket_id,
43
+ parentVaultId: params.parent_vault_id,
44
+ },
45
+ query: {},
46
+ },
47
+ });
48
+ let filtered = vaults;
49
+ if (params.filter) {
50
+ const regex = new RegExp(params.filter, "i");
51
+ filtered = vaults.filter((v) => regex.test(v.title));
52
+ }
53
+ return {
54
+ content: [
55
+ {
56
+ type: "text",
57
+ text: JSON.stringify(filtered.map((v) => ({
58
+ id: v.id,
59
+ title: v.title,
60
+ documents_count: v.documents_count,
61
+ uploads_count: v.uploads_count,
62
+ vaults_count: v.vaults_count,
63
+ creator: serializePerson(v.creator),
64
+ created_at: v.created_at,
65
+ url: v.app_url,
66
+ })), null, 2),
67
+ },
68
+ ],
69
+ };
70
+ }
71
+ catch (error) {
72
+ return {
73
+ content: [{ type: "text", text: handleBasecampError(error) }],
74
+ };
75
+ }
76
+ });
77
+ // basecamp_get_vault
78
+ server.registerTool("basecamp_get_vault", {
79
+ title: "Get Basecamp Vault",
80
+ description: "Get details of a vault (folder) including document/upload/sub-vault counts.",
81
+ inputSchema: {
82
+ bucket_id: BasecampIdSchema.describe("Project/bucket ID containing the vault"),
83
+ vault_id: BasecampIdSchema.describe("Vault ID to retrieve"),
84
+ },
85
+ annotations: {
86
+ readOnlyHint: true,
87
+ destructiveHint: false,
88
+ idempotentHint: true,
89
+ openWorldHint: true,
90
+ },
91
+ }, async (params) => {
92
+ try {
93
+ const client = await initializeBasecampClient();
94
+ const response = await client.vaults.get({
95
+ params: {
96
+ bucketId: params.bucket_id,
97
+ vaultId: params.vault_id,
98
+ },
99
+ });
100
+ if (response.status !== 200 || !response.body) {
101
+ throw new Error(`Failed to fetch vault: ${response.status}`);
102
+ }
103
+ const vault = response.body;
104
+ return {
105
+ content: [
106
+ {
107
+ type: "text",
108
+ text: JSON.stringify({
109
+ id: vault.id,
110
+ title: vault.title,
111
+ documents_count: vault.documents_count,
112
+ documents_url: vault.documents_url,
113
+ uploads_count: vault.uploads_count,
114
+ uploads_url: vault.uploads_url,
115
+ vaults_count: vault.vaults_count,
116
+ vaults_url: vault.vaults_url,
117
+ creator: serializePerson(vault.creator),
118
+ created_at: vault.created_at,
119
+ updated_at: vault.updated_at,
120
+ url: vault.app_url,
121
+ }, null, 2),
122
+ },
123
+ ],
124
+ };
125
+ }
126
+ catch (error) {
127
+ return {
128
+ content: [{ type: "text", text: handleBasecampError(error) }],
129
+ };
130
+ }
131
+ });
132
+ // basecamp_create_vault
133
+ server.registerTool("basecamp_create_vault", {
134
+ title: "Create Basecamp Vault",
135
+ description: "Create a new vault (folder) under a parent vault.",
136
+ inputSchema: {
137
+ bucket_id: BasecampIdSchema.describe("Project/bucket ID"),
138
+ parent_vault_id: BasecampIdSchema.describe("Parent vault ID to create the new vault under"),
139
+ title: z.string().min(1).describe("Vault title/name"),
140
+ },
141
+ annotations: {
142
+ readOnlyHint: false,
143
+ destructiveHint: false,
144
+ idempotentHint: false,
145
+ openWorldHint: true,
146
+ },
147
+ }, async (params) => {
148
+ try {
149
+ const client = await initializeBasecampClient();
150
+ const response = await client.vaults.create({
151
+ params: {
152
+ bucketId: params.bucket_id,
153
+ parentVaultId: params.parent_vault_id,
154
+ },
155
+ body: {
156
+ title: params.title,
157
+ },
158
+ });
159
+ if (response.status !== 201 || !response.body) {
160
+ throw new Error("Failed to create vault");
161
+ }
162
+ return {
163
+ content: [
164
+ {
165
+ type: "text",
166
+ text: `Vault created successfully!\n\nID: ${response.body.id}\nTitle: ${response.body.title}\nURL: ${response.body.app_url}`,
167
+ },
168
+ ],
169
+ };
170
+ }
171
+ catch (error) {
172
+ return {
173
+ content: [{ type: "text", text: handleBasecampError(error) }],
174
+ };
175
+ }
176
+ });
177
+ // basecamp_update_vault
178
+ server.registerTool("basecamp_update_vault", {
179
+ title: "Update Basecamp Vault",
180
+ description: "Update the title of a vault (folder).",
181
+ inputSchema: {
182
+ bucket_id: BasecampIdSchema.describe("Project/bucket ID"),
183
+ vault_id: BasecampIdSchema.describe("Vault ID to update"),
184
+ title: z.string().min(1).describe("New vault title"),
185
+ },
186
+ annotations: {
187
+ readOnlyHint: false,
188
+ destructiveHint: false,
189
+ idempotentHint: true,
190
+ openWorldHint: true,
191
+ },
192
+ }, async (params) => {
193
+ try {
194
+ const client = await initializeBasecampClient();
195
+ const response = await client.vaults.update({
196
+ params: {
197
+ bucketId: params.bucket_id,
198
+ vaultId: params.vault_id,
199
+ },
200
+ body: {
201
+ title: params.title,
202
+ },
203
+ });
204
+ if (response.status !== 200 || !response.body) {
205
+ throw new Error("Failed to update vault");
206
+ }
207
+ return {
208
+ content: [
209
+ {
210
+ type: "text",
211
+ text: `Vault updated successfully!\n\nID: ${response.body.id}\nTitle: ${response.body.title}`,
212
+ },
213
+ ],
214
+ };
215
+ }
216
+ catch (error) {
217
+ return {
218
+ content: [{ type: "text", text: handleBasecampError(error) }],
219
+ };
220
+ }
221
+ });
222
+ // basecamp_list_documents
223
+ server.registerTool("basecamp_list_documents", {
224
+ title: "List Basecamp Documents",
225
+ description: "List documents in a vault.",
226
+ inputSchema: {
227
+ bucket_id: BasecampIdSchema.describe("Project/bucket ID"),
228
+ vault_id: BasecampIdSchema.describe("Vault ID containing the documents"),
229
+ filter: z
230
+ .string()
231
+ .optional()
232
+ .describe("Optional regular expression to filter documents by title"),
233
+ },
234
+ annotations: {
235
+ readOnlyHint: true,
236
+ destructiveHint: false,
237
+ idempotentHint: true,
238
+ openWorldHint: true,
239
+ },
240
+ }, async (params) => {
241
+ try {
242
+ const client = await initializeBasecampClient();
243
+ const documents = await asyncPagedToArray({
244
+ fetchPage: client.documents.list,
245
+ request: {
246
+ params: {
247
+ bucketId: params.bucket_id,
248
+ vaultId: params.vault_id,
249
+ },
250
+ query: {},
251
+ },
252
+ });
253
+ let filtered = documents;
254
+ if (params.filter) {
255
+ const regex = new RegExp(params.filter, "i");
256
+ filtered = documents.filter((d) => regex.test(d.title) || regex.test(d.content || ""));
257
+ }
258
+ return {
259
+ content: [
260
+ {
261
+ type: "text",
262
+ text: JSON.stringify(filtered.map((d) => ({
263
+ id: d.id,
264
+ title: d.title,
265
+ creator: serializePerson(d.creator),
266
+ created_at: d.created_at,
267
+ updated_at: d.updated_at,
268
+ url: d.app_url,
269
+ })), null, 2),
270
+ },
271
+ ],
272
+ };
273
+ }
274
+ catch (error) {
275
+ return {
276
+ content: [{ type: "text", text: handleBasecampError(error) }],
277
+ };
278
+ }
279
+ });
280
+ // basecamp_get_document
281
+ server.registerTool("basecamp_get_document", {
282
+ title: "Get Basecamp Document",
283
+ description: "Retrieve a single document with its full content.",
284
+ inputSchema: {
285
+ bucket_id: BasecampIdSchema.describe("Project/bucket ID containing the document"),
286
+ document_id: BasecampIdSchema.describe("Document ID to retrieve"),
287
+ },
288
+ annotations: {
289
+ readOnlyHint: true,
290
+ destructiveHint: false,
291
+ idempotentHint: true,
292
+ openWorldHint: true,
293
+ },
294
+ }, async (params) => {
295
+ try {
296
+ const client = await initializeBasecampClient();
297
+ const response = await client.documents.get({
298
+ params: {
299
+ bucketId: params.bucket_id,
300
+ documentId: params.document_id,
301
+ },
302
+ });
303
+ if (response.status !== 200 || !response.body) {
304
+ throw new Error(`Failed to fetch document: ${response.status}`);
305
+ }
306
+ const doc = response.body;
307
+ return {
308
+ content: [
309
+ {
310
+ type: "text",
311
+ text: JSON.stringify({
312
+ id: doc.id,
313
+ title: doc.title,
314
+ content: doc.content || "",
315
+ author: serializePerson(doc.creator),
316
+ created_at: doc.created_at,
317
+ updated_at: doc.updated_at,
318
+ url: doc.app_url,
319
+ }, null, 2),
320
+ },
321
+ ],
322
+ };
323
+ }
324
+ catch (error) {
325
+ return {
326
+ content: [{ type: "text", text: handleBasecampError(error) }],
327
+ };
328
+ }
329
+ });
330
+ // basecamp_create_document
331
+ server.registerTool("basecamp_create_document", {
332
+ title: "Create Basecamp Document",
333
+ description: `Create a new document in a vault. ${htmlRules}`,
334
+ inputSchema: {
335
+ bucket_id: BasecampIdSchema.describe("Project/bucket ID"),
336
+ vault_id: BasecampIdSchema.describe("Vault ID to create the document in"),
337
+ title: z.string().min(1).describe("Document title"),
338
+ content: z.string().describe("HTML document content"),
339
+ status: z
340
+ .enum(["active", "draft"])
341
+ .default("active")
342
+ .describe("Document status"),
343
+ },
344
+ annotations: {
345
+ readOnlyHint: false,
346
+ destructiveHint: false,
347
+ idempotentHint: false,
348
+ openWorldHint: true,
349
+ },
350
+ }, async (params) => {
351
+ try {
352
+ const client = await initializeBasecampClient();
353
+ const response = await client.documents.create({
354
+ params: {
355
+ bucketId: params.bucket_id,
356
+ vaultId: params.vault_id,
357
+ },
358
+ body: {
359
+ title: params.title,
360
+ content: params.content,
361
+ status: params.status,
362
+ },
363
+ });
364
+ if (response.status !== 201 || !response.body) {
365
+ throw new Error("Failed to create document");
366
+ }
367
+ return {
368
+ content: [
369
+ {
370
+ type: "text",
371
+ text: `Document created successfully!\n\nID: ${response.body.id}\nTitle: ${response.body.title}\nURL: ${response.body.app_url}`,
372
+ },
373
+ ],
374
+ };
375
+ }
376
+ catch (error) {
377
+ return {
378
+ content: [{ type: "text", text: handleBasecampError(error) }],
379
+ };
380
+ }
381
+ });
382
+ // basecamp_update_document
383
+ server.registerTool("basecamp_update_document", {
384
+ title: "Update Basecamp Document",
385
+ description: `Update a document. Use partial content operations when possible to save on token usage. ${htmlRules}`,
386
+ inputSchema: {
387
+ bucket_id: BasecampIdSchema.describe("Project/bucket ID"),
388
+ document_id: BasecampIdSchema.describe("Document ID to update"),
389
+ title: z.string().min(1).optional().describe("New document title"),
390
+ ...ContentOperationFields,
391
+ },
392
+ annotations: {
393
+ readOnlyHint: false,
394
+ destructiveHint: false,
395
+ idempotentHint: false,
396
+ openWorldHint: true,
397
+ },
398
+ }, async (params) => {
399
+ try {
400
+ validateContentOperations(params, ["title"]);
401
+ const client = await initializeBasecampClient();
402
+ let finalContent;
403
+ const hasPartialOps = params.content_append ||
404
+ params.content_prepend ||
405
+ params.search_replace;
406
+ if (hasPartialOps || params.content !== undefined) {
407
+ if (hasPartialOps) {
408
+ const currentResponse = await client.documents.get({
409
+ params: {
410
+ bucketId: params.bucket_id,
411
+ documentId: params.document_id,
412
+ },
413
+ });
414
+ if (currentResponse.status !== 200 || !currentResponse.body) {
415
+ throw new Error(`Failed to fetch current document for partial update: ${currentResponse.status}`);
416
+ }
417
+ const currentContent = currentResponse.body.content || "";
418
+ finalContent = applyContentOperations(currentContent, params);
419
+ }
420
+ else {
421
+ finalContent = params.content;
422
+ }
423
+ }
424
+ const response = await client.documents.update({
425
+ params: {
426
+ bucketId: params.bucket_id,
427
+ documentId: params.document_id,
428
+ },
429
+ body: {
430
+ ...(params.title ? { title: params.title } : {}),
431
+ ...(finalContent !== undefined ? { content: finalContent } : {}),
432
+ },
433
+ });
434
+ if (response.status !== 200 || !response.body) {
435
+ throw new Error("Failed to update document");
436
+ }
437
+ return {
438
+ content: [
439
+ {
440
+ type: "text",
441
+ text: `Document updated successfully!\n\nID: ${response.body.id}\nTitle: ${response.body.title}`,
442
+ },
443
+ ],
444
+ };
445
+ }
446
+ catch (error) {
447
+ return {
448
+ content: [{ type: "text", text: handleBasecampError(error) }],
449
+ };
450
+ }
451
+ });
452
+ }
453
+ //# sourceMappingURL=documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,SAAS,EACT,yBAAyB,GAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,uBAAuB;IACvB,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,6EAA6E;QAC/E,WAAW,EAAE;YACX,SAAS,EAAE,gBAAgB,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACzD,eAAe,EAAE,gBAAgB,CAAC,QAAQ,CACxC,4DAA4D,CAC7D;YACD,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,uDAAuD,CAAC;SACrE;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,wBAAwB,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;gBACrC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;gBAC7B,OAAO,EAAE;oBACP,MAAM,EAAE;wBACN,QAAQ,EAAE,MAAM,CAAC,SAAS;wBAC1B,aAAa,EAAE,MAAM,CAAC,eAAe;qBACtC;oBACD,KAAK,EAAE,EAAE;iBACV;aACF,CAAC,CAAC;YAEH,IAAI,QAAQ,GAAG,MAAM,CAAC;YACtB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAC7C,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACvD,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACnB,EAAE,EAAE,CAAC,CAAC,EAAE;4BACR,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,eAAe,EAAE,CAAC,CAAC,eAAe;4BAClC,aAAa,EAAE,CAAC,CAAC,aAAa;4BAC9B,YAAY,EAAE,CAAC,CAAC,YAAY;4BAC5B,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC;4BACnC,UAAU,EAAE,CAAC,CAAC,UAAU;4BACxB,GAAG,EAAE,CAAC,CAAC,OAAO;yBACf,CAAC,CAAC,EACH,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,qBAAqB;IACrB,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,6EAA6E;QAC/E,WAAW,EAAE;YACX,SAAS,EAAE,gBAAgB,CAAC,QAAQ,CAClC,wCAAwC,CACzC;YACD,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,sBAAsB,CAAC;SAC5D;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,wBAAwB,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;gBACvC,MAAM,EAAE;oBACN,QAAQ,EAAE,MAAM,CAAC,SAAS;oBAC1B,OAAO,EAAE,MAAM,CAAC,QAAQ;iBACzB;aACF,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/D,CAAC;YAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;YAE5B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,EAAE,EAAE,KAAK,CAAC,EAAE;4BACZ,KAAK,EAAE,KAAK,CAAC,KAAK;4BAClB,eAAe,EAAE,KAAK,CAAC,eAAe;4BACtC,aAAa,EAAE,KAAK,CAAC,aAAa;4BAClC,aAAa,EAAE,KAAK,CAAC,aAAa;4BAClC,WAAW,EAAE,KAAK,CAAC,WAAW;4BAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;4BAChC,UAAU,EAAE,KAAK,CAAC,UAAU;4BAC5B,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC;4BACvC,UAAU,EAAE,KAAK,CAAC,UAAU;4BAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;4BAC5B,GAAG,EAAE,KAAK,CAAC,OAAO;yBACnB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,wBAAwB;IACxB,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,mDAAmD;QAChE,WAAW,EAAE;YACX,SAAS,EAAE,gBAAgB,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACzD,eAAe,EAAE,gBAAgB,CAAC,QAAQ,CACxC,+CAA+C,CAChD;YACD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;SACtD;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,wBAAwB,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC1C,MAAM,EAAE;oBACN,QAAQ,EAAE,MAAM,CAAC,SAAS;oBAC1B,aAAa,EAAE,MAAM,CAAC,eAAe;iBACtC;gBACD,IAAI,EAAE;oBACJ,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB;aACF,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5C,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,sCAAsC,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE;qBAC7H;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,wBAAwB;IACxB,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,uCAAuC;QACpD,WAAW,EAAE;YACX,SAAS,EAAE,gBAAgB,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACzD,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YACzD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;SACrD;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,wBAAwB,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC1C,MAAM,EAAE;oBACN,QAAQ,EAAE,MAAM,CAAC,SAAS;oBAC1B,OAAO,EAAE,MAAM,CAAC,QAAQ;iBACzB;gBACD,IAAI,EAAE;oBACJ,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB;aACF,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5C,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,sCAAsC,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;qBAC9F;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,KAAK,EAAE,yBAAyB;QAChC,WAAW,EAAE,4BAA4B;QACzC,WAAW,EAAE;YACX,SAAS,EAAE,gBAAgB,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACzD,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CACjC,mCAAmC,CACpC;YACD,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,0DAA0D,CAAC;SACxE;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,wBAAwB,EAAE,CAAC;YAChD,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC;gBACxC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI;gBAChC,OAAO,EAAE;oBACP,MAAM,EAAE;wBACN,QAAQ,EAAE,MAAM,CAAC,SAAS;wBAC1B,OAAO,EAAE,MAAM,CAAC,QAAQ;qBACzB;oBACD,KAAK,EAAE,EAAE;iBACV;aACF,CAAC,CAAC;YAEH,IAAI,QAAQ,GAAG,SAAS,CAAC;YACzB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAC7C,QAAQ,GAAG,SAAS,CAAC,MAAM,CACzB,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAC1D,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACnB,EAAE,EAAE,CAAC,CAAC,EAAE;4BACR,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC;4BACnC,UAAU,EAAE,CAAC,CAAC,UAAU;4BACxB,UAAU,EAAE,CAAC,CAAC,UAAU;4BACxB,GAAG,EAAE,CAAC,CAAC,OAAO;yBACf,CAAC,CAAC,EACH,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,wBAAwB;IACxB,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,mDAAmD;QAChE,WAAW,EAAE;YACX,SAAS,EAAE,gBAAgB,CAAC,QAAQ,CAClC,2CAA2C,CAC5C;YACD,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SAClE;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,wBAAwB,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;gBAC1C,MAAM,EAAE;oBACN,QAAQ,EAAE,MAAM,CAAC,SAAS;oBAC1B,UAAU,EAAE,MAAM,CAAC,WAAW;iBAC/B;aACF,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAClE,CAAC;YAED,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;YAE1B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,EAAE,EAAE,GAAG,CAAC,EAAE;4BACV,KAAK,EAAE,GAAG,CAAC,KAAK;4BAChB,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;4BAC1B,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;4BACpC,UAAU,EAAE,GAAG,CAAC,UAAU;4BAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;4BAC1B,GAAG,EAAE,GAAG,CAAC,OAAO;yBACjB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,qCAAqC,SAAS,EAAE;QAC7D,WAAW,EAAE;YACX,SAAS,EAAE,gBAAgB,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACzD,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CACjC,oCAAoC,CACrC;YACD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YACrD,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;iBACzB,OAAO,CAAC,QAAQ,CAAC;iBACjB,QAAQ,CAAC,iBAAiB,CAAC;SAC/B;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,wBAAwB,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC7C,MAAM,EAAE;oBACN,QAAQ,EAAE,MAAM,CAAC,SAAS;oBAC1B,OAAO,EAAE,MAAM,CAAC,QAAQ;iBACzB;gBACD,IAAI,EAAE;oBACJ,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB;aACF,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,yCAAyC,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE;qBAChI;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;IAEF,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,2FAA2F,SAAS,EAAE;QACnH,WAAW,EAAE;YACX,SAAS,EAAE,gBAAgB,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACzD,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAClE,GAAG,sBAAsB;SAC1B;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,yBAAyB,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAE7C,MAAM,MAAM,GAAG,MAAM,wBAAwB,EAAE,CAAC;YAChD,IAAI,YAAgC,CAAC;YAErC,MAAM,aAAa,GACjB,MAAM,CAAC,cAAc;gBACrB,MAAM,CAAC,eAAe;gBACtB,MAAM,CAAC,cAAc,CAAC;YAExB,IAAI,aAAa,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAClD,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;wBACjD,MAAM,EAAE;4BACN,QAAQ,EAAE,MAAM,CAAC,SAAS;4BAC1B,UAAU,EAAE,MAAM,CAAC,WAAW;yBAC/B;qBACF,CAAC,CAAC;oBAEH,IAAI,eAAe,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;wBAC5D,MAAM,IAAI,KAAK,CACb,wDAAwD,eAAe,CAAC,MAAM,EAAE,CACjF,CAAC;oBACJ,CAAC;oBAED,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;oBAC1D,YAAY,GAAG,sBAAsB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;gBAChE,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;gBAChC,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC7C,MAAM,EAAE;oBACN,QAAQ,EAAE,MAAM,CAAC,SAAS;oBAC1B,UAAU,EAAE,MAAM,CAAC,WAAW;iBAC/B;gBACD,IAAI,EAAE;oBACJ,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAChD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACjE;aACF,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,yCAAyC,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;qBACjG;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;aAC9D,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Upload & Blob download tools for Basecamp MCP server
3
+ *
4
+ * Uploads are files stored in vaults (Docs & Files section).
5
+ * Blobs are inline attachments embedded in rich text via <bc-attachment> tags.
6
+ */
7
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
+ export declare function registerUploadTools(server: McpServer): void;
9
+ //# sourceMappingURL=uploads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../../src/tools/uploads.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0CzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuT3D"}
@@ -0,0 +1,319 @@
1
+ /**
2
+ * Upload & Blob download tools for Basecamp MCP server
3
+ *
4
+ * Uploads are files stored in vaults (Docs & Files section).
5
+ * Blobs are inline attachments embedded in rich text via <bc-attachment> tags.
6
+ */
7
+ import { mkdirSync, writeFileSync } from "node:fs";
8
+ import { tmpdir } from "node:os";
9
+ import { join } from "node:path";
10
+ import { asyncPagedToArray } from "basecamp-client";
11
+ import { z } from "zod";
12
+ import { BasecampIdSchema } from "../schemas/common.js";
13
+ import { initializeBasecampClient } from "../utils/auth.js";
14
+ import { handleBasecampError } from "../utils/errorHandlers.js";
15
+ import { serializePerson } from "../utils/serializers.js";
16
+ const DOWNLOAD_DIR = join(tmpdir(), "basecamp-downloads");
17
+ function saveToDisk(filename, data) {
18
+ mkdirSync(DOWNLOAD_DIR, { recursive: true });
19
+ const filePath = join(DOWNLOAD_DIR, filename);
20
+ writeFileSync(filePath, Buffer.from(data));
21
+ return filePath;
22
+ }
23
+ const IMAGE_CONTENT_TYPES = [
24
+ "image/png",
25
+ "image/jpeg",
26
+ "image/gif",
27
+ "image/webp",
28
+ ];
29
+ const TEXT_CONTENT_TYPES = [
30
+ "text/plain",
31
+ "text/csv",
32
+ "text/html",
33
+ "text/markdown",
34
+ "application/json",
35
+ "application/xml",
36
+ "text/xml",
37
+ ];
38
+ function isImageContentType(contentType) {
39
+ return IMAGE_CONTENT_TYPES.some((t) => contentType.startsWith(t));
40
+ }
41
+ function isTextContentType(contentType) {
42
+ return TEXT_CONTENT_TYPES.some((t) => contentType.startsWith(t));
43
+ }
44
+ export function registerUploadTools(server) {
45
+ // basecamp_list_uploads
46
+ server.registerTool("basecamp_list_uploads", {
47
+ title: "List Basecamp Uploads",
48
+ description: "List files uploaded to a vault in the Docs & Files section.",
49
+ inputSchema: {
50
+ bucket_id: BasecampIdSchema.describe("Project/bucket ID"),
51
+ vault_id: BasecampIdSchema.describe("Vault ID containing the uploads"),
52
+ filter: z
53
+ .string()
54
+ .optional()
55
+ .describe("Optional regular expression to filter uploads by filename"),
56
+ },
57
+ annotations: {
58
+ readOnlyHint: true,
59
+ destructiveHint: false,
60
+ idempotentHint: true,
61
+ openWorldHint: true,
62
+ },
63
+ }, async (params) => {
64
+ try {
65
+ const client = await initializeBasecampClient();
66
+ const uploads = await asyncPagedToArray({
67
+ fetchPage: client.uploads.list,
68
+ request: {
69
+ params: {
70
+ bucketId: params.bucket_id,
71
+ vaultId: params.vault_id,
72
+ },
73
+ query: {},
74
+ },
75
+ });
76
+ let filtered = uploads;
77
+ if (params.filter) {
78
+ const regex = new RegExp(params.filter, "i");
79
+ filtered = uploads.filter((u) => regex.test(u.filename) || regex.test(u.title));
80
+ }
81
+ return {
82
+ content: [
83
+ {
84
+ type: "text",
85
+ text: JSON.stringify(filtered.map((u) => ({
86
+ id: u.id,
87
+ title: u.title,
88
+ filename: u.filename,
89
+ content_type: u.content_type,
90
+ byte_size: u.byte_size,
91
+ width: u.width,
92
+ height: u.height,
93
+ description: u.description,
94
+ creator: serializePerson(u.creator),
95
+ created_at: u.created_at,
96
+ updated_at: u.updated_at,
97
+ url: u.app_url,
98
+ download_url: u.download_url,
99
+ })), null, 2),
100
+ },
101
+ ],
102
+ };
103
+ }
104
+ catch (error) {
105
+ return {
106
+ content: [{ type: "text", text: handleBasecampError(error) }],
107
+ };
108
+ }
109
+ });
110
+ // basecamp_get_upload
111
+ server.registerTool("basecamp_get_upload", {
112
+ title: "Get Basecamp Upload",
113
+ description: "Get a file uploaded to a vault. For images, returns the image content that the LLM can see directly. For text-based files (plain text, CSV, JSON, XML, etc.), returns the file content as text. For other binary formats, returns metadata only.",
114
+ inputSchema: {
115
+ bucket_id: BasecampIdSchema.describe("Project/bucket ID"),
116
+ upload_id: BasecampIdSchema.describe("Upload ID to retrieve"),
117
+ },
118
+ annotations: {
119
+ readOnlyHint: true,
120
+ destructiveHint: false,
121
+ idempotentHint: true,
122
+ openWorldHint: true,
123
+ },
124
+ }, async (params) => {
125
+ try {
126
+ const client = await initializeBasecampClient();
127
+ const response = await client.uploads.get({
128
+ params: {
129
+ bucketId: params.bucket_id,
130
+ uploadId: params.upload_id,
131
+ },
132
+ });
133
+ if (response.status !== 200 || !response.body) {
134
+ throw new Error(`Failed to fetch upload: ${response.status}`);
135
+ }
136
+ const upload = response.body;
137
+ const metadata = {
138
+ id: upload.id,
139
+ title: upload.title,
140
+ filename: upload.filename,
141
+ content_type: upload.content_type,
142
+ byte_size: upload.byte_size,
143
+ width: upload.width,
144
+ height: upload.height,
145
+ description: upload.description,
146
+ creator: serializePerson(upload.creator),
147
+ created_at: upload.created_at,
148
+ updated_at: upload.updated_at,
149
+ url: upload.app_url,
150
+ download_url: upload.download_url,
151
+ };
152
+ // Extract filename from download_url
153
+ const urlFilename = upload.download_url.split("/").pop() || upload.filename;
154
+ if (isImageContentType(upload.content_type)) {
155
+ const downloadResponse = await client.uploads.download({
156
+ params: {
157
+ bucketId: params.bucket_id,
158
+ uploadId: params.upload_id,
159
+ filename: urlFilename,
160
+ },
161
+ });
162
+ const base64 = Buffer.from(downloadResponse.body).toString("base64");
163
+ return {
164
+ content: [
165
+ {
166
+ type: "text",
167
+ text: JSON.stringify(metadata, null, 2),
168
+ },
169
+ {
170
+ type: "image",
171
+ data: base64,
172
+ mimeType: upload.content_type,
173
+ },
174
+ ],
175
+ };
176
+ }
177
+ if (isTextContentType(upload.content_type)) {
178
+ const downloadResponse = await client.uploads.download({
179
+ params: {
180
+ bucketId: params.bucket_id,
181
+ uploadId: params.upload_id,
182
+ filename: urlFilename,
183
+ },
184
+ });
185
+ const text = new TextDecoder().decode(downloadResponse.body);
186
+ return {
187
+ content: [
188
+ {
189
+ type: "text",
190
+ text: JSON.stringify(metadata, null, 2),
191
+ },
192
+ {
193
+ type: "text",
194
+ text: `--- File content of ${upload.filename} ---\n${text}`,
195
+ },
196
+ ],
197
+ };
198
+ }
199
+ const downloadResponse = await client.uploads.download({
200
+ params: {
201
+ bucketId: params.bucket_id,
202
+ uploadId: params.upload_id,
203
+ filename: urlFilename,
204
+ },
205
+ });
206
+ const filePath = saveToDisk(upload.filename, downloadResponse.body);
207
+ return {
208
+ content: [
209
+ {
210
+ type: "text",
211
+ text: JSON.stringify({
212
+ ...metadata,
213
+ saved_to: filePath,
214
+ note: `Binary file saved to disk. Use the file path to read it.`,
215
+ }, null, 2),
216
+ },
217
+ ],
218
+ };
219
+ }
220
+ catch (error) {
221
+ return {
222
+ content: [{ type: "text", text: handleBasecampError(error) }],
223
+ };
224
+ }
225
+ });
226
+ // basecamp_download_blob
227
+ server.registerTool("basecamp_download_blob", {
228
+ title: "Download Basecamp Blob",
229
+ description: "Download an inline attachment from a <bc-attachment> tag found in document/message/comment HTML content. Extract the blob_id and filename from the href attribute (format: https://storage.3.basecamp.com/{accountId}/blobs/{blobId}/download/{filename}). For images, returns the image content that the LLM can see directly. For text-based files, returns the file content as text.",
230
+ inputSchema: {
231
+ blob_id: z
232
+ .string()
233
+ .describe("Blob UUID extracted from the <bc-attachment> href URL"),
234
+ filename: z
235
+ .string()
236
+ .describe("Filename extracted from the <bc-attachment> href URL (URL-decoded)"),
237
+ content_type: z
238
+ .string()
239
+ .optional()
240
+ .describe('Content type from the <bc-attachment> content-type attribute (e.g. "image/png"). If not provided, will attempt to infer from filename.'),
241
+ },
242
+ annotations: {
243
+ readOnlyHint: true,
244
+ destructiveHint: false,
245
+ idempotentHint: true,
246
+ openWorldHint: true,
247
+ },
248
+ }, async (params) => {
249
+ try {
250
+ const client = await initializeBasecampClient();
251
+ const downloadResponse = await client.blobs.download({
252
+ params: {
253
+ blobId: params.blob_id,
254
+ filename: params.filename,
255
+ },
256
+ });
257
+ const contentType = params.content_type || inferContentType(params.filename);
258
+ if (isImageContentType(contentType)) {
259
+ const base64 = Buffer.from(downloadResponse.body).toString("base64");
260
+ return {
261
+ content: [
262
+ {
263
+ type: "text",
264
+ text: `Blob: ${params.filename} (${contentType})`,
265
+ },
266
+ {
267
+ type: "image",
268
+ data: base64,
269
+ mimeType: contentType,
270
+ },
271
+ ],
272
+ };
273
+ }
274
+ if (isTextContentType(contentType)) {
275
+ const text = new TextDecoder().decode(downloadResponse.body);
276
+ return {
277
+ content: [
278
+ {
279
+ type: "text",
280
+ text: `--- File content of ${params.filename} ---\n${text}`,
281
+ },
282
+ ],
283
+ };
284
+ }
285
+ const filePath = saveToDisk(params.filename, downloadResponse.body);
286
+ return {
287
+ content: [
288
+ {
289
+ type: "text",
290
+ text: `Downloaded ${params.filename} (${contentType}, ${downloadResponse.body.byteLength} bytes) and saved to: ${filePath}\n\nUse the file path to read it.`,
291
+ },
292
+ ],
293
+ };
294
+ }
295
+ catch (error) {
296
+ return {
297
+ content: [{ type: "text", text: handleBasecampError(error) }],
298
+ };
299
+ }
300
+ });
301
+ }
302
+ function inferContentType(filename) {
303
+ const ext = filename.split(".").pop()?.toLowerCase();
304
+ const map = {
305
+ png: "image/png",
306
+ jpg: "image/jpeg",
307
+ jpeg: "image/jpeg",
308
+ gif: "image/gif",
309
+ webp: "image/webp",
310
+ txt: "text/plain",
311
+ csv: "text/csv",
312
+ json: "application/json",
313
+ xml: "application/xml",
314
+ md: "text/markdown",
315
+ html: "text/html",
316
+ };
317
+ return map[ext || ""] || "application/octet-stream";
318
+ }
319
+ //# sourceMappingURL=uploads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploads.js","sourceRoot":"","sources":["../../src/tools/uploads.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "basecamp-mcp",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "Model Context Protocol (MCP) server for Basecamp integration. Enables LLMs to interact with Basecamp projects, messages, todos, comments, people, and kanban boards.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -49,7 +49,7 @@
49
49
  "homepage": "https://github.com/stefanoverna/basecamp-mcp#readme",
50
50
  "dependencies": {
51
51
  "@modelcontextprotocol/sdk": "^1.6.1",
52
- "basecamp-client": "^1.0.8",
52
+ "basecamp-client": "^1.0.9",
53
53
  "zod": "^3.23.8"
54
54
  },
55
55
  "devDependencies": {