Connect Basecamp to Claude: Sync Documentation & Project Schedules via MCP
Learn how to connect Basecamp to Claude using a managed MCP server. Automate task delegation, sync project schedules, and manage team communication.
A 2025 Forrester report indicates that 73% of enterprise automation initiatives fail to scale because AI agents lack secure, authenticated access to core project management systems. You want to connect Basecamp to Claude so your AI agents can query project statuses, assign tasks, and manage cross-functional workflows entirely through natural language. If your team uses ChatGPT, check out our guide on connecting Basecamp to ChatGPT or read our broader architectural overview on connecting Basecamp to AI Agents.
To connect Basecamp to Claude, you need a Model Context Protocol (MCP) server. This server acts as a translation layer, converting an LLM's standardized tool calls into Basecamp's specific REST API requests, while handling OAuth token management and schema validation.
You have two options: spend weeks building, hosting, and maintaining a custom MCP server, or use a managed infrastructure layer that handles the boilerplate dynamically. This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Basecamp, connect it natively to Claude, and execute complex project management workflows using natural language.
The Engineering Reality of the Basecamp API
A custom MCP server is a self-hosted integration layer. While the Model Context Protocol provides a predictable way for models to discover tools, implementing it against vendor APIs requires heavy engineering lifting, similar to the challenges of connecting Asana to Claude. Basecamp's REST API has specific architectural quirks that make building a reliable agent integration difficult.
1. The Bucket and Tool Hierarchy
Basecamp does not use a flat data model. Almost every resource exists inside a bucket (a Project or a Team). Inside that bucket, features are isolated into specific tools (like a todoset, a vault for documents, or a chat for Campfires). You cannot simply "create a to-do" globally. An AI agent must first query the project to find the specific todoset ID, and then query that todoset to find the specific todolist ID, before it can finally issue a POST request to create the task. If your MCP server does not expose this hierarchy clearly, Claude will hallucinate endpoints that do not exist.
2. Polymorphic Parent Relationships
Comments in Basecamp are highly polymorphic. You can comment on a message, a to-do, a document, or a schedule entry. The API requires the agent to know the exact recording_id (the parent object) and the bucket_id. Your tool schemas must clearly define these required parameters so the LLM understands how to thread its responses correctly.
3. Rich Text Content Constraints Basecamp relies heavily on its own rich text format for documents, messages, and comments. When Claude attempts to write a document or post a message, it naturally outputs Markdown. If your integration layer does not handle the translation between Markdown and Basecamp's expected HTML structures, formatting will break, and API calls will fail validation.
How to Generate a Basecamp MCP Server
Instead of building and hosting a custom Node.js or Python server to handle these quirks, you can use Truto to generate a managed MCP server dynamically. Truto normalizes the Basecamp API, handles the OAuth token refresh cycle, and exposes the endpoints as ready-to-use LLM tools.
You can generate the MCP server URL using either the Truto UI or the API.
Method 1: Via the Truto UI
For quick testing or manual setup, the UI is the fastest path:
- Navigate to the Integrated Accounts page in your Truto dashboard and select your connected Basecamp account.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration (e.g., restrict to read-only methods or filter by specific tags).
- Copy the generated MCP server URL. It will look like
https://api.truto.one/mcp/a1b2c3d4e5f6....
Method 2: Via the API
For programmatic provisioning - such as generating temporary MCP servers for automated workflows - use the REST API. Truto generates a secure, hashed token and returns the connection URL.
curl -X POST https://api.truto.one/integrated-account/<INTEGRATED_ACCOUNT_ID>/mcp \
-H "Authorization: Bearer <YOUR_TRUTO_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"name": "Basecamp Claude Server",
"config": {
"methods": ["read", "write"]
},
"expires_at": "2026-12-31T23:59:59Z"
}'The response contains the URL Claude needs to connect:
{
"id": "mcp_abc123",
"name": "Basecamp Claude Server",
"url": "https://api.truto.one/mcp/a1b2c3d4e5f6...",
"expires_at": "2026-12-31T23:59:59Z"
}Connecting the MCP Server to Claude
Once you have the Truto MCP URL, connecting it to Claude takes seconds. You can do this via the Claude application UI or by modifying the desktop configuration file.
Method A: Via the Claude UI (Team/Enterprise)
If you are using Claude on a Team or Enterprise plan, you can add the server directly through the web interface:
- Open Claude and navigate to Settings.
- Click on Integrations (or Connectors depending on your plan tier).
- Click Add MCP Server.
- Paste the Truto MCP URL you generated earlier and click Add.
Claude will immediately ping the server, complete the JSON-RPC 2.0 handshake, and load the available Basecamp tools into its context window.
Method B: Via Manual Configuration (Claude Desktop)
If you are using the Claude Desktop app for local development, you need to update your claude_desktop_config.json file. Truto's MCP servers operate over Server-Sent Events (SSE), so you will use the official @modelcontextprotocol/server-sse package to proxy the connection.
{
"mcpServers": {
"basecamp": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"https://api.truto.one/mcp/a1b2c3d4e5f6..."
]
}
}
}Restart Claude Desktop. You will see a plug icon indicating that the Basecamp tools are now active and ready to be called.
Basecamp MCP Tool Inventory
Truto automatically generates tools directly from Basecamp's API documentation and schema definitions. Here are the most critical tools for agentic workflows.
list_all_basecamp_projects
- Description: Retrieves all active projects visible to the current user. This is the mandatory first step for an AI agent, as it needs the
bucket_idto interact with any tasks, messages, or documents. - Contextual Notes: The returned payload includes the
dockarray, which contains the IDs for the project's specific tools (todoset, vault, campfire). - Example Prompt: "List all of my active Basecamp projects and tell me which ones have client access enabled."
list_all_basecamp_todos
- Description: Fetches active to-dos for a specific
bucket_idandtodolist_id. - Contextual Notes: Agents must supply both the project ID and the list ID. The response includes completion status, assignees, and due dates.
- Example Prompt: "Pull all open to-dos from the 'Q3 Marketing Launch' project under the 'Copywriting' list."
create_a_basecamp_todo
- Description: Creates a new to-do inside a specific list.
- Contextual Notes: Requires
content(the task title). You can optionally passdescription,due_on,starts_on, andassignee_ids. - Example Prompt: "Create a new to-do in the Engineering project's Backlog list called 'Fix OAuth token refresh bug' and assign it to me."
list_all_basecamp_campfires
- Description: Retrieves a list of all active Campfires (chat rooms) visible to the user.
- Contextual Notes: Useful for finding the
chat_idbefore attempting to read or post messages. - Example Prompt: "Find the Campfire chat for the Design Team project."
create_a_basecamp_message
- Description: Posts a new message to a Message Board.
- Contextual Notes: Requires
bucket_id,message_board_id,subject, andstatus. This is ideal for having an agent post daily standup summaries or automated reports. - Example Prompt: "Post a new message to the Leadership board summarizing the three biggest blockers from our active projects."
create_a_basecamp_document
- Description: Creates a new document in a specific Vault.
- Contextual Notes: Requires
bucket_id,vault_id,title, andcontent. - Example Prompt: "Draft a new technical spec document in the Architecture vault outlining our new database schema."
Complete Basecamp Tool Inventory
Here is the complete inventory of additional Basecamp tools available. For full schema details, visit the Basecamp integration page.
- list_all_basecamp_people: Get all people visible to the current user, including roles and contact info.
- get_single_basecamp_person_by_id: Get a specific person's profile by their ID.
- get_single_basecamp_project_by_id: Retrieve detailed metadata for a single project.
- create_a_basecamp_project: Provision a brand new project workspace.
- update_a_basecamp_project_by_id: Modify a project's name, description, or schedule.
- delete_a_basecamp_project_by_id: Move a project to the trash.
- get_single_basecamp_todo_by_id: Fetch deep details on a specific task.
- update_a_basecamp_todo_by_id: Change a task's assignee, due date, or content.
- delete_a_basecamp_todo_by_id: Trash a specific to-do.
- list_all_basecamp_todo_lists: Find all to-do lists within a project's todoset.
- get_single_basecamp_todo_list_by_id: Get details for a specific to-do list.
- create_a_basecamp_todo_list: Create a new category list for tasks.
- update_a_basecamp_todo_list_by_id: Rename or update a to-do list.
- list_all_basecamp_comments: Retrieve a thread of comments on any recording (message, task, etc.).
- get_single_basecamp_comment_by_id: Fetch a specific comment.
- create_a_basecamp_comment: Reply to a thread or task.
- update_a_basecamp_comment_by_id: Edit an existing comment.
- list_all_basecamp_deleted_people: Audit users who have been removed from the account.
- list_all_basecamp_card_tables: Retrieve Kanban-style card tables.
- list_all_basecamp_card_table_columns: Get columns for a specific card table.
- create_a_basecamp_card_table_column: Add a new column to a board.
- update_a_basecamp_card_table_column_by_id: Rename a board column.
- list_all_basecamp_card_table_cards: Get all cards within a column.
- get_single_basecamp_card_table_card_by_id: Fetch details for a specific card.
- create_a_basecamp_card_table_card: Add a new card to a board.
- update_a_basecamp_card_table_card_by_id: Modify a card's details or move it.
- list_all_basecamp_attachments: Retrieve metadata for all uploaded files.
- get_single_basecamp_campfire_by_id: Get metadata for a specific chat room.
- list_all_basecamp_campfire_lines: Read the message history of a Campfire chat.
- get_single_basecamp_campfire_line_by_id: Fetch a specific chat message.
- create_a_basecamp_campfire_line: Send a message to a Campfire chat.
- delete_a_basecamp_campfire_line_by_id: Delete a chat message.
- create_a_basecamp_card_table_step: Add a checklist step to a card.
- update_a_basecamp_card_table_step_by_id: Modify a card step.
- list_all_basecamp_chatbots: View configured chatbots in a project.
- get_single_basecamp_chatbot_by_id: Fetch chatbot configuration details.
- create_a_basecamp_chatbot: Register a new chatbot webhook.
- update_a_basecamp_chatbot_by_id: Modify a chatbot's settings.
- delete_a_basecamp_chatbot_by_id: Remove a chatbot.
- list_all_basecamp_client_approvals: Check the status of client sign-offs.
- get_single_basecamp_client_approval_by_id: View a specific client approval request.
- list_all_basecamp_client_correspondences: View emails sent to/from clients.
- get_single_basecamp_client_correspondence_by_id: Read a specific client email thread.
- list_all_basecamp_client_replies: View replies from clients on shared items.
- get_single_basecamp_client_reply_by_id: Read a specific client reply.
- update_a_basecamp_client_visibility_by_id: Toggle whether a client can see an internal item.
- list_all_basecamp_documents: List all text documents in a vault.
- get_single_basecamp_document_by_id: Read the contents of a specific document.
- update_a_basecamp_document_by_id: Edit an existing document.
- list_all_basecamp_events: View the audit log of actions in a project.
- list_all_basecamp_forwards: View emails forwarded into Basecamp.
- get_single_basecamp_forward_by_id: Read a specific forwarded email.
- list_all_basecamp_inbox_replies: View replies to forwarded emails.
- get_single_basecamp_inbox_reply_by_id: Read a specific inbox reply.
- list_all_basecamp_inbox: View the configuration of a project's inbox.
- create_a_basecamp_lineup_maker: Set a milestone marker on the timeline.
- update_a_basecamp_lineup_maker_by_id: Move a timeline marker.
- delete_a_basecamp_lineup_maker_by_id: Remove a timeline marker.
- list_all_basecamp_message_boards: Get the ID for a project's message board.
- list_all_basecamp_message_types: View available categories for messages.
- get_single_basecamp_message_type_by_id: View a specific message category.
- create_a_basecamp_message_type: Add a new message category.
- update_a_basecamp_message_type_by_id: Modify a message category.
- delete_a_basecamp_message_type_by_id: Remove a message category.
- list_all_basecamp_messages: Read the subject lines of board posts.
- get_single_basecamp_message_by_id: Read the full content of a board post.
- update_a_basecamp_message_by_id: Edit a board post.
- delete_a_basecamp_message_by_id: Unpin a message.
- list_all_basecamp_question_answers: Read team responses to automatic check-ins.
- get_single_basecamp_question_answer_by_id: Read a specific check-in answer.
- list_all_basecamp_questionnaires: View active automatic check-ins.
- list_all_basecamp_questions: List the specific questions being asked in a check-in.
- get_single_basecamp_question_by_id: View check-in question details.
- list_all_basecamp_recordings: Query any item in Basecamp by its generic recording type.
- list_all_basecamp_schedule_entries: View calendar events for a project.
- get_single_basecamp_schedule_entry_by_id: Read details for a specific calendar event.
- create_a_basecamp_schedule_entry: Add a new meeting or deadline to the calendar.
- update_a_basecamp_schedule_entry_by_id: Modify a calendar event.
- get_single_basecamp_schedule_by_id: Retrieve the schedule tool for a project.
- update_a_basecamp_schedule_by_id: Modify schedule settings.
- list_all_basecamp_templates: View available project templates.
- get_single_basecamp_template_by_id: View details of a specific template.
- create_a_basecamp_template: Build a new reusable project template.
- update_a_basecamp_template_by_id: Edit an existing template.
- delete_a_basecamp_template_by_id: Trash a template.
- get_single_basecamp_todo_set_by_id: Retrieve the root task manager for a project.
- list_all_basecamp_uploads: View files uploaded to a vault.
- get_single_basecamp_upload_by_id: Get metadata for a specific file.
- create_a_basecamp_upload: Upload a new file.
- update_a_basecamp_upload_by_id: Rename a file.
- list_all_basecamp_vaults: View folders within a project's document storage.
- get_single_basecamp_vault_by_id: View a specific vault folder.
- create_a_basecamp_vault: Add a new folder for documents.
- update_a_basecamp_vault_by_id: Rename a document folder.
- list_all_basecamp_webhooks: View active webhooks for a project.
- get_single_basecamp_webhook_by_id: Check delivery status of a webhook.
- create_a_basecamp_webhook: Register a new outbound webhook.
- update_a_basecamp_webhook_by_id: Change a webhook's destination URL.
- delete_a_basecamp_webhook_by_id: Remove a webhook.
Workflows in Action
When Claude has direct access to Basecamp via MCP, it can execute complex, multi-step workflows that would normally require a human to click through dozens of screens.
Scenario 1: The Automated Daily Standup (Project Manager)
Instead of chasing engineers for updates, a Project Manager can ask Claude to generate a comprehensive status report based on actual system data.
"Review the 'Q3 Platform Rewrite' project. Find all to-dos completed in the last 24 hours, summarize the technical discussions from the Campfire chat, and draft a new Message Board post with the summary."
How the agent executes this:
- Calls
list_all_basecamp_projectsto find the ID for "Q3 Platform Rewrite". - Inspects the project's
dockarray to locate the IDs for thetodoset,chat, andmessage_board. - Calls
list_all_basecamp_todo_listsand iterates through them usinglist_all_basecamp_todosto find tasks wherecompletedis true and the timestamp is within 24 hours. - Calls
list_all_basecamp_campfire_linesto read the recent chat history and synthesizes the technical decisions. - Calls
create_a_basecamp_messageto post the final, formatted summary directly to the team's message board.
Scenario 2: Bug Triage and Delegation (Tech Lead)
A Tech Lead needs to turn a vague customer complaint posted in a message board into an actionable, assigned task.
"Read the latest post on the Support Escalations message board. If it describes a software bug, create a new to-do in the Engineering project's 'Triage' list, assign it to Sarah, and reply to the original message saying the ticket has been logged."
How the agent executes this:
- Calls
list_all_basecamp_messageson the Support project to find the newest post, thenget_single_basecamp_message_by_idto read the content. - Uses its internal LLM capabilities to classify the text as a software bug.
- Calls
list_all_basecamp_projectsto find the Engineering project, locates thetodoset, and finds the 'Triage'todolist. - Calls
list_all_basecamp_peopleto find Sarah's user ID. - Calls
create_a_basecamp_todowith the bug details and Sarah's ID as the assignee. - Calls
create_a_basecamp_commenton the original support message, confirming the action.
Security and Access Control
Giving an AI agent access to your company's core project management system requires strict governance. Truto's MCP servers provide granular access controls to ensure Claude only operates within defined boundaries:
- Method filtering: Prevent Claude from modifying data by configuring the MCP server to only allow read operations (
config.methods: ["read"]). The agent will be able to query tasks and messages but will be physically blocked from creating or deleting them. - Tag filtering: Restrict the server to specific functional areas (e.g., only exposing tools tagged with
documentsortasks), reducing the attack surface and keeping the agent focused. - Token auth: For enterprise deployments, enable
require_api_token_auth: true. This forces the MCP client to pass a valid Truto API token in the Authorization header, ensuring that possession of the MCP URL alone is not enough to access the tools. - Ephemeral access: Use the
expires_atfield to create temporary MCP servers. If you are granting access to a contractor's AI agent or a short-lived automation script, the server will automatically self-destruct at the specified time, leaving no stale credentials behind.
Next Steps
Connecting Basecamp to Claude via a managed MCP server eliminates the need to build custom integration middleware. By exposing Basecamp's complex bucket and tool hierarchy as standardized, schema-validated tools, your AI agents can navigate projects, assign work, and manage documentation autonomously.
FAQ
- How do I connect Basecamp to Claude?
- You use a Model Context Protocol (MCP) server to act as a translation layer, converting Claude's standard tool calls into Basecamp REST API requests.
- What is the Basecamp bucket hierarchy?
- Basecamp organizes data into buckets (projects), which contain specific tools (todosets, vaults). API requests must traverse this hierarchy to access or create resources.
- Can Claude create Basecamp to-dos automatically?
- Yes, by exposing the create_a_basecamp_todo MCP tool, Claude can dynamically assign tasks, set due dates, and write descriptions based on natural language prompts.