MCP server that gives Claude Code tools for Jira, GitHub, and dbt CI on Databricks. Also includes a standalone CLI for autonomous ticket processing.
jirade exposes 13 tools via the Model Context Protocol that let Claude Code:
- Search and manage Jira tickets -- query with JQL, read details, add comments, transition status
- Monitor GitHub PRs -- list PRs, check CI status, watch until checks pass
- Run dbt CI on Databricks -- build models in isolated schemas, compare against production using metadata-only queries, post diff reports to PRs
- Analyze dbt deprecation impact -- find downstream models affected by deprecating a table or column
No raw data is ever exposed. The Databricks client enforces a strict SQL whitelist -- only aggregated metadata queries (counts, schemas, NULLs, distributions) are allowed.
# From source (recommended for development)
git clone https://github.com/djayatillake/jirade.git
cd jirade
poetry install
# Or via pipx
pipx install git+https://github.com/djayatillake/jirade.gitAdd jirade as an MCP server in your Claude Code settings (~/.claude/settings.json or project .claude/settings.json):
{
"mcpServers": {
"jirade": {
"command": "jirade-mcp",
"env": {}
}
}
}If installed via poetry (not pipx), use the full path:
{
"mcpServers": {
"jirade": {
"command": "/path/to/jirade/.venv/bin/jirade-mcp",
"env": {}
}
}
}Required for Jira tools:
JIRADE_JIRA_OAUTH_CLIENT_ID="your-client-id"
JIRADE_JIRA_OAUTH_CLIENT_SECRET="your-client-secret"Required for GitHub tools:
# Option 1: gh CLI (recommended -- auto-detected, no env var needed)
gh auth login
# Option 2: manual token
JIRADE_GITHUB_TOKEN="ghp_..."Required for dbt CI tools:
JIRADE_DATABRICKS_HOST="dbc-xxxxx.cloud.databricks.com"
JIRADE_DATABRICKS_HTTP_PATH="/sql/1.0/warehouses/abc123"
JIRADE_DATABRICKS_AUTH_TYPE="oauth" # default, uses Databricks CLI creds
JIRADE_DATABRICKS_CI_CATALOG="development_yourname_metadata" # catalog for CI schemasOptional:
| Variable | Default | Description |
|---|---|---|
JIRADE_DATABRICKS_TOKEN |
-- | Databricks PAT (if auth_type=token) |
JIRADE_DATABRICKS_CATALOG |
-- | Default catalog for production lookups |
JIRADE_DBT_EVENT_TIME_LOOKBACK_DAYS |
3 |
Days of data for incremental CI builds |
JIRADE_DBT_CI_SCHEMA_PREFIX |
jirade_ci |
Prefix for CI schema names |
JIRADE_LOG_LEVEL |
INFO |
Logging level |
ANTHROPIC_API_KEY |
-- | Required only for CLI agent mode |
JIRADE_CLAUDE_MODEL |
claude-opus-4-5-20251101 |
Model for CLI agent mode |
JIRADE_WORKSPACE_DIR |
/tmp/jirade |
Where repos are cloned (CLI mode) |
jirade auth login # all services
jirade auth login --service=jira # just Jira (opens browser for OAuth)
jirade auth login --service=databricks # validate Databricks connection
jirade health # verify everything worksThese tools are available to Claude Code when jirade is configured as an MCP server.
| Tool | Description |
|---|---|
jirade_search_jira |
Search issues with JQL (e.g., project = PROJ AND status = "In Progress") |
jirade_get_issue |
Get full issue details -- description, status, comments, transitions |
jirade_add_comment |
Add a comment to an issue |
jirade_transition_issue |
Change issue status (e.g., move to "Done"). Auto-tags with jirade label |
| Tool | Description |
|---|---|
jirade_list_prs |
List PRs for a repository |
jirade_get_pr |
Get PR details including reviews and comments |
jirade_get_ci_status |
Get CI check status for a PR |
jirade_watch_pr |
Poll CI status until all checks pass or fail (default: 30s interval, 30min timeout) |
| Tool | Description |
|---|---|
jirade_run_dbt_ci |
Build models on Databricks in isolated CI schemas, compare against prod, post report to PR |
jirade_analyze_deprecation |
Find downstream models affected by deprecating a table or column |
jirade_cleanup_ci |
Drop CI schemas after a PR is merged |
jirade_run_dbt_ci is the main CI tool. When invoked:
- Checks out the PR branch
- Detects changed models and seeds from the git diff
- Loads changed seeds via
dbt seed - Builds modified models +1 dependents in isolated schemas (
jirade_ci_{pr_number}_{catalog}_{schema}) - Uses
--defer --state --favor-stateso upstream models resolve to production - Compares all built models (changed + downstream) against production using metadata queries
- For incremental/microbatch models with
event_time, date-filters comparisons to the CI lookback window - Skips comparison for downstream models whose upstream is time-limited (CI data inherently incomplete)
- Posts a diff report to the PR
dbt run and dbt test are separate steps so test failures don't skip downstream model builds. If some models fail but others succeed, you still get a report with a "Build Failures" section.
CI tables persist after the run for manual inspection. Use jirade_cleanup_ci after the PR is merged.
The DatabricksMetadataClient enforces a strict regex whitelist on every SQL query:
DESCRIBE TABLE,SHOW COLUMNS-- column names and typesSELECT COUNT(*)-- row counts (with optional WHERE for date filtering)SELECT COUNT(*) WHERE col IS NULL-- null countsSELECT COUNT(DISTINCT col)-- cardinalitySELECT col, COUNT(*) GROUP BY col-- value distributionsSELECT MIN/MAX(col)-- numeric rangesCREATE/DROP SCHEMA,DROP TABLE-- CI lifecycle
Everything else is rejected. No SELECT *, no raw rows, no freeform SQL.
Your dbt project needs generate_schema_name and generate_database_name macros that check the DBT_JIRADE_CI environment variable to redirect models into CI schemas.
jirade also has a standalone CLI for autonomous ticket processing, powered by Claude.
# Process a specific Jira ticket (analyzes, implements, creates PR)
jirade process-ticket PROJ-123 --config .jirade.yaml
# Process multiple tickets by status
jirade process --config .jirade.yaml --status="Ready for Agent" --limit=5
# Watch mode -- poll for tickets and auto-close when PRs merge
jirade watch --config .jirade.yaml --interval=60# Start a chat session with Claude that has access to Jira, GitHub, and Git tools
jirade chat --config .jirade.yamljirade list-tickets --config .jirade.yaml # List Jira tickets
jirade list-tickets --config .jirade.yaml -i # Interactive selection
jirade list-prs --config .jirade.yaml # List GitHub PRs
jirade check-pr 123 --config .jirade.yaml # Check PR status
jirade fix-ci 123 --config .jirade.yaml # Auto-fix CI failures
jirade health # Test all connections
jirade auth status # Show auth status
jirade config validate .jirade.yaml # Validate config
jirade env check --config .jirade.yaml # Check environment
jirade learn status # Show pending learningsThe CLI requires a .jirade.yaml config file. Generate one with:
jirade init- Go to Atlassian Developer Console
- Create an OAuth 2.0 integration
- Add Jira API permissions:
read:jira-work,write:jira-work,read:jira-user,offline_access - Set callback URL to
http://localhost:8888/callback - Copy Client ID and Secret to environment variables
- Run
jirade auth login --service=jira
MIT