Connect Canny to ChatGPT: Automate Feedback & Feature Requests via MCP
Learn how to connect Canny to ChatGPT using a managed MCP server. Automate feature requests, user votes, and product feedback triage without writing custom code.
If you want to manage product roadmaps, automatically triage user feedback, or cast votes on feature requests directly from ChatGPT, you need to bridge the two platforms. Native connectors do not exist for this specific cross-LLM orchestration (a challenge also present when connecting Anthropic to ChatGPT). The standard approach is building a Model Context Protocol (MCP) server that translates ChatGPT's tool calls into Canny REST API requests. I will show you exactly how to generate a managed MCP server for Canny using Truto and connect it to ChatGPT in minutes.
Giving a Large Language Model (LLM) read and write access to your product feedback repository is an engineering challenge. You either spend weeks building, hosting, and maintaining a custom MCP server, or you use a managed infrastructure layer that handles the boilerplate for you. This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Canny, connect it natively to ChatGPT, and execute complex product management workflows using natural language.
If your team uses Claude, check out our guide on connecting Canny to Claude or explore our broader guide on connecting Canny to AI Agents.
The Engineering Reality of the Canny API
A custom MCP server is a self-hosted integration layer that translates an LLM's tool calls into REST API requests. While the open standard provides a predictable way for models to discover tools, implementing it against vendor APIs requires handling their specific architectural quirks. If you decide to build a custom Canny MCP server from scratch, you own the entire API lifecycle.
Canny's API introduces specific integration hurdles that break standard REST assumptions (much like the bucket hierarchy challenges we discussed in our guide to connecting Basecamp to ChatGPT):
Strict Relational Dependencies
You cannot simply create a post in a vacuum. Canny's data model is highly relational. To create a feature request, the AI agent must first fetch the exact boardID, map the user context to a specific Canny authorID, and handle board-specific category taxonomies. If your agent hallucinated a board name instead of passing the correct UUID, the request fails.
Impersonation and Vote Casting
Canny relies heavily on user identity to track feature popularity. When an AI agent casts a vote on a post, it must do so on behalf of a specific user. This requires the MCP server to expose tools that allow the LLM to search for a user, retrieve their userID, and inject that identifier into the vote creation payload. Managing this multi-step orchestration requires precise schema definitions.
Status Mapping Across Boards Posts in Canny have specific states (e.g., "under review", "planned", "in progress") that are tied to specific board configurations. An AI agent attempting to update a post's status must understand the allowed enumerations for that specific board, otherwise the API returns a validation error.
Truto abstracts these complexities. By normalizing Canny's endpoints into dynamic MCP tools, Truto handles the pagination, schema enforcement, and authentication natively.
How to Generate a Canny MCP Server
Truto dynamically generates MCP tools from Canny's API documentation and resource schemas. Every MCP server is scoped to a single integrated account and authenticated via a cryptographic token in the URL. You can create this server using the Truto dashboard or programmatically via the API.
Method 1: Via the Truto UI
For teams managing integrations manually, the dashboard provides a fast path to generation:
- Navigate to the Integrated Accounts page in your Truto dashboard and select your connected Canny account.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration. You can restrict the server to specific methods (e.g., read-only) or specific tags (e.g., posts only).
- Copy the generated MCP server URL. This URL contains the secure token required for client connection.
Method 2: Via the Truto API
For programmatic provisioning - such as generating temporary MCP servers for automated CI/CD pipelines or ephemeral agent sessions - use the REST API.
Make a POST request to /integrated-account/:id/mcp with your configuration:
{
"name": "Canny Product Agent MCP",
"config": {
"methods": ["read", "write"],
"tags": ["feedback", "users"]
},
"expires_at": "2026-12-31T23:59:59Z"
}The API validates the configuration, hashes the token securely, and returns the ready-to-use URL:
{
"id": "mcp-789",
"name": "Canny Product Agent MCP",
"url": "https://api.truto.one/mcp/a1b2c3d4e5f6..."
}Connecting the MCP Server to ChatGPT
Once you have your Canny MCP server URL, you need to register it with your LLM client.
Method A: Via the ChatGPT UI
If you are using ChatGPT's desktop application or web interface (requires Developer Mode on Pro, Plus, Team, or Enterprise plans):
- Open ChatGPT and navigate to Settings -> Apps -> Advanced settings.
- Enable Developer mode.
- Under MCP servers / Custom connectors, click Add new server.
- Enter a name (e.g., "Canny Tracker").
- Paste the Truto MCP URL into the Server URL field.
- Click Save.
ChatGPT will immediately perform a handshake with the server, fetch the available tools, and make them available in your current context window.
Method B: Via Manual Config File
If you are running a custom agent framework, Cursor, or a headless setup, you can connect via a standard MCP configuration file using the Server-Sent Events (SSE) transport.
Add the following to your mcp.json or equivalent client configuration:
{
"mcpServers": {
"canny": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"--url",
"https://api.truto.one/mcp/a1b2c3d4e5f6..."
]
}
}
}graph TD
A[ChatGPT / Claude] -->|JSON-RPC 2.0| B(Truto MCP Router)
B -->|Hash Token Lookup| C[(Secure Storage)]
C -->|Validate Config| D{Method/Tag Filters}
D -->|Execute Proxy API| E[Canny REST API]
E -->|Normalized Response| ACanny MCP Tool Inventory
Truto automatically maps Canny's API endpoints into strict, documented tools.
Hero Tools
These are the high-value operations most commonly used by product teams.
list_all_canny_posts
- Description: List all posts in Canny, including feedback items, feature requests, and bug reports. Supports cursor-based pagination and filtering by board.
- Example Prompt: "Pull a list of all feature requests on the 'Core Product' board and sort them by the highest vote count."
get_single_canny_post_by_id
- Description: Retrieve details for a specific post, including its status, category, and total vote count.
- Example Prompt: "Get the current status and comment count for post ID 12345."
create_canny_post
- Description: Create a new feedback post or feature request in a specific Canny board. Requires
boardIDandauthorID. - Example Prompt: "Log a new feature request on the 'Integrations' board titled 'Add Webhook Support' on behalf of user ID 9876."
update_canny_post
- Description: Update an existing post in Canny, allowing for status changes, title edits, or category reassignments.
- Example Prompt: "Change the status of post ID 12345 to 'Planned' and append ' [Q3 Roadmap]' to the title."
create_canny_vote
- Description: Cast a vote on a specific feature request or post on behalf of a user.
- Example Prompt: "Add a vote to the 'Dark Mode' feature request for user ID 5555."
Full Tool Inventory
Here is the complete inventory of additional Canny tools available. For full schema details, visit the Canny integration page.
- list_all_canny_boards: List all boards in Canny. Returns an array of board objects including id, name, created, and privacy status.
- get_single_canny_board_by_id: Retrieve board details in Canny using id. Returns fields like id and name.
- list_all_canny_comments: List all comments associated with a specific feedback post to track user engagement.
- create_canny_comment: Create a new comment on a Canny post to provide official updates or reply to users.
- list_all_canny_votes: List all votes for a specific post to identify which users are most interested.
- list_all_canny_users: List all users in the Canny account to manage contributors and feedback providers.
- list_all_canny_changelog_entries: List all entries in the product changelog to sync updates with other platforms.
Workflows in Action
Connecting ChatGPT to Canny transforms static roadmaps into interactive, agentic systems. Here is how product and support teams actually use these tools in production.
Use Case 1: Triaging Inbound Feedback
Product managers spend hours reading raw feedback and categorizing it. An AI agent can automate this entirely.
"Find all new posts on the 'Feature Requests' board created this week. Categorize them based on our product pillars, summarize the top 3 by vote count, and draft an official comment for the highest-voted post stating we are reviewing it."
Execution Steps:
- Calls
list_all_canny_boardsto resolve the ID for the 'Feature Requests' board. - Calls
list_all_canny_postsusing the board ID and filters for recent creation dates. - Evaluates the post descriptions against internal product pillars.
- Calls
create_canny_commenton the post with the highest vote count to post the drafted response.
Result: The PM gets a structured summary of weekly feedback, and the community gets immediate acknowledgment on trending requests.
Use Case 2: Support-to-Product Bug Logging
Support agents often need to escalate Zendesk or Intercom tickets into Canny bug reports without switching contexts (for a deeper dive into ITSM automation, see our guide on connecting Jira to ChatGPT).
"Log a new bug report on the 'Bugs' board titled 'SSO Login Failure on Mobile'. Use the details from my previous message as the description, and automatically cast a vote for user ID 8888 so they are subscribed to updates."
Execution Steps:
- Calls
list_all_canny_boardsto find the 'Bugs' board ID. - Calls
create_canny_postwith the title, description, board ID, and the support agent's author ID. - Extracts the newly created
postIDfrom the response. - Calls
create_canny_voteusing thepostIDand the customer's user ID (8888).
Result: The bug is officially logged in Canny, and the affected customer is automatically linked as a voter, ensuring they receive status updates when the engineering team resolves the issue.
Security and Access Control
Giving an LLM access to your product roadmap data requires strict boundaries. Truto provides multiple layers of security at the MCP token level:
- Method Filtering: Restrict the server to read-only operations by passing
config.methods: ["read"]. This allows the agent to query feature requests but prevents it from accidentally modifying statuses or creating phantom votes. - Tag Filtering: Scope the server to specific resource types using
config.tags. If you only want the agent to analyze changelogs, you can isolate access strictly to those endpoints. - Token Authentication: For enterprise environments, enable
require_api_token_auth: true. This forces the MCP client to provide a valid Truto API token in theAuthorizationheader, meaning possession of the MCP URL alone is not enough to access the data. - Ephemeral Access: Use the
expires_atfield to create temporary credentials. If you are granting a contractor or a temporary AI agent access to Canny, the server will automatically self-destruct at the specified time via a TTL (Time-To-Live) policy, leaving zero stale credentials behind.
By leveraging a managed MCP server, you eliminate the technical debt of maintaining API connectors and focus entirely on building intelligent, context-aware product workflows—similar to managing relationship intelligence when connecting Affinity to ChatGPT.
FAQ
- How do I connect Canny to ChatGPT?
- You can connect Canny to ChatGPT by generating a Model Context Protocol (MCP) server URL via Truto and adding it as a custom connector in ChatGPT's Developer Mode settings.
- Can ChatGPT automatically vote on Canny feature requests?
- Yes. By exposing the create_canny_vote tool through an MCP server, ChatGPT can cast votes on specific posts on behalf of designated users.
- How do I restrict the AI agent to read-only access in Canny?
- When generating the MCP server in Truto, you can set method filters to only allow 'read' operations, preventing the LLM from creating or updating posts.
- Do I need to write custom code to build a Canny MCP server?
- No. Truto dynamically generates the MCP server and tool definitions directly from Canny's API schemas, completely removing the need to write and host integration code.