MCP Tools
All 37 tools the Feedjolt MCP server exposes, grouped by resource, each with its required scope and role gate - plus the behaviors that surprise people: board and status deletion guards, changelog drafts vs publishing, and comment edit rules.
Every tool requires a scope on the calling principal - read, write, or delete. That grant comes from the OAuth consent screen or from an API key. See Permissions for what each scope means and how to grant it.
Connector is the URL, not the key. Reader-only tools never appear on /mcp/writer/. Writer-only tools never appear on /mcp/reader/. Combined /mcp/ lists every tool. Combined is legacy.
Scope alone is not enough
Some tools add a second lock: they also require workspace OWNER or ADMIN, the same role gate the dashboard uses. The scope must still be present - the role gate sits on top of it, never instead of it.
| OWNER/ADMIN only | A CONTRIBUTOR with write can still |
|---|---|
create_board, update_board, delete_board | create_post, update_post, change_post_status |
create_status, update_status, delete_status | add_tag_to_post, remove_tag_from_post |
create_tag, update_tag, delete_tag | post_comment (public only) |
reorder_items | update_comment (own body) |
create_changelog_entry, update_changelog_entry, publish_changelog_entry, delete_changelog_entry | |
merge_posts, unmerge_posts, move_post, assign_post_owner, set_post_featured, delete_post |
delete_comment requires the delete scope, not write. OAuth contributors cannot grant delete, so they cannot call this tool at all. Principals with delete who are not OWNER/ADMIN may only delete their own comments.
Two comment fields are also privileged: post_comment with is_internal: true, and update_comment with is_pinned or is_internal, require OWNER/ADMIN. Internal comments also need a plan that includes the internal_comments feature (Startup and above).
API keys act as ADMIN for the role gate. A fjk_ key is a workspace automation credential rather than a person, so it always passes the role check, subject to the scopes it holds. The role varies only for OAuth grants, where it is resolved from the signing-in user's membership at authorization time.
A denied call returns a permission error naming OWNER and ADMIN (-32004). See Troubleshooting.
Source links and ranking
list_posts, search_posts, get_post, and posts inside get_roadmap return a url pointing to the authenticated dashboard. Use this URL when citing feedback. Sign in and select the workspace connected to MCP before opening a link; dashboard routes use your selected workspace. Private or internal feedback keeps its existing access requirements.
list_posts defaults to sort: "new". With sort: "top", posts sort by weighted score, then vote count, then newest creation time. It is not a raw vote-count ranking. Roadmap posts also sort by weighted score, then vote count. Both weighted_score and vote_count are returned so agents can explain the ranking.
get_roadmap includes statuses hidden from the public roadmap, after visible statuses. search_posts matches title substrings; it is not semantic search.
Posts
| Tool | Scope | Connector | Purpose |
|---|---|---|---|
list_posts | read | Reader | List/filter posts by board, status, or tag, with pagination |
search_posts | read | Reader | Search posts by title keyword |
get_post | read | Reader | Full post detail: body, status, tags, and up to 200 comments |
create_post | write | Writer | Create a post on a board, authored by this key |
update_post | write | Writer | Update a post's title, body, or internal visibility |
change_post_status | write | Writer | Move a post to a new status, with an optional internal note |
move_post | write | Writer | Move a post to a different board |
add_tag_to_post | write | Writer | Tag a post (must use an existing tag) |
remove_tag_from_post | write | Writer | Remove a tag from a post |
assign_post_owner | write | Writer | Assign (or clear) a post's admin owner |
set_post_featured | write | Writer | Feature or unfeature a post in portal listings |
merge_posts | write | Writer | Merge a duplicate into a canonical post |
unmerge_posts | write | Writer | Reverse a merge, restoring the source post |
delete_post | delete | Writer | Permanently delete a post, its votes, and its comments |
Boards
| Tool | Scope | Connector | Purpose |
|---|---|---|---|
list_boards | read | Both | List all boards with visibility and post count |
create_board | write | Writer | Create a board |
update_board | write | Writer | Update a board, including archiving it |
delete_board | delete | Writer | Delete an empty board only - see below |
Tags
| Tool | Scope | Connector | Purpose |
|---|---|---|---|
list_tags | read | Both | List all tags with post counts |
create_tag | write | Writer | Create a tag |
update_tag | write | Writer | Rename or recolour a tag |
delete_tag | delete | Writer | Delete a tag - posts keep existing, they just lose it |
Statuses
| Tool | Scope | Connector | Purpose |
|---|---|---|---|
list_statuses | read | Both | List all workspace statuses |
create_status | write | Writer | Create a status |
update_status | write | Writer | Update a status's name, colour, roadmap visibility, or order |
delete_status | delete | Writer | Delete a status, reassigning its posts - see below |
Comments
| Tool | Scope | Connector | Purpose |
|---|---|---|---|
list_comments | read | Reader | List comments on a post, with pagination |
post_comment | write | Writer | Add a public comment; is_internal needs OWNER/ADMIN |
update_comment | write | Writer | Edit your own comment; pin or change visibility as OWNER/ADMIN - see below |
delete_comment | delete | Writer | Delete any comment as OWNER/ADMIN, otherwise only your own |
Changelog
| Tool | Scope | Connector | Purpose |
|---|---|---|---|
get_changelog | read | Both | Recent published changelog entries |
create_changelog_entry | write | Writer | Create a changelog entry as a draft - see below |
update_changelog_entry | write | Writer | Update a changelog entry's title, body, or linked posts |
publish_changelog_entry | write | Writer | Publish a draft - see below |
delete_changelog_entry | delete | Writer | Permanently delete an entry, published or draft |
Roadmap
| Tool | Scope | Connector | Purpose |
|---|---|---|---|
get_roadmap | read | Reader | Posts grouped by all statuses, including hidden roadmap statuses |
Ordering
| Tool | Scope | Connector | Purpose |
|---|---|---|---|
reorder_items | write | Writer | Set the display order of boards, tags, or statuses in one call |
Behaviors worth knowing
delete_board refuses populated boards
delete_board only works on a board with zero posts, and there is no override argument. Deleting a board cascades to every post, vote, and comment on it - permanently, with no undo - so MCP will not do that under any circumstances, no matter how the request is phrased.
To retire a board without losing its content, call update_board with archived: true instead. The board disappears from active listings; every post stays intact.
delete_status requires a reassignment target
Posts reference their status with a database constraint that blocks dropping a status still in use, so delete_status takes a mandatory reassign_to_status_id. Every post on the doomed status is moved there first, and each move gets its own status-history entry - identical to a manual status change.
Two statuses can never be deleted this way: the workspace's default status, and the last remaining status. Make another status the default first, or create a second status, before deleting either.
create_changelog_entry always drafts
create_changelog_entry only ever creates a draft - it is never visible to customers. Publishing is a separate, deliberate call: publish_changelog_entry. Publishing emails every subscriber and fires the changelog's webhooks, so it reaches real customers the moment it runs. Check the entry's content with update_changelog_entry before you publish it, not after.
update_comment mixes contributor and admin rules
update_comment edits three independent things - body, is_pinned, is_internal - but they don't follow the same rule. Editing body only works on a comment the calling principal posted itself; the service rejects an attempt to rewrite someone else's words. Pinning (is_pinned) and visibility (is_internal) are OWNER/ADMIN actions, even on a comment you wrote, and is_internal also needs the internal_comments plan feature. delete_comment follows the same split: an OWNER/ADMIN can delete any comment - which is what makes it useful for spam cleanup - while everyone else can only delete their own.
Other things to know
create_postcounts against the workspace's monthly post quota - the same limit the dashboard's "New post" button respects. It fails once the quota is hit.get_postandlist_commentsreturn internal comments as well as public ones - MCP agents see everything an admin sees. Don't relay anis_internal: truecomment back to an end customer.merge_postsis reversible withunmerge_posts, but the restore is degraded: votes, comments, and tags stay on the target post. The restored post comes back with 0 votes.move_postrefuses to move a post onto an archived board, and refuses a "move" to the board the post is already on.reorder_itemssilently drops any ID that doesn't belong to the workspace (typo, wrong workspace, already deleted) instead of erroring. Comparereorderedtosubmittedin the response to see if anything was dropped.
What MCP still can't do
MCP tools operate on one workspace's feedback data - posts, boards, tags, statuses, comments, changelog, roadmap. They don't touch workspace settings, billing, team members and roles, or webhook/widget/branding configuration. Those stay in the dashboard.
MCP Permissions
The three MCP scopes - read, write, delete - what each covers for OAuth grants and API keys, how keys created before scopes existed are grandfathered, and how to grant or change scopes.
MCP Troubleshooting
Fix common Feedjolt MCP errors: 402 plan required, 401 unauthorized, 403 missing scope or role, 429 rate limited, tag-not-found, and the delete guards on boards and statuses.
