-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Open
Labels
bugSomething isn't workingSomething isn't workingneeds confirmationNeeds confirmation that the PR is actually required or needed.Needs confirmation that the PR is actually required or needed.
Description
Initial Checks
- I confirm that I'm using the latest version of MCP Python SDK
- I confirm that I searched for my issue in https://github.com/modelcontextprotocol/python-sdk/issues before opening this issue
Description
Description
When using the python-sdk with transport set to streamable-http, the connection to a remote MCP server deployed on Google Cloud Run does not establish. The API stays in a pending state, and no updates are received.
However, the same MCP server works fine under the following conditions:
- When accessed via Google Cloud Proxy
- When transport is changed to SSE
- When using the JS SDK, streamable-http transport works without issues
This suggests a compatibility or configuration issue specifically between python-sdk's streamable-http transport and direct access to Cloud Run URLs.
Reproduction Steps
- Deploy an MCP server to Cloud Run using this official guide:
https://cloud.google.com/blog/topics/developers-practitioners/build-and-deploy-a-remote-mcp-server-to-google-cloud-run-in-under-10-minutes - Use:
- Transport:
streamable-http - Endpoint: Public URL of Cloud Run MCP server
- Transport:
- Attempt to connect using <cloud_run_url>/mcp
- Observe: API status remains in
pendingand no data is received
Observations
- Switching transport to SSE resolves the issue.
- Using a Cloud Proxy to access the MCP server also works with streamable-http.
- JS SDK does not face this issue under the same deployment conditions.
- The Cloud Run URL is publicly accessible and works with other tools.
Environment
- SDK:
python-sdk(v1.9.4) - MCP Server: Deployed on Cloud Run
- Python version: [3.12.11]
- OS - Docker image: [linux/amd64]
Expected Behavior
The SDK should establish a connection to the Cloud Run-hosted MCP server and transition the API status from pending to active.
Additional Notes
This might point to either:
- SDK's HTTP streaming implementation not being fully compatible with Cloud Run’s networking behavior
- Some internal headers or keep-alive expectations that differ between SSE and streamable-http
Any guidance, workaround, or fix would be appreciated.
Example Code
from mcp.server.fastmcp import FastMCP
# Create server
mcp = FastMCP("Echo Server")
@mcp.tool()
def echo(text: str) -> str:
"""Echo the input text"""
return text
def main():
mcp.run(transport="streamable-http", host="0.0.0.0", port=8080)
if __name__ == "__main__":
main()Python & MCP Python SDK
SDK Version: 1.9.4
Python Version: 3.12.11
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't workingneeds confirmationNeeds confirmation that the PR is actually required or needed.Needs confirmation that the PR is actually required or needed.