Skip to main content
Glama
envisialearning

Basecamp 2 MCP Server

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

  1. Clone the repo and install dependencies:

git clone <repo-url>
cd Basecamp2_mcp
npm install
  1. Create a .env file (or set environment variables directly):

cp .env.example .env

Fill in the 4 required variables:

Variable

Description

BASECAMP_ACCOUNT_ID

Your Basecamp account ID (the number in your Basecamp URL)

BASECAMP_USERNAME

Your Basecamp login email

BASECAMP_PASSWORD

Your Basecamp login password

BASECAMP_USER_AGENT

A User-Agent string identifying your app (e.g. MyApp (you@example.com))

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.js

Set the environment variables in your shell or .env file before starting Claude Code.

Tools

Tool

Description

list_projects

List all active projects

get_project

Get details of a specific project

list_todolists

List all todo lists in a project

get_todolist

Get a todo list with its todos

create_todolist

Create a new todo list

create_todo

Create a todo item (with optional assignee, due date, attachments)

update_todo

Update a todo (content, assignee, due date, completion, position)

get_todo

Get a todo item including its comments

create_comment

Comment on a todo or todo list (with optional attachments)

upload_attachment

Upload a file and get an attachment token + name

list_people

List all people visible to you

get_project_accesses

List people with access to a project

list_events

Account-wide activity feed — who did what, when, in which project

list_person_events

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:

  • action and summary arrive with raw HTML. A renamed to-do comes back as changed a to-do from '<img alt="x" src="https://bcx-production-assets-cdn…'. Both tools strip tags and entities; excerpt prefers Basecamp's already-plain raw_excerpt. Pass raw: true for the untouched payload.

  • creator is null on list_person_events — Basecamp omits it because the person is implied by the path. Attribute from the person_id you asked for, never from this field. It IS populated on list_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 tools
archive_projectC

Archive or unarchive a Basecamp 2 project

ParametersJSON Schema
NameRequiredDescriptionDefault
archivedYestrue to archive, false to unarchive
project_idYesThe project ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It implies a reversible mutation ('or unarchive'), but does not state permission requirements, side effects, or whether archiving hides the project from other listings. These gaps matter for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with zero waste, front-loading the action and the target resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is too thin. It should explain side effects (e.g., visibility to other users), required permissions, and whether the operation is reversible, but leaves these unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already fully documented. The description restates the archive/unarchive concept but adds no syntax or extra meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Archive or unarchive a Basecamp 2 project.' It clearly covers both the archive and unarchive operations. However, it does not explicitly differentiate itself from any sibling tool, though no sibling overlaps this capability.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, prerequisites, or alternative tools are mentioned. The agent must infer that this is the correct tool for changing project archival status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_commentC

Create a comment on a todo or todo list

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesWhether to comment on a todo or todolist
contentYesThe comment text
project_idYesThe project ID
attachmentsNoFiles to attach, as { token, name } objects (token from upload_attachment)
resource_idYesThe ID of the todo or todolist
subscribersNoPerson IDs to notify about this comment

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states that it creates a comment but does not mention required permissions, whether the comment triggers notifications (subscribers parameter exists), whether it is reversible, or what the response looks like. This is a significant gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no waste. It is appropriately sized and front-loaded, though it could be slightly more informative without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, 4 required, mutation operation, relationships with siblings like upload_attachment and list_people), the description is incomplete. It lacks usage context, behavioral details, and any information about side effects or integration with other tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional parameter semantics beyond what is in the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Create a comment on a todo or todo list'), which is clear and matches the tool's function. However, it does not differentiate from sibling tools like create_todo or create_todolist, which are similarly named, so an agent might confuse which creation tool to use without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus alternatives. It does not mention prerequisites such as needing a todo or todolist to exist, or how it relates to sibling tools like upload_attachment for attachments.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_todoC

Create a new todo item in a todo list

ParametersJSON Schema
NameRequiredDescriptionDefault
due_atNoDue date in ISO 8601 format (YYYY-MM-DD)
contentYesThe todo text
project_idYesThe project ID
assignee_idNoPerson ID to assign the todo to
attachmentsNoFiles to attach, as { token, name } objects (token from upload_attachment)
todolist_idYesThe todo list ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, but only restates the mutation. It says nothing about required permissions, whether the created todo is assigned/notified, whether attachments must be uploaded first via upload_attachment, or what the call returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence with zero padding or redundancy. It is lean, though the brevity veers toward under-specification rather than over-explanation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter creation tool with no annotations and no output schema, the description omits the project/todolist scoping requirement and the attachment workflow, leaving significant gaps an agent must infer from the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (due_at format, attachment token origin, assignee_id) is already documented in the schema. The description adds no format, default, or relationship detail beyond 'todo item in a todo list', so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Create a new todo item') with immediate scope ('in a todo list'), so the agent knows this creates rather than updates or lists todos. However, it never distinguishes itself from siblings like create_todolist or create_comment beyond the resource name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives such as update_todo for modifying an existing item. The agent gets no routing help beyond the tool name itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_todolistC

Create a new todo list in a project

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the todo list
project_idYesThe project ID
descriptionNoDescription of the todo list

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It implies a mutation but says nothing about required permissions, whether the list name must be unique within the project, or whether the project_id must reference an existing project.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler or redundancy. It is efficient, though its brevity leaves room for more useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter creation tool with a fully documented schema and no output schema, the description is minimally adequate. It omits any behavioral context around the mutation, which is a gap given the absence of annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (name, project_id, description) are already documented in the schema. The description adds no syntax or format detail beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb+resource combination ("Create a new todo list") and adds scope ("in a project"). It does not explicitly differentiate from siblings like create_todo, though the name and resource make the distinction reasonably obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as create_todo, nor any stated prerequisites. The agent must infer that this is used when a new list is needed inside an existing project.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_projectC

Get details of a specific project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project ID

TDQS

C2.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. It says nothing about read-only nature, authentication needs, or return shape. For a read tool with zero annotation coverage, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no waste. It is appropriately sized for a simple getter, though it is almost too terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one required parameter, no output schema, no annotations). The description covers the basic purpose but omits any behavioral context such as read-only semantics or expected response. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the single required project_id parameter. The description adds no parameter details beyond what the schema provides; baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (project) with scope (specific project). Distinguishes from list_projects by implying single-item retrieval, though it does not explicitly name or contrast with siblings like get_project_accesses or list_projects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no alternatives mentioned, and no exclusions. The agent must infer that this is for fetching one project by ID rather than listing projects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_accessesC

List all people with access to a specific project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the entire burden. It implies a read-only list operation but says nothing about required permissions, whether owners/admins/guests are included, what the 'access' concept covers, or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. It is efficient, though its brevity borders on under-specification rather than tight concision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter list tool with no output schema, the description is minimally adequate. It omits what the returned access entries contain (roles, permissions) and any authorization context, which would help an agent call it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so project_id is already documented in the schema. The description adds only the notion of 'a specific project', matching the schema baseline without extra syntax or format detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (people with access to a specific project), which is clear enough to distinguish it from siblings like list_people and get_project. However, it doesn't explicitly contrast itself with list_people, which could be confused as a broader version of the same thing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives such as list_people or get_project. The agent must infer usage purely from the one-line purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_todoB

Get a specific todo item including its comments

ParametersJSON Schema
NameRequiredDescriptionDefault
todo_idYesThe todo ID
project_idYesThe project ID

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses one useful trait — that comments are bundled into the response — but says nothing about read-only safety, permission requirements, or behavior when the todo_id is not found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the resource and the inclusion of comments are both stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool this is minimally adequate, particularly since 100% schema coverage documents the inputs. However, with no output schema and no annotations, the description could have described the returned item shape or error behavior and does not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (both project_id and todo_id are documented in the schema), so the baseline of 3 applies. The description adds no extra meaning about parameter format or constraints beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and resource (todo item), and adds a scope detail — that comments are included — which distinguishes it from a bare item fetch or the sibling list_todolists/create_todo tools. It stops short of naming get_todolist or explaining how it differs from that sibling, so it isn't fully differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus get_todolist, list_todolists, or update_todo, and no prerequisites or context are given. The description simply says what it does, leaving the agent to infer selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_todolistB

Get a specific todo list with its todos

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project ID
todolist_idYesThe todo list ID

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. It doesn't mention whether this is a read-only operation (though implied by 'get'), nor does it describe error behavior, permissions, or response format. It only says it gets the list and its todos.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that is front-loaded with the action and resource. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (2 parameters, no output schema, no annotations), the description is adequate but minimal. It doesn't explain what 'with its todos' means (e.g., whether it includes nested todos or just a list), leaving some ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description adds no additional parameter semantics beyond what is in the schema. A baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (get) and resource (a specific todo list with its todos), which is clear. It distinguishes itself from list_todolists (which would list all lists) and from get_todo (which gets a single todo). However, it doesn't explicitly contrast with these siblings in the text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like list_todolists or get_todo. The description merely states what it does, not when it should be chosen.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_peopleA

List all people visible to the current user. Returns id, name, and email.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose two useful behavioral facts: results are filtered to the current user's visibility, and the return shape is id/name/email. It says nothing about pagination, ordering, or whether the list can be empty, which for a directory-style listing is a real gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the scoping constraint front-loaded before the return-value statement. Nothing could be trimmed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read with no annotations and no output schema, the description covers purpose, scope, and return fields. The only missing element is any note on result size or pagination, which is minor at this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description adds the returned field set (id, name, email), which is useful given there is no output schema, and introduces no misleading parameter expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (people) with an explicit scope: 'visible to the current user.' That scope clause is genuinely informative, but the description does not distinguish it from the other list_* siblings (list_todolists, list_projects), which the name already largely separates by resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the name and by the visibility scope, but there is no explicit when-to-use, no exclusions, and no mention of alternatives among the many sibling list tools. Adequate for a trivial tool, but nothing is spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoCase-insensitive search term to filter projects by name

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full load. It helpfully discloses scope ('active' projects only, implying archived ones are excluded) and the returned fields (id, name, description), but says nothing about pagination, result limits, or auth despite being a listing operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core action and what is returned, with no wasted wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by naming the returned fields and the active-only scope. It omits pagination and result-limit behavior, but is otherwise sufficient for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (case-insensitive filter is documented there), and the description adds the behavioral meaning of omitting the term ('omit to list all'), which the schema alone does not convey. Slight value-add beyond the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: 'Search for active Basecamp 2 projects by name.' The resource 'projects' is distinguishable from siblings like get_project and list_todolists, though it does not explicitly contrast itself with get_project for a single project.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains how to use the search term ('omit to list all'), which is param usage rather than when-to-use guidance. It never states when to choose this over get_project or another sibling, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_todolistsB

List all todo lists in a project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe project ID

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it only restates the listing action. It never states that this is a read-only operation, whether project access/permissions are required, whether results are paginated or truncated, or what happens if project_id does not exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence, front-loaded with the verb and resource, with no filler or redundancy. Nothing could be removed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter list tool, the definition covers the minimum: what it lists and its scope. Without annotations or an output schema it should at least note the read-only nature and return shape, which it omits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is a single required parameter, so the schema already documents project_id fully. The phrase 'in a project' implies the scoping but adds no format, type, or validity detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('todo lists') with scope ('in a project'), so an agent can distinguish it from get_todolist and create_todolist by intent. It stops short of naming a sibling explicitly, so it does not reach the 5 tier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no reference to the alternatives (get_todolist for a single list, create_todolist for creation). The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_todoC

Update an existing todo item

ParametersJSON Schema
NameRequiredDescriptionDefault
due_atNoDue date (YYYY-MM-DD), or null to remove
contentNoNew todo text
todo_idYesThe todo ID
positionNoPosition in the list (1-based)
completedNoWhether the todo is completed
project_idYesThe project ID
assignee_idNoPerson ID to assign to, or null to unassign

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden, and it discloses almost nothing. It doesn't say whether this is a partial/patch update, what permissions are required, whether omitted fields are preserved, or whether the change is reversible. 'Update' at least signals a mutation, but that is the bare minimum.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single, front-loaded sentence with no wasted words. The downside is under-specification rather than verbosity, which is properly penalized in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with no annotations and no output schema, one sentence is insufficient. The agent learns nothing about partial-update semantics, permission requirements, or side effects, leaving gaps the schema cannot fill.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all seven parameters individually documented (including null semantics for due_at and assignee_id). The description adds no parameter meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a clear verb ('Update') and resource ('an existing todo item'), so the purpose is unambiguous. It does not differentiate from sibling operations like create_todo or get_todo, nor does it indicate which fields are mutable, which keeps it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as create_todo or get_todo, and no prerequisites or conditions are stated. The agent must infer usage entirely from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesAbsolute path to the file to upload
content_typeYesMIME type of the file (e.g. image/png)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. It does disclose the return payload and the non-obvious two-step semantics (upload then attach), which is genuinely useful. However it says nothing about permissions, file size limits, failure modes, or whether the token expires, all of which matter for a write-oriented upload endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler. The purpose is front-loaded and the downstream handoff follows immediately, so the most actionable information appears first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly compensates by spelling out the returned shape and how to consume it, which is the main ambiguity an agent faces. It is nearly complete for a 2-parameter tool, falling short only on error/limit behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are documented in the schema itself (absolute path, MIME type). The description adds no syntax, format, or constraint detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (upload) and resource (a file to Basecamp 2), and goes further by naming the concrete artifact produced (an attachment token). It also differentiates itself from siblings by naming create_todo and create_comment as the consumers of its output, so an agent can place it in the workflow without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent that uploading alone does not attach anything and that both returned fields must be passed as an 'attachments' entry to create_todo or create_comment. That is an unambiguous when-to-use and how-to-chain instruction, which is exactly the guidance missing from most mutation tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv1.1.0
    • First observedarchive_project
    • First observedcreate_comment
    • First observedcreate_todo
    • First observedcreate_todolist
    • First observedget_project
    • First observedget_project_accesses
    • First observedget_todo
    • First observedget_todolist
    • First observedlist_people
    • First observedlist_projects
    • First observedlist_todolists
    • First observedupdate_todo
    • First observedupload_attachment

TDQS

B3.4/5.0

Scored across 13 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers