Feedjoltdocs
DevelopersMCP

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 onlyA CONTRIBUTOR with write can still
create_board, update_board, delete_boardcreate_post, update_post, change_post_status
create_status, update_status, delete_statusadd_tag_to_post, remove_tag_from_post
create_tag, update_tag, delete_tagpost_comment (public only)
reorder_itemsupdate_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.

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

ToolScopeConnectorPurpose
list_postsreadReaderList/filter posts by board, status, or tag, with pagination
search_postsreadReaderSearch posts by title keyword
get_postreadReaderFull post detail: body, status, tags, and up to 200 comments
create_postwriteWriterCreate a post on a board, authored by this key
update_postwriteWriterUpdate a post's title, body, or internal visibility
change_post_statuswriteWriterMove a post to a new status, with an optional internal note
move_postwriteWriterMove a post to a different board
add_tag_to_postwriteWriterTag a post (must use an existing tag)
remove_tag_from_postwriteWriterRemove a tag from a post
assign_post_ownerwriteWriterAssign (or clear) a post's admin owner
set_post_featuredwriteWriterFeature or unfeature a post in portal listings
merge_postswriteWriterMerge a duplicate into a canonical post
unmerge_postswriteWriterReverse a merge, restoring the source post
delete_postdeleteWriterPermanently delete a post, its votes, and its comments

Boards

ToolScopeConnectorPurpose
list_boardsreadBothList all boards with visibility and post count
create_boardwriteWriterCreate a board
update_boardwriteWriterUpdate a board, including archiving it
delete_boarddeleteWriterDelete an empty board only - see below

Tags

ToolScopeConnectorPurpose
list_tagsreadBothList all tags with post counts
create_tagwriteWriterCreate a tag
update_tagwriteWriterRename or recolour a tag
delete_tagdeleteWriterDelete a tag - posts keep existing, they just lose it

Statuses

ToolScopeConnectorPurpose
list_statusesreadBothList all workspace statuses
create_statuswriteWriterCreate a status
update_statuswriteWriterUpdate a status's name, colour, roadmap visibility, or order
delete_statusdeleteWriterDelete a status, reassigning its posts - see below

Comments

ToolScopeConnectorPurpose
list_commentsreadReaderList comments on a post, with pagination
post_commentwriteWriterAdd a public comment; is_internal needs OWNER/ADMIN
update_commentwriteWriterEdit your own comment; pin or change visibility as OWNER/ADMIN - see below
delete_commentdeleteWriterDelete any comment as OWNER/ADMIN, otherwise only your own

Changelog

ToolScopeConnectorPurpose
get_changelogreadBothRecent published changelog entries
create_changelog_entrywriteWriterCreate a changelog entry as a draft - see below
update_changelog_entrywriteWriterUpdate a changelog entry's title, body, or linked posts
publish_changelog_entrywriteWriterPublish a draft - see below
delete_changelog_entrydeleteWriterPermanently delete an entry, published or draft

Roadmap

ToolScopeConnectorPurpose
get_roadmapreadReaderPosts grouped by all statuses, including hidden roadmap statuses

Ordering

ToolScopeConnectorPurpose
reorder_itemswriteWriterSet 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_post counts 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_post and list_comments return internal comments as well as public ones - MCP agents see everything an admin sees. Don't relay an is_internal: true comment back to an end customer.
  • merge_posts is reversible with unmerge_posts, but the restore is degraded: votes, comments, and tags stay on the target post. The restored post comes back with 0 votes.
  • move_post refuses to move a post onto an archived board, and refuses a "move" to the board the post is already on.
  • reorder_items silently drops any ID that doesn't belong to the workspace (typo, wrong workspace, already deleted) instead of erroring. Compare reordered to submitted in 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.

On this page