@the_cfdude/productboard-mcp
v2.1.1
Published
Model Context Protocol server for Productboard REST API with dynamic tool loading
Maintainers
Readme
Productboard MCP Server
A Model Context Protocol (MCP) server that provides comprehensive access to Productboard's REST API with intelligent dynamic tool loading, category-based filtering, and role-based profiles.
🚀 Key Features
- Dynamic Tool Loading: 119+ API operations loaded on-demand to minimize memory usage
- Category-Based Organization: Tools organized into 15+ logical categories
- Condensed Data Views: Flexible detail levels (basic/standard/full) for optimized responses
- Role-Based Profiles: Pre-configured tool sets for different user types
- Auto-Generated Tools: Generate tool implementations directly from OpenAPI spec
- Multi-Workspace Support: Manage multiple Productboard instances seamlessly
- Full TypeScript Support: Type-safe implementation with comprehensive interfaces
- Backward Compatible: Falls back to static tools when needed
📦 Installation
Option 1: Via Smithery (Recommended)
smithery install productboardThen add to your Claude Desktop config:
{
"mcpServers": {
"productboard": {
"command": "node",
"args": ["${SMITHERY_PATH}/productboard/build/index.js"],
"env": {
"PRODUCTBOARD_API_TOKEN": "your-api-token"
}
}
}
}Option 2: Docker
# Using Docker Compose (recommended)
git clone https://github.com/cfdude/productboard-mcp.git
cd productboard-mcp
# Create .env file
echo "PRODUCTBOARD_API_TOKEN=your-api-token" > .env
# Run the server
docker-compose up -d
# Or using Docker directly
docker run -d \
--name productboard-mcp \
-e PRODUCTBOARD_API_TOKEN="your-api-token" \
ghcr.io/cfdude/productboard-mcp:latestOption 3: NPM Package
npm install @the_cfdude/productboard-mcpOption 4: From Source
git clone https://github.com/cfdude/productboard-mcp.git
cd productboard-mcp
npm install
npm run buildNote: The generated/ directory is automatically created during the build process. The manifest and tool files are generated from the OpenAPI specification.
🔧 Configuration
Basic Setup
Create a .productboard-config.json file in your project root:
{
"instances": {
"default": {
"apiToken": "YOUR_API_TOKEN",
"baseUrl": "https://api.productboard.com",
"rateLimitPerMinute": 60
}
},
"defaultInstance": "default",
"toolCategories": {
"enabled": ["*"] // Enable all tools
}
}Advanced Configuration
Role-Based Profiles
{
"toolCategories": {
"activeProfile": "product-manager" // or "customer-success", "developer"
}
}Custom Tool Selection
{
"toolCategories": {
"enabled": ["notes", "features", "companies", "releases"],
"disabled": ["jiraintegrations", "pluginintegrations"]
}
}Multi-Workspace Setup
{
"instances": {
"production": {
"apiToken": "PROD_TOKEN",
"baseUrl": "https://api.productboard.com"
},
"staging": {
"apiToken": "STAGING_TOKEN",
"baseUrl": "https://api-staging.productboard.com"
}
},
"workspaces": {
"main": {
"instance": "production",
"workspaceId": "main-workspace"
},
"test": {
"instance": "staging",
"workspaceId": "test-workspace"
}
}
}📚 Tool Categories
Core Product Management
- features (22 tools): Feature management, roadmapping, and prioritization
- components (3 tools): Component hierarchy and organization
- products (3 tools): Product line management
- releases (5 tools): Release planning and tracking
- releaseGroups (4 tools): Multi-team release coordination
Customer Insights
- notes (15 tools): Customer feedback, insights, and research
- companies (5 tools): Company/account management
- users (2 tools): User profile and segmentation
- companies & users (18 tools): Combined customer data operations
Planning & Strategy
- objectives (11 tools): Strategic objectives and OKRs
- keyResults (5 tools): Measurable outcomes and KPIs
- initiatives (11 tools): High-level strategic initiatives
- statuses (1 tool): Feature status workflows
Customization
- custom fields (6 tools): Custom field definitions and values
- hierarchyEntitiesCustomFields (3 tools): Entity-specific custom fields
Integrations
- webhooks (4 tools): Event notifications and subscriptions
- pluginIntegrations (10 tools): Third-party integration management
- jiraIntegrations (4 tools): Jira-specific integrations
🔍 Condensed Data Views
Many tools support flexible detail levels to optimize response size and performance:
Detail Levels
basic- Minimal fields (id, name, and essential identifiers)standard- Common fields for typical use cases (default)full- All available fields including nested data
Supported Tools
Tools with condensed data support include:
get_features/list_featuresget_components/list_componentsget_products/list_productsget_releases/list_releasesget_notes/list_notesget_companies/list_companiesget_users/list_usersget_objectives/list_objectivesget_initiatives/list_initiativesget_webhooks/list_webhooks
Usage Examples
// Get basic feature information (minimal fields)
{
"tool": "get_features",
"arguments": {
"detail": "basic",
"limit": 100
}
}
// Get standard feature details (default)
{
"tool": "get_features",
"arguments": {
"detail": "standard"
}
}
// Get full feature data including all nested objects
{
"tool": "get_features",
"arguments": {
"detail": "full",
"includeSubData": true
}
}Performance Tips
Use
basicdetail level for:- Large data sets
- Quick lookups by ID/name
- Initial exploration
Use
standarddetail level for:- Most common operations
- Balanced detail vs. performance
Use
fulldetail level for:- Complete data exports
- Detailed analysis
- When all fields are needed
The
includeSubDataparameter:- When
true: Returns all nested JSON data - When
false: Filters based on detail level - Useful for controlling response size
- When
🎯 Usage Examples
With Claude Desktop
Option A: Using Claude Desktop Connectors (New!)
- Open Claude Desktop settings
- Navigate to "Connectors" section
- Click "Add Connector"
- Search for "Productboard MCP"
- Enter your API token and select your preferred tool profile
- Click "Connect"
Option B: Manual Configuration
Add to your Claude Desktop configuration:
{
"mcpServers": {
"productboard": {
"command": "node",
"args": ["/path/to/productboard-mcp/build/index.js"],
"env": {
"PRODUCTBOARD_API_TOKEN": "your-api-token"
}
}
}
}Common Tool Examples
// Create a note from customer feedback
notes_create({
title: 'Feature request: Dark mode',
content: 'Customer wants dark mode support',
tags: ['ui', 'enhancement'],
user: { email: '[email protected]' },
});
// List features with filtering
features_list({
limit: 50,
status: 'in-progress',
includeRaw: false,
});
// Create a release
releases_create({
name: 'Q1 2025 Release',
description: 'Major feature updates',
startDate: '2025-01-01',
endDate: '2025-03-31',
});🛠️ Development
Generate Tools from OpenAPI
# 1. Generate tool manifest (required first)
npm run generate-manifest
# 2. Generate missing tool implementations
npm run generate-tools
# 3. Build the TypeScript project
npm run buildTesting
# Run the MCP inspector
npm run dev
# Test dynamic loading system
npx tsx scripts/test-dynamic-loading.tsProject Structure
productboard-mcp/
├── src/
│ ├── tools/
│ │ ├── registry.ts # Dynamic tool loading system
│ │ ├── index-dynamic.ts # Dynamic tool handler
│ │ └── *.ts # Tool implementations
│ ├── utils/
│ │ └── tool-wrapper.ts # API client wrapper
│ └── productboard-server.ts # Main server class
├── generated/
│ ├── manifest.json # Tool metadata
│ └── tools/ # Auto-generated tools
├── scripts/
│ ├── generate-manifest.ts # Manifest generator
│ └── generate-tools.ts # Tool generator
└── .productboard-config.json # Your configuration🔍 Dynamic Loading Architecture
The server uses a three-tier approach:
- Discovery: Tool manifest provides metadata without loading code
- Registration: Tools are registered with lazy loaders
- Execution: Implementation loaded only when tool is called
This enables:
- Fast startup times
- Minimal memory usage
- Dynamic tool filtering
- Runtime configuration updates
🔐 Security
- API tokens should be stored in
.productboard-config.json(gitignored) - Use environment variables for CI/CD:
PRODUCTBOARD_API_TOKEN - The example config uses placeholder values
- Never commit real tokens to version control
📊 Performance
- Initial load: ~50ms (manifest only)
- First tool call: ~100ms (includes dynamic import)
- Subsequent calls: <10ms (cached handler)
- Memory usage: ~20MB base + 1-2MB per loaded category
🤝 Contributing
- Fork the repository
- Create a feature branch
- Run
npm run generate-manifestafter API changes - Submit a pull request
📄 License
MIT License - see LICENSE file for details
🔗 Resources
📝 Future Improvements
Based on code review feedback, here are suggested improvements for future development:
Type Safety Enhancements
- [ ] Replace
anytypes with proper TypeScript interfaces throughout the codebase - [ ] Create specific types for API responses instead of using generic types
- [ ] Add stricter type checking for tool arguments and return values
Error Handling Improvements
- [ ] Implement more granular error types for different API failure scenarios
- [ ] Add retry logic with exponential backoff for transient failures
- [ ] Improve error messages with actionable suggestions for users
Code Organization
- [ ] Consider splitting large tool files (features.ts, notes.ts) into smaller modules
- [ ] Extract common patterns into shared utilities
- [ ] Implement a proper dependency injection pattern for better testability
Testing Enhancements
- [ ] Add integration tests that mock the Productboard API
- [ ] Increase test coverage for edge cases and error scenarios
- [ ] Add performance benchmarks for dynamic tool loading
Documentation
- [ ] Add JSDoc comments for all public functions and interfaces
- [ ] Create detailed examples for complex tool usage patterns
- [ ] Document the tool generation process more thoroughly
Performance Optimizations
- [ ] Implement request batching for multiple API calls
- [ ] Add response caching with configurable TTL
- [ ] Optimize the manifest generation for faster startup
Security Enhancements
- [ ] Add input validation for all tool parameters
- [ ] Implement rate limiting at the MCP server level
- [ ] Add audit logging for sensitive operations
🏗️ Roadmap
- [ ] Add caching layer for frequently used tools
- [ ] Implement tool usage analytics
- [ ] Add GraphQL support
- [ ] Create tool composition workflows
- [ ] Add rate limit handling strategies
Built with ❤️ for the Productboard community
