---
title: "Connect Basecamp to Claude: Sync Documentation & Project Schedules via MCP"
slug: connect-basecamp-to-claude-sync-documentation-project-schedules
date: 2026-04-20
author: Uday Gajavalli
categories: ["AI & Agents"]
excerpt: "Learn how to connect Basecamp to Claude using a managed MCP server. Automate task delegation, sync project schedules, and manage team communication."
tldr: Connect Claude to Basecamp using a managed MCP server to bypass complex bucket hierarchies and automate project management workflows entirely through natural language.
canonical: https://truto.one/blog/connect-basecamp-to-claude-sync-documentation-project-schedules/
---

# Connect Basecamp to Claude: Sync Documentation & Project Schedules via MCP


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](https://truto.one/connect-basecamp-to-chatgpt-manage-tasks-team-communication/) or read our broader architectural overview on [connecting Basecamp to AI Agents](https://truto.one/connect-basecamp-to-ai-agents-automate-workflows-client-approvals/).

To connect Basecamp to Claude, you need a [Model Context Protocol (MCP) server](https://truto.one/what-is-mcp-and-mcp-servers-and-how-do-they-work/). 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](https://truto.one/managed-mcp-for-claude-full-saas-api-access-without-security-headaches/) 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](https://truto.one/connect-asana-to-claude-manage-team-collaboration-track-goals/). 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:
1. Navigate to the **Integrated Accounts** page in your Truto dashboard and select your connected Basecamp account.
2. Click the **MCP Servers** tab.
3. Click **Create MCP Server**.
4. Select your desired configuration (e.g., restrict to read-only methods or filter by specific tags).
5. 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.

```bash
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:

```json
{
  "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:
1. Open Claude and navigate to **Settings**.
2. Click on **Integrations** (or **Connectors** depending on your plan tier).
3. Click **Add MCP Server**.
4. 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.

```json
{
  "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_id` to interact with any tasks, messages, or documents.
* **Contextual Notes:** The returned payload includes the `dock` array, 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_id` and `todolist_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 pass `description`, `due_on`, `starts_on`, and `assignee_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_id` before 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`, and `status`. 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`, and `content`. 
* **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](https://truto.one/integrations/detail/basecamp).

* **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:**
1. Calls `list_all_basecamp_projects` to find the ID for "Q3 Platform Rewrite".
2. Inspects the project's `dock` array to locate the IDs for the `todoset`, `chat`, and `message_board`.
3. Calls `list_all_basecamp_todo_lists` and iterates through them using `list_all_basecamp_todos` to find tasks where `completed` is true and the timestamp is within 24 hours.
4. Calls `list_all_basecamp_campfire_lines` to read the recent chat history and synthesizes the technical decisions.
5. Calls `create_a_basecamp_message` to 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:**
1. Calls `list_all_basecamp_messages` on the Support project to find the newest post, then `get_single_basecamp_message_by_id` to read the content.
2. Uses its internal LLM capabilities to classify the text as a software bug.
3. Calls `list_all_basecamp_projects` to find the Engineering project, locates the `todoset`, and finds the 'Triage' `todolist`.
4. Calls `list_all_basecamp_people` to find Sarah's user ID.
5. Calls `create_a_basecamp_todo` with the bug details and Sarah's ID as the assignee.
6. Calls `create_a_basecamp_comment` on 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 `documents` or `tasks`), 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_at` field 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.

> Stop building custom MCP servers for every SaaS tool. Use Truto to generate secure, managed AI agent integrations in minutes.
>
> [Talk to us](https://cal.com/truto/partner-with-truto)
