npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@yashwant.dharmdas/basecamp-mcp

v1.8.0

Published

MCP Server for Basecamp 3 - manage projects, todos, messages, and more via Claude

Downloads

2,663

Readme

Basecamp MCP Server

An MCP (Model Context Protocol) server that enables LLMs like Claude to interact with your Basecamp 3 projects, to-dos, messages, campfire, and more.

Features

  • 18 MCP Tools covering Basecamp's core features:
    • Projects: list, get details, create, update
    • To-do Lists: list, create
    • To-dos: list, get, create, update, complete, uncomplete
    • Messages: list, get, create
    • Campfire (Chat): list messages, send message
    • Comments: list, create on any recording
    • People: list all, get own profile
  • Dual Transport: Stdio (Claude Desktop) and HTTP/SSE (remote hosting)
  • Auto Token Refresh: Automatically refreshes expired OAuth tokens

Quick Start

1. Register a Basecamp OAuth App

Go to launchpad.37signals.com/integrations and register a new application.

Set the Redirect URI to: http://localhost:3000/callback

2. Configure Environment

cp .env.example .env

Edit .env and fill in your BASECAMP_CLIENT_ID and BASECAMP_CLIENT_SECRET.

3. Install Dependencies

npm install

4. Authenticate

npm run auth

This opens your browser to authorize the app and automatically saves your tokens.

5. Use with Claude Desktop

Add to your Claude Desktop config (claude_desktop_config.json):

{
  "mcpServers": {
    "basecamp": {
      "command": "node",
      "args": ["D:/Projects/basecamp-mcp/dist/index.js", "--stdio"]
    }
  }
}

Then restart Claude Desktop.

Available Tools

| Tool | Description | |------|-------------| | list_projects | List all accessible projects | | get_project | Get project details + dock (tool IDs) | | create_project | Create a new project | | update_project | Update project name/description | | list_todolists | List to-do lists in a todoset | | create_todolist | Create a new to-do list | | list_todos | List to-dos in a to-do list | | get_todo | Get to-do details | | create_todo | Create a new to-do | | update_todo | Update a to-do | | complete_todo | Mark to-do as done | | uncomplete_todo | Re-open a to-do | | list_messages | List messages on a board | | get_message | Get full message content | | create_message | Post a new message | | list_campfire_lines | List recent chat messages | | send_campfire_message | Send a campfire message | | list_comments | List comments on a recording | | create_comment | Add a comment to a recording | | list_people | List all people on the account | | get_my_profile | Get authenticated user profile | | screenshot_basecamp_page | Screenshot any Basecamp URL via headless browser (workaround for image CDN auth) |

Viewing images on Basecamp pages

Basecamp's image CDN (preview.3.basecamp.com, storage.3.basecamp.com) only accepts session cookies, not OAuth tokens — so attached images cannot be downloaded via the API. The screenshot_basecamp_page tool drives a headless Chrome that returns the rendered page (or a specific comment) as an image.

One-time browser login (recommended)

Run this once in your terminal:

npx --package="@yashwant.dharmdas/basecamp-mcp" basecamp-mcp-login

A Chrome window opens, navigates to Basecamp's Launchpad — log in there. The window closes automatically once you're signed in, saving the session in a dedicated MCP profile at ~/.config/basecamp-mcp/chrome-profile.

After that, screenshot_basecamp_page works automatically. The cookie auto-refreshes from inside Chrome as long as the tool is used at least once every ~2 weeks. If the session ever expires, just re-run the same command.

Why a dedicated profile (and not a clone of your real Chrome profile)? Chrome 127+ uses App-Bound Encryption for cookies on Windows, which binds encryption to both the Chrome binary and the user-data-dir path. Cloning your live profile to a different path silently breaks decryption — sessions look empty and Basecamp redirects to sign-in. A dedicated profile encrypted at its own path works reliably.

Optional env overrides:

CHROME_PATH=C:\Path\To\chrome.exe   # if Chrome isn't in a default location

The tool auto-detects Chrome (Google Chrome → Microsoft Edge fallback) on Windows, macOS, and Linux.

Manual fallback (if you can't run the CLI)

Set BASECAMP_SESSION_COOKIE in your .env to a value copied from DevTools → Cookies → _bc3_session. The presence of this env var disables persistent-profile mode and uses your pasted value instead. The cookie expires every ~2 weeks and you'll need to re-paste.

Behaviour

When the URL contains a #__recording_<id> anchor, the tool automatically scopes the screenshot to just that comment. Otherwise it captures the full page. Override with mode: "viewport" | "fullpage" | "element" and an optional selector.

This tool is intentionally named differently from the Elementor MCP's screenshot-page so the two don't collide.

HTTP Mode (for hosting)

npm run start

The server runs on port 3000 (configurable via PORT env var).

  • Health check: GET /health

  • MCP endpoint: POST /mcp

  • MCP endpoint: POST /mcp

Deployment (Render.com)

This server is ready to be deployed to Render as a Web Service.

1. Push to GitHub

Push your local repository to a private GitHub repository.

2. Connect to Render

  • Create a new Web Service on Render.
  • Connect your GitHub repository.
  • Render will automatically detect the settings from render.yaml.

3. Configure Environment Variables

Add the following variables in the Render Dashboard (or via the Blueprint setup):

  • BASECAMP_CLIENT_ID
  • BASECAMP_CLIENT_SECRET
  • BASECAMP_REDIRECT_URI: https://your-service-name.onrender.com/callback
  • BASECAMP_ACCESS_TOKEN
  • BASECAMP_REFRESH_TOKEN
  • BASECAMP_ACCOUNT_ID

[!IMPORTANT] Since Render's free tier has an ephemeral filesystem, the server cannot permanently update your .env file when tokens are refreshed. If the server is restarted/redeployed, it will revert to the initial tokens you provided in the environment variables. If tokens expire, you may need to re-run npm run auth locally and update the Render environment variables with the new tokens.

4. Update Basecamp Redirect URI

Don't forget to add your Render URL (e.g., https://your-service-name.onrender.com/callback) to your application's Redirect URIs in the Basecamp Launchpad.