@yashwant.dharmdas/basecamp-mcp
v1.10.1
Published
MCP Server for Basecamp 3 - manage projects, todos, messages, and more via Claude
Maintainers
Readme
Basecamp MCP Server
An MCP (Model Context Protocol) server that enables LLMs like Claude to interact with your Basecamp 3 projects, to-dos, messages, campfire, and more.
Features
- 18 MCP Tools covering Basecamp's core features:
- Projects: list, get details, create, update
- To-do Lists: list, create
- To-dos: list, get, create, update, complete, uncomplete
- Messages: list, get, create
- Campfire (Chat): list messages, send message
- Comments: list, create on any recording
- People: list all, get own profile
- Dual Transport: Stdio (Claude Desktop) and HTTP/SSE (remote hosting)
- Auto Token Refresh: Automatically refreshes expired OAuth tokens
Quick Start
1. Register a Basecamp OAuth App
Go to launchpad.37signals.com/integrations and register a new application.
Set the Redirect URI to: http://localhost:3000/callback
2. Configure Environment
cp .env.example .envEdit .env and fill in your BASECAMP_CLIENT_ID and BASECAMP_CLIENT_SECRET.
3. Install Dependencies
npm install4. Authenticate
npm run authThis opens your browser to authorize the app and automatically saves your tokens.
5. Use with Claude Desktop
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"basecamp": {
"command": "node",
"args": ["D:/Projects/basecamp-mcp/dist/index.js", "--stdio"]
}
}
}Then restart Claude Desktop.
Available Tools
| Tool | Description |
|------|-------------|
| list_projects | List all accessible projects |
| get_project | Get project details + dock (tool IDs) |
| create_project | Create a new project |
| update_project | Update project name/description |
| list_todolists | List to-do lists in a todoset |
| create_todolist | Create a new to-do list |
| list_todos | List to-dos in a to-do list |
| get_todo | Get to-do details |
| create_todo | Create a new to-do (BC5: pass loose: true for unattached top-of-list to-dos) |
| update_todo | Update a to-do |
| complete_todo | Mark to-do as done |
| uncomplete_todo | Re-open a to-do |
| assign_todo | Set / add / remove assignees on a to-do (modes: set, add, remove) |
| create_subtask | BC5: Create a subtask under an existing to-do |
| list_subtasks | BC5: List subtasks of a parent to-do |
| list_messages | List messages on a board |
| get_message | Get full message content |
| create_message | Post a new message |
| list_campfire_lines | List recent chat messages |
| send_campfire_message | Send a campfire message |
| list_comments | List comments on a recording |
| create_comment | Add a comment to a recording |
| list_people | List all people on the account |
| get_my_profile | Get authenticated user profile |
Viewing images on Basecamp pages
Images attached to comments, to-dos, and messages are fetched directly via the Basecamp API — no browser, no cookies, no setup required.
The server uses a host-swap trick: preview.3.basecamp.com and storage.3.basecamp.com URLs are rewritten to 3.basecampapi.com + Bearer token, which triggers a 302 redirect to a signed S3 URL. The image streams back inline.
Use get_comment, get_todo, or get_message with the Basecamp URL. Images are returned as inline content blocks Claude can see. If a resource has many images and the total would exceed MCP's 1 MB cap, the tool returns as many as fit and reports omitted indices — re-call with image_indices=[3,4] to fetch specific ones.
HTTP Mode (for hosting)
npm run startThe server runs on port 3000 (configurable via PORT env var).
Health check:
GET /healthMCP endpoint:
POST /mcpMCP endpoint:
POST /mcp
Deployment (Render.com)
This server is ready to be deployed to Render as a Web Service.
1. Push to GitHub
Push your local repository to a private GitHub repository.
2. Connect to Render
- Create a new Web Service on Render.
- Connect your GitHub repository.
- Render will automatically detect the settings from
render.yaml.
3. Configure Environment Variables
Add the following variables in the Render Dashboard (or via the Blueprint setup):
BASECAMP_CLIENT_IDBASECAMP_CLIENT_SECRETBASECAMP_REDIRECT_URI:https://your-service-name.onrender.com/callbackBASECAMP_ACCESS_TOKENBASECAMP_REFRESH_TOKENBASECAMP_ACCOUNT_ID
[!IMPORTANT] Since Render's free tier has an ephemeral filesystem, the server cannot permanently update your
.envfile when tokens are refreshed. If the server is restarted/redeployed, it will revert to the initial tokens you provided in the environment variables. If tokens expire, you may need to re-runnpm run authlocally and update the Render environment variables with the new tokens.
4. Update Basecamp Redirect URI
Don't forget to add your Render URL (e.g., https://your-service-name.onrender.com/callback) to your application's Redirect URIs in the Basecamp Launchpad.
