A high-performance Go implementation of the Model Context Protocol (MCP) server for Atlassian products (Jira, Confluence, and Opsgenie). This server enables AI assistants like Claude to seamlessly interact with your Atlassian instances.
- 65 Tools Total: 29 Jira tools + 11 Confluence tools + 25 Opsgenie tools
- Multi-Platform Support: Cloud and Server/Data Center deployments
- Multiple Auth Methods: API Token, Personal Access Token, Bearer Token (BYO OAuth)
- Production Ready: Built-in retry logic, proxy support, SSL verification
- Flexible Configuration: Environment variables, .env files, CLI flags
- Security: Read-only mode, tool filtering, credential masking
- High Performance: Native Go implementation with efficient HTTP client
Product | Deployment | Status |
---|---|---|
Jira | Cloud | ✅ Supported |
Jira | Server/Data Center (8.14+) | ✅ Supported |
Confluence | Cloud | ✅ Supported |
Confluence | Server/Data Center (6.0+) | ✅ Supported |
Opsgenie | Cloud | ✅ Supported |
brew tap codeownersnet/atlas
brew install atlas-mcp
Download the latest release for your platform from GitHub Releases.
go install github.com/codeownersnet/atlas/cmd/atlas-mcp@latest
git clone https://github.com/codeownersnet/atlas
cd atlas
go build -o atlas-mcp ./cmd/atlas-mcp
- Go to https://id.atlassian.com/manage-profile/security/api-tokens
- Click "Create API token"
- Copy the token immediately
- Use in configuration below
- Go to Opsgenie → Settings → API Key Management
- Create a new API key
- Copy the key immediately
- Use in configuration below
- Go to your profile → Personal Access Tokens
- Create a new token
- Copy the token immediately
- Use in configuration below
If you manage OAuth tokens externally, you'll need your OAuth access token and cloud ID.
Note: You are responsible for token refresh and management.
Create a .env
file with your credentials from step 2:
# For Jira Cloud
JIRA_URL=https://your-domain.atlassian.net
JIRA_USERNAME=your.email@example.com
JIRA_API_TOKEN=your_jira_api_token
# For Confluence Cloud
CONFLUENCE_URL=https://your-domain.atlassian.net/wiki
CONFLUENCE_USERNAME=your.email@example.com
CONFLUENCE_API_TOKEN=your_confluence_api_token
# For Opsgenie
OPSGENIE_API_KEY=your_opsgenie_api_key
Server/Data Center Configuration
# For Jira Server/Data Center
JIRA_URL=https://jira.your-company.com
JIRA_PERSONAL_TOKEN=your_personal_access_token
JIRA_SSL_VERIFY=true
# For Confluence Server/Data Center
CONFLUENCE_URL=https://confluence.your-company.com
CONFLUENCE_PERSONAL_TOKEN=your_personal_access_token
CONFLUENCE_SSL_VERIFY=true
# For Opsgenie (Cloud only)
OPSGENIE_API_KEY=your_opsgenie_api_key
Bearer Token (BYO OAuth) Configuration
# Provide your own OAuth access token
ATLASSIAN_OAUTH_ACCESS_TOKEN=your_oauth_access_token
ATLASSIAN_OAUTH_CLOUD_ID=your_cloud_id
./atlas-mcp
Add to ~/Library/Application Support/Claude/claude_desktop_config.json
:
{
"mcpServers": {
"atlas": {
"command": "/path/to/atlas-mcp",
"args": [],
"env": {
"JIRA_URL": "https://your-domain.atlassian.net",
"JIRA_USERNAME": "your.email@example.com",
"JIRA_API_TOKEN": "your_api_token",
"CONFLUENCE_URL": "https://your-domain.atlassian.net/wiki",
"CONFLUENCE_USERNAME": "your.email@example.com",
"CONFLUENCE_API_TOKEN": "your_api_token",
"OPSGENIE_API_KEY": "your_opsgenie_api_key"
}
}
}
}
For VS Code integration, see the detailed setup guide and configuration samples:
- Setup Guide: docs/vscode/setup.md
- Configuration Samples: docs/vscode/samples/ directory
Open Settings → MCP → Add new global MCP server and configure similarly.
jira_get_issue
- Get issue details with field filteringjira_search
- Search issues using JQLjira_search_fields
- Search for field names (including custom fields)jira_get_all_projects
- List all accessible projectsjira_get_project_issues
- Get all issues in a projectjira_get_project_versions
- Get fix versions for a projectjira_get_transitions
- Get available status transitionsjira_get_worklog
- Get worklog entriesjira_get_agile_boards
- Get agile boards (Scrum/Kanban)jira_get_board_issues
- Get issues on a boardjira_get_sprints_from_board
- Get sprints from a boardjira_get_sprint_issues
- Get issues in a sprintjira_get_issue_link_types
- Get available link typesjira_get_user_profile
- Get user information
jira_create_issue
- Create new issuesjira_update_issue
- Update existing issuesjira_delete_issue
- Delete issuesjira_add_comment
- Add comments to issuesjira_transition_issue
- Change issue statusjira_add_worklog
- Log time spentjira_link_to_epic
- Link issues to Epicsjira_create_issue_link
- Link issues togetherjira_create_remote_issue_link
- Create external linksjira_remove_issue_link
- Remove issue linksjira_create_sprint
- Create new sprintsjira_update_sprint
- Update sprint detailsjira_create_version
- Create fix versionsjira_batch_create_issues
- Create multiple issues at oncejira_batch_create_versions
- Create multiple versions at once
confluence_search
- Search content using CQL or textconfluence_get_page
- Get page content by ID or title+spaceconfluence_get_page_children
- Get child pagesconfluence_get_comments
- Get page commentsconfluence_get_labels
- Get page labelsconfluence_search_user
- Search for users
confluence_create_page
- Create new pagesconfluence_update_page
- Update existing pagesconfluence_delete_page
- Delete pagesconfluence_add_label
- Add labels to pagesconfluence_add_comment
- Add comments to pages
opsgenie_get_alert
- Get alert detailsopsgenie_list_alerts
- List alerts with filteringopsgenie_count_alerts
- Count alerts matching queryopsgenie_get_request_status
- Get async request statusopsgenie_get_incident
- Get incident detailsopsgenie_list_incidents
- List incidents with filteringopsgenie_get_schedule
- Get schedule detailsopsgenie_list_schedules
- List all schedulesopsgenie_get_schedule_timeline
- Get schedule timelineopsgenie_get_on_calls
- Get current on-call informationopsgenie_get_team
- Get team detailsopsgenie_list_teams
- List all teamsopsgenie_get_user
- Get user information
opsgenie_create_alert
- Create new alertsopsgenie_close_alert
- Close alertsopsgenie_acknowledge_alert
- Acknowledge alertsopsgenie_snooze_alert
- Snooze alertsopsgenie_escalate_alert
- Escalate alertsopsgenie_assign_alert
- Assign alerts to users/teamsopsgenie_add_note_to_alert
- Add notes to alertsopsgenie_add_tags_to_alert
- Add tags to alertsopsgenie_create_incident
- Create new incidentsopsgenie_close_incident
- Close incidentsopsgenie_add_note_to_incident
- Add notes to incidentsopsgenie_add_responder_to_incident
- Add responders to incidents
# Run in read-only mode (disables all write operations)
READ_ONLY_MODE=true
# Only enable specific tools (comma-separated)
ENABLED_TOOLS=jira_get_issue,jira_search,confluence_search,opsgenie_list_alerts
# Filter to specific projects/spaces
JIRA_PROJECTS_FILTER=PROJ1,PROJ2
CONFLUENCE_SPACES_FILTER=SPACE1,SPACE2
# Disable specific services
OPSGENIE_ENABLED=false
# Enable verbose logging
MCP_VERBOSE=true
# Enable debug logging
MCP_VERY_VERBOSE=true
# Log to stdout instead of stderr
MCP_LOGGING_STDOUT=true
# Global proxy settings
HTTP_PROXY=http://proxy.example.com:8080
HTTPS_PROXY=http://proxy.example.com:8080
NO_PROXY=localhost,127.0.0.1
# Service-specific proxy (overrides global)
JIRA_HTTP_PROXY=http://jira-proxy.example.com:8080
CONFLUENCE_HTTPS_PROXY=http://confluence-proxy.example.com:8080
OPSGENIE_HTTP_PROXY=http://opsgenie-proxy.example.com:8080
# Add custom headers to API requests
JIRA_CUSTOM_HEADERS=X-Custom-Header=value1,X-Another=value2
CONFLUENCE_CUSTOM_HEADERS=X-Custom-Header=value1
OPSGENIE_CUSTOM_HEADERS=X-Custom-Header=value1
User: "Update Jira from our meeting notes"
AI: [Creates/updates issues based on meeting discussion]
User: "Find our OKR guide in Confluence and summarize it"
AI: [Searches Confluence, retrieves content, provides summary]
User: "Show me all urgent bugs in PROJ assigned to me"
AI: [Uses JQL search to filter and display relevant issues]
User: "Create a tech design doc for the new feature"
AI: [Creates structured Confluence page with proper formatting]
User: "Show me all critical alerts in Opsgenie and create an incident"
AI: [Lists critical alerts and creates incident with proper responders]
- Go 1.25 or higher
- Access to Jira, Confluence, and/or Opsgenie instance
- API tokens or Personal Access Tokens
The project includes a comprehensive Makefile for common development tasks:
# See all available commands
make help
# Build the binary
make build
# Run tests
make test
# Run tests with coverage report
make test-coverage
# Run linter (requires golangci-lint)
make lint
# Format code
make fmt
# Run all quality checks
make check
# Clean build artifacts
make clean
# Install to $GOPATH/bin
make install
# Build for all platforms
make build-all
# Run in development mode with verbose logging
make dev
# Show project info and statistics
make info
If you prefer not to use Make:
# Build binary
go build -o atlas-mcp ./cmd/atlas-mcp
# Run tests
go test ./...
# Run tests with coverage
go test -cover ./...
# Run linter (requires golangci-lint)
golangci-lint run
# Install development tools
make tools
atlas/
├── cmd/atlas-mcp/ # Main application entry point
├── internal/
│ ├── auth/ # Authentication providers
│ ├── client/ # HTTP client with retry logic
│ ├── config/ # Configuration management
│ ├── mcp/ # MCP protocol implementation
│ └── tools/ # Tool implementations
│ ├── jira/ # Jira tools
│ ├── confluence/ # Confluence tools
│ └── opsgenie/ # Opsgenie tools
├── pkg/atlassian/ # Atlassian API clients
│ ├── jira/ # Jira API client
│ ├── confluence/ # Confluence API client
│ └── opsgenie/ # Opsgenie API client
└── docs/ # Documentation
Cloud:
- Verify you're using an API token, not your password
- Check the token hasn't expired
- Ensure your email address is correct
Server/Data Center:
- Verify your Personal Access Token is valid
- Check token hasn't expired
- Ensure you have necessary permissions
For self-signed certificates on Server/Data Center:
JIRA_SSL_VERIFY=false
CONFLUENCE_SSL_VERIFY=false
Check proxy settings if behind corporate firewall:
HTTP_PROXY=http://proxy:8080
HTTPS_PROXY=http://proxy:8080
If a tool isn't showing up:
- Check service is configured (Jira, Confluence, or Opsgenie)
- Verify service is enabled (e.g.,
OPSGENIE_ENABLED=true
) - Verify
ENABLED_TOOLS
isn't filtering it out - Check if
READ_ONLY_MODE
is blocking write tools
- Never commit API tokens or credentials to version control
- Use
.env
files for local development (already in.gitignore
) - Enable
READ_ONLY_MODE
for untrusted environments - Use tool filtering to limit exposed functionality
- Keep dependencies up to date
- Homebrew formula (automated with GoReleaser)
- HTTP transports (SSE, streamable-http)
- Multi-user support (per-request auth)
- Content conversion (Markdown ↔ Confluence Storage format)
- Attachment handling improvements
- Metrics and observability
- Docker images
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes with tests
- Submit a pull request
MIT License - see LICENSE file for details.
This project is inspired by the Python mcp-atlassian implementation. While this is a complete rewrite in Go, we acknowledge the original project's design and feature set.
Made with ❤️ using Go and the Model Context Protocol