Product

Set Up Feedjolt MCP in Cursor and Claude Code, Step by Step

Add Feedjolt's Reader and Writer MCP connectors to Cursor or Claude Code with OAuth, check the tools load, then run a first board cleanup with exact tool names.

October 15, 202610 min read

This is the hands-on version: the config to paste, the consent screen to expect, and the tool calls to run, in order. Feedjolt's MCP server has two connectors, Reader and Writer, and each one goes in its own chat (in Cursor, its own workspace). By the end you'll have both connected in Cursor or Claude Code and will have run your first 15-minute board cleanup with the documented tool names. If you want the reasoning first, read why triage feedback from your editor. For what the product does, see Feedjolt's MCP server.

To set up Feedjolt MCP in Cursor or Claude Code, add one connector per chat. Reader goes in one chat at https://api.feedjolt.com/mcp/reader/ and Writer in a separate chat (in Cursor, a separate workspace) at https://api.feedjolt.com/mcp/writer/. No API key is needed. The client opens a browser, you pick a workspace and approve scopes: read on Reader, and write on Writer with delete left unchecked. Check that the tools appear. Then, in Reader, call list_boards, search_posts or list_posts, and get_post. In Writer, paste the post IDs and your decisions and call change_post_status, add_tag_to_post, post_comment or merge_posts. Draft release notes with create_changelog_entry and publish only after a person reads them. Feedjolt's AI flags likely duplicates for a person to review, and agents work the board over MCP with the permissions a person grants.

What you need before you start

You need four things in place before you start:

  • An MCP-capable client. This guide covers Cursor and Claude Code. Claude Desktop and Windsurf also work with the same two URLs.
  • A workspace with MCP turned on. MCP access depends on your plan.
  • An accepted workspace membership. If someone invited you, accept the invite first. A pending invite can't complete the OAuth step, and the consent screen won't show the workspace.
  • Two separate chats or workspaces. One holds Reader and the other holds Writer. Decide now which project gets which so they don't end up in the same place.

Set up Reader and Writer (OAuth first)

Both connectors use OAuth by default, so each config entry is just a name and a URL. You don't need to copy or rotate a key. When the client first connects, it finds the sign-in flow on the server and opens your browser.

Reader chat

Add this to the MCP config of the project or chat you'll use to read the board:

{ "mcpServers": { "feedjolt-reader": { "url": "https://api.feedjolt.com/mcp/reader/" } } }

When the client connects, your browser opens the Feedjolt consent screen. Pick one workspace. The token is bound to that workspace and can't reach any other. Check the redirect hostname on the screen (for example cursor.com). A loopback address triggers an extra warning, so only approve an app you started yourself. Reader offers only the read scope, so you have nothing else to tick.

Writer chat (a different project or workspace)

In a different project or chat, add the Writer connector:

{ "mcpServers": { "feedjolt-writer": { "url": "https://api.feedjolt.com/mcp/writer/" } } }

On the consent screen, grant write. The delete scope is unchecked by default. Leave it unchecked unless you have a specific reason to remove posts permanently.

Never put Reader and Writer in the same chat or the same mcp.json. Reader can see customer text but can't change anything. Writer can change things but never returns post titles, bodies or comment text. So if a customer post contains hidden instructions, the session that reads it has no tools to act on them. For the same reason, don't use the combined https://api.feedjolt.com/mcp/ endpoint for new setups. It's a legacy endpoint that puts read and write tools in one session.

Cursor

In Cursor, open Settings → MCP and add one connector per workspace. Add feedjolt-reader in the workspace you use for reading and feedjolt-writer in a different one. Cursor opens the browser for OAuth the first time you use it.

If you'd rather use a static credential, fjk_ API keys are still supported. In that case the entry takes "transport": "http", the same "url", and "headers": { "Authorization": "Bearer fjk_..." }. The setup docs show the full key-based config for each client.

Claude Code

Claude Code uses the same Reader and Writer URLs. Add each one through Claude Code's own MCP settings, with one connector per chat, and approve the consent screen in your browser. Claude Code's MCP documentation explains how to add a remote server, and the Feedjolt MCP docs list what each connector exposes.

Check it worked

After you approve, the tools should appear in the client's tool list. In the Reader chat, ask the agent to call list_boards. It should return your boards. In the Writer chat, call list_statuses. It's available on both connectors, so it safely confirms that Writer is connected without changing anything. If either call fails, see Troubleshooting below.

Your first 15-minute board cleanup

This first session uses a made-up theme, "offline mode", as the search topic. Swap in whatever your board gets the most requests about.

  1. Orient (Reader). Call list_boards and pick the feature board. Then call list_statuses and list_tags so the agent knows which names already exist. Later steps should reuse those names rather than invent new ones.
  2. Find candidates (Reader). Call search_posts with words that appear in titles, such as "offline" and "sync". It matches title substrings, not meaning, so try a few variants. You can also use list_posts filtered by board or status, with sort: "top" to rank by weighted score and then votes.
  3. Read the threads (Reader). Call get_post on two to four IDs. It returns the body, tags and up to 200 comments. For longer threads, use list_comments. Internal comments come back too, so don't quote them to customers.
  4. Decide (a person). Pick the canonical post, the status for each post, the tags (existing ones only) and the public reply. The agent can help with this step, but a person makes the call.
  5. Apply (Writer). Paste the post IDs and your decisions into the Writer chat. Use merge_posts for true duplicates, change_post_status (with an optional internal note), add_tag_to_post, and post_comment with the approved reply. Writer doesn't need any customer text for this.
  6. Draft the changelog (Writer). Call create_changelog_entry, which always creates a draft, and fix it with update_changelog_entry. After a person reads the draft, call publish_changelog_entry.

Two prompts you can paste

For the Reader chat:

Search the feature board for posts about offline mode and sync. Summarize each one in a line, group likely duplicates, and propose a canonical post, a status and existing tags for each group. List the post IDs and each post's url so I can check them. Don't quote internal comments.

For the Writer chat:

Apply these decisions to these post IDs: merge 1042 and 1057 into 1013; set 1013 to a status such as Planned with the note "grouped offline requests"; add an existing tag such as offline to 1013; post this reply on 1013: "Thanks, we've grouped the offline requests here and will post updates on this thread."

The url that list_posts, search_posts and get_post return opens the post in the signed-in dashboard. Use it to check the agent's grouping before you act on it.

What agents should not do alone

Some actions are easy to call and hard to undo. Keep a person involved in each of these:

  • Publishing a changelog. publish_changelog_entry emails subscribers and fires webhooks, so a person should read the draft first.
  • Deleting posts that have votes. A merge or a status change is better than delete_post.
  • Merging requests that only sound alike. Two posts can share words and still mean different scopes. Also note that unmerge_posts brings the source post back with 0 votes, while the votes, comments and tags stay on the target.
  • Retiring a board with delete_board. It only works on empty boards. Use update_board with archived: true instead.
  • Relaying internal comments. Anything marked is_internal: true stays inside the team.

Permissions and roles in one minute

The scopes are read, write and delete, and they don't stack. write doesn't imply read, and delete doesn't imply write. If a tool later needs delete, the server refuses the call and asks you to approve again, so you never get the scope without approving it.

Roles still apply on top of scopes. Over OAuth, a contributor can create and edit posts, change status, add or remove tags and comment publicly. An owner or admin is needed for these:

  • merging, unmerging, moving, featuring, reassigning or deleting posts
  • all changelog tools
  • internal or pinned comments
  • reordering
  • board, status and tag admin

A contributor can't grant delete. API keys pass the role gate as an admin but still need the right scopes.

Every call is audited, including reads. To revoke access or change scopes, go to Dashboard → Developers → MCP → Connected apps, then connect and approve again. Only owners and admins can see and revoke grants there.

If your role is reduced, the grant is revoked, so reconnect and approve the scopes you still have. A later promotion doesn't add scopes to an existing token, so reconnect to pick them up. The permissions docs have the full tool-by-role table.

Troubleshooting

  • 402: Your workspace doesn't include MCP. MCP access depends on your plan.
  • 401: The grant is missing or expired. Approve again and check Connected apps.
  • 403: Either a scope is missing or your role is too low. If a scope is missing, the error names it, so approve again with that scope. If your role is too low, ask an owner or admin. A canceled or unpaid subscription also returns 403 on MCP. Reactivating billing fixes it.
  • 429: The limit is 600 requests per minute per principal. Wait the number of seconds given in retry_after_seconds.
  • "Tag 'X' not found": add_tag_to_post only uses existing tags. Call list_tags, or create the tag first.

The troubleshooting docs cover the OAuth error codes in more detail.

Where Feedjolt fits

Feedjolt is a feedback board with voting, a public roadmap and a changelog. Its MCP connectors let your agents work that board from Cursor or Claude Code.

The trade-off is that Feedjolt has fewer native integrations than Canny. There's no Jira, Salesforce or HubSpot connection today; it connects to Slack, Linear and ClickUp.

FAQ

How do I add Feedjolt MCP to Cursor?

In Cursor settings → MCP, add one connector per workspace: feedjolt-reader with the URL https://api.feedjolt.com/mcp/reader/ in one workspace, and feedjolt-writer with https://api.feedjolt.com/mcp/writer/ in a different one. Cursor opens a browser for OAuth. Pick the workspace, approve, and the tools appear.

Does it work with Claude Code?

Yes. Claude Code uses the same Reader and Writer URLs. Add them through Claude Code's own MCP settings, one connector per chat, and approve in the browser.

Why two connectors instead of one?

Reader can see customer text but has no write or delete tools. Writer can make changes but never returns post titles, bodies or comment text. In separate chats, instructions hidden inside a customer post can't trigger a change, because the change tools aren't in that session.

Do I need an API key?

No. OAuth with the URL is the default. If you want a static credential, fjk_ API keys are still supported, with the same three scopes.

Which scopes should I grant?

read on Reader (the only one offered there). On Writer, grant write and leave delete unchecked unless you really need permanent removal. If a tool later needs delete, Feedjolt asks you to approve again rather than granting it silently.

How do I find duplicates with MCP?

In Reader, search_posts matches words in post titles, so try a few phrasings. list_posts filters by board, status or tag. Add sort: "top" to rank by weighted score, then votes. Open candidates with get_post, then run merge_posts in Writer only after a person has chosen the canonical post.

Can the agent publish a changelog by itself?

create_changelog_entry only creates a draft. publish_changelog_entry emails subscribers and fires webhooks, so treat it as a deliberate step a person takes after reading the draft.

Is MCP included in every workspace?

MCP access depends on your plan.

Want a feedback board your agents can work from the editor? See Feedjolt.