heedbackdocs

MCP server

heedback runs an MCP server, so an AI assistant such as Claude Code, Cursor or Claude Desktop can work with your feedback directly. You can ask "what are the top open requests on the Mobile board?", move a post to Planned, merge a duplicate or draft a changelog entry from a release note, all without opening the dashboard.

The MCP server is on the Team plan, like the public API. It uses the same API keys, and it stops working when they do: if your workspace leaves Team, or the Team trial ends, requests are refused.

What you need

  • An API key, created under Settings → API in the dashboard. Keys are shown once, so copy yours when you create it.

  • The server address:

    https://heedback.frugalsaas.com/api/mcp

Your assistant sends the key as a bearer token in the Authorization header, exactly as the API does.

Which key to use

Key scopeWhat the assistant can do
read ("Read only")Read boards, posts, comments and the changelog. Write tools don't appear.
write ("Read & write")Everything below, including changing statuses and merging posts.
write_onlyRefused. The MCP server always needs to read.

Use a read key for an assistant that only reads feedback. Anyone can write a post on your portal, and your assistant reads that text. A post could contain instructions aimed at the assistant. With a read key, the assistant can't act on them.

If you do give an assistant a write key, keep your client's approval prompt on for write tools, so you see each change before it happens. Changing a status emails the post's followers, and a merge can't be undone.

Connect your assistant

Claude Code

claude mcp add --transport http heedback https://heedback.frugalsaas.com/api/mcp \
  --header "Authorization: Bearer $HEEDBACK_API_KEY"

Cursor

Add this to .cursor/mcp.json (one project) or ~/.cursor/mcp.json (all projects). ${env:HEEDBACK_API_KEY} reads the key from your environment, so it never sits in the file:

{
  "mcpServers": {
    "heedback": {
      "url": "https://heedback.frugalsaas.com/api/mcp",
      "headers": { "Authorization": "Bearer ${env:HEEDBACK_API_KEY}" }
    }
  }
}

Claude Desktop

Option 1: a custom connector. Open Settings → Connectors → Add custom connector, enter the server address, and add a request header named Authorization with the value Bearer followed by your key. The request headers field is still rolling out, so your account may not have it yet. If it doesn't, use option 2.

Option 2: mcp-remote. Add this to claude_desktop_config.json and restart Claude Desktop. The header is passed through an environment variable because the space in Bearer … would otherwise be split:

{
  "mcpServers": {
    "heedback": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://heedback.frugalsaas.com/api/mcp",
        "--header",
        "Authorization:${HEEDBACK_AUTH}"
      ],
      "env": { "HEEDBACK_AUTH": "Bearer YOUR_API_KEY" }
    }
  }
}

ChatGPT

Not supported yet. ChatGPT only connects to servers that sign in with OAuth or need no sign-in at all, and heedback's server uses API keys.

Tools

ToolWhat it doesKey needed
list_boardsYour boards, and your statuses with their id, key and labelread
list_postsApproved posts, most-voted first. Filter by board, status or text. Up to 50 at a timeread
get_postOne post with its public comments (up to 50), and whether it has been approved by moderationread
list_changelogPublished changelog entries, newest first. Up to 50read
create_postCreate a post on a board. Fires your post.created webhook and Slack messagewrite
add_commentAdd a public comment to a post. Fires your comment.created webhookwrite
add_internal_noteAdd a private internal note for your team onlywrite
update_post_statusMove a post to another status. Emails the post's followers, as it does from the dashboardwrite
merge_postsMerge a duplicate into another post. Votes and comments move over and the duplicate is closedwrite
create_changelog_draftCreate a changelog draft. Publishing stays in the dashboardwrite

A few things to know:

  • Internal notes are write-only. An assistant can add one, but no tool ever returns a note, so notes never leave your dashboard. Adding one sends nothing: no email, webhook or Slack message.
  • Statuses are matched by id or key, never by label. Labels can be renamed and two can be the same, and a wrong match would email followers about the wrong thing. list_boards gives the assistant both.
  • Merging is only available over MCP, not the REST API. It can't be undone.
  • Long text is shortened. Post, comment and changelog bodies are cut at 4,000 characters, and the reply says when that happened.
  • Posts made over MCP have no author. create_post doesn't accept a name or an email address, so a post can never be filed in someone else's name.

Limits

The MCP server and the API share one budget of 120 requests per minute per key. Every message the assistant sends counts, including the start of a session, which costs 2–3 requests with most clients today.

Troubleshooting

ResponseMeaning and fix
401 unauthorizedThe key is missing, mistyped or revoked. Check the Authorization header is Bearer followed by the full key.
403 not_entitledThe workspace isn't on Team (or its trial has ended). See plans.
403 insufficient_scopeA write_only key. The MCP server always needs to read, so use a read or read & write key.
Tool error insufficient_scopeThe assistant called a write tool with a read key. Use a read & write key if it should be able to make changes.
403 origin_not_allowedThe request came from a web page. The MCP server only accepts requests from assistants and tools, not browsers.
429 rate_limitedOver 120 requests a minute on this key, counting API calls too. Wait for the time in Retry-After (60 seconds).