An MCP (Model Context Protocol) server that provides full Basecamp 4 API access for Claude Code.
-
32 tools covering the full Basecamp 4 API:
- Projects (list, get, create, update, trash)
- To-do Lists & To-dos (CRUD, complete/uncomplete)
- Messages (list, get, create, update)
- Comments (list, create, update)
- People (list, get current user, project members)
- Schedule Entries (list, get, create, update)
- Documents (list, get, create, update)
-
OAuth 2.0 authentication with automatic token refresh
-
Rate limiting handling with retry guidance
- Node.js 18+
- A Basecamp 4 account
- OAuth application credentials from Basecamp
- Go to https://launchpad.37signals.com/integrations
- Click "Register your application"
- Fill in the details:
- Name: Claude Code MCP (or any name you prefer)
- Website: Your website or
http://localhost - Redirect URI:
http://localhost:9876/callback
- Save and note your Client ID and Client Secret
Your Basecamp account ID is in your Basecamp URL:
https://3.basecamp.com/YOUR_ACCOUNT_ID/...
Add these to your shell profile (.bashrc, .zshrc, etc.):
export BASECAMP_CLIENT_ID="your-client-id"
export BASECAMP_CLIENT_SECRET="your-client-secret"
export BASECAMP_ACCOUNT_ID="your-account-id"cd basecamp-mcp
npm install
npm run buildAdd the MCP server to your Claude Code configuration. Create or edit .mcp.json in your project root:
{
"basecamp": {
"command": "node",
"args": ["/path/to/basecamp-mcp/dist/index.js"],
"env": {
"BASECAMP_CLIENT_ID": "${BASECAMP_CLIENT_ID}",
"BASECAMP_CLIENT_SECRET": "${BASECAMP_CLIENT_SECRET}",
"BASECAMP_ACCOUNT_ID": "${BASECAMP_ACCOUNT_ID}"
}
}
}To auto-approve Basecamp tools, add to .claude/settings.json:
{
"allow": [
"mcp__basecamp__*"
]
}On first use, the MCP server will:
- Open your browser to Basecamp's authorization page
- After you authorize, redirect to
localhost:9876/callback - Store tokens in
~/.basecamp-mcp/tokens.json
Subsequent runs will use the stored tokens (with automatic refresh).
| Tool | Description |
|---|---|
basecamp_list_projects |
List all projects (optionally filter by status) |
basecamp_get_project |
Get project details including dock tools |
basecamp_create_project |
Create a new project |
basecamp_update_project |
Update project name/description |
basecamp_trash_project |
Move project to trash |
| Tool | Description |
|---|---|
basecamp_list_todolists |
List to-do lists in a project |
basecamp_get_todolist |
Get to-do list details |
basecamp_create_todolist |
Create a new to-do list |
basecamp_list_todos |
List to-dos in a list |
basecamp_get_todo |
Get to-do details |
basecamp_create_todo |
Create a to-do with assignees, due date |
basecamp_update_todo |
Update a to-do |
basecamp_complete_todo |
Mark to-do as complete |
basecamp_uncomplete_todo |
Mark to-do as incomplete |
| Tool | Description |
|---|---|
basecamp_list_messages |
List messages on a board |
basecamp_get_message |
Get message details |
basecamp_create_message |
Post a new message |
basecamp_update_message |
Update a message |
| Tool | Description |
|---|---|
basecamp_list_comments |
List comments on any item |
basecamp_create_comment |
Add a comment |
basecamp_update_comment |
Update a comment |
| Tool | Description |
|---|---|
basecamp_list_people |
List all people in account |
basecamp_get_person |
Get person details |
basecamp_get_me |
Get current user's profile |
basecamp_list_project_people |
List project members |
| Tool | Description |
|---|---|
basecamp_list_schedule_entries |
List calendar events |
basecamp_get_schedule_entry |
Get event details |
basecamp_create_schedule_entry |
Create a calendar event |
basecamp_update_schedule_entry |
Update a calendar event |
| Tool | Description |
|---|---|
basecamp_list_documents |
List documents in vault |
basecamp_get_document |
Get document content |
basecamp_create_document |
Create a new document |
basecamp_update_document |
Update a document |
# List all projects
basecamp_list_projects
# Get project details (includes dock IDs for other tools)
basecamp_get_project project_id:12345
# Create a to-do
basecamp_create_todo project_id:12345 todolist_id:67890 content:"Review PR #123" due_on:"2024-01-20"
# Post a message
basecamp_create_message project_id:12345 message_board_id:11111 subject:"Sprint Update" content:"<p>All tasks completed!</p>"
Ensure environment variables are set and exported in your shell.
Find your account ID in your Basecamp URL (the number after 3.basecamp.com/).
- Ensure port 9876 is available
- Check that the redirect URI in your Basecamp app matches exactly:
http://localhost:9876/callback
The server will report the Retry-After value. Wait and try again.
OAuth tokens are stored in ~/.basecamp-mcp/tokens.json with restricted permissions (600). To re-authenticate, delete this file and restart Claude Code.
Based on the Basecamp 4 API.