first commit

This commit is contained in:
Stéphane Tailland
2026-04-26 15:14:01 +02:00
commit 0853e1c1f4
6 changed files with 164 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
.env
certs/
.claude
+8
View File
@@ -0,0 +1,8 @@
{
"mcpServers": {
"mcp-atlassian": {
"type": "http",
"url": "http://localhost:9000/mcp"
}
}
}
+54
View File
@@ -0,0 +1,54 @@
# PM Backlog — Jira MCP Server
This project runs the [mcp-atlassian](https://github.com/sooperset/mcp-atlassian) MCP server as a Docker container, connecting Claude Code to Jira Cloud.
## Architecture
```
Claude Code → HTTP (localhost:9000/mcp) → Docker (mcp-atlassian) → Jira Cloud
```
Transport: **streamable-http** (persistent process, independent of Claude Code sessions).
## Key files
- `docker-compose.yml` — defines the `mcp-atlassian` container (image `ghcr.io/sooperset/mcp-atlassian:latest`, port 9000)
- `.env` — Jira credentials (`JIRA_URL`, `JIRA_USERNAME`, `JIRA_API_TOKEN`); never commit this file
- `.mcp.json` — tells Claude Code to connect to `http://localhost:9000/mcp`; auto-loaded when Claude Code opens this directory
## Common commands
```bash
docker compose up -d # start the server
docker compose down # stop the server
docker compose logs -f # tail logs
docker compose pull && docker compose up -d # update to latest image
```
## Credentials
Credentials live in `.env` (already in `.gitignore`). Required variables:
| Variable | Description |
|---|---|
| `JIRA_URL` | Jira Cloud base URL, e.g. `https://your-org.atlassian.net` |
| `JIRA_USERNAME` | Atlassian account email |
| `JIRA_API_TOKEN` | Atlassian API token — generate at id.atlassian.com |
## MCP tools
Once the server is running and Claude Code is connected, Jira tools are available directly in this session (search issues, create/update tickets, etc.). The MCP server exposes the full mcp-atlassian tool surface.
## Coding Guidelines
- **Language**: all code, comments, commit messages, and documentation in English.
- **Comments**: only when the why is non-obvious. No block comments, no section dividers.
- **Conciseness**: no boilerplate, no placeholders, no "coming soon" stubs.
- **No over-engineering**: solve the problem at hand; don't design for hypothetical futures.
- **Images**: always use `latest` when the tag exists; pin to the latest known version only when `latest` is not published (e.g. Harbor). Keeps images up to date with security patches.
## OAuth2 (future)
The image has built-in OAuth2 proxy support. To enable it:
1. Uncomment `ATLASSIAN_OAUTH_*` variables in `.env` and fill in credentials from the [Atlassian developer console](https://developer.atlassian.com/console/myapps/).
2. Put a reverse proxy (nginx/Caddy) in front of port 9000 to enforce bearer token validation before forwarding to `/mcp`.
+89
View File
@@ -0,0 +1,89 @@
# PM Backlog — MCP Atlassian Setup
This project connects Claude Code to Jira via the [mcp-atlassian](https://github.com/sooperset/mcp-atlassian) MCP server, running as a Docker container over streamable HTTP.
## Architecture
```
Claude Code → HTTP (localhost:9000/mcp) → Docker (mcp-atlassian) → Jira Cloud
```
The server uses the **streamable-http** transport (not stdio), which keeps the MCP server as a persistent process independent of Claude Code sessions.
## Prerequisites
- Docker and Docker Compose installed
- A Jira Cloud account with an API token ([generate one here](https://id.atlassian.com/manage-profile/security/api-tokens))
## Configuration
### Environment variables (`.env`)
| Variable | Description |
|---|---|
| `JIRA_URL` | Your Jira Cloud base URL (e.g. `https://your-org.atlassian.net`) |
| `JIRA_USERNAME` | Your Atlassian account email |
| `JIRA_API_TOKEN` | Your Atlassian API token |
OAuth2 variables are present but commented out — see the [OAuth2 section](#oauth2-future) below.
### Claude Code (`.mcp.json`)
Claude Code is configured to connect to the MCP server via:
```json
{
"mcpServers": {
"mcp-atlassian": {
"url": "http://localhost:9000/mcp"
}
}
}
```
This file is picked up automatically when Claude Code is opened in this directory.
## Running the server
**Start:**
```bash
docker compose up -d
```
**Stop:**
```bash
docker compose down
```
**View logs:**
```bash
docker compose logs -f
```
**Update to the latest image:**
```bash
docker compose pull && docker compose up -d
```
The server listens on `http://localhost:9000/mcp`.
## OAuth2 (future)
The mcp-atlassian server has built-in OAuth2 proxy support. When you are ready to enable it:
1. Uncomment the `ATLASSIAN_OAUTH_*` variables in `.env` and fill in your OAuth2 app credentials (created in the [Atlassian developer console](https://developer.atlassian.com/console/myapps/)).
2. The server will expose standard OAuth2 discovery and token endpoints:
- `GET /.well-known/oauth-authorization-server`
- `POST /oauth/token`
- `POST /oauth/register`
3. Place a reverse proxy (nginx, Caddy, etc.) in front of port 9000 to enforce bearer token validation before forwarding requests to `/mcp`.
Clients then authenticate with:
```
Authorization: Bearer <user_oauth_access_token>
```
For multi-tenant deployments, per-user Jira identity can be passed via:
```
X-Atlassian-Cloud-Id: <user_cloud_id>
```
+9
View File
@@ -0,0 +1,9 @@
services:
mcp-atlassian:
image: ghcr.io/sooperset/mcp-atlassian:latest
ports:
- "9000:9000"
env_file:
- .env
command: ["--transport", "streamable-http", "--port", "9000"]
restart: unless-stopped
+1
View File
@@ -0,0 +1 @@
JIRA MCP Server: https://github.com/sooperset/mcp-atlassian