backlog-mcp
Syncs Backlog issues to local markdown files for management within MCP-compatible editors like Cursor or Claude Desktop.
README
Backlog MCP Server
A Model Context Protocol (MCP) server for syncing Backlog issues to a local .tasks folder. This allows you to use Backlog issue management within your code editor through MCP-compatible tools like Cursor or Claude Desktop.
Features
- š Bidirectional Sync: Download issues from Backlog and push local changes back
- š Simple Format: Clean markdown files with just title and description
- š Flexible Organization: Organize tasks in nested folders (sprint-3, backlog, etc.)
- š Automatic Timestamps: Incremental sync based on last update time
- š Smart Updates: Only syncs changed issues after initial sync
- š MCP Compatible: Works with Cursor, Claude Desktop, and other MCP clients
Installation
Option 1: NPM (Recommended)
npm install -g backlog-mcp
Option 2: Local Development
git clone <repository-url>
cd backlog-mcp
npm install
npm run build
Configuration
This server uses environment variables for configuration.
Get Your Backlog API Key
- Log in to your Backlog space
- Go to Personal Settings > API
- Generate a new API key
- Copy the key for use in the configuration below
Configuration Options
Option 1: Environment Variables (Recommended)
Set the following environment variables:
Required:
BACKLOG_API_KEY- Your Backlog API keyBACKLOG_BASE_URL- Your Backlog space URL (e.g.,https://yourspace.backlog.com)BACKLOG_PROJECT_KEY- Your project key (e.g.,PROJ)
Optional:
BACKLOG_TASKS_DIR- Local tasks directory (defaults to.tasks)BACKLOG_IGNORE_ISSUE_TYPES- Comma-separated list of issue types to ignore (e.g.,Bug,Task)
Option 2: Configuration File
Create a config.json file in your project root:
{
"apiKey": "your-backlog-api-key",
"baseUrl": "https://yourspace.backlog.com",
"projectKey": "YOUR_PROJECT_KEY",
"tasksDir": ".tasks",
"ignoreIssueTypes": ["Bug", "Task"]
}
Usage with Cursor/Claude Desktop
Add to your MCP settings file:
Using NPM Installation
{
"mcpServers": {
"backlog-mcp": {
"command": "npx",
"args": [
"-y",
"github:danglephuc/backlog-mcp"
],
"env": {
"BACKLOG_API_KEY": "your-api-key",
"BACKLOG_BASE_URL": "https://yourspace.backlog.com",
"BACKLOG_PROJECT_KEY": "YOUR_PROJECT_KEY"
}
}
}
}
Using Local Build
{
"mcpServers": {
"backlog-mcp": {
"command": "node",
"args": ["/path/to/backlog-mcp/dist/index.js"],
"env": {
"BACKLOG_API_KEY": "your-api-key",
"BACKLOG_BASE_URL": "https://yourspace.backlog.com",
"BACKLOG_PROJECT_KEY": "YOUR_PROJECT_KEY"
}
}
}
}
Replace:
your-api-keywith your Backlog API keyyourspacewith your Backlog space nameYOUR_PROJECT_KEYwith your project key (e.g., "PROJ")
Available Tools
sync-issues
Syncs issues from Backlog to local .tasks folder with automatic incremental updates.
Parameters: None (uses automatic timestamp tracking)
Features:
- First sync: Downloads all issues
- Subsequent syncs: Only downloads updated issues
- Preserves your folder organization
update-issue
Pushes local changes back to Backlog.
Parameters:
issueKey(required): Issue key (e.g., "PROJ-123")
Example: "Update task PROJ-123 to Backlog"
get-issue
Gets details of a specific issue from local files.
Parameters:
issueKey(required): Issue key (e.g., "PROJ-123")parentIssue(optional): If true, include all child issues when this is a parent issue/feature
Features:
- Reads from local
.tasksfolder - When
parentIssue=true, returns the main issue plus all child issues in the same folder - Useful for understanding the full scope of a feature with all its sub-tasks
Examples:
- Get single issue: "Get task PROJ-123"
- Get parent with all children: "Get feature PROJ-100 with all child issues"
test-connection
Tests your Backlog API connection.
Parameters: None
list-task-files
Lists all synced task files.
Parameters: None
bulk-create-tasks
Creates Backlog issues from local temporary task files in parent folders. This tool scans for parent task folders (e.g., SBK-2) and creates issues from temporary files with pattern PARENT-{number}-{random} (e.g., SBK-2-1, SBK-2-2).
Parameters: None
Features:
- Scans for parent task folders following pattern
PARENT-{number} - Finds temporary task files with pattern
PARENT-{number}-{random} - Skips files that already have real Backlog issue keys (e.g.,
PROJ-123.md) - Creates issues in Backlog with proper parent-child relationships
- Renames local files to use real Backlog issue keys
- Preserves folder organization
Example Workflow:
- Create parent folder:
SBK-2/ - Create temporary files:
SBK-2-1.md,SBK-2-2.md, etc. - Run
bulk-create-taskstool - Files are renamed to real issue keys:
PROJ-123.md,PROJ-124.md - Issues are created in Backlog with proper parent relationships
Example Folder Structure:
.tasks/
āāā SBK-2/ ā Parent task folder
ā āāā SBK-2-1.md ā Temporary file (will be processed)
ā āāā SBK-2-2.md ā Temporary file (will be processed)
ā āāā PROJ-123.md ā Real issue key (will be skipped)
ā āāā PROJ-124.md ā Real issue key (will be skipped)
āāā PROJ-100/ ā Another parent folder
āāā PROJ-100-1.md ā Temporary file (will be processed)
āāā PROJ-100-2.md ā Temporary file (will be processed)
File Organization
Smart Folder Structure
.tasks/
āāā .last-sync ā Automatic timestamp tracking
āāā others/ ā New synced tasks go here
ā āāā PROJ-123.md
ā āāā PROJ-124.md
āāā sprint-3/ ā Organize however you want
ā āāā backend/
ā ā āāā PROJ-125.md
ā āāā frontend/
ā āāā PROJ-126.md
āāā backlog/
āāā high-priority/
ā āāā PROJ-127.md
āāā PROJ-128.md
How It Works
- Initial sync: All issues go to
others/folder - Manual organization: Move files to your preferred folders
- Subsequent syncs: Updates issues wherever they are located
- New issues: Always go to
others/folder
Simple File Format
# Task Title
Task description content goes here.
All content after the title is treated as description.
## Sections
You can use any markdown formatting you want.
- Lists
- **Bold text**
- Links, etc.
Workflow Example
- Sync issues:
sync-issuesā Downloads toothers/folder - Organize: Move
PROJ-123.mdtosprint-3/backend/ - Edit locally: Modify title or description
- Push changes:
update-issuewithissueKey: PROJ-123 - Next sync: Updates
PROJ-123.mdinsprint-3/backend/, new issues go toothers/
Development
Scripts
npm run build- Build TypeScriptnpm run dev- Watch mode for developmentnpm start- Run built server
Project Structure
src/
āāā index.ts # Entry point
āāā server.ts # MCP server and tools
āāā services/
ā āāā BacklogClient.ts # Backlog API client with pagination
ā āāā TaskFileManager.ts # File management with nested search
āāā types/
ā āāā backlog.ts # TypeScript types
āāā utils/
āāā config.ts # Configuration handling
Troubleshooting
Connection Issues
- Invalid API Key: Check your API key has proper permissions
- Wrong Base URL: Ensure URL matches your Backlog space
- Project Access: Verify you have access to the specified project
MCP Protocol Issues
- JSON Parse Errors: Ensure you're using the latest build
- Tool Not Found: Check server configuration in your MCP client
- No Response: Verify environment variables are set correctly
File Issues
- Missing Files: Run
sync-issuesto download latest - Update Failed: Check if issue exists in Backlog
- Organization Lost: Files stay where you put them across syncs
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.