basecamp-cli-mcp
A Model Context Protocol (MCP) server that wraps the basecamp
CLI. Every non-shortcut CLI action (projects list, todos create, cards update, etc.) is
exposed as an MCP tool, so MCP-compatible clients (Claude Code, Claude Desktop, etc.) can
drive Basecamp directly.
Requirements
- Python ≥ 3.11
- The
basecampCLI onPATH, already authenticated (basecamp setup) — see First-time setup below to do both in one command uvfor the recommended install
First-time setup
If you don't have the basecamp CLI installed yet:
uvx basecamp-cli-mcp setup
This checks for the basecamp binary, runs the official installer (curl -fsSL https://basecamp.com/install-cli | bash) after a y/N prompt if it's missing, then runs basecamp setup to walk you through OAuth.
On macOS, after auth completes it offers to:
- Add
basecampto yourclaude_desktop_config.json(with a timestamped backup of any existing file). You'll choose between:- Minimal — todos, cards, card tables, card steps (plus
projects_list). A focused tool set that's easier for agents to navigate. - Full — all 250+ tools.
- Skip — leave the config alone.
- Minimal — todos, cards, card tables, card steps (plus
- Restart Claude Desktop.
macOS and Linux only for the install/auth — on Windows the command prints the PowerShell installer and exits. The Claude Desktop step is macOS-only.
Run
The fastest way — no install step at all:
uvx basecamp-cli-mcp
uvx resolves the package, runs it in an ephemeral isolated env, and exec's it on stdin/stdout.
To install permanently:
uv tool install basecamp-cli-mcp
basecamp-cli-mcp
Add to Claude Code
claude mcp add basecamp -- uvx basecamp-cli-mcp
Add to Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"basecamp": {
"command": "uvx",
"args": ["basecamp-cli-mcp"]
}
}
}
If uvx isn't on Desktop's PATH (it strips most of your shell PATH), use the absolute path — which uvx from your shell.
Filtering tools
By default the server exposes all 250+ tools. Most agents only need a handful, and a smaller
catalog speeds up tool selection. Filter with --include / --exclude (fnmatch globs against
tool names; both flags repeatable):
basecamp-cli-mcp --include 'cards_*' --include 'todos_*'
basecamp-cli-mcp --include '*' --exclude 'webhooks_*' --exclude 'templates_*'
Register multiple profiles in claude_desktop_config.json and turn them on per task:
{
"mcpServers": {
"basecamp-cards": {
"command": "uvx",
"args": ["basecamp-cli-mcp", "--include", "cards_*", "--include", "projects_list"]
},
"basecamp-todos": {
"command": "uvx",
"args": ["basecamp-cli-mcp", "--include", "todos_*", "--include", "projects_list"]
},
"basecamp-full": {
"command": "uvx",
"args": ["basecamp-cli-mcp"]
}
}
}
BASECAMP_BIN
If the basecamp CLI isn't on the spawned process's PATH (a real risk under Claude Desktop), set:
"env": { "BASECAMP_BIN": "/absolute/path/to/basecamp" }
How it works
Tool schemas are pre-generated and committed to src/basecamp_cli_mcp/data/tools.json (shipped
inside the wheel as package data). At runtime the server loads that file and registers one MCP
tool per entry. Each tool:
- Builds
argvfrom positional arguments and flags defined in the schema. - Shells out:
basecamp <group> <action> <args...> --json. - Returns the parsed
datafield from the CLI's{ok, data}envelope to the MCP client.
Shortcut commands (todo, done, card, comment, etc.) are intentionally excluded — their
underlying actions (todos_create, cards_create, …) are already exposed.
Regenerating tool schemas
After upgrading the basecamp CLI:
uv run basecamp-cli-mcp generate
Review the diff in src/basecamp_cli_mcp/data/tools.json and commit. The generator reads
basecamp commands --json and parses basecamp <group> <action> --help for each action.
Development
uv sync
uv run pytest
uv build # wheel + sdist into dist/
Layout:
src/basecamp_cli_mcp/server.py— wires up the MCP server fromdata/tools.jsonsrc/basecamp_cli_mcp/runner.py— builds argv and shells outsrc/basecamp_cli_mcp/generator.py— regeneratesdata/tools.jsonsrc/basecamp_cli_mcp/help_parser.py— parses--helptext into a schemasrc/basecamp_cli_mcp/cli.py— entrypoint (basecamp-cli-mcp)src/basecamp_cli_mcp/data/tools.json— generated tool schemas (committed)
Metadata
Release files for basecamp-cli-mcp 0.7.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| basecamp_cli_mcp-0.7.1.tar.gz | 35.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| basecamp_cli_mcp-0.7.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 72.1 kB
Release files / basecamp_cli_mcp-0.7.1.tar.gz
| Download URL | basecamp_cli_mcp-0.7.1.tar.gz |
|---|---|
| Size | 35.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fd53bd40fff59d4825be91b50de56e68d70836bf99bdc372770ff644598bf7a6
|
|
BLAKE2b-256 checksum How to use checksums |
3041c53c4d057a11ffee8012cd175ebddf1f43e75c62b5aef63dfc4a1a2d0a4d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 7, 2026.
Transparency logRelease files / basecamp_cli_mcp-0.7.1-py3-none-any.whl
| Download URL | basecamp_cli_mcp-0.7.1-py3-none-any.whl |
|---|---|
| Size | 36.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
14237bda73ee344ab56e7346e253085827138fa0a6a1e33af26e6dbbe2c82fda
|
|
BLAKE2b-256 checksum How to use checksums |
230565c6d08f53abd78c00ead09a295a3bff03a751f2690b3f2eb872d5b51d5c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 7, 2026.
Transparency log