basecamp-mcp 1.1.2 → 1.2.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 (75) hide show
  1. package/dist/index.d.ts +7 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +16 -7
  4. package/dist/index.js.map +1 -1
  5. package/dist/tools/activity.d.ts +6 -4
  6. package/dist/tools/activity.d.ts.map +1 -1
  7. package/dist/tools/activity.js +13 -285
  8. package/dist/tools/activity.js.map +1 -1
  9. package/dist/tools/auth.d.ts.map +1 -1
  10. package/dist/tools/auth.js +5 -11
  11. package/dist/tools/auth.js.map +1 -1
  12. package/dist/tools/campfires.d.ts +13 -0
  13. package/dist/tools/campfires.d.ts.map +1 -0
  14. package/dist/tools/campfires.js +221 -0
  15. package/dist/tools/campfires.js.map +1 -0
  16. package/dist/tools/checkins.d.ts.map +1 -1
  17. package/dist/tools/checkins.js +10 -74
  18. package/dist/tools/checkins.js.map +1 -1
  19. package/dist/tools/comments.d.ts.map +1 -1
  20. package/dist/tools/comments.js +9 -44
  21. package/dist/tools/comments.js.map +1 -1
  22. package/dist/tools/files.d.ts +21 -0
  23. package/dist/tools/files.d.ts.map +1 -0
  24. package/dist/tools/files.js +659 -0
  25. package/dist/tools/files.js.map +1 -0
  26. package/dist/tools/kanban.d.ts.map +1 -1
  27. package/dist/tools/kanban.js +78 -137
  28. package/dist/tools/kanban.js.map +1 -1
  29. package/dist/tools/messages.d.ts.map +1 -1
  30. package/dist/tools/messages.js +31 -71
  31. package/dist/tools/messages.js.map +1 -1
  32. package/dist/tools/people.d.ts.map +1 -1
  33. package/dist/tools/people.js +5 -19
  34. package/dist/tools/people.js.map +1 -1
  35. package/dist/tools/projects.d.ts.map +1 -1
  36. package/dist/tools/projects.js +4 -16
  37. package/dist/tools/projects.js.map +1 -1
  38. package/dist/tools/todos.d.ts.map +1 -1
  39. package/dist/tools/todos.js +60 -84
  40. package/dist/tools/todos.js.map +1 -1
  41. package/dist/utils/auth.d.ts +7 -2
  42. package/dist/utils/auth.d.ts.map +1 -1
  43. package/dist/utils/auth.js +19 -11
  44. package/dist/utils/auth.js.map +1 -1
  45. package/dist/utils/contentOperations.d.ts +2 -2
  46. package/dist/utils/credentials.d.ts.map +1 -1
  47. package/dist/utils/credentials.js.map +1 -1
  48. package/dist/utils/errorHandlers.d.ts.map +1 -1
  49. package/dist/utils/errorHandlers.js +53 -29
  50. package/dist/utils/errorHandlers.js.map +1 -1
  51. package/dist/utils/oauth.d.ts +1 -0
  52. package/dist/utils/oauth.d.ts.map +1 -1
  53. package/dist/utils/oauth.js +18 -0
  54. package/dist/utils/oauth.js.map +1 -1
  55. package/dist/utils/pagination.d.ts +43 -0
  56. package/dist/utils/pagination.d.ts.map +1 -0
  57. package/dist/utils/pagination.js +72 -0
  58. package/dist/utils/pagination.js.map +1 -0
  59. package/dist/utils/parseSince.d.ts +11 -0
  60. package/dist/utils/parseSince.d.ts.map +1 -0
  61. package/dist/utils/parseSince.js +48 -0
  62. package/dist/utils/parseSince.js.map +1 -0
  63. package/dist/utils/serializers.d.ts +17 -2
  64. package/dist/utils/serializers.d.ts.map +1 -1
  65. package/dist/utils/serializers.js +16 -0
  66. package/dist/utils/serializers.js.map +1 -1
  67. package/package.json +5 -3
  68. package/dist/tools/documents.d.ts +0 -11
  69. package/dist/tools/documents.d.ts.map +0 -1
  70. package/dist/tools/documents.js +0 -453
  71. package/dist/tools/documents.js.map +0 -1
  72. package/dist/tools/uploads.d.ts +0 -9
  73. package/dist/tools/uploads.d.ts.map +0 -1
  74. package/dist/tools/uploads.js +0 -319
  75. package/dist/tools/uploads.js.map +0 -1
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Campfire (chat) browsing tool for Basecamp MCP server.
3
+ *
4
+ * Campfires are real-time chat rooms within projects. Chat lines are NOT
5
+ * recordings, so this lives separately from the activity/recordings feed; it
6
+ * only shares the cross-cutting pagination/since helpers.
7
+ */
8
+ import { z } from "zod";
9
+ import { CHARACTER_LIMIT, DEFAULT_LIMIT } from "../constants.js";
10
+ import { BasecampIdSchema } from "../schemas/common.js";
11
+ import { initializeBasecampClient } from "../utils/auth.js";
12
+ import { handleBasecampError } from "../utils/errorHandlers.js";
13
+ import { paginate } from "../utils/pagination.js";
14
+ import { parseSince } from "../utils/parseSince.js";
15
+ import { serializeCreator } from "../utils/serializers.js";
16
+ /**
17
+ * Register campfire (chat) browsing tools with the MCP server
18
+ */
19
+ export function registerCampfireTools(server) {
20
+ server.registerTool("basecamp_list_campfire_messages", {
21
+ title: "List Campfire Messages",
22
+ description: `Browse chat messages from Basecamp Campfires. Campfires are real-time chat rooms within projects.
23
+
24
+ Use this tool to:
25
+ - See recent chat activity across all campfires or specific ones
26
+ - Find messages from specific people
27
+ - Search message content for keywords
28
+ - Review chat history since a specific date or time period
29
+
30
+ All filters support multiple values for OR-matching.
31
+
32
+ Examples:
33
+ - "What's been discussed in chat today?" → since: "today"
34
+ - "Show messages from Alice and Bob" → person_ids: [111, 222]
35
+ - "Find chat messages mentioning deploy or release" → query: ["deploy", "release"]
36
+ - "Recent messages in campfire 12345" → campfire_ids: [12345]`,
37
+ inputSchema: {
38
+ campfire_ids: z
39
+ .array(BasecampIdSchema)
40
+ .optional()
41
+ .describe("Filter to specific campfires by ID. Supports multiple IDs for OR-matching. Omit to browse all campfires."),
42
+ person_ids: z
43
+ .array(BasecampIdSchema)
44
+ .optional()
45
+ .describe("Filter by sender person IDs. Supports multiple IDs for OR-matching. Use basecamp_list_people to find person IDs."),
46
+ query: z
47
+ .array(z.string())
48
+ .optional()
49
+ .describe("Case-insensitive text search against message content. Supports multiple terms for OR-matching."),
50
+ since: z
51
+ .string()
52
+ .optional()
53
+ .describe('Show messages since this time. Accepts ISO 8601 dates (e.g., "2024-01-15"), ' +
54
+ 'relative durations ("24h", "7d", "2w"), or keywords ("today", "yesterday").'),
55
+ limit: z
56
+ .number()
57
+ .min(1)
58
+ .max(100)
59
+ .optional()
60
+ .describe(`Maximum number of messages to return (default: ${DEFAULT_LIMIT}, max: 100).`),
61
+ },
62
+ annotations: {
63
+ readOnlyHint: true,
64
+ destructiveHint: false,
65
+ idempotentHint: true,
66
+ openWorldHint: true,
67
+ },
68
+ }, async (params) => {
69
+ try {
70
+ const client = await initializeBasecampClient();
71
+ // Parse since date upfront if provided
72
+ const sinceDate = params.since ? parseSince(params.since) : null;
73
+ // Determine which campfires to fetch from
74
+ let campfiresToFetch = [];
75
+ if (params.campfire_ids && params.campfire_ids.length > 0) {
76
+ // Fetch all campfires to resolve the requested campfire IDs
77
+ const allCampfires = await client.campfires.list();
78
+ const campfireIdSet = new Set(params.campfire_ids);
79
+ campfiresToFetch = allCampfires
80
+ .filter((c) => campfireIdSet.has(c.id))
81
+ .map((c) => ({
82
+ campfireId: c.id,
83
+ campfireName: c.title,
84
+ projectName: c.bucket.name,
85
+ }));
86
+ if (campfiresToFetch.length === 0) {
87
+ return {
88
+ content: [
89
+ {
90
+ type: "text",
91
+ text: JSON.stringify({
92
+ error: "No campfires found matching the provided IDs.",
93
+ provided_ids: params.campfire_ids,
94
+ }, null, 2),
95
+ },
96
+ ],
97
+ };
98
+ }
99
+ }
100
+ else {
101
+ // Fetch all campfires, filtering by updated_at if since is provided
102
+ const allCampfires = await client.campfires.list();
103
+ for (const campfire of allCampfires) {
104
+ // Skip campfires that haven't been updated since the filter date
105
+ if (sinceDate) {
106
+ const campfireUpdatedAt = new Date(campfire.updated_at);
107
+ if (campfireUpdatedAt < sinceDate) {
108
+ continue;
109
+ }
110
+ }
111
+ campfiresToFetch.push({
112
+ campfireId: campfire.id,
113
+ campfireName: campfire.title,
114
+ projectName: campfire.bucket.name,
115
+ });
116
+ }
117
+ if (campfiresToFetch.length === 0) {
118
+ return {
119
+ content: [
120
+ {
121
+ type: "text",
122
+ text: JSON.stringify({ messages: [], total_fetched: 0, returned: 0 }, null, 2),
123
+ },
124
+ ],
125
+ };
126
+ }
127
+ }
128
+ // Fetch lines from each campfire in parallel
129
+ const fetchPromises = campfiresToFetch.map(async ({ campfireId, campfireName, projectName }) => {
130
+ const lines = [];
131
+ for await (const line of paginate(client, "/chats/{campfireId}/lines.json", { path: { campfireId } })) {
132
+ // API returns newest first - early termination if since is set
133
+ if (sinceDate) {
134
+ const lineDate = new Date(line.created_at);
135
+ if (lineDate < sinceDate) {
136
+ break;
137
+ }
138
+ }
139
+ lines.push({
140
+ ...line,
141
+ campfire_name: campfireName,
142
+ project_name: projectName,
143
+ });
144
+ }
145
+ return lines;
146
+ });
147
+ const results = await Promise.all(fetchPromises);
148
+ let allLines = results.flat();
149
+ // Filter by person IDs (OR-match)
150
+ if (params.person_ids && params.person_ids.length > 0) {
151
+ const personIdSet = new Set(params.person_ids);
152
+ allLines = allLines.filter((line) => line.creator && personIdSet.has(line.creator.id));
153
+ }
154
+ // Filter by text search (case-insensitive substring match on content, OR-matching)
155
+ if (params.query && params.query.length > 0) {
156
+ const lowerQueries = params.query.map((q) => q.toLowerCase());
157
+ allLines = allLines.filter((line) => {
158
+ const lowerContent = (line.content || "").toLowerCase();
159
+ return lowerQueries.some((q) => lowerContent.includes(q));
160
+ });
161
+ }
162
+ // Sort all messages by created_at desc (newest first)
163
+ allLines.sort((a, b) => {
164
+ const dateA = new Date(a.created_at).getTime();
165
+ const dateB = new Date(b.created_at).getTime();
166
+ return dateB - dateA;
167
+ });
168
+ // Apply limit
169
+ const limit = params.limit || DEFAULT_LIMIT;
170
+ const total = allLines.length;
171
+ allLines = allLines.slice(0, limit);
172
+ // Serialize response
173
+ const serialized = allLines.map((line) => ({
174
+ id: line.id,
175
+ content: line.content,
176
+ created_at: line.created_at,
177
+ url: line.app_url,
178
+ creator: serializeCreator(line.creator),
179
+ campfire: {
180
+ id: line.parent?.id,
181
+ name: line.campfire_name,
182
+ },
183
+ project: {
184
+ id: line.bucket.id,
185
+ name: line.project_name,
186
+ },
187
+ }));
188
+ const result = {
189
+ messages: serialized,
190
+ total_fetched: total,
191
+ returned: serialized.length,
192
+ };
193
+ if (total > limit) {
194
+ result.truncated = true;
195
+ result.truncation_message = `Showing ${limit} of ${total} messages. Increase limit or narrow filters to see more.`;
196
+ }
197
+ let jsonStr = JSON.stringify(result, null, 2);
198
+ // Handle response size limit
199
+ if (jsonStr.length > CHARACTER_LIMIT) {
200
+ const reducedLimit = Math.floor(serialized.length / 2);
201
+ const reduced = serialized.slice(0, reducedLimit);
202
+ jsonStr = JSON.stringify({
203
+ messages: reduced,
204
+ total_fetched: total,
205
+ returned: reduced.length,
206
+ truncated: true,
207
+ truncation_message: `Response truncated to ${reduced.length} messages due to size limits. Use more specific filters or a smaller limit.`,
208
+ }, null, 2);
209
+ }
210
+ return {
211
+ content: [{ type: "text", text: jsonStr }],
212
+ };
213
+ }
214
+ catch (error) {
215
+ return {
216
+ content: [{ type: "text", text: handleBasecampError(error) }],
217
+ };
218
+ }
219
+ });
220
+ }
221
+ //# sourceMappingURL=campfires.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campfires.js","sourceRoot":"","sources":["../../src/tools/campfires.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkins.d.ts","sourceRoot":"","sources":["../../src/tools/checkins.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiX5D"}
1
+ {"version":3,"file":"checkins.d.ts","sourceRoot":"","sources":["../../src/tools/checkins.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6S5D"}
@@ -4,7 +4,6 @@
4
4
  * Manages automatic check-in questions and their answers.
5
5
  * Hierarchy: Project → Questionnaire → Questions → Answers
6
6
  */
7
- import { asyncPagedToArray } from "basecamp-client";
8
7
  import { z } from "zod";
9
8
  import { BasecampIdSchema } from "../schemas/common.js";
10
9
  import { initializeBasecampClient } from "../utils/auth.js";
@@ -16,7 +15,6 @@ export function registerCheckinTools(server) {
16
15
  title: "Get Basecamp Questionnaire",
17
16
  description: "Get the questionnaire (check-ins container) for a project. Returns the number of questions and their URL.",
18
17
  inputSchema: {
19
- bucket_id: BasecampIdSchema.describe("Project/bucket ID"),
20
18
  questionnaire_id: BasecampIdSchema.describe("Questionnaire ID"),
21
19
  },
22
20
  annotations: {
@@ -28,16 +26,7 @@ export function registerCheckinTools(server) {
28
26
  }, async (params) => {
29
27
  try {
30
28
  const client = await initializeBasecampClient();
31
- const response = await client.questionnaires.get({
32
- params: {
33
- bucketId: params.bucket_id,
34
- questionnaireId: params.questionnaire_id,
35
- },
36
- });
37
- if (response.status !== 200 || !response.body) {
38
- throw new Error(`Failed to fetch questionnaire: ${response.status}`);
39
- }
40
- const q = response.body;
29
+ const q = await client.checkins.getQuestionnaire(params.questionnaire_id);
41
30
  return {
42
31
  content: [
43
32
  {
@@ -65,7 +54,6 @@ export function registerCheckinTools(server) {
65
54
  title: "List Basecamp Check-in Questions",
66
55
  description: "List all automatic check-in questions in a questionnaire. Returns each question's title, schedule, paused status, and answer count.",
67
56
  inputSchema: {
68
- bucket_id: BasecampIdSchema.describe("Project/bucket ID"),
69
57
  questionnaire_id: BasecampIdSchema.describe("Questionnaire ID"),
70
58
  },
71
59
  annotations: {
@@ -77,16 +65,7 @@ export function registerCheckinTools(server) {
77
65
  }, async (params) => {
78
66
  try {
79
67
  const client = await initializeBasecampClient();
80
- const questions = await asyncPagedToArray({
81
- fetchPage: client.questions.list,
82
- request: {
83
- params: {
84
- bucketId: params.bucket_id,
85
- questionnaireId: params.questionnaire_id,
86
- },
87
- query: {},
88
- },
89
- });
68
+ const questions = await client.checkins.listQuestions(params.questionnaire_id);
90
69
  return {
91
70
  content: [
92
71
  {
@@ -115,7 +94,6 @@ export function registerCheckinTools(server) {
115
94
  title: "Get Basecamp Check-in Question",
116
95
  description: "Get a single automatic check-in question with its schedule and metadata.",
117
96
  inputSchema: {
118
- bucket_id: BasecampIdSchema.describe("Project/bucket ID"),
119
97
  question_id: BasecampIdSchema.describe("Question ID"),
120
98
  },
121
99
  annotations: {
@@ -127,16 +105,7 @@ export function registerCheckinTools(server) {
127
105
  }, async (params) => {
128
106
  try {
129
107
  const client = await initializeBasecampClient();
130
- const response = await client.questions.get({
131
- params: {
132
- bucketId: params.bucket_id,
133
- questionId: params.question_id,
134
- },
135
- });
136
- if (response.status !== 200 || !response.body) {
137
- throw new Error(`Failed to fetch question: ${response.status}`);
138
- }
139
- const q = response.body;
108
+ const q = await client.checkins.getQuestion(params.question_id);
140
109
  return {
141
110
  content: [
142
111
  {
@@ -167,7 +136,6 @@ export function registerCheckinTools(server) {
167
136
  title: "List Basecamp Check-in Answers",
168
137
  description: "List answers to a specific check-in question. Returns each answer's content, author, and check-in date.",
169
138
  inputSchema: {
170
- bucket_id: BasecampIdSchema.describe("Project/bucket ID"),
171
139
  question_id: BasecampIdSchema.describe("Question ID"),
172
140
  },
173
141
  annotations: {
@@ -179,16 +147,7 @@ export function registerCheckinTools(server) {
179
147
  }, async (params) => {
180
148
  try {
181
149
  const client = await initializeBasecampClient();
182
- const answers = await asyncPagedToArray({
183
- fetchPage: client.questionAnswers.list,
184
- request: {
185
- params: {
186
- bucketId: params.bucket_id,
187
- questionId: params.question_id,
188
- },
189
- query: {},
190
- },
191
- });
150
+ const answers = await client.checkins.listAnswers(params.question_id);
192
151
  return {
193
152
  content: [
194
153
  {
@@ -216,7 +175,6 @@ export function registerCheckinTools(server) {
216
175
  title: "Get Basecamp Check-in Answer",
217
176
  description: "Get a single check-in answer by its ID.",
218
177
  inputSchema: {
219
- bucket_id: BasecampIdSchema.describe("Project/bucket ID"),
220
178
  answer_id: BasecampIdSchema.describe("Answer ID"),
221
179
  },
222
180
  annotations: {
@@ -228,16 +186,7 @@ export function registerCheckinTools(server) {
228
186
  }, async (params) => {
229
187
  try {
230
188
  const client = await initializeBasecampClient();
231
- const response = await client.questionAnswers.get({
232
- params: {
233
- bucketId: params.bucket_id,
234
- answerId: params.answer_id,
235
- },
236
- });
237
- if (response.status !== 200 || !response.body) {
238
- throw new Error(`Failed to fetch answer: ${response.status}`);
239
- }
240
- const a = response.body;
189
+ const a = await client.checkins.getAnswer(params.answer_id);
241
190
  return {
242
191
  content: [
243
192
  {
@@ -267,12 +216,8 @@ export function registerCheckinTools(server) {
267
216
  title: "Create Basecamp Check-in Answer",
268
217
  description: "Create a new answer for a check-in question. Content must be HTML.",
269
218
  inputSchema: {
270
- bucket_id: BasecampIdSchema.describe("Project/bucket ID"),
271
219
  question_id: BasecampIdSchema.describe("Question ID to answer"),
272
- content: z
273
- .string()
274
- .min(1)
275
- .describe("HTML content of the answer"),
220
+ content: z.string().min(1).describe("HTML content of the answer"),
276
221
  group_on: z
277
222
  .string()
278
223
  .describe("Date the answer belongs to (YYYY-MM-DD format, used to group answers by check-in day)"),
@@ -286,24 +231,15 @@ export function registerCheckinTools(server) {
286
231
  }, async (params) => {
287
232
  try {
288
233
  const client = await initializeBasecampClient();
289
- const response = await client.questionAnswers.create({
290
- params: {
291
- bucketId: params.bucket_id,
292
- questionId: params.question_id,
293
- },
294
- body: {
295
- content: params.content,
296
- group_on: params.group_on,
297
- },
234
+ const answer = await client.checkins.createAnswer(params.question_id, {
235
+ content: params.content,
236
+ groupOn: params.group_on,
298
237
  });
299
- if (response.status !== 201 || !response.body) {
300
- throw new Error("Failed to create answer");
301
- }
302
238
  return {
303
239
  content: [
304
240
  {
305
241
  type: "text",
306
- text: `Answer created successfully!\n\nID: ${response.body.id}\nURL: ${response.body.app_url}`,
242
+ text: `Answer created successfully!\n\nID: ${answer.id}\nURL: ${answer.app_url}`,
307
243
  },
308
244
  ],
309
245
  };
@@ -1 +1 @@
1
- {"version":3,"file":"checkins.js","sourceRoot":"","sources":["../../src/tools/checkins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkins.js","sourceRoot":"","sources":["../../src/tools/checkins.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../src/tools/comments.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0M5D"}
1
+ {"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../src/tools/comments.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkK5D"}
@@ -2,7 +2,6 @@
2
2
  * Comment tools for Basecamp MCP server
3
3
  * Comments work on ANY recording (messages, todos, cards, etc.)
4
4
  */
5
- import { asyncPagedToArray } from "basecamp-client";
6
5
  import { z } from "zod";
7
6
  import { BasecampIdSchema } from "../schemas/common.js";
8
7
  import { initializeBasecampClient } from "../utils/auth.js";
@@ -14,7 +13,6 @@ export function registerCommentTools(server) {
14
13
  title: "List Basecamp Comments",
15
14
  description: "List comments on any Basecamp resource (message, todo, card, etc.). Works universally on all recording types.",
16
15
  inputSchema: {
17
- bucket_id: BasecampIdSchema,
18
16
  recording_id: BasecampIdSchema.describe("ID of the resource (message, todo, card, etc.)"),
19
17
  },
20
18
  annotations: {
@@ -26,16 +24,7 @@ export function registerCommentTools(server) {
26
24
  }, async (params) => {
27
25
  try {
28
26
  const client = await initializeBasecampClient();
29
- const comments = await asyncPagedToArray({
30
- fetchPage: client.comments.list,
31
- request: {
32
- params: {
33
- bucketId: params.bucket_id,
34
- recordingId: params.recording_id,
35
- },
36
- query: {},
37
- },
38
- });
27
+ const comments = await client.comments.list(params.recording_id);
39
28
  return {
40
29
  content: [
41
30
  {
@@ -60,7 +49,6 @@ export function registerCommentTools(server) {
60
49
  title: "Create Basecamp Comment",
61
50
  description: "Add a comment to any Basecamp resource (message, todo, card, etc.).",
62
51
  inputSchema: {
63
- bucket_id: BasecampIdSchema,
64
52
  recording_id: BasecampIdSchema,
65
53
  content: z
66
54
  .string()
@@ -76,21 +64,14 @@ export function registerCommentTools(server) {
76
64
  }, async (params) => {
77
65
  try {
78
66
  const client = await initializeBasecampClient();
79
- const response = await client.comments.create({
80
- params: {
81
- bucketId: params.bucket_id,
82
- recordingId: params.recording_id,
83
- },
84
- body: { content: params.content },
67
+ const comment = await client.comments.create(params.recording_id, {
68
+ content: params.content,
85
69
  });
86
- if (response.status !== 201 || !response.body) {
87
- throw new Error("Failed to create comment");
88
- }
89
70
  return {
90
71
  content: [
91
72
  {
92
73
  type: "text",
93
- text: `Comment posted!\n\nID: ${response.body.id}`,
74
+ text: `Comment posted!\n\nID: ${comment.id}`,
94
75
  },
95
76
  ],
96
77
  };
@@ -105,7 +86,6 @@ export function registerCommentTools(server) {
105
86
  title: "Update Basecamp Comment",
106
87
  description: `Update a comment. Use partial content operations when possible to save on token usage. ${htmlRules}`,
107
88
  inputSchema: {
108
- bucket_id: BasecampIdSchema,
109
89
  comment_id: BasecampIdSchema,
110
90
  ...ContentOperationFields,
111
91
  },
@@ -128,16 +108,8 @@ export function registerCommentTools(server) {
128
108
  if (hasPartialOps || params.content !== undefined) {
129
109
  // Fetch current comment if needed for partial operations
130
110
  if (hasPartialOps) {
131
- const currentResponse = await client.comments.get({
132
- params: {
133
- bucketId: params.bucket_id,
134
- commentId: params.comment_id,
135
- },
136
- });
137
- if (currentResponse.status !== 200 || !currentResponse.body) {
138
- throw new Error(`Failed to fetch current comment: ${currentResponse.status}`);
139
- }
140
- const currentContent = currentResponse.body.content || "";
111
+ const current = await client.comments.get(params.comment_id);
112
+ const currentContent = current.content || "";
141
113
  finalContent = applyContentOperations(currentContent, params);
142
114
  }
143
115
  else {
@@ -150,21 +122,14 @@ export function registerCommentTools(server) {
150
122
  throw new Error("No content operations resulted in changes");
151
123
  }
152
124
  // Update the comment
153
- const response = await client.comments.update({
154
- params: {
155
- bucketId: params.bucket_id,
156
- commentId: params.comment_id,
157
- },
158
- body: { content: finalContent },
125
+ const comment = await client.comments.update(params.comment_id, {
126
+ content: finalContent,
159
127
  });
160
- if (response.status !== 200 || !response.body) {
161
- throw new Error("Failed to update comment");
162
- }
163
128
  return {
164
129
  content: [
165
130
  {
166
131
  type: "text",
167
- text: `Comment updated successfully!\n\nID: ${response.body.id}`,
132
+ text: `Comment updated successfully!\n\nID: ${comment.id}`,
168
133
  },
169
134
  ],
170
135
  };
@@ -1 +1 @@
1
- {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/tools/comments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/tools/comments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Docs & Files tools for Basecamp MCP server.
3
+ *
4
+ * This is one Basecamp dock — a vault tree containing both documents and
5
+ * uploads — so the whole hierarchy lives in one module:
6
+ * - Vaults are folders in the "Docs & Files" section (the container).
7
+ * - Documents are rich-text documents stored inside vaults.
8
+ * - Uploads are files stored inside vaults.
9
+ * - Blobs are inline attachments embedded in rich text via <bc-attachment>.
10
+ */
11
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
12
+ /**
13
+ * Consume a download stream into a single byte array. The SDK's downloadURL
14
+ * returns a ReadableStream that the caller must fully consume or cancel.
15
+ */
16
+ export declare function streamToBytes(stream: ReadableStream<Uint8Array>): Promise<Uint8Array>;
17
+ export declare function isImageContentType(contentType: string): boolean;
18
+ export declare function isTextContentType(contentType: string): boolean;
19
+ export declare function inferContentType(filename: string): string;
20
+ export declare function registerFilesTools(server: McpServer): void;
21
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuBzE;;;GAGG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GACjC,OAAO,CAAC,UAAU,CAAC,CAGrB;AAmBD,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgBzD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6sB1D"}