diff --git a/codex-rs/rmcp-client/src/lib.rs b/codex-rs/rmcp-client/src/lib.rs
index e1ee18c753..ce26e9e525 100644
--- a/codex-rs/rmcp-client/src/lib.rs
+++ b/codex-rs/rmcp-client/src/lib.rs
@@ -7,6 +7,7 @@ mod logging_client_handler;
mod oauth;
mod perform_oauth_login;
mod program_resolver;
+mod refresh_token_store;
mod rmcp_client;
mod stdio_server_launcher;
mod utils;
diff --git a/codex-rs/rmcp-client/src/refresh_token_store.rs b/codex-rs/rmcp-client/src/refresh_token_store.rs
new file mode 100644
index 0000000000..7eecab4c84
--- /dev/null
+++ b/codex-rs/rmcp-client/src/refresh_token_store.rs
@@ -0,0 +1,63 @@
+use futures::future::BoxFuture;
+use oauth2::RefreshToken;
+use oauth2::TokenResponse;
+use rmcp::transport::auth::AuthError;
+use rmcp::transport::auth::CredentialStore;
+use rmcp::transport::auth::StoredCredentials;
+use tokio::sync::RwLock;
+
+#[derive(Default)]
+pub(crate) struct RefreshTokenStore {
+ credentials: RwLock