An MCP (Model Context Protocol) server for managing LaunchNotes projects and announcements through the GraphQL API. Uses stdio transport for Claude Desktop and other MCP clients.
Project Management (6 tools)
- Get complete project details
- List all accessible projects
- Update custom CSS, HTML, headers, and footers
- Update project color palette and theme
- Update project content (title, description, slug)
- Toggle project features (feedback, roadmap, ideas, RSS, voting)
Announcement Management (7 tools)
- List and filter announcements
- Get announcement details
- Create new announcements
- Update existing announcements
- Publish announcements immediately
- Schedule announcements for future publication
- Archive announcements
Feedback Management (2 tools) π
- Search and filter customer feedback
- Get complete feedback details with customer info
Analytics (1 tool) π
- Get top-performing announcements by various metrics
npm install -g @launchnotes/mcpgit clone https://github.com/launchnotes/mcp.git
cd mcp
npm install
npm run buildGet your LaunchNotes API token from Settings β API in your LaunchNotes dashboard. Use a Management token for full access or a Public token for read-only operations.
Add to your Claude Desktop config file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"launchnotes": {
"command": "npx",
"args": ["-y", "@launchnotes/mcp"],
"env": {
"LAUNCHNOTES_API_TOKEN": "your-token-here"
}
}
}
}Then restart Claude Desktop.
claude mcp add --transport stdio launchnotes \
--env LAUNCHNOTES_API_TOKEN='your-token-here' \
-- npx -y @launchnotes/mcpIn Claude, simply ask:
List my LaunchNotes projects
Create a new announcement about our API update
Getting your API token:
- Log into LaunchNotes
- Navigate to Settings β API
- Generate a Management token (read/write access) or Public token (read-only)
Get complete details for a LaunchNotes project including all customization settings.
Parameters:
project_id(string, required): The project IDresponse_format('json' | 'markdown', optional): Output format (default: 'markdown')
Example:
{
"project_id": "proj_123",
"response_format": "markdown"
}Use cases:
- "Show me my project's current custom CSS"
- "What are the color values for my project?"
- "Get all settings for project proj_123"
List all LaunchNotes projects accessible with your API token.
Parameters:
response_format('json' | 'markdown', optional): Output format (default: 'markdown')
Example:
{
"response_format": "json"
}Use cases:
- "Show me all my LaunchNotes projects"
- "List my organization's projects"
- "What projects do I have access to?"
Update custom CSS, HTML head, header, footer, or index hero for a project.
Parameters:
project_id(string, required): The project IDcustom_css(string, optional): Custom CSS codecustom_head(string, optional): Custom HTML for<head>sectioncustom_header(string, optional): Custom HTML for page headercustom_footer(string, optional): Custom HTML for page footercustom_index_hero(string, optional): Custom HTML for index hero section
Note: At least one custom code field must be provided.
Example:
{
"project_id": "proj_123",
"custom_css": ".sidebar { display: none; }",
"custom_head": "<meta name=\"description\" content=\"Product updates\">"
}Use cases:
- "Add custom CSS to hide the sidebar"
- "Update the custom header HTML"
- "Set custom analytics code in the head"
Update the color palette and theme for a project. All colors must be in hex format.
Parameters:
project_id(string, required): The project IDprimary_color(string, optional): Primary brand color (hex)secondary_color(string, optional): Secondary brand color (hex)primary_text_color(string, optional): Primary text color (hex)secondary_text_color(string, optional): Secondary text color (hex)gray_color(string, optional): Gray accent color (hex)light_gray_color(string, optional): Light gray color (hex)off_white_color(string, optional): Off-white color (hex)white_color(string, optional): White color (hex)supporting_palette(string, optional): Supporting palette configcolor_theme(string, optional): Overall color theme identifier
Note: At least one color field must be provided. All colors must be in hex format (e.g., #FF5733).
Example:
{
"project_id": "proj_123",
"primary_color": "#FF5733",
"secondary_color": "#3498DB",
"primary_text_color": "#2C3E50"
}Use cases:
- "Change the primary color to #FF5733"
- "Update all brand colors for my project"
- "Set text colors to improve readability"
Update project title, description, headings, and slug.
Parameters:
project_id(string, required): The project IDname(string, optional): Internal project nametitle(string, optional): Public-facing project titledescription(string, optional): Project descriptionheading(string, optional): Main heading on the project pagesubheading(string, optional): Subheading below the main headingslug(string, optional): URL-friendly identifier (lowercase, hyphens only)
Note: At least one content field must be provided.
Example:
{
"project_id": "proj_123",
"title": "Product Updates",
"heading": "What's New",
"slug": "updates"
}Use cases:
- "Update project title to 'Product Updates'"
- "Change the heading and subheading"
- "Update the project slug"
Enable or disable features for a project.
Parameters:
project_id(string, required): The project IDfeedback_enabled(boolean, optional): Enable/disable feedback collectionroadmap_enabled(boolean, optional): Enable/disable roadmap featureideas_enabled(boolean, optional): Enable/disable ideas/feature requestsrss_feed_enabled(boolean, optional): Enable/disable RSS feedvoting_enabled(boolean, optional): Enable/disable voting on ideasnoindex(boolean, optional): Prevent search engine indexing (true = disabled SEO)
Note: At least one feature toggle must be provided.
Example:
{
"project_id": "proj_123",
"feedback_enabled": true,
"roadmap_enabled": true,
"voting_enabled": true
}Use cases:
- "Enable feedback collection for my project"
- "Turn on the roadmap feature"
- "Disable RSS feed"
Search and filter customer feedback in a LaunchNotes project.
Parameters:
project_id(string, required): The ID of the projectquery(string, optional): Search term to find in feedback contentreaction('happy' | 'meh' | 'sad', optional): Filter by customer sentimentimportance('low' | 'medium' | 'high', optional): Filter by importance levelorganized_state(string, optional): Filter by state ('organized', 'unorganized', 'announcement', 'idea', 'roadmap')start_date(string, optional): Filter feedback created after this date (ISO 8601)end_date(string, optional): Filter feedback created before this date (ISO 8601)limit(number, optional): Number to return (max 100, default: 20)response_format('json' | 'markdown', optional): Output format (default: 'markdown')
Example:
{
"project_id": "proj_123",
"query": "Digests",
"reaction": "sad",
"importance": "high",
"limit": 10
}Use cases:
- "What are customers saying about Digests?"
- "Show me all unhappy feedback from last month"
- "Find high importance feedback that's unorganized"
- "Search feedback containing 'API integration'"
Get complete details for a specific feedback item including customer info and associations.
Parameters:
feedback_id(string, required): The ID of the feedback itemresponse_format('json' | 'markdown', optional): Output format (default: 'markdown')
Example:
{
"feedback_id": "fb_abc123",
"response_format": "markdown"
}Returns:
- Content and internal notes
- Sentiment (reaction) and importance
- Affected customer information
- Reporter information
- Associated announcement/idea/work item
- Timestamps
Use cases:
- "Show me details for feedback #abc123"
- "Get the full context of this feedback item"
- "What announcement is this feedback associated with?"
Get top-performing announcements ranked by various metrics over a specified timeframe.
Parameters:
project_id(string, required): The ID of the projecttimeframe('week' | 'month' | 'quarter' | 'year', required): Time periodstart_date(string, optional): Custom start date (ISO 8601) - overrides timeframeend_date(string, optional): Custom end date (ISO 8601) - overrides timeframemetric(enum, optional, default: 'engagement'): Ranking metric'engagement'- Total views + opens + clicks (most comprehensive)'open_rate'- Email open rate (email performance)'click_rate'- Email click rate (engagement depth)'feedback_count'- Number of feedback items (customer response)'feedback_sentiment'- Average sentiment score (customer satisfaction)
limit(number, optional): Number of results (max 50, default: 10)response_format('json' | 'markdown', optional): Output format (default: 'markdown')
Example:
{
"project_id": "proj_123",
"timeframe": "quarter",
"metric": "engagement",
"limit": 5
}Returns: Ranked list of announcements with:
- Announcement details (ID, headline, slug, publish date)
- Primary metric value
- All other available metrics (views, opens, clicks, rates, feedback)
Use cases:
- "Which announcements performed best this quarter?"
- "Show me top 5 announcements by email open rate this month"
- "What got the most feedback in the last week?"
- "Which announcements had the best sentiment this year?"
Here's a complete workflow for customizing a LaunchNotes project:
# 1. List all your projects
# Response: Shows all projects with IDs
# 2. Get details for a specific project
{
"project_id": "proj_abc123",
"response_format": "markdown"
}
# 3. Update the color scheme
{
"project_id": "proj_abc123",
"primary_color": "#FF5733",
"secondary_color": "#3498DB"
}
# 4. Add custom CSS to hide elements
{
"project_id": "proj_abc123",
"custom_css": ".sidebar { display: none; } .header { background: #FF5733; }"
}
# 5. Update content
{
"project_id": "proj_abc123",
"title": "Product Updates",
"heading": "Stay Updated",
"subheading": "All the latest features and improvements"
}
# 6. Enable features
{
"project_id": "proj_abc123",
"feedback_enabled": true,
"roadmap_enabled": true
}LaunchNotes enforces a rate limit of 300 operations per 5 minutes. The server will return an error if this limit is exceeded.
The server provides detailed error messages for common issues:
- Authentication failed: Check your API token
- Project not found: Verify the project ID exists
- Rate limit exceeded: Wait before making more requests
- Validation error: Check that all required fields are provided and formatted correctly
npm run devThis will watch for TypeScript changes and rebuild automatically.
@launchnotes/mcp/
βββ src/
β βββ index.ts # Server initialization
β βββ shared/
β β βββ client.ts # GraphQL client
β β βββ constants.ts # API configuration
β β βββ types.ts # Shared TypeScript interfaces
β βββ projects/
β β βββ types.ts # Project types
β β βββ queries.ts # Project GraphQL queries
β β βββ schemas.ts # Project Zod schemas
β β βββ formatters.ts # Project response formatters
β β βββ tools.ts # Project tool implementations
β βββ announcements/
β βββ types.ts # Announcement types
β βββ queries.ts # Announcement GraphQL queries
β βββ schemas.ts # Announcement Zod schemas
β βββ formatters.ts # Announcement response formatters
β βββ tools.ts # Announcement tool implementations
βββ dist/ # Compiled JavaScript
βββ package.json
βββ tsconfig.json
βββ README.md
To use this MCP server with Claude Desktop:
-
Configure Claude Desktop:
Edit your Claude Desktop configuration file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Add the server configuration:
{ "mcpServers": { "launchnotes": { "command": "npx", "args": ["-y", "@launchnotes/mcp"], "env": { "LAUNCHNOTES_API_TOKEN": "your-token-here" } } } }Or if running from source:
{ "mcpServers": { "launchnotes": { "command": "node", "args": ["/path/to/mcp/dist/index.js"], "env": { "LAUNCHNOTES_API_TOKEN": "your-token-here" } } } } - macOS:
-
Restart Claude Desktop
-
Verify the connection: Ask Claude: "List my LaunchNotes projects"
- Ensure Node.js 18+ is installed:
node --version - Verify your API token is set correctly
- Check that the server is built:
npm run build
- Confirm your API token is valid
- Check that you're using a Management token (not Public) for write operations
- Verify the token hasn't expired
- Use
launchnotes_list_projectsto see all accessible projects - Verify you have permission to access the project
- Check that you're using the correct project ID (not the slug)
This is a custom MCP server. To add new tools or features:
- Add new tool schemas in
src/schemas/ - Implement tool logic in
src/tools/ - Register tools in the appropriate file
- Update this README with documentation
MIT
For LaunchNotes API questions, visit: https://help.launchnotes.com/
For MCP protocol questions, visit: https://modelcontextprotocol.io/