A Model Context Protocol (MCP) server that provides intelligent tools for analyzing and managing JIRA backlogs. This server offers capabilities for backlog analysis, ticket splitting suggestions, and smart search functionality.
While other JIRA MCP implementations exist, this custom server provides:
- Enhanced Security: Built specifically for Point's infrastructure with controlled data access
- Tailored Functionality: Features designed for Point's specific backlog management workflows
- Complete Customization: Easy to extend and modify for evolving team needs
- Direct Integration: Connects directly to your JIRA instance without additional intermediary services
- 📊 Backlog Data Analysis: Fetch structured backlog data with flexible filtering
- 🔍 Smart Search: Natural language and JQL-powered issue search
- ✂️ Ticket Splitting: AI-powered suggestions for breaking down large tickets
- 👥 Team Workload Analysis: Real-time capacity and assignment analysis
- 🎯 Team Expertise Mapping: Skills tracking and component ownership analysis
- 🔗 Dependency Analysis: Blocking relationships and bottleneck identification
- 📈 Historical Metrics: Performance trends and velocity tracking
- 💼 Business Context: SLA compliance, priority analysis, and release planning
- 🏷️ Flexible Filtering: Filter by status, issue types, and other criteria
Check for duplicates in our backlog - look for similar summaries and descriptions
Which unassigned tickets should be assigned to specific team members?
Which tickets have unresolved questions or are blocked?
Analyze our backlog health and suggest improvements
Help me plan the next sprint based on priorities and team capacity
Fetch comprehensive backlog data for analysis including issue details, status, assignees, and metadata.
Parameters:
project
(string, optional): Project key (default: "GRO")maxResults
(number, optional): Max issues to fetch (10-500, default: 200)statusFilter
(string, optional): Comma-separated statuses (e.g., "BACKLOG,IN PROGRESS")issueTypes
(string, optional): Comma-separated types (e.g., "Story,Bug,Epic")
Search issues using natural language queries or JQL with AI assistance.
Parameters:
query
(string, required): Natural language query or JQLproject
(string, optional): Project key (default: "GRO")maxResults
(number, optional): Max results (1-100, default: 50)
Get comprehensive ticket information including comments and links for splitting analysis.
Parameters:
issueKey
(string, required): The issue key to get information for
Split a ticket into multiple new tickets with optional updates to the original ticket.
Parameters:
originalTicket
(string, required): The original ticket key to splitnewTickets
(array, required): Array of new tickets to create, each with summary, description, and optional fields like issueType, assignee, priority, labels, components, and storyPointsupdateOriginal
(object, optional): Updates to apply to the original ticket (e.g., new summary, description, or status)linkType
(string, optional): Type of link to create between original and new tickets (default: relates)dryRun
(boolean, optional): If true, only shows what would be created without making changes (default: true)
Get current team workload and capacity analysis. Shows active assignments, story points in progress, and available capacity.
Parameters:
project
(string, optional): Project key (default: "GRO")sprintFilter
(string, optional): Filter by sprint status: "active", "future", or "all" (default: active)
Example Usage:
// Get current team workload
use_mcp_tool("jira-backlog-manager", "get_team_workload", {})
// Focus on future sprint capacity
use_mcp_tool("jira-backlog-manager", "get_team_workload", {
"sprintFilter": "future"
})
Analyze team member expertise based on historical assignments and component ownership.
Parameters:
project
(string, optional): Project key (default: "GRO")lookbackDays
(number, optional): Days to look back for historical data (30-365, default: 90)
Example Usage:
// Get team expertise analysis
use_mcp_tool("jira-backlog-manager", "get_team_expertise", {
"lookbackDays": 180
})
Analyze ticket dependencies, blocking relationships, and related work.
Parameters:
issueKey
(string, optional): Issue key to analyze (if not provided, analyzes all active tickets)project
(string, optional): Project key (default: "GRO")
Example Usage:
// Analyze all dependencies project-wide
use_mcp_tool("jira-backlog-manager", "get_ticket_dependencies", {})
// Analyze dependencies for specific ticket
use_mcp_tool("jira-backlog-manager", "get_ticket_dependencies", {
"issueKey": "GRO-123"
})
Get historical performance metrics for similar ticket types and team members.
Parameters:
project
(string, optional): Project key (default: "GRO")issueType
(string, optional): Filter by issue type (Bug, Story, Epic, etc.)component
(string, optional): Filter by component namelookbackDays
(number, optional): Days to look back (30-730, default: 180)
Example Usage:
// Get overall performance metrics
use_mcp_tool("jira-backlog-manager", "get_historical_metrics", {})
// Analyze bug resolution performance
use_mcp_tool("jira-backlog-manager", "get_historical_metrics", {
"issueType": "Bug",
"lookbackDays": 90
})
Get business context including SLAs, customer impact, and release requirements for tickets.
Parameters:
project
(string, optional): Project key (default: "GRO")includeLabels
(boolean, optional): Include label-based business context analysis (default: true)
Example Usage:
// Get comprehensive business context
use_mcp_tool("jira-backlog-manager", "get_business_context", {})
- Node.js 18+
- TypeScript
- JIRA Cloud instance with API access
- JIRA API token
Create a .env
file or set the following environment variables:
JIRA_BASE_URL=https://your-domain.atlassian.net
JIRA_EMAIL=your-email@company.com
JIRA_API_TOKEN=your-api-token
JIRA_PROJECT_KEY=YOUR_PROJECT_KEY # Optional, defaults to "GRO"
- Go to Atlassian Account Settings
- Click "Create API token"
- Give it a descriptive name (e.g., "MCP Backlog Manager")
- Copy the generated token - save it securely as it won't be shown again
# Install dependencies
npm install
# Build the project
npm run build
# Start the server
npm start
# Watch mode for development
npm run dev
Add this server to your MCP client configuration:
{
"mcpServers": {
"jira-backlog-manager": {
"command": "node",
"args": ["/path/to/jira-backlog-manager/build/index.js"],
"env": {
"JIRA_BASE_URL": "https://your-domain.atlassian.net",
"JIRA_EMAIL": "your-email@company.com",
"JIRA_API_TOKEN": "your-api-token",
"JIRA_PROJECT_KEY": "YOUR_PROJECT_KEY"
}
}
}
}
// Get all backlog issues
use_mcp_tool("jira-backlog-manager", "get_backlog_data", {})
// Filter by status and issue type
use_mcp_tool("jira-backlog-manager", "get_backlog_data", {
"statusFilter": "BACKLOG,TO DO",
"issueTypes": "Story,Bug",
"maxResults": 100
})
// Natural language search
use_mcp_tool("jira-backlog-manager", "smart_search_issues", {
"query": "authentication issues with login"
})
// JQL search
use_mcp_tool("jira-backlog-manager", "smart_search_issues", {
"query": "assignee = currentUser() AND status = 'In Progress'"
})
use_mcp_tool("jira-backlog-manager", "split_large_ticket", {
"issueKey": "PROJ-123"
})
// Check team workload for sprint planning
use_mcp_tool("jira-backlog-manager", "get_team_workload", {})
// Identify subject matter experts for assignment
use_mcp_tool("jira-backlog-manager", "get_team_expertise", {})
// Find blocking dependencies
use_mcp_tool("jira-backlog-manager", "get_ticket_dependencies", {})
// Analyze team performance trends
use_mcp_tool("jira-backlog-manager", "get_historical_metrics", {})
// Check SLA breaches and release blockers
use_mcp_tool("jira-backlog-manager", "get_business_context", {})
- ✅ No hardcoded credentials: All sensitive data uses environment variables
- ✅ Secure authentication: Uses JIRA API tokens (recommended over passwords)
- ✅ Minimal permissions: Only requires read access to JIRA issues
- ✅ Local execution: Runs locally, no data sent to third parties
This MCP server:
- Connects directly to your JIRA instance
- Processes data locally on your machine
- Does not store or transmit data to external services
- Only accesses JIRA data you explicitly request through tool calls
├── src/
│ ├── index.ts # Main MCP server implementation
│ └── tools/ # Modular tool implementations
│ ├── teamWorkload.ts # Team workload analysis
│ ├── teamExpertise.ts # Skills and expertise mapping
│ ├── ticketDependencies.ts # Dependency analysis
│ ├── historicalMetrics.ts # Performance metrics
│ └── businessContext.ts # SLA and business priority analysis
├── build/ # Compiled JavaScript output (git ignored)
├── package.json # Dependencies and scripts
├── tsconfig.json # TypeScript configuration
└── README.md # This file
@modelcontextprotocol/sdk
: MCP protocol implementationaxios
: HTTP client for JIRA API callsstring-similarity
: Text similarity analysis
- Verify your JIRA_BASE_URL includes the full domain (e.g.,
https://company.atlassian.net
) - Ensure your API token is valid and hasn't expired
- Check that your email matches your JIRA account
- Verify you have read access to the specified JIRA project
- Some features may require additional JIRA permissions
- Ensure your JIRA instance is accessible from your network
- Check firewall/proxy settings if running in corporate environment
- Fork the repository
- Create a feature branch:
git checkout -b feature-name
- Commit changes:
git commit -am 'Add feature'
- Push to branch:
git push origin feature-name
- Submit a Pull Request
MIT License - see LICENSE file for details.
For issues and questions:
- Create an issue in this repository
- Check existing issues for similar problems
- Provide relevant error messages and environment details