Basecamp 2 MCP Server
This server lets Claude (or any MCP client) manage Basecamp 2 projects, todo lists, todos, comments, attachments, people, and activity feeds through natural language.
Projects: list/search projects, get project details, archive or unarchive a project
Todo lists: list all lists in a project, get a specific list with its todos, create new todo lists
Todos: create todos with assignee, due date, and attachments; update todo content, assignee, due date, completion, or position; get a todo including its comments
Comments: add comments to todos or todo lists, optionally with attachments and subscriber notifications
Attachments: upload a local file to Basecamp 2 to get an attachment token, then attach it to todos or comments
People: list all visible people and list people with access to a specific project
Activity feeds: get account-wide events (who did what, when, in which project) and per-person activity, with normalized summaries and optional raw payloads
Allows managing Basecamp 2 projects, todo lists, and todo items (including assignees, due dates, and attachments) via the Basecamp REST API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Basecamp 2 MCP Server Create a new todo list for the design project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Basecamp 2 MCP Server
An MCP (Model Context Protocol) server that wraps the Basecamp 2 REST API, enabling Claude to create and manage todos through natural language.
Prerequisites
Node.js 18+
A Basecamp 2 account with API credentials (username/password)
Related MCP server: Basecamp MCP Server by CData
Setup
Clone the repo and install dependencies:
git clone <repo-url>
cd Basecamp2_mcp
npm installCreate a
.envfile (or set environment variables directly):
cp .env.example .envFill in the 4 required variables:
Variable | Description |
| Your Basecamp account ID (the number in your Basecamp URL) |
| Your Basecamp login email |
| Your Basecamp login password |
| A User-Agent string identifying your app (e.g. |
Basecamp 2 requires a User-Agent with contact info per their API policy.
MCP Client Configuration
Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"basecamp2": {
"command": "node",
"args": ["/absolute/path/to/Basecamp2_mcp/src/index.js"],
"env": {
"BASECAMP_ACCOUNT_ID": "your-account-id",
"BASECAMP_USERNAME": "your-email",
"BASECAMP_PASSWORD": "your-password",
"BASECAMP_USER_AGENT": "YourApp (you@example.com)"
}
}
}
}Claude Code
Add to your Claude Code settings (.claude/settings.json or via claude mcp add):
claude mcp add basecamp2 -- node /absolute/path/to/Basecamp2_mcp/src/index.jsSet the environment variables in your shell or .env file before starting Claude Code.
Tools
Tool | Description |
| List all active projects |
| Get details of a specific project |
| List all todo lists in a project |
| Get a todo list with its todos |
| Create a new todo list |
| Create a todo item (with optional assignee, due date, attachments) |
| Update a todo (content, assignee, due date, completion, position) |
| Get a todo item including its comments |
| Comment on a todo or todo list (with optional attachments) |
| Upload a file and get an attachment token + name |
| List all people visible to you |
| List people with access to a project |
| Account-wide activity feed — who did what, when, in which project |
| One person's activity — what they commented on, changed, completed or created |
Troubleshooting
"Missing required environment variables" — Ensure all 4 env vars are set. Check .env.example for the list.
401 Unauthorized — Verify your username and password. Basecamp 2 uses HTTP Basic Auth with your login credentials.
403 Forbidden — Your User-Agent may be missing or not include contact info.
429 Too Many Requests — The server automatically retries once after the Retry-After delay. If you still hit rate limits, slow down your requests.
Connection errors — Confirm your BASECAMP_ACCOUNT_ID is correct and that you can access https://basecamp.com/<id> in a browser.
Activity feeds
list_events and list_person_events wrap Basecamp 2's events.json endpoints. They exist for
answering "what has this person been up to" without asking them — the per-person route is the one
BC2 serves best.
Both return a normalized row by default:
{ "id": 2814733369,
"created_at": "2026-09-16T04:07:22.000-07:00",
"action": "commented on",
"summary": "commented on TIME QUOTE: CV2 - Envisia Learning - Adding results from another as...",
"target": "TIME QUOTE: CV2 - Envisia Learning - Adding results from another as...",
"excerpt": "The import file would be around 5-6 hours The report scoring would be around 4 hours",
"creator": null,
"project": { "id": 17514231, "name": "@Time Quotes" },
"eventable": { "type": "Todo", "id": 519880692 },
"url": "https://basecamp.com/1757845/projects/17514231/todos/519880692#comment_978900828" }Two things worth knowing:
actionandsummaryarrive with raw HTML. A renamed to-do comes back aschanged a to-do from '<img alt="x" src="https://bcx-production-assets-cdn…'. Both tools strip tags and entities;excerptprefers Basecamp's already-plainraw_excerpt. Passraw: truefor the untouched payload.creatorisnullonlist_person_events— Basecamp omits it because the person is implied by the path. Attribute from theperson_idyou asked for, never from this field. It IS populated onlist_events.
Always pass since (ISO8601); without it you get only the most recent page. all_pages: true
paginates the whole window, which can be slow over a long one.
Available Tools
13 toolsarchive_projectC
Archive or unarchive a Basecamp 2 project
Inputs: archived (required), project_id (required).
create_commentC
Create a comment on a todo or todo list
Inputs: type (required), content (required), project_id (required), resource_id (required), +2 more.
create_todoC
Create a new todo item in a todo list
Inputs: content (required), project_id (required), todolist_id (required), due_at, +2 more.
create_todolistC
Create a new todo list in a project
Inputs: name (required), project_id (required), description.
get_projectC
Get details of a specific project
Inputs: project_id (required).
get_project_accessesC
List all people with access to a specific project
Inputs: project_id (required).
get_todoB
Get a specific todo item including its comments
Inputs: todo_id (required), project_id (required).
get_todolistB
Get a specific todo list with its todos
Inputs: project_id (required), todolist_id (required).
list_peopleA
List all people visible to the current user. Returns id, name, and email.
Inputs: no named parameters.
list_projectsA
Search for active Basecamp 2 projects by name. Returns id, name, and description. Use a search term to filter — omit to list all.
Inputs: name.
list_todolistsB
List all todo lists in a project
Inputs: project_id (required).
update_todoC
Update an existing todo item
Inputs: todo_id (required), project_id (required), due_at, content, +3 more.
upload_attachmentA
Upload a file to Basecamp 2 and get an attachment token. Returns { token, name }; pass both (as one of the "attachments" entries) to create_todo or create_comment to actually attach the file.
Inputs: file_path (required), content_type (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 13 tools
Tools are mostly distinct, but the presence of both 'list_todolists' and 'get_todolist' could be confused, as they both retrieve todo lists. However, descriptions clarify the difference between listing all and getting a specific one with todos.
All tool names follow a consistent verb_noun pattern (e.g., list_todolists, get_project, create_todo). There are no naming inconsistencies; even compound nouns like 'todolists' are used consistently.
13 tools is well within the ideal range (3-15) and each tool serves a clear purpose in the Basecamp 2 domain. The count is appropriate for covering core operations without being excessive.
The toolset covers projects, todolists, todos, comments, attachments, and people, but lacks delete operations for todos/todolists, and doesn't include updates for projects or todolists. These gaps may hinder full lifecycle management.
Maintenance
Related MCP Connectors
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Official Todoist MCP server. Manage tasks and projects. Hosted, no API key needed.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that connects Claude with Todoist for complete task and project management through natural language.86248 npm246MIT
- AlicenseNot gradedqualityDmaintenanceThis read-only MCP Server allows you to connect to Basecamp data from Claude Desktop through CData JDBC Drivers. Free (beta) read/write servers available at https://www.cdata.com/solutions/mcp2MIT
- FlicenseNot gradedqualityFmaintenanceMCP server that connects Claude to Todoist, enabling full CRUD operations on tasks, projects, sections, comments, and labels.-
- AlicenseNot gradedqualityDmaintenanceMCP server exposing Basecamp CLI commands as tools for project management, todos, messages, and more.MIT