A community-driven registry for Claude, Cursor, Windsurf, Cline & more. Not affiliated with Anthropic.
Are you the author? Sign in to claim
Canny MCP Server for Canny API integration with AI Assistants. Features Jira linking, batch operations, ETA management,
A Model Context Protocol (MCP) server for Canny feedback management. Connect Canny to any MCP-compatible AI client to manage customer feedback, prioritize features, and streamline product development through natural language.
The fastest way to start: run npx directly through Claude Code. No clone, no build.
https://<subdomain>.canny.iocanny_list_boards after setupclaude mcp add --transport stdio canny \
--scope user \
--env CANNY_SUBDOMAIN=<COMPANY_SUBDOMAIN> \
--env CANNY_API_KEY=<CANNY_API_KEY> \
--env CANNY_DEFAULT_BOARD=<BOARD_ID> \
--env CANNY_TOOL_MODE=readonly \
-- npx -y @opensourceops/canny-mcp
Replace <COMPANY_SUBDOMAIN>, <CANNY_API_KEY>, and <BOARD_ID> with your values.
Quit and reopen Claude Code for the new server to load.
Ask Claude:
List the available Canny tools.
You should see 37 tools, including canny_list_posts, canny_get_post, and canny_list_ideas.
To install the package globally:
npm install -g @opensourceops/canny-mcp
Then configure your MCP client to run canny-mcp-server instead of npx:
{
"mcpServers": {
"canny": {
"command": "canny-mcp-server",
"env": {
"CANNY_API_KEY": "your_api_key",
"CANNY_SUBDOMAIN": "your_subdomain",
"CANNY_DEFAULT_BOARD": "your_board_id",
"CANNY_TOOL_MODE": "readonly"
}
}
}
}
canny_list_boards — List all boardscanny_list_tags — List tags (optionally by board)canny_create_tag — Create a new tag on a boardcanny_list_categories — List categoriescanny_list_posts — List posts with filters (status, author, company, tags)canny_filter_posts — Filter by category, company, segment, tag slugs, and date rangescanny_get_post — Get full post details with comments and votescanny_list_status_changes — List post status change history for auditingcanny_create_category — Create a board categorycanny_create_post — Create a post (supports images, ETA, owner)canny_update_post — Update title, description, ETA, or imagescanny_update_post_status — Change status with optional voter notificationcanny_change_category — Move a post to a different categorycanny_add_post_tag — Add a tag to a postcanny_remove_post_tag — Remove a tag from a postcanny_list_comments — List comments (filterable by company)canny_list_votes — List votescanny_create_comment — Add a comment (supports images, internal flag)canny_delete_comment — Remove a commentcanny_add_vote — Add a votecanny_remove_vote — Remove a votecanny_get_user_details — Look up a user by ID, email, or custom userIDcanny_list_companies — List companies with MRR datacanny_find_or_create_user — Find or create a user with company associationscanny_link_company — Link a user to a companycanny_link_jira_issue — Link a Jira issue to a postcanny_unlink_jira_issue — Unlink a Jira issuecanny_list_changelog_entries — List changelog entriescanny_create_changelog_entry — Create a changelog entry to communicate product updatescanny_list_groups — List groups (cursor-based pagination)canny_get_group — Get a group by ID or URL namecanny_list_ideas — List ideas with filtering, search, and sortingcanny_get_idea — Get an idea by ID or URL namecanny_list_insights — List insights, optionally filtered by ideacanny_get_insight — Get an insight by IDcanny_list_opportunities — List Salesforce opportunities linked to Cannycanny_batch_update_status — Update multiple post statuses at onceThe server runs in readonly mode by default (19 read-only tools). To enable write operations, set CANNY_TOOL_MODE:
| Mode | Tools | Description |
|---|---|---|
readonly | 19 | Read-only tools only (default) |
all | 37 | All tools, including writes |
discovery,posts | varies | Specific toolsets (comma-separated) |
Set via environment variable or config/default.json:
{
"server": {
"toolMode": "all"
}
}
Rebuild after changing config/default.json:
npm run build
Canny API (required)
| Variable | Default | Description |
|---|---|---|
CANNY_API_KEY | -- | Your Canny API key (required) |
CANNY_BASE_URL | https://canny.io/api/v1 | Canny API base URL |
CANNY_SUBDOMAIN | auto-detected | Your Canny subdomain; auto-detected from CANNY_BASE_URL if *.canny.io |
CANNY_CONFIG_PATH | config/default.json | Path to the JSON config file |
Workspace
| Variable | Default | Description |
|---|---|---|
CANNY_DEFAULT_BOARD | -- | Default board ID |
CANNY_WORKSPACE_NAME | Default | Workspace display name |
CANNY_CUSTOM_STATUSES | open,under review,planned,in progress,complete,closed | Comma-separated list of valid statuses |
Jira Integration
| Variable | Default | Description |
|---|---|---|
CANNY_JIRA_ENABLED | false | Enable Jira integration (true/false) |
CANNY_JIRA_PROJECT_KEY | -- | Jira project key (e.g., PROJ) |
Pagination & Display
| Variable | Default | Description |
|---|---|---|
CANNY_PAGINATION_LIMIT | 10 | Results per page |
CANNY_PAGINATION_MAX | 50 | Maximum total results |
CANNY_COMPACT_MODE | true | Return compact responses (true/false) |
Cache
| Variable | Default | Description |
|---|---|---|
CANNY_CACHE_ENABLED | true | Enable response caching (true/false) |
CANNY_CACHE_MAX_SIZE | 100 | Maximum cache entries |
Rate Limiting
| Variable | Default | Description |
|---|---|---|
CANNY_RATE_LIMIT_REQUESTS | 100 | Maximum requests per window |
CANNY_RATE_LIMIT_WINDOW | 60000 | Rate limit window in milliseconds |
Server
| Variable | Default | Description |
|---|---|---|
CANNY_TOOL_MODE | readonly | readonly, all, or comma-separated toolsets |
SERVER_TRANSPORT | stdio | Transport mode: stdio, http, or both |
SERVER_HTTP_PORT | 3000 | HTTP server port (when transport includes http) |
SERVER_HTTP_HOST | 0.0.0.0 | HTTP server bind address |
Logging
| Variable | Default | Description |
|---|---|---|
LOG_LEVEL | info | Log level: debug, info, warn, error |
LOG_FORMAT | json | Log format: json or pretty |
The server ships with 5 built-in prompts (weekly_triage, sprint_planning, executive_summary, jira_sync_status, customer_impact). Add your own in config/default.json:
{
"prompts": [
{
"name": "my_workflow",
"description": "Custom triage workflow",
"template": "Analyze feedback and..."
}
]
}
See Prompt Configuration for the full guide and Custom Prompts for advanced examples.
Clone the repository to modify the server, run tests, or contribute.
git clone https://github.com/opensourceops/canny-mcp-server.git
cd canny-mcp-server
npm install
npm run build
claude mcp add --transport stdio canny \
--env CANNY_API_KEY=your_api_key \
--env CANNY_SUBDOMAIN=your_subdomain \
--env CANNY_DEFAULT_BOARD=your_board_id \
--env CANNY_CONFIG_PATH=$(pwd)/config/default.json \
-- $(which node) $(pwd)/dist/index.js
Add to your MCP client's config file:
{
"mcpServers": {
"canny": {
"command": "node",
"args": ["/absolute/path/to/canny-mcp-server/dist/index.js"],
"env": {
"CANNY_API_KEY": "your_api_key",
"CANNY_SUBDOMAIN": "your_subdomain",
"CANNY_DEFAULT_BOARD": "your_board_id",
"CANNY_CONFIG_PATH": "/absolute/path/to/canny-mcp-server/config/default.json"
}
}
}
}
Restart your MCP client, then ask:
Show me the latest feature requests from Canny.
Test your key directly:
curl https://canny.io/api/v1/boards/list --data apiKey=YOUR_API_KEY
This should return your boards.
npm run buildCANNY_TOOL_MODE — readonly excludes write toolsUse Node.js LTS versions (20.9+, 22+, or 24+). Odd-numbered releases (23, 25) are non-LTS and unsupported. Switch with nvm use 20 or nvm use 22.
Deprecated package warnings (ESLint, glob) affect only devDependencies and do not affect production runtime.
.env files or API keysreadonly mode for general useCANNY_API_KEY secretcanny-mcp-server/
├── src/ # TypeScript source
│ ├── index.ts # Entry point
│ ├── server.ts # MCP server
│ ├── api/ # Canny API client
│ ├── tools/ # MCP tools
│ ├── prompts/ # Built-in prompts
│ └── types/ # Type definitions
├── config/
│ └── default.json # Server configuration
├── docs/ # Documentation
├── dist/ # Compiled output (generated)
├── package.json
└── tsconfig.json
Apache 2.0 — See LICENSE.
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
MCP server integration for DaVinci Resolve Studio
A Jetbrains IDE IntelliJ plugin aimed to provide coding agents the ability to leverage intelliJ's indexing of the codeba