basecamp-mcp 1.2.1 → 1.2.2
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
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
# Basecamp MCP Server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/basecamp-mcp)
|
|
4
|
+
[](https://www.npmjs.com/package/basecamp-mcp)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
Model Context Protocol (MCP) server for Basecamp integration. Enables LLMs to interact with every corner of Basecamp: projects, messages, todos, comments, people, kanban boards, docs & files, check-ins, and campfire chat.
|
|
8
|
+
|
|
9
|
+
**48 tools**, published on npm, installable with a single `npx` command — no cloning, no virtualenv, no manual OAuth scripts to run.
|
|
10
|
+
|
|
11
|
+
## Why this server
|
|
12
|
+
|
|
13
|
+
- **Zero-install setup.** `npx basecamp-mcp@latest` runs the server directly from npm. Authentication happens through one MCP tool call (`basecamp_login`) that opens a browser — no separate script to clone and run by hand.
|
|
14
|
+
- **Full Docs & Files support.** Read and write vaults (folders), documents, and uploads, and download inline `<bc-attachment>` blobs embedded in rich text — images are returned inline, text files are returned as text, everything else is saved to disk.
|
|
15
|
+
- **Check-ins (Q&A) support.** List automatic check-in questions and their answers, or post new answers programmatically.
|
|
16
|
+
- **Granular content editing.** Messages, comments, documents, and kanban cards all support append/prepend/search-replace operations, not just full-text replacement — so an LLM can make a small edit without resending the whole document.
|
|
17
|
+
- **Cross-project activity feed.** `basecamp_list_recordings` searches across every project by type, person, date range, and free text in one call, with automatic response-size management and pagination.
|
|
18
|
+
- **Type-safe end to end.** Written in TypeScript with Zod schemas validating every tool input.
|
|
19
|
+
- **Tested against the real API.** The test suite exercises every tool category (messages, todos, kanban, comments, docs/files, check-ins, campfires, activity) against a live Basecamp account, not just mocks.
|
|
4
20
|
|
|
5
21
|
## Getting Started
|
|
6
22
|
|
|
@@ -85,6 +101,7 @@ The server requires these environment variables:
|
|
|
85
101
|
- `basecamp_get_todoset` - Get todo set container with all todo lists
|
|
86
102
|
- `basecamp_list_todos` - List todos in a list with status filtering (active/archived)
|
|
87
103
|
- `basecamp_create_todo` - Create new todo with optional description
|
|
104
|
+
- `basecamp_update_todo` - Update a todo's title, description, due date, or assignees
|
|
88
105
|
- `basecamp_complete_todo` - Mark todo as complete
|
|
89
106
|
- `basecamp_uncomplete_todo` - Mark todo as incomplete
|
|
90
107
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Used by messages, comments, and other content-based tools
|
|
4
4
|
*/
|
|
5
5
|
import { z } from "zod";
|
|
6
|
-
export declare const htmlRules = "\n\nHTML rules for content:\n\n* Allowed tags: p, span, h2, h3, h4, br, strong, em, strike, code, a (with href attribute), pre, ol, ul, li, blockquote, mark, figure, figcaption, table, tbody, tr, th, td, div, bc-attachment.\n* Use <p> for paragraphs. Use <p><br></p> for empty line spacing between paragraphs.\n* Headings: use <h2>, <h3>, <h4> as appropriate.\n* Inline code: <code>text</code>. Preformatted blocks: <pre>text</pre>.\n* Ordered lists: <ol><li>...</li></ol>. Unordered: <ul><li>...</li></ul>.\n* Tables: <table><tbody><tr><th>Heading</th>...</tr><tr><td>Cell</td>...</tr></tbody></table>\n* To mention people: <bc-attachment sgid=\"{ person.attachable_sgid }\" content-type=\"application/vnd.basecamp.mention\"></bc-attachment>\n* Single image: <bc-attachment sgid=\"{ attachment.attachable_sgid }\"></bc-attachment>\n* Image gallery: wrap multiple <bc-attachment sgid=\"...\" presentation=\"gallery\"> in a <div>.\n* Basecamp auto-enriches bc-attachment tags after saving (adds url, href, filename, content-type, etc.) \u2014 you never need to write those.\n*
|
|
6
|
+
export declare const htmlRules = "\n\nHTML rules for content:\n\n* Allowed tags: p, span, h2, h3, h4, br, strong, em, strike, code, a (with href attribute), pre, ol, ul, li, blockquote, mark, figure, figcaption, table, tbody, tr, th, td, div, bc-attachment.\n* Use <p> for paragraphs. Use <p><br></p> for empty line spacing between paragraphs.\n* Headings: use <h2>, <h3>, <h4> as appropriate.\n* Inline code: <code>text</code>. Preformatted blocks: <pre>text</pre>.\n* Ordered lists: <ol><li>...</li></ol>. Unordered: <ul><li>...</li></ul>.\n* Tables: <table><tbody><tr><th>Heading</th>...</tr><tr><td>Cell</td>...</tr></tbody></table>\n* To mention people: <bc-attachment sgid=\"{ person.attachable_sgid }\" content-type=\"application/vnd.basecamp.mention\"></bc-attachment>\n* Single image: <bc-attachment sgid=\"{ attachment.attachable_sgid }\"></bc-attachment>\n* Image gallery: wrap multiple <bc-attachment sgid=\"...\" presentation=\"gallery\"> in a <div>.\n* Basecamp auto-enriches bc-attachment tags after saving (adds url, href, filename, content-type, etc.) \u2014 you never need to write those.\n* When you see an existing, already-enriched <bc-attachment> tag (e.g. from a previous list/get call), leave its inner HTML alone. Before any content_append/content_prepend/search_replace runs, it is automatically collapsed back to its minimal form (sgid, presentation, caption, and content-type for mentions) \u2014 you don't need to strip it yourself, and doing so manually is unnecessary and risks mismatched find strings.\n* Background highlights: <mark style=\"background-color: var(--highlight-bg-N);\">...</mark>\n* Text color highlights: <span style=\"color: var(--highlight-N);\">...</span>\n* For both, N is 1 (yellow), 2 (amber), 3 (red), 4 (pink), 5 (purple), 6 (blue), 7 (teal), 8 (near-white), or 9 (light gray).\n";
|
|
7
7
|
/**
|
|
8
8
|
* Shared Zod schema for content operation fields
|
|
9
9
|
* These fields can be composed into tool-specific schemas
|
|
@@ -35,6 +35,21 @@ export interface ContentOperationParams {
|
|
|
35
35
|
replace: string;
|
|
36
36
|
}>;
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Strip Basecamp's server-side enrichment out of any <bc-attachment> tag in
|
|
40
|
+
* `html`, collapsing it back down to its minimal, canonical form (sgid /
|
|
41
|
+
* presentation / caption / content-type only, no inner HTML).
|
|
42
|
+
*
|
|
43
|
+
* Content fetched back from Basecamp (via a GET) has already been enriched:
|
|
44
|
+
* each <bc-attachment> tag gets a full <figure><img/><figcaption>...
|
|
45
|
+
* injected inside it. Running search_replace / append / prepend against that
|
|
46
|
+
* enriched HTML is fragile — the enriched markup is large, can shift between
|
|
47
|
+
* requests, and edits near it have been observed to duplicate or detach the
|
|
48
|
+
* injected <figure> block. Normalizing back to the minimal tag before every
|
|
49
|
+
* partial edit removes that enriched HTML as a moving target entirely;
|
|
50
|
+
* Basecamp re-enriches the minimal tag fresh on save either way.
|
|
51
|
+
*/
|
|
52
|
+
export declare function normalizeBcAttachments(html: string): string;
|
|
38
53
|
/**
|
|
39
54
|
* Apply content operations to existing content
|
|
40
55
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contentOperations.d.ts","sourceRoot":"","sources":["../../src/utils/contentOperations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"contentOperations.d.ts","sourceRoot":"","sources":["../../src/utils/contentOperations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,SAAS,+wDAkBrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;CAgClC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AA2BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiB3D;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,sBAAsB,GACjC,MAAM,GAAG,SAAS,CAmDpB;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,sBAAsB,EAClC,gBAAgB,GAAE,MAAM,EAAO,GAC9B,IAAI,CAmBN"}
|
|
@@ -17,7 +17,7 @@ HTML rules for content:
|
|
|
17
17
|
* Single image: <bc-attachment sgid="{ attachment.attachable_sgid }"></bc-attachment>
|
|
18
18
|
* Image gallery: wrap multiple <bc-attachment sgid="..." presentation="gallery"> in a <div>.
|
|
19
19
|
* Basecamp auto-enriches bc-attachment tags after saving (adds url, href, filename, content-type, etc.) — you never need to write those.
|
|
20
|
-
*
|
|
20
|
+
* When you see an existing, already-enriched <bc-attachment> tag (e.g. from a previous list/get call), leave its inner HTML alone. Before any content_append/content_prepend/search_replace runs, it is automatically collapsed back to its minimal form (sgid, presentation, caption, and content-type for mentions) — you don't need to strip it yourself, and doing so manually is unnecessary and risks mismatched find strings.
|
|
21
21
|
* Background highlights: <mark style="background-color: var(--highlight-bg-N);">...</mark>
|
|
22
22
|
* Text color highlights: <span style="color: var(--highlight-N);">...</span>
|
|
23
23
|
* For both, N is 1 (yellow), 2 (amber), 3 (red), 4 (pink), 5 (purple), 6 (blue), 7 (teal), 8 (near-white), or 9 (light gray).
|
|
@@ -49,6 +49,51 @@ export const ContentOperationFields = {
|
|
|
49
49
|
.optional()
|
|
50
50
|
.describe("Array of search-replace operations to apply to current content. Cannot be used with content."),
|
|
51
51
|
};
|
|
52
|
+
/**
|
|
53
|
+
* Attributes we keep when normalizing a <bc-attachment> tag fetched back from
|
|
54
|
+
* Basecamp. Everything else — including the enriched inner HTML Basecamp
|
|
55
|
+
* injects after saving (e.g. a <figure><img/><figcaption>...) — is dropped.
|
|
56
|
+
*/
|
|
57
|
+
const ALLOWED_BC_ATTACHMENT_ATTRS = new Set([
|
|
58
|
+
"sgid",
|
|
59
|
+
"presentation",
|
|
60
|
+
"caption",
|
|
61
|
+
"content-type",
|
|
62
|
+
]);
|
|
63
|
+
function normalizeBcAttachmentAttrs(attrString) {
|
|
64
|
+
const attrRegex = /([a-zA-Z0-9_-]+)\s*=\s*"([^"]*)"/g;
|
|
65
|
+
const kept = [];
|
|
66
|
+
let match;
|
|
67
|
+
while ((match = attrRegex.exec(attrString)) !== null) {
|
|
68
|
+
const [, name, value] = match;
|
|
69
|
+
if (ALLOWED_BC_ATTACHMENT_ATTRS.has(name)) {
|
|
70
|
+
kept.push(`${name}="${value}"`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return kept.length > 0 ? ` ${kept.join(" ")}` : "";
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Strip Basecamp's server-side enrichment out of any <bc-attachment> tag in
|
|
77
|
+
* `html`, collapsing it back down to its minimal, canonical form (sgid /
|
|
78
|
+
* presentation / caption / content-type only, no inner HTML).
|
|
79
|
+
*
|
|
80
|
+
* Content fetched back from Basecamp (via a GET) has already been enriched:
|
|
81
|
+
* each <bc-attachment> tag gets a full <figure><img/><figcaption>...
|
|
82
|
+
* injected inside it. Running search_replace / append / prepend against that
|
|
83
|
+
* enriched HTML is fragile — the enriched markup is large, can shift between
|
|
84
|
+
* requests, and edits near it have been observed to duplicate or detach the
|
|
85
|
+
* injected <figure> block. Normalizing back to the minimal tag before every
|
|
86
|
+
* partial edit removes that enriched HTML as a moving target entirely;
|
|
87
|
+
* Basecamp re-enriches the minimal tag fresh on save either way.
|
|
88
|
+
*/
|
|
89
|
+
export function normalizeBcAttachments(html) {
|
|
90
|
+
// Self-closing form first: <bc-attachment .../>
|
|
91
|
+
let result = html.replace(/<bc-attachment\b([^>]*)\/>/g, (_match, attrs) => `<bc-attachment${normalizeBcAttachmentAttrs(attrs)}></bc-attachment>`);
|
|
92
|
+
// Open/close form: <bc-attachment ...>...enriched HTML...</bc-attachment>
|
|
93
|
+
// (Run after the self-closing pass so no stray `/` throws off `[^>]*`.)
|
|
94
|
+
result = result.replace(/<bc-attachment\b([^>]*)>([\s\S]*?)<\/bc-attachment>/g, (_match, attrs) => `<bc-attachment${normalizeBcAttachmentAttrs(attrs)}></bc-attachment>`);
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
52
97
|
/**
|
|
53
98
|
* Apply content operations to existing content
|
|
54
99
|
*
|
|
@@ -73,8 +118,9 @@ export function applyContentOperations(currentContent, operations) {
|
|
|
73
118
|
if (!hasPartialOps) {
|
|
74
119
|
return undefined;
|
|
75
120
|
}
|
|
76
|
-
// Apply partial operations
|
|
77
|
-
|
|
121
|
+
// Apply partial operations. Normalize any <bc-attachment> tags back to
|
|
122
|
+
// their minimal form first — see normalizeBcAttachments() for why.
|
|
123
|
+
let finalContent = normalizeBcAttachments(currentContent);
|
|
78
124
|
// Apply search-replace operations first
|
|
79
125
|
if (operations.search_replace) {
|
|
80
126
|
for (const operation of operations.search_replace) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contentOperations.js","sourceRoot":"","sources":["../../src/utils/contentOperations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;CAkBxB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,oHAAoH,CACrH;IACH,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,4EAA4E,CAC7E;IACH,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,mFAAmF,CACpF;IACH,cAAc,EAAE,CAAC;SACd,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC/C,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,CAAC,0CAA0C,CAAC;KACxD,CAAC,CACH;SACA,QAAQ,EAAE;SACV,QAAQ,CACP,8FAA8F,CAC/F;CACJ,CAAC;AAYF;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,cAAsB,EACtB,UAAkC;IAElC,MAAM,aAAa,GACjB,UAAU,CAAC,cAAc;QACzB,UAAU,CAAC,eAAe;QAC1B,UAAU,CAAC,cAAc,CAAC;IAE5B,8BAA8B;IAC9B,IAAI,UAAU,CAAC,OAAO,IAAI,aAAa,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,8JAA8J,CAC/J,CAAC;IACJ,CAAC;IAED,kDAAkD;IAClD,IAAI,UAAU,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,UAAU,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED,yDAAyD;IACzD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"contentOperations.js","sourceRoot":"","sources":["../../src/utils/contentOperations.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.2.
|
|
3
|
+
"version": "1.2.2",
|
|
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",
|