# Canny — MCP server on mcp.ai > Connect your Canny account and use 25 tools for product management straight from your AI agent. Connect with your own API key. Canny is a customer feedback management platform that helps teams collect, analyze, and prioritize user feedback to build better products. By: mcp.ai · official Page: https://mcp.ai/canny ## Connect (MCP protocol) Remote MCP endpoint (HTTP, streamable): https://api.mcp.ai/p_canny?ms=1787296080000 Add it as a custom/remote MCP connector, then authenticate when prompted. ## REST API (no MCP client required) Every tool is also a REST endpoint, authed with a workspace API key. Discover: GET https://api.mcp.ai/api/canny/_endpoints # public; lists every endpoint Call: POST https://api.mcp.ai/api/canny/ Authorization: Bearer sk_live_… # create one at https://mcp.ai/settings/api-keys Content-Type: application/json Body: { …args } → { "ok": true, "tool": "", "result": { … } } ## Developer docs How to use (MCP or REST), markdown: https://mcp.ai/canny/skill.md Postman collection (v2.1): https://mcp.ai/canny/postman.json ## Tools - canny_add_post_tag(tagID: string, postID: string) — Tool to add a tag to a specific post. Use when you need to categorize or group content by applying an existing tag. - canny_change_post_status(postID: string, status: string, changerID: string, commentValue?: string, commentImageURLs?: string[], shouldNotifyVoters?: boolean) — Tool to change a post's status. Use when you need to update a post's workflow stage and optionally notify voters. - canny_create_changelog_entry(type?: string, title: string, notify?: boolean, details: string, postIDs?: string[], labelIDs?: string[], published?: boolean, publishedOn?: string, scheduledFor?: string) — Tool to create and optionally publish a new changelog entry. Use when you need to add a product update record, control publish timing, and notify users. Example: "Create changelog entry titled 'Versio - canny_create_comment(value?: string, postID: string, authorID: string, internal?: boolean, parentID?: string, createdAt?: string, imageURLs?: string[], shouldNotifyVoters?: boolean) — Tool to create a new comment on a post. Use when you have the authorID and postID and want to submit feedback or replies. - canny_create_or_update_user(id?: string, name: string, alias?: string, email?: string, userID?: string, created?: string, avatarURL?: string, companies?: object[], customFields?: object) — Creates a new user or updates an existing user in Canny. If a user with the given identifier (email, userID, or id) already exists, their profile is updated; otherwise, a new user is created. IMPORTAN - canny_create_post(eta?: string, byID?: string, title: string, boardID: string, details: string, ownerID?: string, authorID: string, createdAt?: string, etaPublic?: boolean, imageURLs?: string[], categoryID?: string, customFields?: object) — Tool to create a new post (feature request or feedback) on a Canny board. Use this action when you need to submit new feedback or feature requests to a board. Requires a valid boardID (from list_board - canny_create_tag(name: string, boardID: string) — Tool to create a new tag. Use when you have the boardID and tag name and need to categorize posts. - canny_create_vote(byID?: string, postID: string, voterID: string, createdAt?: string, votePriority?: integer) — Tool to create a vote for a post. Use when you need to record or migrate a user's vote on a post, optionally setting priority or original creation time. Example: Create a vote for postID abc123 with v - canny_delete_comment(commentID: string) — Tool to delete a comment. Use when moderation is required to remove a specific comment by its id. Example: "Delete the comment with ID 553c3ef8b8cdcd1501ba1238." - canny_delete_post(postID: string) — Tool to delete a post. Use when you need to permanently remove a post by its id. Example: "Delete the post with ID 553c3ef8b8cdcd1501ba1238." - canny_delete_user(id: string) — Tool to delete a user and their comments and votes. Use when you need to fully remove a user’s account and all associated data (e.g., GDPR compliance). - canny_delete_vote(postID: string, voterID: string) — Tool to delete a vote. Use when you need to remove a user's vote from a specific post by its id. Example: "Delete the vote from postID abc123 for voterID user_456." - canny_list_boards() — Tool to list all boards. Use when you need to retrieve every board for your company after authentication. - canny_list_categories(skip?: integer, limit?: integer, boardID?: string) — Tool to list categories. Use when fetching categories for a specific board by its ID. - canny_list_comments(skip?: integer, limit?: integer, postID?: string, boardID?: string, authorID?: string, companyID?: string) — Retrieves a paginated list of comments from Canny. Comments can be filtered by board, post, author, or company. Use this action to: - Get all comments across your Canny instance - Find comments on a s - canny_list_companies(limit?: integer, cursor?: string, search?: string, segment?: string) — Tool to list companies associated with your Canny account. Use after authentication to retrieve companies with pagination support. - canny_list_opportunities(skip?: integer, limit?: integer) — Tool to list opportunities linked to posts. Use when you need to fetch customer opportunities synced from CRM. - canny_list_posts(skip?: integer, sort?: string, limit?: integer, search?: string, status?: string, tagIDs?: string[], boardID?: string, authorID?: string, companyID?: string) — Tool to list posts with various filters. Use after selecting a board or to search/filter posts. - canny_list_tags(skip?: integer, limit?: integer, boardID?: string) — Tool to list tags. Use when fetching tags optionally filtered by board ID and handling pagination. - canny_list_users(limit?: integer, cursor?: string) — List all end-users in your Canny workspace with pagination support. Use this tool to: - Fetch users from your Canny workspace - Paginate through large user lists using cursor-based pagination - Get us - canny_list_votes(skip?: integer, limit?: integer, postID?: string, boardID?: string, voterID?: string) — Retrieve votes from Canny with optional filtering by board, post, or voter. Use this action to: - Get all votes on a specific post (filter by postID) - Get all votes by a specific user (filter by vote - canny_retrieve_board(id: string) — Tool to retrieve details of a board by its ID. Use when you need metadata for a specific board. - canny_retrieve_tag(id: string) — Tool to retrieve details of a tag by its ID. Use after obtaining a valid tag ID. - canny_retrieve_user(id?: string, email?: string, userID?: string) — Tool to retrieve user details by Canny user ID, app user ID, or email. Use when you have exactly one identifier and need full user information. Example: "Retrieve user with email user@example.com" - canny_update_post(eta?: string, title?: string, postID: string, details?: string, etaPublic?: boolean, imageURLs?: string[], customFields?: object) — Tool to update post details. Use when you need to change a post's title, details, ETA, images, or custom fields. ## Example prompts - "What can I do in Canny?" - "Show me a summary of my Canny account" ## Links Docs: https://mcp.ai/docs/mcps/canny Website: https://mcp.ai/mcps/canny