Basecamp Classic MCP Server
Allows interaction with a Basecamp Classic account to manage projects, to-do lists, to-do items, messages, comments, people, milestones, and time entries.
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 Classic MCP Server List all active projects"
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 Classic MCP Server
An MCP server for the Basecamp Classic API, built with FastMCP.
Setup
uv syncRelated MCP server: Basecamp MCP Server
Configuration
Set these environment variables before running:
Variable | Description |
| Your Basecamp account URL, e.g. |
| Your Basecamp username or API token |
| Your Basecamp password (or |
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-mcpDevelopment
Use the MCP Inspector to interactively test tools in a browser UI:
uv run --env-file .env fastmcp dev inspector server.py:mcpClaude 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
Available Tools
23 toolscomplete_milestoneB
Mark a milestone as complete.
Args: milestone_id: The numeric milestone ID.
Inputs: milestone_id (required). Returns: result
complete_todo_itemB
Mark a to-do item as complete.
Args: todo_item_id: The numeric to-do item ID.
Inputs: todo_item_id (required). Returns: result
create_commentA
Add a comment to a message/post.
Args: message_id: The numeric message ID. body: The comment body (HTML allowed).
Inputs: body (required), message_id (required). Returns: object
create_messageA
Create a new message/post in a project.
Args: project_id: The numeric project ID. title: The message title. body: The message body (HTML allowed). category_id: Optional category ID for the message. private: Whether the message is private.
Inputs: body (required), title (required), project_id (required), private, +1 more. Returns: object
create_time_entryA
Log a time entry on a project.
Args: project_id: The numeric project ID. date: Date of the time entry in YYYY-MM-DD format. hours: Number of hours to log (e.g. 1.5). description: Description of work done. person_id: Optional person ID (defaults to current user). todo_item_id: Optional to-do item ID to associate the entry with.
Inputs: date (required), hours (required), project_id (required), description (required), +2 more. Returns: object
create_todo_itemA
Create a new to-do item in a to-do list.
Args: todo_list_id: The numeric to-do list ID. content: The text of the to-do item. responsible_party_id: Optional person ID to assign the item to. due_at: Optional due date in YYYY-MM-DD format. notify: Whether to notify the assigned person.
Inputs: content (required), todo_list_id (required), due_at, notify, +1 more. Returns: object
delete_todo_itemADestructive
Delete a to-do item.
Args: todo_item_id: The numeric to-do item ID.
Inputs: todo_item_id (required). Returns: result
get_current_personARead-only
Get the currently authenticated person's details.
Inputs: no named parameters. Returns: object
get_messageARead-only
Get a specific message/post with its body.
Args: message_id: The numeric message ID.
Inputs: message_id (required). Returns: object
get_personARead-only
Get details for a specific person.
Args: person_id: The numeric person ID.
Inputs: person_id (required). Returns: object
get_projectARead-only
Get details for a specific Basecamp Classic project.
Args: project_id: The numeric project ID.
Inputs: project_id (required). Returns: object
get_todo_listARead-only
Get a specific to-do list with its items.
Args: todo_list_id: The numeric to-do list ID.
Inputs: todo_list_id (required). Returns: object
list_commentsARead-only
List comments on a message/post.
Args: message_id: The numeric message ID.
Inputs: message_id (required). Returns: result
list_messagesARead-only
List recent messages/posts for a project.
Args: project_id: The numeric project ID.
Inputs: project_id (required). Returns: result
list_milestonesARead-only
List all milestones for a project.
Args: project_id: The numeric project ID.
Inputs: project_id (required). Returns: result
list_peopleARead-only
List all people in the Basecamp Classic account.
Inputs: no named parameters. Returns: result
list_projectsARead-only
List all active Basecamp Classic projects.
Inputs: no named parameters. Returns: result
list_time_entriesARead-only
List all time entries for a project.
Args: project_id: The numeric project ID.
Inputs: project_id (required). Returns: result
list_todo_itemsARead-only
List all to-do items in a to-do list.
Args: todo_list_id: The numeric to-do list ID.
Inputs: todo_list_id (required). Returns: result
list_todo_listsBRead-only
List all to-do lists for a project.
Args: project_id: The numeric project ID.
Inputs: project_id (required). Returns: result
uncomplete_milestoneB
Mark a milestone as incomplete.
Args: milestone_id: The numeric milestone ID.
Inputs: milestone_id (required). Returns: result
uncomplete_todo_itemB
Mark a to-do item as incomplete.
Args: todo_item_id: The numeric to-do item ID.
Inputs: todo_item_id (required). Returns: result
update_todo_itemA
Update an existing to-do item.
Args: todo_item_id: The numeric to-do item ID. content: New text for the item. responsible_party_id: Person ID to assign the item to (use 0 to unassign). due_at: Due date in YYYY-MM-DD format. notify: Whether to notify the assigned person.
Inputs: todo_item_id (required), due_at, notify, content, +1 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 23 tools
Each tool targets a distinct resource and action (e.g., projects, todo lists/items, messages, comments, people, milestones, time entries). No two tools appear to perform the same function; even paired operations like complete_todo_item vs complete_milestone are clearly differentiated by resource type.
All tool names follow a consistent verb_noun pattern using snake_case (e.g., list_projects, create_todo_item, complete_milestone). The verbs (list, get, create, update, delete, complete, uncomplete) are used uniformly across resource types, making the set predictable and readable.
With 23 tools, the server is on the heavier side but still well-scoped for Basecamp Classic's broad feature set. Each area (projects, todos, messages, comments, people, milestones, time entries) has enough tools to be useful, though a few like get_current_person could be seen as extras.
The server covers full lifecycle for todo items and provides create/read for messages and time entries, but lacks create/update/delete for projects, messages, comments, and milestones. This leaves notable gaps in CRUD coverage, though the read-focused scope may be intentional.
Related MCP Connectors
Basecamp's official server: projects, to-dos, cards, messages, docs, schedules, and Campfire.
Read time entries, projects, clients, tasks and invoices; log and update tracked time.
Read teams, spaces, lists and tasks; create, update and comment on tasks and track time.
Read projects, tasks, comments, people and time entries; create tasks and comments in ProofHub.
Related MCP Servers
- AlicenseBqualityDmaintenanceConnects AI assistants to the Basecamp 2 API, enabling management of projects, todos, messages, and people directly through natural language.1710 npmMIT
- FlicenseNot gradedqualityAmaintenanceEnables MCP-capable clients to browse, search, and manage Basecamp 3 projects, todolists, todos, messages, campfires, card tables, inbox forwards, documents, uploads, comments, events, and webhooks through OAuth-authenticated API calls, including downloading attachments as readable content.-
- FlicenseNot gradedqualityAmaintenanceEnables MCP-capable clients such as Codex, Cursor, and Claude Desktop to browse and manage Basecamp 3 projects through OAuth-authenticated API calls, covering projects, todos, messages, card tables, documents, uploads, comments, events, webhooks, and search.-
- FlicenseNot gradedqualityAmaintenanceEnables MCP-capable clients such as Codex, Cursor, and Claude Desktop to read and manage Basecamp 3 projects through OAuth-authenticated API calls. Covers projects, todolists and todos, message boards, campfires, card tables, inbox forwards, documents, uploads, comments, events, webhooks, and search.-