{"serverId":"mcp-registry/com.featurejet/feedback-board","tools":[{"name":"add_evidence","fixed":{"name":"add_evidence","description":"Attach implementation evidence to a post (shown publicly).\n\n        kind is one of branch|commit|pr|transcript|url; ref is the branch\n        name, commit sha, or URL. Voters see these in the post page's\n        \"Implementation\" section.\n        ","inputSchema":{"type":"object","title":"add_evidenceArguments","required":["slug","post_id","kind","ref"],"properties":{"ref":{"type":"string","title":"Ref"},"kind":{"type":"string","title":"Kind"},"slug":{"type":"string","title":"Slug"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label","default":null},"post_id":{"type":"integer","title":"Post Id"},"action_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Key","default":null}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":212,"tokensAfter":212},{"name":"claim_post","fixed":{"name":"claim_post","description":"Atomically claim a post before working on it (double-work guard).\n\n        ttl_seconds defaults to 3600 (max 86400); re-claiming with the same\n        key extends the lease. Returns 409 if another key holds a live claim.\n        ","inputSchema":{"type":"object","title":"claim_postArguments","required":["slug","post_id"],"properties":{"slug":{"type":"string","title":"Slug"},"post_id":{"type":"integer","title":"Post Id"},"agent_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Label","default":null},"ttl_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ttl Seconds","default":null}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":184,"tokensAfter":184},{"name":"create_board","fixed":{"name":"create_board","description":"Create a new feedback board, as a DRAFT.\n\n        `slug` is the board's URL path segment (lowercase, hyphenated, unique);\n        `name` is the display name. The new board's public URL 404s until a\n        human publishes it from the dashboard -- `publish_board` is off by\n        default (403 `publish_disabled`).\n        ","inputSchema":{"type":"object","title":"create_boardArguments","required":["name","slug"],"properties":{"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","default":null}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":182,"tokensAfter":182},{"name":"create_comment","fixed":{"name":"create_comment","description":"Comment on a post as the board team, optionally replying to a comment.","inputSchema":{"type":"object","title":"create_commentArguments","required":["slug","post_id","body"],"properties":{"body":{"type":"string","title":"Body"},"slug":{"type":"string","title":"Slug"},"post_id":{"type":"integer","title":"Post Id"},"parent_comment_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Comment Id","default":null}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"create_post","fixed":{"name":"create_post","description":"Create a post on a board.","inputSchema":{"type":"object","title":"create_postArguments","required":["slug","title"],"properties":{"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body","default":null},"slug":{"type":"string","title":"Slug"},"tags":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Tags","default":null},"title":{"type":"string","title":"Title"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","default":null}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":148,"tokensAfter":148},{"name":"delete_post","fixed":{"name":"delete_post","description":"Delete a post by hiding it through the developer API.","inputSchema":{"type":"object","title":"delete_postArguments","required":["slug","post_id"],"properties":{"slug":{"type":"string","title":"Slug"},"post_id":{"type":"integer","title":"Post Id"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":80,"tokensAfter":80},{"name":"get_analytics","fixed":{"name":"get_analytics","description":"Get read-only analytics for a board.","inputSchema":{"type":"object","title":"get_analyticsArguments","required":["slug"],"properties":{"slug":{"type":"string","title":"Slug"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"get_board","fixed":{"name":"get_board","description":"Get one board by slug.","inputSchema":{"type":"object","title":"get_boardArguments","required":["slug"],"properties":{"slug":{"type":"string","title":"Slug"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":55,"tokensAfter":55},{"name":"get_changelog","fixed":{"name":"get_changelog","description":"List shipped posts for a board.","inputSchema":{"type":"object","title":"get_changelogArguments","required":["slug"],"properties":{"slug":{"type":"string","title":"Slug"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":59,"tokensAfter":59},{"name":"get_post","fixed":{"name":"get_post","description":"Get one post by board slug and post id.","inputSchema":{"type":"object","title":"get_postArguments","required":["slug","post_id"],"properties":{"slug":{"type":"string","title":"Slug"},"post_id":{"type":"integer","title":"Post Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":75,"tokensAfter":75},{"name":"get_queue","fixed":{"name":"get_queue","description":"Top UNCLAIMED posts in the owner's curated build order.\n\n        Owner-ranked posts (queue_rank, lower = sooner) come first, then\n        unranked planned posts by votes. Call this to find the next thing to\n        build, then claim_post before starting work.\n        ","inputSchema":{"type":"object","title":"get_queueArguments","required":["slug"],"properties":{"slug":{"type":"string","title":"Slug"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":148,"tokensAfter":148},{"name":"list_boards","fixed":{"name":"list_boards","description":"List boards available to the caller's FeatureJet API key.","inputSchema":{"type":"object","title":"list_boardsArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":49,"tokensAfter":49},{"name":"list_comments","fixed":{"name":"list_comments","description":"List comments for a post.","inputSchema":{"type":"object","title":"list_commentsArguments","required":["slug","post_id"],"properties":{"slug":{"type":"string","title":"Slug"},"post_id":{"type":"integer","title":"Post Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":74,"tokensAfter":74},{"name":"list_posts","fixed":{"name":"list_posts","description":"List posts for a board, optionally filtered by status, search, or tag.","inputSchema":{"type":"object","title":"list_postsArguments","required":["slug"],"properties":{"q":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q","default":null},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag","default":null},"slug":{"type":"string","title":"Slug"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","default":null},"offset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Offset","default":null},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":185,"tokensAfter":185},{"name":"list_votes","fixed":{"name":"list_votes","description":"List vote metadata for a post.","inputSchema":{"type":"object","title":"list_votesArguments","required":["slug","post_id"],"properties":{"slug":{"type":"string","title":"Slug"},"post_id":{"type":"integer","title":"Post Id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":73,"tokensAfter":73},{"name":"ping","fixed":{"name":"ping","description":"Check MCP and FeatureJet API reachability for the caller's key.","inputSchema":{"type":"object","title":"pingArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":47,"tokensAfter":47},{"name":"propose_status","fixed":{"name":"propose_status","description":"Propose a status change for the board owner to confirm.\n\n        The agent-honest way to mark work done: nothing changes on the\n        public board and no voter is notified until a human confirms the\n        proposal from the dashboard. status is one of\n        open|planned|in_progress|shipped|declined; a new proposal replaces\n        any pending one. Prefer this over update_post's direct status flip.\n        ","inputSchema":{"type":"object","title":"propose_statusArguments","required":["slug","post_id","status"],"properties":{"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","default":null},"slug":{"type":"string","title":"Slug"},"status":{"type":"string","title":"Status"},"post_id":{"type":"integer","title":"Post Id"},"action_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action Key","default":null}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":248,"tokensAfter":248},{"name":"publish_board","fixed":{"name":"publish_board","description":"Publish a board so it is live at its public URL.\n\n        OFF BY DEFAULT. Putting a board on the public internet is a human\n        decision: unless the FeatureJet deployment has opted in, this returns\n        403 `publish_disabled` and the owner publishes from the dashboard.\n        Where it is enabled it needs a `write` (or `admin`) scoped key and an\n        active subscription -- an org without one gets 403\n        `subscription_required`.\n        ","inputSchema":{"type":"object","title":"publish_boardArguments","required":["slug"],"properties":{"slug":{"type":"string","title":"Slug"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":179,"tokensAfter":179},{"name":"release_post","fixed":{"name":"release_post","description":"Release a post's claim so other agents can pick it up.","inputSchema":{"type":"object","title":"release_postArguments","required":["slug","post_id"],"properties":{"slug":{"type":"string","title":"Slug"},"post_id":{"type":"integer","title":"Post Id"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":81,"tokensAfter":81},{"name":"update_post","fixed":{"name":"update_post","description":"Update mutable post fields; null queue_rank explicitly un-ranks.","inputSchema":{"type":"object","title":"update_postArguments","required":["slug","post_id"],"properties":{"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body","default":null},"slug":{"type":"string","title":"Slug"},"tags":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"title":"Tags","default":null},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","default":null},"pinned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pinned","default":null},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","default":null},"post_id":{"type":"integer","title":"Post Id"},"queue_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Queue Rank"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":231,"tokensAfter":231}],"toolsChanged":20,"tokensSaved":0,"todo":[{"tool":"add_evidence","params":["ref","kind","slug","label","post_id","action_key"]},{"tool":"claim_post","params":["slug","post_id","agent_label","ttl_seconds"]},{"tool":"create_board","params":["name","slug","description"]},{"tool":"create_comment","params":["body","slug","post_id","parent_comment_id"]},{"tool":"create_post","params":["body","slug","tags","title","status"]},{"tool":"delete_post","params":["slug","post_id"]},{"tool":"get_analytics","params":["slug","period"]},{"tool":"get_board","params":["slug"]},{"tool":"get_changelog","params":["slug"]},{"tool":"get_post","params":["slug","post_id"]},{"tool":"get_queue","params":["slug","limit"]},{"tool":"list_comments","params":["slug","post_id"]},{"tool":"list_posts","params":["q","tag","slug","limit","offset","status"]},{"tool":"list_votes","params":["slug","post_id"]},{"tool":"propose_status","params":["note","slug","status","post_id","action_key"]},{"tool":"publish_board","params":["slug"]},{"tool":"release_post","params":["slug","post_id"]},{"tool":"unpublish_board","params":["slug"]},{"tool":"update_post","params":["body","slug","tags","title","pinned","status","post_id","queue_rank"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}