A Model Context Protocol (MCP) server for Jira integration with OAuth authentication.
- β 10 Powerful Tools - Complete task management with daily & monthly hours tracking
- β OAuth Authentication - Secure auto-refresh tokens
- β Zero Configuration - No database, CLI-based setup
- β MCP Compatible - Works with Claude, Cursor, VS Code
Global install (recommended):
npm install -g @urcard/jira-mcp-serverOr clone from source:
git clone https://github.com/dongitran/Jira-MCP-Server.git
cd Jira-MCP-Server
npm installYou need Jira OAuth credentials:
access_token- OAuth access tokenrefresh_token- OAuth refresh tokenclient_id- OAuth client IDclient_secret- OAuth client secretcloud_id- Atlassian Cloud ID
π Easy way to get credentials: Use our OAuth Token Generator - it provides ready-to-use MCP config with all required credentials including cloud_id!
Or manually: How to get Jira OAuth credentials β
Use our OAuth Token Generator to get ready-to-use config with all credentials including cloud_id. Just copy and paste!
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"jira": {
"command": "jira-mcp-server",
"args": [
"--access_token", "YOUR_ACCESS_TOKEN",
"--refresh_token", "YOUR_REFRESH_TOKEN",
"--client_id", "YOUR_CLIENT_ID",
"--client_secret", "YOUR_CLIENT_SECRET",
"--cloud_id", "YOUR_CLOUD_ID"
],
"env": {}
}
}
}Create .cursor/mcp.json:
{
"mcpServers": {
"jira": {
"command": "jira-mcp-server",
"args": [
"--access_token", "YOUR_ACCESS_TOKEN",
"--refresh_token", "YOUR_REFRESH_TOKEN",
"--client_id", "YOUR_CLIENT_ID",
"--client_secret", "YOUR_CLIENT_SECRET",
"--cloud_id", "YOUR_CLOUD_ID"
],
"env": {}
}
}
}Add to ~/Library/Application Support/Code/User/mcp.json (macOS):
{
"mcpServers": {
"jira": {
"command": "jira-mcp-server",
"args": [
"--access_token", "YOUR_ACCESS_TOKEN",
"--refresh_token", "YOUR_REFRESH_TOKEN",
"--client_id", "YOUR_CLIENT_ID",
"--client_secret", "YOUR_CLIENT_SECRET",
"--cloud_id", "YOUR_CLOUD_ID"
],
"env": {}
}
}
}Note: After first run, tokens are cached to ~/.jira-mcp/tokens.cache and will auto-refresh. You only need to provide credentials once!
Get tasks assigned to current user with filters.
Parameters:
filter:todo|today|in-progress|high-priority|overdue|completed|allperiod:today|week|month(for completed filter)
Example:
{
"filter": "today"
}Get tasks active on a specific date with daily hours calculation.
Parameters:
date: Date in YYYY-MM-DD format
Example:
{
"date": "2025-01-15"
}Features:
- Calculates daily hours based on story points
- Excludes weekends and Vietnamese holidays
- Smart workload distribution
Search tasks using JQL query or keyword.
Parameters:
query: JQL query or keywordmaxResults: Maximum results (default: 50)
Example:
{
"query": "project = URC AND status = 'In Progress'",
"maxResults": 20
}Create a new Jira task with optional subtasks.
Parameters:
project: Project key (required)summary: Task title (required)description: Task description (optional)issueType: Issue type (default: "Task")priority: Priority (default: "Medium")storyPoints: Story points (optional)startDate: Start date YYYY-MM-DD (optional)dueDate: Due date YYYY-MM-DD (optional)subtasks: Array of subtasks (optional)
Example:
{
"project": "URC",
"summary": "Implement new feature",
"priority": "High",
"storyPoints": 5,
"dueDate": "2025-01-20",
"subtasks": [
{
"summary": "Design API",
"storyPoints": 2
}
]
}Update start date and/or due date of a task.
Parameters:
taskKey: Task key (required)startDate: Start date YYYY-MM-DD (optional)dueDate: Due date YYYY-MM-DD (optional)
Update story points of a task.
Parameters:
taskKey: Task key (required)storyPoints: Story points value (required)
Update task fields including title, description, dates, and story points.
Parameters:
taskKey: Task key (required)title: Task title/summary (optional)description: Task description (optional)startDate: Start date YYYY-MM-DD (optional)dueDate: Due date YYYY-MM-DD (optional)storyPoints: Story points value (optional)
Example:
{
"taskKey": "URC-123",
"title": "Updated task title",
"description": "Updated description",
"storyPoints": 8
}Get detailed information about a specific task including all subtasks.
Parameters:
taskKey: Task key (required)
Example:
{
"taskKey": "URC-123"
}Create a new subtask for an existing parent task.
Parameters:
parentTaskKey: Parent task key (required)summary: Subtask title (required)description: Subtask description (optional)storyPoints: Story points (optional)startDate: Start date YYYY-MM-DD (optional)dueDate: Due date YYYY-MM-DD (optional)
Example:
{
"parentTaskKey": "URC-123",
"summary": "Implement API endpoint",
"storyPoints": 3,
"dueDate": "2025-01-20"
}Calculate total monthly hours based on Story Points and working days.
Parameters:
includeCompleted: Include completed tasks (default: true)
Example:
{
"includeCompleted": true
}Features:
- Calculates hours distribution across months
- Excludes weekends and Vietnamese holidays
- Handles tasks spanning multiple months
- Provides detailed breakdown per task
Calculates daily hours intelligently:
- Formula:
Daily Hours = (Story Points Γ 2) Γ· Working Days - Working Days: Monday-Friday, excluding Vietnamese holidays
- Story Points Logic: Excludes parent tasks with subtasks to avoid double counting
Example:
- Task: 5 story points
- Duration: 5 working days
- Daily Hours: (5 Γ 2) Γ· 5 = 2 hours/day
Calculates monthly hours distribution:
- Formula:
Monthly Hours = (Total Hours Γ· Total Working Days) Γ Working Days in Month - Cross-Month Tasks: Automatically calculates portion for current month
- Working Days: Monday-Friday, excluding Vietnamese holidays
- Completed Tasks: Optionally include/exclude
Example:
- Task: 10 story points, spans 20 working days
- Total Hours: 10 Γ 2 = 20 hours
- Current month has 10 working days for this task
- Monthly Hours: (20 Γ· 20) Γ 10 = 10 hours
# Run with auto-reload
npm run dev
# Lint code
npm run lint
# Fix lint issues
npm run lint:fixContributions are welcome! Please feel free to submit a Pull Request.
If you encounter any issues or have questions:
- Open an issue
- Check the MCP documentation
dongtran β¨
MIT
Made with β€οΈ to make your work life easier!