Atlassian Cloud MCP

Use this integration to connect securely with an Atlassian Cloud Model Context Protocol (MCP) server and access its tools in real time.

Case Management · Atlassian Cloud MCP MCP

Details

IDAtlassian Cloud MCP
ProviderAtlassian
CategoryCase Management
From Version8.13.0
Docker Imagedemisto/mcp:1.0.0.10120494
Supported ModulesAgentix Cortex Cloud Cloud Runtime Security Cloud Posture Security XSIAM EDR

Connection settings

Parameter Name Type Required Default
Authorization code auth_code Credentials No

Commands (4)

An MCP server publishes no fixed command set: list-tools and call-tool are the protocol plumbing, and the tools they reach are discovered from the remote server when the instance connects. The pack cannot name them ahead of time, so neither can this page.

  • atlassian-cloud-mcp-auth-test

    Test the authentication configuration with the MCP server.

  • atlassian-cloud-mcp-generate-login-url

    Generate an authentication login URL.

  • call-tool

    Calls a specific tool on the MCP server with optional input parameters.

  • list-tools

    Retrieves a list of available tools in the Atlassian Cloud MCP server.

import demistomock as demisto
from CommonServerPython import *
from MCPApiModule import *

import asyncio


from urllib.parse import unquote


ATLASSIAN_BASE_URL = "https://mcp.atlassian.com/v1/mcp"
ATLASSIAN_REDIRECT_URI = "http://127.0.0.1:8000/callback"
ATLASSIAN_AUTH_TYPE = AuthMethods.DYNAMIC_CLIENT_REGISTRATION.value
COMMAND_PREFIX = "atlassian-cloud-mcp"
SERVER_NAME = "Atlassian Cloud MCP"


async def main() -> None:  # pragma: no cover
    params = demisto.params()
    args = demisto.args()
    command = demisto.command()

    client = None
    try:
        auth_code = unquote(params.get("auth_code", {}).get("password") or "")

        client = Client(
            base_url=ATLASSIAN_BASE_URL,
            command_prefix=COMMAND_PREFIX,
            auth_type=ATLASSIAN_AUTH_TYPE,
            auth_code=auth_code,
            redirect_uri=ATLASSIAN_REDIRECT_URI,
        )
        demisto.debug(f"Command being called is {command}")

        if command == "test-module":
            raise DemistoException(
                "\nTest module is unavailable for this integration. "
                f"Please use the **!{COMMAND_PREFIX}-auth-test** command to test "
                "connectivity after setting the Authorization Code.",
            )

        elif command == "list-tools":
            result = await client.list_tools(SERVER_NAME)
            return_results(result)

        elif command == "call-tool":
            result = await client.call_tool(args["name"], args.get("arguments", ""))
            return_results(result)

        elif command == f"{COMMAND_PREFIX}-auth-test":
            result = await client.test_connection(auth_test=True)
            return_results(result)

        elif command == f"{COMMAND_PREFIX}-generate-login-url":
            result = await generate_login_url(
                client._oauth_handler, auth_type=ATLASSIAN_AUTH_TYPE, redirect_uri=ATLASSIAN_REDIRECT_URI
            )
            return_results(result)

        else:
            raise NotImplementedError(f"Command {command} is not implemented")

    except BaseException as eg:
        root_msg = extract_root_error_message(eg)
        return_error(f"Failed to execute {command} command.\nError:\n{root_msg}")

    finally:
        if client:
            demisto.debug(f"Closing client connection for {command}")
            await client.close()


""" ENTRY POINT """

if __name__ in ("__main__", "__builtin__", "builtins"):
    asyncio.run(main())