Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
142 changes: 82 additions & 60 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,50 +5,52 @@ All notable changes to the Canny MCP Server will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.0.0] - 2025-01-19
## [1.3.0] - 2026-02-20

### Added
- Initial release of Canny MCP Server
- 24 comprehensive tools covering all Canny API operations
- 7 discovery & read tools (boards, posts, comments, votes, tags, categories)
- 3 post management tools (create, update status, change category)
- 6 engagement tools (comments and votes management)
- 4 user & company tools (user management, revenue tracking)
- 2 Jira integration tools (link, unlink existing issues)
- 3 batch operation tools (bulk status updates, tagging, merging)
- **Note**: Jira issue creation intentionally excluded - use dedicated Jira MCP server for better separation of concerns
- 3 real-time resources for dashboard metrics
- Board summary with status breakdown
- Status overview with trends
- Jira link status and health metrics
- 5 PM-focused prompts for common workflows
- Weekly feedback triage
- Sprint planning with RICE scoring
- Executive summary generation
- Jira sync status review
- Customer impact analysis
- Token-optimized responses (70-90% reduction)
- Smart pagination with automatic cursor/skip detection
- LRU caching for improved performance
- Exponential backoff retry logic for rate limits
- Comprehensive error handling and mapping
- Flexible configuration with environment variable expansion
- Support for custom statuses and fields
- Board and tag aliases for better UX
- Structured logging (JSON and pretty formats)
- **New Tools** (7):
- `canny_list_groups` — List groups with cursor-based pagination
- `canny_get_group` — Retrieve a group by ID or URL name
- `canny_list_ideas` — List ideas with filtering, search, and sorting (cursor-based)
- `canny_get_idea` — Retrieve an idea by ID or URL name
- `canny_list_insights` — List insights, optionally filtered by idea (cursor-based)
- `canny_get_insight` — Retrieve an insight by ID
- `canny_list_opportunities` — List Salesforce opportunities linked to Canny
- **New toolset**: `ideas` — groups all idea-ecosystem tools (groups, ideas, insights, opportunities)
- **New types**: `CannyGroup`, `CannyIdea`, `CannyIdeaStatus`, `IdeaFilter`, `CannyInsight`, `CannyOpportunity`
- **New client methods**: `listGroups`, `retrieveGroup`, `listIdeas`, `retrieveIdea`, `listInsights`, `retrieveInsight`, `listOpportunities`
- Changelog tools now support `sort` param (list) and `scheduledFor` param (create)

### Performance
- Response time <2s for 95% of requests
- Cache hit rate 85% for static data
- Support for 10+ concurrent requests
- Automatic rate limit handling
### Changed
- **Total tool count**: 30 → 37 tools (19 read-only, 18 write)
- **Toolset count**: 7 → 8 (added `ideas`)
- **Read-only mode**: 12 → 19 tools (added all 7 ideas ecosystem tools)
- Updated all documentation to reflect new tool counts and toolset descriptions

### Documentation
- Complete README with examples
- Configuration guide
- Troubleshooting section
- Architecture overview
- Integration guides
## [1.2.1] - 2026-02-20

### Added
- **New Tools** (6):
- `canny_create_tag` — Create a new tag on a Canny board
- `canny_add_post_tag` — Add a tag to a post (idempotent)
- `canny_remove_post_tag` — Remove a tag from a post (idempotent)
- `canny_list_status_changes` — List post status change history for auditing
- `canny_create_changelog_entry` — Create a changelog entry to communicate product updates
- `canny_list_changelog_entries` — List changelog entries with optional filtering by type or label
- **New toolset**: `changelog` — groups changelog tools for selective enablement
- **New types**: `CannyStatusChange`, `CannyChangelogEntry` with associated param interfaces
- **New client methods**: `createTag`, `addPostTag`, `removePostTag`, `listStatusChanges`, `createChangelogEntry`, `listChangelogEntries`

### Changed
- **Total tool count**: 24 → 30 tools (12 read-only, 18 write)
- **Discovery toolset**: 7 → 9 tools (added `canny_create_tag`, `canny_list_status_changes`)
- **Posts toolset**: 4 → 6 tools (added `canny_add_post_tag`, `canny_remove_post_tag`)
- **Toolset count**: 6 → 7 (added `changelog`)
- **Read-only mode**: 10 → 12 tools (added `canny_list_status_changes`, `canny_list_changelog_entries`)
- Updated all documentation to reflect new tool counts and toolset descriptions

### Fixed
- **`canny_get_post` crash with `fields: ["jira"]`** — The Canny API returns `post.jira` as `{ linkedIssues: [...] }` (an object), but the code treated it as a direct array, causing `post.jira.map is not a function`. Fixed the `CannyPost` type and all references in `ResponseTransformer` and `jiraLinkStatus` resource.

## [1.1.0] - 2025-10-25

Expand Down Expand Up @@ -107,30 +109,50 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- All new parameters tested
- Backward compatibility verified

## [1.2.1] - 2026-02-20
## [1.0.0] - 2025-01-19

### Added
- **New Tools** (6):
- `canny_create_tag` — Create a new tag on a Canny board
- `canny_add_post_tag` — Add a tag to a post (idempotent)
- `canny_remove_post_tag` — Remove a tag from a post (idempotent)
- `canny_list_status_changes` — List post status change history for auditing
- `canny_create_changelog_entry` — Create a changelog entry to communicate product updates
- `canny_list_changelog_entries` — List changelog entries with optional filtering by type or label
- **New toolset**: `changelog` — groups changelog tools for selective enablement
- **New types**: `CannyStatusChange`, `CannyChangelogEntry` with associated param interfaces
- **New client methods**: `createTag`, `addPostTag`, `removePostTag`, `listStatusChanges`, `createChangelogEntry`, `listChangelogEntries`
- Initial release of Canny MCP Server
- 24 comprehensive tools covering all Canny API operations
- 7 discovery & read tools (boards, posts, comments, votes, tags, categories)
- 3 post management tools (create, update status, change category)
- 6 engagement tools (comments and votes management)
- 4 user & company tools (user management, revenue tracking)
- 2 Jira integration tools (link, unlink existing issues)
- 3 batch operation tools (bulk status updates, tagging, merging)
- **Note**: Jira issue creation intentionally excluded - use dedicated Jira MCP server for better separation of concerns
- 3 real-time resources for dashboard metrics
- Board summary with status breakdown
- Status overview with trends
- Jira link status and health metrics
- 5 PM-focused prompts for common workflows
- Weekly feedback triage
- Sprint planning with RICE scoring
- Executive summary generation
- Jira sync status review
- Customer impact analysis
- Token-optimized responses (70-90% reduction)
- Smart pagination with automatic cursor/skip detection
- LRU caching for improved performance
- Exponential backoff retry logic for rate limits
- Comprehensive error handling and mapping
- Flexible configuration with environment variable expansion
- Support for custom statuses and fields
- Board and tag aliases for better UX
- Structured logging (JSON and pretty formats)

### Changed
- **Total tool count**: 24 → 30 tools (12 read-only, 18 write)
- **Discovery toolset**: 7 → 9 tools (added `canny_create_tag`, `canny_list_status_changes`)
- **Posts toolset**: 4 → 6 tools (added `canny_add_post_tag`, `canny_remove_post_tag`)
- **Toolset count**: 6 → 7 (added `changelog`)
- **Read-only mode**: 10 → 12 tools (added `canny_list_status_changes`, `canny_list_changelog_entries`)
- Updated all documentation to reflect new tool counts and toolset descriptions
### Performance
- Response time <2s for 95% of requests
- Cache hit rate 85% for static data
- Support for 10+ concurrent requests
- Automatic rate limit handling

### Fixed
- **`canny_get_post` crash with `fields: ["jira"]`** — The Canny API returns `post.jira` as `{ linkedIssues: [...] }` (an object), but the code treated it as a direct array, causing `post.jira.map is not a function`. Fixed the `CannyPost` type and all references in `ResponseTransformer` and `jiraLinkStatus` resource.
### Documentation
- Complete README with examples
- Configuration guide
- Troubleshooting section
- Architecture overview
- Integration guides

### Planned
- GitHub integration support
Expand Down
19 changes: 14 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ A Model Context Protocol (MCP) server for Canny feedback management. Connect Can

## Features

- **30 Tools** — Full Canny API coverage: posts, comments, votes, users, categories, tags, changelog, status changes, and Jira integration
- **37 Tools** — Full Canny API coverage: posts, comments, votes, users, categories, tags, changelog, status changes, ideas, insights, groups, opportunities, and Jira integration
- **Token-Optimized** — 70–90% smaller responses than the raw API
- **Jira Integration** — Link posts to Jira issues
- **PM Workflows** — Built-in prompts for weekly triage, sprint planning, and executive reporting
Expand Down Expand Up @@ -57,7 +57,7 @@ Ask Claude:
List the available Canny tools.
```

You should see 30 tools, including `canny_list_posts`, `canny_get_post`, and `canny_filter_posts`.
You should see 37 tools, including `canny_list_posts`, `canny_get_post`, and `canny_list_ideas`.

## Global Install

Expand Down Expand Up @@ -128,19 +128,28 @@ Then configure your MCP client to run `canny-mcp-server` instead of `npx`:
- `canny_list_changelog_entries` — List changelog entries
- `canny_create_changelog_entry` — Create a changelog entry to communicate product updates

### Ideas Ecosystem (7 read-only tools)
- `canny_list_groups` — List groups (cursor-based pagination)
- `canny_get_group` — Get a group by ID or URL name
- `canny_list_ideas` — List ideas with filtering, search, and sorting
- `canny_get_idea` — Get an idea by ID or URL name
- `canny_list_insights` — List insights, optionally filtered by idea
- `canny_get_insight` — Get an insight by ID
- `canny_list_opportunities` — List Salesforce opportunities linked to Canny

### Batch (1 write tool)
- `canny_batch_update_status` — Update multiple post statuses at once

## Configuration

### Tool Modes

The server runs in **readonly** mode by default (12 read-only tools). To enable write operations, set `CANNY_TOOL_MODE`:
The server runs in **readonly** mode by default (19 read-only tools). To enable write operations, set `CANNY_TOOL_MODE`:

| Mode | Tools | Description |
|------|-------|-------------|
| `readonly` | 12 | Read-only tools only (default) |
| `all` | 30 | All tools, including writes |
| `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`:
Expand Down
2 changes: 1 addition & 1 deletion docs/QUICKSTART.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Restart Claude Code. Ask:
List the available Canny tools.
```

You should see 30 tools.
You should see 37 tools.

## Option B: Install globally

Expand Down
32 changes: 23 additions & 9 deletions docs/TOOLSET_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,21 @@

## Overview

The Canny MCP Server organizes its 30 tools into 7 toolsets. You enable toolsets through the `CANNY_TOOL_MODE` environment variable or `config/default.json`.
The Canny MCP Server organizes its 37 tools into 8 toolsets. You enable toolsets through the `CANNY_TOOL_MODE` environment variable or `config/default.json`.

## Tool Modes

| Mode | Tools Enabled | Description |
|------|---------------|-------------|
| `readonly` | 12 | Read-only tools only (default) |
| `all` | 30 | All tools |
| `readonly` | 19 | Read-only tools only (default) |
| `all` | 37 | All tools |
| `discovery` | 9 | Discovery & list operations |
| `posts` | 6 | Post write operations |
| `engagement` | 6 | Comments & votes |
| `users` | 4 | Users & companies |
| `jira` | 2 | Jira integration |
| `changelog` | 2 | Changelog entries |
| `ideas` | 7 | Ideas, groups, insights, opportunities |
| `batch` | 1 | Batch operations |
| Comma-separated | Mixed | Custom combination (e.g., `discovery,posts`) |

Expand Down Expand Up @@ -101,20 +102,33 @@ CANNY_TOOL_MODE=discovery,posts # Discovery + Posts
| `canny_list_changelog_entries` | Yes | List changelog entries |
| `canny_create_changelog_entry` | No | Create a changelog entry |

### 7. Batch (1 tool: write)
### 7. Ideas Ecosystem (7 tools: all read-only)

| Tool | Read-Only | Description |
|------|-----------|-------------|
| `canny_list_groups` | Yes | List groups (cursor-based pagination) |
| `canny_get_group` | Yes | Get group by ID or URL name |
| `canny_list_ideas` | Yes | List ideas with filters, search, sorting |
| `canny_get_idea` | Yes | Get idea by ID or URL name |
| `canny_list_insights` | Yes | List insights, filterable by idea |
| `canny_get_insight` | Yes | Get insight by ID |
| `canny_list_opportunities` | Yes | List Salesforce opportunities |

### 8. Batch (1 tool: write)

| Tool | Description |
|------|-------------|
| `canny_batch_update_status` | Update multiple post statuses at once |

## Read-Only Mode

The default `readonly` mode enables 12 tools:
The default `readonly` mode enables 19 tools:

- All 8 read-only tools from **discovery** (`list_boards`, `list_tags`, `list_categories`, `list_posts`, `filter_posts`, `get_post`, `list_status_changes`)
- 2 read-only tools from **engagement** (`list_comments`, `list_votes`)
- 2 read-only tools from **users** (`get_user_details`, `list_companies`)
- 1 read-only tool from **changelog** (`list_changelog_entries`)
- All 7 read-only tools from **ideas** (`list_groups`, `get_group`, `list_ideas`, `get_idea`, `list_insights`, `get_insight`, `list_opportunities`)

No data modification is possible in this mode.

Expand All @@ -126,15 +140,15 @@ No data modification is possible in this mode.
{ "server": { "toolMode": "readonly" } }
```

12 tools. Safe for demonstrations and reporting.
19 tools. Safe for demonstrations and reporting.

### Product manager workflow

```json
{ "server": { "toolMode": "discovery,posts,engagement,changelog" } }
{ "server": { "toolMode": "discovery,posts,engagement,changelog,ideas" } }
```

23 tools. Discover, manage posts, engage with users, and publish changelog entries.
30 tools. Discover, manage posts, engage with users, publish changelog entries, and explore ideas.

### Integration focus

Expand All @@ -150,7 +164,7 @@ No data modification is possible in this mode.
{ "server": { "toolMode": "all" } }
```

All 30 tools.
All 37 tools.

## Backward Compatibility

Expand Down
Loading