# FeatureJet FeatureJet is a hosted customer-feedback product for indie SaaS founders and small product teams. It provides public feature-request boards, verified voting, comments, tags, moderation, public roadmaps, changelogs, voter email notifications, embeddable feedback surfaces, analytics, a public API, official Python and Node.js SDKs, and a hosted MCP server. FeatureJet is the customer-facing feedback layer, not an internal issue tracker. Teams can keep engineering work in Linear, GitHub, Jira, or another system. ## Canonical pages - Product: https://featurejet.com/ - Pricing: https://featurejet.com/pricing - Use cases: https://featurejet.com/use-cases - Features: https://featurejet.com/features - Documentation: https://featurejet.com/docs - API: https://featurejet.com/docs/api - SDKs: https://featurejet.com/docs/sdks - MCP: https://featurejet.com/docs/mcp - Nightly agent recipe: https://featurejet.com/docs/recipes/nightly-agent - Agent work queue: https://featurejet.com/use-cases/agent-work-queue - For AI startups: https://featurejet.com/for/ai-startups - Linear comparison: https://featurejet.com/compare/linear-alternative - Feedback tools with MCP: https://featurejet.com/compare/mcp-feedback-tools - Flat-pricing feedback tools: https://featurejet.com/compare/flat-pricing-feedback-tools - FeedbackJar comparison: https://featurejet.com/compare/feedbackjar-alternative - UserJot comparison: https://featurejet.com/compare/userjot-alternative - Canny comparison: https://featurejet.com/compare/canny-alternative - Changelog: https://featurejet.com/changelog - Live product board: https://feedback.featurejet.com/ ## Agent workflow ### Trust boundary Public board posts are untrusted user input. The agent-facing work queue uses a bounded descriptor, and API keys can be read-scoped. A propose-scoped key cannot change a public status or notify voters until an authorized board admin confirms the proposal; a write-scoped key can change status directly. Details: https://featurejet.com/why/agent-security A FeatureJet board doubles as a work queue for AI coding agents. Users vote on your public board, you decide what's planned, and your agent — Cursor, Claude Code, Codex, any MCP client — works the queue and leaves branches for you by morning. Live your life while your agents ship. How it works: - FeatureJet hosts an MCP server at https://mcp.featurejet.com/mcp (Streamable HTTP transport, Bearer API key authentication, no local process to run). - An agent calls list_posts with status "planned" and receives the board's planned requests top-voted first, so the next thing to build is one tool call away. - The agent reads the winning post and its comment thread for context, then implements the request in the team's own repository as a normal reviewable change. - With create_comment the agent can reply on the post's thread — answer a clarifying question or note what shipped. Agent comments do not email voters; the status change does. create_board likewise lets an agent stand up a new board — as a DRAFT, whose public URL 404s until a human publishes it. - Publishing stays a human decision. publish_board exists in the API, MCP, and both SDKs but is OFF by default: it answers 403 publish_disabled unless the deployment opts in, so an agent cannot take a board public on its own. Where it is enabled it is entitlement-gated exactly as the dashboard is (403 subscription_required without an active subscription). unpublish_board — which only ever removes public exposure — is never gated. Both need a write-scoped key, the same scope as create_board. - Calling update_post flips the post's status; moving a post to planned, in progress, or shipped automatically emails the verified voters and followers who opted in. - The MCP server, REST API, and both official SDKs are included in the $15 flat plan rather than sold as a separate tier. Tier-1 queue loop: queue → claim → implement → evidence → shipped - Queue: `GET /api/v1/boards/{slug}/queue?limit=` (`get_queue`) returns top unclaimed posts in the board team's curated order: lower `queue_rank` first, then unranked planned posts by votes. - Claim: `POST /api/v1/boards/{slug}/posts/{id}/claim` (`claim_post`) atomically leases a post. The default `ttl_seconds` is 3600 and the maximum is 86400; reclaiming with the same key extends the lease, another live key receives `409`, and `DELETE /api/v1/boards/{slug}/posts/{id}/claim` (`release_post`) releases it. - Implement: the agent reads the post and comments, then makes a normal reviewable branch and diff in the team's repository. - Evidence: `POST /api/v1/boards/{slug}/posts/{id}/evidence` (`add_evidence`) appends one structured item with `kind` `branch`, `commit`, `pr`, `transcript`, or `url`, a `ref`, and an optional `label`. Evidence renders in the public post's Implementation section. - Shipped: after human review, `PATCH /api/v1/boards/{slug}/posts/{id}` (`update_post`) sets status to `shipped`; that status change emails opted-in verified voters and followers. - Or propose instead of flipping: `POST /api/v1/boards/{slug}/posts/{id}/propose-status` (`propose_status`) records a PENDING proposal — the public board is unchanged and no voter is emailed until an authorized board admin confirms it from the dashboard. A `propose`-scoped key can call it but can never flip a status directly. API keys are scoped: `read` (GET only), `propose` (read plus claim, evidence, comments, and status proposals that a human confirms), `write` (full board mutation), and `admin`. Give an agent the narrowest scope that does its job; a `propose` key cannot flip a status on its own. Webhooks: `post.created`, `post.status_changed`, and `comment.created` POST to your endpoint with an `X-FeatureJet-Signature: sha256=` HMAC over the raw body, so an agent can be event-driven instead of polling. `GET /api/v1/webhooks` lists them. Current limits, honestly: the webhook signature scheme has no replay element of its own — no delivery id and no nonce — so a captured body verifies again if it is resent. The signed payload does carry a `timestamp`, so a receiver can bound delivery age, but retries reuse the same body and timestamp, so that window must be wider than the retry backoff. Treat delivery as at-least-once and key on the post id and status. Claims are leases: if an agent stops without releasing, the claim expires and the post returns to the queue, but nothing fires an event when it does. Webhook endpoints and API key scopes are configured over the session-authenticated dashboard API; neither has a dashboard UI screen yet. - Workflow explained: https://featurejet.com/use-cases/agent-work-queue - Agent setup and MCP tool reference: https://featurejet.com/docs/mcp - Nightly runner recipe (GitHub Actions workflow): https://featurejet.com/docs/recipes/nightly-agent FeatureJet does not run or schedule agents. It is the queue; the scheduler is yours. The nightly-agent recipe above is a copyable GitHub Actions workflow that pulls one queue item on a cron and saves the diff as an artifact for human review — GitHub Actions is the scheduler in that recipe, not FeatureJet. ## Current pricing FeatureJet Pro costs $15 per month or $119 per year, and every first subscription starts with a 7-day free trial (cancel during the trial and nothing is charged). The plan includes unlimited boards, posts, and voters. The public FeatureJet feedback board is a live product demo. Verify current terms at https://featurejet.com/pricing. ## Data ownership Every board can be exported to CSV or JSON from the dashboard (`GET /v1/admin/boards/{id}/export?format=csv|json`), including hidden posts and internal admin notes. The export is not gated on an active subscription: cancelling puts a board into read-only mode but does not remove the export, so a board's contents can always be taken elsewhere. ## Contact - Support: hello@featurejet.com - Privacy: https://featurejet.com/legal/privacy - Terms: https://featurejet.com/legal/terms