Guide

Upvoted MCP server

Connect your AI assistant to your feedback boards, and ask it to find, sort and update feature requests for you.

Overview

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

Connect

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.

Claude (claude.ai and the desktop app)

  1. Open Settings > Connectors and choose Add custom connector.
  2. Give it a name, such as Upvoted, and paste the server URL.
  3. Click Connect, sign in to Upvoted and approve the connection.
  4. In a conversation, turn Upvoted on from the tools menu.

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.

ChatGPT

  1. Turn on developer mode in Settings > Apps & Connectors > Advanced settings. It is available on paid plans, and on Business and Enterprise workspaces an admin may need to allow it first.
  2. Create a connector with the server URL and choose OAuth as the authentication.
  3. Sign in to Upvoted and approve the connection.
  4. In a chat, select the connector (or mention it) so ChatGPT uses its tools.

Claude Code

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.

Cursor

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.

VS Code

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"
    }
  }
}

Other clients, and clients without OAuth

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"
    }
  }
}

Open the MCP server settings

What it can do

These are the tools the server gives your assistant, as it describes them. Reads only look; changes write to the board.

  • List boards 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 or search feature requests 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 a feature request 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 a feature request 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.

  • Change a feature request's status 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.

  • Comment on a feature request 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 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 a vote for a customer 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.

  • Set a feature request's tags set_feature_request_tags Changes

    Replaces a feature request's tags with the ones given: a tag left out of the list is taken off the request, and an empty list clears them all. Names are matched to the board's tags from list_boards whatever their case; a name the board has no tag for yet becomes a new tag on the board, as when editing the request in the app.

  • Merge a duplicate feature request 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.

  • Draft a changelog release 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.

Examples

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

Permissions and privacy

  • Only board admins can use it. It acts as you, on the boards you are an admin of, as long as the board is not locked and its owner is on Max. A board where you are a member but not an admin, or any other board, is answered as though it did not exist.
  • The board owner's plan is what counts, as for every board feature: an admin of a board whose owner is on Max can use it whatever their own plan, and being on Max yourself does not open a board whose owner is not.
  • It sees what you see on each board as an admin, internal comments and contributors' email addresses included. Internal comments are marked internal so they are not quoted to the public by mistake.
  • What it writes is signed with your name and notifies people exactly as the app does: voters and followers hear about a status change, followers hear about a comment, and the board's integrations (Slack, Discord, Microsoft Teams, webhooks, Zapier) hear about status changes.
  • A changelog release it drafts stays a draft. It never publishes or schedules anything; you review and publish it in the app.
  • Merging cannot be undone. The duplicate's votes and comments move to the request kept, and a customer who voted on both is counted once.
  • No tool deletes a board, a request or a comment. Setting tags replaces a request's tags, and the board's own tags stay.
  • A board whose owner has no active plan is read-only, here as in the app.
  • Each account can make up to 120 requests a minute.

Managing access

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.

Open the MCP server settings

Troubleshooting

"The Upvoted MCP server is for board admins: you need to be an admin of a board on the Max plan"
You are not an admin of any board whose owner is on Max. On a board you own, upgrade to Max; on someone else's, ask its owner to make you an admin, or to upgrade. Only boards you are an admin of show up.
"The token is invalid or has expired"
The connection was revoked, or its token ran out. Reconnect the client, or generate a new personal token. Upvoted's API tokens, for a user or a board, do not work here: the MCP server only takes its own tokens.
"This app asked to return to an address it did not register."
The sign-in link is out of date or was changed. Start connecting again from the app.
"Too many requests: slow down and try again shortly"
The assistant hit the limit on requests per account. Wait a minute and ask again.
ChatGPT answers without using Upvoted
Select the connector in the chat, or mention it, so ChatGPT uses its tools.