{"_id":"@bellwetherlabs/featurebase-mcp","_rev":"2-0d0f5baf4718179f9b741424a890f497","name":"@bellwetherlabs/featurebase-mcp","dist-tags":{"latest":"1.3.0"},"versions":{"1.2.0":{"name":"@bellwetherlabs/featurebase-mcp","version":"1.2.0","keywords":["mcp","modelcontextprotocol","featurebase","api","feedback","product-management","help-center"],"author":{"name":"Bellwether Labs"},"license":"MIT","_id":"@bellwetherlabs/featurebase-mcp@1.2.0","maintainers":[{"name":"jamesacampbell","email":"james@jamescampbell.us"}],"homepage":"https://github.com/james-see/featurebase-mcp#readme","bugs":{"url":"https://github.com/james-see/featurebase-mcp/issues"},"bin":{"featurebase-mcp":"build/index.js"},"dist":{"shasum":"2a3541b5fd07822ba613837be867a60fa7b90b69","tarball":"https://registry.npmjs.org/@bellwetherlabs/featurebase-mcp/-/featurebase-mcp-1.2.0.tgz","fileCount":7,"integrity":"sha512-PaorvQLMbu3VxUFWNI3XSjdzbMeDIePfZFvqxKQxfKnb1w8W1pqbliDil89b2AJrKp5RNmXzpMD3/8GD9+LNXg==","signatures":[{"sig":"MEUCIEJf8KfqtIGVrXD3hQqG/iaY8csy/Zu08G1VgbQ3UZcvAiEAnoCXkJwuGgRnqnFxTaaRldCIYsQJj2rfnlg0+i0BjIM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85638},"main":"build/index.js","type":"module","types":"./build/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"6faee091a744cc3d06abe39b6e4df5b697cd1c6f","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node build/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"jamesacampbell","email":"james@jamescampbell.us"},"repository":{"url":"git+https://github.com/james-see/featurebase-mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"MCP server for Featurebase API - manage posts, comments, and help center","directories":{},"_nodeVersion":"22.14.0","dependencies":{"axios":"^1.6.2","json-mask":"^2.0.0","@modelcontextprotocol/sdk":"^0.5.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.2","typescript":"^5.3.2","@types/node":"^20.10.0","@types/json-mask":"^2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/featurebase-mcp_1.2.0_1771568351491_0.7133462494178002","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bellwetherlabs/featurebase-mcp","version":"1.3.0","description":"MCP server for Featurebase API - manage posts, comments, and help center","main":"build/index.js","type":"module","bin":{"featurebase-mcp":"build/index.js"},"scripts":{"build":"tsc","start":"node build/index.js","dev":"tsx src/index.ts","prepublishOnly":"npm run build"},"keywords":["mcp","modelcontextprotocol","featurebase","api","feedback","product-management","help-center"],"author":{"name":"Bellwether Labs"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/james-see/featurebase-mcp.git"},"bugs":{"url":"https://github.com/james-see/featurebase-mcp/issues"},"homepage":"https://github.com/james-see/featurebase-mcp#readme","engines":{"node":">=16.0.0"},"dependencies":{"@modelcontextprotocol/sdk":"^0.5.0","axios":"^1.6.2","json-mask":"^2.0.0"},"devDependencies":{"@types/json-mask":"^2.0.3","@types/node":"^20.10.0","tsx":"^4.6.2","typescript":"^5.3.2"},"_id":"@bellwetherlabs/featurebase-mcp@1.3.0","gitHead":"49a691d514e538cebfdcd75f03a2db5a4e15e0cf","types":"./build/index.d.ts","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-70SdFaVOGF3gMJFFE+fwQJzWMGDvwhy3lEuVlWzrRjWb+LcNtUKddOHxkxEgwz2sbtdJ3wuiqgl+b55+4eje+g==","shasum":"7b8c51d35900f97e9c72de32c759e3c33b8151c2","tarball":"https://registry.npmjs.org/@bellwetherlabs/featurebase-mcp/-/featurebase-mcp-1.3.0.tgz","fileCount":7,"unpackedSize":103737,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC/oFZk/GhyuRhMOfvtoYylhNQywbANrStKFHvx3/AhLwIhAL4alkw1LJ1wFKT3l40FO4/PyNV6ju5k5Ay5T1esBt1l"}]},"_npmUser":{"name":"jamesacampbell","email":"james@jamescampbell.us"},"directories":{},"maintainers":[{"name":"jamesacampbell","email":"james@jamescampbell.us"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/featurebase-mcp_1.3.0_1771569083272_0.6027703323005786"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-20T06:19:11.396Z","modified":"2026-02-20T06:31:23.590Z","1.2.0":"2026-02-20T06:19:11.640Z","1.3.0":"2026-02-20T06:31:23.442Z"},"bugs":{"url":"https://github.com/james-see/featurebase-mcp/issues"},"author":{"name":"Bellwether Labs"},"license":"MIT","homepage":"https://github.com/james-see/featurebase-mcp#readme","keywords":["mcp","modelcontextprotocol","featurebase","api","feedback","product-management","help-center"],"repository":{"type":"git","url":"git+https://github.com/james-see/featurebase-mcp.git"},"description":"MCP server for Featurebase API - manage posts, comments, and help center","maintainers":[{"name":"jamesacampbell","email":"james@jamescampbell.us"}],"readme":"# Featurebase MCP Server\n\nA Model Context Protocol (MCP) server that provides access to the Featurebase API for managing posts, comments, and help center content. Published by [Bellwether Labs](https://www.npmjs.com/org/bellwetherlabs).\n\n## Features\n\n- **Posts Management**\n  - List posts with filtering options\n  - Create new posts\n  - Update existing posts\n  - Delete posts\n  - Get post upvoters\n  - Add upvoters to posts\n\n- **Comments Management**\n  - Get comments for posts/changelogs\n  - Create new comments or replies\n  - Update comments\n  - Delete comments\n\n- **Help Center**\n  - List, create, get, update, delete collections\n  - List, create, get, update, delete articles (supports HTML with images via URLs or base64)\n  - Requires API key with `manage_help_center` permission\n\n- **Changelogs**\n  - List, create, get, update, delete changelogs\n  - Publish changelogs (with optional email notification or scheduled date)\n  - Supports HTML/markdown content with images\n\n## Installation\n\n### npx (Recommended – auto-downloads on first run)\n\nNo install needed. Cursor/MCP will fetch the package on first use:\n\n```bash\nnpx -y @bellwetherlabs/featurebase-mcp\n```\n\n### npm install\n\nAdd as a project dependency:\n\n```bash\nnpm install @bellwetherlabs/featurebase-mcp\n```\n\nOr install globally:\n\n```bash\nnpm install -g @bellwetherlabs/featurebase-mcp\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/james-see/featurebase-mcp.git\ncd featurebase-mcp\nnpm install\nnpm run build\n```\n\n## Configuration\n\n### Cursor IDE\n\nAdd to `.cursor/mcp.json` (project-level) or `~/.cursor/mcp.json` (global). Restart Cursor after changes.\n\n```json\n{\n  \"mcpServers\": {\n    \"featurebase\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@bellwetherlabs/featurebase-mcp\"],\n      \"env\": {\n        \"FEATUREBASE_API_KEY\": \"your-api-key-here\",\n        \"FEATUREBASE_ORG_URL\": \"https://your-org.featurebase.app\"\n      }\n    }\n  }\n}\n```\n\nThe `-y` flag runs npx non-interactively and auto-downloads the package if not cached.\n\n### Claude Desktop\n\n**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n**Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"featurebase\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@bellwetherlabs/featurebase-mcp\"],\n      \"env\": {\n        \"FEATUREBASE_API_KEY\": \"your-api-key-here\",\n        \"FEATUREBASE_ORG_URL\": \"https://your-org.featurebase.app\"\n      }\n    }\n  }\n}\n```\n\n### Using global install\n\nIf installed globally (`npm install -g @bellwetherlabs/featurebase-mcp`):\n\n```json\n{\n  \"mcpServers\": {\n    \"featurebase\": {\n      \"command\": \"featurebase-mcp\",\n      \"env\": {\n        \"FEATUREBASE_API_KEY\": \"your-api-key-here\",\n        \"FEATUREBASE_ORG_URL\": \"https://your-org.featurebase.app\"\n      }\n    }\n  }\n}\n```\n\n### Getting Your API Key\n\n1. Log in to your Featurebase account\n2. Navigate to your account settings\n3. Generate an API key\n4. Keep it secure - never commit it to version control\n\n### Environment Variables\n\nThe server requires these environment variables:\n\n#### Required\n- `FEATUREBASE_API_KEY`: Your FeatureBase API key\n\n#### Optional  \n- `FEATUREBASE_ORG_URL`: Your organization's FeatureBase URL (e.g., \"https://feedback.spacelift.io\"). Required only if using `resolve_post_slug` tool.\n- `FEATUREBASE_BASE_URL`: Custom API base URL (defaults to \"https://do.featurebase.app/v2\")\n\nYou can set them:\n\n1. In your Claude Desktop configuration (recommended)\n2. Export in your shell: `export FEATUREBASE_API_KEY=\"your-api-key-here\"`\n3. When running the server: `FEATUREBASE_API_KEY=\"your-api-key-here\" npx -y @bellwetherlabs/featurebase-mcp`\n\n## Available Tools\n\n### Posts\n\n#### `list_posts`\nList posts with optional filtering.\n\nParameters:\n- `id`: Find specific post by ID\n- `q`: Search posts by title or content\n- `category`: Filter by board names (array)\n- `status`: Filter by status IDs (array)\n- `sortBy`: Sort order (e.g., \"date:desc\", \"upvotes:desc\")\n- `startDate`: Posts created after this date\n- `endDate`: Posts created before this date\n- `limit`: Results per page\n- `page`: Page number\n\n#### `create_post`\nCreate a new post.\n\nParameters:\n- `title` (required): Post title (min 2 characters)\n- `category` (required): Board/category name\n- `content`: Post content\n- `email`: Submitter's email\n- `authorName`: Name for new users\n- `tags`: Array of tag names\n- `commentsAllowed`: Enable/disable comments\n- `status`: Post status\n- `date`: Creation date\n- `customInputValues`: Custom field values\n\n#### `update_post`\nUpdate an existing post.\n\nParameters:\n- `id` (required): Post ID to update\n- `title`: New title\n- `content`: New content\n- `status`: New status\n- `commentsAllowed`: Enable/disable comments\n- `category`: New category\n- `sendStatusUpdateEmail`: Email upvoters about status change\n- `tags`: New tags\n- `inReview`: Put post in review\n- `date`: Creation date\n- `customInputValues`: Custom field values\n\n#### `delete_post`\nPermanently delete a post.\n\nParameters:\n- `id` (required): Post ID to delete\n\n#### `get_post_upvoters`\nGet list of users who upvoted a post.\n\nParameters:\n- `submissionId` (required): Post ID\n- `page`: Page number (default: 1)\n- `limit`: Results per page (default: 10, max: 100)\n\n#### `add_upvoter`\nAdd an upvoter to a post.\n\nParameters:\n- `id` (required): Post ID\n- `email` (required): Upvoter's email\n- `name` (required): Upvoter's name\n\n#### `resolve_post_slug`\nConvert a post slug to post ID and get complete post details.\n\nParameters:\n- `slug` (required): Post slug from URL (e.g., \"spacectl-stack-local-preview-target\")\n\nReturns the complete post data including ID, title, content, and metadata.\n\n#### `get_similar_submissions`\nFind posts similar to the given query text.\n\nParameters:\n- `query` (required): Search query text to find similar submissions\n- `locale`: Locale for search (default: \"en\")\n\nReturns a list of similar posts based on content similarity.\n\n### Comments\n\n#### `get_comments`\nGet comments for a post or changelog.\n\nParameters:\n- `submissionId`: Post ID or slug (required if no changelogId)\n- `changelogId`: Changelog ID or slug (required if no submissionId)\n- `privacy`: Filter by privacy (\"public\", \"private\", \"all\")\n- `inReview`: Filter for comments in review\n- `commentThreadId`: Get all comments in a thread\n- `limit`: Results per page (default: 10)\n- `page`: Page number (default: 1)\n- `sortBy`: Sort order (\"best\", \"top\", \"new\", \"old\")\n\n#### `create_comment`\nCreate a new comment or reply.\n\nParameters:\n- `content` (required): Comment content\n- `submissionId`: Post ID or slug (required if no changelogId)\n- `changelogId`: Changelog ID or slug (required if no submissionId)\n- `parentCommentId`: Parent comment ID for replies\n- `isPrivate`: Make comment private (admins only)\n- `sendNotification`: Notify voters (default: true)\n- `createdAt`: Set creation date\n- `author`: Post as specific user (object with name, email, profilePicture)\n\n#### `update_comment`\nUpdate an existing comment.\n\nParameters:\n- `id` (required): Comment ID\n- `content`: New content\n- `isPrivate`: Make private (admins only)\n- `pinned`: Pin comment to top\n- `inReview`: Put comment in review\n- `createdAt`: Update creation date\n\n#### `delete_comment`\nDelete a comment (soft delete if it has replies).\n\nParameters:\n- `id` (required): Comment ID to delete\n\n### Help Center - Collections\n\n#### `list_collections`\nList help center collections with cursor-based pagination.\n\nParameters:\n- `cursor`: Cursor from previous response for pagination\n- `limit`: Items per page (1-100, default: 10)\n\n#### `create_collection`\nCreate a new help center collection.\n\nParameters:\n- `name` (required): Collection name\n- `description`: Collection description\n- `parentId`: Parent collection ID for nested collections\n- `icon`: Object with `type` (\"emoji\" or \"predefined\") and `value`\n- `translations`: Object keyed by locale (e.g. `{ en: { name, description } }`)\n\n#### `get_collection`\nGet a collection by ID.\n\nParameters:\n- `id` (required): Collection ID\n\n#### `update_collection`\nUpdate an existing collection.\n\nParameters:\n- `id` (required): Collection ID\n- `name`, `description`, `parentId`, `icon`, `translations`: Fields to update\n\n#### `delete_collection`\nDelete a collection.\n\nParameters:\n- `id` (required): Collection ID\n\n### Help Center - Articles\n\n#### `list_articles`\nList help center articles with optional filtering.\n\nParameters:\n- `cursor`: Cursor for pagination\n- `limit`: Items per page (1-100, default: 10)\n- `parentId`: Filter by parent collection ID\n- `state`: Filter by \"live\", \"draft\", or \"all\" (default: live)\n\n#### `create_article`\nCreate a new help center article. Body supports HTML with external image URLs or base64 data URIs.\n\nParameters:\n- `title` (required): Article title\n- `body`: HTML content (images via URLs or base64)\n- `description`: Brief description\n- `parentId`: Parent collection ID\n- `state`: \"live\" (publish) or \"draft\" (default)\n- `icon`: Object with `type` and `value`\n- `formatter`: \"default\" or \"ai\" (AI converts markdown/html)\n- `translations`: Object keyed by locale\n\n#### `get_article`\nGet an article by ID.\n\nParameters:\n- `id` (required): Article ID\n- `state`: \"live\" or \"draft\" (default: live)\n\n#### `update_article`\nUpdate an existing article.\n\nParameters:\n- `id` (required): Article ID\n- `title`, `body`, `description`, `parentId`, `state`, `authorId`, `icon`, `formatter`, `translations`: Fields to update\n\n#### `delete_article`\nDelete an article.\n\nParameters:\n- `id` (required): Article ID\n\n### Changelogs\n\n#### `list_changelogs`\nList changelogs with optional filtering.\n\nParameters:\n- `cursor`, `limit`: Pagination\n- `id`, `q`: Find by ID/slug or search\n- `categories`: Filter by category names (array)\n- `locale`, `state` (draft/live/all)\n- `startDate`, `endDate`: Date range\n- `sortBy`, `sortOrder`: Sort (e.g. date desc)\n\n#### `create_changelog`\nCreate a changelog. Provide `htmlContent` or `markdownContent` (or both).\n\nParameters:\n- `title` (required): Changelog title\n- `htmlContent`, `markdownContent`: Content (at least one)\n- `categories`: e.g. [\"New\", \"Fixed\", \"Improved\"]\n- `featuredImage`: Featured image URL\n- `allowedSegmentIds`: Segment IDs for access\n- `locale`, `date`, `state` (draft/live)\n\n#### `get_changelog`\nGet a changelog by ID or slug.\n\nParameters:\n- `id` (required): Changelog ID or slug\n\n#### `update_changelog`\nUpdate an existing changelog.\n\nParameters:\n- `id` (required): Changelog ID\n- `title`, `htmlContent`, `markdownContent`, `categories`, `featuredImage`, `allowedSegmentIds`, `date`\n\n#### `delete_changelog`\nDelete a changelog.\n\nParameters:\n- `id` (required): Changelog ID\n\n#### `publish_changelog`\nPublish a changelog.\n\nParameters:\n- `id` (required): Changelog ID\n- `sendEmail`: Notify subscribers (default: false)\n- `locales`: Locales to publish (empty = all)\n- `scheduledDate`: ISO date for scheduled publish\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Build TypeScript\nnpm run build\n\n# Run in development mode\nnpm run dev\n```\n\n## Security\n\n- Never hardcode your API key\n- Always use environment variables for API keys\n- Keep your API key secure and rotate it regularly\n- The server will not start without a valid `FEATUREBASE_API_KEY` environment variable\n\n## Publishing\n\nTo publish to npm under the Bellwether Labs org:\n\n1. **Log in to npm** (if not already):\n   ```bash\n   npm login\n   ```\n   Use credentials for an account that has publish access to `@bellwetherlabs`.\n\n2. **Build and publish**:\n   ```bash\n   npm run build\n   npm publish --access public\n   ```\n   Scoped packages (`@org/name`) are private by default; `--access public` makes it installable by anyone.\n\n3. **Verify**:\n   ```bash\n   npm view @bellwetherlabs/featurebase-mcp\n   ```\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}