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

Published

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

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 (BC5: pass loose: true for unattached top-of-list to-dos) | | update_todo | Update a to-do | | complete_todo | Mark to-do as done | | uncomplete_todo | Re-open a to-do | | assign_todo | Set / add / remove assignees on a to-do (modes: set, add, remove) | | create_subtask | BC5: Create a subtask under an existing to-do | | list_subtasks | BC5: List subtasks of a parent 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 |

Viewing images on Basecamp pages

Images attached to comments, to-dos, and messages are fetched directly via the Basecamp API — no browser, no cookies, no setup required.

The server uses a host-swap trick: preview.3.basecamp.com and storage.3.basecamp.com URLs are rewritten to 3.basecampapi.com + Bearer token, which triggers a 302 redirect to a signed S3 URL. The image streams back inline.

Use get_comment, get_todo, or get_message with the Basecamp URL. Images are returned as inline content blocks Claude can see. If a resource has many images and the total would exceed MCP's 1 MB cap, the tool returns as many as fit and reports omitted indices — re-call with image_indices=[3,4] to fetch specific ones.

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.