Skip to content
Scalekit Docs
Talk to an EngineerDashboard

Sleekplan MCP connector

OAuth2.1/DCRProductivity

Sleekplan is a customer feedback, feature request, and roadmap management platform.

Sleekplan MCP connector

  1. Terminal window
    npm install @scalekit-sdk/node

    Full SDK reference: Node.js | Python

  2. Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. quickstart.ts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENV_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'sleekplanmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Sleekplan MCP:', link)
    process.stdout.write('Press Enter after authorizing...')
    await new Promise(r => process.stdin.once('data', r))
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'sleekplanmcp_list_admins',
    toolInput: {},
    })
    console.log(result)

Connect this agent connector to let your agent:

  • Create changelog, comment, feedback — Create a new changelog entry
  • Delete changelog, comment, feedback — Permanently delete a changelog entry
  • Get category template, changelog, feedback — Get the title/description preset template for a feedback type
  • List admins, changelog, comments — List admin users (team members) with access to this workspace
  • Feedback merge, tag — Merge one feedback post into another, combining votes and comments
  • Update changelog, comment, feedback — Update an existing changelog entry

Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.

sleekplanmcp_create_changelog#Create a new changelog entry. To pick a valid `type`, read sleekplan://feedback-types (or call list_feedback_types) and filter to entries whose `disable_changelog` is falsy. To target a cohort, read sleekplan://segments (or call list_segments) first for the `segment` slug. Set `draft=True` to create without publishing; set `scheduled=<unix timestamp>` to publish automatically at a future time.8 params

Create a new changelog entry. To pick a valid `type`, read sleekplan://feedback-types (or call list_feedback_types) and filter to entries whose `disable_changelog` is falsy. To target a cohort, read sleekplan://segments (or call list_segments) first for the `segment` slug. Set `draft=True` to create without publishing; set `scheduled=<unix timestamp>` to publish automatically at a future time.

NameTypeRequiredDescription
titlestringrequiredTitle of the changelog entry
announcementbooleanoptionalShow as an in-app announcement when this entry publishes. Default False.
descriptionstringoptionalBody of the changelog entry (HTML or Markdown — sanitized server-side)
draftbooleanoptionalCreate as a draft instead of publishing immediately. Default False.
notifybooleanoptionalEmail-notify changelog subscribers when this entry publishes. Default False.
scheduledintegeroptionalUnix timestamp (seconds) for when the entry should publish. 0 or omitted means publish now. Only meaningful when `draft` is False.
segmentstringoptionalSegment slug (NOT segment_id) to restrict the announcement to a user cohort. Read sleekplan://segments or call list_segments for valid slugs. Omit or empty to target all users.
typestringoptionalCategory key (e.g. 'feature', 'improvement'). Read sleekplan://feedback-types or call list_feedback_types first and pick an entry whose `disable_changelog` is falsy — the `key` string on that entry is what goes here.
sleekplanmcp_create_comment#Add a comment to a feedback post. Use `parent` to post a reply in an existing thread. Use `pinned=True` to promote the comment to the top — typically for moderator answers or resolution summaries.4 params

Add a comment to a feedback post. Use `parent` to post a reply in an existing thread. Use `pinned=True` to promote the comment to the top — typically for moderator answers or resolution summaries.

NameTypeRequiredDescription
commentstringrequiredComment text (Markdown supported)
feedback_idintegerrequiredID of the feedback post to comment on
parentintegeroptionalOptional parent comment_id — set this to reply to an existing comment. Call `list_comments` first to find the parent's id. Omit for a top-level comment.
pinnedbooleanoptionalPin the comment to the top of the thread. Default false.
sleekplanmcp_create_feedback#Create a new feedback post. Requires a feedback type — read sleekplan://feedback-types or call list_feedback_types first for available keys. Optional status lets you set the initial state (call update_feedback afterwards if you need to set owner, effort, or estimated fields — the backend ignores those on create). meta_origin/meta_service tag where the post came from for later filtering.6 params

Create a new feedback post. Requires a feedback type — read sleekplan://feedback-types or call list_feedback_types first for available keys. Optional status lets you set the initial state (call update_feedback afterwards if you need to set owner, effort, or estimated fields — the backend ignores those on create). meta_origin/meta_service tag where the post came from for later filtering.

NameTypeRequiredDescription
titlestringrequiredTitle of the feedback post
typestringrequiredFeedback type key (e.g. 'feature', 'bug'). Read sleekplan://feedback-types or call list_feedback_types first to see available keys — filter to entries whose `disable_feedback` is falsy.
descriptionstringoptionalOptional detailed description. Markdown is supported.
meta_originstringoptionalOptional meta.origin tag — use this to mark who/what created the post (e.g. "mcp", "intelligence", "zapier"). Paired with meta_service.
meta_servicestringoptionalOptional meta.service tag (e.g. "agent", "chat").
statusstringoptionalOptional initial status key (from sleekplan://feedback-statuses or list_feedback_statuses). Omit to use the workspace default.
sleekplanmcp_create_survey#Create a new survey. The `survey` array defines question order and content.2 params

Create a new survey. The `survey` array defines question order and content.

NameTypeRequiredDescription
namestringrequiredInternal name for the survey
surveyarrayrequiredArray of question dicts. EVERY question MUST include ALL of the following fields — the frontend edit screen crashes if any field is missing. The backend also normalizes missing fields defensively, but produce the full shape to be safe: - `type` (required): 'text', 'multiple', 'single', 'free', or 'scale' - `text` (required): the question text, or markdown for type='text' blocks - `options` (required, ALWAYS an array): list of choice strings for 'multiple'/'single'; use `[]` for other types. Never omit. - `min` (required, ALWAYS a number): scale minimum. Use `0` when type != 'scale'. Never omit. - `max` (required, ALWAYS a number): scale maximum. Use `10` when type != 'scale'. Never omit. - `required` (required, ALWAYS a bool): whether the answer is required. Default `false`. Never omit. - `showIf` (required, ALWAYS an object): conditional display. Use `{'questionIndex': '', 'condition': 'contains', 'value': ''}` when the question has no condition. When conditional: `{'questionIndex': <int>, 'condition': 'contains'|'is'|'greater'|'less', 'value': <str>}`. Never omit. - `question_id` (required ONLY when updating existing questions): the 'qu...'-prefixed ID returned by `get_survey`/`create_survey`. OMIT on create; on update you MUST preserve existing `question_id` values or response history is lost. Do NOT include a top-level `options` field in the payload — the backend manages that registry internally.
sleekplanmcp_create_tag#Create a new workspace-level tag. Tags can then be attached to feedback posts with tag_feedback(tag_id, action='add').1 param

Create a new workspace-level tag. Tags can then be attached to feedback posts with tag_feedback(tag_id, action='add').

NameTypeRequiredDescription
namestringrequiredTag name. Only letters, numbers, and spaces are allowed (^[A-Za-z0-9 ]+$). Check sleekplan://tags or call list_tags first to avoid creating a duplicate.
sleekplanmcp_delete_changelog#Permanently delete a changelog entry.1 param

Permanently delete a changelog entry.

NameTypeRequiredDescription
changelog_idintegerrequiredID of the changelog entry to delete
sleekplanmcp_delete_comment#Permanently delete a comment from a feedback post.2 params

Permanently delete a comment from a feedback post.

NameTypeRequiredDescription
comment_idintegerrequiredID of the comment to delete
feedback_idintegerrequiredID of the feedback post
sleekplanmcp_delete_feedback#Permanently delete a feedback post.1 param

Permanently delete a feedback post.

NameTypeRequiredDescription
feedback_idintegerrequiredID of the feedback post to delete
sleekplanmcp_delete_tag#Permanently delete a workspace-level tag. Removes it from every feedback post it was attached to.1 param

Permanently delete a workspace-level tag. Removes it from every feedback post it was attached to.

NameTypeRequiredDescription
tag_idstringrequiredID of the tag to delete (from sleekplan://tags or list_tags)
sleekplanmcp_get_category_template#Get the title/description preset template for a feedback type. Mirrors the sleekplan://category-template/{type_key} resource — use this tool when your MCP client doesn't auto-read resource templates. Returns `{title, description}` or an empty response when no template is configured. Read before create_feedback so posts of this category follow the workspace's preferred structure.1 param

Get the title/description preset template for a feedback type. Mirrors the sleekplan://category-template/{type_key} resource — use this tool when your MCP client doesn't auto-read resource templates. Returns `{title, description}` or an empty response when no template is configured. Read before create_feedback so posts of this category follow the workspace's preferred structure.

NameTypeRequiredDescription
type_keystringrequiredFeedback type key from list_feedback_types / sleekplan://feedback-types (e.g. 'bug', 'feature'). Strings only — not numeric IDs.
sleekplanmcp_get_changelog#Get a single changelog entry by ID.1 param

Get a single changelog entry by ID.

NameTypeRequiredDescription
changelog_idintegerrequiredID of the changelog entry
sleekplanmcp_get_feedback#Get a single feedback post by ID.1 param

Get a single feedback post by ID.

NameTypeRequiredDescription
feedback_idintegerrequiredID of the feedback post
sleekplanmcp_get_feedback_stats#Get vote and engagement statistics for a feedback post.1 param

Get vote and engagement statistics for a feedback post.

NameTypeRequiredDescription
feedback_idintegerrequiredID of the feedback post
sleekplanmcp_get_similar_feedback#Find feedback posts similar to the given one.1 param

Find feedback posts similar to the given one.

NameTypeRequiredDescription
feedback_idintegerrequiredID of the feedback post
sleekplanmcp_get_survey#Get a single survey by ID, including its `settings` (question array) and `options` registry. Call this before `update_survey_questions` to retrieve existing `question_id` values, which must be preserved to keep response history linked to questions.1 param

Get a single survey by ID, including its `settings` (question array) and `options` registry. Call this before `update_survey_questions` to retrieve existing `question_id` values, which must be preserved to keep response history linked to questions.

NameTypeRequiredDescription
survey_idstringrequiredSurvey ID, e.g. 'su67a1b2c3d'
sleekplanmcp_get_survey_question_feed#Paginated feed of individual answers for one question, including user info per answer. Essential for reading free-text responses: `get_survey_summary` tells you a free-text question has N responses but not what they said — this tool returns them. Each entry has `answer`, `question`, `type`, `created`, and a `user` object.4 params

Paginated feed of individual answers for one question, including user info per answer. Essential for reading free-text responses: `get_survey_summary` tells you a free-text question has N responses but not what they said — this tool returns them. Each entry has `answer`, `question`, `type`, `created`, and a `user` object.

NameTypeRequiredDescription
question_idstringrequiredQuestion ID (the `qu...`-prefixed id from get_survey or get_survey_summary)
survey_idstringrequiredSurvey ID
pageintegeroptionalPage number (0-indexed)
per_pageintegeroptionalNumber of results per page
sleekplanmcp_get_survey_response#Fetch a single full response by its id — contains every answer the user gave.2 params

Fetch a single full response by its id — contains every answer the user gave.

NameTypeRequiredDescription
response_idstringrequiredResponse ID (from list_survey_responses)
survey_idstringrequiredSurvey ID
sleekplanmcp_get_survey_summary#Aggregated response stats per question — the at-a-glance 'what did people answer' view. Returns a dict keyed by `question_id`. Each value has `question`, `type`, `total` (response count), and (for multiple/single/scale questions) an `answers` dict mapping each answer option to its count. Free-text questions expose only `total` — follow up with `get_survey_question_feed` to read the actual free-text answers. Start here when a user asks "how did people answer this survey?" Pick specific questions to drill into with `get_survey_question_feed`.1 param

Aggregated response stats per question — the at-a-glance 'what did people answer' view. Returns a dict keyed by `question_id`. Each value has `question`, `type`, `total` (response count), and (for multiple/single/scale questions) an `answers` dict mapping each answer option to its count. Free-text questions expose only `total` — follow up with `get_survey_question_feed` to read the actual free-text answers. Start here when a user asks "how did people answer this survey?" Pick specific questions to drill into with `get_survey_question_feed`.

NameTypeRequiredDescription
survey_idstringrequiredSurvey ID to summarize
sleekplanmcp_get_user#Get a single user by ID.1 param

Get a single user by ID.

NameTypeRequiredDescription
user_idintegerrequiredID of the user
sleekplanmcp_get_user_segment#Get the segment/plan information for a user.1 param

Get the segment/plan information for a user.

NameTypeRequiredDescription
user_idintegerrequiredID of the user
sleekplanmcp_get_voters#Get the list of users who voted on a feedback post (with vote direction).4 params

Get the list of users who voted on a feedback post (with vote direction).

NameTypeRequiredDescription
feedback_idintegerrequiredID of the feedback post
filterstringoptionalFilter: 'upvote' (default), 'downvote', 'subscribe', or 'priority'
pageintegeroptionalPage number (0-indexed)
per_pageintegeroptionalNumber of results per page
sleekplanmcp_list_admins#List admin users (team members) with access to this workspace. Mirrors the sleekplan://admins resource — use this tool when your MCP client doesn't auto-read resources. Returns id/name/email/role per admin; use `id` when filtering feedback by owner or setting a post's owner.0 params

List admin users (team members) with access to this workspace. Mirrors the sleekplan://admins resource — use this tool when your MCP client doesn't auto-read resources. Returns id/name/email/role per admin; use `id` when filtering feedback by owner or setting a post's owner.

sleekplanmcp_list_changelog#List changelog entries with optional filtering.5 params

List changelog entries with optional filtering.

NameTypeRequiredDescription
pageintegeroptionalPage number (0-indexed)
per_pageintegeroptionalNumber of results per page
searchstringoptionalFull-text search query
statusstringoptionalStatus filter: 'published', 'scheduled', 'draft', or 'all'
typestringoptionalCategory filter — a key from sleekplan://feedback-types or list_feedback_types (filter to entries whose `disable_changelog` is falsy). Use 'all' for no filter.
sleekplanmcp_list_comments#List comments on a feedback post, with pagination and sort order. Each returned entry includes a `comment_id`. Use that id as the `parent` value on `create_comment` to post a threaded reply, or as the `comment_id` on `update_comment` / `delete_comment`.4 params

List comments on a feedback post, with pagination and sort order. Each returned entry includes a `comment_id`. Use that id as the `parent` value on `create_comment` to post a threaded reply, or as the `comment_id` on `update_comment` / `delete_comment`.

NameTypeRequiredDescription
feedback_idintegerrequiredID of the feedback post
pageintegeroptionalPage number (0-indexed)
per_pageintegeroptionalNumber of results per page
sortstringoptionalSort order: 'old' or 'new'
sleekplanmcp_list_feedback#List feedback posts with optional filtering and sorting. Before filtering by type/status/tag/segment/owner, read the corresponding resource (sleekplan://feedback-types, sleekplan://feedback-statuses, sleekplan://tags, sleekplan://segments, sleekplan://admins) so you pick real keys/slugs/IDs. If your MCP client doesn't auto-read resources, call the equivalent list_* tools (list_feedback_types, list_feedback_statuses, list_tags, list_segments, list_admins).11 params

List feedback posts with optional filtering and sorting. Before filtering by type/status/tag/segment/owner, read the corresponding resource (sleekplan://feedback-types, sleekplan://feedback-statuses, sleekplan://tags, sleekplan://segments, sleekplan://admins) so you pick real keys/slugs/IDs. If your MCP client doesn't auto-read resources, call the equivalent list_* tools (list_feedback_types, list_feedback_statuses, list_tags, list_segments, list_admins).

NameTypeRequiredDescription
advancedstringoptionalAdvanced filter as a STRINGIFIED JSON object. Top-level keys (all optional, combined with AND): `meta` and `meta_system` = {key: str, value: str|'NULL'|'', condition: str} filter by custom meta / system-integration meta; pass value 'NULL' or '' with condition 'eq' to match posts missing that meta key. `votes` and `comments` = {value: int, condition: str, interval?: int} filter by vote/comment count; optional `interval` limits the count to the last N days. `created` and `updated` = {value: int, condition: 'lt'|'gt', interval: '1'|'30'|'365'} filter by age where interval 1=DAY, 30=MONTH, 365=YEAR (value is how many units ago). `eta_q` = {value: 'YYYY-QN' like '2026-Q2', condition: str} filter by ETA quarter. `eta_m` = {value: 'YYYY-MM' like '2026-04', condition: str} filter by ETA month. `feedback_id` = {value: int|str, condition: str} filter by feedback id. Valid `condition` values: 'eq', 'neq', 'gt', 'lt', 'gte', 'lte', 'like', 'contains', 'ncontains', 'in', 'notin', 'bw' (begins with), 'ew' (ends with). Example: '{"votes": {"value": 10, "condition": "gte", "interval": 30}, "created": {"value": 7, "condition": "gt", "interval": "1"}}' finds posts created in the last 7 days with >=10 votes in the last 30 days.
filterstringoptionalFilter by status key (from sleekplan://feedback-statuses or list_feedback_statuses). Pass a single key like 'planned', a comma-separated list, or 'all'. Read the resource first to see available keys.
ownerstringoptionalFilter by owner admin user_id (from sleekplan://admins or list_admins), or 'all'. Omit for no filter.
pageintegeroptionalPage number (0-indexed)
per_pageintegeroptionalNumber of results per page
searchstringoptionalFull-text search query
segmentstringoptionalFilter by segment slug (from sleekplan://segments or list_segments). Use the segment's `slug` string, not `segment_id`.
sortstringoptionalSort order. One of: 'trend', 'top', 'fewest', 'new', 'old', 'updated', 'updated_asc', 'scoring', 'priority', 'precedence', 'eta'.
tagsstringoptionalTag filter. Accepts a single tag key, a JSON object like {"tag_key": true} for multi-tag AND, or the literal "empty" to find untagged posts. Omit for no filter.
typestringoptionalFilter by feedback type key (from sleekplan://feedback-types or list_feedback_types). Pass a single key like 'feature', a comma-separated list like 'feature,bug', or 'all'. Read the resource first to see available keys.
userstringoptionalFilter to posts created by this end-user_id.
sleekplanmcp_list_feedback_statuses#List feedback status definitions for this workspace. Mirrors the sleekplan://feedback-statuses resource — use this tool when your MCP client doesn't auto-read resources. Returns a dict keyed by status key (e.g. 'open', 'planned', 'in-progress', 'done', 'closed') with `key`, `name`, `color`, `order`, `roadmap`, `disable_feedback` per status. Use the `key` string in feedback payloads.0 params

List feedback status definitions for this workspace. Mirrors the sleekplan://feedback-statuses resource — use this tool when your MCP client doesn't auto-read resources. Returns a dict keyed by status key (e.g. 'open', 'planned', 'in-progress', 'done', 'closed') with `key`, `name`, `color`, `order`, `roadmap`, `disable_feedback` per status. Use the `key` string in feedback payloads.

sleekplanmcp_list_feedback_types#List feedback type (category) definitions for this workspace. Mirrors the sleekplan://feedback-types resource — use this tool when your MCP client doesn't auto-read resources. Returns a dict keyed by type key (e.g. 'feature', 'bug') with `key`, `name`, `color`, `order`, `disable_feedback`, `disable_changelog` per type. Use the `key` string (not the human name) in feedback/changelog payloads. Filter by `disable_feedback` / `disable_changelog` based on which surface you're creating for.0 params

List feedback type (category) definitions for this workspace. Mirrors the sleekplan://feedback-types resource — use this tool when your MCP client doesn't auto-read resources. Returns a dict keyed by type key (e.g. 'feature', 'bug') with `key`, `name`, `color`, `order`, `disable_feedback`, `disable_changelog` per type. Use the `key` string (not the human name) in feedback/changelog payloads. Filter by `disable_feedback` / `disable_changelog` based on which surface you're creating for.

sleekplanmcp_list_segments#List user segments (named cohorts) configured for this workspace. Mirrors the sleekplan://segments resource — use this tool when your MCP client doesn't auto-read resources. Returns segment_id/slug/name per segment. Use the `slug` string (not `segment_id`) when targeting a segment in feedback or changelog payloads.0 params

List user segments (named cohorts) configured for this workspace. Mirrors the sleekplan://segments resource — use this tool when your MCP client doesn't auto-read resources. Returns segment_id/slug/name per segment. Use the `slug` string (not `segment_id`) when targeting a segment in feedback or changelog payloads.

sleekplanmcp_list_sub_topics#List sub-topics under a parent topic — a more detailed breakdown of the posts it contains.1 param

List sub-topics under a parent topic — a more detailed breakdown of the posts it contains.

NameTypeRequiredDescription
topic_idintegerrequiredID of the parent topic (from list_topics)
sleekplanmcp_list_survey_responses#Paginated list of every full response to a survey — all questions per row. Use this only when you need the cross-question picture for each respondent (e.g. "show me every answer from user X"). For per-question analysis prefer `get_survey_question_feed` which is narrower and easier to reason over.3 params

Paginated list of every full response to a survey — all questions per row. Use this only when you need the cross-question picture for each respondent (e.g. "show me every answer from user X"). For per-question analysis prefer `get_survey_question_feed` which is narrower and easier to reason over.

NameTypeRequiredDescription
survey_idstringrequiredSurvey ID
pageintegeroptionalPage number (0-indexed)
per_pageintegeroptionalNumber of results per page
sleekplanmcp_list_surveys#List surveys configured for this workspace.3 params

List surveys configured for this workspace.

NameTypeRequiredDescription
pageintegeroptionalPage number (0-indexed)
per_pageintegeroptionalNumber of results per page
searchstringoptionalFull-text search across survey names
sleekplanmcp_list_tags#List workspace-level tags. Mirrors the sleekplan://tags resource — use this tool when your MCP client doesn't auto-read resources. Returns id/name per tag; use `id` with tag_feedback to attach a tag to a post, or with delete_tag to remove it from the workspace.0 params

List workspace-level tags. Mirrors the sleekplan://tags resource — use this tool when your MCP client doesn't auto-read resources. Returns id/name per tag; use `id` with tag_feedback to attach a tag to a post, or with delete_tag to remove it from the workspace.

sleekplanmcp_list_topics#List feedback topics — the top-level clusters Sleekplan's intelligence derives from posts. Each topic typically includes an `id`, `name`, post count, and optional metadata. Use `list_sub_topics` to drill into a specific topic for sub-clusters.0 params

List feedback topics — the top-level clusters Sleekplan's intelligence derives from posts. Each topic typically includes an `id`, `name`, post count, and optional metadata. Use `list_sub_topics` to drill into a specific topic for sub-clusters.

sleekplanmcp_list_users#List users in the workspace with optional search and filtering.5 params

List users in the workspace with optional search and filtering.

NameTypeRequiredDescription
pageintegeroptionalPage number (0-indexed)
per_pageintegeroptionalNumber of results per page
searchstringoptionalSearch by name or email
segmentstringoptionalFilter by user segment
sortstringoptionalSort order: 'updated', 'created', 'name'
sleekplanmcp_list_votes#List all votes for a feedback post.1 param

List all votes for a feedback post.

NameTypeRequiredDescription
feedback_idintegerrequiredID of the feedback post
sleekplanmcp_merge_feedback#Merge one feedback post into another, combining votes and comments.2 params

Merge one feedback post into another, combining votes and comments.

NameTypeRequiredDescription
source_idintegerrequiredID of the feedback post to merge from (will be closed)
target_idintegerrequiredID of the feedback post to merge into (will remain)
sleekplanmcp_tag_feedback#Add or remove a tag on a feedback post.3 params

Add or remove a tag on a feedback post.

NameTypeRequiredDescription
feedback_idintegerrequiredID of the feedback post
tag_idstringrequiredID of the tag to add or remove
actionstringoptionalAction to perform: 'add' or 'remove'
sleekplanmcp_update_changelog#Update an existing changelog entry. Only fields you pass are changed — omit to leave them alone. To CLEAR `type` or `segment`, pass an empty string (the backend treats empty-string differently from an omitted field, per class.changelog::update).9 params

Update an existing changelog entry. Only fields you pass are changed — omit to leave them alone. To CLEAR `type` or `segment`, pass an empty string (the backend treats empty-string differently from an omitted field, per class.changelog::update).

NameTypeRequiredDescription
changelog_idintegerrequiredID of the changelog entry to update
announcementbooleanoptionalToggle in-app announcement. None = leave unchanged.
descriptionstringoptionalNew body (HTML or Markdown — sanitized server-side)
draftbooleanoptionalToggle draft state. True=draft, False=published, None=leave unchanged.
notifybooleanoptionalToggle email notification. None = leave unchanged.
scheduledintegeroptionalUnix timestamp for publish. 0 = publish now. None = leave unchanged.
segmentstringoptionalSegment slug from sleekplan://segments or list_segments. Pass empty string to clear targeting. None = leave unchanged.
titlestringoptionalNew title
typestringoptionalNew category key. Read sleekplan://feedback-types or call list_feedback_types and pick an entry whose `disable_changelog` is falsy. Pass empty string to clear.
sleekplanmcp_update_comment#Update an existing comment. You can update text only, pin state only, or both — pass just the fields you want to change.4 params

Update an existing comment. You can update text only, pin state only, or both — pass just the fields you want to change.

NameTypeRequiredDescription
comment_idintegerrequiredID of the comment to update
feedback_idintegerrequiredID of the feedback post
commentstringoptionalNew comment text (Markdown supported). Omit to keep existing text.
pinnedbooleanoptionalSet to true/false to pin or unpin. Omit to keep current pin state.
sleekplanmcp_update_feedback#Update fields on an existing feedback post. Only the fields you pass are changed. Read sleekplan://feedback-types (or list_feedback_types), sleekplan://feedback-statuses (or list_feedback_statuses), and sleekplan://admins (or list_admins) first to pick valid keys/IDs for type/status/owner_id.8 params

Update fields on an existing feedback post. Only the fields you pass are changed. Read sleekplan://feedback-types (or list_feedback_types), sleekplan://feedback-statuses (or list_feedback_statuses), and sleekplan://admins (or list_admins) first to pick valid keys/IDs for type/status/owner_id.

NameTypeRequiredDescription
feedback_idintegerrequiredID of the feedback post to update
descriptionstringoptionalNew description. Markdown is supported.
effortintegeroptionalInternal team precedence. Integer 0–3 where 0 is unset and 3 is highest. Independent of user votes.
estimatedstringoptionalEstimated delivery date. Must be "{FullEnglishMonth}, {YYYY}" — the full English month name, a comma, a single space, and the 4-digit year (e.g. "March, 2026"). Abbreviations ("Mar 2026"), ISO formats ("2026-03"), and non-English month names are rejected. The backend stores this as the first of that month.
owner_idintegeroptionalNew owner admin user_id (from sleekplan://admins or list_admins).
statusstringoptionalNew status key (from sleekplan://feedback-statuses or list_feedback_statuses).
titlestringoptionalNew title
typestringoptionalNew type/category key (from sleekplan://feedback-types or list_feedback_types).
sleekplanmcp_update_survey_name#Rename a survey without touching its questions. Internally fetches the survey's current questions and re-submits them alongside the new name, because the backend requires both `name` and `survey` on every update. Use this for pure renames so existing `question_id` values are preserved verbatim.2 params

Rename a survey without touching its questions. Internally fetches the survey's current questions and re-submits them alongside the new name, because the backend requires both `name` and `survey` on every update. Use this for pure renames so existing `question_id` values are preserved verbatim.

NameTypeRequiredDescription
namestringrequiredNew internal name for the survey
survey_idstringrequiredSurvey ID to rename
sleekplanmcp_update_survey_questions#Replace the question set of an existing survey while keeping its name. Internally fetches the current `name` and re-submits it alongside the new questions — required because the backend rejects partial PUTs.2 params

Replace the question set of an existing survey while keeping its name. Internally fetches the current `name` and re-submits it alongside the new questions — required because the backend rejects partial PUTs.

NameTypeRequiredDescription
surveyarrayrequiredNew question array. Call `get_survey` first to see existing `question_id` values, then preserve them for any question that should retain its response history. Omit `question_id` only for genuinely new questions. Array of question dicts. EVERY question MUST include ALL of the following fields — the frontend edit screen crashes if any field is missing. The backend also normalizes missing fields defensively, but produce the full shape to be safe: - `type` (required): 'text', 'multiple', 'single', 'free', or 'scale' - `text` (required): the question text, or markdown for type='text' blocks - `options` (required, ALWAYS an array): list of choice strings for 'multiple'/'single'; use `[]` for other types. Never omit. - `min` (required, ALWAYS a number): scale minimum. Use `0` when type != 'scale'. Never omit. - `max` (required, ALWAYS a number): scale maximum. Use `10` when type != 'scale'. Never omit. - `required` (required, ALWAYS a bool): whether the answer is required. Default `false`. Never omit. - `showIf` (required, ALWAYS an object): conditional display. Use `{'questionIndex': '', 'condition': 'contains', 'value': ''}` when the question has no condition. When conditional: `{'questionIndex': <int>, 'condition': 'contains'|'is'|'greater'|'less', 'value': <str>}`. Never omit. - `question_id` (required ONLY when updating existing questions): the 'qu...'-prefixed ID returned by `get_survey`/`create_survey`. OMIT on create; on update you MUST preserve existing `question_id` values or response history is lost. Do NOT include a top-level `options` field in the payload — the backend manages that registry internally.
survey_idstringrequiredSurvey ID whose questions to replace