Basecamp Classic MCP Server
An MCP server for the Basecamp Classic API, built with FastMCP.
Setup
uv sync
Configuration
Set these environment variables before running:
| Variable | Description | |---|---| | BASECAMP_URL | Your Basecamp account URL, e.g. https://yourcompany.basecamphq.com | | BASECAMP_USERNAME | Your Basecamp username or API token | | BASECAMP_PASSWORD | Your Basecamp password (or X if using an API token) |
To use an API token instead of password: set BASECAMP_USERNAME to your token and BASECAMP_PASSWORD to X.
Running
# stdio (for Claude Desktop / MCP clients)
uv run python server.py
# or via entry point
uv run basecamp-classic-mcp
Development
Use the MCP Inspector to interactively test tools in a browser UI:
uv run --env-file .env fastmcp dev inspector server.py:mcp
Claude Desktop configuration
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"basecamp-classic": {
"command": "uv",
"args": ["run", "--directory", "/path/to/basecamp-classic-mcp", "python", "server.py"],
"env": {
"BASECAMP_URL": "https://yourcompany.basecamphq.com",
"BASECAMP_USERNAME": "your-api-token",
"BASECAMP_PASSWORD": "X"
}
}
}
}
Available Tools
Projects
list_projects— List all active projectsget_project(project_id)— Get project details
To-do Lists
list_todo_lists(project_id)— List to-do lists in a projectget_todo_list(todo_list_id)— Get a to-do list with its items
To-do Items
list_todo_items(todo_list_id)— List items in a to-do listcreate_todo_item(todo_list_id, content, ...)— Create a new to-do itemupdate_todo_item(todo_item_id, ...)— Update an existing to-do itemcomplete_todo_item(todo_item_id)— Mark an item completeuncomplete_todo_item(todo_item_id)— Mark an item incompletedelete_todo_item(todo_item_id)— Delete a to-do item
Messages
list_messages(project_id)— List recent messages in a projectget_message(message_id)— Get a message with its bodycreate_message(project_id, title, body, ...)— Post a new message
Comments
list_comments(message_id)— List comments on a messagecreate_comment(message_id, body)— Add a comment to a message
People
list_people— List all people in the accountget_person(person_id)— Get a person's detailsget_current_person— Get the authenticated user's details
Milestones
list_milestones(project_id)— List milestones in a projectcomplete_milestone(milestone_id)— Mark a milestone completeuncomplete_milestone(milestone_id)— Mark a milestone incomplete
Time Entries
list_time_entries(project_id)— List time entries for a projectcreate_time_entry(project_id, date, hours, description, ...)— Log time on a project











