Skip to main content

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 basecamp CLI on PATH, already authenticated (basecamp setup) — see First-time setup below to do both in one command
  • uv for 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:

  1. Add basecamp to your claude_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.
  2. 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:

  1. Builds argv from positional arguments and flags defined in the schema.
  2. Shells out: basecamp <group> <action> <args...> --json.
  3. Returns the parsed data field 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 from data/tools.json
  • src/basecamp_cli_mcp/runner.py — builds argv and shells out
  • src/basecamp_cli_mcp/generator.py — regenerates data/tools.json
  • src/basecamp_cli_mcp/help_parser.py — parses --help text into a schema
  • src/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)

Source distribution for basecamp-cli-mcp 0.7.1
File Size Uploaded
basecamp_cli_mcp-0.7.1.tar.gz 35.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for basecamp-cli-mcp 0.7.1
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.7.1 This release

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page