Skip to main content
Glama
README.md
# Basecamp MCP Server

Connect your Basecamp workspace to Claude and other AI tools via the Model Context Protocol.

## Setup

### 1. Get Basecamp API Credentials

1. Go to [Basecamp](https://basecamp.com) and log in
2. Click your profile → "Settings" → "Personal access tokens" (or "Integrations & apps" → "API credentials")
3. Create a new token (it needs "all access")
4. Copy the token
5. Find your Account ID in the URL when you're in your workspace (e.g., `https://3.basecamp.com/ACCOUNT_ID`)

### 2. Set Environment Variables

```bash
export BASECAMP_API_TOKEN="your_token_here"
export BASECAMP_ACCOUNT_ID="your_account_id_here"
```

Or create a `.env` file in the project root (add to `.gitignore`):
```
BASECAMP_API_TOKEN=your_token_here
BASECAMP_ACCOUNT_ID=your_account_id_here
```

### 3. Install Dependencies

```bash
uv sync
```

### 4. Run the Server

```bash
uv run python -m basecamp_mcp.server
```

Or run it directly:
```bash
uv run python src/basecamp_mcp/server.py
```

## Features

### Tools (Functions Claude Can Call)

- **`get_projects`** - List all Basecamp projects
- **`get_project_details`** - Get detailed info about a project
- **`get_messages`** - Get recent messages from a project
- **`get_message_with_comments`** - Get a specific message with all comments
- **`get_todos`** - Get todo items (with optional filtering by completion)
- **`create_message`** - Create a new message in a project
- **`update_todo`** - Mark a todo as complete/incomplete
- **`get_schedules`** - Get schedules from a project
- **`clear_cache`** - Clear all cached data
- **`get_cache_stats`** - View cache statistics

### Resources (Data Claude Can Read)

- **`basecamp://projects`** - List of all projects
- **`basecamp://project/{project_id}/summary`** - Project summary with recent activity

### Caching

The server uses SQLite for persistent caching with TTL (Time To Live):

- **Projects**: 5 minutes cache
- **Messages**: 2 minutes cache
- **Todos**: 2 minutes cache
- **Project details**: 10 minutes cache

Use `get_cache_stats` to see cache hit rates and size, or `clear_cache` to force fresh data.

## Project Structure

```
BaseCampMCP/
├── src/
│   └── basecamp_mcp/
│       ├── __init__.py
│       ├── server.py       # Main MCP server with tools & resources
│       └── cache.py        # SQLite cache manager
├── pyproject.toml          # Project configuration
└── README.md
```

## Integration with Claude Desktop

To use with Claude Desktop:

1. Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or the Windows equivalent
2. Add the server:

```json
{
  "mcpServers": {
    "basecamp": {
      "command": "uv",
      "args": ["run", "--with", "mcp", "python", "-m", "basecamp_mcp.server"],
      "cwd": "/Users/kaustubh/Documents/BaseCampMCP"
    }
  }
}
```

3. Restart Claude Desktop

## Development

### Testing the Server

```bash
# Run with verbose logging
uv run python -m basecamp_mcp.server
```

### Viewing Cache

The cache database is stored in `basecamp_cache.db` in your working directory. You can inspect it with:

```bash
sqlite3 basecamp_cache.db
sqlite> SELECT key, hits, expires_at FROM cache ORDER BY hits DESC;
```

## API Reference

### Basecamp API v1 Endpoints Used

- `GET /projects.json` - List projects
- `GET /projects/{id}.json` - Get project details
- `GET /projects/{id}/messages.json` - List messages
- `GET /projects/{id}/messages/{message_id}.json` - Get message
- `GET /projects/{id}/messages/{message_id}/comments.json` - Get comments
- `GET /projects/{id}/todos.json` - List todos
- `GET /projects/{id}/todolists/{list_id}/todos.json` - Get todos from list
- `PUT /projects/{id}/todos/{todo_id}.json` - Update todo
- `POST /projects/{id}/messages.json` - Create message
- `GET /projects/{id}/schedules.json` - List schedules

## License

MIT

TDQS

B3.3/5.0

Scored across 10 tools

Disambiguation4/5

Most tools have distinct purposes targeting different resources like messages, projects, todos, and cache. However, get_messages and get_message_with_comments could be slightly confusing as both retrieve messages, though the latter includes comments. Overall, the overlap is minimal and descriptions clarify the differences.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, such as clear_cache, create_message, and get_projects. This uniformity makes the set predictable and easy for an agent to parse and understand.

Tool Count5/5

With 10 tools, the server is well-scoped for Basecamp operations, covering key areas like projects, messages, todos, and cache management. Each tool serves a clear purpose without feeling excessive or insufficient for the domain.

Completeness4/5

The toolset provides good coverage for reading and updating Basecamp data, including CRUD-like operations for messages and todos, and project/schedule retrieval. A minor gap exists in creating or updating projects, schedules, or comments, but core workflows are supported.

Maintenance

ActivityInactive
ResponsivenessNo issues