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.
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues