---
title: "Basecamp MCP server for AI agents - actionlake"
description: "Give Claude 262 Basecamp actions through one MCP server: card tables, recordings, my. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/basecamp
updated: 2026-09-24
---

Connectors · Work & projects

# Basecamp MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Basecamp and the rest of your systems. It gives your agent 262 Basecamp actions (130 reads, 108 writes and 24 that wait for a confirmation) and holds the Basecamp credential itself, so the agent never does. It paces Basecamp's limits and records every call. Connecting Basecamp needs your own Basecamp OAuth app and one admin sign-in.

[Connect Basecamp free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

`claude mcp add --transport http actionlake https://connect.actionlake.com/mcp`

the first call

```
do {
  action: "basecamp.account.get_account",
  intent: "check which Basecamp account is connected"
}
# Get Account · read · 1 upstream call
```

- 262 actions in one signed file
- 130 read look, never change
- 108 write create and update
- 24 wait for a yes destructive, confirmed first

Set up

## Connect Basecamp in three steps.

1. 01
   ### Add actionlake to Claude.
   Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
   `https://connect.actionlake.com/mcp`
2. 02
   ### Connect Basecamp.
   OAuth 2.0, authorization code. You register your own OAuth app with Basecamp, an admin signs in once, and you paste the app's client id and secret and the tokens from that sign-in; actionlake renews the access token from then on. actionlake stores what you paste write-only, sealed under your tenant's key.
   Before the first sign-in, Basecamp needs an OAuth app of your own, registered in its developer portal. actionlake has no Basecamp app to lend you.
   - `access_token` Access token from one sign-in with your own OAuth app
   - `refresh_token` Refresh token from the same sign-in; the access token is renewed from it
   - `client_id` Basecamp OAuth client ID (from launchpad.37signals.com/integrations)
   - `client_secret` Basecamp OAuth client secret
   - `account_id` Your Basecamp account id
   ```
   account { op: "connections.requirements", service: "basecamp" }
   # free: exactly what to paste, and what is found for you
   ```
3. 03
   ### Make the first call. Check before a write.
   Ask in plain words; Claude picks the action. Before anything changes, `check` validates the call and prices it, for free.
   ```
   do    { action: "basecamp.account.get_account" }
   # get account · read · 1 upstream call
   check { action: "basecamp.todolists.create_todo", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

Basecamp at a glance

**Sign-in**

OAuth 2.0, authorization code. You register your own OAuth app with Basecamp, an admin signs in once, and you paste the app's client id and secret and the tokens from that sign-in; actionlake renews the access token from then on.

**You provide**

`access_token` `refresh_token` `client_id` `client_secret`

**Setup fields**

`account_id`

**Limits we pace to**

50 calls per 10 seconds, per connection

**API covered**

Basecamp 4 (Basecamp 3 API) API bc3`3.basecampapi.com`

**Built from**

Basecamp's documentation, read 19 September 2026[OpenAPI spec (GitHub)](https://raw.githubusercontent.com/basecamp/basecamp-sdk/main/openapi.json) [GitHub](https://github.com/basecamp/bc3-api)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

130 of 130 reads, for up to an hour; a write clears what it affects

**Ready-made plans**

9 in the store

**Shared entities**

8, so ask can line Basecamp up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in Basecamp.

262 actions in 40 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

- **130** read look, never change
- **108** write create and update
- **24** destructive wait for a confirmation

1. ### Card tables
   29
   11 read · 16 write · 2 destructive
   Create Card · Get Everything Completed Cards · Get Everything No Due Date Cards · Get Everything Not Now Cards
2. ### Recordings
   29
   9 read · 12 write · 8 destructive
   Trash Recording · List Client Correspondences · List Client Replies · Get Recording Timesheet
3. ### My
   19
   12 read · 6 write · 1 destructive
   Get My Assignments · Get My Completed Assignments · Get My Due Assignments · List Recent Projects
4. ### Campfires
   13
   7 read · 4 write · 2 destructive
   List Campfire Lines · Create Campfire Line · Get Campfire Line · Update Campfire Line
5. ### Todos
   12
   7 read · 5 write · 0 destructive
   Create Todoset Todo · Get Everything Completed Todos · Get Everything No Due Date Todos · Get Everything Open Todos
6. ### Projects
   11
   5 read · 5 write · 1 destructive
   List Projects · List Recordings · Create Project · Get Project
7. ### Todolists
   10
   4 read · 6 write · 0 destructive
   List Todos · Create Todo · List Todolist Groups · List Todolists
8. ### Questions
   9
   4 read · 5 write · 0 destructive
   List Question Answerers · Get Answers By Person · List Answers · Create Answer

**32 more areas · 130 actions**

- Vaults **8**
- Gauges **7**
- Reports **7**
- Schedules **7**
- Templates **7**
- Boosts **6**
- Client **6**
- Inbox **6**
- Comments **5**
- Folders **5**
- People **5**
- Webhooks **5**
- Documents **4**
- Lineup **4**
- Questionnaires **4**
- Tools **4**
- Uploads **4**
- Account **3**
- Google documents **3**
- Message boards **3**
- Messages **3**
- Out of office **3**
- Template library **3**
- Timesheets **3**
- Calendars **2**
- Cloud files **2**
- Events **2**
- Hill charts **2**
- Message types **2**
- Question answers **2**
- Search **2**
- Forwards **1**

Top actions

## The Basecamp API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 151 of Basecamp's 155 action names are shared with at least one other connector, so an agent learns them once.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `basecamp.todolists.list_todos` List Todos | List Todos | read | `work.task.list` 122 connectors |
| `basecamp.projects.list_projects` List Projects | List Projects | read | `work.project.list` 109 connectors |
| `basecamp.people.list_people` List People | List People | read | `identity.user.list` 474 connectors |
| `basecamp.comments.list_comments` List Comments | List Comments | read | `work.task_comment.list` 27 connectors |
| `basecamp.todolists.create_todo` Create Todo | Create Todo | write | `work.task.create` 127 connectors |
| `basecamp.card_tables.create_card` Create Card | Create Card | write | `work.task.create` 127 connectors |
| `basecamp.my.list_recent_projects` List Recent Projects | List Recent Projects | read | `work.project.list` 109 connectors |
| `basecamp.schedules.list_schedule_entries` List Schedule Entries | List Schedule Entries | read | `comm.event.list` 61 connectors |
| `basecamp.message_boards.list_messages` List Messages | List Messages | read | `comm.message.list` 42 connectors |
| `basecamp.vaults.list_uploads` List Uploads | List Uploads | read | `content.file.list` 77 connectors |
| `basecamp.comments.create_comment` Create Comment | Create Comment | write | `work.task_comment.create` 28 connectors |
| `basecamp.recordings.trash_recording` Trash Recording | Trash Recording | destructive | `work.task.delete` 107 connectors |

Try it

## Prompts to paste into Claude.

Each one names the Basecamp actions it will call, so you know what it reads and what it changes before you send it.

1. Read read
   Which Basecamp tasks are overdue, and who owns each one?
   calls `basecamp.todolists.list_todos`
2. Plan write
   Spin up a project from a template and wait for it to build in Basecamp. Ask me before anything is sent or changed.
   calls `basecamp.templates.get_template` `basecamp.templates.create_project_from_template` `basecamp.templates.get_project_construction` `basecamp.projects.record_project_visit` `basecamp.projects.get_project`
3. Plan read
   Report each assignable person's workload for the week in Basecamp.
   calls `basecamp.reports.list_assignable_people` `basecamp.reports.get_upcoming_schedule` `basecamp.reports.get_overdue_todos` `basecamp.reports.get_assigned_todos` `basecamp.reports.get_person_progress`
4. Write write
   Create Todo in Basecamp. Show me exactly what you will send before you save it.
   calls `basecamp.todolists.create_todo`
5. Across systems read
   For each customer, how many projects are in Basecamp and how many invoices in ConnectWise PSA?
   calls `basecamp.projects.list_projects` `connectwise_manage.invoices.list`

Across your systems

## Basecamp, joined to the rest of your business.

One `ask` fetches from Basecamp and another system, joins the rows on the same customer on our side, and hands your agent the answer, not every row.

- For each customer, how many projects are in Basecamp and how many invoices in ConnectWise PSA?
  `basecamp.projects.list_projects` + `connectwise_manage.invoices.list`, on `crm.company` · [ConnectWise PSA](https://actionlake.com/connectors/connectwise-psa)
- For each customer, how many projects are in Basecamp and how many invoices in NetSuite?
  `basecamp.projects.list_projects` + `netsuite.views.invoices`, on `crm.company` · [NetSuite](https://actionlake.com/connectors/netsuite)

Also mapped by other connectors `identity.user` **517** `work.project` **116** `work.task` **105** `content.file` **54** `comm.event` **47** `content.document` **17** `comm.message` **15** `work.task_comment` **9**

ask

```
ask {
  intent: "for each customer, how many projects are in Basecamp and how many invoices in ConnectWise PSA",
  steps: [
    { action: "basecamp.projects.list_projects", as: "proj", input: {}, limit: 100, max_pages: 5 },
    { action: "connectwise_manage.invoices.list", as: "inv", input: {}, limit: 100, max_pages: 5 },
    { join: {
        left: "proj",
        right: "inv",
        on: "crm.company",
        group_by: "proj.company_name",
        select: ["proj.company_name", "count(proj.id) as projects", "count(inv.id) as invoices"]
    } }
  ]
}
```

Example. Run it through check first: it validates the steps and prices them, and it is free.

The plan store

## Ready-made plans for Basecamp.

9 plans in the store. Install one and your agent runs it by name; the reply says which connections are still missing. A schedule can run a plan on a timetable. There are no triggers or webhooks, by design.

1. ### Report each assignable person's workload for the week
   Use it when Someone wants to see who is carrying what before a planning meeting or a week starts.
   **Effect**
   read
   **Steps**
   5 · loops
   **Needs**
   window ends on and window starts on
   **Install**
   `basecamp-weekly-workload-report`
2. ### Create a kickoff to-do list and fill it with tasks
   Use it when A new workstream is starting and its tasks need to exist in Basecamp as one named list.
   **Effect**
   write
   **Steps**
   4 · loops
   **Needs**
   assignee ids, due on, list name, titles and todoset id
   **Install**
   `basecamp-kickoff-todolist-from-brief`
3. ### Sweep overdue to-dos and post a campfire summary
   Use it when Someone wants a daily or ad-hoc nudge about what has slipped past its due date, delivered into chat.
   **Effect**
   write
   **Steps**
   4 · loops
   **Needs**
   campfire id
   **Install**
   `basecamp-overdue-todo-sweep`
4. ### Post a project update and pin it
   Use it when A status update needs to go out to a project's board and be made prominent and announced.
   **Effect**
   write
   **Steps**
   4
   **Needs**
   board id, body, campfire id and subject
   **Install**
   `basecamp-publish-project-update`
5. ### Archive a project once a human signs off
   Use it when A project has finished and someone wants it archived, but not without a person agreeing first.
   A person decides Archive the project '_name_', removing it from the active list for _member count_ people.
   **Effect**
   write
   **Steps**
   5
   **Needs**
   project id
   **Install**
   `basecamp-archive-project-after-approval`
6. ### Log hours against a to-do and check the project total
   Use it when Someone needs time booked against a specific to-do and wants the project total confirmed straight after.
   **Effect**
   write
   **Steps**
   5
   **Needs**
   date, hours, person id, project id and todo id
   **Install**
   `basecamp-log-time-against-todo`
7. ### Triage a card column and move stale cards on
   Use it when A card column has silted up and the cards in it should be commented and moved to another column in one pass.
   A person decides Comment on and move _card count_ cards out of '_title_' into column _target column id_.
   **Effect**
   write
   **Steps**
   5 · loops
   **Needs**
   column id, note and target column id
   **Install**
   `basecamp-triage-card-column`
8. ### Spin up a project from a template and wait for it to build
   Use it when A new client or engagement is starting and the standard project template should be instantiated.
   A person decides Create a new project from template '_name_' and invite whoever the template carries.
   **Effect**
   write
   **Steps**
   6
   **Needs**
   project and template id
   **Install**
   `basecamp-project-from-template`
9. ### Trash recordings matching a search after sign-off
   Use it when A batch of obsolete recordings has been identified by search and someone has agreed they should go to the trash.
   A person decides Archive and then trash _hit count_ recordings matching '_q_'. This is not easily undone.
   **Effect**
   destructive
   **Steps**
   4 · loops
   **Needs**
   bucket ids and q
   **Install**
   `basecamp-trash-stale-recordings`

install a plan

```
account { op: "plans.install", slug: "basecamp-weekly-workload-report" }
# then ask for it by name; a schedule can run it on a timetable
```

Governance for Basecamp

## Destructive actions wait for a yes.

24 Basecamp actions are destructive. These are all of them:

- Trash Recording `basecamp.recordings.trash_recording`
- Trash Project `basecamp.projects.trash_project`
- Delete Campfire Line `basecamp.campfires.delete_campfire_line`
- Destroy Timesheet Entry `basecamp.timesheets.destroy_timesheet_entry`
- Delete Lineup Marker `basecamp.lineup.delete_lineup_marker`
- Delete Template `basecamp.templates.delete_template`
- Delete Wormhole `basecamp.card_tables.delete_wormhole`
- Disable Project Clients `basecamp.client.disable_project_clients`
- Delete Folder `basecamp.folders.delete_folder`
- Delete Bubble Up `basecamp.recordings.delete_bubble_up`
- Delete Webhook `basecamp.webhooks.delete_webhook`
- Delete Boost `basecamp.boosts.delete_boost`
- Unsubscribe `basecamp.recordings.unsubscribe`
- Unsubscribe From Card Column `basecamp.card_tables.unsubscribe_from_card_column`
- Unpin Message `basecamp.recordings.unpin_message`
- Delete Chatbot `basecamp.campfires.delete_chatbot`
- Destroy Gauge Needle `basecamp.gauges.destroy_gauge_needle`
- Delete Message Type `basecamp.recordings.delete_message_type`
- Deprioritize Assignment `basecamp.my.deprioritize_assignment`
- Delete Bookmark `basecamp.recordings.delete_bookmark`
- Unspotlight Recording `basecamp.recordings.unspotlight_recording`
- Remove Account Logo `basecamp.account.remove_account_logo`
- Delete Tool `basecamp.tools.delete_tool`
- Disable Tool `basecamp.recordings.disable_tool`

A destructive action runs only with `confirm: true`. Under the `human` policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

do basecamp.campfires.delete_campfire_line confirm_policy: **human**

Delete Campfire Line?

**intent:** the user asked me to delete Campfire Line

run suspended · waiting for a named person · key _basecamp-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "basecamp-agent",
  allowed_actions: ["basecamp.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "basecamp.recordings.trash_recording", approver: "lead@example.com" },
    { match: "basecamp.projects.trash_project", approver: "lead@example.com" },
    { match: "basecamp.campfires.delete_campfire_line", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to Basecamp only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What Basecamp costs on actionlake.

Every Basecamp action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call Basecamp refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

- 1 upstream call per action all 262 Basecamp actions
- 56 actions page each page of a long list is one call
- 130 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every Basecamp action.

262 actions by area: the id your agent calls, what it does, and its effect.

**Card tables 29**

- `basecamp.card_tables.create_card` Create Card write
- `basecamp.card_tables.create_card_column` Create Card Column write
- `basecamp.card_tables.create_card_step` Create Card Step write
- `basecamp.card_tables.create_wormhole` Create Wormhole write
- `basecamp.card_tables.delete_wormhole` Delete Wormhole destructive
- `basecamp.card_tables.disable_card_column_on_hold` Disable Card Column On Hold write
- `basecamp.card_tables.enable_card_column_on_hold` Enable Card Column On Hold write
- `basecamp.card_tables.get_card` Get Card read
- `basecamp.card_tables.get_card_column` Get Card Column read
- `basecamp.card_tables.get_card_step` Get Card Step read
- `basecamp.card_tables.get_card_table` Get Card Table read
- `basecamp.card_tables.get_everything_completed_cards` Get Everything Completed Cards read
- `basecamp.card_tables.get_everything_no_due_date_cards` Get Everything No Due Date Cards read
- `basecamp.card_tables.get_everything_not_now_cards` Get Everything Not Now Cards read
- `basecamp.card_tables.get_everything_open_cards` Get Everything Open Cards read
- `basecamp.card_tables.get_everything_overdue_cards` Get Everything Overdue Cards read
- `basecamp.card_tables.get_everything_unassigned_cards` Get Everything Unassigned Cards read
- `basecamp.card_tables.list_cards` List Cards read
- `basecamp.card_tables.move_card` Move Card write
- `basecamp.card_tables.move_card_column` Move Card Column write
- `basecamp.card_tables.reposition_card_step` Reposition Card Step write
- `basecamp.card_tables.set_card_column_color` Set Card Column Color write
- `basecamp.card_tables.set_card_step_completion` Set Card Step Completion write
- `basecamp.card_tables.subscribe_to_card_column` Subscribe To Card Column write
- `basecamp.card_tables.unsubscribe_from_card_column` Unsubscribe From Card Column destructive
- `basecamp.card_tables.update_card` Update Card write
- `basecamp.card_tables.update_card_column` Update Card Column write
- `basecamp.card_tables.update_card_step` Update Card Step write
- `basecamp.card_tables.update_wormhole` Update Wormhole write

**Recordings 29**

- `basecamp.recordings.archive_recording` Archive Recording write
- `basecamp.recordings.create_bookmark` Create Bookmark write
- `basecamp.recordings.create_bubble_up` Create Bubble Up write
- `basecamp.recordings.create_timesheet_entry` Create Timesheet Entry write
- `basecamp.recordings.delete_bookmark` Delete Bookmark destructive
- `basecamp.recordings.delete_bubble_up` Delete Bubble Up destructive
- `basecamp.recordings.delete_message_type` Delete Message Type destructive
- `basecamp.recordings.disable_tool` Disable Tool destructive
- `basecamp.recordings.enable_tool` Enable Tool write
- `basecamp.recordings.get_bookmark` Get Bookmark read
- `basecamp.recordings.get_client_reply` Get Client Reply read
- `basecamp.recordings.get_message_type` Get Message Type read
- `basecamp.recordings.get_recording_timesheet` Get Recording Timesheet read
- `basecamp.recordings.get_subscription` Get Subscription read
- `basecamp.recordings.list_client_approvals` List Client Approvals read
- `basecamp.recordings.list_client_correspondences` List Client Correspondences read
- `basecamp.recordings.list_client_replies` List Client Replies read
- `basecamp.recordings.list_events` List Events read
- `basecamp.recordings.pin_message` Pin Message write
- `basecamp.recordings.reposition_tool` Reposition Tool write
- `basecamp.recordings.spotlight_recording` Spotlight Recording write
- `basecamp.recordings.subscribe` Subscribe write
- `basecamp.recordings.trash_recording` Trash Recording destructive
- `basecamp.recordings.unarchive_recording` Unarchive Recording write
- `basecamp.recordings.unpin_message` Unpin Message destructive
- `basecamp.recordings.unspotlight_recording` Unspotlight Recording destructive
- `basecamp.recordings.unsubscribe` Unsubscribe destructive
- `basecamp.recordings.update_message_type` Update Message Type write
- `basecamp.recordings.update_subscription` Update Subscription write

**My 19**

- `basecamp.my.deprioritize_assignment` Deprioritize Assignment destructive
- `basecamp.my.get_bubble_ups` Get Bubble Ups read
- `basecamp.my.get_my_assignments` Get My Assignments read
- `basecamp.my.get_my_completed_assignments` Get My Completed Assignments read
- `basecamp.my.get_my_due_assignments` Get My Due Assignments read
- `basecamp.my.get_my_note` Get My Note read
- `basecamp.my.get_my_notifications` Get My Notifications read
- `basecamp.my.get_my_preferences` Get My Preferences read
- `basecamp.my.get_my_profile` Get My Profile read
- `basecamp.my.get_question_reminders` Get Question Reminders read
- `basecamp.my.list_my_bookmarks` List My Bookmarks read
- `basecamp.my.list_my_drafts` List My Drafts read
- `basecamp.my.list_recent_projects` List Recent Projects read
- `basecamp.my.mark_as_read` Mark As Read write
- `basecamp.my.prioritize_assignment` Prioritize Assignment write
- `basecamp.my.reorder_up_next` Reorder Up Next write
- `basecamp.my.update_my_note` Update My Note write
- `basecamp.my.update_my_preferences` Update My Preferences write
- `basecamp.my.update_my_profile` Update My Profile write

**Campfires 13**

- `basecamp.campfires.create_campfire_line` Create Campfire Line write
- `basecamp.campfires.create_chatbot` Create Chatbot write
- `basecamp.campfires.delete_campfire_line` Delete Campfire Line destructive
- `basecamp.campfires.delete_chatbot` Delete Chatbot destructive
- `basecamp.campfires.get_campfire` Get Campfire read
- `basecamp.campfires.get_campfire_line` Get Campfire Line read
- `basecamp.campfires.get_chatbot` Get Chatbot read
- `basecamp.campfires.list_campfire_lines` List Campfire Lines read
- `basecamp.campfires.list_campfire_uploads` List Campfire Uploads read
- `basecamp.campfires.list_campfires` List Campfires read
- `basecamp.campfires.list_chatbots` List Chatbots read
- `basecamp.campfires.update_campfire_line` Update Campfire Line write
- `basecamp.campfires.update_chatbot` Update Chatbot write

**Todos 12**

- `basecamp.todos.complete_todo` Complete Todo write
- `basecamp.todos.create_todoset_todo` Create Todoset Todo write
- `basecamp.todos.get_everything_completed_todos` Get Everything Completed Todos read
- `basecamp.todos.get_everything_no_due_date_todos` Get Everything No Due Date Todos read
- `basecamp.todos.get_everything_open_todos` Get Everything Open Todos read
- `basecamp.todos.get_everything_overdue_todos` Get Everything Overdue Todos read
- `basecamp.todos.get_everything_unassigned_todos` Get Everything Unassigned Todos read
- `basecamp.todos.get_todo` Get Todo read
- `basecamp.todos.get_todoset` Get Todoset read
- `basecamp.todos.replace_todo` Replace Todo write
- `basecamp.todos.reposition_todo` Reposition Todo write
- `basecamp.todos.uncomplete_todo` Uncomplete Todo write

**Projects 11**

- `basecamp.projects.archive_project` Archive Project write
- `basecamp.projects.create_project` Create Project write
- `basecamp.projects.get_project` Get Project read
- `basecamp.projects.get_project_timeline` Get Project Timeline read
- `basecamp.projects.get_project_timesheet` Get Project Timesheet read
- `basecamp.projects.list_projects` List Projects read
- `basecamp.projects.list_recordings` List Recordings read
- `basecamp.projects.record_project_visit` Record Project Visit write
- `basecamp.projects.trash_project` Trash Project destructive
- `basecamp.projects.unarchive_project` Unarchive Project write
- `basecamp.projects.update_project` Update Project write

**Todolists 10**

- `basecamp.todolists.create_todo` Create Todo write
- `basecamp.todolists.create_todolist` Create Todolist write
- `basecamp.todolists.create_todolist_group` Create Todolist Group write
- `basecamp.todolists.get_todolist_or_group` Get Todolist Or Group read
- `basecamp.todolists.list_todolist_groups` List Todolist Groups read
- `basecamp.todolists.list_todolists` List Todolists read
- `basecamp.todolists.list_todos` List Todos read
- `basecamp.todolists.reposition_todolist` Reposition Todolist write
- `basecamp.todolists.reposition_todolist_group` Reposition Todolist Group write
- `basecamp.todolists.update_todolist_or_group` Update Todolist Or Group write

**Questions 9**

- `basecamp.questions.create_answer` Create Answer write
- `basecamp.questions.get_answers_by_person` Get Answers By Person read
- `basecamp.questions.get_question` Get Question read
- `basecamp.questions.list_answers` List Answers read
- `basecamp.questions.list_question_answerers` List Question Answerers read
- `basecamp.questions.pause_question` Pause Question write
- `basecamp.questions.resume_question` Resume Question write
- `basecamp.questions.update_question` Update Question write
- `basecamp.questions.update_question_notification_settings` Update Question Notification Settings write

**Vaults 8**

- `basecamp.vaults.create_cloud_file` Create Cloud File write
- `basecamp.vaults.create_upload` Create Upload write
- `basecamp.vaults.create_vault` Create Vault write
- `basecamp.vaults.get_everything_files` Get Everything Files read
- `basecamp.vaults.get_vault` Get Vault read
- `basecamp.vaults.list_uploads` List Uploads read
- `basecamp.vaults.list_vaults` List Vaults read
- `basecamp.vaults.update_vault` Update Vault write

**Gauges 7**

- `basecamp.gauges.create_gauge_needle` Create Gauge Needle write
- `basecamp.gauges.destroy_gauge_needle` Destroy Gauge Needle destructive
- `basecamp.gauges.get_gauge_needle` Get Gauge Needle read
- `basecamp.gauges.list_gauge_needles` List Gauge Needles read
- `basecamp.gauges.list_gauges` List Gauges read
- `basecamp.gauges.toggle_gauge` Toggle Gauge write
- `basecamp.gauges.update_gauge_needle` Update Gauge Needle write

**Reports 7**

- `basecamp.reports.get_assigned_todos` Get Assigned Todos read
- `basecamp.reports.get_overdue_todos` Get Overdue Todos read
- `basecamp.reports.get_person_progress` Get Person Progress read
- `basecamp.reports.get_progress_report` Get Progress Report read
- `basecamp.reports.get_timesheet_report` Get Timesheet Report read
- `basecamp.reports.get_upcoming_schedule` Get Upcoming Schedule read
- `basecamp.reports.list_assignable_people` List Assignable People read

**Schedules 7**

- `basecamp.schedules.create_schedule_entry` Create Schedule Entry write
- `basecamp.schedules.get_schedule` Get Schedule read
- `basecamp.schedules.get_schedule_entry` Get Schedule Entry read
- `basecamp.schedules.get_schedule_entry_occurrence` Get Schedule Entry Occurrence read
- `basecamp.schedules.list_schedule_entries` List Schedule Entries read
- `basecamp.schedules.replace_schedule_entry` Replace Schedule Entry write
- `basecamp.schedules.update_schedule_settings` Update Schedule Settings write

**Templates 7**

- `basecamp.templates.create_project_from_template` Create Project From Template write
- `basecamp.templates.create_template` Create Template write
- `basecamp.templates.delete_template` Delete Template destructive
- `basecamp.templates.get_project_construction` Get Project Construction read
- `basecamp.templates.get_template` Get Template read
- `basecamp.templates.list_templates` List Templates read
- `basecamp.templates.update_template` Update Template write

**Boosts 6**

- `basecamp.boosts.create_event_boost` Create Event Boost write
- `basecamp.boosts.create_recording_boost` Create Recording Boost write
- `basecamp.boosts.delete_boost` Delete Boost destructive
- `basecamp.boosts.get_boost` Get Boost read
- `basecamp.boosts.list_event_boosts` List Event Boosts read
- `basecamp.boosts.list_recording_boosts` List Recording Boosts read

**Client 6**

- `basecamp.client.disable_project_clients` Disable Project Clients destructive
- `basecamp.client.enable_project_clients` Enable Project Clients write
- `basecamp.client.get_client_approval` Get Client Approval read
- `basecamp.client.get_client_correspondence` Get Client Correspondence read
- `basecamp.client.set_client_visibility` Set Client Visibility write
- `basecamp.client.update_project_client_access` Update Project Client Access write

**Inbox 6**

- `basecamp.inbox.get_forward` Get Forward read
- `basecamp.inbox.get_forward_reply` Get Forward Reply read
- `basecamp.inbox.get_inbox` Get Inbox read
- `basecamp.inbox.list_forward_replies` List Forward Replies read
- `basecamp.inbox.list_forwards` List Forwards read
- `basecamp.inbox.poll_inbox` Poll Inbox read

**Comments 5**

- `basecamp.comments.create_comment` Create Comment write
- `basecamp.comments.get_comment` Get Comment read
- `basecamp.comments.get_everything_comments` Get Everything Comments read
- `basecamp.comments.list_comments` List Comments read
- `basecamp.comments.update_comment` Update Comment write

**Folders 5**

- `basecamp.folders.create_folder` Create Folder write
- `basecamp.folders.delete_folder` Delete Folder destructive
- `basecamp.folders.get_folder` Get Folder read
- `basecamp.folders.list_folders` List Folders read
- `basecamp.folders.update_folder` Update Folder write

**People 5**

- `basecamp.people.get_person` Get Person read
- `basecamp.people.list_people` List People read
- `basecamp.people.list_pingable_people` List Pingable People read
- `basecamp.people.list_project_people` List Project People read
- `basecamp.people.update_project_access` Update Project Access write

**Webhooks 5**

- `basecamp.webhooks.create_webhook` Create Webhook write
- `basecamp.webhooks.delete_webhook` Delete Webhook destructive
- `basecamp.webhooks.get_webhook` Get Webhook read
- `basecamp.webhooks.list_webhooks` List Webhooks read
- `basecamp.webhooks.update_webhook` Update Webhook write

**Documents 4**

- `basecamp.documents.create_document` Create Document write
- `basecamp.documents.get_document` Get Document read
- `basecamp.documents.list_documents` List Documents read
- `basecamp.documents.replace_document` Replace Document write

**Lineup 4**

- `basecamp.lineup.create_lineup_marker` Create Lineup Marker write
- `basecamp.lineup.delete_lineup_marker` Delete Lineup Marker destructive
- `basecamp.lineup.list_lineup_markers` List Lineup Markers read
- `basecamp.lineup.update_lineup_marker` Update Lineup Marker write

**Questionnaires 4**

- `basecamp.questionnaires.create_question` Create Question write
- `basecamp.questionnaires.get_everything_checkins` Get Everything Checkins read
- `basecamp.questionnaires.get_questionnaire` Get Questionnaire read
- `basecamp.questionnaires.list_questions` List Questions read

**Tools 4**

- `basecamp.tools.create_tool` Create Tool write
- `basecamp.tools.delete_tool` Delete Tool destructive
- `basecamp.tools.get_tool` Get Tool read
- `basecamp.tools.update_tool` Update Tool write

**Uploads 4**

- `basecamp.uploads.create_upload_version` Create Upload Version write
- `basecamp.uploads.get_upload` Get Upload read
- `basecamp.uploads.list_upload_versions` List Upload Versions read
- `basecamp.uploads.update_upload` Update Upload write

**Account 3**

- `basecamp.account.get_account` Get Account read
- `basecamp.account.remove_account_logo` Remove Account Logo destructive
- `basecamp.account.update_account_name` Update Account Name write

**Google documents 3**

- `basecamp.google_documents.create_google_document` Create Google Document write
- `basecamp.google_documents.get_google_document` Get Google Document read
- `basecamp.google_documents.update_google_document` Update Google Document write

**Message boards 3**

- `basecamp.message_boards.create_message` Create Message write
- `basecamp.message_boards.get_message_board` Get Message Board read
- `basecamp.message_boards.list_messages` List Messages read

**Messages 3**

- `basecamp.messages.get_everything_messages` Get Everything Messages read
- `basecamp.messages.get_message` Get Message read
- `basecamp.messages.update_message` Update Message write

**Out of office 3**

- `basecamp.out_of_office.disable_out_of_office` Disable Out Of Office write
- `basecamp.out_of_office.enable_out_of_office` Enable Out Of Office write
- `basecamp.out_of_office.get_out_of_office` Get Out Of Office read

**Template library 3**

- `basecamp.template_library.create_template_library_copy` Create Template Library Copy write
- `basecamp.template_library.get_template_library` Get Template Library read
- `basecamp.template_library.get_template_library_copy` Get Template Library Copy read

**Timesheets 3**

- `basecamp.timesheets.destroy_timesheet_entry` Destroy Timesheet Entry destructive
- `basecamp.timesheets.get_timesheet_entry` Get Timesheet Entry read
- `basecamp.timesheets.update_timesheet_entry` Update Timesheet Entry write

**Calendars 2**

- `basecamp.calendars.get_calendar` Get Calendar read
- `basecamp.calendars.update_calendar` Update Calendar write

**Cloud files 2**

- `basecamp.cloud_files.get_cloud_file` Get Cloud File read
- `basecamp.cloud_files.update_cloud_file` Update Cloud File write

**Events 2**

- `basecamp.events.create_stream_ticket` Create Stream Ticket write
- `basecamp.events.poll_events` Poll Events read

**Hill charts 2**

- `basecamp.hill_charts.get_hill_chart` Get Hill Chart read
- `basecamp.hill_charts.update_hill_chart_settings` Update Hill Chart Settings write

**Message types 2**

- `basecamp.message_types.create_message_type` Create Message Type write
- `basecamp.message_types.list_message_types` List Message Types read

**Question answers 2**

- `basecamp.question_answers.get_answer` Get Answer read
- `basecamp.question_answers.update_answer` Update Answer write

**Search 2**

- `basecamp.search.get_search_metadata` Get Search Metadata read
- `basecamp.search.search` Search read

**Forwards 1**

- `basecamp.forwards.get_everything_forwards` Get Everything Forwards read

Questions

## The Basecamp MCP server, answered.

**Is there a Basecamp MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 262 Basecamp actions across card tables, recordings, my and campfires, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Basecamp.

**What do I need to connect Basecamp?**

Your own Basecamp OAuth app, registered with Basecamp (its client id and client secret), and the access and refresh tokens from one admin sign-in. actionlake has no Basecamp app of its own, so this is not a one-step consent. actionlake renews the access token as it expires. Plus your account id. The free call account { op: "connections.requirements", service: "basecamp" } lists exactly what to paste.

**Can an AI agent delete or change things in Basecamp?**

Only if its key allows it, and only with an explicit confirmation. 24 Basecamp actions are destructive, including trash Recording, trash Project and delete Campfire Line. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my Basecamp API limit?**

actionlake paces every call to the limits in the Basecamp service file: 50 calls per 10 seconds per connection. Repeated reads are answered from cache (130 Basecamp actions can be), which never reaches Basecamp.

**What does a Basecamp action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (56 Basecamp actions page). Cache hits, searches, dry runs and calls Basecamp refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

**Which Basecamp API does it cover?**

The Basecamp 4 (Basecamp 3 API) API bc3 at 3.basecampapi.com, under your account id. It is built from Basecamp's documentation as read on 19 September 2026. 262 actions in 40 areas, each one in the signed service file (version 1.0.0).

**Can I combine Basecamp with my other systems?**

Yes. ask joins Basecamp to ConnectWise PSA or NetSuite on the same customer and returns the answer rather than every row. Basecamp maps work.project, which 116 other connectors also map.

**Does actionlake keep my Basecamp data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Basecamp credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

**Which AI clients can use it?**

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

## More connectors like Basecamp

Shares the most action names with

- [Teamwork 91](https://actionlake.com/connectors/teamwork)
- [Jira 59](https://actionlake.com/connectors/jira)
- [Asana 51](https://actionlake.com/connectors/asana)
- [Trello 41](https://actionlake.com/connectors/trello)
- [Zoho Projects 36](https://actionlake.com/connectors/zoho-projects)
- [OpenProject 33](https://actionlake.com/connectors/openproject)

Joins with, on shared entities

- [ERPNext (Frappe) 5](https://actionlake.com/connectors/erpnext-frappe)
- [ScalePad 5](https://actionlake.com/connectors/scalepad)
- [Clio Manage 5](https://actionlake.com/connectors/clio-manage)
- [Odoo 4](https://actionlake.com/connectors/odoo)
- [Unified.to 4](https://actionlake.com/connectors/unified-to)
- [Filevine 4](https://actionlake.com/connectors/filevine)

Browse

- [All Work & projects connectors](https://actionlake.com/connectors/category/work-and-projects)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by Basecamp; the name is the vendor's own. Counts are from the Basecamp service file, version 1.0.0.

## Give your agent Basecamp today.

[Connect Basecamp free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.

---

Source: https://actionlake.com/connectors/basecamp
More: https://actionlake.com/llms.txt
