Skip to content

Commit d78f7df

Browse files
gpealHolovkat
authored andcommitted
Upgrade rmcp to 0.8.4 (#6234)
Picks up modelcontextprotocol/rust-sdk#509 which fixes openai/codex#6164
1 parent b342e28 commit d78f7df

File tree

3 files changed

+45
-14
lines changed

3 files changed

+45
-14
lines changed

codex-rs/Cargo.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codex-rs/Cargo.toml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ ratatui = "0.29.0"
168168
ratatui-macros = "0.6.0"
169169
regex-lite = "0.1.7"
170170
reqwest = "0.12"
171-
rmcp = { version = "0.8.3", default-features = false }
171+
rmcp = { version = "0.8.4", default-features = false }
172172
schemars = "0.8.22"
173173
seccompiler = "0.5.0"
174174
sentry = "0.34.0"
@@ -262,7 +262,12 @@ unwrap_used = "deny"
262262
# cargo-shear cannot see the platform-specific openssl-sys usage, so we
263263
# silence the false positive here instead of deleting a real dependency.
264264
[workspace.metadata.cargo-shear]
265-
ignored = ["icu_provider", "openssl-sys", "codex-utils-readiness", "codex-utils-tokenizer"]
265+
ignored = [
266+
"icu_provider",
267+
"openssl-sys",
268+
"codex-utils-readiness",
269+
"codex-utils-tokenizer",
270+
]
266271

267272
[profile.release]
268273
lto = "fat"

codex-rs/rmcp-client/src/bin/test_streamable_http_server.rs

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ use axum::extract::State;
1010
use axum::http::Request;
1111
use axum::http::StatusCode;
1212
use axum::http::header::AUTHORIZATION;
13+
use axum::http::header::CONTENT_TYPE;
1314
use axum::middleware;
1415
use axum::middleware::Next;
1516
use axum::response::Response;
17+
use axum::routing::get;
1618
use rmcp::ErrorData as McpError;
1719
use rmcp::handler::server::ServerHandler;
1820
use rmcp::model::CallToolRequestParam;
@@ -256,14 +258,35 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
256258
};
257259
eprintln!("starting rmcp streamable http test server on http://{bind_addr}/mcp");
258260

259-
let router = Router::new().nest_service(
260-
"/mcp",
261-
StreamableHttpService::new(
262-
|| Ok(TestToolServer::new()),
263-
Arc::new(LocalSessionManager::default()),
264-
StreamableHttpServerConfig::default(),
265-
),
266-
);
261+
let router = Router::new()
262+
.route(
263+
"/.well-known/oauth-authorization-server/mcp",
264+
get({
265+
move || async move {
266+
let metadata_base = format!("http://{bind_addr}");
267+
#[expect(clippy::expect_used)]
268+
Response::builder()
269+
.status(StatusCode::OK)
270+
.header(CONTENT_TYPE, "application/json")
271+
.body(Body::from(
272+
serde_json::to_vec(&json!({
273+
"authorization_endpoint": format!("{metadata_base}/oauth/authorize"),
274+
"token_endpoint": format!("{metadata_base}/oauth/token"),
275+
"scopes_supported": [""],
276+
})).expect("failed to serialize metadata"),
277+
))
278+
.expect("valid metadata response")
279+
}
280+
}),
281+
)
282+
.nest_service(
283+
"/mcp",
284+
StreamableHttpService::new(
285+
|| Ok(TestToolServer::new()),
286+
Arc::new(LocalSessionManager::default()),
287+
StreamableHttpServerConfig::default(),
288+
),
289+
);
267290

268291
let router = if let Ok(token) = std::env::var("MCP_EXPECT_BEARER") {
269292
let expected = Arc::new(format!("Bearer {token}"));
@@ -282,6 +305,9 @@ async fn require_bearer(
282305
request: Request<Body>,
283306
next: Next,
284307
) -> Result<Response, StatusCode> {
308+
if request.uri().path().contains("/.well-known/") {
309+
return Ok(next.run(request).await);
310+
}
285311
if request
286312
.headers()
287313
.get(AUTHORIZATION)

0 commit comments

Comments
 (0)