Hi everyone,
I’m trying to connect to the Atlassian Rovo Remote MCP Server from a Python app using LangChain MCP adapters (langchain_mcp_adapters) and the MCP Streamable HTTP transport. I can successfully obtain an Atlassian OAuth 3LO access token (via refresh token) and use it with Atlassian REST APIs, but I’m unable to establish an MCP session (tool discovery fails).
Goal
Use MultiServerMCPClient to fetch tools from Atlassian MCP and then bind them to an LLM (Azure OpenAI) to query Confluence/Jira content (example prompt: “ETL Guide?”).
Environment
- Windows 10/11, Python 3.10
langchain_mcp_adapters, mcp, httpx, anyio- Transport:
http (Streamable HTTP / SSE)
What works
1) OAuth token refresh works
I call: POST <a href="https://auth.atlassian.com/oauth/token" rel="noopener nofollow noreferrer" target="_blank">https://auth.atlassian.com/oauth/token</a> with grant_type=refresh_token and get an access_token.
2) Token works with Atlassian platform API
This succeeds with 200: GET <a href="https://api.atlassian.com/oauth/token/accessible-resources" rel="noopener nofollow noreferrer" target="_blank">https://api.atlassian.com/oauth/token/accessible-resources</a>
It returns my Confluence site and cloud id, e.g.
- site:
https://<my-site>.atlassian.net - cloudId:
So the token is valid for Confluence scopes.
What fails
A) Direct call to MCP SSE endpoint returns invalid_token
Using real curl (curl.exe), this returns 401: GET <a href="https://mcp.atlassian.com/v1/sse" rel="noopener nofollow noreferrer" target="_blank">https://mcp.atlassian.com/v1/sse</a> Header: Authorization: Bearer <access_token>
Response: {"error":"invalid_token","error_description":"Invalid access token"}
Using LangChain MCP adapters fails during initialize()
My initial Python config used:
Python
client = MultiServerMCPClient({
<span>"atlassian/atlassian-mcp-server"</span>: {
<span>"transport"</span>: <span>"http"</span>,
<span>"url"</span>: <span>"https://mcp.atlassian.com/v1/"</span>,
<span>"headers"</span>: {<span>"Authorization"</span>: <span>f"Bearer {access_token}"</span>}
}
})
tools = <span>await</span> client.get_tools()With httpx debug enabled I can see it sends: POST <a href="https://mcp.atlassian.com/v1/" rel="noopener nofollow noreferrer" target="_blank">https://mcp.atlassian.com/v1/</a> with JSON-RPC initialize
But the server responds:
Then the client fails with: mcp.shared.exceptions.McpError: Session terminated
C) Endpoint probing results
I tested a few likely endpoints:
GET <a href="https://mcp.atlassian.com/v1" rel="noopener nofollow noreferrer" target="_blank">https://mcp.atlassian.com/v1</a> → 404GET <a href="https://mcp.atlassian.com/v1/message" rel="noopener nofollow noreferrer" target="_blank">https://mcp.atlassian.com/v1/message</a> → 404GET <a href="https://mcp.atlassian.com/v1/rpc" rel="noopener nofollow noreferrer" target="_blank">https://mcp.atlassian.com/v1/rpc</a> → 404GET <a href="https://mcp.atlassian.com/v1/streamable-http" rel="noopener nofollow noreferrer" target="_blank">https://mcp.atlassian.com/v1/streamable-http</a> → 404GET <a href="https://mcp.atlassian.com/v1/sse" rel="noopener nofollow noreferrer" target="_blank">https://mcp.atlassian.com/v1/sse</a> → 401 invalid_token (missing/invalid access token)GET <a href="https://mcp.atlassian.com/v1/mcp" rel="noopener nofollow noreferrer" target="_blank">https://mcp.atlassian.com/v1/mcp</a> → 401 invalid_token (missing/invalid access token)
So /v1/mcp and /v1/sse exist, but reject my Bearer token; /v1/ returns 404, which breaks the MCP client initialize POST.
Questions
What is the correct base URL to use with an MCP “streamable HTTP” client for Atlassian’s remote MCP server?
- Should the client be pointed at
<a href="https://mcp.atlassian.com/v1/mcp" rel="noopener nofollow noreferrer" target="_blank">https://mcp.atlassian.com/v1/mcp</a> instead of /v1/?
Does Atlassian Rovo Remote MCP require a different token/audience than a standard Atlassian 3LO access token (even if that token works for Confluence via api.atlassian.com)?
- Is there a token exchange step or a Rovo-specific OAuth client/scopes required?
- I tried to use both API based token and Atlassian 3LO access token approaches.
If anyone has a working Python example (LangChain MCP adapters or plain mcp client) connecting to Atlassian’s remote MCP server, I’d really appreciate guidance.
Thanks!