Jaroslav-Loskot/mcp_jira_server
If you are the rightful owner of mcp_jira_server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
MCP Jira Server is a lightweight FastAPI-based server designed to connect to Jira accounts using a Model Context Protocol (MCP) interface.
π§ MCP Jira Server
A powerful, modular, and extendable FastAPI-based server for interacting with Jira using a Model Context Protocol (MCP). It enables intelligent querying, retrieval, and modification of Jira tickets using structured or natural language inputs. Built with LLM integration in mind (Claude via Amazon Bedrock).
π Features
- π Query Jira issues with structured filters or natural language.
- π Get full ticket details including comments, status, and assignee.
- ποΈ Fetch project-level metadata: statuses, priorities, issue types.
- π Retrieve and update "Project Charter" custom fields via LLM-assisted interpretation.
- βοΈ Automatically map user instructions to Jira field schema and values.
- π¦ Designed to run in Docker and be consumed as an API endpoint.
π Project Structure
βββ main.py # Entry point for FastAPI application
βββ services/ # Business logic and service layer
β βββ field_mapping.py # Mapping from human field names to Jira customfield IDs
β βββ field_formatting.py # Field schema-aware value formatting
β βββ jira_metadata_service.py
β βββ project_charter_service.py
β βββ get_custom_fields.py
βββ utils/ # Bedrock + embeddings helpers
β βββ bedrock_wrapper.py
β βββ generate_field_embeddings.py
β βββ field_embeddings.json
βββ test/ # Integration test scripts + REST Client requests
βββ .env # Jira and AWS credentials
βββ Dockerfile # Container image setup
βββ docker-compose.yml # Local dev environment
βββ requirements.txt
βοΈ Setup
1. Clone and configure
git clone https://github.com/your-org/mcp-jira-server.git
cd mcp-jira-server
cp .env.example .env
Populate .env
with:
JIRA_BASE_URL=https://your-domain.atlassian.net
JIRA_EMAIL=your@email.com
JIRA_API_TOKEN=your-jira-api-token
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
AWS_REGION=...
BEDROCK_MODEL_ID=eu.anthropic.claude-3-7-sonnet-20250219-v1:0
BEDROCK_INFERENCE_CONFIG_ARN=...
2. Run locally with Docker
docker-compose up --build
Once started:
- API root: http://localhost:8000
- Health check: http://localhost:8000/health
π€ Supported MCP Intents
get_jira_issues
Retrieve issues with flexible filtering:
{
"user": "jaroslav",
"intent": "get_jira_issues",
"parameters": {
"project": ["AFS"],
"priority": ["High"],
"created_after": "-1w",
"only_count": false
}
}
get_ticket_details
Get detailed ticket info:
{
"user": "jaroslav",
"intent": "get_ticket_details",
"parameters": {
"ticket": "AFS-123"
}
}
get_jira_projects
List all accessible projects:
{
"user": "jaroslav",
"intent": "get_jira_projects",
"parameters": {}
}
get_project_metadata
Fetch metadata (statuses, priorities, issue types):
{
"user": "jaroslav",
"intent": "get_project_metadata",
"parameters": {
"project": "AFS"
}
}
get_project_charter
Summarize key custom fields from a Jira ticket:
{
"user": "jaroslav",
"intent": "get_project_charter",
"parameters": {
"ticket": "DELPROJ-2443"
}
}
update_project_charter
Update a Jira ticketβs custom field using natural language:
{
"user": "jaroslav",
"intent": "update_project_charter",
"parameters": {
"ticket": "DELTP-7867",
"update_instruction": "Remove the project start date"
}
}
π§ͺ Testing
Use the REST Client VS Code extension and .rest
files from /test/
:
Example:
POST http://localhost:8000/jira/query
Content-Type: application/json
{
"user": "jaroslav",
"intent": "get_ticket_details",
"parameters": {
"ticket": "AFS-123"
}
}
π§ LLM + Embedding
- Claude is used via Amazon Bedrock for interpreting update instructions.
- Titan embeddings are used for semantic search and field similarity.
- Run
python utils/generate_field_embeddings.py
to regeneratefield_embeddings.json
.
π License
MIT (or internal enterprise use only).