Skip to main content
Glama
martijnrusschen

ProductLane MCP Server

README.md
# ProductLane MCP Server

An [MCP](https://modelcontextprotocol.io) server for the [ProductLane](https://productlane.com) API. Gives AI assistants access to support threads, contacts, changelogs, and docs.

## Tools

### Threads

| Tool | Description |
|------|-------------|
| `list_threads` | List threads, optionally filtered by state (`NEW`, `PROCESSED`, `COMPLETED`, `SNOOZED`) |
| `get_thread` | Get full details of a thread including conversation history |
| `get_thread_messages` | Get the full conversation history (all messages/replies) for a thread |
| `reply_to_thread` | Send an email reply to a thread (plain-text newlines auto-converted to HTML) |
| `update_thread` | Update thread state, title, assignee, pain level, project, tags |

### Contacts

| Tool | Description |
|------|-------------|
| `get_contact` | Look up a contact by ID |

### Changelogs

| Tool | Description |
|------|-------------|
| `list_changelogs` | List changelog entries for a workspace |
| `create_changelog` | Publish a new changelog entry |
| `update_changelog` | Update an existing changelog entry |
| `delete_changelog` | Delete a changelog entry |

### Docs: Articles

| Tool | Description |
|------|-------------|
| `list_doc_articles` | List published articles for a workspace, optionally filtered by group |
| `get_doc_article` | Get a published article by ID including full content |
| `create_doc_article` | Create a new article (supports Markdown content) |
| `update_doc_article` | Update an article's title, content, summary, published/archived state |
| `delete_doc_article` | Delete an article |

### Docs: Groups

| Tool | Description |
|------|-------------|
| `create_doc_group` | Create a new group to organize articles |
| `update_doc_group` | Update a group's name or display order |
| `delete_doc_group` | Delete a group (articles become ungrouped) |
| `move_articles_to_group` | Move articles to a group, or pass null to ungroup |

## Setup

### 1. Get a ProductLane API key

Go to your ProductLane workspace settings to generate an API key.

### 2. Configure in Claude Code

Add to your `.mcp.json`:

```json
{
  "mcpServers": {
    "productlane": {
      "command": "node",
      "args": ["/path/to/productlane-mcp/dist/index.js"],
      "env": {
        "PRODUCTLANE_API_KEY": "your-api-key"
      }
    }
  }
}
```

### 3. Build

```bash
npm install
npm run build
```

## Development

```bash
npm run dev    # Run with tsx (no build step)
npm run build  # Compile TypeScript
npm start      # Run compiled output
```

## Known Issues

- `GET /threads/{id}?includeConversation=true` may return 500 on threads with API-sent replies. The server tries with it enabled and falls back without it. Use `get_thread_messages` as an alternative. (Reported to ProductLane 2026-03-04)
- Thread state does not directly control inbox tab placement — determined by multiple factors including state, snooze timing, and workspace settings.