Expose create_mcp_http_client and McpHttpClientFactory as public API (2.0 made them private-only)
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 68/100
Rechercherichtung
Beginne damit, mcp/shared/_httpx_utils.py und mcp/client/streamable_http.py zu untersuchen, um die aktuellen Definitionen und öffentlichen Exporte zu vergleichen. Exportiere create_mcp_http_client und McpHttpClientFactory erneut aus einem öffentlichen Modul und ziehe den im Issue erwähnten Hinweis zur Migrationsdokumentation in Betracht. Als erledigt gilt die Aufgabe, wenn Nutzer einen benutzerdefinierten Client erstellen und übergeben können, ohne das private Modul zu importieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Summary
Customizing the HTTP client for streamable_http_client (custom headers, auth, timeout, proxy, etc.) is a common and legitimate need, but as of 2.0.0 the only supported way to build a conforming client is through helpers that live in the private module mcp.shared._httpx_utils. Users are therefore forced to depend on a private API.
What changed in 2.0
In 1.x, streamable_http_client accepted convenience kwargs directly:
streamable_http_client(url, headers=..., timeout=..., sse_read_timeout=..., auth=...)
2.0 (via #2972, which replaced httpx/httpx-sse with httpx2) removed those kwargs. The signature is now:
async def streamable_http_client(
url: str,
*,
http_client: httpx2.AsyncClient | None = None,
terminate_on_close: bool = True,
) -> ...
So the only way to pass custom headers/auth/timeout is to build an httpx2.AsyncClient yourself and pass it as http_client=. The standardized factory for doing so is create_mcp_http_client — but it is only available at the private path:
from mcp.shared._httpx_utils import create_mcp_http_client # private module
The same applies to McpHttpClientFactory: in 1.x it was importable from the public mcp.client.streamable_http, but in 2.0 it is defined in mcp.shared._httpx_utils and is no longer re-exported from any public module.
Why this is a problem
- "Connect to an MCP server that requires auth headers / a custom timeout / a proxy" is a standard use case, not an edge case.
- The leading underscore on
mcp.shared._httpx_utilssignals "private, may change without notice", so every downstream project that needs a custom client has to take on that fragility. - It's inconsistent: the consumption side (
streamable_http_client(url, http_client=...)) is public, but the construction side (create_mcp_http_client,McpHttpClientFactory) is private.
Suggestion
Re-export create_mcp_http_client and McpHttpClientFactory from a public module — e.g. mcp.client.streamable_http (where McpHttpClientFactory used to live) or mcp.shared — so building a custom HTTP client does not require importing a private module.
(Related: because the HTTP layer now uses httpx2, a short note in the migration docs on how to build/pass a custom http_client would also help.)
- Vorherrschende Sprache
- Python
- Sterne
- 24.3k
- Forks
- 4k
- Ø Merge
- 1 T. 19 Min.
- Gemergte PRs (30 T.)
- 29
Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus modelcontextprotocol/python-sdk
-
v1 v2
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
modelcontextprotocol/python-sdk#3546 · 5 Kommentare ·
-
v1 v2
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
modelcontextprotocol/python-sdk#3545 · 1 Kommentar ·
-
v1 v2
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 91/100
modelcontextprotocol/python-sdk#3508 · 2 Kommentare ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 64/100
modelcontextprotocol/python-sdk#3504 ·
-
v1 v2
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
modelcontextprotocol/python-sdk#3492 · 1 Kommentar ·
Alle Issues in modelcontextprotocol/python-sdk
Ähnliche Issues
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
use-agent-os/agent-os#3314 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
BasedHardware/omi#15662 · 1 Kommentar ·
-
documentation help wanted
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 90/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
AiursoftWeb/AnduinOS-2#19 ·