An MCP (Model Context Protocol) server for the Productboard API. Enables AI assistants (Claude, Cursor, etc.) to interact with your Productboard workspace.
| Tool | Description |
|---|---|
pb_feature_list |
List features with filtering |
pb_feature_get |
Get a feature by ID |
pb_feature_create |
Create a new feature |
pb_feature_update |
Update an existing feature |
pb_feature_delete |
Delete a feature |
pb_product_list |
List products |
pb_product_create |
Create a product |
pb_product_hierarchy |
Get full product hierarchy |
pb_note_list |
List customer notes |
pb_note_create |
Create a customer note |
pb_objective_list |
List objectives |
pb_objective_create |
Create an objective |
pb_objective_update |
Update an objective |
pb_keyresult_list |
List key results |
pb_keyresult_create |
Create a key result |
pb_keyresult_update |
Update a key result |
pb_release_list |
List releases |
pb_release_create |
Create a release |
pb_release_update |
Update a release |
pb_release_status_update |
Update release status |
pb_release_timeline |
Get release timeline |
Download the latest .mcpb file from the Releases page and drag it into Claude Desktop (Developer → Extensions → Install), or double-click it in a compatible MCP client.
The bundle is self-contained — no cloning or building required.
After installing, set your PRODUCTBOARD_API_TOKEN in the extension settings.
# 1. Clone the repo
git clone https://github.com/Enreign/productboard-mcp.git
cd productboard-mcp
# 2. Install dependencies and build
npm install --include=dev
npm run buildThen add to your claude_desktop_config.json:
{
"mcpServers": {
"productboard": {
"command": "node",
"args": ["/absolute/path/to/productboard-mcp/dist/index.js"],
"env": {
"PRODUCTBOARD_API_TOKEN": "your-api-token-here",
"LOG_LEVEL": "error"
}
}
}
}Important: Set
LOG_LEVELtoerror(notinfo). MCP uses stdio for communication — info-level logs printed to stdout will interfere with the protocol and cause the server to lock up.
⚠️ Coming soon — not yet published to npm. Use Option 1 or 2 above.
{
"mcpServers": {
"productboard": {
"command": "npx",
"args": ["-y", "@enreign/productboard-mcp"],
"env": {
"PRODUCTBOARD_API_TOKEN": "your-api-token-here",
"LOG_LEVEL": "error"
}
}
}
}- Log in to your Productboard workspace
- Go to Profile & Settings → API Access
- Click Generate API key and copy the token
| Variable | Description |
|---|---|
PRODUCTBOARD_API_TOKEN |
Your Productboard API token (Bearer auth) |
| Variable | Default | Description |
|---|---|---|
PRODUCTBOARD_AUTH_TYPE |
bearer |
Auth type: bearer or oauth2 |
PRODUCTBOARD_API_BASE_URL |
https://api.productboard.com/v2 |
API base URL |
PRODUCTBOARD_API_TIMEOUT |
10000 |
API request timeout (ms) |
API_RETRY_ATTEMPTS |
3 |
Number of retry attempts |
API_RETRY_DELAY |
1000 |
Delay between retries (ms) |
RATE_LIMIT_GLOBAL |
100 |
Max requests per window |
RATE_LIMIT_WINDOW_MS |
60000 |
Rate limit window (ms) |
CACHE_ENABLED |
false |
Enable response caching |
CACHE_TTL |
300 |
Cache TTL (seconds) |
LOG_LEVEL |
info |
Log level: trace, debug, info, warn, error, fatal |
Note for MCP clients: Always set
LOG_LEVEL=errorwhen using with Claude Desktop, Cursor, or any stdio-based MCP client. Higher log levels write to stdout and will break the MCP protocol.
| Variable | Description |
|---|---|
PRODUCTBOARD_OAUTH_CLIENT_ID |
OAuth2 client ID |
PRODUCTBOARD_OAUTH_CLIENT_SECRET |
OAuth2 client secret |
PRODUCTBOARD_OAUTH_REDIRECT_URI |
OAuth2 redirect URI |
"MCP server locks up / produces error logs"
→ Add "LOG_LEVEL": "error" to the env block in your MCP config. Info logs written to stdout interfere with the stdio transport.
"npx fails / package not found"
→ The package is not yet published to npm. Use the .mcpb bundle or local install above.
"command not found after local build"
→ Point args at the full absolute path to dist/index.js, not the productboard-mcp.js wrapper.
MIT