MCP feature request server

The feedback board your coding agent ships from

MCP (Model Context Protocol) is an open standard that lets AI coding tools call outside services. Every FeatQ board is an MCP server, so agents like Claude Code and Cursor can read your feature requests, pull a demand-ranked list, draft an implementation spec, and mark the work done when it ships.

On this page

Connect in one command

Copy your board key from the board admin page (it starts with fq_), then run this in the project where you use Claude Code:

claude mcp add --transport http featq https://featq.com/api/mcp --header "Authorization: Bearer fq_..."

Restart the client and the six tools below are available. Other clients use the same endpoint, https://featq.com/api/mcp, over streamable HTTP with the same bearer header. Setup steps for Cursor, Windsurf, ChatGPT, and the vibe-coding builders are on the integrations pages, and the full reference lives in the MCP docs.

The six tools

Every tool runs against the one board your key belongs to. Results come back as JSON, so the agent can inspect the fields and decide its next call. Here is each tool with a realistic call and response.

list_requests

List the requests on your board, sorted by votes or by newest. The starting point for most agent sessions.

Example call

list_requests({ status: "planned", sort: "votes", limit: 2 })

Example response

{
  "board": { "slug": "acme-app", "name": "Acme App" },
  "requests": [
    {
      "id": "r_7f3k2m",
      "title": "Export invoices as CSV",
      "status": "planned",
      "votes": 41,
      "comments": 6,
      "created_at": "2026-06-02T09:14:00.000Z"
    },
    {
      "id": "r_2c9x1p",
      "title": "Dark mode for the dashboard",
      "status": "planned",
      "votes": 27,
      "comments": 3,
      "created_at": "2026-06-18T15:40:00.000Z"
    }
  ]
}

get_ranked_requests

Get the board ranked by current demand: votes plus half-weight comments, with the score fading as a request ages over about 90 days. Newer requests win ties. One call answers "what should I build next?"

Example call

get_ranked_requests({ limit: 2 })

Example response

{
  "board": { "slug": "acme-app", "name": "Acme App" },
  "generated_at": "2026-07-19T08:00:00.000Z",
  "ranking": "Requests are scored by votes plus half-weight comments, and the score fades as a request ages over about 90 days. Newer requests win ties.",
  "requests": [
    {
      "id": "r_7f3k2m",
      "title": "Export invoices as CSV",
      "status": "planned",
      "votes": 41,
      "comments": 6,
      "created_at": "2026-06-02T09:14:00.000Z",
      "score": 26.2
    },
    {
      "id": "r_2c9x1p",
      "title": "Dark mode for the dashboard",
      "status": "new",
      "votes": 27,
      "comments": 3,
      "created_at": "2026-06-18T15:40:00.000Z",
      "score": 20.2
    }
  ]
}

get_request

Read one request in full, including its comments, before planning or changing anything.

Example call

get_request({ id: "r_7f3k2m" })

Example response

{
  "board": { "slug": "acme-app", "name": "Acme App" },
  "request": {
    "id": "r_7f3k2m",
    "title": "Export invoices as CSV",
    "description": "We need to hand invoices to our accountant every quarter.",
    "status": "planned",
    "votes": 41,
    "comments": 1,
    "created_at": "2026-06-02T09:14:00.000Z",
    "submitter_email": "[email protected]"
  },
  "comments": [
    {
      "id": "c_9k1z",
      "author_name": "Priya",
      "content": "Date-range filter would make this actually useful.",
      "is_admin": false,
      "created_at": "2026-06-04T11:02:00.000Z"
    }
  ]
}

generate_spec

Turn a request and its discussion into a markdown implementation spec draft the agent can work from.

Example call

generate_spec({ id: "r_7f3k2m" })

Example response

{
  "board": { "slug": "acme-app", "name": "Acme App" },
  "request": {
    "id": "r_7f3k2m",
    "title": "Export invoices as CSV",
    "status": "planned"
  },
  "markdown": "# Spec: Export invoices as CSV\n\n## Problem\nUsers need invoice data outside the app...\n\n## Proposed scope\n- Add an Export button to the invoices list...\n\n## Out of scope\n- PDF export..."
}

update_request_status

Move a request through the workflow. Marking it done publishes it to the public changelog and queues emails to the voters.

Example call

update_request_status({ id: "r_7f3k2m", status: "done" })

Example response

{
  "success": true,
  "request": {
    "id": "r_7f3k2m",
    "title": "Export invoices as CSV",
    "status": "done",
    "votes": 41,
    "comments": 6,
    "created_at": "2026-06-02T09:14:00.000Z"
  },
  "notifications_queued": 41,
  "changelog_url": "/b/acme-app/changelog"
}

get_board_stats

A compact overview of the board: totals, status distribution, and the five highest-voted requests.

Example call

get_board_stats({})

Example response

{
  "board": { "slug": "acme-app", "name": "Acme App" },
  "total_requests": 34,
  "total_votes": 312,
  "by_status": {
    "new": 14,
    "considering": 8,
    "planned": 5,
    "in_progress": 2,
    "done": 5
  },
  "top_requests": [
    { "id": "r_7f3k2m", "title": "Export invoices as CSV", "status": "planned", "votes": 41, "comments": 6, "created_at": "2026-06-02T09:14:00.000Z" }
  ]
}

A feature board with MCP vs without

The board itself is the same either way: customers vote, you see demand. MCP changes what happens between a request getting votes and the work shipping.

TaskWith MCPWithout MCP
Finding out what customers wantThe agent reads the board directly and pulls the ranked list in one call.You read the board in a browser and copy requests into your editor by hand.
Choosing what to build nextget_ranked_requests returns requests scored by votes, comments, and recency, so the top item is the answer.You scan the vote counts and decide from memory.
Writing the specgenerate_spec drafts a markdown spec from the request, its comments, and the board context.You write the spec from scratch, or the agent guesses from a pasted title.
Closing the loop with votersThe agent marks the request done. FeatQ publishes the changelog entry and emails the voters.You update statuses by hand and voters find out if they check back.
Running on a scheduleA weekly cron can pull the top spec over HTTP and hand it to your agent. See the automation guide.There is nothing for a scheduler to call.

Wondering how other feedback tools compare on MCP support? We checked eight of them against their own docs, dated every claim, and put it in one table: Which feedback tools have MCP servers? (2026)

Automate the loop

Beyond in-session tools, FeatQ exposes two plain HTTP endpoints for schedulers: /api/v1/top-requests returns the ranked list, and /api/v1/top-spec returns a ready-to-implement markdown spec for the current number one request. A weekly GitHub Action or cron job can fetch the spec, hand it to your agent, and open a pull request for you to review. Your agent, your keys, your schedule.

The complete recipes, including a full GitHub Action YAML and a VPS cron version, are in the automation guide.

Scheduled digests

Scheduled digests are on our public roadmap. Vote on how you want them delivered.

Vote on the FeatQ roadmap

The roadmap board is a live FeatQ board. It runs the same ranking, the same MCP server, and the same changelog you get on your own board.

Frequently asked questions

Practical answers about agents, voting, embeds, and pricing.

MCP (Model Context Protocol) is an open standard that lets AI coding tools like Claude Code and Cursor call outside services, and FeatQ exposes each board as one of those services.

No. FeatQ works as a normal hosted feedback board with voting, comments, statuses, and a public changelog. MCP is included on every plan for when you want your coding agent to work from the board.

Any client that speaks MCP over streamable HTTP and can send a bearer header: Claude Code, Cursor, Windsurf, Codex CLI, and others. FeatQ does not use the older SSE transport.

It can read requests, comments, and stats, generate spec drafts, and update request statuses on the one board its key belongs to. It cannot touch other boards, billing, or board settings.

Each request is scored by its votes plus half-weight comments, and the score fades as the request ages over about 90 days. Newer requests win ties. It is deterministic: no model decides the order.

The key is scoped to one board and should be stored as a secret in your own repo or server, never committed. Anyone holding it can read that board and update its request statuses, so treat it like any API secret.

Still have questions? Contact us

Share this page