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.
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -7
- package/dist/index.js.map +1 -1
- package/dist/tools/activity.d.ts +6 -4
- package/dist/tools/activity.d.ts.map +1 -1
- package/dist/tools/activity.js +13 -285
- package/dist/tools/activity.js.map +1 -1
- package/dist/tools/auth.d.ts.map +1 -1
- package/dist/tools/auth.js +5 -11
- package/dist/tools/auth.js.map +1 -1
- package/dist/tools/campfires.d.ts +13 -0
- package/dist/tools/campfires.d.ts.map +1 -0
- package/dist/tools/campfires.js +221 -0
- package/dist/tools/campfires.js.map +1 -0
- package/dist/tools/checkins.d.ts.map +1 -1
- package/dist/tools/checkins.js +10 -74
- package/dist/tools/checkins.js.map +1 -1
- package/dist/tools/comments.d.ts.map +1 -1
- package/dist/tools/comments.js +9 -44
- package/dist/tools/comments.js.map +1 -1
- package/dist/tools/files.d.ts +21 -0
- package/dist/tools/files.d.ts.map +1 -0
- package/dist/tools/files.js +659 -0
- package/dist/tools/files.js.map +1 -0
- package/dist/tools/kanban.d.ts.map +1 -1
- package/dist/tools/kanban.js +78 -137
- package/dist/tools/kanban.js.map +1 -1
- package/dist/tools/messages.d.ts.map +1 -1
- package/dist/tools/messages.js +31 -71
- package/dist/tools/messages.js.map +1 -1
- package/dist/tools/people.d.ts.map +1 -1
- package/dist/tools/people.js +5 -19
- package/dist/tools/people.js.map +1 -1
- package/dist/tools/projects.d.ts.map +1 -1
- package/dist/tools/projects.js +4 -16
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/todos.d.ts.map +1 -1
- package/dist/tools/todos.js +60 -84
- package/dist/tools/todos.js.map +1 -1
- package/dist/utils/auth.d.ts +7 -2
- package/dist/utils/auth.d.ts.map +1 -1
- package/dist/utils/auth.js +19 -11
- package/dist/utils/auth.js.map +1 -1
- package/dist/utils/contentOperations.d.ts +2 -2
- package/dist/utils/credentials.d.ts.map +1 -1
- package/dist/utils/credentials.js.map +1 -1
- package/dist/utils/errorHandlers.d.ts.map +1 -1
- package/dist/utils/errorHandlers.js +53 -29
- package/dist/utils/errorHandlers.js.map +1 -1
- package/dist/utils/oauth.d.ts +1 -0
- package/dist/utils/oauth.d.ts.map +1 -1
- package/dist/utils/oauth.js +18 -0
- package/dist/utils/oauth.js.map +1 -1
- package/dist/utils/pagination.d.ts +43 -0
- package/dist/utils/pagination.d.ts.map +1 -0
- package/dist/utils/pagination.js +72 -0
- package/dist/utils/pagination.js.map +1 -0
- package/dist/utils/parseSince.d.ts +11 -0
- package/dist/utils/parseSince.d.ts.map +1 -0
- package/dist/utils/parseSince.js +48 -0
- package/dist/utils/parseSince.js.map +1 -0
- package/dist/utils/serializers.d.ts +17 -2
- package/dist/utils/serializers.d.ts.map +1 -1
- package/dist/utils/serializers.js +16 -0
- package/dist/utils/serializers.js.map +1 -1
- package/package.json +5 -3
- package/dist/tools/documents.d.ts +0 -11
- package/dist/tools/documents.d.ts.map +0 -1
- package/dist/tools/documents.js +0 -453
- package/dist/tools/documents.js.map +0 -1
- package/dist/tools/uploads.d.ts +0 -9
- package/dist/tools/uploads.d.ts.map +0 -1
- package/dist/tools/uploads.js +0 -319
- 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;
|
|
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"}
|
package/dist/tools/checkins.js
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
290
|
-
|
|
291
|
-
|
|
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: ${
|
|
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":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,
|
|
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;
|
|
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"}
|
package/dist/tools/comments.js
CHANGED
|
@@ -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
|
|
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
|
|
80
|
-
|
|
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: ${
|
|
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
|
|
132
|
-
|
|
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
|
|
154
|
-
|
|
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: ${
|
|
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":"AAAA;;;GAGG;AAGH,OAAO,EAAE,
|
|
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"}
|