This example demonstrates how to integrate Atlassian Jira and Confluence MCP servers into Oplink workflows. The demo includes workflows for common Jira and Confluence operations.
The Atlassian integration combines:
The Atlassian MCP server runs as a Docker container. Ensure Docker is installed and running.
You'll need separate tokens for Jira and Confluence if you use different accounts, or one token if using the same account.
Create a .env file alongside servers.json in examples/atlassian-demo/.mcp-workflows/:
# Jira Cloud (option A)
JIRA_URL=https://your-company.atlassian.net
JIRA_USERNAME=your.email@company.com
JIRA_API_TOKEN=your_cloud_api_token
# Jira Server/Data Center (option B)
# JIRA_URL=https://jira.your-company.internal
# JIRA_PERSONAL_TOKEN=your_dc_pat
# JIRA_SSL_VERIFY=false
# Confluence Cloud (option A)
CONFLUENCE_URL=https://your-company.atlassian.net/wiki
CONFLUENCE_USERNAME=your.email@company.com
CONFLUENCE_API_TOKEN=your_confluence_cloud_token
# Confluence Server/Data Center (option B)
# CONFLUENCE_URL=https://confluence.your-company.internal
# CONFLUENCE_PERSONAL_TOKEN=your_dc_pat
# CONFLUENCE_SSL_VERIFY=false
# Optional: Filter by project keys (comma-separated)
# JIRA_PROJECTS_FILTER=PROJ,DEV,SUPPORT
# Optional: Filter by Confluence space keys (comma-separated)
# CONFLUENCE_SPACES_FILTER=DEV,TEAM,DOC
Where to add keys:
.env file: Copy .env.example to .mcp-workflows/.env (note the location)--config examples/atlassian-demo/.mcp-workflows auto‑loads .env from that folderChoose the block that matches your deployment.
Cloud (email + API token):
{
"servers": {
"atlassian": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e", "JIRA_URL",
"-e", "JIRA_USERNAME",
"-e", "JIRA_API_TOKEN",
"-e", "CONFLUENCE_URL",
"-e", "CONFLUENCE_USERNAME",
"-e", "CONFLUENCE_API_TOKEN",
"ghcr.io/sooperset/mcp-atlassian:latest"
],
"env": {
"JIRA_URL": "${JIRA_URL}",
"JIRA_USERNAME": "${JIRA_USERNAME}",
"JIRA_API_TOKEN": "${JIRA_API_TOKEN}",
"CONFLUENCE_URL": "${CONFLUENCE_URL}",
"CONFLUENCE_USERNAME": "${CONFLUENCE_USERNAME}",
"CONFLUENCE_API_TOKEN": "${CONFLUENCE_API_TOKEN}"
}
}
}
}
Server/Data Center (personal token):
{
"servers": {
"atlassian": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e", "JIRA_URL",
"-e", "JIRA_PERSONAL_TOKEN",
"-e", "JIRA_SSL_VERIFY",
"-e", "CONFLUENCE_URL",
"-e", "CONFLUENCE_PERSONAL_TOKEN",
"-e", "CONFLUENCE_SSL_VERIFY",
"ghcr.io/sooperset/mcp-atlassian:latest"
],
"env": {
"JIRA_URL": "${JIRA_URL}",
"JIRA_PERSONAL_TOKEN": "${JIRA_PERSONAL_TOKEN:-}",
"JIRA_SSL_VERIFY": "${JIRA_SSL_VERIFY:-false}",
"CONFLUENCE_URL": "${CONFLUENCE_URL}",
"CONFLUENCE_PERSONAL_TOKEN": "${CONFLUENCE_PERSONAL_TOKEN:-}",
"CONFLUENCE_SSL_VERIFY": "${CONFLUENCE_SSL_VERIFY:-false}"
}
}
}
}
These workflows expose all tools from the Atlassian MCP server:
atlassian_helper: Access all Jira and Confluence toolsjira_helper: Access Jira tools onlyconfluence_helper: Access Confluence tools onlyUsage:
describe_tools({ "workflow": "jira_helper" })
jira_helper({
"tool": "jira_search",
"args": {
"jql": "assignee = currentUser() AND status = 'In Progress'"
}
})
These workflows provide convenient wrappers for common Jira and Confluence operations:
list_my_issuesList issues assigned to you with compact output:
list_my_issues({
"project": "PROJ",
"status": "In Progress",
"max_results": 20
})
search_issues_compactSearch issues with JQL and get compact results:
search_issues_compact({
"jql": "project = PROJ AND created >= -7d ORDER BY updated DESC",
"max_results": 50
})
get_issue_summaryGet a concise summary of a specific issue:
get_issue_summary({
"issue_key": "PROJ-123"
})
Returns only: key, summary, description (text only), status, priority, assignee, dates, labels, and URL.
create_issue_from_notesCreate a Jira issue from meeting notes or text:
create_issue_from_notes({
"project_key": "PROJ",
"summary": "Fix authentication bug",
"description": "Users cannot log in after password reset",
"issue_type": "Bug",
"priority": "High"
})
update_issue_statusTransition an issue to a new status:
update_issue_status({
"issue_key": "PROJ-123",
"status": "In Progress"
})
search_confluence_pagesSearch Confluence pages with compact output:
search_confluence_pages({
"query": "OKR guide",
"space_key": "TEAM",
"limit": 20
})
get_confluence_page_contentGet page content with HTML stripped and formatted:
get_confluence_page_content({
"page_id": "123456789"
})
examples/atlassian-demo/.env (recommended; auto‑loaded), orexport $(cat examples/atlassian-demo/.env | xargs)pnpm -r --filter ./packages/oplink dev -- --config examples/atlassian-demo/.mcp-workflows
describe_tools to discover available toolslist_my_issues({
"status": "In Progress",
"max_results": 10
})
get_issue_summary({
"issue_key": "PROJ-123"
})
create_issue_from_notes({
"project_key": "PROJ",
"summary": "Implement user authentication",
"description": "From sprint planning: Need to add OAuth2 support",
"issue_type": "Story",
"priority": "High"
})
search_confluence_pages({
"query": "deployment process",
"space_key": "DEV"
})
get_confluence_page_content({
"page_id": "123456789"
})
.env (or are exported in your shell). Oplink auto‑loads .env from the example config directory.describe_tools to verify the exact tool names exposed by the server.env files to version controlError calling tool 'search' with ${JIRA_URL} literal, ensure .env is inside .mcp-workflows/ and DC variables are set when using Server/Data Center.JIRA_PROJECTS_FILTER and CONFLUENCE_SPACES_FILTER to limit accessREAD_ONLY_MODE=true in your environment to disable write operationsENABLED_TOOLS environment variable to restrict which tools are available