Skip to content

feat(extensions): support Unix domain socket transport for StreamableHttp MCP#7860

Open
wpfleger96 wants to merge 2 commits intomainfrom
wpfleger/socket-support-upstream
Open

feat(extensions): support Unix domain socket transport for StreamableHttp MCP#7860
wpfleger96 wants to merge 2 commits intomainfrom
wpfleger/socket-support-upstream

Conversation

@wpfleger96
Copy link
Copy Markdown
Collaborator

@wpfleger96 wpfleger96 commented Mar 13, 2026

Summary

  • Bump rmcp from 1.2.0 to 1.3.0 to pick up the upstream Unix domain socket client for streamable HTTP transport (rust-sdk#749)
  • Add socket: Option<String> field to StreamableHttp extension config, enabling MCP connections routed through Unix sockets (e.g. Envoy sidecars in K8s environments where DNS only resolves via the sidecar)
  • Wire up rmcp::transport::UnixSocketHttpClient in extension_manager.rs with OAuth retry support
  • Apply substitute_env_vars to the socket field so env-backed socket paths (e.g. $ENVOY_SOCK) resolve correctly
  • Adapt all StreamableHttpClientTransportConfig construction to use the builder API, required by rmcp 1.3.0's #[non_exhaustive] attribute (rust-sdk#715)

Supersedes #7631, which implemented UDS support directly in goose. That local implementation (~420 lines) is now replaced by the upstream rmcp feature.

Test plan

  • cargo check -p goose compiles with rmcp 1.3.0 + transport-streamable-http-client-unix-socket feature
  • RUSTFLAGS="-D warnings" cargo clippy --workspace --all-targets --exclude v8 -- -D warnings passes
  • cargo test -p goose — 1072 tests pass (1 pre-existing snapshot failure unrelated to this change)
  • Extension config with socket: "@egress.sock" deserializes correctly (covered by new unit tests)
  • Extension config without socket field continues to work as before

@wpfleger96 wpfleger96 marked this pull request as ready for review March 13, 2026 15:35
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3c8f30ab3c

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

@wpfleger96 wpfleger96 force-pushed the wpfleger/socket-support-upstream branch from 3c8f30a to 3052674 Compare March 16, 2026 23:01
@DOsinga DOsinga added the needs_human label to set when a robot looks at a PR and can't handle it label Mar 20, 2026
…Http MCP

Bump rmcp to 1.3.0 to pick up upstream Unix domain socket client for
streamable HTTP transport (rust-sdk#749). This enables routing MCP
connections through Unix sockets (e.g. Envoy sidecars in K8s) by
setting a `socket` field on StreamableHttp extension configs.

- Add `socket: Option<String>` to StreamableHttp ExtensionConfig variant
- Wire up `rmcp::transport::UnixSocketHttpClient` in extension_manager
- Apply `substitute_env_vars` to socket field for env-backed paths
- Adapt all StreamableHttpClientTransportConfig construction to use
  builder API (required by rmcp 1.3.0's #[non_exhaustive])
- Work around StoredCredentials #[non_exhaustive] via serde roundtrip
@wpfleger96 wpfleger96 force-pushed the wpfleger/socket-support-upstream branch from 8c46f1f to 745aa62 Compare March 26, 2026 22:36
@wpfleger96 wpfleger96 changed the title refactor(extensions): use upstream rmcp UnixSocketHttpClient feat(extensions): support Unix domain socket transport for StreamableHttp MCP Mar 26, 2026
@wpfleger96 wpfleger96 changed the base branch from wpfleger/socket-support to main March 26, 2026 22:36
@github-actions
Copy link
Copy Markdown
Contributor

🔍 Recipe Security Scan Results

⚠️ Status: SCAN FAILED - Technical issues during scanning

📊 Scan Summary:

  • Total recipes scanned: 1
  • Failed scans: 1

📋 Individual Recipe Results:
❓ Recipe 1: UNKNOWN (UNKNOWN risk)

🔗 View detailed scan results in the workflow artifacts.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4bf5ba15c6

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

…er init

Bump unicode-segmentation 1.13.1 (yanked) to 1.13.2 to fix the deny
CI check. Replace .parse().unwrap() with .unwrap_or_else() fallback
when initializing the USER_AGENT header for unix socket clients.
@wpfleger96 wpfleger96 force-pushed the wpfleger/socket-support-upstream branch from 4bf5ba1 to bcb0978 Compare March 27, 2026 19:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs_human label to set when a robot looks at a PR and can't handle it

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants