Guide
Connect your AI assistant to your feedback boards, and ask it to find, sort and update feature requests for you.
The Upvoted MCP server lets an AI assistant such as Claude, ChatGPT, Cursor or VS Code work as you on the boards you are an admin of. It can list and search feature requests, read their votes and comments, file requests, comment, change a request's status, add a vote for a customer, set tags, merge duplicate requests, read your changelog and draft changelog releases, which it never publishes. It is for board admins, on boards on the Max plan.
This is the server URL. Every client below needs it:
https://upvoted.io/mcp
Most clients sign in to Upvoted for you: you add the server URL, a browser window asks you to sign in and approve, and that is all. Menu names in these apps change from time to time, so if a label below does not match exactly, look for the nearest one.
On Team and Enterprise plans, an owner adds the connector first under Admin settings > Connectors, then each member clicks Connect. Remote servers like this one are added as a connector, not in claude_desktop_config.json.
Add the server from your terminal:
claude mcp add --transport http upvoted https://upvoted.io/mcp
Then run /mcp inside Claude Code and choose to authenticate. A browser opens for you to sign in to Upvoted and approve.
Add this to ~/.cursor/mcp.json, or to .cursor/mcp.json in a project. Cursor then offers to sign in.
~/.cursor/mcp.json
{
"mcpServers": {
"upvoted": {
"url": "https://upvoted.io/mcp"
}
}
}
If Cursor's built-in browser does not load the sign-in page, copy the link into your normal browser.
Open the Command Palette, run MCP: Add Server, choose HTTP, paste the server URL and approve the sign-in. Or add it to .vscode/mcp.json:
.vscode/mcp.json
{
"servers": {
"upvoted": {
"type": "http",
"url": "https://upvoted.io/mcp"
}
}
}
A client that supports OAuth for remote MCP servers needs only the server URL. For one that cannot sign in and only takes a header, generate a personal token in Settings > MCP server and send it as Authorization: Bearer followed by the token. A token lasts 90 days and only works with the MCP server.
{
"mcpServers": {
"upvoted": {
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
},
"url": "https://upvoted.io/mcp"
}
}
}
These are the tools the server gives your assistant, as it describes them. Reads only look; changes write to the board.
list_boards
Reads
Lists the feedback boards this account is an admin of, with each board's slug, its statuses in board order and its tags. Call this first: the other tools take a board slug.
list_feature_requests
Reads
Lists a board's feature requests, most voted first, one page at a time. Narrow it by status name, tag name or text in the title or description. Includes requests still waiting for moderator approval (published: false), as the board does inside the app.
get_feature_request
Reads
Gets one feature request in full: its description, status, tags, every vote and every comment, with contributors' email addresses. A vote with added_by set was added by that board member for a customer they talked to. Comments marked internal are the board team's own notes and are not shown to the public. On boards that score requests, priority holds the team's impact and effort scores (1 to 5, null until scored) and the priority score, votes × impact ÷ effort; these are private to the board's team too.
create_feature_request
Changes
Files a new feature request on a board in your name, with your vote on it. It starts in the board's initial status and the board's members are notified.
update_feature_request_status
Changes
Moves a feature request to another of its board's statuses. Its voters and followers are notified and the board's integrations (Slack, Discord, Microsoft Teams, webhooks, Zapier) hear about it.
add_comment
Changes
Adds a public comment to a feature request in your name. Everyone following the request is notified, and @Name mentions of board members notify them.
list_changelog_releases
Reads
Lists a board's changelog releases, newest first, including drafts and scheduled ones. Only published releases are on the public changelog.
add_customer_vote
Changes
Adds a vote to a feature request for a customer you talked to, on a call or in a support ticket, identified by their email. It counts like the customer's own public vote, and get_feature_request shows you as the member who added it. When the email belongs to an Upvoted account, that person follows the request from then on and, unless notify is false, gets an email saying the vote was added. A customer who has already voted is not counted twice.
merge_feature_requests
Changes
Merges a duplicate feature request into the one it repeats. The duplicate's votes and comments move to the request kept, a customer who voted on both is counted once, and the duplicate leaves every listing: its links lead to the request kept from then on. There is no way to undo a merge.
create_changelog_draft
Changes
Creates a changelog release on a board as a draft. A draft is not on the public changelog and nobody is told about it: an admin reviews it and publishes it in the app. This tool never publishes or schedules anything.
Things you can ask, and the tools the assistant uses for them:
"Which requests on our roadmap board got the most votes this month?"
list_boards
list_feature_requests
"Move CSV export to In progress and comment that we have started on it."
update_feature_request_status
add_comment
"Add a vote from jane@acme.com to CSV export, she asked for it on a call."
list_feature_requests
add_customer_vote
"Find the duplicates of dark mode and merge them into the most voted one."
list_feature_requests
get_feature_request
merge_feature_requests
"Draft release notes for 2.4.0 from the requests that are Done."
list_feature_requests
create_changelog_draft
"Tag every request that mentions exports with Reporting."
list_feature_requests
set_feature_request_tags
Settings > MCP server lists everything connected to your account under Connected, with when each was last used. Revoke disconnects one straight away; the others keep working.
A client that signed in gets an access token that lasts 60 minutes and is refreshed for you. The refresh lasts 30 days, so a client you have not used for that long asks you to sign in again.
A personal token lasts 90 days. It is shown once, when you generate it, so copy it then; after that, generate a new one.