README.md•11.1 kB
# MCP Atlassian
A Model Context Protocol (MCP) server that provides comprehensive tools for interacting with Atlassian products (Confluence and Jira).
## Overview
This MCP server allows AI agents to interact with Atlassian products through a standardized interface. It provides extensive tools for:
- **Confluence**: Full CRUD operations, content search, space management, page management, comments, labels, and more using v2 REST API
- **Jira**: Issue management, project operations, transitions, comments, and comprehensive workflow support
## Key Features
- **Modern API Support**: Uses Confluence v2 REST API with fallback to v1 for search functionality
- **Comprehensive Toolset**: 18+ Confluence tools and 8+ Jira tools covering all major operations
- **Security & Privacy**: Built-in PII filtering and SSL verification controls
- **Flexible Configuration**: Support for separate service URLs, authentication methods, and tool filtering
- **Pagination Support**: Cursor-based pagination for v2 APIs and offset/limit for v1 APIs
- **Error Handling**: Comprehensive error handling with detailed error messages
- **Type Safety**: Full TypeScript implementation with proper type definitions
## Prerequisites
- Node.js (v16 or higher)
- npm or yarn
- Atlassian account with API token
- Docker (optional, for containerized deployment)
## Installation
### Standard Installation
1. Clone the repository:
   ```bash
   git clone https://github.com/yourusername/mcp-atlassian.git
   cd mcp-atlassian
   ```
2. Install dependencies:
   ```bash
   npm install
   # or using make
   make install
   ```
3. Create a `.env` file in the root directory with your Atlassian credentials:
   ```
   ATLASSIAN_HOST=https://your-domain.atlassian.net
   ATLASSIAN_EMAIL=your-email@example.com
   ATLASSIAN_API_TOKEN=your-api-token
   ```
### Docker Installation
1. Clone the repository:
   ```bash
   git clone https://github.com/yourusername/mcp-atlassian.git
   cd mcp-atlassian
   ```
2. Create a `.env` file as described above.
3. Build and run the Docker container:
   ```bash
   # Build the Docker image
   make docker-build
   # Run the Docker container
   make docker-run
   # Or use Docker Compose
   make docker-compose
   ```
## Usage
### Starting the Server
```bash
# Using npm
npm start
# Using make
make start
# Using Docker
make docker-run
```
This will start the MCP server, which will listen and respond on streamable HTTP.
### MCP configuration
```json
    "mcp-searchapi": {
      "name": "mcp-searchapi",
      "type": "streamable-http",
      "streamable": true,
      "url": "http://localhost:3007/mcp"
    }
```
### Available Tools
#### Confluence Tools
**Search & Discovery:**
- **search_confluence**: Search for content in Confluence using v1 API with CQL
  - Parameters: `searchText` (string), `spaceKey` (string, optional), `limit` (number), `start` (number)
- **search_confluence_pages_by_title**: Search pages by title using v2 API
  - Parameters: `title` (string, optional), `spaceId` (string, optional), `limit` (number), `cursor` (string, optional)
**Space Management:**
- **get_confluence_space_by_id_or_key**: Get information about a specific Confluence space
  - Parameters: `spaceIdOrKey` (string)
- **get_confluence_spaces**: Get all available spaces
  - Parameters: `limit` (number, optional), `cursor` (string, optional)
**Page Management:**
- **get_confluence_content**: Get specific page content by ID
  - Parameters: `pageId` (string), `bodyFormat` (enum: storage/atlas_doc_format/wiki, optional)
- **get_confluence_pages**: Get all pages in a space
  - Parameters: `spaceId` (string), `limit` (number, optional), `cursor` (string, optional)
- **get_confluence_child_pages**: Get child pages of a specific page
  - Parameters: `pageId` (string), `limit` (number, optional), `cursor` (string, optional)
- **confluence_create_page**: Create a new Confluence page
  - Parameters: `spaceId` (string), `title` (string), `content` (string), `status` (enum, optional), `representation` (enum, optional), `parentId` (string, optional)
- **confluence_update_page**: Update an existing page
  - Parameters: `pageId` (string), `title` (string), `content` (string), `version` (number), `status` (enum, optional), `representation` (enum, optional), `versionMessage` (string, optional)
- **update_confluence_page_title**: Update only the title of a page
  - Parameters: `pageId` (string), `title` (string), `status` (enum, optional)
- **confluence_delete_page**: Delete a Confluence page
  - Parameters: `pageId` (string)
**Label Management:**
- **get_confluence_pages_by_label**: Find pages with specific labels
  - Parameters: `label` (string), `spaceId` (string, optional), `limit` (number, optional), `cursor` (string, optional)
- **get_confluence_page_labels**: Get labels for a specific page
  - Parameters: `pageId` (string), `limit` (number, optional), `cursor` (string, optional)
- **add_confluence_page_labels**: Add labels to a page
  - Parameters: `pageId` (string), `labels` (array of strings)
**Comments:**
- **get_confluence_page_comments**: Get regular comments on a page
  - Parameters: `pageId` (string), `limit` (number, optional), `cursor` (string, optional)
- **add_confluence_page_comment**: Add a comment to a page
  - Parameters: `pageId` (string), `content` (string), `representation` (enum, optional)
- **get_confluence_page_inline_comments**: Get inline comments on a page
  - Parameters: `pageId` (string), `limit` (number, optional), `cursor` (string, optional)
- **create_confluence_footer_comment**: Create a footer comment
  - Parameters: `pageId` (string, optional), `blogPostId` (string, optional), `parentCommentId` (string, optional), `attachmentId` (string, optional), `customContentId` (string, optional), `content` (string), `representation` (enum, optional)
#### Jira Tools
- **search_jira_issues**: Search for issues using JQL (Jira Query Language)
  - Parameters: `jql` (string), `maxResults` (number, optional)
- **get_jira_issue**: Get detailed information about a specific issue
  - Parameters: `issueKey` (string)
- **jira_get_all_projects**: Get all accessible projects
  - Parameters: none
- **jira_create_issue**: Create a new Jira issue
  - Parameters: `projectKey` (string), `issueType` (string), `summary` (string), `description` (string, optional), additional fields
- **jira_update_issue**: Update an existing issue
  - Parameters: `issueKey` (string), `fields` (object with update data)
- **jira_add_comment**: Add a comment to an issue
  - Parameters: `issueKey` (string), `comment` (string)
- **jira_get_transitions**: Get available transitions for an issue
  - Parameters: `issueKey` (string)
- **jira_transition_issue**: Transition an issue to a different status
  - Parameters: `issueKey` (string), `transitionId` (string), `comment` (string, optional)
## Architecture Notes
### Confluence API Migration
This server primarily uses the **Confluence v2 REST API** for most operations, with strategic fallback to v1 API where necessary:
- **v2 API**: Used for spaces, pages, comments, labels - provides better performance and modern cursor-based pagination
- **v1 API**: Used for content search via CQL - provides more powerful search capabilities
- **SSL Support**: Configurable SSL verification bypass for self-hosted instances
- **Authentication**: Supports basic auth, OAuth 2.0 (planned), and PAT tokens
### Tool Filtering & Security
- **Read-Only Mode**: Disable all write operations for safe exploration
- **Tool Whitelist**: Enable only specific tools via `ENABLED_TOOLS` environment variable
- **PII Filtering**: Automatic detection and masking of sensitive information in responses
- **Error Context**: Detailed error messages without exposing sensitive configuration
## Development
### Project Structure
```
src/
├── config/         # Configuration files
│   └── env.ts      # Environment configuration with validation
├── services/       # Service classes for Atlassian APIs
│   ├── confluencev2.ts    # Confluence v2 REST API service (primary)
│   ├── confluence.ts      # Legacy Confluence service (deprecated)
│   └── jira.ts           # Jira REST API service
├── tools/          # MCP tool implementations
│   ├── search-confluence.ts                    # Content search (v1 API)
│   ├── search-confluence-pages-by-title.ts     # Title search (v2 API)
│   ├── get-confluence-space.ts                 # Single space info
│   ├── get-confluence-spaces.ts                # All spaces list
│   ├── get-confluence-content.ts               # Page content by ID
│   ├── get-confluence-pages.ts                 # Pages in space
│   ├── get-confluence-child-pages.ts           # Child pages
│   ├── get-confluence-pages-by-label.ts        # Pages by label
│   ├── get-confluence-page-labels.ts           # Page labels
│   ├── add-confluence-page-labels.ts           # Add labels
│   ├── get-confluence-page-comments.ts         # Page comments
│   ├── add-confluence-page-comment.ts          # Add comment
│   ├── get-confluence-page-inline-comments.ts  # Inline comments
│   ├── confluence-create-page.ts               # Create page
│   ├── confluence-update-page.ts               # Update page
│   ├── update-confluence-page-title.ts         # Update title only
│   ├── confluence-delete-page.ts               # Delete page
│   ├── create-confluence-footer-comment.ts     # Footer comments
│   ├── search-jira-issues.ts                   # Jira search
│   ├── get-jira-issue.ts                       # Single issue
│   ├── jira-create-issue.ts                    # Create issue
│   ├── jira-update-issue.ts                    # Update issue
│   ├── jira-add-comment.ts                     # Add comment
│   ├── jira-get-transitions.ts                 # Get transitions
│   ├── jira-transition-issue.ts                # Transition issue
│   ├── jira-get-all-projects.ts                # All projects
│   ├── utils.ts                                 # Utility functions & PII filtering
│   └── index.ts                                # Tool exports
├── utils/          # Utility modules
│   └── tool-filter.ts      # Tool filtering and access control
└── index.ts        # Main entry point and server setup
```
### Building
```bash
# Using npm
npm run build
# Using make
make build
```
### Testing
```bash
# Using npm
npm test
# Using make
make test
```
### Makefile Commands
The project includes a Makefile to simplify common operations:
```bash
# Display available commands
make help
```
## License
MIT
## Contributing
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request