ProductLane MCP Server
An MCP server for the ProductLane 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:
{
"mcpServers": {
"productlane": {
"command": "node",
"args": ["/path/to/productlane-mcp/dist/index.js"],
"env": {
"PRODUCTLANE_API_KEY": "your-api-key"
}
}
}
}
3. Build
npm install
npm run build
Development
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=truemay return 500 on threads with API-sent replies. The server tries with it enabled and falls back without it. Useget_thread_messagesas 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.






