{"slug":"basecamp-automation","title":"basecamp-automation","summary":"Automate Basecamp project management, to-dos, messages, people, and to-do list organization via Rube MCP (Composio). Always search tools first for current schemas.","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-09-14T20:43:25.820534Z","repo":{"url":"https://github.com/davepoon/buildwithclaude","stars":3494,"forks":514,"license":"MIT","updatedAt":"2026-09-17T11:58:48Z"},"bodyHtml":"<hr>\n<h2>name: basecamp-automation\ndescription: Automate Basecamp project management, to-dos, messages, people, and to-do list organization via Rube MCP (Composio). Always search tools first for current schemas.\nrequires:\nmcp: [rube]\ncategory: project-management</h2>\n<h1>Basecamp Automation via Rube MCP</h1>\n<p>Automate Basecamp operations including project management, to-do list creation, task management, message board posting, people management, and to-do group organization through Composio's Basecamp toolkit.</p>\n<p><strong>Toolkit docs</strong>: <a href=\"https://composio.dev/toolkits/basecamp\">composio.dev/toolkits/basecamp</a></p>\n<h2>Prerequisites</h2>\n<ul>\n<li>Rube MCP must be connected (RUBE_SEARCH_TOOLS available)</li>\n<li>Active Basecamp connection via <code>RUBE_MANAGE_CONNECTIONS</code> with toolkit <code>basecamp</code></li>\n<li>Always call <code>RUBE_SEARCH_TOOLS</code> first to get current tool schemas</li>\n</ul>\n<h2>Setup</h2>\n<p><strong>Get Rube MCP</strong>: Add <code>https://rube.app/mcp</code> as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.</p>\n<ol>\n<li>Verify Rube MCP is available by confirming <code>RUBE_SEARCH_TOOLS</code> responds</li>\n<li>Call <code>RUBE_MANAGE_CONNECTIONS</code> with toolkit <code>basecamp</code></li>\n<li>If connection is not ACTIVE, follow the returned auth link to complete Basecamp OAuth</li>\n<li>Confirm connection status shows ACTIVE before running any workflows</li>\n</ol>\n<h2>Core Workflows</h2>\n<h3>1. Manage To-Do Lists and Tasks</h3>\n<p><strong>When to use</strong>: User wants to create to-do lists, add tasks, or organize work within a Basecamp project</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>BASECAMP_GET_PROJECTS</code> - List projects to find the target bucket_id [Prerequisite]</li>\n<li><code>BASECAMP_GET_BUCKETS_TODOSETS</code> - Get the to-do set within a project [Prerequisite]</li>\n<li><code>BASECAMP_GET_BUCKETS_TODOSETS_TODOLISTS</code> - List existing to-do lists to avoid duplicates [Optional]</li>\n<li><code>BASECAMP_POST_BUCKETS_TODOSETS_TODOLISTS</code> - Create a new to-do list in a to-do set [Required for list creation]</li>\n<li><code>BASECAMP_GET_BUCKETS_TODOLISTS</code> - Get details of a specific to-do list [Optional]</li>\n<li><code>BASECAMP_POST_BUCKETS_TODOLISTS_TODOS</code> - Create a to-do item in a to-do list [Required for task creation]</li>\n<li><code>BASECAMP_CREATE_TODO</code> - Alternative tool for creating individual to-dos [Alternative]</li>\n<li><code>BASECAMP_GET_BUCKETS_TODOLISTS_TODOS</code> - List to-dos within a to-do list [Optional]</li>\n</ol>\n<p><strong>Key parameters for creating to-do lists</strong>:</p>\n<ul>\n<li><code>bucket_id</code>: Integer project/bucket ID (from GET_PROJECTS)</li>\n<li><code>todoset_id</code>: Integer to-do set ID (from GET_BUCKETS_TODOSETS)</li>\n<li><code>name</code>: Title of the to-do list (required)</li>\n<li><code>description</code>: HTML-formatted description (supports Rich text)</li>\n</ul>\n<p><strong>Key parameters for creating to-dos</strong>:</p>\n<ul>\n<li><code>bucket_id</code>: Integer project/bucket ID</li>\n<li><code>todolist_id</code>: Integer to-do list ID</li>\n<li><code>content</code>: What the to-do is for (required)</li>\n<li><code>description</code>: HTML details about the to-do</li>\n<li><code>assignee_ids</code>: Array of integer person IDs</li>\n<li><code>due_on</code>: Due date in <code>YYYY-MM-DD</code> format</li>\n<li><code>starts_on</code>: Start date in <code>YYYY-MM-DD</code> format</li>\n<li><code>notify</code>: Boolean to notify assignees (defaults to false)</li>\n<li><code>completion_subscriber_ids</code>: Person IDs notified upon completion</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>A project (bucket) can contain multiple to-do sets; selecting the wrong <code>todoset_id</code> creates lists in the wrong section</li>\n<li>Always check existing to-do lists before creating to avoid near-duplicate names</li>\n<li>Success payloads include user-facing URLs (<code>app_url</code>, <code>app_todos_url</code>); prefer returning these over raw IDs</li>\n<li>All IDs (<code>bucket_id</code>, <code>todoset_id</code>, <code>todolist_id</code>) are integers, not strings</li>\n<li>Descriptions support HTML formatting only, not Markdown</li>\n</ul>\n<h3>2. Post and Manage Messages</h3>\n<p><strong>When to use</strong>: User wants to post messages to a project message board or update existing messages</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>BASECAMP_GET_PROJECTS</code> - Find the target project and bucket_id [Prerequisite]</li>\n<li><code>BASECAMP_GET_MESSAGE_BOARD</code> - Get the message board ID for the project [Prerequisite]</li>\n<li><code>BASECAMP_CREATE_MESSAGE</code> - Create a new message on the board [Required]</li>\n<li><code>BASECAMP_POST_BUCKETS_MESSAGE_BOARDS_MESSAGES</code> - Alternative message creation tool [Fallback]</li>\n<li><code>BASECAMP_GET_MESSAGE</code> - Read a specific message by ID [Optional]</li>\n<li><code>BASECAMP_PUT_BUCKETS_MESSAGES</code> - Update an existing message [Optional]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>bucket_id</code>: Integer project/bucket ID</li>\n<li><code>message_board_id</code>: Integer message board ID (from GET_MESSAGE_BOARD)</li>\n<li><code>subject</code>: Message title (required)</li>\n<li><code>content</code>: HTML body of the message</li>\n<li><code>status</code>: Set to <code>\"active\"</code> to publish immediately</li>\n<li><code>category_id</code>: Message type classification (optional)</li>\n<li><code>subscriptions</code>: Array of person IDs to notify; omit to notify all project members</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li><code>status=\"draft\"</code> can produce HTTP 400; use <code>status=\"active\"</code> as the reliable option</li>\n<li><code>bucket_id</code> and <code>message_board_id</code> must belong to the same project; mismatches fail or misroute</li>\n<li>Message content supports HTML tags only; not Markdown</li>\n<li>Updates via <code>PUT_BUCKETS_MESSAGES</code> replace the entire body -- include the full corrected content, not just a diff</li>\n<li>Prefer <code>app_url</code> from the response for user-facing confirmation links</li>\n<li>Both <code>CREATE_MESSAGE</code> and <code>POST_BUCKETS_MESSAGE_BOARDS_MESSAGES</code> do the same thing; use CREATE_MESSAGE first and fall back to POST if it fails</li>\n</ul>\n<h3>3. Manage People and Access</h3>\n<p><strong>When to use</strong>: User wants to list people, manage project access, or add new users</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>BASECAMP_GET_PEOPLE</code> - List all people visible to the current user [Required]</li>\n<li><code>BASECAMP_GET_PROJECTS</code> - Find the target project [Prerequisite]</li>\n<li><code>BASECAMP_LIST_PROJECT_PEOPLE</code> - List people on a specific project [Required]</li>\n<li><code>BASECAMP_GET_PROJECTS_PEOPLE</code> - Alternative to list project members [Alternative]</li>\n<li><code>BASECAMP_PUT_PROJECTS_PEOPLE_USERS</code> - Grant or revoke project access [Required for access changes]</li>\n</ol>\n<p><strong>Key parameters for PUT_PROJECTS_PEOPLE_USERS</strong>:</p>\n<ul>\n<li><code>project_id</code>: Integer project ID</li>\n<li><code>grant</code>: Array of integer person IDs to add to the project</li>\n<li><code>revoke</code>: Array of integer person IDs to remove from the project</li>\n<li><code>create</code>: Array of objects with <code>name</code>, <code>email_address</code>, and optional <code>company_name</code>, <code>title</code> for new users</li>\n<li>At least one of <code>grant</code>, <code>revoke</code>, or <code>create</code> must be provided</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Person IDs are integers; always resolve names to IDs via GET_PEOPLE first</li>\n<li><code>project_id</code> for people management is the same as <code>bucket_id</code> for other operations</li>\n<li><code>LIST_PROJECT_PEOPLE</code> and <code>GET_PROJECTS_PEOPLE</code> are near-identical; use either</li>\n<li>Creating users via <code>create</code> also grants them project access in one step</li>\n</ul>\n<h3>4. Organize To-Dos with Groups</h3>\n<p><strong>When to use</strong>: User wants to organize to-dos within a list into color-coded groups</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>BASECAMP_GET_PROJECTS</code> - Find the target project [Prerequisite]</li>\n<li><code>BASECAMP_GET_BUCKETS_TODOLISTS</code> - Get the to-do list details [Prerequisite]</li>\n<li><code>BASECAMP_GET_TODOLIST_GROUPS</code> - List existing groups in a to-do list [Optional]</li>\n<li><code>BASECAMP_GET_BUCKETS_TODOLISTS_GROUPS</code> - Alternative group listing [Alternative]</li>\n<li><code>BASECAMP_POST_BUCKETS_TODOLISTS_GROUPS</code> - Create a new group in a to-do list [Required]</li>\n<li><code>BASECAMP_CREATE_TODOLIST_GROUP</code> - Alternative group creation tool [Alternative]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>bucket_id</code>: Integer project/bucket ID</li>\n<li><code>todolist_id</code>: Integer to-do list ID</li>\n<li><code>name</code>: Group title (required)</li>\n<li><code>color</code>: Visual color identifier -- one of: <code>white</code>, <code>red</code>, <code>orange</code>, <code>yellow</code>, <code>green</code>, <code>blue</code>, <code>aqua</code>, <code>purple</code>, <code>gray</code>, <code>pink</code>, <code>brown</code></li>\n<li><code>status</code>: Filter for listing -- <code>\"archived\"</code> or <code>\"trashed\"</code> (omit for active groups)</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li><code>POST_BUCKETS_TODOLISTS_GROUPS</code> and <code>CREATE_TODOLIST_GROUP</code> are near-identical; use either</li>\n<li>Color values must be from the fixed palette; arbitrary hex/rgb values are not supported</li>\n<li>Groups are sub-sections within a to-do list, not standalone entities</li>\n</ul>\n<h3>5. Browse and Inspect Projects</h3>\n<p><strong>When to use</strong>: User wants to list projects, get project details, or explore project structure</p>\n<p><strong>Tool sequence</strong>:</p>\n<ol>\n<li><code>BASECAMP_GET_PROJECTS</code> - List all active projects [Required]</li>\n<li><code>BASECAMP_GET_PROJECT</code> - Get comprehensive details for a specific project [Optional]</li>\n<li><code>BASECAMP_GET_PROJECTS_BY_PROJECT_ID</code> - Alternative project detail retrieval [Alternative]</li>\n</ol>\n<p><strong>Key parameters</strong>:</p>\n<ul>\n<li><code>status</code>: Filter by <code>\"archived\"</code> or <code>\"trashed\"</code>; omit for active projects</li>\n<li><code>project_id</code>: Integer project ID for detailed retrieval</li>\n</ul>\n<p><strong>Pitfalls</strong>:</p>\n<ul>\n<li>Projects are sorted by most recently created first</li>\n<li>The response includes a <code>dock</code> array with tools (todoset, message_board, etc.) and their IDs</li>\n<li>Use the dock tool IDs to find <code>todoset_id</code>, <code>message_board_id</code>, etc. for downstream operations</li>\n</ul>\n<h2>Common Patterns</h2>\n<h3>ID Resolution</h3>\n<p>Basecamp uses a hierarchical ID structure. Always resolve top-down:</p>\n<ul>\n<li><strong>Project (bucket_id)</strong>: <code>BASECAMP_GET_PROJECTS</code> -- find by name, capture the <code>id</code></li>\n<li><strong>To-do set (todoset_id)</strong>: Found in project dock or via <code>BASECAMP_GET_BUCKETS_TODOSETS</code></li>\n<li><strong>Message board (message_board_id)</strong>: Found in project dock or via <code>BASECAMP_GET_MESSAGE_BOARD</code></li>\n<li><strong>To-do list (todolist_id)</strong>: <code>BASECAMP_GET_BUCKETS_TODOSETS_TODOLISTS</code></li>\n<li><strong>People (person_id)</strong>: <code>BASECAMP_GET_PEOPLE</code> or <code>BASECAMP_LIST_PROJECT_PEOPLE</code></li>\n<li>Note: <code>bucket_id</code> and <code>project_id</code> refer to the same entity in different contexts</li>\n</ul>\n<h3>Pagination</h3>\n<p>Basecamp uses page-based pagination on list endpoints:</p>\n<ul>\n<li>Response headers or body may indicate more pages available</li>\n<li><code>GET_PROJECTS</code>, <code>GET_BUCKETS_TODOSETS_TODOLISTS</code>, and list endpoints return paginated results</li>\n<li>Continue fetching until no more results are returned</li>\n</ul>\n<h3>Content Formatting</h3>\n<ul>\n<li>All rich text fields use HTML, not Markdown</li>\n<li>Wrap content in <code>&lt;div&gt;</code> tags; use <code>&lt;strong&gt;</code>, <code>&lt;em&gt;</code>, <code>&lt;ul&gt;</code>, <code>&lt;ol&gt;</code>, <code>&lt;li&gt;</code>, <code>&lt;a&gt;</code> etc.</li>\n<li>Example: <code>&lt;div&gt;&lt;strong&gt;Important:&lt;/strong&gt; Complete by Friday&lt;/div&gt;</code></li>\n</ul>\n<h2>Known Pitfalls</h2>\n<h3>ID Formats</h3>\n<ul>\n<li>All Basecamp IDs are integers, not strings or UUIDs</li>\n<li><code>bucket_id</code> = <code>project_id</code> (same entity, different parameter names across tools)</li>\n<li>To-do set IDs, to-do list IDs, and message board IDs are found in the project's <code>dock</code> array</li>\n<li>Person IDs are integers; resolve names via <code>GET_PEOPLE</code> before operations</li>\n</ul>\n<h3>Status Field</h3>\n<ul>\n<li><code>status=\"draft\"</code> for messages can cause HTTP 400; always use <code>status=\"active\"</code></li>\n<li>Project/to-do list status filters: <code>\"archived\"</code>, <code>\"trashed\"</code>, or omit for active</li>\n</ul>\n<h3>Content Format</h3>\n<ul>\n<li>HTML only, never Markdown</li>\n<li>Updates replace the entire body, not a partial diff</li>\n<li>Invalid HTML tags may be silently stripped</li>\n</ul>\n<h3>Rate Limits</h3>\n<ul>\n<li>Basecamp API has rate limits; space out rapid sequential requests</li>\n<li>Large projects with many to-dos should be paginated carefully</li>\n</ul>\n<h3>URL Handling</h3>\n<ul>\n<li>Prefer <code>app_url</code> from API responses for user-facing links</li>\n<li>Do not reconstruct Basecamp URLs manually from IDs</li>\n</ul>\n<h2>Quick Reference</h2>\n<table>\n<thead>\n<tr>\n<th>Task</th>\n<th>Tool Slug</th>\n<th>Key Params</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>List projects</td>\n<td><code>BASECAMP_GET_PROJECTS</code></td>\n<td><code>status</code></td>\n</tr>\n<tr>\n<td>Get project</td>\n<td><code>BASECAMP_GET_PROJECT</code></td>\n<td><code>project_id</code></td>\n</tr>\n<tr>\n<td>Get project detail</td>\n<td><code>BASECAMP_GET_PROJECTS_BY_PROJECT_ID</code></td>\n<td><code>project_id</code></td>\n</tr>\n<tr>\n<td>Get to-do set</td>\n<td><code>BASECAMP_GET_BUCKETS_TODOSETS</code></td>\n<td><code>bucket_id</code>, <code>todoset_id</code></td>\n</tr>\n<tr>\n<td>List to-do lists</td>\n<td><code>BASECAMP_GET_BUCKETS_TODOSETS_TODOLISTS</code></td>\n<td><code>bucket_id</code>, <code>todoset_id</code></td>\n</tr>\n<tr>\n<td>Get to-do list</td>\n<td><code>BASECAMP_GET_BUCKETS_TODOLISTS</code></td>\n<td><code>bucket_id</code>, <code>todolist_id</code></td>\n</tr>\n<tr>\n<td>Create to-do list</td>\n<td><code>BASECAMP_POST_BUCKETS_TODOSETS_TODOLISTS</code></td>\n<td><code>bucket_id</code>, <code>todoset_id</code>, <code>name</code></td>\n</tr>\n<tr>\n<td>Create to-do</td>\n<td><code>BASECAMP_POST_BUCKETS_TODOLISTS_TODOS</code></td>\n<td><code>bucket_id</code>, <code>todolist_id</code>, <code>content</code></td>\n</tr>\n<tr>\n<td>Create to-do (alt)</td>\n<td><code>BASECAMP_CREATE_TODO</code></td>\n<td><code>bucket_id</code>, <code>todolist_id</code>, <code>content</code></td>\n</tr>\n<tr>\n<td>List to-dos</td>\n<td><code>BASECAMP_GET_BUCKETS_TODOLISTS_TODOS</code></td>\n<td><code>bucket_id</code>, <code>todolist_id</code></td>\n</tr>\n<tr>\n<td>List to-do groups</td>\n<td><code>BASECAMP_GET_TODOLIST_GROUPS</code></td>\n<td><code>bucket_id</code>, <code>todolist_id</code></td>\n</tr>\n<tr>\n<td>Create to-do group</td>\n<td><code>BASECAMP_POST_BUCKETS_TODOLISTS_GROUPS</code></td>\n<td><code>bucket_id</code>, <code>todolist_id</code>, <code>name</code>, <code>color</code></td>\n</tr>\n<tr>\n<td>Create to-do group (alt)</td>\n<td><code>BASECAMP_CREATE_TODOLIST_GROUP</code></td>\n<td><code>bucket_id</code>, <code>todolist_id</code>, <code>name</code></td>\n</tr>\n<tr>\n<td>Get message board</td>\n<td><code>BASECAMP_GET_MESSAGE_BOARD</code></td>\n<td><code>bucket_id</code>, <code>message_board_id</code></td>\n</tr>\n<tr>\n<td>Create message</td>\n<td><code>BASECAMP_CREATE_MESSAGE</code></td>\n<td><code>bucket_id</code>, <code>message_board_id</code>, <code>subject</code>, <code>status</code></td>\n</tr>\n<tr>\n<td>Create message (alt)</td>\n<td><code>BASECAMP_POST_BUCKETS_MESSAGE_BOARDS_MESSAGES</code></td>\n<td><code>bucket_id</code>, <code>message_board_id</code>, <code>subject</code></td>\n</tr>\n<tr>\n<td>Get message</td>\n<td><code>BASECAMP_GET_MESSAGE</code></td>\n<td><code>bucket_id</code>, <code>message_id</code></td>\n</tr>\n<tr>\n<td>Update message</td>\n<td><code>BASECAMP_PUT_BUCKETS_MESSAGES</code></td>\n<td><code>bucket_id</code>, <code>message_id</code></td>\n</tr>\n<tr>\n<td>List all people</td>\n<td><code>BASECAMP_GET_PEOPLE</code></td>\n<td>(none)</td>\n</tr>\n<tr>\n<td>List project people</td>\n<td><code>BASECAMP_LIST_PROJECT_PEOPLE</code></td>\n<td><code>project_id</code></td>\n</tr>\n<tr>\n<td>Manage access</td>\n<td><code>BASECAMP_PUT_PROJECTS_PEOPLE_USERS</code></td>\n<td><code>project_id</code>, <code>grant</code>, <code>revoke</code>, <code>create</code></td>\n</tr>\n</tbody>\n</table>\n<hr>\n<p><em>Powered by <a href=\"https://composio.dev\">Composio</a></em></p>\n","files":[{"path":"SKILL.md","sizeBytes":12487,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-09-14T20:44:29.247391Z","sha256":"FB4E3622EA0C29CC9FF6B5B652BEB8EF888CC6A1A6D31C52E5127D6E4FBA387B","sizeBytes":4067},"review":null,"source":{"repositoryUrl":"https://github.com/davepoon/buildwithclaude","path":"plugins/all-skills/skills/basecamp-automation","license":"MIT","commit":"2e757dae349898c0b761bd8926acdacb35f21954","subtreeSha":"B9AAB776D7FDAB02890417E6E00E0F9E0CC081B1F06EC0DB3E20856E65DFF4BB","lastSyncedAt":"2026-09-19T13:50:10.625828Z"},"reviewedAt":"2026-09-14T20:46:35.161456Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/davepoon/buildwithclaude/tree/main/plugins/all-skills/skills/basecamp-automation"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install davepoon-buildwithclaude@llmmart"},{"target":"git","command":"git clone https://github.com/davepoon/buildwithclaude.git"}]}