Overview

This server implements the Model Context Protocol (MCP) for Confluence integration. This version addresses and fixes bugs found in the existing Confluence server, providing a more stable and reliable experience. It provides functionalities to execute CQL queries and retrieve page content from Confluence.

This server follows the MCP client-server architecture:

  • Acts as an MCP server providing Confluence functionalities
  • Connects to Confluence as a data source
  • Communicates with MCP clients through a standardized protocol

How to use

smithery badge

confluence-mcp MCP server

Using with Claude App, Cline, Roo Code

When using with the Claude App, you need to set up your API key and URLs directly.

{
  "mcpServers": {
    "Confluence communication server": {
      "command": "npx",
      "args": ["-y", "@zereight/mcp-confluence"],
      "env": {
        "CONFLUENCE_URL": "https://XXXXXXXX.atlassian.net",
        "JIRA_URL": "https://XXXXXXXX.atlassian.net",
        "CONFLUENCE_API_MAIL": "Your email",
        "CONFLUENCE_API_KEY": "KEY_FROM: https://id.atlassian.com/manage-profile/security/api-tokens",
        "CONFLUENCE_IS_CLOUD": "true" // Set to "false" for Server/Data Center
      }
    }
  }
}

Using with Cursor

Installing via Smithery

To install Confluence communication server for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @zereight/confluence-mcp --client claude

When using with Cursor, you can set up environment variables and run the server as follows:

env [email protected] CONFLUENCE_API_KEY=your-key CONFLUENCE_URL=your-confluence-url JIRA_URL=your-jira-url npx -y @zereight/mcp-confluence
  • CONFLUENCE_API_MAIL: Your email address for the Confluence API.
  • CONFLUENCE_API_KEY: Your Confluence API key.
  • CONFLUENCE_URL: Your Confluence URL.
  • JIRA_URL: Your JIRA URL.
  • CONFLUENCE_IS_CLOUD: Determines Confluence version (Cloud or Server)
  • Default: true (Cloud version)
  • Set to 'false' explicitly for Server/Data Center version
  • Affects API endpoint paths:
    • Cloud: /wiki/rest/api
    • Server: /rest/api

Confluence Tools

  • execute_cql_search: Executes a CQL query on Confluence to search pages.

  • Description: Executes a CQL query on the Confluence instance to search for pages.

  • Input Schema:

    {
      "type": "object",
      "properties": {
        "cql": {
          "type": "string",
          "description": "CQL query string"
        },
        "limit": {
          "type": "integer",
          "description": "Number of results to return",
          "default": 10
        }
      },
      "required": ["cql"]
    }

  • get_page_content: Retrieves the content of a specific Confluence page.

  • Description: Gets the content of a Confluence page using the page ID.

  • Input Schema:

    {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "description": "Confluence Page ID"
        }
      },
      "required": ["pageId"]
    }

  • create_page: Creates a new Confluence page.

  • Description: Creates a new page in the specified Confluence space.

  • Input Schema:

    {
      "type": "object",
      "properties": {
        "spaceKey": {
          "type": "string",
          "description": "Space key where the page will be created"
        },
        "title": {
          "type": "string",
          "description": "Page title"
        },
        "content": {
          "type": "string",
          "description": "Page content in storage format"
        },
        "parentId": {
          "type": "string",
          "description": "Parent page ID (optional)"
        }
      },
      "required": ["spaceKey", "title", "content"]
    }

  • update_page: Updates an existing Confluence page.

  • Description: Updates the content of an existing Confluence page.
  • Input Schema:
    {
      "type": "object",
      "properties": {
        "pageId": {
          "type": "string",
          "description": "ID of the page to update"
        },
        "content": {
          "type": "string",
          "description": "New page content in storage format"
        },
        "title": {
          "type": "string",
          "description": "New page title (optional)"
        }
      },
      "required": ["pageId", "content"]
    }

Jira Tools

  • execute_jql_search: Executes a JQL query on Jira to search issues.

  • Description: Executes a JQL query on the Jira instance to search for issues.

  • Input Schema:

    {
      "type": "object",
      "properties": {
        "jql": {
          "type": "string",
          "description": "JQL query string"
        },
        "limit": {
          "type": "integer",
          "description": "Number of results to return",
          "default": 10
        }
      },
      "required": ["jql"]
    }

  • create_jira_issue: Creates a new Jira issue.

  • Description: Creates a new issue in the specified Jira project.

  • Input Schema:

    {
      "type": "object",
      "properties": {
        "project": {
          "type": "string",
          "description": "Project key"
        },
        "summary": {
          "type": "string",
          "description": "Issue summary"
        },
        "description": {
          "type": "string",
          "description": "Issue description"
        },
        "issuetype": {
          "type": "string",
          "description": "Issue type name"
        },
        "assignee": {
          "type": "string",
          "description": "Assignee account ID"
        },
        "priority": {
          "type": "string",
          "description": "Priority ID"
        }
      },
      "required": ["project", "summary", "issuetype"]
    }

  • update_jira_issue: Updates an existing Jira issue.

  • Description: Updates fields of an existing Jira issue.

  • Input Schema:

    {
      "type": "object",
      "properties": {
        "issueKey": {
          "type": "string",
          "description": "Issue key (e.g., PROJ-123)"
        },
        "summary": {
          "type": "string",
          "description": "New issue summary"
        },
        "description": {
          "type": "string",
          "description": "New issue description"
        },
        "assignee": {
          "type": "string",
          "description": "New assignee account ID"
        },
        "priority": {
          "type": "string",
          "description": "New priority ID"
        }
      },
      "required": ["issueKey"]
    }

  • transition_jira_issue: Changes the status of a Jira issue.

  • Description: Changes the status of a Jira issue using transition ID.

  • Input Schema:

    {
      "type": "object",
      "properties": {
        "issueKey": {
          "type": "string",
          "description": "Issue key (e.g. PROJ-123)"
        },
        "transitionId": {
          "type": "string",
          "description": "Transition ID to change the issue status"
        }
      },
      "required": ["issueKey", "transitionId"]
    }

  • get_board_sprints: Get all sprints from a Jira board.

  • Description: Retrieves all sprints from a specified Jira board.

  • Input Schema:

    {
      "type": "object",
      "properties": {
        "boardId": {
          "type": "string",
          "description": "Jira board ID"
        },
        "state": {
          "type": "string",
          "description": "Filter sprints by state (active, future, closed)",
          "enum": ["active", "future", "closed"]
        }
      },
      "required": ["boardId"]
    }

  • get_sprint_issues: Get all issues from a sprint.

  • Description: Retrieves all issues from a specified sprint.

  • Input Schema:

    {
      "type": "object",
      "properties": {
        "sprintId": {
          "type": "string",
          "description": "Sprint ID"
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of fields to return for each issue"
        }
      },
      "required": ["sprintId"]
    }

  • get_current_sprint: Get current active sprint from a board with its issues.

  • Description: Retrieves the current active sprint and its issues from a specified board.

  • Input Schema:

    {
      "type": "object",
      "properties": {
        "boardId": {
          "type": "string",
          "description": "Jira board ID"
        },
        "includeIssues": {
          "type": "boolean",
          "description": "Whether to include sprint issues in the response",
          "default": true
        }
      },
      "required": ["boardId"]
    }

  • get_epic_issues: Get all issues belonging to an epic.

  • Description: Retrieves all issues that belong to a specified epic.

  • Input Schema:

    {
      "type": "object",
      "properties": {
        "epicKey": {
          "type": "string",
          "description": "Epic issue key (e.g. CONNECT-1234)"
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of fields to return for each issue"
        }
      },
      "required": ["epicKey"]
    }

  • get_user_issues: Get all issues assigned to or reported by a specific user in a board.

  • Description: Retrieves all issues associated with a specific user in a board.

  • Input Schema:
    {
      "type": "object",
      "properties": {
        "boardId": {
          "type": "string",
          "description": "Jira board ID"
        },
        "username": {
          "type": "string",
          "description": "Username to search issues for"
        },
        "type": {
          "type": "string",
          "description": "Type of user association with issues",
          "enum": ["assignee", "reporter"],
          "default": "assignee"
        },
        "status": {
          "type": "string",
          "description": "Filter by issue status",
          "enum": ["open", "in_progress", "done", "all"],
          "default": "all"
        }
      },
      "required": ["boardId", "username"]
    }
[
  {
    "description": "Execute a CQL query on Confluence to search pages",
    "inputSchema": {
      "properties": {
        "cql": {
          "description": "CQL query string",
          "type": "string"
        },
        "limit": {
          "default": 10,
          "description": "Number of results to return",
          "type": "integer"
        }
      },
      "required": [
        "cql"
      ],
      "type": "object"
    },
    "name": "execute_cql_search"
  },
  {
    "description": "Get the content of a Confluence page",
    "inputSchema": {
      "properties": {
        "pageId": {
          "description": "Confluence Page ID",
          "type": "string"
        }
      },
      "required": [
        "pageId"
      ],
      "type": "object"
    },
    "name": "get_page_content"
  },
  {
    "description": "Create a new Confluence page",
    "inputSchema": {
      "properties": {
        "content": {
          "description": "Page content in storage format",
          "type": "string"
        },
        "parentId": {
          "description": "Parent page ID (optional)",
          "type": "string"
        },
        "spaceKey": {
          "description": "Space key where the page will be created",
          "type": "string"
        },
        "title": {
          "description": "Page title",
          "type": "string"
        }
      },
      "required": [
        "spaceKey",
        "title",
        "content"
      ],
      "type": "object"
    },
    "name": "create_page"
  },
  {
    "description": "Update an existing Confluence page",
    "inputSchema": {
      "properties": {
        "content": {
          "description": "New page content in storage format",
          "type": "string"
        },
        "pageId": {
          "description": "ID of the page to update",
          "type": "string"
        },
        "title": {
          "description": "New page title (optional)",
          "type": "string"
        }
      },
      "required": [
        "pageId",
        "content"
      ],
      "type": "object"
    },
    "name": "update_page"
  },
  {
    "description": "Execute a JQL query on Jira to search issues",
    "inputSchema": {
      "properties": {
        "jql": {
          "description": "JQL query string",
          "type": "string"
        },
        "limit": {
          "default": 10,
          "description": "Number of results to return",
          "type": "integer"
        }
      },
      "required": [
        "jql"
      ],
      "type": "object"
    },
    "name": "execute_jql_search"
  },
  {
    "description": "Create a new Jira issue",
    "inputSchema": {
      "properties": {
        "assignee": {
          "description": "Assignee account ID",
          "type": "string"
        },
        "description": {
          "description": "Issue description",
          "type": "string"
        },
        "issuetype": {
          "description": "Issue type name",
          "type": "string"
        },
        "priority": {
          "description": "Priority ID",
          "type": "string"
        },
        "project": {
          "description": "Project key",
          "type": "string"
        },
        "summary": {
          "description": "Issue summary",
          "type": "string"
        }
      },
      "required": [
        "project",
        "summary",
        "issuetype"
      ],
      "type": "object"
    },
    "name": "create_jira_issue"
  },
  {
    "description": "Update an existing Jira issue",
    "inputSchema": {
      "properties": {
        "assignee": {
          "description": "New assignee account ID",
          "type": "string"
        },
        "description": {
          "description": "New issue description",
          "type": "string"
        },
        "issueKey": {
          "description": "Issue key (e.g. PROJ-123)",
          "type": "string"
        },
        "priority": {
          "description": "New priority ID",
          "type": "string"
        },
        "summary": {
          "description": "New issue summary",
          "type": "string"
        }
      },
      "required": [
        "issueKey"
      ],
      "type": "object"
    },
    "name": "update_jira_issue"
  },
  {
    "description": "Change the status of a Jira issue",
    "inputSchema": {
      "properties": {
        "issueKey": {
          "description": "Issue key (e.g. PROJ-123)",
          "type": "string"
        },
        "transitionId": {
          "description": "Transition ID to change the issue status",
          "type": "string"
        }
      },
      "required": [
        "issueKey",
        "transitionId"
      ],
      "type": "object"
    },
    "name": "transition_jira_issue"
  },
  {
    "description": "Get all sprints from a Jira board",
    "inputSchema": {
      "properties": {
        "boardId": {
          "description": "Jira board ID",
          "type": "string"
        },
        "state": {
          "description": "Filter sprints by state (active, future, closed)",
          "enum": [
            "active",
            "future",
            "closed"
          ],
          "type": "string"
        }
      },
      "required": [
        "boardId"
      ],
      "type": "object"
    },
    "name": "get_board_sprints"
  },
  {
    "description": "Get all issues from a sprint",
    "inputSchema": {
      "properties": {
        "fields": {
          "description": "List of fields to return for each issue",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "sprintId": {
          "description": "Sprint ID",
          "type": "string"
        }
      },
      "required": [
        "sprintId"
      ],
      "type": "object"
    },
    "name": "get_sprint_issues"
  },
  {
    "description": "Get current active sprint from a board with its issues",
    "inputSchema": {
      "properties": {
        "boardId": {
          "description": "Jira board ID",
          "type": "string"
        },
        "includeIssues": {
          "default": true,
          "description": "Whether to include sprint issues in the response",
          "type": "boolean"
        }
      },
      "required": [
        "boardId"
      ],
      "type": "object"
    },
    "name": "get_current_sprint"
  },
  {
    "description": "Get all issues belonging to an epic",
    "inputSchema": {
      "properties": {
        "epicKey": {
          "description": "Epic issue key (e.g. CONNECT-1234)",
          "type": "string"
        },
        "fields": {
          "description": "List of fields to return for each issue",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "required": [
        "epicKey"
      ],
      "type": "object"
    },
    "name": "get_epic_issues"
  },
  {
    "description": "Get all issues assigned to or reported by a specific user in a board",
    "inputSchema": {
      "properties": {
        "boardId": {
          "description": "Jira board ID",
          "type": "string"
        },
        "status": {
          "default": "all",
          "description": "Filter by issue status",
          "enum": [
            "open",
            "in_progress",
            "done",
            "all"
          ],
          "type": "string"
        },
        "type": {
          "default": "assignee",
          "description": "Type of user association with issues",
          "enum": [
            "assignee",
            "reporter"
          ],
          "type": "string"
        },
        "username": {
          "description": "Username to search issues for",
          "type": "string"
        }
      },
      "required": [
        "boardId",
        "username"
      ],
      "type": "object"
    },
    "name": "get_user_issues"
  }
]