get_projectsLABSCO SUMMARY
The reports tools are the ones you will actually reach for.
Basecamp's own interface makes "what is assigned to this person everywhere" and "what is overdue across all projects" into a lot of clicking; here each is one call. Know one limit before you rely on the file tools: the project's own compatibility note says Claude Code passes PDF blobs through to the model, while Claude Desktop and claude.ai currently reject non-image embedded resources — the bytes reach the host and stop there. Use the CLI client when you need a document read.
What it is
A FastMCP server for Basecamp 3 that covers most of the product rather than a slice of it — projects, to-dos, message boards, campfires, card tables, inbox forwards, documents, uploads, comments, events, webhooks and search — authenticated through an OAuth application you create yourself.
What you get
- Projects and search:
get_projects,get_project,search_basecamp,global_search - Cross-project reports, which is where it beats clicking:
get_person_assignmentsreturns everything assigned to one person across all projects,get_overdue_todosreturns overdue items grouped by lateness,get_assignable_peoplelists who can be assigned - To-dos:
get_todolists,create_todolist,get_todos,create_todo,update_todo,complete_todo,reposition_todo,create_todolist_group - Card tables:
get_card_tables,get_columns,create_column,put_column_on_hold,get_cards,create_card,move_card,create_card_step,complete_card_step - Messages and documents, drafts included:
get_messages,create_message,create_draft_message,get_documents,create_document,create_draft_document,get_comments,create_comment - Files that reach the model:
download_uploadanddownload_attachmentreturn the bytes as MCP content rather than a link - Events and webhooks:
get_events,get_webhooks,create_webhook,delete_webhook - Config generators for Codex, Cursor and Claude Desktop, so the client entry is written for you
Requirements
Python 3.10 or newer, a Basecamp 3 account, and your own OAuth application from launchpad.37signals.com. BASECAMP_CLIENT_ID, BASECAMP_CLIENT_SECRET, BASECAMP_ACCOUNT_ID and a USER_AGENT string go into .env, then python oauth_app.py runs the browser flow on http://localhost:8000 and stores the token in oauth_tokens.json. If your system Python is older, uv venv --python 3.12 is the documented way around it.
Setup effort
Build from source — git clone https://github.com/georgeantonopoulos/Basecamp-MCP-Server.git
USE CASES
Seeing everything one person owns
Pull their assignments across every project in one call, grouped by project or by date, instead of opening each one.
Finding what has slipped
Ask for overdue to-dos across all projects, grouped by how late they are.
Drafting an announcement without publishing it
Create a draft message or document, review it in Basecamp, and publish when you are ready.
Running a card table from the conversation
Read the columns and cards, create and move cards, and tick off card steps as work lands.
82 tools
Listed in project docs. Your client may show a different list.
get_projectsearch_basecampglobal_searchget_assignable_peopleget_person_assignmentsget_overdue_todosget_todolistsget_todolistcreate_todolistupdate_todolisttrash_todolistget_todosget_todocreate_todoupdate_tododelete_todoarchive_todocomplete_todouncomplete_todoreposition_todoget_todolist_groupscreate_todolist_groupreposition_todolist_groupget_message_boardget_messagesget_messageget_message_categoriescreate_messagecreate_draft_messageget_campfire_linesget_daily_check_insget_question_answersget_commentscreate_commentget_card_tablesget_card_tableget_columnsget_columncreate_columnupdate_columnmove_columnupdate_column_colorput_column_on_holdremove_column_holdwatch_columnunwatch_columnget_cardsget_cardcreate_cardupdate_cardmove_cardcomplete_carduncomplete_cardget_card_stepscreate_card_stepget_card_stepupdate_card_stepdelete_card_stepcomplete_card_stepuncomplete_card_stepget_inboxget_forwardsget_forwardget_inbox_repliesget_inbox_replytrash_forwardcreate_attachmentget_uploadsget_uploaddownload_uploaddownload_attachmentget_documentsget_documentcreate_documentcreate_draft_documentupdate_documenttrash_documentget_eventsget_webhookscreate_webhookdelete_webhookBEFORE YOU INSTALL
What to know first
Tools you get
82 tools named in the project's documentation. Tools can create todos, messages, comments, documents and webhooks, and trash or delete items, so granting OAuth lets it post to your team's message board.
Requires
- Python 3.10 or newer
- A Basecamp 3 account
- Your own Basecamp OAuth application from https://launchpad.37signals.com/integrations — its client ID and secret, your account ID and a USER_AGENT go in .env
INSTALLATION
Connect your client
Server setup
git clone https://github.com/georgeantonopoulos/Basecamp-MCP-Server.git
cd Basecamp-MCP-Server
uv venv --python 3.12 venv
source venv/bin/activate
uv pip install -r requirements.txt
cp .env.example .env
set BASECAMP_CLIENT_ID / BASECAMP_CLIENT_SECRET / BASECAMP_ACCOUNT_ID / USER_AGENT in .env
python oauth_app.pyOpen http://localhost:8000 and complete the OAuth flow
Write your client's MCP entry with the project's config generator for Claude Desktop, Cursor or Codex (commands in the client tabs below); it points the entry at this checkout's virtual environment and basecamp_fastmcp.py.
MCP Clients
Claude Desktop
python generate_claude_desktop_config.pyFully quit and reopen Claude Desktop. The generated config is written to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS), ~/AppData/Roaming/Claude/claude_desktop_config.json (Windows) or ~/.config/claude-desktop/claude_desktop_config.json (Linux).
Cursor
python generate_cursor_config.pyRestart Cursor and check Settings → MCP; the server should appear as basecamp.
Codex
python generate_codex_config.py
codex mcp get basecampThe script writes a basecamp server entry to ~/.codex/config.toml; add --dry-run to preview it first.