Skip to content

Commit ab41a07

Browse files
authored
docs: add multi-cloud OAuth support documentation (sooperset#548)
- Add section explaining minimal OAuth configuration with ATLASSIAN_OAUTH_ENABLE=true - Document X-Atlassian-Cloud-Id header for per-request cloud instance selection - Include Python integration example using official MCP SDK - Update multi-user authentication notes to mention cloud ID header support Reported-by: Ivaschenko Pavlo (@pavel1tel) Github-Issue: sooperset#471
1 parent 7b24e1c commit ab41a07

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

README.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ To use this method, set the following environment variables (or use the correspo
106106
This option is useful in scenarios where OAuth credential management is centralized or handled by other infrastructure components.
107107
</details>
108108

109+
> [!TIP]
110+
> **Multi-Cloud OAuth Support**: If you're building a multi-tenant application where users provide their own OAuth tokens, see the [Multi-Cloud OAuth Support](#multi-cloud-oauth-support) section for minimal configuration setup.
111+
109112
### 📦 2. Installation
110113

111114
MCP Atlassian is distributed as a Docker image. This is the recommended way to run the server, especially for IDE integration. Ensure you have Docker installed.
@@ -371,6 +374,65 @@ Credentials in proxy URLs are masked in logs. If you set `NO_PROXY`, it will be
371374

372375
</details>
373376

377+
<details>
378+
<summary>Multi-Cloud OAuth Support</summary>
379+
380+
MCP Atlassian supports multi-cloud OAuth scenarios where each user connects to their own Atlassian cloud instance. This is useful for multi-tenant applications, chatbots, or services where users provide their own OAuth tokens.
381+
382+
**Minimal OAuth Configuration:**
383+
384+
1. Enable minimal OAuth mode (no client credentials required):
385+
```bash
386+
docker run -e ATLASSIAN_OAUTH_ENABLE=true -p 9000:9000 \
387+
ghcr.io/sooperset/mcp-atlassian:latest \
388+
--transport streamable-http --port 9000
389+
```
390+
391+
2. Users provide authentication via HTTP headers:
392+
- `Authorization: Bearer <user_oauth_token>`
393+
- `X-Atlassian-Cloud-Id: <user_cloud_id>`
394+
395+
**Example Integration (Python):**
396+
```python
397+
import asyncio
398+
from mcp.client.streamable_http import streamablehttp_client
399+
from mcp import ClientSession
400+
401+
user_token = "user-specific-oauth-token"
402+
user_cloud_id = "user-specific-cloud-id"
403+
404+
async def main():
405+
# Connect to streamable HTTP server with custom headers
406+
async with streamablehttp_client(
407+
"http://localhost:9000/mcp",
408+
headers={
409+
"Authorization": f"Bearer {user_token}",
410+
"X-Atlassian-Cloud-Id": user_cloud_id
411+
}
412+
) as (read_stream, write_stream, _):
413+
# Create a session using the client streams
414+
async with ClientSession(read_stream, write_stream) as session:
415+
# Initialize the connection
416+
await session.initialize()
417+
418+
# Example: Get a Jira issue
419+
result = await session.call_tool(
420+
"jira_get_issue",
421+
{"issue_key": "PROJ-123"}
422+
)
423+
print(result)
424+
425+
asyncio.run(main())
426+
```
427+
428+
**Configuration Notes:**
429+
- Each request can use a different cloud instance via the `X-Atlassian-Cloud-Id` header
430+
- User tokens are isolated per request - no cross-tenant data leakage
431+
- Falls back to global `ATLASSIAN_OAUTH_CLOUD_ID` if header not provided
432+
- Compatible with standard OAuth 2.0 bearer token authentication
433+
434+
</details>
435+
374436
<details> <summary>Single Service Configurations</summary>
375437

376438
**For Confluence Cloud only:**
@@ -600,6 +662,7 @@ Here's a complete example of setting up multi-user authentication with streamabl
600662
> - The server should have its own fallback authentication configured (e.g., via environment variables for API token, PAT, or its own OAuth setup using --oauth-setup). This is used if a request doesn't include user-specific authentication.
601663
> - **OAuth**: Each user needs their own OAuth access token from your Atlassian OAuth app.
602664
> - **PAT**: Each user provides their own Personal Access Token.
665+
> - **Multi-Cloud**: For OAuth users, optionally include `X-Atlassian-Cloud-Id` header to specify which Atlassian cloud instance to use
603666
> - The server will use the user's token for API calls when provided, falling back to server auth if not
604667
> - User tokens should have appropriate scopes for their needed operations
605668

0 commit comments

Comments
 (0)