Basecamp Classic MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BASECAMP_URL | Yes | Your Basecamp account URL, e.g. https://yourcompany.basecamphq.com | |
| BASECAMP_PASSWORD | Yes | Your Basecamp password (or X if using an API token) | |
| BASECAMP_USERNAME | Yes | Your Basecamp username or API token |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_projectsA | List all active Basecamp Classic projects. |
| get_projectA | Get details for a specific Basecamp Classic project. Args: project_id: The numeric project ID. |
| list_todo_listsB | List all to-do lists for a project. Args: project_id: The numeric project ID. |
| get_todo_listA | Get a specific to-do list with its items. Args: todo_list_id: The numeric to-do list ID. |
| list_todo_itemsA | List all to-do items in a to-do list. Args: todo_list_id: The numeric to-do list ID. |
| 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. |
| 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. |
| complete_todo_itemB | Mark a to-do item as complete. Args: todo_item_id: The numeric to-do item ID. |
| uncomplete_todo_itemB | Mark a to-do item as incomplete. Args: todo_item_id: The numeric to-do item ID. |
| delete_todo_itemA | Delete a to-do item. Args: todo_item_id: The numeric to-do item ID. |
| list_messagesA | List recent messages/posts for a project. Args: project_id: The numeric project ID. |
| get_messageA | Get a specific message/post with its body. Args: message_id: The numeric message ID. |
| 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. |
| list_commentsA | List comments on a message/post. Args: message_id: The numeric message ID. |
| create_commentA | Add a comment to a message/post. Args: message_id: The numeric message ID. body: The comment body (HTML allowed). |
| list_peopleA | List all people in the Basecamp Classic account. |
| get_personA | Get details for a specific person. Args: person_id: The numeric person ID. |
| get_current_personA | Get the currently authenticated person's details. |
| list_milestonesA | List all milestones for a project. Args: project_id: The numeric project ID. |
| complete_milestoneB | Mark a milestone as complete. Args: milestone_id: The numeric milestone ID. |
| uncomplete_milestoneB | Mark a milestone as incomplete. Args: milestone_id: The numeric milestone ID. |
| list_time_entriesA | List all time entries for a project. Args: project_id: The numeric project ID. |
| 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| resource_list_projects | All active Basecamp Classic projects. |
| resource_list_people | All people in the Basecamp Classic account. |
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.