From 16d94eab78ef2c3df5b77ee4707b313c01559b5f Mon Sep 17 00:00:00 2001 From: Ali Hashemi Date: Sun, 23 Nov 2025 08:51:08 -0400 Subject: [PATCH 1/7] feat: add authentication flow for mcp server --- .release-manifest.json | 24 +- CONTRIBUTING.md | 2 +- Cargo.lock | 904 +++++++++++++++--- Cargo.toml | 5 + README.md | 58 +- assets/examples/mcp-remote-oauth.gif | Bin 0 -> 962600 bytes crates/rust-mcp-extra/CHANGELOG.md | 7 + crates/rust-mcp-extra/Cargo.toml | 30 +- crates/rust-mcp-extra/README.md | 114 ++- .../rust-mcp-extra/examples/common/handler.rs | 47 + crates/rust-mcp-extra/examples/common/mod.rs | 3 + crates/rust-mcp-extra/examples/common/tool.rs | 25 + .../rust-mcp-extra/examples/common/utils.rs | 31 + .../rust-mcp-extra/examples/keycloak-auth.rs | 47 + .../rust-mcp-extra/examples/scalekit-auth.rs | 47 + crates/rust-mcp-extra/examples/workos-auth.rs | 44 + crates/rust-mcp-extra/src/auth_provider.rs | 3 + .../src/auth_provider/keycloak.rs | 290 ++++++ .../src/auth_provider/scalekit.rs | 273 ++++++ .../src/auth_provider/work_os.rs | 272 ++++++ .../id_generator/snow_flake_id_generator.rs | 6 +- crates/rust-mcp-extra/src/lib.rs | 4 + crates/rust-mcp-extra/src/token_verifier.rs | 5 + .../token_verifier/generic_token_verifier.rs | 869 +++++++++++++++++ .../src/token_verifier/jwt_cache.rs | 67 ++ crates/rust-mcp-macros/tests/common/common.rs | 3 +- crates/rust-mcp-sdk/CHANGELOG.md | 7 + crates/rust-mcp-sdk/Cargo.toml | 23 +- crates/rust-mcp-sdk/README.md | 2 +- crates/rust-mcp-sdk/src/auth.rs | 24 + crates/rust-mcp-sdk/src/auth/auth_info.rs | 105 ++ crates/rust-mcp-sdk/src/auth/auth_provider.rs | 98 ++ .../auth_provider/remote_auth_provider.rs | 187 ++++ crates/rust-mcp-sdk/src/auth/error.rs | 62 ++ crates/rust-mcp-sdk/src/auth/metadata.rs | 685 +++++++++++++ crates/rust-mcp-sdk/src/auth/spec.rs | 15 + crates/rust-mcp-sdk/src/auth/spec/audience.rs | 111 +++ crates/rust-mcp-sdk/src/auth/spec/claims.rs | 283 ++++++ .../rust-mcp-sdk/src/auth/spec/discovery.rs | 315 ++++++ crates/rust-mcp-sdk/src/auth/spec/jwk.rs | 104 ++ .../rust-mcp-sdk/src/auth/token_verifier.rs | 7 + crates/rust-mcp-sdk/src/error.rs | 10 +- .../rust-mcp-sdk/src/hyper_servers/error.rs | 6 + .../rust-mcp-sdk/src/hyper_servers/routes.rs | 55 +- .../src/hyper_servers/routes/auth_routes.rs | 33 + .../hyper_servers/routes/fallback_routes.rs | 7 +- .../src/hyper_servers/routes/sse_routes.rs | 6 +- .../rust-mcp-sdk/src/hyper_servers/server.rs | 231 ++++- crates/rust-mcp-sdk/src/lib.rs | 19 +- .../src/mcp_handlers/mcp_client_handler.rs | 2 +- .../mcp_handlers/mcp_client_handler_core.rs | 2 +- .../src/mcp_handlers/mcp_server_handler.rs | 4 +- .../mcp_handlers/mcp_server_handler_core.rs | 2 +- crates/rust-mcp-sdk/src/mcp_http.rs | 13 +- crates/rust-mcp-sdk/src/mcp_http/app_state.rs | 18 +- .../{mcp_http_utils.rs => http_utils.rs} | 194 ++-- .../src/mcp_http/mcp_http_handler.rs | 270 ++++-- .../src/mcp_http/mcp_http_middleware.rs | 390 -------- .../rust-mcp-sdk/src/mcp_http/middleware.rs | 496 ++++++++++ .../mcp_http/middleware/auth_middleware.rs | 531 ++++++++++ .../mcp_http/middleware/cors_middleware.rs | 617 ++++++++++++ .../middleware/dns_rebind_protector.rs | 132 +++ .../mcp_http/middleware/logging_middleware.rs | 34 + crates/rust-mcp-sdk/src/mcp_http/types.rs | 176 ++++ .../src/mcp_runtimes/client_runtime.rs | 4 +- .../client_runtime/mcp_client_runtime.rs | 5 +- .../client_runtime/mcp_client_runtime_core.rs | 2 +- .../src/mcp_runtimes/server_runtime.rs | 38 +- .../server_runtime/mcp_server_runtime.rs | 7 +- .../server_runtime/mcp_server_runtime_core.rs | 3 +- crates/rust-mcp-sdk/src/mcp_traits.rs | 11 +- .../rust-mcp-sdk/src/mcp_traits/mcp_server.rs | 9 +- crates/rust-mcp-sdk/src/utils.rs | 64 ++ crates/rust-mcp-sdk/tests/common/common.rs | 94 +- .../rust-mcp-sdk/tests/common/mock_server.rs | 1 - .../rust-mcp-sdk/tests/common/test_client.rs | 5 +- .../rust-mcp-sdk/tests/common/test_server.rs | 37 +- .../tests/test_streamable_http_server.rs | 274 +++++- crates/rust-mcp-transport/src/constants.rs | 4 +- .../src/utils/sse_parser.rs | 2 +- examples/auth/server-oauth-remote/Cargo.toml | 31 + examples/auth/server-oauth-remote/README.md | 63 ++ .../auth/server-oauth-remote/src/handler.rs | 71 ++ examples/auth/server-oauth-remote/src/main.rs | 132 +++ .../Cargo.toml | 2 +- .../hello-world-mcp-server-stdio/Cargo.toml | 2 +- .../Cargo.toml | 2 +- .../Cargo.toml | 2 +- .../simple-mcp-client-sse-core/Cargo.toml | 2 +- examples/simple-mcp-client-sse/Cargo.toml | 2 +- .../simple-mcp-client-stdio-core/Cargo.toml | 2 +- examples/simple-mcp-client-stdio/Cargo.toml | 2 +- .../Cargo.toml | 2 +- .../Cargo.toml | 2 +- 94 files changed, 8396 insertions(+), 937 deletions(-) create mode 100644 assets/examples/mcp-remote-oauth.gif create mode 100644 crates/rust-mcp-extra/examples/common/handler.rs create mode 100644 crates/rust-mcp-extra/examples/common/mod.rs create mode 100644 crates/rust-mcp-extra/examples/common/tool.rs create mode 100644 crates/rust-mcp-extra/examples/common/utils.rs create mode 100644 crates/rust-mcp-extra/examples/keycloak-auth.rs create mode 100644 crates/rust-mcp-extra/examples/scalekit-auth.rs create mode 100644 crates/rust-mcp-extra/examples/workos-auth.rs create mode 100644 crates/rust-mcp-extra/src/auth_provider.rs create mode 100644 crates/rust-mcp-extra/src/auth_provider/keycloak.rs create mode 100644 crates/rust-mcp-extra/src/auth_provider/scalekit.rs create mode 100644 crates/rust-mcp-extra/src/auth_provider/work_os.rs create mode 100644 crates/rust-mcp-extra/src/token_verifier.rs create mode 100644 crates/rust-mcp-extra/src/token_verifier/generic_token_verifier.rs create mode 100644 crates/rust-mcp-extra/src/token_verifier/jwt_cache.rs create mode 100644 crates/rust-mcp-sdk/src/auth.rs create mode 100644 crates/rust-mcp-sdk/src/auth/auth_info.rs create mode 100644 crates/rust-mcp-sdk/src/auth/auth_provider.rs create mode 100644 crates/rust-mcp-sdk/src/auth/auth_provider/remote_auth_provider.rs create mode 100644 crates/rust-mcp-sdk/src/auth/error.rs create mode 100644 crates/rust-mcp-sdk/src/auth/metadata.rs create mode 100644 crates/rust-mcp-sdk/src/auth/spec.rs create mode 100644 crates/rust-mcp-sdk/src/auth/spec/audience.rs create mode 100644 crates/rust-mcp-sdk/src/auth/spec/claims.rs create mode 100644 crates/rust-mcp-sdk/src/auth/spec/discovery.rs create mode 100644 crates/rust-mcp-sdk/src/auth/spec/jwk.rs create mode 100644 crates/rust-mcp-sdk/src/auth/token_verifier.rs create mode 100644 crates/rust-mcp-sdk/src/hyper_servers/routes/auth_routes.rs rename crates/rust-mcp-sdk/src/mcp_http/{mcp_http_utils.rs => http_utils.rs} (85%) delete mode 100644 crates/rust-mcp-sdk/src/mcp_http/mcp_http_middleware.rs create mode 100644 crates/rust-mcp-sdk/src/mcp_http/middleware.rs create mode 100644 crates/rust-mcp-sdk/src/mcp_http/middleware/auth_middleware.rs create mode 100644 crates/rust-mcp-sdk/src/mcp_http/middleware/cors_middleware.rs create mode 100644 crates/rust-mcp-sdk/src/mcp_http/middleware/dns_rebind_protector.rs create mode 100644 crates/rust-mcp-sdk/src/mcp_http/middleware/logging_middleware.rs create mode 100644 crates/rust-mcp-sdk/src/mcp_http/types.rs create mode 100644 examples/auth/server-oauth-remote/Cargo.toml create mode 100644 examples/auth/server-oauth-remote/README.md create mode 100644 examples/auth/server-oauth-remote/src/handler.rs create mode 100644 examples/auth/server-oauth-remote/src/main.rs diff --git a/.release-manifest.json b/.release-manifest.json index aa27863..604f5a6 100644 --- a/.release-manifest.json +++ b/.release-manifest.json @@ -1,16 +1,16 @@ { - "crates/rust-mcp-sdk": "0.7.2", + "crates/rust-mcp-sdk": "0.7.3", "crates/rust-mcp-macros": "0.5.2", "crates/rust-mcp-transport": "0.6.2", - "crates/rust-mcp-extra": "0.1.2", - "examples/hello-world-mcp-server-stdio": "0.1.31", - "examples/hello-world-mcp-server-stdio-core": "0.1.22", - "examples/simple-mcp-client-stdio": "0.1.31", - "examples/simple-mcp-client-stdio-core": "0.1.31", - "examples/hello-world-server-streamable-http-core": "0.1.22", - "examples/hello-world-server-streamable-http": "0.1.34", - "examples/simple-mcp-client-sse-core": "0.1.22", - "examples/simple-mcp-client-sse": "0.1.25", - "examples/simple-mcp-client-streamable-http": "0.1.3", - "examples/simple-mcp-client-streamable-http-core": "0.1.3" + "crates/rust-mcp-extra": "0.1.3", + "examples/hello-world-mcp-server-stdio": "0.1.32", + "examples/hello-world-mcp-server-stdio-core": "0.1.23", + "examples/simple-mcp-client-stdio": "0.1.32", + "examples/simple-mcp-client-stdio-core": "0.1.32", + "examples/hello-world-server-streamable-http-core": "0.1.23", + "examples/hello-world-server-streamable-http": "0.1.35", + "examples/simple-mcp-client-sse-core": "0.1.23", + "examples/simple-mcp-client-sse": "0.1.26", + "examples/simple-mcp-client-streamable-http": "0.1.4", + "examples/simple-mcp-client-streamable-http-core": "0.1.4" } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 91033a8..89a7ac1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -24,7 +24,7 @@ Anyone can participate at any stage, whether it's discussing, triaging, or revie ### **Filing a Bug Report** -When reporting a bug, use the provided issue template and fill in as many details as possible. Don’t worry if you can’t answer everything—just provide what you can. +When reporting a bug, use the provided issue template and fill in as many details as possible. Don’t worry if you can’t answer everything-just provide what you can. ### **Fixing Issues** diff --git a/Cargo.lock b/Cargo.lock index a2b41f8..638b1ed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,6 +11,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "anyhow" version = "1.0.100" @@ -40,10 +49,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" dependencies = [ "concurrent-queue", - "event-listener", + "event-listener 2.5.3", "futures-core", ] +[[package]] +name = "async-lock" +version = "3.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" +dependencies = [ + "event-listener 5.4.1", + "event-listener-strategy", + "pin-project-lite", +] + [[package]] name = "async-trait" version = "0.1.89" @@ -69,21 +89,21 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-lc-rs" -version = "1.14.1" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879b6c89592deb404ba4dc0ae6b58ffd1795c78991cbb5b8bc441c48a070440d" +checksum = "6b5ce75405893cd713f9ab8e297d8e438f624dde7d706108285f7e17a25a180f" dependencies = [ "aws-lc-sys", + "untrusted 0.7.1", "zeroize", ] [[package]] name = "aws-lc-sys" -version = "0.32.3" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "107a4e9d9cab9963e04e84bb8dee0e25f2a987f9a8bad5ed054abd439caa8f8c" +checksum = "179c3777a8b5e70e90ea426114ffc565b2c1a9f82f6c4a0c5a34aa6ef5e781b6" dependencies = [ - "bindgen", "cc", "cmake", "dunce", @@ -92,9 +112,9 @@ dependencies = [ [[package]] name = "axum" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871" +checksum = "5b098575ebe77cb6d14fc7f32749631a6e44edbef6b796f89b020e99ba20d425" dependencies = [ "axum-core", "bytes", @@ -103,7 +123,7 @@ dependencies = [ "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-util", "itoa", "matchit", @@ -144,16 +164,16 @@ dependencies = [ [[package]] name = "axum-server" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495c05f60d6df0093e8fb6e74aa5846a0ad06abaf96d76166283720bf740f8ab" +checksum = "c1ab4a3ec9ea8a657c72d99a03a824af695bd0fb5ec639ccbd9cd3543b41a5f9" dependencies = [ "arc-swap", "bytes", "fs-err", "http 1.3.1", "http-body 1.0.1", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-util", "pin-project-lite", "rustls", @@ -183,24 +203,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] -name = "bindgen" -version = "0.72.1" +name = "base64ct" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" -dependencies = [ - "bitflags", - "cexpr", - "clang-sys", - "itertools", - "log", - "prettyplease", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "syn", -] +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "bitflags" @@ -208,6 +214,15 @@ version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + [[package]] name = "bumpalo" version = "3.19.0" @@ -216,15 +231,15 @@ checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytes" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "cc" -version = "1.2.45" +version = "1.2.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35900b6c8d709fb1d854671ae27aeaa9eec2f8b01b364e1619a40da3e6fe2afe" +checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07" dependencies = [ "find-msvc-tools", "jobserver", @@ -232,15 +247,6 @@ dependencies = [ "shlex", ] -[[package]] -name = "cexpr" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" -dependencies = [ - "nom", -] - [[package]] name = "cfg-if" version = "1.0.4" @@ -254,14 +260,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] -name = "clang-sys" -version = "1.8.1" +name = "chrono" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "glob", - "libc", - "libloading", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link", ] [[package]] @@ -291,6 +300,12 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "cookie" version = "0.18.1" @@ -320,12 +335,47 @@ dependencies = [ "url", ] +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + [[package]] name = "deadpool" version = "0.9.5" @@ -345,6 +395,17 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + [[package]] name = "deranged" version = "0.5.5" @@ -354,6 +415,17 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", +] + [[package]] name = "displaydoc" version = "0.2.5" @@ -381,10 +453,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] -name = "either" -version = "1.15.0" +name = "encoding_rs" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] [[package]] name = "equivalent" @@ -392,12 +467,43 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + [[package]] name = "event-listener" version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener 5.4.1", + "pin-project-lite", +] + [[package]] name = "fastrand" version = "1.9.0" @@ -407,11 +513,17 @@ dependencies = [ "instant", ] +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + [[package]] name = "find-msvc-tools" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" +checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" [[package]] name = "fnv" @@ -419,6 +531,21 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "form_urlencoded" version = "1.2.2" @@ -430,9 +557,9 @@ dependencies = [ [[package]] name = "fs-err" -version = "3.1.3" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ad492b2cf1d89d568a43508ab24f98501fe03f2f31c01e1d0fe7366a71745d2" +checksum = "62d91fd049c123429b018c47887d3f75a265540dd3c30ba9cb7bae9197edb03a" dependencies = [ "autocfg", "tokio", @@ -498,7 +625,7 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ - "fastrand", + "fastrand 1.9.0", "futures-core", "futures-io", "memchr", @@ -554,6 +681,16 @@ dependencies = [ "slab", ] +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + [[package]] name = "getrandom" version = "0.1.16" @@ -592,12 +729,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "glob" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - [[package]] name = "h2" version = "0.3.27" @@ -638,13 +769,13 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" [[package]] name = "hello-world-mcp-server-stdio" -version = "0.1.31" +version = "0.1.32" dependencies = [ "async-trait", "futures", @@ -658,7 +789,7 @@ dependencies = [ [[package]] name = "hello-world-mcp-server-stdio-core" -version = "0.1.22" +version = "0.1.23" dependencies = [ "async-trait", "futures", @@ -670,7 +801,7 @@ dependencies = [ [[package]] name = "hello-world-server-streamable-http" -version = "0.1.34" +version = "0.1.35" dependencies = [ "async-trait", "futures", @@ -684,7 +815,7 @@ dependencies = [ [[package]] name = "hello-world-server-streamable-http-core" -version = "0.1.22" +version = "0.1.23" dependencies = [ "async-trait", "futures", @@ -817,9 +948,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ "atomic-waker", "bytes", @@ -845,7 +976,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ "http 1.3.1", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-util", "rustls", "rustls-pki-types", @@ -855,11 +986,27 @@ dependencies = [ "webpki-roots", ] +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.8.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + [[package]] name = "hyper-util" -version = "0.1.17" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" dependencies = [ "base64 0.22.1", "bytes", @@ -868,15 +1015,41 @@ dependencies = [ "futures-util", "http 1.3.1", "http-body 1.0.1", - "hyper 1.7.0", + "hyper 1.8.1", "ipnet", "libc", "percent-encoding", "pin-project-lite", "socket2 0.6.1", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", ] [[package]] @@ -983,9 +1156,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.12.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" dependencies = [ "equivalent", "hashbrown", @@ -1022,15 +1195,6 @@ dependencies = [ "serde", ] -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.15" @@ -1057,11 +1221,31 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "jsonwebtoken" +version = "10.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c76e1c7d7df3e34443b3621b459b066a7b79644f059fc8b2db7070c825fd417e" +dependencies = [ + "aws-lc-rs", + "base64 0.22.1", + "getrandom 0.2.16", + "js-sys", + "pem", + "serde", + "serde_json", + "signature", + "simple_asn1", +] + [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] [[package]] name = "libc" @@ -1069,22 +1253,18 @@ version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" -[[package]] -name = "libloading" -version = "0.8.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" -dependencies = [ - "cfg-if", - "windows-link", -] - [[package]] name = "libm" version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + [[package]] name = "litemap" version = "0.8.1" @@ -1155,12 +1335,6 @@ dependencies = [ "unicase", ] -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "mio" version = "1.1.0" @@ -1182,13 +1356,20 @@ dependencies = [ ] [[package]] -name = "nom" -version = "7.1.3" +name = "native-tls" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ - "memchr", - "minimal-lexical", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", ] [[package]] @@ -1200,12 +1381,58 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" +dependencies = [ + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -1226,12 +1453,84 @@ dependencies = [ "libc", ] +[[package]] +name = "oauth2-test-server" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bb78cf155f91eba1d99533e49aafc31f5e7e42b9964d2c0c8470d6641accb54" +dependencies = [ + "axum", + "base64 0.21.7", + "chrono", + "colored", + "futures", + "http 1.3.1", + "jsonwebtoken", + "once_cell", + "rand 0.8.5", + "reqwest", + "rsa", + "serde", + "serde_json", + "sha2", + "tokio", + "tower-http 0.5.2", + "tracing", + "tracing-subscriber", + "url", + "uuid", +] + [[package]] name = "once_cell" version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "openssl" +version = "0.10.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.111" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "parking" version = "2.2.1" @@ -1261,6 +1560,25 @@ dependencies = [ "windows-link", ] +[[package]] +name = "pem" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" +dependencies = [ + "base64 0.22.1", + "serde_core", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.2" @@ -1279,6 +1597,33 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + [[package]] name = "potential_utf" version = "0.1.4" @@ -1303,16 +1648,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "prettyplease" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro2" version = "1.0.103" @@ -1566,17 +1901,22 @@ dependencies = [ "bytes", "cookie", "cookie_store", + "encoding_rs", "futures-core", "futures-util", + "h2 0.4.12", "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.1", "hyper-rustls", + "hyper-tls", "hyper-util", "js-sys", "log", + "mime", "mime_guess", + "native-tls", "percent-encoding", "pin-project-lite", "quinn", @@ -1587,10 +1927,11 @@ dependencies = [ "serde_urlencoded", "sync_wrapper", "tokio", + "tokio-native-tls", "tokio-rustls", "tokio-util", "tower", - "tower-http", + "tower-http 0.6.6", "tower-service", "url", "wasm-bindgen", @@ -1616,20 +1957,54 @@ dependencies = [ "cfg-if", "getrandom 0.2.16", "libc", - "untrusted", + "untrusted 0.9.0", "windows-sys 0.52.0", ] +[[package]] +name = "rsa" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40a0376c50d0358279d9d643e4bf7b7be212f1f4ff1da9070a7b54d22ef75c88" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core 0.6.4", + "signature", + "spki", + "subtle", + "zeroize", +] + [[package]] name = "rust-mcp-extra" -version = "0.1.2" +version = "0.1.3" dependencies = [ + "async-lock", + "async-trait", "base64 0.22.1", + "bytes", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", "nanoid", + "oauth2-test-server", "once_cell", "rand 0.9.2", "rand_distr", + "reqwest", "rust-mcp-sdk", + "serde", + "serde_json", + "tokio", + "tracing", + "tracing-subscriber", + "url", ] [[package]] @@ -1656,7 +2031,7 @@ dependencies = [ [[package]] name = "rust-mcp-sdk" -version = "0.7.2" +version = "0.7.3" dependencies = [ "async-trait", "axum", @@ -1667,18 +2042,21 @@ dependencies = [ "http 1.3.1", "http-body 1.0.1", "http-body-util", - "hyper 1.7.0", + "hyper 1.8.1", + "jsonwebtoken", "reqwest", "rust-mcp-macros", "rust-mcp-schema", "rust-mcp-transport", "serde", "serde_json", + "tempfile", "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", "tracing-subscriber", + "url", "uuid", "wiremock", ] @@ -1707,6 +2085,19 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +[[package]] +name = "rustix" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + [[package]] name = "rustls" version = "0.23.35" @@ -1750,7 +2141,7 @@ dependencies = [ "aws-lc-rs", "ring", "rustls-pki-types", - "untrusted", + "untrusted 0.9.0", ] [[package]] @@ -1765,12 +2156,44 @@ version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "serde" version = "1.0.228" @@ -1848,6 +2271,32 @@ dependencies = [ "serde", ] +[[package]] +name = "server-oauth-remote" +version = "0.1.34" +dependencies = [ + "async-trait", + "futures", + "rust-mcp-extra", + "rust-mcp-sdk", + "serde", + "serde_json", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -1865,16 +2314,26 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.6" +version = "1.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" +checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core 0.6.4", +] + [[package]] name = "simple-mcp-client-sse" -version = "0.1.25" +version = "0.1.26" dependencies = [ "async-trait", "colored", @@ -1890,7 +2349,7 @@ dependencies = [ [[package]] name = "simple-mcp-client-sse-core" -version = "0.1.22" +version = "0.1.23" dependencies = [ "async-trait", "colored", @@ -1906,7 +2365,7 @@ dependencies = [ [[package]] name = "simple-mcp-client-stdio" -version = "0.1.31" +version = "0.1.32" dependencies = [ "async-trait", "colored", @@ -1920,7 +2379,7 @@ dependencies = [ [[package]] name = "simple-mcp-client-stdio-core" -version = "0.1.31" +version = "0.1.32" dependencies = [ "async-trait", "colored", @@ -1934,7 +2393,7 @@ dependencies = [ [[package]] name = "simple-mcp-client-streamable-http" -version = "0.1.3" +version = "0.1.4" dependencies = [ "async-trait", "colored", @@ -1950,7 +2409,7 @@ dependencies = [ [[package]] name = "simple-mcp-client-streamable-http-core" -version = "0.1.3" +version = "0.1.4" dependencies = [ "async-trait", "colored", @@ -1964,6 +2423,18 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "simple_asn1" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror 2.0.17", + "time", +] + [[package]] name = "slab" version = "0.4.11" @@ -1996,6 +2467,22 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -2010,9 +2497,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.109" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f17c7e013e88258aa9543dcbe81aca68a667a9ac37cd69c9fbc07858bfe0e2f" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", @@ -2039,6 +2526,40 @@ dependencies = [ "syn", ] +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +dependencies = [ + "fastrand 2.3.0", + "getrandom 0.3.4", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + [[package]] name = "thiserror" version = "1.0.69" @@ -2172,6 +2693,16 @@ dependencies = [ "syn", ] +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + [[package]] name = "tokio-rustls" version = "0.26.4" @@ -2222,6 +2753,23 @@ dependencies = [ "tracing", ] +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "bitflags", + "bytes", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", + "pin-project-lite", + "tower-layer", + "tower-service", + "tracing", +] + [[package]] name = "tower-http" version = "0.6.6" @@ -2320,6 +2868,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + [[package]] name = "unicase" version = "2.8.1" @@ -2332,6 +2886,12 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "untrusted" version = "0.9.0" @@ -2373,6 +2933,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.5" @@ -2515,12 +3081,76 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -2745,18 +3375,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +checksum = "43fa6694ed34d6e57407afbccdeecfa268c470a7d2a5b0cf49ce9fcc345afb90" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.27" +version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +checksum = "c640b22cd9817fae95be82f0d2f90b11f7605f6c319d16705c459b27ac2cbc26" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index faba18a..9695021 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,7 @@ members = [ "examples/simple-mcp-client-sse-core", "examples/simple-mcp-client-streamable-http", "examples/simple-mcp-client-streamable-http-core", + "examples/auth/server-oauth-remote" ] @@ -60,6 +61,10 @@ reqwest = { version = "0.12", default-features = false, features = [ "multipart", ] } bytes = "1.10" +url = {version="2.5"} +http = { version ="1.3" } +http-body-util = { version ="0.1" } +http-body = { version ="1.0" } # [workspace.dependencies.windows] diff --git a/README.md b/README.md index 2c70c3e..dd1f2b6 100644 --- a/README.md +++ b/README.md @@ -21,37 +21,35 @@ Leveraging the [rust-mcp-schema](https://github.com/rust-mcp-stack/rust-mcp-sche **rust-mcp-sdk** supports all three official versions of the MCP protocol. By default, it uses the **2025-06-18** version, but earlier versions can be enabled via Cargo features. - - -This project supports following transports: -- **Stdio** (Standard Input/Output) -- **Streamable HTTP** -- **SSE** (Server-Sent Events) - - 🚀 The **rust-mcp-sdk** includes a lightweight [Axum](https://github.com/tokio-rs/axum) based server that handles all core functionality seamlessly. Switching between `stdio` and `Streamable HTTP` is straightforward, requiring minimal code changes. The server is designed to efficiently handle multiple concurrent client connections and offers built-in support for SSL. -**MCP Streamable HTTP Support** -- ✅ Streamable HTTP Support for MCP Servers +**Features** +- ✅ Stdio, SSE and Streamable HTTP Support +- ✅ Supports multiple MCP protocol versions - ✅ DNS Rebinding Protection - ✅ Batch Messages - ✅ Streaming & non-streaming JSON response -- ✅ Streamable HTTP Support for MCP Clients - ✅ Resumability -- ⬜ Oauth Authentication +- ✅ OAuth Authentication for MCP Servers + - ✅ [Remote Oauth Provider](crates/rust-mcp-sdk/src/auth/auth_provider/remote_auth_provider.rs) (for any provider with DCR support) + - ✅ **Keycloak** Provider (via [rust-mcp-extra](crates/rust-mcp-extra/README.md#keycloak)) + - ✅ **WorkOS** Authkit Provider (via [rust-mcp-extra](crates/rust-mcp-extra/README.md#workos-authkit)) + - ✅ **Scalekit** Authkit Provider (via [rust-mcp-extra](crates/rust-mcp-extra/README.md#scalekit)) +- ⬜ OAuth Authentication for MCP Clients **⚠️** Project is currently under development and should be used at your own risk. ## Table of Contents +- [Getting Started](#getting-started) - [Usage Examples](#usage-examples) - [MCP Server (stdio)](#mcp-server-stdio) - [MCP Server (Streamable HTTP)](#mcp-server-streamable-http) - [MCP Client (stdio)](#mcp-client-stdio) - - [MCP Client (Streamable HTTP)](#mcp-client_streamable-http)) + - [MCP Client (Streamable HTTP)](#mcp-client-streamable-http) - [MCP Client (sse)](#mcp-client-sse) +- [Authentication](#authentication) - [Macros](#macros) -- [Getting Started](#getting-started) - [HyperServerOptions](#hyperserveroptions) - [Security Considerations](#security-considerations) - [Cargo features](#cargo-features) @@ -68,6 +66,12 @@ This project supports following transports: - [Development](#development) - [License](#license) + +## Getting Started + +If you are looking for a step-by-step tutorial on how to get started with `rust-mcp-sdk` , please see : [Getting Started MCP Server](https://github.com/rust-mcp-stack/rust-mcp-sdk/tree/main/doc/getting-started-mcp-server.md) + + ## Usage Examples ### MCP Server (stdio) @@ -387,6 +391,26 @@ Creating an MCP client using the `rust-mcp-sdk` with the SSE transport is almost 👉 see [examples/simple-mcp-client-sse](https://github.com/rust-mcp-stack/rust-mcp-sdk/tree/main/examples/simple-mcp-client-sse) for a complete working example. +## Authentication +MCP server can verify tokens issued by other systems, integrate with external identity providers, or manage the entire authentication process itself. Each option offers a different balance of simplicity, security, and control. + + ### RemoteAuthProvider + [RemoteAuthProvider](src/mcp_http/auth/auth_provider/remote_auth_provider.rs) RemoteAuthProvider enables authentication with identity providers that support Dynamic Client Registration (DCR) such as KeyCloak and WorkOS AuthKit, letting MCP clients auto-register and obtain credentials without manual setup. + +👉 See the [server-oauth-remote](examples/auth/server-oauth-remote) example for how to use RemoteAuthProvider with a DCR-capable remote provider. + +👉 [rust-mcp-extra](https://crates.io/crates/rust-mcp-extra) also offers drop-in auth providers for common identity platforms, working seamlessly with rust-mcp-sdk: + - [Keycloack auth example](crates/rust-mcp-extra/README.md#keycloak) + - [WorkOS autn example](crates/rust-mcp-extra/README.md#workos-authkit) + + + + ### OAuthProxy + OAuthProxy enables authentication with OAuth providers that don’t support Dynamic Client Registration (DCR).It accepts any client registration request, handles the DCR on your server side and then uses your pre-registered app credentials upstream.The proxy also forwards callbacks, allowing dynamic redirect URIs to work with providers that require fixed ones. + +> ⚠️ OAuthProxy support is still in development—please use RemoteAuthProvider for now. + + ## Macros [rust-mcp-sdk](https://github.com/rust-mcp-stack/rust-mcp-sdk) includes several helpful macros that simplify common tasks when building MCP servers and clients. For example, they can automatically generate tool specifications and tool schemas right from your structs, or assist with elicitation requests and responses making them completely type safe. @@ -495,10 +519,6 @@ let user_info = UserInfo::from_content_map(result.content)?; 💻 For mre info please see : - https://github.com/rust-mcp-stack/rust-mcp-sdk/tree/main/crates/rust-mcp-macros -## Getting Started - -If you are looking for a step-by-step tutorial on how to get started with `rust-mcp-sdk` , please see : [Getting Started MCP Server](https://github.com/rust-mcp-stack/rust-mcp-sdk/tree/main/doc/getting-started-mcp-server.md) - ## HyperServerOptions HyperServer is a lightweight Axum-based server that streamlines MCP servers by supporting **Streamable HTTP** and **SSE** transports. It supports simultaneous client connections, internal session management, and includes built-in security features like DNS rebinding protection and more. @@ -625,7 +645,7 @@ The `rust-mcp-sdk` crate provides several features that can be enabled or disabl - `2025_03_26` : Activates MCP Protocol version 2025-03-26 - `2024_11_05` : Activates MCP Protocol version 2024-11-05 -> Note: MCP protocol versions are mutually exclusive—only one can be active at any given time. +> Note: MCP protocol versions are mutually exclusive-only one can be active at any given time. ### Default Features diff --git a/assets/examples/mcp-remote-oauth.gif b/assets/examples/mcp-remote-oauth.gif new file mode 100644 index 0000000000000000000000000000000000000000..87eb37f9d24dd2033cbbf7800e046eb3f53a7908 GIT binary patch literal 962600 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

JnVkm3D@dHIjByYC5Q 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

UT!l|mu#H%Elg{F?FT6kqWS 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%0Dj1OST!KZA}R<&nUJ|b!&FLU_`pm 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

*lHLx$%kvZ@lt;JCMENE(ayPf>pFD zM&sHGu%P0)+iyy+nBa+M!k`eyLm+@~^N($o=l``{Ty*z32OVKA-pN z^BS(vf#CQKLr6~u+e!?|1oc+4z_gR+0@o3rNtHs?l&KP=o;9qmSlhq@LlKvee3>I7 z_6YqP*ExnJBcqXbA%fr(w!+{L8#6cb1o|Wn0#jwo5!LwmHLcXTW3>UO!i*pf5Uh0F z5=GO5LeXsPGO%3!c??CGy%w_oG<`3C)pYa za$Z{m09Cx;hTFUzMSdKi;A05_SY(l8K!opH@$2HFR&SLWkR2HO(d!e)*O_1-5=}eA zUJAb}iOl2$k^}xE%A+L!oMbLQdSy%^^Xx;yJ4|TW(m{$~I!g{~eMQx6rzirzAi-o9 z;6+qvsJ4`so?%*0)>jCg_N!z1hKhM00{tQKyy>QUD(V8 zOgIZ#Jxq99MHT?s_n(P}7#%@;kw5FFMT@~X5U>vsvisqOVZR2|p=?UDHLXD7 zUm+4i%r!&`2srA&Up_AYoZYu`GwOC~vYm{YUJSRIkDQE2kH5LF|4fJ@+{oD1JxjcX zbbT1^K}PP}yjPQ{-y-1vKL`>0vu9`YlQBKPPG6Gn=xMNAB)Ck_<}cnwW&y^i4-1!c z&e~rZP`Uw-#0`;Q-TMfI#S<=F>TW#s*a(N0RU}i|9C&Qs?g*4X(n=l@Ew1>k$?pc@ z8501GF`}J61d$FKqrv26ND60b9PqzU)_5idu1;*a58ucUil0D1V|^~e7N8rCaC&<$ zBs617@vg}5$Qcr6WDXAgnflWq2vv+rje3Fwc|TYH-8ZqW0J?xMgzoLT;1n_^#U}cvr+(<%OG&dV*5s<<@}sjQaD$*ri<80o9zJloq)%nu0z>d>of0LZQPi@I=V$790f> zfK&B8F7G#nIp4{RS06w3!BT&b7hu}NTlR4FZW4oi&eb0RfIpkqB)9s4B#=Z%$!s?< z@O75j?n8k&0z`a9N7~VGo`pOMRl8D}Z;LUVBfT~7M$5wvCtGqaZ)J)D0fnZ*mMG3Z zh(nxSrqO=6xE~v9px#b^nhg8QQ-bUaqdoZbW+axH6d;z`g`2gl;j)c8y%Rak=M6u# ze#5&MS9bA8Ht7w2hyUq#bJICN!19yMiO0sa#}d&k-v53O?TX(*%C;LihF5|P|DBnX zEq|S=66($E-Mi$R)XooGO+auRA5J*(=)$$1RtvNYc2E+t&TO^*`@?yzx3`}*TwIU) zZ|^PFXTc#vx+3-Pqc6(yTlXxQR?2@}Ua%ccK66QCE9~oqS?dn;WRbbwT;9K>!xmlr z7tFS=)cu=nDBKyps=ZyVn)c1CYnu(0+ik1cUq4xw_9?00y9L#B{#yU@rYiSm3L(B~F_^k^vwu6hKb<+&pZ2%N{C7tOd$;4{!HnYP z&0k+N*uO9Q`<(>xNej4q!RKqz!Tsdfh>PjosjnkaUF6e$UQU81lm3g#_+&?hMOsN# zkrEN4O+@;hY62@KgRdw3{mr!Zh>I9;%7?g&lKa~K#8PyzlwM9x?>;ptg8KWq))xcv z0OEqJPo|Y&T2)f!`TJB<74@!LhF~(e3z6k)c(LCy&E~a$7uG{lJY9vB6)=)DD4%R= znf<`ds~$$ZmO~Mr$r6c7KWiy>-X|w9IVZU)CpA(wb|&W-hj|dEn* zK!q7}F9CU;lga|qj7Tndo-!QG+vX^@z@=y6g*@I+7Xs9WsWeD{PQR7xWnGG-T$*J- z9w-YmVw7EoVZ8D@e)0ixq5{2u54?nv>PJFvqP+n_)H-wwTgcNZIM0Aoc<=|u!q_+- z;Jc(Z3t3~yLl4oiqG$8WK}NL&;s^-NJQtOB#p&3Ul)dadS@nebbr=v9L(o(P^ADO}mtaDVH2YbjQN-E4lrOOQsi*jSN^I z!?O^8y2K*A-|!`n6bcFU%S=RIaXGkzmqWpX{ZYGWQ}I#|>BE9`JVl)HL~SR-%vrEu z2A?gFJDLRJScAP|VdKq_WwEf73Hdk{#Dfu=&AL<=3kzH;m}eqon#MpM z7W3GXEm zh(Vd4qiRXehiGoAHP2`Uq`8;}eZ?3@;#$_L3Ttd=1WMQ}SR9jwOn`1<_q6+kXr5+vF~mTEGAQ0s`d(aN;F6jvZyXwG$%J>8@tBho zT$ncIjLW);@Cqe(G{GLP&3_kHd)OZRkX70eUuREL^rq|K*9sPlO4&>}zO0Z{=DZMP zGPA8|i&F@upRq@qL0nM|NBME+D06xc@>~&{0G%B{XvJGs>EFuGH^Bep&t(Zk({Y@1~b@)ZpHF{(Vr=l@Nf_+`6J!%E(F6MQ6 z?_~4^nM)79OGNgtmC@O2=kjB9su-Qnppx!ediIQ>H-FrHh=txb&ceK2=LYq&Er05u z5J@i?#l;1$ndKHkd~h%i0DAIX2Yi4hn0e2LX}_V4es65I9I5q89X8j6tNjF`3RVHCf(5lUH{z0z8D&ewhtx*u-Ce6*WBY6ZVIOh#$wC1F-7Bq zR`5XAgo8pahB3;7=a5jFM0kFz*EX?4|Gcfkj#@p$NAC~+?Ds>RKf1T4c+Y|RUSrB_&{%LgWwl@EOsScKG?Yj1)|7E;laM+rk0q8W4;fcRB;=unQarI8Jk_~;vUZZsQFI)>pSiC zbn`d>YG=zG$HF8Q`^+jp<2QM}UwP;l%B|0|w_iIoq>gSRLX(8Kr5Ct#runQGo`HZb z)DIC1hGEaeWL2L|95^0`#1kbOh^fQ|nxNR}ihiH;8;WvmY>8OBgvqNEy9(;Cw(DN*emNYB} z4O1NDS={v%szh2AKk!rLbs-RgwI7sd=smFluK-h&|pSkFe5TR`#~dNqVI)G z*~EmG3JN#zsz7+c!V@8%Pn(c_X|2OQiff`TDZE3gc*p6?uf@Sjc&Fd;E#G-OAr%Sh zc3<&JO}F?O!S8d(K(j{|adw8*O2e_{YJQ zv|h%{P1?uNe;Bc)f)Anx$-AO=ove!P%^1f`OmrMoBwgi2GxuKXx z(bH?quJiEP7Y7Tduvz@}U$$#8EYyKqev-s5yH?NB0%t)c3;9dHzp7)7xF=17A~W>{9t(XSy6* zeCYk9C3$|YWFF>RJ9j^B;q3G<8{iJqZuDW=a2{;VHd>qva9Ta1ey~Fd3BA z0@vTN8XBhd(LBG$T7h-*Tzf=jyLaiMoUe?_lp$~G?E@;onIxT@C5lbykR{`L(r+JR zujnt!>@J(n{OE7bbeQ?-<@4>20JnPWH#UQ>u^8cpGo5CA3t7Ds85_j?is#`(QKR-# zydqyc5fMm;=^R9qRwL&J5#GgdB0-VaB>3i9d15T*XX^GQa)aZ`?Z5Na*&kQFVe(ij zxrgsZYb~Y0`Nu8qHSl4w{-lo`yfzcQn*BZWX8hp`=$TQ9j16HsLe!Rg%WNmRR z`1PH7CL%i4u8^tI8(XYa`>8YT*8#yYe4am>a6geKU{BYZx8fFA9}pAh7-jJz^ECr4 zexKZ>_~)d;f9){Zm*sZ1(HT2L!@Wj>ogu!%F(;S5{ob+M{UKYm7M1baDDG0)=;e9O zOTKrwI#dF$Gw#0>L1VE4OPmeDA`aFMd$orZa53i5>7^=jU{oh{B1jaX$f9_V6R8s^OSE)rW#Apf9wtG$gR7N-|0rY>Dm7E_48*o z$7n4ai)-m-*w&w_#b2jc^L2#?X11fB(lsbX$bA0;E+rb4uRd5Jqe@L7FC{zmmy%Fc z>aY4g9yYFz#?=*`>sKr-j64(#)8w*~N(si=$wcg*8xbm!9DDMbRGy1dxq5!X9@|hJ z_x#=a7S)^4&n=s4HTczEAJ2Tee^dJG!S^?ghgv-Jo{Rr?e$&Ztp*-H%_{ZH%=l7Ar z@h;|jTbnL8h{$<@759;Hb@o#}&-1Rwq!PAV@!U@OZ*E3TmD!59OPzLeFxlR6Cs<#6 zBd25gNqAJ^(4hi%p%X{8J$*td65clRbmhJEaJ}s~e)Pi67BhdUNTN@$T0(`F=l#j4 zhkIjtuO5e-?Az`>o_}x0H~MCt*V|A7L6@!o*M*pwsFvHJug~1^O!{OynRV|&^?T_3 zKIQ3|~!$FvyHxhblb zJ9J9zUbeUA&RpT~qbUw~)-Z|p&wR~xzf>uhq-gx+YjC-@68<(N0_+Y?2wP!>C7Ooo zovx0!&2qoex4mKgH>!F4QtC3BU3tLOS$wT2^>lmG>faxxdM|pzUv0qlqVHaEyl|!y z_4w~n#mn#us~s1c_G08y?sB=ysLe~AWe#+k#168fZeB|e^iDhXR4R#cg%mHR#XbKo z3bp=R@4vM8S0-m4eH;{$H9h~Jx&#d4Gn^qNy!A`^moO7@`C{Vx(;c56l4$$q=Y^wx z|4U*~#b$RzYVq0U7t21sD?>r?tQ6Sw%jv1ht@jU7SML0meqogx%|uMZ2hXOgzA#{? zZB2eP2Z1n5o0Q!J#QCk3(t0`xg{dND9PIt(tUx${1W_V_cxNm?KK0n0p}GUUT^#Zl zfg;4i0%34Ge_Bq<=PVG}2(w*FbT%PVQ7MSaDcMT6iIAlc8pIv2YbE}aL5;ZnQV3dX zfm|fym@EeIU);6Ez+Gw9O7ncbZvsU0lWarHV4-WfHrQhVG$AxjP`6o&FR;WXr`5^C zxfnp|;|fBQLL^=$AJcDgy>vP>MCzp>2n-!`G+I{>|CDTJy5w4P!G8fN91DIC)#>9e zyvX1Y#J{6aA&HA2iZXxjN1QQ0bd{o&@F*T1?pAg+tpTiyF0_i#DIY-D@A@|2VUDD- z*3d8|)f1ysx?9EV8)1h&e0%0nsO!@-^`$MjSMr2aTt>H2lelse+~+{CDq5JRb1lWr zzp~}>;~JITaP}QXvyESzvg8-NsFbnLV7*Hy3=SAeaRw((7N7`U#T!mIo%knMd%ZNm zXE^1>zcZVF4g<{f;Lp<_+05{`!?{dta4=|)ldFN7jY2Rf!l8(o9P12Dsx$HmLla5U- zNLVW`TWsM-SG3A&5Og)w2Gy|}iMo(C(5U9+6P^wM+ZyJ|3j(eVU`-Z9<{^IGIG8l0 zv#bp{{Sq+x6A9|>N&p)b+yLW=S>3DpHPXAPlI}*l8a%j+zZy6(Jb9}5jc|*OA;?JR z>N7T1D6t)^4EXMSv%eKQ?e06>)?oNSq+Rk(mweTr#&h{gHf>DgyX5RcNSwFMvJ0q& zXm_-$vq0-cT*IA3Ij0np(Uj03so9aIrVr3Swx~zN17#fFay|G(qGsW-eO8_2qQ1#NPrer(+;EYg=;8HPm>Qt@8*S z1LX?F<$aYUf?@P?>J8o}?mM#p<4dy_f1lu&BN*L;7H?EU)Hqwj8C8I*hIO0ULdHf?$qOGjN?#Ubo~|OxNYoMWYn; zgC$4|oWValU>6StzIY61RFd;0G1~wU1J~ICo=G!?CfXNUlz;iZ@c^Fy^qZe4ZJ?1v z#31^7Zo4=az~heuUi2`*1}A==GJH!CGS@yLg+x=mheIHWinB7NW1RFkDm=ECETFhm4*|=5Vdl!JX>#M=-uu$5lG!Gda~-6 ztSJ$C8H_b0pr^89wR|aKi?GN#c98r;ul1Its5G8w% z;4@(uKyRvn+ly$Y2u1%m@jK~(X?weyDi8{^bprqz0BZOE{|Qjjss|IEsR;0ld4j|- zxK~ND@gQ89SO9&Ez)6M$neN8I$Xqg3sqJJ?W<|4=hwTTKQe(cWwlLp$PyY3@RKpqWW>D zkK4_#?>7|J{};rF1;v_yNoH?NG6RVEhF8^xFO*ZIDy6VMR2&qbXJt$P&-JA3aGB9) zIU8a&wK>}-5@EN-q(w1Xk+&;NS_ZEm1kt1~8b?FaIa2pbZ+t%(3;bt7l5z*}ROKjO zNMKf`H@&~^d0(6Zl!yn~7ocvt2)VS|;zWc5ooq!N$dY_eOELd(C0i?5`%GkO@AG=d z46Nlt^Q}#U4)ejk7EQJwF$Y7kN~D40h?a))MhLnU|2Ik)9zaago#i$lia!Q3!0~tz zhCXB&il7g|bRTwJJ0(MnEX4WwvO zq=c;$gl~Hzv*LoO(aoA5^iwbqp@Aj=v08$3tEGH%&Aazr{7?rQLOHoTNn}o`Mzg!- zkghRFB);~!F_gA&?Cg0heq8@mA;5S9j>M3{m|(XFD(b?+9&Q_uxJ^9EBBPjW(Ljww zGT8z6rztd0J`X7a&m8L-wjQwY&4mFt*mV~090HawM5-H-GZ-+3zd1^4qzr8+fX^%y zuy4Ux>QYD-UW)x#IdqCefsD$JLTky9c6pI2K3f)xQjtY z(bSt`@CFYoL8otGABlxeVQ8A8qmlbn>Dz#BFZooR@d4b zfXf1p06tYY5hIW&)<7(lA{Cw4@#qPar07-!-IoUx>Gu<6DBxIt2a}b6%?ZGefyieY zntAZuoVc{d8M=8cLL|&ccGX)45M?OY5r@r*S|k5wJOK@uU~nV!inCLaVLY^2 z^cun!-SscCBNl1kkIc-z3qFGxi_@k?RdEW&B?{O!*rsMw5pQI&3n&s1JWSw3mZHd7&WhXg$Y7(m zld`+%u;0t+Z}Md8?IA8C$ig9SrtOVY6ry)PRFX#0Cuf!JBlvJlVps|_65+F(BQip! zCR4aclgO&c^mT+u!lnCHvz5?o4Yb<)hW~os>smaQPdzkcE{sb3G%mO~n%0H6eFt0T zhzeEDJK=^xR%LFu)x;4IK5HblhptQ9mCoK}{2@gjAZ$QlQVt9_`4C9yFS$}b{imS^ zF1k2XIOV7z2wnrFi!mN<#S0dRAb=NW)fu-)+WhGwyjK(q-k^$;C5>EjN^@ zo8L|X>WDG&_x9(1M^Ky_bv@%G*bud?j9TwQZET-BI70+woBh4UdVlE^)59|p{{bpG zrvIFaH}J!L0*lYfN19iVyD;EipCW9P^)>7Bebaz}%pgA5pc`qkzj%q8qbrj@;-3t1n|a(tuxPR#2m;6LxSg(R^^m->L7+B0;_ZY8C)ef?-xDK&Yf30nAhS9 zISdcc4V>3KsAB_bp!ir{x!RMmm36%%+1RS-_*)?+k3&pfg_zBTm>*T;`Wb>d)*{5p zOu?26H0MOq!Nz={W(Og-#L#1fp@rp(=Cz$zakrx}Ax|rcqOw%845fV;R4oAFrWNLH z9_Ha3<{22~6%*#29;Sz9q*mo*ukjJOsot-`JPr^6t6?V(!aSO&O4o8ylS7=I@+STi zFL@_m^aH6eCm2~69+e%gR~>%(ad>olc=YVj>9^rAwPC*PVV8^F_U?wq*M^@pk4OlN zNPN6xr4=4x9{z#&U*eI9tokA$qbizf4#Sm}QY=s6ixi7Qd?8$1Fz~_II8jSw~G=hPCDQFW1@@IB%g(^jCd_G zMOR9DBMRSDWj_{u;+!{n5WSLiYC`r*b9?j)uW+ZRD?Po@H&o92XC6J0e&$`f^CV}A z`P^c7z0>XbN%q^?GoKHtW)9BGb-#RHS^7$A^{ruyq6BB|`S+X$i;vaxUC!>2^vO7tvvH-lyyke036L}RenW`m)&xnjR=d(KK%`0)Pac6&OXi9(VBz%M8eNmAY(XaXh%-e zFGMH}9>Yp>`gK0F!_9p6JR-#yU{d%U$u}2BE*{%8#BHPN;G#W*U8M2N$&YT@q--d_ z)(}i~I`7044fOy>QcwWdOOZn7)HEZk45^{_5f@m9^j*XW0_8L#CxZr4*3M4d&E^1) zM+_kj%$&!DJ6C=~QhG|As6Iw^k3BE*eyf)AH8O1deu&9M(X>%-|!TB08I|? zflC0S-zg3+?%H22hXdm0GcmgvBX9wL6fxl@RGf{;-p=?&LNcT^)=1I71`{xEJU(Qx9snTF1B5w;&}>`MqYUB`YwS+OL>w}H>yceD5P5#p4jHb^ zUEhodnaI?`Lats$JT1z;*o@!=A<}%PSH1Tmneenos<}Ag2?7~6v%~9K<}BOi5wR%m zKA$JupDuX#+Bubuy1w+k2j^D4tt*ZcE7+B4Mr|lPFIV^OivGT#JXXc2Dz-&!s=TT( zPTE-czNt#!Xb7d}eV|OO!fEIP0B1hyPi1!lIOWyvb~XTB+z7-(+UWp-XlyZnE6wQS zEG*W*M1Lqi!NLd&b&5dh0oRak*X-lu8SJ%|Q1-9N(#XB#CvNkav(+BEJKL=h{GTNq z7O)@gJad_-=8TeUGnyQmZPAN(dn4~zk<>T6^cq*bQ+r2OKR!s>T>ZIcu*Mq95&C6# z_nU>fr_u9m9bVv4p15=im0m>MHo?e@mKExla{Juoh~jQr7s`Cc(EZrq{b(h{ zo7YnRsx{Z=8LPJ#lJ8%31<-T=Fko!*AA)hp0Dd)@TmfD{)j)|sm&y}mkP<*3>$6t? zCS0dL;*|yGPeKAef4atzAxgh{g*ub9!4Jb%|Z@5(5@8e>&pS;>@E|nl#5>at(cKqu<8&Ce_+Sc?3HdoqbC6=4+tX8jF`SIA~ zSNAk%@GP=?zGoi$jEbIm`hYPihOL-Qvlq712$Ly+HFG01m zMd3JWV3W`vuvVlr&Z+`WEA(eHD~bv2!klUGgTQ9*Hi<;@*g^5=q3Az15| zxfHM(i-c^d>`|rRAYyp9owO^!M<9VW$_7LYDR6-3D07U*-XxL0;Wz;<>D~b$l_ZFo zhc(pa%7Dc#3nUxJ%2BMggG#R#DU1O~1ss#>y#SAZI1ZxIY&4g&3(dMDm*@XgH0CSjy81FmPK_Nw=(JEKGMYL<|7m zDG(wTE|MW^^bpMW4Ie1eN|LMUnO-<4OJRQjWrQ6yof!a)R(B~H0mn^H#8zz;(v>Hz z%G&>7A>UW%kpeTKdeCCM!d;B)`Jozv$05%S$-y9{!vJ2lTK2}2Si$w z=HLfYO6n+rW(&>orVvNm-SA+d950vRU6fG|-R%||*^=1^e|>!RkKmtY zj_JDPNt$2AHtLZc;*nY(pOAu_ zNVpwzXeH>G0)I9V+EpTR=ZXiFe>A-u`v*W+ew&xtred^XKpDd!IKd z@7*4{y_VE^^)p|F;V^gg>C>MjKa_+gm+Cn$9vAbUlZ}WQwl3`5{F}X~sAJS;8)&${ zbbq8fCh3{=kHspB)DL}uyG=hoMOAD{2V?trFS_dfN__F?t2(=am+Nl#o7ep>XcmsFM zz#q=RT)m7}Kbl{7&UKI&kRMP#Jz~2K<4d}{c>Nq3XT5wvfk#LoSV%1;oxML&nwVU_ zBWp?JOc@Yx`B*(z%lh;)smS-!i+;n%*i7pn%dC{$A?{h7!@vWXrE4`CAk5(HYiVC7 zVr#zZ@)#!q8T-$=y4OaAhyOSh+%n&g%WJN};1&t!TIG|-%u1GAf7-m~>U$@dEf~(3Y zhcFb$Tx$$tKq0ok(2=6OW+@{quSWxkLI=TI)vBgcD=up_tcThRNDew=#T6vOBPr}K zXUDXXVGuK4%IZCmQy_q(77L{5V3iRv>?w@L7bE%JN@i^UTrnuZEbzTCtM#!S_I9Xx zW}x-roCuU+kWBsE>xdb##9)e4p;SfmyxkZp#gL-SK`cgGj*JY5ERsi*AUwBT+bs^R zErNyK4q)E~EvJB`_13O0!f*w!=gU z8c;&SGzTp*!T2{|5#fAAT&S6nwP49-1-!K)4fHG;Bn7pupLVnxgNP(Q6IukBnUk>< zgQCDtG6AG%3X!?{*@8$}Otuo_xgpb5elD_9afWQjv=XbykzOO~XM#nO?PLs{bctka zW}d!tgRX5;DEN~pks|I-mIhqSi0pv?Ws1ruNYk*~kYI_{qF5MOVP;TrxX(gW)pp3b zq!|o21*B^XK9B&PGWL+6QLLYUrLa?`K9)zzAtF9?(i0Sm6{}d(yNFS;RIrlV?vR3J zkrh`Rmkikb`9Mgaje>TVZ00*H&2iEFI&miDRnN3*+_0{r_#u5CGoOJknW}b}!EOd9 zRTlr^e5QlXqODG(p0ny zg^2R-DLgtUgQ3_dQFnVwRXQz`2Eiv&QDI&x^7oqa!M4_6@*>Gpi)eBsD@!GpETQg^ z;y{&Yvz86DmK}pga(X8g9Pcu^aa%1*Y|7eWntDdPT#+7**=@3#CL3KD6`CMl_8rhI zx6YaO;C^EjA17<%6{^-VZS2t?T@`YK0Fq&VWQd^2NHu)3b;27<;ThD$`4dXhL!ve; z?_*Vd?*>GZ)uhf_noUp^g`HAly^VDX$$dGGMU5AexL!$dn&;JUU@1HbWk1`@V=gEyLrX*%o<| z8Cd`>?b7<;+)UNBsSwA075%uB>vd!8NTCdU&`=Vr4juFegUFpfb>I&=`j?7K8Cd)S zQSgbv>U(q=v!||H|FInkX`i2pyb^WsVx#1#Y72(78GHy?X>CR;_Lv#KrP#=_F!x9i zRbQ;=^H@9KWtCn}S<@zD?nI}0CsaFvxE$Ksj%eR95SsQ&jc?1dRH3r9vXxI&d6^t70#1W@< zo+4w4wFv{@pn)^G-dGwLX*4()OffrvXqs9U(ONI5vy#79y55CIZXu-})fo`TDwf~& zdCK8n*CWtD(^xF~kF^Y4)j$yaV(^JE4OEp$fn6u>PgrUgS-B~x;%NgR;gC;mFU!ZM zGUwUqBGI>?=1yw(R~KsSw6q)Z)W6{msGa9Ba?wx*Jiufd{dcWMH3&-GG^*O17f`j40w3X6^rV1ZYW&qN$AE#7)E z`S#P)QTIF9znrwGVlFyf^B3W$2vU(9LQe#)+Kov-}l%a$43cO85 z27bv?JgPdxF<`mj0(sLW>vgivyo4x?EOsO4Nb*msFODWt18XTZunU$Lad7-ad8vPoQPG@ml3;<(mbE|8y5&_;v5te()vR7@=bn z_?=C(yXfRjW&{71XJ6Ny4!ES$?^0H1V|G5yjs|(=|I)Ok%g*1)q{mA+ zDO062&aT`VI}TC0oU0N+-Qs(-d1F*-C@%Uzocd#39rwwJD;sv9)`-B3eBmy6y&^q} zJNij^s>DP4PMi6`caC1*(ZlI3*=!z_<1@_BGphSwcsc%Ajh=CbUR#Tvi5|Par2mfT zrnl+1Ug�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 azBoLvJbTZ` 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

mj?Pm@ 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%0DUr-1pZ!pRn*z`JkU6|E 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 trait (from [rust-mcp-sdk]) for generating unique identifiers. +Various implementations of the IdGenerator trait (from [rust-mcp-sdk](https://github.com/rust-mcp-stack/rust-mcp-sdk)) for generating unique identifiers. | **🧩 All ID generators in this crate can be used as `SessionId` generators in [rust-mcp-sdk](https://github.com/rust-mcp-stack/rust-mcp-sdk)).** diff --git a/crates/rust-mcp-extra/examples/common/handler.rs b/crates/rust-mcp-extra/examples/common/handler.rs new file mode 100644 index 0000000..5fc0714 --- /dev/null +++ b/crates/rust-mcp-extra/examples/common/handler.rs @@ -0,0 +1,47 @@ +use std::sync::Arc; + +use async_trait::async_trait; +use rust_mcp_sdk::{ + mcp_server::ServerHandler, + schema::{ + schema_utils::CallToolError, CallToolRequest, CallToolResult, ListToolsRequest, + ListToolsResult, RpcError, + }, + McpServer, +}; + +use crate::common::tool::ShowAuthInfo; + +pub struct McpServerHandler; +#[async_trait] +impl ServerHandler for McpServerHandler { + // Handle ListToolsRequest, return list of available tools as ListToolsResult + async fn handle_list_tools_request( + &self, + _request: ListToolsRequest, + _runtime: Arc, + ) -> std::result::Result { + Ok(ListToolsResult { + meta: None, + next_cursor: None, + tools: vec![ShowAuthInfo::tool()], + }) + } + + /// Handles incoming CallToolRequest and processes it using the appropriate tool. + async fn handle_call_tool_request( + &self, + request: CallToolRequest, + runtime: Arc, + ) -> std::result::Result { + if request.params.name.eq(&ShowAuthInfo::tool_name()) { + let tool = ShowAuthInfo::default(); + tool.call_tool(runtime.auth_info_cloned().await) + } else { + Err(CallToolError::from_message(format!( + "Tool \"{}\" does not exists or inactive!", + request.params.name, + ))) + } + } +} diff --git a/crates/rust-mcp-extra/examples/common/mod.rs b/crates/rust-mcp-extra/examples/common/mod.rs new file mode 100644 index 0000000..b271812 --- /dev/null +++ b/crates/rust-mcp-extra/examples/common/mod.rs @@ -0,0 +1,3 @@ +pub mod handler; +pub mod tool; +pub mod utils; diff --git a/crates/rust-mcp-extra/examples/common/tool.rs b/crates/rust-mcp-extra/examples/common/tool.rs new file mode 100644 index 0000000..1d395d5 --- /dev/null +++ b/crates/rust-mcp-extra/examples/common/tool.rs @@ -0,0 +1,25 @@ +use rust_mcp_sdk::{ + auth::AuthInfo, + macros::{mcp_tool, JsonSchema}, + schema::{schema_utils::CallToolError, CallToolResult, TextContent}, +}; + +//*******************************// +// Show Authentication Info // +//*******************************// +#[mcp_tool( + name = "show_auth_info", + description = "Shows current user authentication info in json format" +)] +#[derive(Debug, ::serde::Deserialize, ::serde::Serialize, JsonSchema, Default)] +pub struct ShowAuthInfo {} +impl ShowAuthInfo { + pub fn call_tool(&self, auth_info: Option) -> Result { + let auth_info_json = serde_json::to_string_pretty(&auth_info).map_err(|err| { + CallToolError::from_message(format!("Undable to display auth info as string :{err}")) + })?; + Ok(CallToolResult::text_content(vec![TextContent::from( + auth_info_json, + )])) + } +} diff --git a/crates/rust-mcp-extra/examples/common/utils.rs b/crates/rust-mcp-extra/examples/common/utils.rs new file mode 100644 index 0000000..6889b56 --- /dev/null +++ b/crates/rust-mcp-extra/examples/common/utils.rs @@ -0,0 +1,31 @@ +use rust_mcp_sdk::schema::{ + Implementation, InitializeResult, ServerCapabilities, ServerCapabilitiesTools, + LATEST_PROTOCOL_VERSION, +}; +use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; + +pub fn create_server_info(server_name: &str) -> InitializeResult { + InitializeResult { + server_info: Implementation { + name: server_name.to_string(), + version: "0.1.0".to_string(), + title: Some(server_name.to_string()), + }, + capabilities: ServerCapabilities { + tools: Some(ServerCapabilitiesTools { list_changed: None }), + ..Default::default() + }, + meta: None, + instructions: None, + protocol_version: LATEST_PROTOCOL_VERSION.to_string(), + } +} + +pub fn enable_tracing() { + tracing_subscriber::registry() + .with( + tracing_subscriber::EnvFilter::try_from_default_env().unwrap_or_else(|_| "info".into()), + ) + .with(tracing_subscriber::fmt::layer()) + .init(); +} diff --git a/crates/rust-mcp-extra/examples/keycloak-auth.rs b/crates/rust-mcp-extra/examples/keycloak-auth.rs new file mode 100644 index 0000000..b4b191b --- /dev/null +++ b/crates/rust-mcp-extra/examples/keycloak-auth.rs @@ -0,0 +1,47 @@ +mod common; +use crate::common::{ + handler::McpServerHandler, + utils::{create_server_info, enable_tracing}, +}; +use rust_mcp_extra::auth_provider::keycloak::{KeycloakAuthOptions, KeycloakAuthProvider}; +use rust_mcp_sdk::{ + error::SdkResult, + mcp_server::{hyper_server, HyperServerOptions}, +}; +use std::{env, sync::Arc}; + +#[tokio::main] +async fn main() -> SdkResult<()> { + enable_tracing(); + let server_details = create_server_info("Keycloak Oauth Test MCP Server"); + + let handler = McpServerHandler {}; + + let auth_provider = KeycloakAuthProvider::new(KeycloakAuthOptions { + keycloak_base_url: env::var("AUTH_SERVER") + .unwrap_or("http://localhost:8080/realms/master".to_string()), + mcp_server_url: "http://localhost:3000".to_string(), + resource_name: Some("Keycloak Oauth Test MCP Server".to_string()), + required_scopes: Some(vec!["mcp:tools"]), + client_id: env::var("CLIENT_ID").ok(), + client_secret: env::var("CLIENT_SECRET").ok(), + token_verifier: None, + resource_documentation: None, + })?; + + let server = hyper_server::create_server( + server_details, + handler, + HyperServerOptions { + host: "localhost".to_string(), + port: 3000, + custom_streamable_http_endpoint: Some("/".to_string()), + auth: Some(Arc::new(auth_provider)), // enable authentication + sse_support: false, + ..Default::default() + }, + ); + + server.start().await?; + Ok(()) +} diff --git a/crates/rust-mcp-extra/examples/scalekit-auth.rs b/crates/rust-mcp-extra/examples/scalekit-auth.rs new file mode 100644 index 0000000..8fd625f --- /dev/null +++ b/crates/rust-mcp-extra/examples/scalekit-auth.rs @@ -0,0 +1,47 @@ +mod common; +use crate::common::{ + handler::McpServerHandler, + utils::{create_server_info, enable_tracing}, +}; +use rust_mcp_extra::auth_provider::scalekit::{ScalekitAuthOptions, ScalekitAuthProvider}; +use rust_mcp_sdk::{ + error::SdkResult, + mcp_server::{hyper_server, HyperServerOptions}, +}; +use std::{env, sync::Arc}; + +#[tokio::main] +async fn main() -> SdkResult<()> { + enable_tracing(); + let server_details = create_server_info("Scalekit Oauth Test MCP Server"); + + let handler = McpServerHandler {}; + + let auth_provider = ScalekitAuthProvider::new(ScalekitAuthOptions { + mcp_server_url: "http://127.0.0.1:3000/mcp".to_string(), + required_scopes: Some(vec!["profile"]), + token_verifier: None, + resource_name: Some("Scalekit Oauth Test MCP Server".to_string()), + resource_documentation: None, + environment_url: env::var("ENVIRONMENT_URL") + .expect("Please set 'ENVIRONMENT_URL' evnrionment variable and try again."), + resource_id: env::var("RESOURCE_ID") + .expect("Please set 'RESOURCE_ID' evnrionment variable and try again."), + }) + .await?; + + let server = hyper_server::create_server( + server_details, + handler, + HyperServerOptions { + host: "127.0.0.1".to_string(), + port: 3000, + auth: Some(Arc::new(auth_provider)), // enable authentication + sse_support: false, + ..Default::default() + }, + ); + + server.start().await?; + Ok(()) +} diff --git a/crates/rust-mcp-extra/examples/workos-auth.rs b/crates/rust-mcp-extra/examples/workos-auth.rs new file mode 100644 index 0000000..01d980b --- /dev/null +++ b/crates/rust-mcp-extra/examples/workos-auth.rs @@ -0,0 +1,44 @@ +mod common; +use crate::common::{ + handler::McpServerHandler, + utils::{create_server_info, enable_tracing}, +}; +use rust_mcp_extra::auth_provider::work_os::{WorkOSAuthOptions, WorkOsAuthProvider}; +use rust_mcp_sdk::{ + error::SdkResult, + mcp_server::{hyper_server, HyperServerOptions}, +}; +use std::{env, sync::Arc}; + +#[tokio::main] +async fn main() -> SdkResult<()> { + enable_tracing(); + let server_details = create_server_info("Workos Oauth Test MCP Server"); + + let handler = McpServerHandler {}; + + let auth_provider = WorkOsAuthProvider::new(WorkOSAuthOptions { + authkit_domain: env::var("AUTH_SERVER") + .unwrap_or("https://stalwart-opera-85-staging.authkit.app".to_string()), + mcp_server_url: "http://127.0.0.1:3000/mcp".to_string(), + required_scopes: Some(vec!["openid", "profile"]), + resource_name: Some("Workos Oauth Test MCP Server".to_string()), + resource_documentation: None, + token_verifier: None, + })?; + + let server = hyper_server::create_server( + server_details, + handler, + HyperServerOptions { + host: "127.0.0.1".to_string(), + port: 3000, + auth: Some(Arc::new(auth_provider)), // enable authentication + sse_support: false, + ..Default::default() + }, + ); + + server.start().await?; + Ok(()) +} diff --git a/crates/rust-mcp-extra/src/auth_provider.rs b/crates/rust-mcp-extra/src/auth_provider.rs new file mode 100644 index 0000000..ee826e9 --- /dev/null +++ b/crates/rust-mcp-extra/src/auth_provider.rs @@ -0,0 +1,3 @@ +pub mod keycloak; +pub mod scalekit; +pub mod work_os; diff --git a/crates/rust-mcp-extra/src/auth_provider/keycloak.rs b/crates/rust-mcp-extra/src/auth_provider/keycloak.rs new file mode 100644 index 0000000..497ed64 --- /dev/null +++ b/crates/rust-mcp-extra/src/auth_provider/keycloak.rs @@ -0,0 +1,290 @@ +use crate::token_verifier::{ + GenericOauthTokenVerifier, TokenVerifierOptions, VerificationStrategies, +}; +use async_trait::async_trait; +use bytes::Bytes; +use http::{header::CONTENT_TYPE, StatusCode}; +use http_body_util::{BodyExt, Full}; +use rust_mcp_sdk::{ + auth::{ + create_discovery_endpoints, AuthInfo, AuthMetadataBuilder, AuthProvider, + AuthenticationError, AuthorizationServerMetadata, OauthEndpoint, + OauthProtectedResourceMetadata, OauthTokenVerifier, + }, + error::McpSdkError, + mcp_http::{middleware::CorsMiddleware, GenericBody, GenericBodyExt, Middleware}, + mcp_server::{ + error::{TransportServerError, TransportServerResult}, + join_url, McpAppState, + }, +}; +use std::{collections::HashMap, sync::Arc}; + +static SCOPES_SUPPORTED: &[&str] = &[ + "openid", + "acr", + "basic", + "web-origins", + "email", + "mcp:tools", + "address", + "profile", + "phone", + "roles", + "microprofile-jwt", + "service_account", + "offline_access", + "organization", +]; + +/// Configuration options for the Keycloak OAuth provider. +pub struct KeycloakAuthOptions<'a> { + /// Base URL of the Keycloak server (e.g. https://keycloak.example.com) + pub keycloak_base_url: String, + /// Public base URL of this MCP server (used for discovery endpoints) + pub mcp_server_url: String, + /// Scopes that must be present in the access token + pub required_scopes: Option>, + /// Client ID for confidential client (required for token introspection) + pub client_id: Option, + /// Client secret for confidential client (required for token introspection) + pub client_secret: Option, + /// Optional custom token verifier + pub token_verifier: Option>, + /// Human-readable name of the protected resource (optional, shown in discovery) + pub resource_name: Option, + /// Documentation URL for this resource (optional) + pub resource_documentation: Option, +} + +/// Keycloak integration implementing `AuthProvider` for MCP servers. +/// +/// This provider makes your MCP server compatible with clients that expect standard +/// OAuth2/OpenID Connect discovery endpoints (authorization server metadata and +/// protected resource metadata) when using Keycloak as the identity provider. +/// +/// It supports multiple token verification strategies with the following precedence: +/// +/// 1. JWKs-based verification (always enabled) – validates JWT signature, issuer, expiry, etc. +/// 2. Token Introspection (if client_id + client_secret provided) – active validation against Keycloak +/// 3. UserInfo endpoint validation (fallback when `openid` scope is required but no introspection credentials) +/// +pub struct KeycloakAuthProvider { + auth_server_meta: AuthorizationServerMetadata, + protected_resource_meta: OauthProtectedResourceMetadata, + endpoint_map: HashMap, + protected_resource_metadata_url: String, + token_verifier: Box, +} + +impl KeycloakAuthProvider { + /// Creates a new KeycloakAuthProvider instance. + /// + /// This method configures OAuth2/OpenID Connect discovery metadata and selects + /// the best available token verification strategy: + /// + /// ### Verification Strategy Priority & Security Considerations + /// + /// | Strategy | When Used | Security Level | Notes | + /// |------------------|---------------------------------------------------|----------------|-------| + /// | JWKs (local) | Always | High | Validates signature, `iss`, `exp`, `nbf`, etc. No network call. | + /// | Introspection | When `client_id` + `client_secret` are provided | Highest | Active validation with Keycloak. Detects revoked/expired tokens immediately. Recommended for production. | + /// | UserInfo | Fallback when `openid` scope is required but no introspection credentials | Medium | Validates token by calling `/userinfo`. Less secure than introspection (some IdPs accept invalid tokens). | + /// + /// Warning: If neither introspection nor `openid` scope is configured, only local JWT validation occurs. + /// This means revoked tokens may still be accepted until they expire. + /// + /// Recommendation: Always provide `client_id` and `client_secret` in production for full revocation support. + /// + pub fn new(mut options: KeycloakAuthOptions) -> Result { + let (endpoint_map, protected_resource_metadata_url) = + create_discovery_endpoints(&options.mcp_server_url)?; + + let required_scopes = options.required_scopes.take(); + let scopes_supported = required_scopes.clone().unwrap_or(SCOPES_SUPPORTED.to_vec()); + + let mut builder = AuthMetadataBuilder::new(&options.mcp_server_url) + .issuer(&options.keycloak_base_url) + .authorization_servers(vec![&options.keycloak_base_url]) + .authorization_endpoint("/protocol/openid-connect/auth") + .introspection_endpoint("/protocol/openid-connect/token/introspect") + .registration_endpoint("/clients-registrations/openid-connect") + .token_endpoint("/protocol/openid-connect/token") + .revocation_endpoint("/protocol/openid-connect/revoke") + .jwks_uri("/protocol/openid-connect/certs") + .scopes_supported(scopes_supported); + + let has_openid_scope = + matches!(required_scopes.as_ref(), Some(scopes) if scopes.contains(&"openid")); + + if let Some(scopes) = required_scopes { + builder = builder.reqquired_scopes(scopes) + } + if let Some(resource_name) = options.resource_name.as_ref() { + builder = builder.resource_name(resource_name) + } + if let Some(resource_documentation) = options.resource_documentation.as_ref() { + builder = builder.service_documentation(resource_documentation) + } + + let (auth_server_meta, protected_resource_meta) = builder.build()?; + + let Some(jwks_uri) = auth_server_meta.jwks_uri.as_ref().map(|s| s.to_string()) else { + return Err(McpSdkError::Internal { + description: "jwks_uri is not defined!".to_string(), + }); + }; + + let mut strategies = Vec::with_capacity(2); + strategies.push(VerificationStrategies::JWKs { jwks_uri }); + + if let (Some(client_id), Some(client_secret), Some(introspection_uri)) = ( + options.client_id.take(), + options.client_secret.take(), + auth_server_meta.introspection_endpoint.as_ref(), + ) { + strategies.push(VerificationStrategies::Introspection { + introspection_uri: introspection_uri.to_string(), + client_id, + client_secret, + use_basic_auth: true, + extra_params: Some(vec![("token_type_hint", "access_token")]), + }); + } else if has_openid_scope { + let userinfo_uri = join_url( + &auth_server_meta.issuer, + "/protocol/openid-connect/userinfo", + ) + .map_err(|err| McpSdkError::Internal { + description: format!("invalid userinfo url :{err}"), + })? + .to_string(); + + strategies.push(VerificationStrategies::UserInfo { userinfo_uri }) + } else { + tracing::warn!("Keycloak token verification is missing both Introspection and UserInfo strategies. Please provide client_id and client_secret, or ensure openid is included as a required scope.") + }; + + let token_verifier: Box = match options.token_verifier { + Some(verifier) => verifier, + None => Box::new(GenericOauthTokenVerifier::new(TokenVerifierOptions { + strategies, + validate_audience: None, + validate_issuer: Some(options.keycloak_base_url.clone()), + cache_capacity: None, + })?), + }; + + Ok(Self { + endpoint_map, + protected_resource_metadata_url, + token_verifier, + auth_server_meta, + protected_resource_meta, + }) + } + + /// Helper to build JSON response for authorization server metadata with CORS. + fn handle_authorization_server_metadata( + response_str: String, + ) -> TransportServerResult> { + let body = Full::new(Bytes::from(response_str)) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + http::Response::builder() + .status(StatusCode::OK) + .header(CONTENT_TYPE, "application/json") + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } + + /// Helper to build JSON response for protected resource metadata with permissive CORS. + fn handle_protected_resource_metadata( + response_str: String, + ) -> TransportServerResult> { + use http_body_util::BodyExt; + + let body = Full::new(Bytes::from(response_str)) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + http::Response::builder() + .status(StatusCode::OK) + .header(CONTENT_TYPE, "application/json") + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } +} + +#[async_trait] +impl AuthProvider for KeycloakAuthProvider { + /// Returns the map of supported OAuth discovery endpoints. + fn auth_endpoints(&self) -> Option<&HashMap> { + Some(&self.endpoint_map) + } + + /// Handles incoming requests to OAuth metadata endpoints. + async fn handle_request( + &self, + request: http::Request<&str>, + state: Arc, + ) -> Result, TransportServerError> { + let Some(endpoint) = self.endpont_type(&request) else { + return http::Response::builder() + .status(StatusCode::NOT_FOUND) + .body(GenericBody::empty()) + .map_err(|err| TransportServerError::HttpError(err.to_string())); + }; + + // return early if method is not allowed + if let Some(response) = self.validate_allowed_methods(endpoint, request.method()) { + return Ok(response); + } + + match endpoint { + OauthEndpoint::AuthorizationServerMetadata => { + let json_payload = serde_json::to_string(&self.auth_server_meta) + .map_err(|err| TransportServerError::HttpError(err.to_string()))?; + let cors = &CorsMiddleware::default(); + cors.handle( + request, + state, + Box::new(move |_req, _state| { + Box::pin( + async move { Self::handle_authorization_server_metadata(json_payload) }, + ) + }), + ) + .await + } + OauthEndpoint::ProtectedResourceMetadata => { + let json_payload = serde_json::to_string(&self.protected_resource_meta) + .map_err(|err| TransportServerError::HttpError(err.to_string()))?; + + let cors = &CorsMiddleware::default(); + cors.handle( + request, + state, + Box::new(move |_req, _state| { + Box::pin( + async move { Self::handle_protected_resource_metadata(json_payload) }, + ) + }), + ) + .await + } + _ => Ok(GenericBody::create_404_response()), + } + } + + /// Verifies an access token using JWKs and optional UserInfo validation. + /// + /// Returns authenticated `AuthInfo` on success. + async fn verify_token(&self, access_token: String) -> Result { + self.token_verifier.verify_token(access_token).await + } + + /// Returns the full URL to the protected resource metadata document. + fn protected_resource_metadata_url(&self) -> Option<&str> { + Some(self.protected_resource_metadata_url.as_str()) + } +} diff --git a/crates/rust-mcp-extra/src/auth_provider/scalekit.rs b/crates/rust-mcp-extra/src/auth_provider/scalekit.rs new file mode 100644 index 0000000..a540db7 --- /dev/null +++ b/crates/rust-mcp-extra/src/auth_provider/scalekit.rs @@ -0,0 +1,273 @@ +use crate::token_verifier::{ + GenericOauthTokenVerifier, TokenVerifierOptions, VerificationStrategies, +}; +use async_trait::async_trait; +use bytes::Bytes; +use http::{header::CONTENT_TYPE, StatusCode}; +use http_body_util::{BodyExt, Full}; +use rust_mcp_sdk::{ + auth::{ + create_discovery_endpoints, AuthInfo, AuthMetadataBuilder, AuthProvider, + AuthenticationError, AuthorizationServerMetadata, OauthEndpoint, + OauthProtectedResourceMetadata, OauthTokenVerifier, + }, + error::McpSdkError, + mcp_http::{middleware::CorsMiddleware, GenericBody, GenericBodyExt, Middleware}, + mcp_server::{ + error::{TransportServerError, TransportServerResult}, + join_url, McpAppState, + }, +}; +use std::{collections::HashMap, sync::Arc, vec}; +use url::Url; + +/// Configuration options for the [`ScalekitAuthProvider`]. +/// +/// These values come from the Scalekit dashboard and MCP server configuration. +pub struct ScalekitAuthOptions<'a> { + /// Base Scalekit environment URL. + /// This value can be found in the Scalekit dashboard, located in the Settings section + /// + /// If protocol is missing (no `http://` or `https://`), `https://` is automatically added. + pub environment_url: String, + /// This value can be found in the Scalekit dashboard, located in MCp Servers + pub resource_id: String, + /// Public-facing MCP server base URL. + pub mcp_server_url: String, + /// Optional list of required OAuth scopes for this resource. + pub required_scopes: Option>, + /// Human-readable resource name for documentation/metadata. + pub resource_name: Option, + /// Human-readable resource documentation URL or content identifier. + pub resource_documentation: Option, + /// Optional custom token verifier. + /// If omitted, a default JWK-based [`GenericOauthTokenVerifier`] is created. + pub token_verifier: Option>, +} + +/// MCP OAuth provider implementation for Scalekit. +pub struct ScalekitAuthProvider { + auth_server_meta: AuthorizationServerMetadata, + protected_resource_meta: OauthProtectedResourceMetadata, + endpoint_map: HashMap, + protected_resource_metadata_url: String, + token_verifier: Box, +} + +impl ScalekitAuthProvider { + /// Creates a new [`ScalekitAuthProvider`] from configuration options. + /// + /// This method: + /// - Normalizes the environment URL protocol + /// - Builds OAuth discovery URLs + /// - Pulls authorization server metadata + /// - Builds protected resource metadata + /// - Instantiates a JWK-based token verifier if no custom verifier is provided + /// + /// # Errors + /// Returns [`McpSdkError`] if: + /// - URLs are invalid + /// - Metadata discovery fails + /// - JWK verifier initialization fails + pub async fn new<'a>(mut options: ScalekitAuthOptions<'a>) -> Result { + // Normalize environment URL and add https:// if needed + let environment_url = if options.environment_url.starts_with("http://") + || options.environment_url.starts_with("https://") + { + &options.environment_url + } else { + &format!("https://{}", options.environment_url) + }; + + let issuer = Url::parse(environment_url).map_err(|err| McpSdkError::Internal { + description: format!("invalid userinfo url :{err}"), + })?; + + // Build discovery document URL for this resource + let discovery_url = join_url( + &issuer, + &format!( + "/.well-known/oauth-authorization-server/resources/{}", + options.resource_id + ), + ) + .map_err(|err| McpSdkError::Internal { + description: format!("invalid userinfo url :{err}"), + })?; + + let (endpoint_map, protected_resource_metadata_url) = + create_discovery_endpoints(&options.mcp_server_url)?; + + let required_scopes: Vec = options + .required_scopes + .take() + .unwrap_or_default() + .iter() + .map(|s| s.to_string()) + .collect(); + + let mut builder = AuthMetadataBuilder::from_discovery_url( + discovery_url.as_str(), + options.mcp_server_url, + required_scopes.clone(), + ) + .await + .unwrap(); + + if let Some(resource_name) = options.resource_name.as_ref() { + builder = builder.resource_name(resource_name) + } + + if let Some(resource_documentation) = options.resource_documentation.as_ref() { + builder = builder.service_documentation(resource_documentation) + } + + let authorization_servers = + join_url(&issuer, &format!("/resources/{}", options.resource_id)) + .map_err(|err| McpSdkError::Internal { + description: format!("invalid userinfo url :{err}"), + })? + .to_string(); + + builder = builder.authorization_servers(vec![&authorization_servers]); + + if !required_scopes.is_empty() { + builder = builder.reqquired_scopes(required_scopes) + } + if let Some(resource_name) = options.resource_name.as_ref() { + builder = builder.resource_name(resource_name) + } + if let Some(resource_documentation) = options.resource_documentation.as_ref() { + builder = builder.service_documentation(resource_documentation) + } + + let (auth_server_meta, protected_resource_meta) = builder.build()?; + + let Some(jwks_uri) = auth_server_meta.jwks_uri.as_ref().map(|s| s.to_string()) else { + return Err(McpSdkError::Internal { + description: "jwks_uri is not defined!".to_string(), + }); + }; + + let token_verifier: Box = match options.token_verifier { + Some(verifier) => verifier, + None => Box::new(GenericOauthTokenVerifier::new(TokenVerifierOptions { + strategies: vec![VerificationStrategies::JWKs { jwks_uri }], + validate_audience: None, + validate_issuer: Some(issuer.to_string().trim_end_matches("/").to_string()), + cache_capacity: None, + })?), + }; + + Ok(Self { + endpoint_map, + protected_resource_metadata_url, + token_verifier, + auth_server_meta, + protected_resource_meta, + }) + } + + /// Helper to build JSON response for authorization server metadata with CORS. + fn handle_authorization_server_metadata( + response_str: String, + ) -> TransportServerResult> { + let body = Full::new(Bytes::from(response_str)) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + http::Response::builder() + .status(StatusCode::OK) + .header(CONTENT_TYPE, "application/json") + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } + + /// Helper to build JSON response for protected resource metadata with permissive CORS. + fn handle_protected_resource_metadata( + response_str: String, + ) -> TransportServerResult> { + use http_body_util::BodyExt; + + let body = Full::new(Bytes::from(response_str)) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + http::Response::builder() + .status(StatusCode::OK) + .header(CONTENT_TYPE, "application/json") + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } +} + +#[async_trait] +impl AuthProvider for ScalekitAuthProvider { + /// Returns the map of supported OAuth discovery endpoints. + fn auth_endpoints(&self) -> Option<&HashMap> { + Some(&self.endpoint_map) + } + + /// Handles incoming requests to OAuth metadata endpoints. + async fn handle_request( + &self, + request: http::Request<&str>, + state: Arc, + ) -> Result, TransportServerError> { + let Some(endpoint) = self.endpont_type(&request) else { + return http::Response::builder() + .status(StatusCode::NOT_FOUND) + .body(GenericBody::empty()) + .map_err(|err| TransportServerError::HttpError(err.to_string())); + }; + + // return early if method is not allowed + if let Some(response) = self.validate_allowed_methods(endpoint, request.method()) { + return Ok(response); + } + + match endpoint { + OauthEndpoint::AuthorizationServerMetadata => { + let json_payload = serde_json::to_string(&self.auth_server_meta) + .map_err(|err| TransportServerError::HttpError(err.to_string()))?; + let cors = &CorsMiddleware::default(); + cors.handle( + request, + state, + Box::new(move |_req, _state| { + Box::pin( + async move { Self::handle_authorization_server_metadata(json_payload) }, + ) + }), + ) + .await + } + OauthEndpoint::ProtectedResourceMetadata => { + let json_payload = serde_json::to_string(&self.protected_resource_meta) + .map_err(|err| TransportServerError::HttpError(err.to_string()))?; + let cors = &CorsMiddleware::default(); + cors.handle( + request, + state, + Box::new(move |_req, _state| { + Box::pin( + async move { Self::handle_protected_resource_metadata(json_payload) }, + ) + }), + ) + .await + } + _ => Ok(GenericBody::create_404_response()), + } + } + + /// Verifies an access token using JWKs and optional UserInfo validation. + /// + /// Returns authenticated `AuthInfo` on success. + async fn verify_token(&self, access_token: String) -> Result { + self.token_verifier.verify_token(access_token).await + } + + /// Returns the full URL to the protected resource metadata document. + fn protected_resource_metadata_url(&self) -> Option<&str> { + Some(self.protected_resource_metadata_url.as_str()) + } +} diff --git a/crates/rust-mcp-extra/src/auth_provider/work_os.rs b/crates/rust-mcp-extra/src/auth_provider/work_os.rs new file mode 100644 index 0000000..920747c --- /dev/null +++ b/crates/rust-mcp-extra/src/auth_provider/work_os.rs @@ -0,0 +1,272 @@ +//! # WorkOS AuthKit OAuth2 Provider for MCP Servers +//! +//! This module implements an OAuth2 specifically designed to integrate +//! [WorkOS AuthKit](https://workos.com/docs/authkit) as the identity +//! provider (IdP) in an MCP (Model Context Protocol) server ecosystem. +//! +//! It enables your MCP server to: +//! - Expose standard OAuth2/.well-known endpoints +//! - Serve authorization server metadata (`/.well-known/oauth-authorization-server`) +//! - Serve protected resource metadata (custom per MCP) +//! - Verify incoming access tokens using JWKs + UserInfo endpoint validation +//! +//! ## Features +//! +//! - Zero-downtime token verification with cached JWKs +//! - Automatic construction of OAuth2 discovery documents +//! - Built-in CORS support for metadata endpoints +//! - Pluggable into `rust-mcp-sdk`'s authentication system via the `AuthProvider` trait +//! +//! ## Example +//! +//! ```rust,ignore +//! +//! let auth_provider = WorkOsAuthProvider::new(WorkOSAuthOptions { +//! // Your AuthKit app domain (found in WorkOS dashboard) +//! authkit_domain: "https://your-app.authkit.app".to_string(), +//! // Base URL of your MCP server (used to build protected resource metadata URL) +//! mcp_server_url: "http://localhost:3000/mcp".to_string(), +//! })?; +//! +//! // Register in your MCP server +//! let server = hyper_server::create_server( +//! server_details, +//! handler, +//! HyperServerOptions { +//! host: "localhost".to_string(), +//! port: 3000, +//! auth: Some(Arc::new(auth_provider)), +//! ..Default::default() +//! }); +//! ``` +use crate::token_verifier::{ + GenericOauthTokenVerifier, TokenVerifierOptions, VerificationStrategies, +}; +use async_trait::async_trait; +use bytes::Bytes; +use http::{header::CONTENT_TYPE, StatusCode}; +use http_body_util::{BodyExt, Full}; +use rust_mcp_sdk::{ + auth::{ + create_discovery_endpoints, AuthInfo, AuthMetadataBuilder, AuthProvider, + AuthenticationError, AuthorizationServerMetadata, OauthEndpoint, + OauthProtectedResourceMetadata, OauthTokenVerifier, + }, + error::McpSdkError, + mcp_http::{middleware::CorsMiddleware, GenericBody, GenericBodyExt, Middleware}, + mcp_server::{ + error::{TransportServerError, TransportServerResult}, + join_url, McpAppState, + }, +}; +use std::{collections::HashMap, sync::Arc, vec}; + +static SCOPES_SUPPORTED: &[&str] = &["email", "offline_access", "openid", "profile"]; + +/// Configuration options for the WorkOS AuthKit OAuth provider. +pub struct WorkOSAuthOptions<'a> { + pub authkit_domain: String, + pub mcp_server_url: String, + pub required_scopes: Option>, + pub token_verifier: Option>, + pub resource_name: Option, + pub resource_documentation: Option, +} + +/// WorkOS AuthKit integration implementing `AuthProvider` for MCP servers. +/// +/// This provider makes your MCP server compatible with clients that expect standard +/// OAuth2 authorization server and protected resource discovery endpoints when using +/// WorkOS AuthKit as the identity provider. +pub struct WorkOsAuthProvider { + auth_server_meta: AuthorizationServerMetadata, + protected_resource_meta: OauthProtectedResourceMetadata, + endpoint_map: HashMap, + protected_resource_metadata_url: String, + token_verifier: Box, +} + +impl WorkOsAuthProvider { + /// Creates a new `WorkOsAuthProvider` instance. + /// + /// This performs: + /// - Validation and parsing of URLs + /// - Construction of OAuth2 metadata documents + /// - Setup of token verification using JWKs and UserInfo endpoint + /// + /// /// # Example + /// + /// ```rust,ignore + /// use rust_mcp_extra::auth_provider::work_os::{WorkOSAuthOptions, WorkOsAuthProvider}; + /// + /// let auth_provider = WorkOsAuthProvider::new(WorkOSAuthOptions { + /// authkit_domain: "https://your-app.authkit.app".to_string(), + /// mcp_server_url: "http://localhost:3000/mcp".to_string(), + /// })?; + /// + pub fn new(mut options: WorkOSAuthOptions) -> Result { + let (endpoint_map, protected_resource_metadata_url) = + create_discovery_endpoints(&options.mcp_server_url)?; + + let required_scopes = options.required_scopes.take(); + let scopes_supported = required_scopes.clone().unwrap_or(SCOPES_SUPPORTED.to_vec()); + + let mut builder = AuthMetadataBuilder::new(&options.mcp_server_url) + .issuer(&options.authkit_domain) + .authorization_servers(vec![&options.authkit_domain]) + .authorization_endpoint("/oauth2/authorize") + .introspection_endpoint("/oauth2/introspection") + .registration_endpoint("/oauth2/register") + .token_endpoint("/oauth2/token") + .jwks_uri("/oauth2/jwks") + .scopes_supported(scopes_supported); + + if let Some(scopes) = required_scopes { + builder = builder.reqquired_scopes(scopes) + } + if let Some(resource_name) = options.resource_name.as_ref() { + builder = builder.resource_name(resource_name) + } + if let Some(resource_documentation) = options.resource_documentation.as_ref() { + builder = builder.service_documentation(resource_documentation) + } + + let (auth_server_meta, protected_resource_meta) = builder.build()?; + + let Some(jwks_uri) = auth_server_meta.jwks_uri.as_ref().map(|s| s.to_string()) else { + return Err(McpSdkError::Internal { + description: "jwks_uri is not defined!".to_string(), + }); + }; + + let userinfo_uri = join_url(&auth_server_meta.issuer, "oauth2/userinfo") + .map_err(|err| McpSdkError::Internal { + description: format!("invalid userinfo url :{err}"), + })? + .to_string(); + + let token_verifier: Box = match options.token_verifier { + Some(verifier) => verifier, + None => Box::new(GenericOauthTokenVerifier::new(TokenVerifierOptions { + strategies: vec![ + VerificationStrategies::JWKs { jwks_uri }, + VerificationStrategies::UserInfo { userinfo_uri }, + ], + validate_audience: None, + validate_issuer: Some(options.authkit_domain.clone()), + cache_capacity: None, + })?), + }; + + Ok(Self { + endpoint_map, + protected_resource_metadata_url, + token_verifier, + auth_server_meta, + protected_resource_meta, + }) + } + + /// Helper to build JSON response for authorization server metadata with CORS. + fn handle_authorization_server_metadata( + response_str: String, + ) -> TransportServerResult> { + let body = Full::new(Bytes::from(response_str)) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + http::Response::builder() + .status(StatusCode::OK) + .header(CONTENT_TYPE, "application/json") + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } + + /// Helper to build JSON response for protected resource metadata with permissive CORS. + fn handle_protected_resource_metadata( + response_str: String, + ) -> TransportServerResult> { + use http_body_util::BodyExt; + + let body = Full::new(Bytes::from(response_str)) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + http::Response::builder() + .status(StatusCode::OK) + .header(CONTENT_TYPE, "application/json") + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } +} + +#[async_trait] +impl AuthProvider for WorkOsAuthProvider { + /// Returns the map of supported OAuth discovery endpoints. + fn auth_endpoints(&self) -> Option<&HashMap> { + Some(&self.endpoint_map) + } + + /// Handles incoming requests to OAuth metadata endpoints. + async fn handle_request( + &self, + request: http::Request<&str>, + state: Arc, + ) -> Result, TransportServerError> { + let Some(endpoint) = self.endpont_type(&request) else { + return http::Response::builder() + .status(StatusCode::NOT_FOUND) + .body(GenericBody::empty()) + .map_err(|err| TransportServerError::HttpError(err.to_string())); + }; + + // return early if method is not allowed + if let Some(response) = self.validate_allowed_methods(endpoint, request.method()) { + return Ok(response); + } + + match endpoint { + OauthEndpoint::AuthorizationServerMetadata => { + let json_payload = serde_json::to_string(&self.auth_server_meta) + .map_err(|err| TransportServerError::HttpError(err.to_string()))?; + let cors = &CorsMiddleware::default(); + cors.handle( + request, + state, + Box::new(move |_req, _state| { + Box::pin( + async move { Self::handle_authorization_server_metadata(json_payload) }, + ) + }), + ) + .await + } + OauthEndpoint::ProtectedResourceMetadata => { + let json_payload = serde_json::to_string(&self.protected_resource_meta) + .map_err(|err| TransportServerError::HttpError(err.to_string()))?; + let cors = &CorsMiddleware::default(); + cors.handle( + request, + state, + Box::new(move |_req, _state| { + Box::pin( + async move { Self::handle_protected_resource_metadata(json_payload) }, + ) + }), + ) + .await + } + _ => Ok(GenericBody::create_404_response()), + } + } + + /// Verifies an access token using JWKs and optional UserInfo validation. + /// + /// Returns authenticated `AuthInfo` on success. + async fn verify_token(&self, access_token: String) -> Result { + self.token_verifier.verify_token(access_token).await + } + + /// Returns the full URL to the protected resource metadata document. + fn protected_resource_metadata_url(&self) -> Option<&str> { + Some(self.protected_resource_metadata_url.as_str()) + } +} diff --git a/crates/rust-mcp-extra/src/id_generator/snow_flake_id_generator.rs b/crates/rust-mcp-extra/src/id_generator/snow_flake_id_generator.rs index 5ab2cb8..3bea626 100644 --- a/crates/rust-mcp-extra/src/id_generator/snow_flake_id_generator.rs +++ b/crates/rust-mcp-extra/src/id_generator/snow_flake_id_generator.rs @@ -56,7 +56,7 @@ impl SnowflakeIdGenerator { .expect("invalid system time!") .as_millis() as u64; - now - *SHORTER_EPOCH + now.saturating_sub(*SHORTER_EPOCH) } fn next_id(&self) -> u64 { @@ -65,10 +65,10 @@ impl SnowflakeIdGenerator { let last_ts = self.last_timestamp.load(Ordering::Relaxed); let sequence = if timestamp == last_ts { - // same millisecond — increment sequence + // same millisecond - increment sequence let seq = self.sequence.fetch_add(1, Ordering::Relaxed) & 0xFFF; // 12 bits if seq == 0 { - // Sequence overflow — wait for next ms + // Sequence overflow - wait for next ms while timestamp <= last_ts { timestamp = self.current_timestamp(); } diff --git a/crates/rust-mcp-extra/src/lib.rs b/crates/rust-mcp-extra/src/lib.rs index f4a3d0e..d67bfc9 100644 --- a/crates/rust-mcp-extra/src/lib.rs +++ b/crates/rust-mcp-extra/src/lib.rs @@ -1,5 +1,9 @@ +#[cfg(feature = "auth")] +pub mod auth_provider; pub mod http_adaptors; pub mod id_generator; pub mod sqlite; +#[cfg(feature = "auth")] +pub mod token_verifier; pub use rust_mcp_sdk::id_generator::IdGenerator; diff --git a/crates/rust-mcp-extra/src/token_verifier.rs b/crates/rust-mcp-extra/src/token_verifier.rs new file mode 100644 index 0000000..e3b013f --- /dev/null +++ b/crates/rust-mcp-extra/src/token_verifier.rs @@ -0,0 +1,5 @@ +mod generic_token_verifier; +mod jwt_cache; + +pub use generic_token_verifier::*; +pub use jwt_cache::*; diff --git a/crates/rust-mcp-extra/src/token_verifier/generic_token_verifier.rs b/crates/rust-mcp-extra/src/token_verifier/generic_token_verifier.rs new file mode 100644 index 0000000..579807e --- /dev/null +++ b/crates/rust-mcp-extra/src/token_verifier/generic_token_verifier.rs @@ -0,0 +1,869 @@ +use crate::token_verifier::jwt_cache::JwtCache; +use async_lock::RwLock; +use async_trait::async_trait; +use reqwest::{header::AUTHORIZATION, StatusCode}; +use rust_mcp_sdk::{ + auth::{ + decode_token_header, Audience, AuthInfo, AuthenticationError, IntrospectionResponse, + JsonWebKeySet, OauthTokenVerifier, + }, + mcp_http::error_message_from_response, +}; +use serde_json::Value; +use std::{ + collections::HashMap, + time::{Duration, SystemTime}, +}; +use url::Url; + +const JWKS_REFRESH_TIME: Duration = Duration::from_secs(24 * 60 * 60); // re-fetch jwks every 24 hours +const REMOTE_VERIFICATION_INTERVAL: Duration = Duration::from_secs(15 * 60); // 15 minutes +const JWT_CACHE_CAPACITY: usize = 1000; + +struct JwksCache { + last_updated: Option, + jwks: JsonWebKeySet, +} + +/// Supported OAuth token verification strategies. +/// +/// Each variant represents a different method for validating access tokens, +/// depending on what the authorization server exposes or what your application +/// requires. +pub enum VerificationStrategies { + /// Verifies tokens by calling the authorization server's introspection + /// endpoint, as defined in RFC 7662. + /// + /// This method allows the resource server to validate opaque or JWT tokens + /// by sending them to the introspection URI along with its client credentials. + Introspection { + /// The OAuth introspection endpoint. + introspection_uri: String, + /// Client identifier used to authenticate the introspection request. + client_id: String, + /// Client secret used to authenticate the introspection request. + client_secret: String, + /// Indicates whether the OAuth2 client should use HTTP Basic Authentication when + ///calling the token introspection endpoint. + /// if false: client_id and client_secret will be sent in the POST body instead of using Basic Authentication + use_basic_auth: bool, + /// Optional key-value pairs to include as additional parameters in the + /// body of the token introspection request. + /// Example : ("token_type_hint", "access_token") + extra_params: Option>, + }, + /// Verifies JWT access tokens using the authorization server’s JSON Web Key + /// Set (JWKS) endpoint. + /// + /// This strategy allows fully offline signature validation after retrieving + /// the key set, making it efficient for high-throughput services. + JWKs { + /// The JWKS endpoint URL used to retrieve signing keys. + jwks_uri: String, + }, + /// Verifies tokens by querying the OpenID Connect UserInfo endpoint. + /// + /// This strategy is typically used when token validity is tied to the user's + /// profile information or when the resource server relies on OIDC user data + /// for validation. + UserInfo { userinfo_uri: String }, +} + +/// Options for configuring a token verifier. +/// +/// `TokenVerifierOptions` allows specifying one or more strategies for verifying +/// OAuth access tokens. Multiple strategies can be provided; the verifier will +/// attempt them in order until one succeeds or all fail. +pub struct TokenVerifierOptions { + /// The list of token verification strategies to use. + /// Each strategy defines a different method for validating tokens, such as + /// introspection, JWKS signature validation, or querying the UserInfo endpoint. + /// For optimal performance, it is recommended to include JWKS alongside either introspection or UserInfo. + pub strategies: Vec, + /// Optional audience value to validate against the token's `aud` claim. + pub validate_audience: Option, + /// Optional issuer value to validate against the token's `iss` claim. + pub validate_issuer: Option, + /// Optional capacity for the internal cache, used to reduce unnecessary requests during verification. + pub cache_capacity: Option, +} + +#[derive(Default, Debug)] +struct StrategiesOptions { + pub introspection_uri: Option, + pub introspection_basic_auth: bool, + pub introspect_extra_params: Option>, + pub client_id: Option, + pub client_secret: Option, + pub jwks_uri: Option, + pub userinfo_uri: Option, +} + +impl TokenVerifierOptions { + fn unpack(&mut self) -> Result<(StrategiesOptions, bool), AuthenticationError> { + let mut result = StrategiesOptions::default(); + + let mut has_jwks = false; + let mut has_other = false; + + for strategy in self.strategies.drain(0..) { + match strategy { + VerificationStrategies::Introspection { + introspection_uri, + client_id, + client_secret, + use_basic_auth, + extra_params, + } => { + result.introspection_uri = + Some(Url::parse(&introspection_uri).map_err(|err| { + AuthenticationError::ParsingError(format!( + "Invalid introspection uri: {err}", + )) + })?); + result.client_id = Some(client_id); + result.client_secret = Some(client_secret); + result.introspection_basic_auth = use_basic_auth; + result.introspect_extra_params = extra_params; + has_other = true; + } + VerificationStrategies::JWKs { jwks_uri } => { + result.jwks_uri = Some(Url::parse(&jwks_uri).map_err(|err| { + AuthenticationError::ParsingError(format!("Invalid jwks uri: {err}")) + })?); + has_jwks = true; + } + VerificationStrategies::UserInfo { userinfo_uri } => { + result.userinfo_uri = Some(Url::parse(&userinfo_uri).map_err(|err| { + AuthenticationError::ParsingError(format!("Invalid userinfo uri: {err}")) + })?); + has_other = true; + } + } + } + + Ok((result, has_jwks && has_other)) + } +} + +pub struct GenericOauthTokenVerifier { + /// Optional audience value to validate against the token's `aud` claim. + validate_audience: Option, + /// Optional issuer value to validate against the token's `iss` claim. + validate_issuer: Option, + jwt_cache: Option>, + json_web_key_set: RwLock>, + introspection_uri: Option, + introspection_basic_auth: bool, + introspect_extra_params: Option>, + client_id: Option, + client_secret: Option, + jwks_uri: Option, + userinfo_uri: Option, +} + +impl GenericOauthTokenVerifier { + pub fn new(mut options: TokenVerifierOptions) -> Result { + let (strategy_options, chachable) = options.unpack()?; + + let validate_audience = options.validate_audience.take(); + + let validate_issuer = options + .validate_issuer + .map(|iss| iss.trim_end_matches('/').to_string()); + + // we only need to cache if both jwks and introspection are supported + let jwt_cache = if chachable { + Some(RwLock::new(JwtCache::new( + REMOTE_VERIFICATION_INTERVAL, + options.cache_capacity.unwrap_or(JWT_CACHE_CAPACITY), + ))) + } else { + None + }; + + Ok(Self { + validate_issuer, + validate_audience, + jwt_cache, + json_web_key_set: RwLock::new(None), + introspection_uri: strategy_options.introspection_uri, + introspection_basic_auth: strategy_options.introspection_basic_auth, + introspect_extra_params: strategy_options.introspect_extra_params, + client_id: strategy_options.client_id, + client_secret: strategy_options.client_secret, + jwks_uri: strategy_options.jwks_uri, + userinfo_uri: strategy_options.userinfo_uri, + }) + } + + async fn verify_user_info( + &self, + token: &str, + token_unique_id: Option<&str>, + user_info_endpoint: &Url, + ) -> Result { + // use token_unique_id or get from token header + let token_unique_id = match token_unique_id { + Some(id) => id.to_owned(), + None => { + let header = decode_token_header(token)?; + header.kid.unwrap_or(token.to_string()).to_owned() + } + }; + + let client = reqwest::Client::new(); + println!(">>> user_info_endpoint {:?} ", user_info_endpoint.as_str()); + + let response = client + .get(user_info_endpoint.to_owned()) + .header(AUTHORIZATION, format!("Bearer {token}")) + .send() + .await + .map_err(|err| AuthenticationError::Jwks(err.to_string()))?; + + let status_code = response.status(); + + if !response.status().is_success() { + return Err(AuthenticationError::TokenVerificationFailed { + description: error_message_from_response(response, "Unauthorized!").await, + status_code: Some(status_code.as_u16()), + }); + } + + let json: Value = response.json().await.unwrap(); + + let extra = match json { + Value::Object(map) => Some(map), + _ => None, + }; + + let auth_info: AuthInfo = AuthInfo { + token_unique_id, + client_id: None, + user_id: None, + scopes: None, + expires_at: None, + audience: None, + extra, + }; + + Ok(auth_info) + } + + async fn verify_introspection( + &self, + token: &str, + introspection_endpoint: &Url, + ) -> Result { + let client = reqwest::Client::new(); + + // Form data body + let mut form = HashMap::new(); + form.insert("token", token); + + if !self.introspection_basic_auth { + if let Some(client_id) = self.client_id.as_ref() { + form.insert("client_id", client_id); + }; + if let Some(client_secret) = self.client_secret.as_ref() { + form.insert("client_secret", client_secret); + }; + } + + if let Some(extra_params) = self.introspect_extra_params.as_ref() { + extra_params.iter().for_each(|(key, value)| { + form.insert(key, value); + }); + } + + let mut request = client.post(introspection_endpoint.to_owned()).form(&form); + if self.introspection_basic_auth { + request = request.basic_auth( + self.client_id.clone().unwrap_or_default(), + self.client_secret.clone(), + ); + } + + let response = request + .send() + .await + .map_err(|err| AuthenticationError::Jwks(err.to_string()))?; + + let status_code = response.status(); + if !response.status().is_success() { + let description = response.text().await.unwrap_or("Unauthorized!".to_string()); + return Err(AuthenticationError::TokenVerificationFailed { + description, + status_code: Some(status_code.as_u16()), + }); + } + + let introspect_response: IntrospectionResponse = response + .json() + .await + .map_err(|err| AuthenticationError::Jwks(err.to_string()))?; + + if !introspect_response.active { + return Err(AuthenticationError::InactiveToken); + } + + if let Some(validate_audience) = self.validate_audience.as_ref() { + let Some(token_audience) = introspect_response.audience.as_ref() else { + return Err(AuthenticationError::InvalidToken { + description: "Audience attribute (aud) is missing.", + }); + }; + + if token_audience != validate_audience { + return Err(AuthenticationError::TokenVerificationFailed { description: + format!("None of the provided audiences are allowed. Expected ${validate_audience}, got: ${token_audience}") + , status_code: Some(StatusCode::UNAUTHORIZED.as_u16()) + }); + } + } + + if let Some(validate_issuer) = self.validate_issuer.as_ref() { + let Some(token_issuer) = introspect_response.issuer.as_ref() else { + return Err(AuthenticationError::InvalidToken { + description: "Issuer (iss) is missing.", + }); + }; + + if token_issuer != validate_issuer { + return Err(AuthenticationError::TokenVerificationFailed { + description: format!( + "Issuer is not allowed. Expected ${validate_issuer}, got: ${token_issuer}" + ), + status_code: Some(StatusCode::UNAUTHORIZED.as_u16()), + }); + } + } + + AuthInfo::from_introspection_response(token.to_owned(), introspect_response, None) + } + + async fn populate_jwks(&self, jwks_uri: &Url) -> Result<(), AuthenticationError> { + let response = reqwest::get(jwks_uri.to_owned()) + .await + .map_err(|err| AuthenticationError::Jwks(err.to_string()))?; + let jwks: JsonWebKeySet = response + .json() + .await + .map_err(|err| AuthenticationError::Jwks(err.to_string()))?; + let mut guard = self.json_web_key_set.write().await; + *guard = Some(JwksCache { + last_updated: Some(SystemTime::now()), + jwks, + }); + Ok(()) + } + + async fn verify_jwks(&self, token: &str, jwks: &Url) -> Result { + // read-modify-write pattern + { + let guard = self.json_web_key_set.read().await; + if let Some(cache) = guard.as_ref() { + if let Some(last_updated) = cache.last_updated { + if SystemTime::now() + .duration_since(last_updated) + .unwrap_or(Duration::from_secs(0)) + < JWKS_REFRESH_TIME + { + let token_info = cache.jwks.verify( + token.to_string(), + self.validate_audience.as_ref(), + self.validate_issuer.as_ref(), + )?; + + return AuthInfo::from_token_data(token.to_owned(), token_info, None); + } + } + } + } + + // Refresh JWKS if cache is invalid or missing + self.populate_jwks(jwks).await?; + + // Proceed with verification + let guard = self.json_web_key_set.read().await; + if let Some(cache) = guard.as_ref() { + let token_info = cache.jwks.verify( + token.to_string(), + self.validate_audience.as_ref(), + self.validate_issuer.as_ref(), + )?; + + AuthInfo::from_token_data(token.to_owned(), token_info, None) + } else { + Err(AuthenticationError::Jwks( + "Failed to retrieve or parse JWKS".to_string(), + )) + } + } +} + +#[async_trait] +impl OauthTokenVerifier for GenericOauthTokenVerifier { + async fn verify_token(&self, access_token: String) -> Result { + // perform local jwks verification if supported + if let Some(jwks_endpoint) = self.jwks_uri.as_ref() { + let mut auth_info = self.verify_jwks(&access_token, jwks_endpoint).await?; + + // perform remote verification only if it is supported and jwt is stale + if let Some(jwt_cache) = self.jwt_cache.as_ref() { + // return auth_info if it is recent + if jwt_cache.read().await.is_recent(&auth_info.token_unique_id) { + return Ok(auth_info); + } + + // introspection validation if introspection_uri is provided + if let Some(introspection_endpoint) = self.introspection_uri.as_ref() { + let fresh_auth_info = self + .verify_introspection(&access_token, introspection_endpoint) + .await?; + jwt_cache + .write() + .await + .record(fresh_auth_info.token_unique_id.to_owned()); + return Ok(fresh_auth_info); + } + + // call userInfo endpoint only if introspect strategy is not used + if let Some(user_info_endpoint) = self.userinfo_uri.as_ref() { + let fresh_auth_info = self + .verify_user_info( + &access_token, + Some(&auth_info.token_unique_id), + user_info_endpoint, + ) + .await?; + + auth_info.extra = fresh_auth_info.extra; + jwt_cache + .write() + .await + .record(auth_info.token_unique_id.to_owned()); + return Ok(auth_info); + } + } + + return Ok(auth_info); + } + + // use introspection if jwks is not supported, no caching + if let Some(introspection_endpoint) = self.introspection_uri.as_ref() { + let auth_info = self + .verify_introspection(&access_token, introspection_endpoint) + .await?; + return Ok(auth_info); + } + + // use userInfo endpoint if introspect strategy is not used + if let Some(user_info_endpoint) = self.userinfo_uri.as_ref() { + let auth_info = self + .verify_user_info(&access_token, None, user_info_endpoint) + .await?; + return Ok(auth_info); + } + + Err(AuthenticationError::InvalidToken { + description: "Invalid token verification strategy!", + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use oauth2_test_server::{OAuthTestServer, OauthEndpoints}; + use rust_mcp_sdk::auth::*; + use serde_json::json; + + async fn token_verifier( + strategies: Vec, + endpoints: &OauthEndpoints, + audience: Option, + ) -> GenericOauthTokenVerifier { + let auth_metadata = AuthMetadataBuilder::new("http://127.0.0.1:3000/mcp") + .issuer(&endpoints.oauth_server) + .authorization_servers(vec![&endpoints.oauth_server]) + .authorization_endpoint(&endpoints.authorize) + .token_endpoint(&endpoints.token) + .scopes_supported(vec!["openid".to_string()]) + .introspection_endpoint(&endpoints.introspect) + .jwks_uri(&endpoints.jwks) + .resource_name("MCP Demo Server".to_string()) + .build() + .unwrap(); + let meta = &auth_metadata.0; + + let token_verifier = GenericOauthTokenVerifier::new(TokenVerifierOptions { + validate_audience: audience, + validate_issuer: Some(meta.issuer.to_string()), + strategies, + cache_capacity: None, + }) + .unwrap(); + token_verifier + } + + #[tokio::test] + async fn test_jwks_strategy() { + let server = OAuthTestServer::start().await; + + let client = server.register_client( + json!({ "scope": "openid", "redirect_uris":["http://localhost:8080/callback"]}), + ); + + let verifier = token_verifier( + vec![VerificationStrategies::JWKs { + jwks_uri: server.endpoints.jwks.clone(), + }], + &server.endpoints, + Some(Audience::Single(client.client_id.clone())), + ) + .await; + + let token = server.generate_jwt(&client, server.jwt_options().user_id("rustmcp").build()); + + let auth_info = verifier.verify_token(token).await.unwrap(); + assert_eq!( + auth_info.audience.as_ref().unwrap().to_string(), + client.client_id + ); + assert_eq!( + auth_info.client_id.as_ref().unwrap().to_string(), + client.client_id + ); + assert_eq!(auth_info.user_id.as_ref().unwrap(), "rustmcp"); + let scopes = auth_info.scopes.as_ref().unwrap(); + assert_eq!(scopes.as_slice(), ["openid"]); + } + + #[tokio::test] + async fn test_userinfo_strategy() { + let server = OAuthTestServer::start().await; + + let client = server.register_client( + json!({ "scope": "openid", "redirect_uris":["http://localhost:8080/callback"]}), + ); + + let verifier = token_verifier( + vec![VerificationStrategies::UserInfo { + userinfo_uri: server.endpoints.userinfo.clone(), + }], + &server.endpoints, + None, + ) + .await; + + let token = server.generate_token(&client, server.jwt_options().user_id("rustmcp").build()); + + let auth_info = verifier.verify_token(token.access_token).await.unwrap(); + + assert!(auth_info.audience.is_none()); + assert_eq!( + auth_info + .extra + .unwrap() + .get("sub") + .unwrap() + .as_str() + .unwrap(), + "rustmcp" + ); + } + + #[tokio::test] + async fn test_introspect_strategy() { + let server = OAuthTestServer::start().await; + + let client = server.register_client( + json!({ "scope": "openid", "redirect_uris":["http://localhost:8080/callback"]}), + ); + + let verifier = token_verifier( + vec![VerificationStrategies::Introspection { + introspection_uri: server.endpoints.introspect.clone(), + client_id: client.client_id.clone(), + client_secret: client.client_secret.as_ref().unwrap().clone(), + use_basic_auth: true, + extra_params: None, + }], + &server.endpoints, + None, + ) + .await; + + let token = server.generate_token(&client, server.jwt_options().user_id("rustmcp").build()); + let auth_info = verifier.verify_token(token.access_token).await.unwrap(); + + assert_eq!( + auth_info.audience.as_ref().unwrap().to_string(), + client.client_id + ); + assert_eq!( + auth_info.client_id.as_ref().unwrap().to_string(), + client.client_id + ); + assert_eq!(auth_info.user_id.as_ref().unwrap(), "rustmcp"); + let scopes = auth_info.scopes.as_ref().unwrap(); + assert_eq!(scopes.as_slice(), ["openid"]); + } + + #[tokio::test] + async fn test_introspect_strategy_with_client_secret_post() { + let server = OAuthTestServer::start().await; + + let client = server.register_client( + json!({ "scope": "openid profile", "redirect_uris":["http://localhost:8080/cb"]}), + ); + + let verifier = token_verifier( + vec![VerificationStrategies::Introspection { + introspection_uri: server.endpoints.introspect.clone(), + client_id: client.client_id.clone(), + client_secret: client.client_secret.as_ref().unwrap().clone(), + use_basic_auth: false, // <--- POST body instead of Basic Auth + extra_params: None, + }], + &server.endpoints, + Some(Audience::Single(client.client_id.clone())), + ) + .await; + + let token = server.generate_token(&client, server.jwt_options().user_id("alice").build()); + + let auth_info = verifier.verify_token(token.access_token).await.unwrap(); + + assert_eq!(auth_info.user_id.as_ref().unwrap(), "alice"); + assert!(auth_info.scopes.unwrap().contains(&"profile".to_string())); + assert_eq!( + auth_info.audience.as_ref().unwrap().to_string(), + client.client_id + ); + } + + #[tokio::test] + async fn test_introspect_rejects_inactive_token() { + let server = OAuthTestServer::start().await; + let client = server + .register_client(json!({ "scope": "openid", "redirect_uris": ["http://localhost"] })); + + let verifier = token_verifier( + vec![VerificationStrategies::Introspection { + introspection_uri: server.endpoints.introspect.clone(), + client_id: client.client_id.clone(), + client_secret: client.client_secret.as_ref().unwrap().clone(), + use_basic_auth: true, + extra_params: None, + }], + &server.endpoints, + None, + ) + .await; + + let token_response = + server.generate_token(&client, server.jwt_options().user_id("bob").build()); + server + .revoke_token(&client, &token_response.access_token) + .await; + + let result = verifier.verify_token(token_response.access_token).await; + assert!(matches!(result, Err(AuthenticationError::InactiveToken))); + } + + #[tokio::test] + async fn test_expired_token_rejected_by_jwks_and_introspection() { + let server = OAuthTestServer::start().await; + let client = server.register_client( + json!({ "scope": "openid email", "redirect_uris": ["http://localhost"] }), + ); + + // Use both strategies → expect rejection on expiration alone + let verifier = token_verifier( + vec![ + VerificationStrategies::JWKs { + jwks_uri: server.endpoints.jwks.clone(), + }, + VerificationStrategies::Introspection { + introspection_uri: server.endpoints.introspect.clone(), + client_id: client.client_id.clone(), + client_secret: client.client_secret.as_ref().unwrap().clone(), + use_basic_auth: true, + extra_params: None, + }, + ], + &server.endpoints, + Some(Audience::Single(client.client_id.clone())), + ) + .await; + + // Generate short-lived token + let short_lived = server + .jwt_options() + .user_id("charlie") + .expires_in(1) + .build(); + let token = server.generate_token(&client, short_lived); + + // Wait for expiry + tokio::time::sleep(tokio::time::Duration::from_millis(1500)).await; + + // JWKS should reject immediately (exp validation) + // But since fallback is enabled, it hits introspection → active: false → error + let err1 = verifier + .verify_token(token.access_token.clone()) + .await + .unwrap_err(); + assert!(matches!(err1, AuthenticationError::InactiveToken)); + + // Now revoke it (expired + revoked) → still InactiveToken (no special handling needed) + server.revoke_token(&client, &token.access_token).await; + let err2 = verifier.verify_token(token.access_token).await.unwrap_err(); + assert!(matches!(err2, AuthenticationError::InactiveToken)); + } + + #[tokio::test] + async fn test_jwks_and_introspection_cache_works() { + let server = OAuthTestServer::start().await; + let client = server + .register_client(json!({ "scope": "openid", "redirect_uris": ["http://localhost"] })); + + let verifier = token_verifier( + vec![ + VerificationStrategies::JWKs { + jwks_uri: server.endpoints.jwks.clone(), + }, + VerificationStrategies::Introspection { + introspection_uri: server.endpoints.introspect.clone(), + client_id: client.client_id.clone(), + client_secret: client.client_secret.as_ref().unwrap().clone(), + use_basic_auth: true, + extra_params: None, + }, + ], + &server.endpoints, + None, + ) + .await; + + let token = server.generate_token(&client, server.jwt_options().user_id("dave").build()); + + // First call → goes through full flow + let info1 = verifier + .verify_token(token.access_token.clone()) + .await + .unwrap(); + + // Second call → should hit cache (no network) + let info2 = verifier + .verify_token(token.access_token.clone()) + .await + .unwrap(); + + assert_eq!(info1.user_id, info2.user_id); + assert_eq!(info1.token_unique_id, info2.token_unique_id); + } + + #[tokio::test] + async fn test_audience_validation_rejects_wrong_aud() { + let server = OAuthTestServer::start().await; + let client = server + .register_client(json!({ "scope": "openid", "redirect_uris": ["http://localhost"] })); + + let verifier = token_verifier( + vec![VerificationStrategies::Introspection { + introspection_uri: server.endpoints.introspect.clone(), + client_id: client.client_id.clone(), + client_secret: client.client_secret.as_ref().unwrap().clone(), + use_basic_auth: true, + extra_params: None, + }], + &server.endpoints, + Some(Audience::Single("wrong-client-id-999".to_string())), + ) + .await; + + let token = server.generate_token(&client, server.jwt_options().user_id("eve").build()); + + let err = verifier.verify_token(token.access_token).await.unwrap_err(); + assert!(matches!( + err, + AuthenticationError::TokenVerificationFailed { .. } + )); + } + + #[tokio::test] + async fn test_issuer_validation_rejects_wrong_iss() { + let server = OAuthTestServer::start().await; + let client = server + .register_client(json!({ "scope": "openid", "redirect_uris": ["http://localhost"] })); + + let _verifier = token_verifier( + vec![VerificationStrategies::JWKs { + jwks_uri: server.endpoints.jwks.clone(), + }], + &server.endpoints, + None, + ) + .await; + + // Force wrong expected issuer + let wrong_verifier = GenericOauthTokenVerifier::new(TokenVerifierOptions { + strategies: vec![VerificationStrategies::JWKs { + jwks_uri: server.endpoints.jwks.clone(), + }], + validate_audience: None, + validate_issuer: Some("https://wrong-issuer.example.com".to_string()), + cache_capacity: None, + }) + .unwrap(); + + let token = server.generate_token(&client, server.jwt_options().user_id("frank").build()); + + let err = wrong_verifier + .verify_token(token.access_token) + .await + .unwrap_err(); + assert!(matches!( + err, + AuthenticationError::TokenVerificationFailed { .. } + )); + } + + #[tokio::test] + async fn test_userinfo_enriches_jwt_claims() { + let server = OAuthTestServer::start().await; + let client = server.register_client( + json!({ "scope": "openid profile email", "redirect_uris": ["http://localhost"] }), + ); + + let verifier = token_verifier( + vec![ + VerificationStrategies::JWKs { + jwks_uri: server.endpoints.jwks.clone(), + }, + VerificationStrategies::UserInfo { + userinfo_uri: server.endpoints.userinfo.clone(), + }, + ], + &server.endpoints, + None, + ) + .await; + + let token = server.generate_token(&client, server.jwt_options().user_id("grace").build()); + + let auth_info = verifier.verify_token(token.access_token).await.unwrap(); + + let extra = auth_info.extra.unwrap(); + assert_eq!( + extra.get("email").unwrap().as_str().unwrap(), + "test@example.com" + ); + assert_eq!(extra.get("name").unwrap().as_str().unwrap(), "Test User"); + assert!(extra.get("picture").is_some()); + } +} diff --git a/crates/rust-mcp-extra/src/token_verifier/jwt_cache.rs b/crates/rust-mcp-extra/src/token_verifier/jwt_cache.rs new file mode 100644 index 0000000..f4c5259 --- /dev/null +++ b/crates/rust-mcp-extra/src/token_verifier/jwt_cache.rs @@ -0,0 +1,67 @@ +use std::collections::{HashMap, VecDeque}; +use std::time::{Duration, Instant}; + +/// JWT introspection cache with TTL and max capacity +pub struct JwtCache { + map: HashMap, // Key -> last introspection time + order: VecDeque, // Keys in insertion order + remote_verification_interval: Duration, + capacity: usize, +} + +impl JwtCache { + /// Create a new cache with given TTL and capacity + pub fn new(remote_verification_interval: Duration, capacity: usize) -> Self { + Self { + map: HashMap::with_capacity(capacity), + order: VecDeque::with_capacity(capacity), + remote_verification_interval, + capacity, + } + } + + pub fn is_recent(&self, key: &str) -> bool { + self.map + .get(key) + .is_some_and(|t| t.elapsed() <= self.remote_verification_interval) + } + + /// Record , updates timestamp or adds new entry + pub fn record(&mut self, key: String) { + // Remove expired entries first + self.remove_expired(); + + if self.map.contains_key(&key) { + // Update timestamp (no promotion in order) + self.map.insert(key.clone(), Instant::now()); + } else { + // Evict oldest if over capacity + if self.map.len() >= self.capacity { + if let Some(oldest) = self.order.pop_front() { + self.map.remove(&oldest); + } + } + self.map.insert(key.clone(), Instant::now()); + self.order.push_back(key); + } + } + + /// Remove expired entries + pub fn remove_expired(&mut self) { + let now = Instant::now(); + let mut expired = Vec::new(); + + for key in &self.order { + if let Some(&last) = self.map.get(key).as_ref() { + if now.duration_since(last.to_owned()) > self.remote_verification_interval { + expired.push(key.clone()); + } + } + } + + for key in expired { + self.map.remove(&key); + self.order.retain(|k| *k != key); + } + } +} diff --git a/crates/rust-mcp-macros/tests/common/common.rs b/crates/rust-mcp-macros/tests/common/common.rs index d6bae2e..1133d64 100644 --- a/crates/rust-mcp-macros/tests/common/common.rs +++ b/crates/rust-mcp-macros/tests/common/common.rs @@ -1,7 +1,6 @@ -use std::str::FromStr; - use rust_mcp_macros::JsonSchema; use rust_mcp_schema::RpcError; +use std::str::FromStr; #[derive(::serde::Deserialize, ::serde::Serialize, Clone, Debug, JsonSchema)] /// Represents a text replacement operation. diff --git a/crates/rust-mcp-sdk/CHANGELOG.md b/crates/rust-mcp-sdk/CHANGELOG.md index f5d8329..88e7754 100644 --- a/crates/rust-mcp-sdk/CHANGELOG.md +++ b/crates/rust-mcp-sdk/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.7.3](https://github.com/rust-mcp-stack/rust-mcp-sdk/compare/rust-mcp-sdk-v0.7.2...rust-mcp-sdk-v0.7.3) (2025-11-08) + + +### 🚀 Features + +* Refactor and improve middleware pipeline ([#114](https://github.com/rust-mcp-stack/rust-mcp-sdk/issues/114)) ([cc45f1c](https://github.com/rust-mcp-stack/rust-mcp-sdk/commit/cc45f1c2e6321ef740dda87d229aa51213a06808)) + ## [0.7.2](https://github.com/rust-mcp-stack/rust-mcp-sdk/compare/rust-mcp-sdk-v0.7.1...rust-mcp-sdk-v0.7.2) (2025-10-20) diff --git a/crates/rust-mcp-sdk/Cargo.toml b/crates/rust-mcp-sdk/Cargo.toml index 90c96e8..cbff768 100644 --- a/crates/rust-mcp-sdk/Cargo.toml +++ b/crates/rust-mcp-sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rust-mcp-sdk" -version = "0.7.2" +version = "0.7.3" authors = ["Ali Hashemi"] categories = ["data-structures", "parser-implementations", "parsing"] description = "An asynchronous SDK and framework for building MCP-Servers and MCP-Clients, leveraging the rust-mcp-schema for type safe MCP Schema Objects." @@ -34,29 +34,33 @@ bytes.workspace = true # rustls = { workspace = true, optional = true } hyper = { version = "1.6.0", optional = true } -http = { version ="1.3", optional = true } -http-body-util = { version ="0.1", optional = true } -http-body = { version ="1.0", optional = true } - -[dev-dependencies] -wiremock = "0.5" +http = { workspace = true, optional = true } +http-body-util = { workspace = true, optional = true } +http-body = { workspace = true, optional = true } +url = {workspace = true, optional=true} +jsonwebtoken = {version="10.1", optional=true, features=["aws_lc_rs"]} reqwest = { workspace = true, default-features = false, features = [ "stream", "rustls-tls", "json", "cookies", "multipart", -] } +], optional = true } + +[dev-dependencies] +wiremock = "0.5" +tempfile = "3.23.0" tracing-subscriber = { workspace = true, features = [ "env-filter", "std", "fmt", -] } +]} [features] default = [ "client", "server", + "auth", "macros", "stdio", "sse", @@ -69,6 +73,7 @@ default = [ sse = ["rust-mcp-transport/sse","http","http-body","http-body-util"] streamable-http = ["rust-mcp-transport/streamable-http","http","http-body","http-body-util"] stdio = ["rust-mcp-transport/stdio"] +auth=["url","jsonwebtoken/aws_lc_rs","reqwest"] server = [] # Server feature client = [] # Client feature diff --git a/crates/rust-mcp-sdk/README.md b/crates/rust-mcp-sdk/README.md index 2c70c3e..6d813b4 100644 --- a/crates/rust-mcp-sdk/README.md +++ b/crates/rust-mcp-sdk/README.md @@ -625,7 +625,7 @@ The `rust-mcp-sdk` crate provides several features that can be enabled or disabl - `2025_03_26` : Activates MCP Protocol version 2025-03-26 - `2024_11_05` : Activates MCP Protocol version 2024-11-05 -> Note: MCP protocol versions are mutually exclusive—only one can be active at any given time. +> Note: MCP protocol versions are mutually exclusive-only one can be active at any given time. ### Default Features diff --git a/crates/rust-mcp-sdk/src/auth.rs b/crates/rust-mcp-sdk/src/auth.rs new file mode 100644 index 0000000..61651ef --- /dev/null +++ b/crates/rust-mcp-sdk/src/auth.rs @@ -0,0 +1,24 @@ +mod auth_info; + +#[cfg(feature = "auth")] +mod auth_provider; +#[cfg(feature = "auth")] +mod error; +#[cfg(feature = "auth")] +mod metadata; +mod spec; +#[cfg(feature = "auth")] +mod token_verifier; + +pub use auth_info::AuthInfo; +#[cfg(feature = "auth")] +pub use auth_provider::*; +#[cfg(feature = "auth")] +pub use error::*; +#[cfg(feature = "auth")] +pub use metadata::*; +pub use spec::Audience; +#[cfg(feature = "auth")] +pub use spec::*; +#[cfg(feature = "auth")] +pub use token_verifier::*; diff --git a/crates/rust-mcp-sdk/src/auth/auth_info.rs b/crates/rust-mcp-sdk/src/auth/auth_info.rs new file mode 100644 index 0000000..01a4136 --- /dev/null +++ b/crates/rust-mcp-sdk/src/auth/auth_info.rs @@ -0,0 +1,105 @@ +#[cfg(feature = "auth")] +use crate::auth::{AuthClaims, AuthenticationError, IntrospectionResponse}; +use crate::{auth::Audience, utils::unix_timestamp_to_systemtime}; +#[cfg(feature = "auth")] +use jsonwebtoken::TokenData; +use serde::{Deserialize, Serialize}; +use serde_json::Map; +use std::time::SystemTime; + +/// Information about a validated access token, provided to request handlers. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct AuthInfo { + /// Contains a unique id for jwt + /// use jti claim if available, otherwise use token or a reliable hash of token + pub token_unique_id: String, + + /// The client ID associated with this token. + #[serde(skip_serializing_if = "std::option::Option::is_none")] + pub client_id: Option, + + /// Optional user identifier for the token + #[serde(skip_serializing_if = "std::option::Option::is_none")] + pub user_id: Option, + + /// Scopes associated with this token. + #[serde(skip_serializing_if = "std::option::Option::is_none")] + pub scopes: Option>, + + /// When the token expires (in seconds since epoch). + /// This field is optional, as the token may not have an expiration time. + #[serde(skip_serializing_if = "std::option::Option::is_none")] + pub expires_at: Option, + + /// The RFC 8707 resource server identifier for which this token is valid. + /// If set, this MUST match the MCP server's resource identifier (minus hash fragment). + #[serde(skip_serializing_if = "std::option::Option::is_none")] + pub audience: Option, + + /// Additional data associated with the token. + /// This field can be used to attach any extra data to the auth info. + #[serde(flatten, skip_serializing_if = "std::option::Option::is_none")] + pub extra: Option>, +} + +#[cfg(feature = "auth")] +impl AuthInfo { + pub fn from_token_data( + token: String, + token_data: TokenData, + extra: Option>, + ) -> Result { + let client_id = token_data.claims.authorized_party.or(token_data + .claims + .client_id + .or(token_data.claims.application_id)); + + let scopes = token_data + .claims + .scope + .map(|c| c.split(" ").map(|s| s.to_string()).collect::>()); + + let expires_at = token_data + .claims + .expiration + .map(|v| unix_timestamp_to_systemtime(v as u64)); + + let token_unique_id = token_data.claims.jwt_id.unwrap_or(token); + + Ok(AuthInfo { + token_unique_id, + client_id, + scopes, + user_id: token_data.claims.subject, + expires_at, + audience: token_data.claims.audience, + extra, + }) + } + + pub fn from_introspection_response( + token: String, + data: IntrospectionResponse, + extra: Option>, + ) -> Result { + let scopes = data + .scope + .map(|c| c.split(" ").map(|s| s.to_string()).collect::>()); + + let expires_at = data + .expiration + .map(|v| unix_timestamp_to_systemtime(v as u64)); + + let token_unique_id = data.jwt_id.unwrap_or(token); + + Ok(AuthInfo { + token_unique_id, + client_id: data.client_id, + user_id: data.subject, + scopes, + expires_at, + audience: data.audience, + extra, + }) + } +} diff --git a/crates/rust-mcp-sdk/src/auth/auth_provider.rs b/crates/rust-mcp-sdk/src/auth/auth_provider.rs new file mode 100644 index 0000000..258addd --- /dev/null +++ b/crates/rust-mcp-sdk/src/auth/auth_provider.rs @@ -0,0 +1,98 @@ +mod remote_auth_provider; +use crate::auth::OauthEndpoint; +use crate::auth::{AuthInfo, AuthenticationError}; +use crate::mcp_http::{GenericBody, GenericBodyExt, McpAppState}; +use crate::mcp_server::error::TransportServerError; +use async_trait::async_trait; +use http::Method; +pub use remote_auth_provider::*; +use std::collections::HashMap; +use std::sync::Arc; + +#[async_trait] +pub trait AuthProvider: Send + Sync { + async fn verify_token(&self, access_token: String) -> Result; + + /// Returns an optional list of scopes required to access this resource. + /// If this function returns `Some(scopes)`, the authenticated user’s token + /// must include **all** of the listed scopes. + /// If any are missing, the request will be rejected with a `403 Forbidden` response. + fn required_scopes(&self) -> Option<&Vec> { + None + } + + /// Returns the configured OAuth endpoints for this provider. + /// + /// - Key: endpoint path as a string (e.g., "/oauth/token") + /// - Value: corresponding `OauthEndpoint` configuration + /// + /// Returns `None` if no endpoints are configured. + fn auth_endpoints(&self) -> Option<&HashMap>; + + /// Handles an incoming HTTP request for this authentication provider. + /// + /// This is the main entry point for processing OAuth requests, + /// such as token issuance, authorization code exchange, or revocation. + async fn handle_request( + &self, + request: http::Request<&str>, + state: Arc, + ) -> Result, TransportServerError>; + + /// Returns the `OauthEndpoint` associated with the given request path. + /// + /// This method looks up the request URI path in the endpoints returned by `auth_endpoints()`. + /// + /// ⚠️ Note: + /// - If your token and revocation endpoints share the same URL path (valid in some implementations), + /// you may want to override this method to correctly distinguish the request type + /// (e.g., based on request parameters like `grant_type` vs `token`). + fn endpont_type(&self, request: &http::Request<&str>) -> Option<&OauthEndpoint> { + let endpoints = self.auth_endpoints()?; + endpoints.get(request.uri().path()) + } + + /// Returns the absolute URL of this resource's OAuth 2.0 Protected Resource Metadata document. + /// + /// This corresponds to the `resource_metadata` parameter defined in + /// [RFC 9531 - OAuth 2.0 Protected Resource Metadata](https://datatracker.ietf.org/doc/html/rfc9531). + /// + /// The returned URL is an **absolute** URL (including scheme and host), for example: + /// `https://api.example.com/.well-known/oauth-protected-resource`. + /// + fn protected_resource_metadata_url(&self) -> Option<&str>; + + fn validate_allowed_methods( + &self, + endpoint: &OauthEndpoint, + method: &Method, + ) -> Option> { + let allowed_methods = match endpoint { + OauthEndpoint::AuthorizationEndpoint => { + vec![Method::GET, Method::HEAD, Method::OPTIONS] + } + OauthEndpoint::TokenEndpoint => vec![Method::POST, Method::OPTIONS], + OauthEndpoint::RegistrationEndpoint => vec![ + Method::POST, + Method::GET, + Method::PUT, + Method::PATCH, + Method::DELETE, + Method::OPTIONS, + ], + OauthEndpoint::RevocationEndpoint => vec![Method::POST, Method::OPTIONS], + OauthEndpoint::IntrospectionEndpoint => vec![Method::POST, Method::OPTIONS], + OauthEndpoint::AuthorizationServerMetadata => { + vec![Method::GET, Method::HEAD, Method::OPTIONS] + } + OauthEndpoint::ProtectedResourceMetadata => { + vec![Method::GET, Method::HEAD, Method::OPTIONS] + } + }; + + if !allowed_methods.contains(method) { + return Some(GenericBody::create_405_response(method, &allowed_methods)); + } + None + } +} diff --git a/crates/rust-mcp-sdk/src/auth/auth_provider/remote_auth_provider.rs b/crates/rust-mcp-sdk/src/auth/auth_provider/remote_auth_provider.rs new file mode 100644 index 0000000..1df62e4 --- /dev/null +++ b/crates/rust-mcp-sdk/src/auth/auth_provider/remote_auth_provider.rs @@ -0,0 +1,187 @@ +use crate::{ + auth::{ + create_protected_resource_metadata_url, AuthInfo, AuthProvider, AuthenticationError, + AuthorizationServerMetadata, OauthEndpoint, OauthProtectedResourceMetadata, + OauthTokenVerifier, WELL_KNOWN_OAUTH_AUTHORIZATION_SERVER, + }, + mcp_http::{ + middleware::CorsMiddleware, url_base, GenericBody, GenericBodyExt, McpAppState, Middleware, + }, + mcp_server::error::{TransportServerError, TransportServerResult}, +}; +use async_trait::async_trait; +use bytes::Bytes; +use http::{header::CONTENT_TYPE, StatusCode}; +use http_body_util::{BodyExt, Full}; +use reqwest::Client; +use std::{collections::HashMap, sync::Arc}; + +/// Represents a **Remote OAuth authentication provider** integrated with the MCP server. +/// This struct defines how the MCP server interacts with an external identity provider +/// that supports **Dynamic Client Registration (DCR)**. +/// The [`RemoteAuthProvider`] enables enterprise-grade authentication by leveraging +/// external OAuth infrastructure, while maintaining secure token verification and +/// identity validation within the MCP server. +pub struct RemoteAuthProvider { + auth_server_meta: AuthorizationServerMetadata, + protected_resource_meta: OauthProtectedResourceMetadata, + token_verifier: Box, + endpoint_map: HashMap, + required_scopes: Option>, + protected_resource_metadata_url: String, +} + +impl RemoteAuthProvider { + pub fn new( + auth_server_meta: AuthorizationServerMetadata, + protected_resource_meta: OauthProtectedResourceMetadata, + token_verifier: Box, + required_scopes: Option>, + ) -> Self { + let mut endpoint_map = HashMap::new(); + endpoint_map.insert( + WELL_KNOWN_OAUTH_AUTHORIZATION_SERVER.to_string(), + OauthEndpoint::AuthorizationServerMetadata, + ); + + let resource_url = &protected_resource_meta.resource; + let relative_url = create_protected_resource_metadata_url(resource_url.path()); + let base_url = url_base(resource_url); + let protected_resource_metadata_url = + format!("{}{relative_url}", base_url.trim_end_matches('/')); + + endpoint_map.insert(relative_url, OauthEndpoint::ProtectedResourceMetadata); + + Self { + auth_server_meta, + protected_resource_meta, + token_verifier, + endpoint_map, + required_scopes, + protected_resource_metadata_url, + } + } + + pub async fn with_remote_metadata_url( + authorization_server_metadata_url: &str, + protected_resource_meta: OauthProtectedResourceMetadata, + token_verifier: Box, + required_scopes: Option>, + ) -> Result { + let client = Client::new(); + + let auth_server_meta = client + .get(authorization_server_metadata_url) + .send() + .await? + .json::() + .await?; + + Ok(Self::new( + auth_server_meta, + protected_resource_meta, + token_verifier, + required_scopes, + )) + } + + fn handle_authorization_server_metadata( + response_str: String, + ) -> TransportServerResult> { + let body = Full::new(Bytes::from(response_str)) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + http::Response::builder() + .status(StatusCode::OK) + .header(CONTENT_TYPE, "application/json") + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } + + fn handle_protected_resource_metadata( + response_str: String, + ) -> TransportServerResult> { + use http_body_util::BodyExt; + + let body = Full::new(Bytes::from(response_str)) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + http::Response::builder() + .status(StatusCode::OK) + .header(CONTENT_TYPE, "application/json") + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } +} + +#[async_trait] +impl AuthProvider for RemoteAuthProvider { + fn protected_resource_metadata_url(&self) -> Option<&str> { + Some(self.protected_resource_metadata_url.as_str()) + } + + async fn verify_token(&self, access_token: String) -> Result { + self.token_verifier.verify_token(access_token).await + } + + fn required_scopes(&self) -> Option<&Vec> { + self.required_scopes.as_ref() + } + + async fn handle_request( + &self, + request: http::Request<&str>, + state: Arc, + ) -> Result, TransportServerError> { + let Some(endpoint) = self.endpont_type(&request) else { + return http::Response::builder() + .status(StatusCode::NOT_FOUND) + .body(GenericBody::empty()) + .map_err(|err| TransportServerError::HttpError(err.to_string())); + }; + + // return early if method is not allowed + if let Some(response) = self.validate_allowed_methods(endpoint, request.method()) { + return Ok(response); + } + + match endpoint { + OauthEndpoint::AuthorizationServerMetadata => { + let json_payload = serde_json::to_string(&self.auth_server_meta) + .map_err(|err| TransportServerError::HttpError(err.to_string()))?; + let cors = &CorsMiddleware::default(); + cors.handle( + request, + state, + Box::new(move |_req, _state| { + Box::pin( + async move { Self::handle_authorization_server_metadata(json_payload) }, + ) + }), + ) + .await + } + OauthEndpoint::ProtectedResourceMetadata => { + let json_payload = serde_json::to_string(&self.protected_resource_meta) + .map_err(|err| TransportServerError::HttpError(err.to_string()))?; + + let cors = &CorsMiddleware::default(); + cors.handle( + request, + state, + Box::new(move |_req, _state| { + Box::pin( + async move { Self::handle_protected_resource_metadata(json_payload) }, + ) + }), + ) + .await + } + _ => Ok(GenericBody::create_404_response()), + } + } + + fn auth_endpoints(&self) -> Option<&HashMap> { + Some(&self.endpoint_map) + } +} diff --git a/crates/rust-mcp-sdk/src/auth/error.rs b/crates/rust-mcp-sdk/src/auth/error.rs new file mode 100644 index 0000000..3ac0a87 --- /dev/null +++ b/crates/rust-mcp-sdk/src/auth/error.rs @@ -0,0 +1,62 @@ +use serde::Serialize; +use serde_json::{json, Value}; +use thiserror::Error; + +#[derive(Debug, Error, Clone, Serialize)] +#[serde(tag = "error", rename_all = "snake_case")] +pub enum AuthenticationError { + #[error("No token verification endpoint available in metadata.")] + NoIntrospectionEndpoint, + + #[error("failed to retrieve JWKS from the authorization server : {0}")] + Jwks(String), + + #[error("{description}")] + InvalidToken { description: &'static str }, + + #[error("Inactive Token")] + InactiveToken, + + #[error("Resource indicator (aud) missing.")] + AudiencesAttributeMissing, + + #[error( + "Insufficient scope: you do not have the necessary permissions to perform this action." + )] + InsufficientScope, + + #[error("None of the provided audiences are allowed. Expected ${expected}, got: ${received}")] + AudienceNotAllowed { expected: String, received: String }, + + #[error("Invalid or expired token: {0}")] + InvalidOrExpiredToken(String), + + #[error("{description}")] + TokenVerificationFailed { + description: String, + status_code: Option, + }, + + #[error("{description}")] + ServerError { description: String }, + + #[error("{0}")] + ParsingError(String), + + #[error("{0}")] + NotFound(String), +} + +impl AuthenticationError { + pub fn as_json_value(&self) -> Value { + let serialized = serde_json::to_value(self).unwrap_or(Value::Null); + let error_name = serialized + .get("error") + .and_then(|v| v.as_str()) + .unwrap_or("unknown_error"); + json!({ + "error": error_name, + "error_description": self.to_string() + }) + } +} diff --git a/crates/rust-mcp-sdk/src/auth/metadata.rs b/crates/rust-mcp-sdk/src/auth/metadata.rs new file mode 100644 index 0000000..217936b --- /dev/null +++ b/crates/rust-mcp-sdk/src/auth/metadata.rs @@ -0,0 +1,685 @@ +use std::borrow::Cow; + +use crate::{ + auth::{AuthorizationServerMetadata, OauthProtectedResourceMetadata}, + error::McpSdkError, + utils::join_url, +}; +use reqwest::Client; +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use thiserror::Error; +use url::Url; + +pub const WELL_KNOWN_OAUTH_AUTHORIZATION_SERVER: &str = "/.well-known/oauth-authorization-server"; +pub const OAUTH_PROTECTED_RESOURCE_BASE: &str = "/.well-known/oauth-protected-resource"; + +#[allow(unused)] +#[derive(Hash, Eq, PartialEq, Clone)] +pub enum OauthEndpoint { + AuthorizationEndpoint, + TokenEndpoint, + RegistrationEndpoint, + RevocationEndpoint, + IntrospectionEndpoint, + AuthorizationServerMetadata, + ProtectedResourceMetadata, +} + +#[derive(Debug, Error)] +pub enum AuthMetadateError { + #[error("Url Parse Error: {0}")] + Transport(#[from] url::ParseError), +} + +pub struct AuthMetadataEndpoints { + pub protected_resource_endpoint: String, + pub autorization_server_endpoint: String, +} + +// Builder struct to construct both OAuthMetadata and OAuthProtectedResourceMetadata + +#[derive(Default)] +pub struct AuthMetadataBuilder<'a> { + // OAuthMetadata-specific fields + issuer: Option>, + authorization_endpoint: Option>, + token_endpoint: Option>, + registration_endpoint: Option>, + revocation_endpoint: Option>, + introspection_endpoint: Option>, + scopes_supported: Option>>, + + response_types_supported: Option>>, + response_modes_supported: Option>>, + grant_types_supported: Option>>, + token_endpoint_auth_methods_supported: Option>>, + token_endpoint_auth_signing_alg_values_supported: Option>>, + revocation_endpoint_auth_signing_alg_values_supported: Option>>, + revocation_endpoint_auth_methods_supported: Option>>, + introspection_endpoint_auth_methods_supported: Option>>, + introspection_endpoint_auth_signing_alg_values_supported: Option>>, + code_challenge_methods_supported: Option>>, + service_documentation: Option>, + + // OAuthProtectedResourceMetadata-specific fields + resource: Option>, + authorization_servers: Option>>, + required_scopes: Option>>, + + jwks_uri: Option>, + bearer_methods_supported: Option>>, + resource_signing_alg_values_supported: Option>>, + resource_name: Option>, + resource_documentation: Option>, + resource_policy_uri: Option>, + resource_tos_uri: Option>, + tls_client_certificate_bound_access_tokens: Option, + authorization_details_types_supported: Option>>, + dpop_signing_alg_values_supported: Option>>, + dpop_bound_access_tokens_required: Option, + + // none-standard + userinfo_endpoint: Option>, +} + +// Result struct to hold both metadata types +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct OauthMetadata { + authorization_server_metadata: AuthorizationServerMetadata, + protected_resource_metadata: OauthProtectedResourceMetadata, +} + +impl OauthMetadata { + pub fn protected_resource_metadata(&self) -> &OauthProtectedResourceMetadata { + &self.protected_resource_metadata + } + + pub fn authorization_server_metadata(&self) -> &AuthorizationServerMetadata { + &self.authorization_server_metadata + } + + pub fn endpoints(&self) -> AuthMetadataEndpoints { + AuthMetadataEndpoints { + autorization_server_endpoint: WELL_KNOWN_OAUTH_AUTHORIZATION_SERVER.to_string(), + protected_resource_endpoint: format!( + "{OAUTH_PROTECTED_RESOURCE_BASE}{}", + match self.protected_resource_metadata.resource.path() { + "/" => "", + other => other, + } + ), + } + } +} + +impl<'a> AuthMetadataBuilder<'a> { + fn with_defaults(protected_resource: &'a str) -> Self { + Self { + response_types_supported: Some(vec!["code".into()]), + code_challenge_methods_supported: Some(vec!["S256".into()]), + token_endpoint_auth_methods_supported: Some(vec!["client_secret_post".into()]), + grant_types_supported: Some(vec!["authorization_code".into(), "refresh_token".into()]), + resource: Some(protected_resource.into()), + ..Default::default() + } + } + + /// Creates a new instance of the builder for the given protected resource. + /// The `protected_resource` parameter must specify the full URL of the MCP server. + pub fn new(protected_resource_url: &'a str) -> Self { + Self::with_defaults(protected_resource_url) + } + + pub async fn from_discovery_url( + discovery_url: &str, + protected_resource: S, + required_scopes: Vec, + ) -> Result + where + S: Into>, + { + let client = Client::new(); + let json: Value = client + .get(discovery_url) + .send() + .await + .map_err(|e| McpSdkError::Internal { + description: format!( + "Failed to fetch discovery document : \"{discovery_url}\": {e}" + ), + })? + .error_for_status() + .map_err(|e| McpSdkError::Internal { + description: format!("Discovery endpoint returned error: {e}"), + })? + .json() + .await + .map_err(|e| McpSdkError::Internal { + description: format!("Failed to parse JSON from discovery document: {e}"), + })?; + + // Helper to extract string field safely + let get_str = |key: &str| { + json.get(key) + .and_then(|v| v.as_str()) + .map(|s| Cow::::Owned(s.to_string())) + }; + // Helper for optional array of strings + let get_str_array = |key: &str| { + json.get(key).and_then(|v| v.as_array()).map(|arr| { + arr.iter() + .filter_map(|item| item.as_str()) + .filter(|v| !v.is_empty()) + .map(|s| Cow::::Owned(s.to_string())) + .collect::>() + }) + }; + + let issuer = get_str("issuer").ok_or_else(|| McpSdkError::Internal { + description: "Missing 'issuer' in discovery document".to_string(), + })?; + + Ok(Self { + issuer: Some(issuer.clone()), + authorization_endpoint: get_str("authorization_endpoint"), + scopes_supported: get_str_array("scopes_supported"), + required_scopes: Some(required_scopes.into_iter().map(|s| s.into()).collect()), + token_endpoint: get_str("token_endpoint"), + jwks_uri: get_str("jwks_uri"), + + userinfo_endpoint: get_str("userinfo_endpoint"), + + registration_endpoint: get_str("registration_endpoint"), + revocation_endpoint: get_str("revocation_endpoint"), + introspection_endpoint: get_str("introspection_endpoint"), + response_types_supported: get_str_array("response_types_supported"), + response_modes_supported: get_str_array("response_modes_supported"), + grant_types_supported: get_str_array("grant_types_supported"), + token_endpoint_auth_methods_supported: get_str_array( + "token_endpoint_auth_methods_supported", + ), + token_endpoint_auth_signing_alg_values_supported: get_str_array( + "token_endpoint_auth_signing_alg_values_supported", + ), + revocation_endpoint_auth_signing_alg_values_supported: get_str_array( + "revocation_endpoint_auth_signing_alg_values_supported", + ), + revocation_endpoint_auth_methods_supported: get_str_array( + "revocation_endpoint_auth_methods_supported", + ), + introspection_endpoint_auth_methods_supported: get_str_array( + "introspection_endpoint_auth_methods_supported", + ), + introspection_endpoint_auth_signing_alg_values_supported: get_str_array( + "introspection_endpoint_auth_signing_alg_values_supported", + ), + code_challenge_methods_supported: get_str_array("code_challenge_methods_supported"), + service_documentation: get_str("service_documentation"), + resource: Some(protected_resource.into()), + authorization_servers: Some(vec![issuer]), + bearer_methods_supported: None, + resource_signing_alg_values_supported: None, + resource_name: None, + resource_documentation: None, + resource_policy_uri: None, + resource_tos_uri: None, + tls_client_certificate_bound_access_tokens: None, + authorization_details_types_supported: None, + dpop_signing_alg_values_supported: None, + dpop_bound_access_tokens_required: None, + }) + } + + fn parse_url_field( + field_name: &str, + value: Option, + base_url: Option<&Url>, + ) -> Result + where + S: Into>, + { + let value = value + .ok_or(McpSdkError::Internal { + description: format!("Error: '{field_name}' is missing."), + })? + .into(); + + let url = if value.contains("://") { + // Absolute URL + Url::parse(&value) + } else if let Some(base_url) = base_url { + // Relative URL, join with base_url + join_url(base_url, &value) + } else { + // No base_url provided, try to parse as absolute URL anyway + Url::parse(&value) + }; + + url.map_err(|e| McpSdkError::Internal { + description: format!("Error: '{field_name}' is not a valid URL: {e}"), + }) + } + + fn parse_optional_url_field( + field_name: &str, + value: Option, + base_url: Option<&Url>, + ) -> Result, McpSdkError> + where + S: Into>, + { + value + .map(|v| { + let value = v.into(); + if value.contains("://") { + // Absolute URL + Url::parse(&value) + } else if let Some(base_url) = base_url { + // Relative URL, join with base_url + join_url(base_url, &value) + } else { + // No base_url provided, try to parse as absolute URL anyway + Url::parse(&value) + } + }) + .transpose() + .map_err(|e| McpSdkError::Internal { + description: format!("Error: '{field_name}' is not a valid URL: {e}"), + }) + } + + pub fn scopes_supported(mut self, scopes: Vec) -> Self + where + S: Into>, + { + self.scopes_supported = Some(scopes.into_iter().map(|s| s.into()).collect()); + self + } + + // OAuthMetadata setters + pub fn issuer(mut self, issuer: S) -> Self + where + S: Into>, + { + self.issuer = Some(issuer.into()); + self + } + + pub fn service_documentation(mut self, url: S) -> Self + where + S: Into>, + { + self.service_documentation = Some(url.into()); + self + } + + pub fn authorization_endpoint(mut self, url: S) -> Self + where + S: Into>, + { + self.authorization_endpoint = Some(url.into()); + self + } + + pub fn token_endpoint(mut self, url: S) -> Self + where + S: Into>, + { + self.token_endpoint = Some(url.into()); + self + } + + pub fn response_types_supported(mut self, types: Vec) -> Self + where + S: Into>, + { + self.response_types_supported = Some(types.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn response_modes_supported(mut self, modes: Vec) -> Self + where + S: Into>, + { + self.response_modes_supported = Some(modes.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn registration_endpoint(mut self, url: &'a str) -> Self { + self.registration_endpoint = Some(url.into()); + self + } + + pub fn userinfo_endpoint(mut self, url: &'a str) -> Self { + self.userinfo_endpoint = Some(url.into()); + self + } + + pub fn grant_types_supported(mut self, types: Vec) -> Self + where + S: Into>, + { + self.grant_types_supported = Some(types.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn token_endpoint_auth_methods_supported(mut self, methods: Vec) -> Self + where + S: Into>, + { + self.token_endpoint_auth_methods_supported = + Some(methods.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn token_endpoint_auth_signing_alg_values_supported(mut self, algs: Vec) -> Self + where + S: Into>, + { + self.token_endpoint_auth_signing_alg_values_supported = + Some(algs.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn revocation_endpoint(mut self, url: &'a str) -> Self { + self.revocation_endpoint = Some(url.into()); + self + } + + pub fn revocation_endpoint_auth_methods_supported(mut self, methods: Vec) -> Self + where + S: Into>, + { + self.revocation_endpoint_auth_methods_supported = + Some(methods.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn revocation_endpoint_auth_signing_alg_values_supported(mut self, algs: Vec) -> Self + where + S: Into>, + { + self.revocation_endpoint_auth_signing_alg_values_supported = + Some(algs.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn introspection_endpoint(mut self, endpoint: &'a str) -> Self { + self.introspection_endpoint = Some(endpoint.into()); + self + } + + pub fn introspection_endpoint_auth_methods_supported(mut self, methods: Vec) -> Self + where + S: Into>, + { + self.introspection_endpoint_auth_methods_supported = + Some(methods.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn introspection_endpoint_auth_signing_alg_values_supported( + mut self, + algs: Vec, + ) -> Self + where + S: Into>, + { + self.introspection_endpoint_auth_signing_alg_values_supported = + Some(algs.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn code_challenge_methods_supported(mut self, methods: Vec) -> Self + where + S: Into>, + { + self.code_challenge_methods_supported = + Some(methods.into_iter().map(|s| s.into()).collect()); + self + } + + // OAuthProtectedResourceMetadata setters + pub fn resource(mut self, url: &'a str) -> Self { + self.resource = Some(url.into()); + self + } + + pub fn authorization_servers(mut self, servers: Vec<&'a str>) -> Self { + self.authorization_servers = Some(servers.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn reqquired_scopes(mut self, scopes: Vec) -> Self + where + S: Into>, + { + self.required_scopes = Some(scopes.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn resource_documentation(mut self, doc: String) -> Self + where + S: Into>, + { + self.resource_documentation = Some(doc.into()); + self + } + + pub fn jwks_uri(mut self, url: &'a str) -> Self { + self.jwks_uri = Some(url.into()); + self + } + + pub fn bearer_methods_supported(mut self, methods: Vec) -> Self + where + S: Into>, + { + self.bearer_methods_supported = Some(methods.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn resource_signing_alg_values_supported(mut self, algs: Vec) -> Self + where + S: Into>, + { + self.resource_signing_alg_values_supported = + Some(algs.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn resource_name(mut self, name: S) -> Self + where + S: Into>, + { + self.resource_name = Some(name.into()); + self + } + + pub fn resource_policy_uri(mut self, url: &'a str) -> Self { + self.resource_policy_uri = Some(url.into()); + self + } + + pub fn resource_tos_uri(mut self, url: &'a str) -> Self { + self.resource_tos_uri = Some(url.into()); + self + } + + pub fn tls_client_certificate_bound_access_tokens(mut self, value: bool) -> Self { + self.tls_client_certificate_bound_access_tokens = Some(value); + self + } + + pub fn authorization_details_types_supported(mut self, types: Vec) -> Self + where + S: Into>, + { + self.authorization_details_types_supported = + Some(types.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn dpop_signing_alg_values_supported(mut self, algs: Vec) -> Self + where + S: Into>, + { + self.dpop_signing_alg_values_supported = Some(algs.into_iter().map(|s| s.into()).collect()); + self + } + + pub fn dpop_bound_access_tokens_required(mut self, value: bool) -> Self { + self.dpop_bound_access_tokens_required = Some(value); + self + } + + // Build method to construct OauthMetadata + pub fn build( + self, + ) -> Result<(AuthorizationServerMetadata, OauthProtectedResourceMetadata), McpSdkError> { + let issuer = Self::parse_url_field("issuer", self.issuer, None)?; + + let authorization_endpoint = Self::parse_url_field( + "authorization_endpoint", + self.authorization_endpoint, + Some(&issuer), + )?; + + let token_endpoint = + Self::parse_url_field("token_endpoint", self.token_endpoint, Some(&issuer))?; + + let registration_endpoint = Self::parse_optional_url_field( + "registration_endpoint", + self.registration_endpoint, + Some(&issuer), + )?; + + let revocation_endpoint = Self::parse_optional_url_field( + "revocation_endpoint", + self.revocation_endpoint, + Some(&issuer), + )?; + + let introspection_endpoint = Self::parse_optional_url_field( + "introspection_endpoint", + self.introspection_endpoint, + Some(&issuer), + )?; + + let service_documentation = Self::parse_optional_url_field( + "service_documentation", + self.service_documentation, + None, + )?; + + let jwks_uri = Self::parse_optional_url_field("jwks_uri", self.jwks_uri, Some(&issuer))?; + + let authorization_server_metadata = AuthorizationServerMetadata { + issuer, + authorization_endpoint, + token_endpoint, + registration_endpoint, + service_documentation, + revocation_endpoint, + introspection_endpoint, + userinfo_endpoint: self.userinfo_endpoint.map(|v| v.into()), + response_types_supported: self + .response_types_supported + .unwrap_or_default() + .into_iter() // iterate over Cow<'a, str> + .map(|c| c.into_owned()) + .collect(), + response_modes_supported: self + .response_modes_supported + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + scopes_supported: self + .scopes_supported + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + grant_types_supported: self + .grant_types_supported + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + token_endpoint_auth_methods_supported: self + .token_endpoint_auth_methods_supported + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + token_endpoint_auth_signing_alg_values_supported: self + .token_endpoint_auth_signing_alg_values_supported + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + revocation_endpoint_auth_signing_alg_values_supported: self + .revocation_endpoint_auth_signing_alg_values_supported + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + revocation_endpoint_auth_methods_supported: self + .revocation_endpoint_auth_methods_supported + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + introspection_endpoint_auth_methods_supported: self + .introspection_endpoint_auth_methods_supported + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + introspection_endpoint_auth_signing_alg_values_supported: self + .introspection_endpoint_auth_signing_alg_values_supported + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + code_challenge_methods_supported: self + .code_challenge_methods_supported + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + jwks_uri: jwks_uri.clone(), + }; + + let resource = Self::parse_url_field("resource", self.resource, None)?; + let resource_policy_uri = + Self::parse_optional_url_field("resource_policy_uri", self.resource_policy_uri, None)?; + let resource_tos_uri = + Self::parse_optional_url_field("resource_tos_uri", self.resource_tos_uri, None)?; + + // Validate mandatory authorization_servers + let authorization_servers = + self.authorization_servers + .ok_or_else(|| McpSdkError::Internal { + description: "Error: 'authorization_servers' is missing".to_string(), + })?; + if authorization_servers.is_empty() { + return Err(McpSdkError::Internal { + description: "Error: 'authorization_servers' must contain at least one URL" + .to_string(), + }); + } + let authorization_servers = authorization_servers + .iter() + .map(|url| { + Url::parse(url).map_err(|err| McpSdkError::Internal { + description: format!( + "Error: 'authorization_servers' contains invalid URL '{url}': {err}", + ), + }) + }) + .collect::, _>>()?; + + let protected_resource_metadata = OauthProtectedResourceMetadata { + resource, + authorization_servers, + jwks_uri, + scopes_supported: self + .required_scopes + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + bearer_methods_supported: self + .bearer_methods_supported + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + resource_signing_alg_values_supported: self + .resource_signing_alg_values_supported + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + resource_name: self.resource_name.map(|s| s.into()), + resource_documentation: self.resource_documentation.map(|s| s.into()), + resource_policy_uri, + resource_tos_uri, + tls_client_certificate_bound_access_tokens: self + .tls_client_certificate_bound_access_tokens, + authorization_details_types_supported: self + .authorization_details_types_supported + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + dpop_signing_alg_values_supported: self + .dpop_signing_alg_values_supported + .map(|v| v.into_iter().map(|c| c.into_owned()).collect()), + dpop_bound_access_tokens_required: self.dpop_bound_access_tokens_required, + }; + + Ok((authorization_server_metadata, protected_resource_metadata)) + } +} diff --git a/crates/rust-mcp-sdk/src/auth/spec.rs b/crates/rust-mcp-sdk/src/auth/spec.rs new file mode 100644 index 0000000..1bbd809 --- /dev/null +++ b/crates/rust-mcp-sdk/src/auth/spec.rs @@ -0,0 +1,15 @@ +mod audience; +#[cfg(feature = "auth")] +mod claims; +#[cfg(feature = "auth")] +mod discovery; +#[cfg(feature = "auth")] +mod jwk; + +pub use audience::*; +#[cfg(feature = "auth")] +pub use claims::*; +#[cfg(feature = "auth")] +pub use discovery::*; +#[cfg(feature = "auth")] +pub use jwk::*; diff --git a/crates/rust-mcp-sdk/src/auth/spec/audience.rs b/crates/rust-mcp-sdk/src/auth/spec/audience.rs new file mode 100644 index 0000000..88690d1 --- /dev/null +++ b/crates/rust-mcp-sdk/src/auth/spec/audience.rs @@ -0,0 +1,111 @@ +use core::fmt; + +use serde::{Deserialize, Deserializer, Serialize, Serializer}; +use serde_json::Value; + +/// Represents the audience claim, which can be a single string or a list of strings. +#[derive(Debug, Clone)] +pub enum Audience { + Single(String), + Multiple(Vec), +} + +impl Audience { + /// Converts the audience to a Vec for uniform access. + pub fn to_vec(&self) -> Vec { + match self { + Audience::Single(s) => vec![s.clone()], + Audience::Multiple(v) => v.clone(), + } + } +} + +impl fmt::Display for Audience { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + Audience::Single(s) => write!(f, "{s}"), + Audience::Multiple(v) => { + let formatted = v.join(", "); + write!(f, "{formatted}") + } + } + } +} + +impl PartialEq for Audience { + fn eq(&self, other: &Self) -> bool { + self.to_vec() == other.to_vec() + } +} + +impl Eq for Audience {} + +impl Serialize for Audience { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + match self { + // Serialize a single string directly as a JSON string + Audience::Single(s) => serializer.serialize_str(s), + // Serialize multiple strings as a JSON array + Audience::Multiple(v) => serializer.collect_seq(v), + } + } +} + +impl<'de> Deserialize<'de> for Audience { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + // Use a Value to handle both string and array cases + let value = Value::deserialize(deserializer)?; + match value { + Value::String(s) => Ok(Audience::Single(s)), + Value::Array(arr) => { + let strings = arr + .into_iter() + .map(|v| match v { + Value::String(s) => Ok(s), + _ => Err(serde::de::Error::custom( + "audience array must contain strings", + )), + }) + .collect::, D::Error>>()?; + Ok(Audience::Multiple(strings)) + } + _ => Err(serde::de::Error::custom( + "audience must be a string or an array of strings", + )), + } + } +} + +// Allow converting from &str +impl From<&str> for Audience { + fn from(s: &str) -> Self { + Audience::Single(s.to_string()) + } +} + +// Allow converting from String +impl From for Audience { + fn from(s: String) -> Self { + Audience::Single(s) + } +} + +// Allow converting from Vec +impl From> for Audience { + fn from(v: Vec) -> Self { + Audience::Multiple(v) + } +} + +// Allow converting from Vec<&str> for convenience +impl From> for Audience { + fn from(v: Vec<&str>) -> Self { + Audience::Multiple(v.into_iter().map(|s| s.to_string()).collect()) + } +} diff --git a/crates/rust-mcp-sdk/src/auth/spec/claims.rs b/crates/rust-mcp-sdk/src/auth/spec/claims.rs new file mode 100644 index 0000000..814bf95 --- /dev/null +++ b/crates/rust-mcp-sdk/src/auth/spec/claims.rs @@ -0,0 +1,283 @@ +use super::Audience; +use serde::{Deserialize, Serialize}; + +/// Represents a structured address for the OIDC address claim. +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct Address { + /// Full mailing address, formatted for display or use. + #[serde(skip_serializing_if = "Option::is_none")] + pub formatted: Option, + /// Street address component (e.g., house number and street name). + #[serde(skip_serializing_if = "Option::is_none")] + pub street_address: Option, + /// City or locality component. + #[serde(skip_serializing_if = "Option::is_none")] + pub locality: Option, + /// State, province, or region component. + #[serde(skip_serializing_if = "Option::is_none")] + pub region: Option, + /// ZIP or postal code component. + #[serde(skip_serializing_if = "Option::is_none")] + pub postal_code: Option, + /// Country name component. + #[serde(skip_serializing_if = "Option::is_none")] + pub country: Option, +} + +/// Represents a combined set of JWT, OAuth 2.0, OIDC, and provider-specific claims. +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct AuthClaims { + // Standard JWT Claims (RFC 7519) + /// Issuer - Identifies the authorization server that issued the token (JWT: iss). + #[serde(rename = "iss", skip_serializing_if = "Option::is_none")] + pub issuer: Option, + + /// Subject - Unique identifier for the user or client (JWT: sub). + #[serde(rename = "sub", skip_serializing_if = "Option::is_none")] + pub subject: Option, + + /// Audience - Identifies the intended recipients, can be a string or array (JWT: aud). + #[serde(rename = "aud", skip_serializing_if = "Option::is_none")] + pub audience: Option, + + /// Expiration Time - Unix timestamp when the token expires (JWT: exp). + #[serde(rename = "exp", skip_serializing_if = "Option::is_none")] + pub expiration: Option, + + /// Not Before - Unix timestamp when the token becomes valid (JWT: nbf). + #[serde(rename = "nbf", skip_serializing_if = "Option::is_none")] + pub not_before: Option, + + /// Issued At - Unix timestamp when the token was issued (JWT: iat). + #[serde(rename = "iat", skip_serializing_if = "Option::is_none")] + pub issued_at: Option, + + /// JWT ID - Unique identifier for the token to prevent reuse (JWT: jti). + #[serde(rename = "jti", skip_serializing_if = "Option::is_none")] + pub jwt_id: Option, + + // OAuth 2.0 Access Token Claims (RFC 9068) + /// Scope - Space-separated list of scopes authorized for the token. + #[serde(rename = "scope", skip_serializing_if = "Option::is_none")] + pub scope: Option, + + /// Client ID - ID of the OAuth client that obtained the token. + #[serde(rename = "client_id", skip_serializing_if = "Option::is_none")] + pub client_id: Option, + + /// Confirmation - Provides key binding info (e.g., cnf.jkt for PoP tokens). + #[serde(rename = "cnf", skip_serializing_if = "Option::is_none")] + pub confirmation: Option, + + /// Authentication Time - Unix timestamp when the user was authenticated. + #[serde(rename = "auth_time", skip_serializing_if = "Option::is_none")] + pub auth_time: Option, + + /// Authorized Party - The party to which the token was issued. + #[serde(rename = "azp", skip_serializing_if = "Option::is_none")] + pub authorized_party: Option, + + /// Actor - Used for delegated authorization (on behalf of another party). + #[serde(rename = "act", skip_serializing_if = "Option::is_none")] + pub actor: Option, + + /// Session ID - Links the token to a specific user session (for logout, etc.). + #[serde(rename = "sid", skip_serializing_if = "Option::is_none")] + pub session_id: Option, + + // OpenID Connect Standard Claims (OIDC Core 1.0) + /// User's full name. + #[serde(rename = "name", skip_serializing_if = "Option::is_none")] + pub name: Option, + + /// User's first name. + #[serde(rename = "given_name", skip_serializing_if = "Option::is_none")] + pub given_name: Option, + + /// User's last name. + #[serde(rename = "family_name", skip_serializing_if = "Option::is_none")] + pub family_name: Option, + + /// User's middle name. + #[serde(rename = "middle_name", skip_serializing_if = "Option::is_none")] + pub middle_name: Option, + + /// Casual name of the user. + #[serde(rename = "nickname", skip_serializing_if = "Option::is_none")] + pub nickname: Option, + + /// Preferred username (often login name). + #[serde(rename = "preferred_username", skip_serializing_if = "Option::is_none")] + pub preferred_username: Option, + + /// URL of the user's profile page. + #[serde(rename = "profile", skip_serializing_if = "Option::is_none")] + pub profile: Option, + + /// URL of the user's profile picture. + #[serde(rename = "picture", skip_serializing_if = "Option::is_none")] + pub picture: Option, + + /// URL of the user's website. + #[serde(rename = "website", skip_serializing_if = "Option::is_none")] + pub website: Option, + + /// User's email address. + #[serde(rename = "email", skip_serializing_if = "Option::is_none")] + pub email: Option, + + /// Whether the email has been verified. + #[serde(rename = "email_verified", skip_serializing_if = "Option::is_none")] + pub email_verified: Option, + + /// User's gender. + #[serde(rename = "gender", skip_serializing_if = "Option::is_none")] + pub gender: Option, + + /// User's date of birth (e.g., "YYYY-MM-DD"). + #[serde(rename = "birthdate", skip_serializing_if = "Option::is_none")] + pub birthdate: Option, + + /// User's time zone (e.g., "America/New_York"). + #[serde(rename = "zoneinfo", skip_serializing_if = "Option::is_none")] + pub zoneinfo: Option, + + /// User's locale (e.g., "en-US"). + #[serde(rename = "locale", skip_serializing_if = "Option::is_none")] + pub locale: Option, + + /// User's phone number. + #[serde(rename = "phone_number", skip_serializing_if = "Option::is_none")] + pub phone_number: Option, + + /// Whether the phone number has been verified. + #[serde( + rename = "phone_number_verified", + skip_serializing_if = "Option::is_none" + )] + pub phone_number_verified: Option, + + /// User's structured address. + #[serde(rename = "address", skip_serializing_if = "Option::is_none")] + pub address: Option

, + + /// Last time the user's information was updated (Unix timestamp). + #[serde(rename = "updated_at", skip_serializing_if = "Option::is_none")] + pub updated_at: Option, + + // Microsoft Entra ID (Azure AD) Provider-Specific Claims + /// Object ID of the user or service principal (Entra ID). + #[serde(rename = "oid", skip_serializing_if = "Option::is_none")] + pub object_id: Option, + + /// Tenant ID (directory ID) (Entra ID). + #[serde(rename = "tid", skip_serializing_if = "Option::is_none")] + pub tenant_id: Option, + + /// User Principal Name (login, e.g., user@domain) (Entra ID). + #[serde(rename = "upn", skip_serializing_if = "Option::is_none")] + pub user_principal_name: Option, + + /// Assigned roles (Entra ID). + #[serde(rename = "roles", skip_serializing_if = "Option::is_none")] + pub roles: Option>, + + /// Azure AD groups (GUIDs) (Entra ID). + #[serde(rename = "groups", skip_serializing_if = "Option::is_none")] + pub groups: Option>, + + /// Application ID (same as client_id) (Entra ID). + #[serde(rename = "appid", skip_serializing_if = "Option::is_none")] + pub application_id: Option, + + /// Unique name (e.g., user@domain) (Entra ID). + #[serde(rename = "unique_name", skip_serializing_if = "Option::is_none")] + pub unique_name: Option, + + /// Token version (e.g., "1.0" or "2.0") (Entra ID). + #[serde(rename = "ver", skip_serializing_if = "Option::is_none")] + pub version: Option, +} + +/// Represents an OAuth 2.0 Token Introspection response as per RFC 7662. +/// +/// This struct captures the response from an OAuth 2.0 introspection endpoint, +/// providing details about the validity and metadata of an access or refresh token. +/// All fields are optional except `active`, as per the specification, to handle +/// cases where the token is inactive or certain metadata is not provided. +/// +/// # Example JSON +/// ```json +/// { +/// "active": true, +/// "scope": "read write", +/// "client_id": "client123", +/// "username": "john_doe", +/// "token_type": "access_token", +/// "exp": 1697054400, +/// "iat": 1697050800, +/// "nbf": 1697050800, +/// "sub": "user123", +/// "aud": ["resource_server_1", "resource_server_2"], +/// "iss": "https://auth.example.com", +/// "jti": "abc123" +/// } +/// ``` +#[derive(Debug, Serialize, Deserialize, Clone)] +#[serde(rename_all = "snake_case")] +pub struct IntrospectionResponse { + /// Indicates whether the token is active (valid, not expired, etc.). + /// This field is required by the OAuth 2.0 introspection specification. + pub active: bool, + + /// Space-separated list of scopes granted to the token. + /// Optional, as the token may have no scopes or be inactive. + #[serde(default)] + pub scope: Option, + + /// Identifier of the client that requested the token. + /// Optional, as it may not be provided for inactive tokens. + #[serde(default)] + pub client_id: Option, + + /// Username of the resource owner associated with the token, if applicable. + /// Optional, as it may not apply to all token types or be absent for inactive tokens. + #[serde(default)] + pub username: Option, + + /// Type of the token, typically "access_token" or "refresh_token". + /// Optional, as it may not be provided for inactive tokens. + #[serde(default)] + pub token_type: Option, + + /// Expiration Time - Unix timestamp when the token expires (JWT: exp). + #[serde(rename = "exp", skip_serializing_if = "Option::is_none")] + pub expiration: Option, + + /// Issued At - Unix timestamp when the token was issued (JWT: iat). + #[serde(rename = "iat", skip_serializing_if = "Option::is_none")] + pub issued_at: Option, + + /// Not Before - Unix timestamp when the token becomes valid (JWT: nbf). + #[serde(rename = "nbf", skip_serializing_if = "Option::is_none")] + pub not_before: Option, + + /// Subject identifier, often the user ID associated with the token. + /// Optional, as it may not be provided for inactive tokens. + #[serde(rename = "sub", skip_serializing_if = "Option::is_none")] + pub subject: Option, + + /// Audience(s) the token is intended for, which can be a single string or an array of strings. + /// Optional, as it may not be provided for inactive tokens. + #[serde(rename = "aud", skip_serializing_if = "Option::is_none")] + pub audience: Option, + + /// Issuer identifier, typically the URI of the authorization server. + /// Optional, as it may not be provided for inactive tokens. + #[serde(rename = "iss", skip_serializing_if = "Option::is_none")] + pub issuer: Option, + + /// JWT ID - Unique identifier for the token to prevent reuse (JWT: jti). + #[serde(rename = "jti", skip_serializing_if = "Option::is_none")] + pub jwt_id: Option, +} diff --git a/crates/rust-mcp-sdk/src/auth/spec/discovery.rs b/crates/rust-mcp-sdk/src/auth/spec/discovery.rs new file mode 100644 index 0000000..0d1bce3 --- /dev/null +++ b/crates/rust-mcp-sdk/src/auth/spec/discovery.rs @@ -0,0 +1,315 @@ +use crate::{ + auth::{OauthEndpoint, OAUTH_PROTECTED_RESOURCE_BASE, WELL_KNOWN_OAUTH_AUTHORIZATION_SERVER}, + error::McpSdkError, + mcp_http::url_base, +}; +use reqwest::Client; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use url::Url; + +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct AuthorizationServerMetadata { + /// The base URL of the authorization server (e.g., "http://localhost:8080/realms/master/"). + pub issuer: Url, + + /// URL to which the client redirects the user for authorization. + pub authorization_endpoint: Url, + + /// URL to exchange authorization codes for tokens or refresh tokens. + pub token_endpoint: Url, + + /// URL of the authorization server's JWK Set [JWK] document + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub jwks_uri: Option, + + /// Endpoint where clients can register dynamically. + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub registration_endpoint: Option, + + /// List of supported OAuth scopes (e.g., "openid", "profile", "email", mcp:tools) [RECOMMENDED] + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub scopes_supported: Option>, + + /// Response Types. Required by spec. If missing, default is empty vec. + /// Examples: "code", "token", "id_token" + #[serde(default, skip_serializing_if = "::std::vec::Vec::is_empty")] + pub response_types_supported: Vec, + + /// Response Modes. Indicates how the authorization response is returned. + /// Examples: "query", "fragment", "form_post" + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub response_modes_supported: Option>, + + // ui_locales_supported + // op_policy_uri + // op_tos_uri + /// List of supported Grant Types + /// Examples: "authorization_code", "client_credentials", "refresh_token" + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub grant_types_supported: Option>, + + /// Methods like "client_secret_basic", "client_secret_post" + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub token_endpoint_auth_methods_supported: Option>, + + /// Signing algorithms for client authentication (e.g., "RS256") + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub token_endpoint_auth_signing_alg_values_supported: Option>, + + /// Link to human-readable docs for developers. + /// https://datatracker.ietf.org/doc/html/rfc8414 + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub service_documentation: Option, + + /// OAuth 2.0 Token Revocation endpoint. + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub revocation_endpoint: Option, + + /// Similar to token endpoint, but for revocation-specific auth. + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub revocation_endpoint_auth_signing_alg_values_supported: Option>, + + /// Tells the client which authentication methods are supported when accessing the token revocation endpoint. + /// These are standardized methods from RFC 6749 (OAuth 2.0) + /// Common values: "client_secret_basic", "client_secret_post", "private_key_jwt" + /// `client_secret_basic` – client credentials sent in HTTP Basic Auth. + /// `client_secret_post` – client credentials sent in the POST body. + /// `private_key_jwt` – client authenticates using a signed JWT. + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub revocation_endpoint_auth_methods_supported: Option>, + + /// URL to validate tokens and get their metadata. + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub introspection_endpoint: Option, + + /// Auth methods for accessing introspection. + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub introspection_endpoint_auth_methods_supported: Option>, + + /// Algorithms for accessing introspection. + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub introspection_endpoint_auth_signing_alg_values_supported: Option>, + + /// Methods supported for PKCE (Proof Key for Code Exchange). + /// Common values: "plain", "S256" + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub code_challenge_methods_supported: Option>, + + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub userinfo_endpoint: Option, +} + +impl AuthorizationServerMetadata { + /// Creates a new `AuthorizationServerMetadata` instance with the minimal required fields. + /// According to the OAuth 2.0 Authorization Server Metadata Metadata specification (RFC 8414), + /// the following fields are **required** for a valid metadata document: + /// - `issuer` + /// - `authorization_endpoint` + /// - `token_endpoint` + /// + /// All other fields are initialized with their default values (typically `None` or empty collections). + /// + pub fn new( + issuer: &str, + authorization_endpoint: &str, + token_endpoint: &str, + ) -> Result { + let issuer = Url::parse(issuer)?; + let authorization_endpoint = Url::parse(authorization_endpoint)?; + let token_endpoint = Url::parse(token_endpoint)?; + + Ok(Self { + issuer, + authorization_endpoint, + token_endpoint, + jwks_uri: Default::default(), + registration_endpoint: Default::default(), + scopes_supported: Default::default(), + response_types_supported: Default::default(), + response_modes_supported: Default::default(), + grant_types_supported: Default::default(), + token_endpoint_auth_methods_supported: Default::default(), + token_endpoint_auth_signing_alg_values_supported: Default::default(), + service_documentation: Default::default(), + revocation_endpoint: Default::default(), + revocation_endpoint_auth_signing_alg_values_supported: Default::default(), + revocation_endpoint_auth_methods_supported: Default::default(), + introspection_endpoint: Default::default(), + introspection_endpoint_auth_methods_supported: Default::default(), + introspection_endpoint_auth_signing_alg_values_supported: Default::default(), + code_challenge_methods_supported: Default::default(), + userinfo_endpoint: Default::default(), + }) + } + + /// Fetches authorization server metadata from a remote `.well-known/openid-configuration` + /// or OAuth 2.0 Authorization Server Metadata endpoint. + /// + /// This performs an HTTP GET request and deserializes the response directly into + /// `AuthorizationServerMetadata`. The endpoint must return a JSON document conforming + /// to RFC 8414 (OAuth 2.0 Authorization Server Metadata) or OpenID Connect Discovery 1.0. + /// + pub async fn from_discovery_url(discovery_url: &str) -> Result { + let client = Client::new(); + let metadata = client + .get(discovery_url) + .send() + .await + .map_err(|err| McpSdkError::Internal { + description: err.to_string(), + })? + .json::() + .await + .map_err(|err| McpSdkError::Internal { + description: err.to_string(), + })?; + Ok(metadata) + } +} + +/// represents metadata about a protected resource in the OAuth 2.0 ecosystem. +/// It allows clients and authorization servers to discover how to interact with a protected resource (like an MCP endpoint), +/// including security requirements and supported features. +/// https://datatracker.ietf.org/doc/rfc9728/ +#[derive(Debug, Serialize, Deserialize, Clone)] +pub struct OauthProtectedResourceMetadata { + /// The base identifier of the protected resource (e.g., an MCP server's URI). + /// This is the only required field. + pub resource: Url, + + /// List of authorization servers that can issue access tokens for this resource. + /// Allows dynamic trust discovery. + #[serde(default, skip_serializing_if = "::std::vec::Vec::is_empty")] + pub authorization_servers: Vec, + + /// URL where the resource exposes its public keys (JWKS) to verify signed tokens. + /// Typically used to verify JWT access tokens. + /// Example: "https://example.com/.well-known/jwks.json" + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub jwks_uri: Option, + + /// OAuth scopes the resource supports (e.g., "mcp:tool", "read", "write", "admin"). + /// Helps clients know what they can request for access. + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub scopes_supported: Option>, + + /// Methods accepted for presenting Bearer tokens: + /// `authorization_header` (typical) + /// `form_post` + /// `uri_query` + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub bearer_methods_supported: Option>, + + /// Supported signing algorithms for access tokens (if tokens are JWTs). + /// Example: ["RS256", "ES256"] + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub resource_signing_alg_values_supported: Option>, + + /// A human-readable name for the resource. + /// Useful for UIs, logs, or developer documentation. + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub resource_name: Option, + + /// URL to developer docs describing the resource and how to use it. + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub resource_documentation: Option, + + /// URL to the resource's access policy or terms (e.g., rules on who can access what). + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub resource_policy_uri: Option, + + /// URL to terms of service applicable to this resource. + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub resource_tos_uri: Option, + + /// If true, access tokens must be bound to a client TLS certificate. + /// Used in mutual TLS scenarios for additional security. + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub tls_client_certificate_bound_access_tokens: Option, + + ///Lists structured authorization types supported (used with Rich Authorization Requests (RAR) + /// Example: ["payment_initiation", "account_information"] + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub authorization_details_types_supported: Option>, + + /// Supported algorithms for DPoP (Demonstration of Proof-of-Possession) tokens. + /// Example: ["ES256", "RS256"] + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub dpop_signing_alg_values_supported: Option>, + + /// If true, the resource requires access tokens to be DPoP-bound. + /// Enhances security by tying tokens to a specific client and key. + #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] + pub dpop_bound_access_tokens_required: Option, +} + +impl OauthProtectedResourceMetadata { + /// Creates a new [`OAuthProtectedResourceMetadata`] instance with only the + /// minimal required fields populated. + /// + /// The `resource` and each entry in `authorization_servers` must be valid URLs. + /// All other metadata fields are initialized to their defaults. + /// To provide optional or extended metadata, assign those fields after creation or construct the struct directly. + pub fn new( + resource: S, + authorization_servers: Vec, + scopes_supported: Option>, + ) -> Result + where + S: AsRef, + { + let resource = Url::parse(resource.as_ref())?; + let authorization_servers: Vec<_> = authorization_servers + .iter() + .map(|s| Url::parse(s.as_ref())) + .collect::>()?; + + Ok(Self { + resource, + authorization_servers, + jwks_uri: Default::default(), + scopes_supported, + bearer_methods_supported: Default::default(), + resource_signing_alg_values_supported: Default::default(), + resource_name: Default::default(), + resource_documentation: Default::default(), + resource_policy_uri: Default::default(), + resource_tos_uri: Default::default(), + tls_client_certificate_bound_access_tokens: Default::default(), + authorization_details_types_supported: Default::default(), + dpop_signing_alg_values_supported: Default::default(), + dpop_bound_access_tokens_required: Default::default(), + }) + } +} + +pub fn create_protected_resource_metadata_url(path: &str) -> String { + format!( + "{OAUTH_PROTECTED_RESOURCE_BASE}{}", + if path == "/" { "" } else { path } + ) +} + +pub fn create_discovery_endpoints( + mcp_server_url: &str, +) -> Result<(HashMap, String), McpSdkError> { + let mut endpoint_map = HashMap::new(); + endpoint_map.insert( + WELL_KNOWN_OAUTH_AUTHORIZATION_SERVER.to_string(), + OauthEndpoint::AuthorizationServerMetadata, + ); + + let resource_url = Url::parse(mcp_server_url).map_err(|err| McpSdkError::Internal { + description: err.to_string(), + })?; + + let relative_url = create_protected_resource_metadata_url(resource_url.path()); + let base_url = url_base(&resource_url); + let protected_resource_metadata_url = + format!("{}{relative_url}", base_url.trim_end_matches('/')); + + endpoint_map.insert(relative_url, OauthEndpoint::ProtectedResourceMetadata); + + Ok((endpoint_map, protected_resource_metadata_url)) +} diff --git a/crates/rust-mcp-sdk/src/auth/spec/jwk.rs b/crates/rust-mcp-sdk/src/auth/spec/jwk.rs new file mode 100644 index 0000000..67d3982 --- /dev/null +++ b/crates/rust-mcp-sdk/src/auth/spec/jwk.rs @@ -0,0 +1,104 @@ +use crate::auth::{Audience, AuthClaims, AuthenticationError}; +use http::StatusCode; +use jsonwebtoken::{decode, decode_header, jwk::Jwk, DecodingKey, TokenData, Validation}; +use serde::{Deserialize, Serialize}; + +/// A JSON Web Key Set (JWKS) containing a list of JSON Web Keys. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct JsonWebKeySet { + /// List of JSON Web Keys. + pub keys: Vec, +} + +#[derive(Debug, Serialize, Deserialize, Clone)] +struct Claims { + aud: Option, // Optional. Audience + exp: usize, // Required (validate_exp defaults to true in validation). Expiration time (as UTC timestamp) + iat: Option, // Optional. Issued at (as UTC timestamp) + iss: Option, // Optional. Issuer + nbf: Option, // Optional. Not Before (as UTC timestamp) + sub: Option, // Optional. Subject (whom token refers to) +} + +pub fn decode_token_header(token: &str) -> Result { + let header = + decode_header(token).map_err(|err| AuthenticationError::TokenVerificationFailed { + description: err.to_string(), + status_code: Some(StatusCode::UNAUTHORIZED.as_u16()), + })?; + Ok(header) +} + +impl JsonWebKeySet { + pub fn verify( + &self, + token: String, + validate_audience: Option<&Audience>, + validate_issuer: Option<&String>, + ) -> Result, AuthenticationError> { + let header = decode_token_header(&token)?; + + let kid = header.kid.ok_or(AuthenticationError::InvalidToken { + description: "Missing kid in token header", + })?; + + let jwk = self + .keys + .iter() + .find(|key| key.common.key_id == Some(kid.clone())) + .ok_or(AuthenticationError::InvalidToken { + description: "No matching key found in JWKS", + })?; + + let decoding_key = DecodingKey::from_jwk(jwk).map_err(|err| { + AuthenticationError::TokenVerificationFailed { + description: err.to_string(), + status_code: None, + } + })?; + + let mut validation = Validation::new(header.alg); + + let mut required_claims = vec![]; + if let Some(validate_audience) = validate_audience { + let vec_audience = match validate_audience { + Audience::Single(aud) => &vec![aud.to_owned()], + Audience::Multiple(auds) => auds, + }; + validation.set_audience(vec_audience); + required_claims.push("aud"); + } else { + validation.validate_aud = false; + } + + if let Some(validate_issuer) = validate_issuer { + validation.set_issuer(&[validate_issuer]); + required_claims.push("iss"); + } + if !required_claims.is_empty() { + validation.set_required_spec_claims(&required_claims); + } + + let token_data = + decode::(token, &decoding_key, &validation).map_err(|err| { + match err.kind() { + jsonwebtoken::errors::ErrorKind::InvalidToken => { + AuthenticationError::InvalidToken { + description: "Invalid token", + } + } + jsonwebtoken::errors::ErrorKind::ExpiredSignature => { + AuthenticationError::InvalidToken { + description: "Expired token", + } + } + _ => AuthenticationError::TokenVerificationFailed { + description: err.to_string(), + status_code: Some(StatusCode::BAD_REQUEST.as_u16()), + }, + } + })?; + + Ok(token_data) + } +} diff --git a/crates/rust-mcp-sdk/src/auth/token_verifier.rs b/crates/rust-mcp-sdk/src/auth/token_verifier.rs new file mode 100644 index 0000000..f6f9c67 --- /dev/null +++ b/crates/rust-mcp-sdk/src/auth/token_verifier.rs @@ -0,0 +1,7 @@ +use super::{AuthInfo, AuthenticationError}; +use async_trait::async_trait; + +#[async_trait] +pub trait OauthTokenVerifier: Send + Sync { + async fn verify_token(&self, access_token: String) -> Result; +} diff --git a/crates/rust-mcp-sdk/src/error.rs b/crates/rust-mcp-sdk/src/error.rs index 3879526..9a99336 100644 --- a/crates/rust-mcp-sdk/src/error.rs +++ b/crates/rust-mcp-sdk/src/error.rs @@ -1,5 +1,6 @@ +#[cfg(feature = "auth")] +use crate::auth::AuthenticationError; use crate::schema::{ParseProtocolVersionError, RpcError}; - use rust_mcp_transport::error::TransportError; use thiserror::Error; use tokio::task::JoinError; @@ -27,11 +28,18 @@ pub enum McpSdkError { #[error("{0}")] HyperServer(#[from] TransportServerError), + #[cfg(feature = "auth")] + #[error("{0}")] + AuthenticationError(#[from] AuthenticationError), + #[error("{0}")] SdkError(#[from] crate::schema::schema_utils::SdkError), #[error("Protocol error: {kind}")] Protocol { kind: ProtocolErrorKind }, + + #[error("Server error: {description}")] + Internal { description: String }, } // Sub-enum for protocol-related errors diff --git a/crates/rust-mcp-sdk/src/hyper_servers/error.rs b/crates/rust-mcp-sdk/src/hyper_servers/error.rs index dd55d8f..bc0955a 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/error.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/error.rs @@ -3,6 +3,9 @@ use std::net::AddrParseError; use axum::{http::StatusCode, response::IntoResponse}; use thiserror::Error; +#[cfg(feature = "auth")] +use crate::auth::AuthenticationError; + pub type TransportServerResult = core::result::Result; #[derive(Debug, Error, Clone)] @@ -25,6 +28,9 @@ pub enum TransportServerError { SslCertError(String), #[error("{0}")] TransportError(String), + #[cfg(feature = "auth")] + #[error("{0}")] + AuthenticationError(#[from] AuthenticationError), } impl IntoResponse for TransportServerError { diff --git a/crates/rust-mcp-sdk/src/hyper_servers/routes.rs b/crates/rust-mcp-sdk/src/hyper_servers/routes.rs index fcaa290..8724839 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/routes.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/routes.rs @@ -1,3 +1,5 @@ +#[cfg(feature = "auth")] +pub mod auth_routes; pub mod fallback_routes; pub mod messages_routes; #[cfg(feature = "sse")] @@ -5,7 +7,8 @@ pub mod sse_routes; pub mod streamable_http_routes; use super::HyperServerOptions; -use crate::mcp_http::{McpAppState, McpHttpHandler}; +use crate::mcp_http::McpAppState; +use crate::mcp_http::McpHttpHandler; use axum::{Extension, Router}; use std::sync::Arc; @@ -20,33 +23,41 @@ use std::sync::Arc; /// /// # Returns /// * `Router` - An Axum router configured with all application routes and state +/// pub fn app_routes( state: Arc, server_options: &HyperServerOptions, http_handler: McpHttpHandler, ) -> Router { - let router: Router = Router::new() - .merge(streamable_http_routes::routes( + let http_handler = Arc::new(http_handler); + + let router = { + let mut router = Router::new(); + + #[cfg(feature = "auth")] + { + router = router.merge(auth_routes::routes(http_handler.clone())); + } + + router = router.merge(streamable_http_routes::routes( server_options.streamable_http_endpoint(), - )) - .merge({ - let mut r = Router::new(); - #[cfg(feature = "sse")] - if server_options.sse_support { - r = r - .merge(sse_routes::routes( - server_options.sse_endpoint(), - server_options.sse_messages_endpoint(), - )) - .merge(messages_routes::routes( - server_options.sse_messages_endpoint(), - )) - } - r - }) - .with_state(state) - .merge(fallback_routes::routes()) - .layer(Extension(Arc::new(http_handler))); + )); + + #[cfg(feature = "sse")] + { + router = router + .merge(sse_routes::routes( + server_options.sse_endpoint(), + server_options.sse_messages_endpoint(), + )) + .merge(messages_routes::routes( + server_options.sse_messages_endpoint(), + )); + } + + router = router.merge(fallback_routes::routes()); + router.with_state(state).layer(Extension(http_handler)) + }; router } diff --git a/crates/rust-mcp-sdk/src/hyper_servers/routes/auth_routes.rs b/crates/rust-mcp-sdk/src/hyper_servers/routes/auth_routes.rs new file mode 100644 index 0000000..e905177 --- /dev/null +++ b/crates/rust-mcp-sdk/src/hyper_servers/routes/auth_routes.rs @@ -0,0 +1,33 @@ +use crate::hyper_servers::error::TransportServerResult; +use crate::mcp_http::{McpAppState, McpHttpHandler}; +use axum::routing::any; +use axum::Extension; +use axum::{extract::State, response::IntoResponse, Router}; +use http::{HeaderMap, Method, Uri}; +use std::sync::Arc; + +pub fn routes(mcp_handler: Arc) -> Router> { + let endpoints: Vec<&String> = mcp_handler.oauth_endppoints().unwrap_or_default(); + + endpoints + .into_iter() + .fold(Router::new(), |router, endpoint| { + router.route(endpoint, any(handle_auth_request)) + }) +} + +#[cfg(feature = "auth")] +pub async fn handle_auth_request( + method: Method, + uri: Uri, + headers: HeaderMap, + State(state): State>, + Extension(http_handler): Extension>, + payload: String, +) -> TransportServerResult { + let request = McpHttpHandler::create_request(method, uri, headers, Some(payload.as_str())); + let generic_res = http_handler.handle_auth_requests(request, state).await?; + let (parts, body) = generic_res.into_parts(); + let resp = axum::response::Response::from_parts(parts, axum::body::Body::new(body)); + Ok(resp) +} diff --git a/crates/rust-mcp-sdk/src/hyper_servers/routes/fallback_routes.rs b/crates/rust-mcp-sdk/src/hyper_servers/routes/fallback_routes.rs index 971ed43..5f70fb2 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/routes/fallback_routes.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/routes/fallback_routes.rs @@ -1,13 +1,16 @@ +use crate::mcp_http::McpAppState; use axum::{ http::{StatusCode, Uri}, + response::IntoResponse, Router, }; +use std::sync::Arc; -pub fn routes() -> Router { +pub fn routes() -> Router> { Router::new().fallback(not_found) } -pub async fn not_found(uri: Uri) -> (StatusCode, String) { +pub async fn not_found(uri: Uri) -> impl IntoResponse { ( StatusCode::NOT_FOUND, format!("The requested uri does not exist:\r\nuri: {uri}"), diff --git a/crates/rust-mcp-sdk/src/hyper_servers/routes/sse_routes.rs b/crates/rust-mcp-sdk/src/hyper_servers/routes/sse_routes.rs index c85d81f..63e38a9 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/routes/sse_routes.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/routes/sse_routes.rs @@ -1,6 +1,7 @@ use crate::hyper_servers::error::TransportServerResult; use crate::mcp_http::{McpAppState, McpHttpHandler}; use axum::{extract::State, response::IntoResponse, routing::get, Extension, Router}; +use http::{HeaderMap, Method, Uri}; use std::sync::Arc; #[derive(Clone)] @@ -35,13 +36,16 @@ pub fn routes(sse_endpoint: &str, sse_message_endpoint: &str) -> Router` - The SSE response stream or an error pub async fn handle_sse( + headers: HeaderMap, + uri: Uri, Extension(sse_message_endpoint): Extension, Extension(http_handler): Extension>, State(state): State>, ) -> TransportServerResult { let SseMessageEndpoint(sse_message_endpoint) = sse_message_endpoint; + let request = McpHttpHandler::create_request(Method::GET, uri, headers, None); let generic_response = http_handler - .handle_sse_connection(state.clone(), Some(&sse_message_endpoint)) + .handle_sse_connection(request, state.clone(), Some(&sse_message_endpoint)) .await?; let (parts, body) = generic_response.into_parts(); let resp = axum::response::Response::from_parts(parts, axum::body::Body::new(body)); diff --git a/crates/rust-mcp-sdk/src/hyper_servers/server.rs b/crates/rust-mcp-sdk/src/hyper_servers/server.rs index f3e0983..438cd8b 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/server.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/server.rs @@ -1,19 +1,31 @@ +use super::{ + error::{TransportServerError, TransportServerResult}, + routes::app_routes, +}; +#[cfg(feature = "auth")] +use crate::auth::AuthProvider; +#[cfg(feature = "auth")] +use crate::mcp_http::middleware::AuthMiddleware; use crate::{ error::SdkResult, id_generator::{FastIdGenerator, UuidGenerator}, mcp_http::{ - utils::{ + http_utils::{ DEFAULT_MESSAGES_ENDPOINT, DEFAULT_SSE_ENDPOINT, DEFAULT_STREAMABLE_HTTP_ENDPOINT, }, + middleware::DnsRebindProtector, McpAppState, McpHttpHandler, }, mcp_server::hyper_runtime::HyperRuntime, - mcp_traits::{mcp_handler::McpServerHandler, IdGenerator}, + mcp_traits::{IdGenerator, McpServerHandler}, session_store::InMemorySessionStore, }; +use crate::{mcp_http::Middleware, schema::InitializeResult}; +use axum::Router; #[cfg(feature = "ssl")] use axum_server::tls_rustls::RustlsConfig; use axum_server::Handle; +use rust_mcp_transport::{event_store::EventStore, SessionId, TransportOptions}; use std::{ net::{SocketAddr, ToSocketAddrs}, path::Path, @@ -22,14 +34,6 @@ use std::{ }; use tokio::signal; -use super::{ - error::{TransportServerError, TransportServerResult}, - routes::app_routes, -}; -use crate::schema::InitializeResult; -use axum::Router; -use rust_mcp_transport::{event_store::EventStore, SessionId, TransportOptions}; - // Default client ping interval (12 seconds) const DEFAULT_CLIENT_PING_INTERVAL: Duration = Duration::from_secs(12); const GRACEFUL_SHUTDOWN_TMEOUT_SECS: u64 = 5; @@ -98,6 +102,8 @@ pub struct HyperServerOptions { /// Optional custom path for the MCP messages endpoint for sse (default: `/messages`) /// Applicable only if sse_support is true pub custom_messages_endpoint: Option, + #[cfg(feature = "auth")] + pub auth: Option>, } impl HyperServerOptions { @@ -199,10 +205,15 @@ impl HyperServerOptions { } pub fn streamable_http_endpoint(&self) -> &str { - self.custom_messages_endpoint + self.custom_streamable_http_endpoint .as_deref() .unwrap_or(DEFAULT_STREAMABLE_HTTP_ENDPOINT) } + + pub fn needs_dns_protection(&self) -> bool { + self.dns_rebinding_protection + && (self.allowed_hosts.is_some() || self.allowed_origins.is_some()) + } } /// Default implementation for HyperServerOptions @@ -229,6 +240,8 @@ impl Default for HyperServerOptions { allowed_origins: None, dns_rebinding_protection: false, event_store: None, + #[cfg(feature = "auth")] + auth: None, } } } @@ -270,14 +283,35 @@ impl HyperServer { ping_interval: server_options.ping_interval, transport_options: Arc::clone(&server_options.transport_options), enable_json_response: server_options.enable_json_response.unwrap_or(false), - allowed_hosts: server_options.allowed_hosts.take(), - allowed_origins: server_options.allowed_origins.take(), - dns_rebinding_protection: server_options.dns_rebinding_protection, event_store: server_options.event_store.as_ref().map(Arc::clone), }); - let http_handler = McpHttpHandler::new(); //TODO: add auth handlers + // populate middlewares + let mut middlewares: Vec> = vec![]; + if server_options.needs_dns_protection() { + //dns pritection middleware + middlewares.push(Arc::new(DnsRebindProtector::new( + server_options.allowed_hosts.take(), + server_options.allowed_origins.take(), + ))); + } + + let http_handler = { + #[cfg(feature = "auth")] + { + let auth_provider = server_options.auth.take(); + // add auth middleware if there is a auth_provider + if let Some(auth_provider) = auth_provider.as_ref() { + middlewares.push(Arc::new(AuthMiddleware::new(auth_provider.clone()))) + } + McpHttpHandler::new(auth_provider, middlewares) + } + #[cfg(not(feature = "auth"))] + McpHttpHandler::new(middlewares) + }; + let app = app_routes(Arc::clone(&state), &server_options, http_handler); + Self { app, state, @@ -479,3 +513,170 @@ async fn shutdown_signal(handle: Handle, state: Arc) { // Trigger graceful shutdown with a timeout handle.graceful_shutdown(Some(Duration::from_secs(GRACEFUL_SHUTDOWN_TMEOUT_SECS))); } + +#[cfg(test)] +mod tests { + use super::*; + + use tempfile::NamedTempFile; + + #[test] + fn test_server_options_base_url_custom() { + let options = HyperServerOptions { + host: String::from("127.0.0.1"), + port: 8081, + enable_ssl: true, + ..Default::default() + }; + assert_eq!(options.base_url(), "https://127.0.0.1:8081"); + } + + #[test] + fn test_server_options_streamable_http_custom() { + let options = HyperServerOptions { + custom_streamable_http_endpoint: Some(String::from("/abcd/mcp")), + host: String::from("127.0.0.1"), + port: 8081, + enable_ssl: true, + ..Default::default() + }; + assert_eq!( + options.streamable_http_url(), + "https://127.0.0.1:8081/abcd/mcp" + ); + assert_eq!(options.streamable_http_endpoint(), "/abcd/mcp"); + } + + #[test] + fn test_server_options_sse_custom() { + let options = HyperServerOptions { + custom_sse_endpoint: Some(String::from("/abcd/sse")), + host: String::from("127.0.0.1"), + port: 8081, + enable_ssl: true, + ..Default::default() + }; + assert_eq!(options.sse_url(), "https://127.0.0.1:8081/abcd/sse"); + assert_eq!(options.sse_endpoint(), "/abcd/sse"); + } + + #[test] + fn test_server_options_sse_messages_custom() { + let options = HyperServerOptions { + custom_messages_endpoint: Some(String::from("/abcd/messages")), + ..Default::default() + }; + assert_eq!( + options.sse_message_url(), + "http://127.0.0.1:8080/abcd/messages" + ); + assert_eq!(options.sse_messages_endpoint(), "/abcd/messages"); + } + + #[test] + fn test_server_options_needs_dns_protection() { + let options = HyperServerOptions::default(); + + // should be false by default + assert!(!options.needs_dns_protection()); + + // should still be false unless allowed_hosts or allowed_origins are also provided + let options = HyperServerOptions { + dns_rebinding_protection: true, + ..Default::default() + }; + assert!(!options.needs_dns_protection()); + + // should be true when dns_rebinding_protection is true and allowed_hosts is provided + let options = HyperServerOptions { + dns_rebinding_protection: true, + allowed_hosts: Some(vec![String::from("127.0.0.1")]), + ..Default::default() + }; + assert!(options.needs_dns_protection()); + + // should be true when dns_rebinding_protection is true and allowed_origins is provided + let options = HyperServerOptions { + dns_rebinding_protection: true, + allowed_origins: Some(vec![String::from("http://127.0.0.1:8080")]), + ..Default::default() + }; + assert!(options.needs_dns_protection()); + } + + #[test] + fn test_server_options_validate() { + let options = HyperServerOptions::default(); + assert!(options.validate().is_ok()); + + // with ssl enabled but no cert or key provided, validate should fail + let options = HyperServerOptions { + enable_ssl: true, + ..Default::default() + }; + assert!(options.validate().is_err()); + + // with ssl enabled and invalid cert/key paths, validate should fail + let options = HyperServerOptions { + enable_ssl: true, + ssl_cert_path: Some(String::from("/invalid/path/to/cert.pem")), + ssl_key_path: Some(String::from("/invalid/path/to/key.pem")), + ..Default::default() + }; + assert!(options.validate().is_err()); + + // with ssl enabled and valid cert/key paths, validate should succeed + let cert_file = + NamedTempFile::with_suffix(".pem").expect("Expected to create test cert file"); + let ssl_cert_path = cert_file + .path() + .to_str() + .expect("Expected to get cert path") + .to_string(); + let key_file = + NamedTempFile::with_suffix(".pem").expect("Expected to create test key file"); + let ssl_key_path = key_file + .path() + .to_str() + .expect("Expected to get key path") + .to_string(); + + let options = HyperServerOptions { + enable_ssl: true, + ssl_cert_path: Some(ssl_cert_path), + ssl_key_path: Some(ssl_key_path), + ..Default::default() + }; + assert!(options.validate().is_ok()); + } + + #[tokio::test] + async fn test_server_options_resolve_server_address() { + let options = HyperServerOptions::default(); + assert!(options.resolve_server_address().await.is_ok()); + + // valid host should still work + let options = HyperServerOptions { + host: String::from("8.6.7.5"), + port: 309, + ..Default::default() + }; + assert!(options.resolve_server_address().await.is_ok()); + + // valid host (prepended with http://) should still work + let options = HyperServerOptions { + host: String::from("http://8.6.7.5"), + port: 309, + ..Default::default() + }; + assert!(options.resolve_server_address().await.is_ok()); + + // invalid host should raise an error + let options = HyperServerOptions { + host: String::from("invalid-host"), + port: 309, + ..Default::default() + }; + assert!(options.resolve_server_address().await.is_err()); + } +} diff --git a/crates/rust-mcp-sdk/src/lib.rs b/crates/rust-mcp-sdk/src/lib.rs index 9a9e0a9..1d6476a 100644 --- a/crates/rust-mcp-sdk/src/lib.rs +++ b/crates/rust-mcp-sdk/src/lib.rs @@ -2,8 +2,9 @@ pub mod error; #[cfg(feature = "hyper-server")] mod hyper_servers; mod mcp_handlers; -#[cfg(feature = "hyper-server")] -pub(crate) mod mcp_http; + +#[cfg(any(feature = "hyper-server", feature = "auth"))] +pub mod mcp_http; mod mcp_macros; mod mcp_runtimes; mod mcp_traits; @@ -74,24 +75,18 @@ pub mod mcp_server { pub use super::mcp_runtimes::server_runtime::mcp_server_runtime_core as server_runtime_core; pub use super::mcp_runtimes::server_runtime::ServerRuntime; - #[cfg(feature = "hyper-server")] - pub use super::hyper_servers::hyper_server; - #[cfg(feature = "hyper-server")] - pub use super::hyper_servers::hyper_server_core; #[cfg(feature = "hyper-server")] pub use super::hyper_servers::*; pub use super::utils::enforce_compatible_protocol_version; + #[cfg(feature = "auth")] + pub use super::utils::join_url; #[cfg(feature = "hyper-server")] pub use super::mcp_http::{McpAppState, McpHttpHandler}; } -#[cfg(feature = "client")] -pub use mcp_traits::mcp_client::*; - -#[cfg(feature = "server")] -pub use mcp_traits::mcp_server::*; - +pub mod auth; +pub use mcp_traits::*; pub use rust_mcp_transport::error::*; pub use rust_mcp_transport::*; diff --git a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler.rs b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler.rs index c6fb208..e78db9a 100644 --- a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler.rs +++ b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler.rs @@ -10,7 +10,7 @@ use crate::schema::{ElicitRequest, ElicitResult}; use async_trait::async_trait; use serde_json::Value; -use crate::mcp_traits::mcp_client::McpClient; +use crate::mcp_traits::McpClient; /// Defines the `ClientHandler` trait for handling Model Context Protocol (MCP) operations on a client. /// This trait provides default implementations for request and notification handlers in an MCP client, diff --git a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler_core.rs b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler_core.rs index a0afdf1..59444b0 100644 --- a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler_core.rs +++ b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_client_handler_core.rs @@ -2,7 +2,7 @@ use crate::schema::schema_utils::*; use crate::schema::*; use async_trait::async_trait; -use crate::mcp_traits::mcp_client::McpClient; +use crate::mcp_traits::McpClient; /// Defines the `ClientHandlerCore` trait for handling Model Context Protocol (MCP) client operations. /// Unlike `ClientHandler`, this trait offers no default implementations, providing full control over MCP message handling diff --git a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler.rs b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler.rs index 9f8c9e3..0a51967 100644 --- a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler.rs +++ b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler.rs @@ -1,13 +1,13 @@ use crate::{ mcp_server::server_runtime::ServerRuntimeInternalHandler, - mcp_traits::mcp_handler::McpServerHandler, + mcp_traits::McpServerHandler, schema::{schema_utils::CallToolError, *}, }; use async_trait::async_trait; use serde_json::Value; use std::sync::Arc; -use crate::{mcp_traits::mcp_server::McpServer, utils::enforce_compatible_protocol_version}; +use crate::{mcp_traits::McpServer, utils::enforce_compatible_protocol_version}; /// Defines the `ServerHandler` trait for handling Model Context Protocol (MCP) operations on a server. /// This trait provides default implementations for request and notification handlers in an MCP server, diff --git a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler_core.rs b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler_core.rs index 9275da7..c89e403 100644 --- a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler_core.rs +++ b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler_core.rs @@ -1,4 +1,4 @@ -use crate::mcp_traits::mcp_server::McpServer; +use crate::mcp_traits::McpServer; use crate::schema::schema_utils::*; use crate::schema::*; use async_trait::async_trait; diff --git a/crates/rust-mcp-sdk/src/mcp_http.rs b/crates/rust-mcp-sdk/src/mcp_http.rs index 2e5d8fd..5c995f9 100644 --- a/crates/rust-mcp-sdk/src/mcp_http.rs +++ b/crates/rust-mcp-sdk/src/mcp_http.rs @@ -1,13 +1,14 @@ mod app_state; +pub(crate) mod http_utils; mod mcp_http_handler; -pub(crate) mod mcp_http_utils; -mod mcp_http_middleware; //TODO: +pub mod middleware; +mod types; pub use app_state::*; +pub use http_utils::*; pub use mcp_http_handler::*; -pub use mcp_http_middleware::Middleware; -pub(crate) mod utils { - pub use super::mcp_http_utils::*; -} +pub use types::*; + +pub use middleware::Middleware; diff --git a/crates/rust-mcp-sdk/src/mcp_http/app_state.rs b/crates/rust-mcp-sdk/src/mcp_http/app_state.rs index cada97d..edb1c94 100644 --- a/crates/rust-mcp-sdk/src/mcp_http/app_state.rs +++ b/crates/rust-mcp-sdk/src/mcp_http/app_state.rs @@ -1,4 +1,4 @@ -use crate::mcp_traits::mcp_handler::McpServerHandler; +use crate::mcp_traits::McpServerHandler; use crate::session_store::SessionStore; use crate::{id_generator::FastIdGenerator, mcp_traits::IdGenerator, schema::InitializeResult}; use rust_mcp_transport::event_store::EventStore; @@ -19,23 +19,7 @@ pub struct McpAppState { pub ping_interval: Duration, pub transport_options: Arc, pub enable_json_response: bool, - /// List of allowed host header values for DNS rebinding protection. - /// If not specified, host validation is disabled. - pub allowed_hosts: Option>, - /// List of allowed origin header values for DNS rebinding protection. - /// If not specified, origin validation is disabled. - pub allowed_origins: Option>, - /// Enable DNS rebinding protection (requires allowedHosts and/or allowedOrigins to be configured). - /// Default is false for backwards compatibility. - pub dns_rebinding_protection: bool, /// Event store for resumability support /// If provided, resumability will be enabled, allowing clients to reconnect and resume messages pub event_store: Option>, } - -impl McpAppState { - pub fn needs_dns_protection(&self) -> bool { - self.dns_rebinding_protection - && (self.allowed_hosts.is_some() || self.allowed_origins.is_some()) - } -} diff --git a/crates/rust-mcp-sdk/src/mcp_http/mcp_http_utils.rs b/crates/rust-mcp-sdk/src/mcp_http/http_utils.rs similarity index 85% rename from crates/rust-mcp-sdk/src/mcp_http/mcp_http_utils.rs rename to crates/rust-mcp-sdk/src/mcp_http/http_utils.rs index 06020d1..52509d3 100644 --- a/crates/rust-mcp-sdk/src/mcp_http/mcp_http_utils.rs +++ b/crates/rust-mcp-sdk/src/mcp_http/http_utils.rs @@ -1,25 +1,28 @@ +use crate::auth::AuthInfo; +use crate::mcp_http::types::GenericBody; use crate::schema::schema_utils::{ClientMessage, SdkError}; +use crate::McpServer; use crate::{ error::SdkResult, hyper_servers::error::{TransportServerError, TransportServerResult}, mcp_http::McpAppState, mcp_runtimes::server_runtime::DEFAULT_STREAM_ID, mcp_server::{server_runtime, ServerRuntime}, - mcp_traits::{mcp_handler::McpServerHandler, IdGenerator}, + mcp_traits::{IdGenerator, McpServerHandler}, utils::validate_mcp_protocol_version, }; use axum::http::HeaderValue; use bytes::Bytes; use futures::stream; -use http::header::{ACCEPT, CONNECTION, CONTENT_TYPE, HOST, ORIGIN}; +use http::header::{ACCEPT, CONNECTION, CONTENT_TYPE}; use http_body::Frame; -use http_body_util::StreamBody; -use http_body_util::{combinators::BoxBody, BodyExt, Full}; +use http_body_util::{BodyExt, Full, StreamBody}; use hyper::{HeaderMap, StatusCode}; use rust_mcp_transport::{ EventId, McpDispatch, SessionId, SseEvent, SseTransport, StreamId, ID_SEPARATOR, MCP_PROTOCOL_VERSION_HEADER, MCP_SESSION_ID_HEADER, }; +use serde_json::{Map, Value}; use std::sync::Arc; use tokio::io::{duplex, AsyncBufReadExt, BufReader}; use tokio_stream::StreamExt; @@ -32,19 +35,6 @@ pub(crate) const DEFAULT_MESSAGES_ENDPOINT: &str = "/messages"; pub(crate) const DEFAULT_STREAMABLE_HTTP_ENDPOINT: &str = "/mcp"; const DUPLEX_BUFFER_SIZE: usize = 8192; -pub type GenericBody = BoxBody; - -/// Creates an empty HTTP response body. -/// -/// This function constructs a `GenericBody` containing an empty `Bytes` buffer, -/// The body is wrapped in a `BoxBody` to ensure type erasure and compatibility -/// with the HTTP framework. -pub fn empty_response() -> GenericBody { - Full::new(Bytes::new()) - .map_err(|err| TransportServerError::HttpError(err.to_string())) - .boxed() -} - /// Creates an initial SSE event that returns the messages endpoint /// /// Constructs an SSE event containing the messages endpoint URL with the session ID. @@ -61,6 +51,96 @@ fn initial_sse_event(endpoint: &str) -> Result { .as_bytes()) } +#[cfg(feature = "auth")] +pub fn url_base(url: &url::Url) -> String { + format!("{}://{}", url.scheme(), url.host_str().unwrap_or_default()) +} + +/// Remove the `Bearer` prefix from a `WWW-Authenticate` or `Authorization` header. +/// +/// This function performs a **case-insensitive** check for the `Bearer` +/// authentication scheme. If present, the prefix is removed and the +/// remaining parameter string is returned trimmed. +fn strip_bearer_prefix(header: &str) -> &str { + let lower = header.to_lowercase(); + if lower.starts_with("bearer ") { + header[7..].trim() + } else if lower == "bearer" { + "" + } else { + header.trim() + } +} + +/// Parse a `WWW-Authenticate` header with Bearer-style key/value parameters +/// into a JSON object (`serde_json::Map`). +#[cfg(feature = "auth")] +pub fn parse_www_authenticate(header: &str) -> Option> { + let params_str = strip_bearer_prefix(header); + + let mut result: Option> = None; + + for part in params_str.split(',') { + let part = part.trim(); + + if let Some((key, value)) = part.split_once('=') { + let cleaned = value.trim().trim_matches('"'); + + // Create the map only when first key=value is found + let map = result.get_or_insert_with(Map::new); + map.insert(key.to_string(), Value::String(cleaned.to_string())); + } + } + + result +} + +/// Extract the most meaningful error message from an HTTP response. +/// This is useful for handling OAuth2 / OpenID Connect Bearer errors +/// +/// Extraction order: +/// 1. If the `WWW-Authenticate` header exists and contains a Bearer error: +/// - Return `error_description` if present +/// - Else return `error` if present +/// - Else join all string values in the header +/// 2. If no usable info is found in the header: +/// - Return the response body text +/// - If body cannot be read, return `default_message` +#[cfg(feature = "auth")] +pub async fn error_message_from_response( + response: reqwest::Response, + default_message: &str, +) -> String { + if let Some(www_authenticate) = response + .headers() + .get(http::header::WWW_AUTHENTICATE) + .and_then(|v| v.to_str().ok()) + { + if let Some(map) = parse_www_authenticate(www_authenticate) { + if let Some(Value::String(s)) = map.get("error_description") { + return s.clone(); + } + if let Some(Value::String(s)) = map.get("error") { + return s.clone(); + } + + // Fallback: join all string values + let values: Vec<&str> = map + .values() + .filter_map(|v| match v { + Value::String(s) => Some(s.as_str()), + _ => None, + }) + .collect(); + if !values.is_empty() { + return values.join(", "); + } + } + } + + response.text().await.unwrap_or(default_message.to_owned()) +} + async fn create_sse_stream( runtime: Arc, session_id: SessionId, @@ -251,15 +331,18 @@ fn is_result(json_str: &str) -> Result { } } -pub async fn create_standalone_stream( +pub(crate) async fn create_standalone_stream( session_id: SessionId, last_event_id: Option, state: Arc, + auth_info: Option, ) -> TransportServerResult> { let runtime = state.session_store.get(&session_id).await.ok_or( TransportServerError::SessionIdInvalid(session_id.to_string()), )?; + runtime.update_auth_info(auth_info).await; + if runtime.stream_id_exists(DEFAULT_STREAM_ID).await { let error = SdkError::bad_request().with_message("Only one SSE stream is allowed per session"); @@ -287,9 +370,10 @@ pub async fn create_standalone_stream( Ok(response) } -pub async fn start_new_session( +pub(crate) async fn start_new_session( state: Arc, payload: &str, + auth_info: Option, ) -> TransportServerResult> { let session_id: SessionId = state.id_generator.generate(); @@ -299,6 +383,7 @@ pub async fn start_new_session( Arc::clone(&state.server_details), h, session_id.to_owned(), + auth_info, ); tracing::info!("a new client joined : {}", &session_id); @@ -421,13 +506,15 @@ async fn single_shot_stream( } } -pub async fn process_incoming_message_return( +pub(crate) async fn process_incoming_message_return( session_id: SessionId, state: Arc, payload: &str, + auth_info: Option, ) -> TransportServerResult> { match state.session_store.get(&session_id).await { Some(runtime) => { + runtime.update_auth_info(auth_info).await; single_shot_stream( runtime.clone(), session_id, @@ -446,13 +533,15 @@ pub async fn process_incoming_message_return( } } -pub async fn process_incoming_message( +pub(crate) async fn process_incoming_message( session_id: SessionId, state: Arc, payload: &str, + auth_info: Option, ) -> TransportServerResult> { match state.session_store.get(&session_id).await { Some(runtime) => { + runtime.update_auth_info(auth_info).await; // when receiving a result in a streamable_http server, that means it was sent by the standalone sse transport // it should be processed by the same transport , therefore no need to call create_sse_stream let Ok(is_result) = is_result(payload) else { @@ -499,11 +588,11 @@ pub async fn process_incoming_message( } } -pub fn is_empty_sse_message(sse_payload: &str) -> bool { +pub(crate) fn is_empty_sse_message(sse_payload: &str) -> bool { sse_payload.is_empty() || sse_payload.trim() == ":" } -pub async fn delete_session( +pub(crate) async fn delete_session( session_id: SessionId, state: Arc, ) -> TransportServerResult> { @@ -529,7 +618,7 @@ pub async fn delete_session( } } -pub fn acceptable_content_type(headers: &HeaderMap) -> bool { +pub(crate) fn acceptable_content_type(headers: &HeaderMap) -> bool { let accept_header = headers .get("content-type") .and_then(|val| val.to_str().ok()) @@ -539,7 +628,7 @@ pub fn acceptable_content_type(headers: &HeaderMap) -> bool { .any(|val| val.trim().starts_with("application/json")) } -pub fn validate_mcp_protocol_version_header(headers: &HeaderMap) -> SdkResult<()> { +pub(crate) fn validate_mcp_protocol_version_header(headers: &HeaderMap) -> SdkResult<()> { let protocol_version_header = headers .get(MCP_PROTOCOL_VERSION_HEADER) .and_then(|val| val.to_str().ok()) @@ -553,7 +642,7 @@ pub fn validate_mcp_protocol_version_header(headers: &HeaderMap) -> SdkResult<() validate_mcp_protocol_version(protocol_version_header) } -pub fn accepts_event_stream(headers: &HeaderMap) -> bool { +pub(crate) fn accepts_event_stream(headers: &HeaderMap) -> bool { let accept_header = headers .get(ACCEPT) .and_then(|val| val.to_str().ok()) @@ -564,7 +653,7 @@ pub fn accepts_event_stream(headers: &HeaderMap) -> bool { .any(|val| val.trim().starts_with("text/event-stream")) } -pub fn valid_streaming_http_accept_header(headers: &HeaderMap) -> bool { +pub(crate) fn valid_streaming_http_accept_header(headers: &HeaderMap) -> bool { let accept_header = headers .get(ACCEPT) .and_then(|val| val.to_str().ok()) @@ -593,53 +682,6 @@ pub fn error_response( .map_err(|err| TransportServerError::HttpError(err.to_string())) } -// Protect against DNS rebinding attacks by validating Host and Origin headers. -pub(crate) async fn protect_dns_rebinding( - headers: &http::HeaderMap, - state: Arc, -) -> Result<(), SdkError> { - if !state.needs_dns_protection() { - // If protection is not needed, pass the request to the next handler - return Ok(()); - } - - if let Some(allowed_hosts) = state.allowed_hosts.as_ref() { - if !allowed_hosts.is_empty() { - let Some(host) = headers.get(HOST).and_then(|h| h.to_str().ok()) else { - return Err(SdkError::bad_request().with_message("Invalid Host header: [unknown] ")); - }; - - if !allowed_hosts - .iter() - .any(|allowed| allowed.eq_ignore_ascii_case(host)) - { - return Err(SdkError::bad_request() - .with_message(format!("Invalid Host header: \"{host}\" ").as_str())); - } - } - } - - if let Some(allowed_origins) = state.allowed_origins.as_ref() { - if !allowed_origins.is_empty() { - let Some(origin) = headers.get(ORIGIN).and_then(|h| h.to_str().ok()) else { - return Err( - SdkError::bad_request().with_message("Invalid Origin header: [unknown] ") - ); - }; - - if !allowed_origins - .iter() - .any(|allowed| allowed.eq_ignore_ascii_case(origin)) - { - return Err(SdkError::bad_request() - .with_message(format!("Invalid Origin header: \"{origin}\" ").as_str())); - } - } - } - - Ok(()) -} - /// Extracts the value of a query parameter from an HTTP request by key. /// /// This function parses the query string from the request URI and searches @@ -653,7 +695,7 @@ pub(crate) async fn protect_dns_rebinding( /// * `Some(String)` containing the value of the query parameter if found. /// * `None` if the query string is missing or the key is not present. /// -pub fn query_param(request: &http::Request<&str>, key: &str) -> Option { +pub(crate) fn query_param(request: &http::Request<&str>, key: &str) -> Option { request.uri().query().and_then(|query| { for pair in query.split('&') { let mut split = pair.splitn(2, '='); @@ -671,6 +713,7 @@ pub fn query_param(request: &http::Request<&str>, key: &str) -> Option { pub(crate) async fn handle_sse_connection( state: Arc, sse_message_endpoint: Option<&str>, + auth_info: Option, ) -> TransportServerResult> { let session_id: SessionId = state.id_generator.generate(); @@ -703,6 +746,7 @@ pub(crate) async fn handle_sse_connection( Arc::clone(&state.server_details), h, session_id.to_owned(), + auth_info, ); state diff --git a/crates/rust-mcp-sdk/src/mcp_http/mcp_http_handler.rs b/crates/rust-mcp-sdk/src/mcp_http/mcp_http_handler.rs index c60b4dc..75ffcc3 100644 --- a/crates/rust-mcp-sdk/src/mcp_http/mcp_http_handler.rs +++ b/crates/rust-mcp-sdk/src/mcp_http/mcp_http_handler.rs @@ -1,21 +1,24 @@ #[cfg(feature = "sse")] -use super::utils::handle_sse_connection; -use crate::mcp_http::mcp_http_middleware::MiddlewareChain; -use crate::mcp_http::utils::{ - accepts_event_stream, empty_response, error_response, query_param, - validate_mcp_protocol_version_header, +use super::http_utils::handle_sse_connection; +use super::http_utils::{ + accepts_event_stream, error_response, query_param, validate_mcp_protocol_version_header, }; -use crate::mcp_http::Middleware; +use super::types::GenericBody; +use crate::auth::AuthInfo; +#[cfg(feature = "auth")] +use crate::auth::AuthProvider; +use crate::mcp_http::{middleware::compose, BoxFutureResponse, Middleware, RequestHandler}; +use crate::mcp_http::{GenericBodyExt, RequestExt}; use crate::mcp_runtimes::server_runtime::DEFAULT_STREAM_ID; use crate::mcp_server::error::TransportServerError; use crate::schema::schema_utils::SdkError; use crate::{ error::McpSdkError, mcp_http::{ - utils::{ + http_utils::{ acceptable_content_type, create_standalone_stream, delete_session, - process_incoming_message, process_incoming_message_return, protect_dns_rebinding, - start_new_session, valid_streaming_http_accept_header, GenericBody, + process_incoming_message, process_incoming_message_return, start_new_session, + valid_streaming_http_accept_header, }, McpAppState, }, @@ -26,26 +29,69 @@ use http::{self, HeaderMap, Method, StatusCode, Uri}; use rust_mcp_transport::{SessionId, MCP_LAST_EVENT_ID_HEADER, MCP_SESSION_ID_HEADER}; use std::sync::Arc; +/// A helper macro to wrap an async handler method into a `RequestHandler` +/// and compose it with middlewares. +/// +/// # Example +/// ```ignore +/// let handle = with_middlewares!(self, Self::internal_handle_sse_message); +/// handle +/// +/// // OR +/// let handler = with_middlewares!(self, Self::internal_handle_sse_message, extra_middlewares1, extra_middlewares2); +/// ``` +#[macro_export] +macro_rules! with_middlewares { + ($self:ident, $handler:path) => {{ + let final_handler: RequestHandler = Box::new( + move |req: http::Request<&str>, + state: std::sync::Arc| + -> BoxFutureResponse<'_> { + Box::pin(async move { $handler(req, state).await }) + }, + ); + $crate::mcp_http::middleware::compose(&$self.middlewares, final_handler) + }}; + + // Handler + extra middleware(s) + ($self:ident, $handler:path, $($extra:expr),+ $(,)?) => {{ + let final_handler: RequestHandler = Box::new( + move |req: http::Request<&str>, + state: std::sync::Arc| + -> BoxFutureResponse<'_> { + Box::pin(async move { $handler(req, state).await }) + }, + ); + + // Chain $self.middlewares with any extra middleware iterators + let all = $self.middlewares.iter() + $(.chain($extra.iter()))+; + + $crate::mcp_http::middleware::compose(all, final_handler) + }}; +} + #[derive(Clone)] pub struct McpHttpHandler { - middleware_chain: MiddlewareChain, + #[cfg(feature = "auth")] + auth: Option>, + middlewares: Vec>, } -impl Default for McpHttpHandler { - fn default() -> Self { - Self::new() +impl McpHttpHandler { + #[cfg(feature = "auth")] + pub fn new(auth: Option>, middlewares: Vec>) -> Self { + McpHttpHandler { auth, middlewares } } -} -impl McpHttpHandler { - pub fn new() -> Self { - McpHttpHandler { - middleware_chain: MiddlewareChain::new(), - } + #[cfg(not(feature = "auth"))] + pub fn new(middlewares: Vec>) -> Self { + McpHttpHandler { middlewares } } - pub fn add_middleware(&mut self, middleware: M) { - self.middleware_chain.add_middleware(middleware); + pub fn add_middleware(&mut self, middleware: M) { + let m: Arc = Arc::new(middleware); + self.middlewares.push(m); } /// An `http::Request<&str>` initialized with the specified method, URI, headers, and body. @@ -71,6 +117,42 @@ impl McpHttpHandler { } } +// auth related methods +#[cfg(feature = "auth")] +impl McpHttpHandler { + pub fn oauth_endppoints(&self) -> Option> { + self.auth + .as_ref() + .and_then(|a| a.auth_endpoints().map(|e| e.keys().collect::>())) + } + + pub async fn handle_auth_requests( + &self, + request: http::Request<&str>, + state: Arc, + ) -> TransportServerResult> { + let Some(auth_provider) = self.auth.as_ref() else { + return Err(TransportServerError::HttpError( + "Authentication is not supported by this server.".to_string(), + )); + }; + + let auth_provider = auth_provider.clone(); + let final_handler: RequestHandler = Box::new(move |req, state| { + Box::pin(async move { + use futures::TryFutureExt; + auth_provider + .handle_request(req, state) + .map_err(|e| e) + .await + }) + }); + + let handle = compose(&[], final_handler); + handle(request, state).await + } +} + impl McpHttpHandler { /// Handles an MCP connection using the SSE (Server-Sent Events) transport. /// @@ -87,10 +169,23 @@ impl McpHttpHandler { #[cfg(feature = "sse")] pub async fn handle_sse_connection( &self, + request: http::Request<&str>, state: Arc, sse_message_endpoint: Option<&str>, ) -> TransportServerResult> { - handle_sse_connection(state, sse_message_endpoint).await + use crate::auth::AuthInfo; + use crate::mcp_http::RequestExt; + + let (request, auth_info) = request.take::(); + + let sse_endpoint = sse_message_endpoint.map(|s| s.to_string()); + let final_handler: RequestHandler = Box::new(move |_req, state| { + Box::pin(async move { + handle_sse_connection(state, sse_endpoint.as_deref(), auth_info).await + }) + }); + let handle = compose(&self.middlewares, final_handler); + handle(request, state).await } /// Handles incoming MCP messages from the client after an SSE connection is established. @@ -113,32 +208,14 @@ impl McpHttpHandler { /// - `SessionIdInvalid`: if the session ID does not map to a valid session in the session store. /// - `StreamIoError`: if an error occurs while writing to the stream. /// - `HttpError`: if constructing the HTTP response fails. + #[cfg(feature = "sse")] pub async fn handle_sse_message( &self, request: http::Request<&str>, state: Arc, ) -> TransportServerResult> { - let session_id = - query_param(&request, "sessionId").ok_or(TransportServerError::SessionIdMissing)?; - - // transmit to the readable stream, that transport is reading from - let transmit = state.session_store.get(&session_id).await.ok_or( - TransportServerError::SessionIdInvalid(session_id.to_string()), - )?; - - let message = *request.body(); - transmit - .consume_payload_string(DEFAULT_STREAM_ID, message) - .await - .map_err(|err| { - tracing::trace!("{}", err); - TransportServerError::StreamIoError(err.to_string()) - })?; - - http::Response::builder() - .status(StatusCode::ACCEPTED) - .body(empty_response()) - .map_err(|err| TransportServerError::HttpError(err.to_string())) + let handle = with_middlewares!(self, Self::internal_handle_sse_message); + handle(request, state).await } /// Handles incoming MCP messages over the StreamableHTTP transport. @@ -167,25 +244,50 @@ impl McpHttpHandler { request: http::Request<&str>, state: Arc, ) -> TransportServerResult> { - let request = self - .middleware_chain - .process_request(request) + let handle = with_middlewares!(self, Self::internal_handle_streamable_http); + handle(request, state).await + } + + async fn internal_handle_sse_message( + request: http::Request<&str>, + state: Arc, + ) -> TransportServerResult> { + let session_id = + query_param(&request, "sessionId").ok_or(TransportServerError::SessionIdMissing)?; + + // transmit to the readable stream, that transport is reading from + let transmit = state.session_store.get(&session_id).await.ok_or( + TransportServerError::SessionIdInvalid(session_id.to_string()), + )?; + + let message = request.body(); + + transmit + .consume_payload_string(DEFAULT_STREAM_ID, message.as_ref()) .await - .map_err(|e| TransportServerError::HttpError(e.to_string()))?; + .map_err(|err| { + tracing::trace!("{}", err); + TransportServerError::StreamIoError(err.to_string()) + })?; - // Enforces DNS rebinding protection if required by state. - // If protection fails, respond with HTTP 403 Forbidden. - if state.needs_dns_protection() { - if let Err(error) = protect_dns_rebinding(request.headers(), state.clone()).await { - return error_response(StatusCode::FORBIDDEN, error); - } - } + http::Response::builder() + .status(StatusCode::ACCEPTED) + .body(GenericBody::empty()) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } + + async fn internal_handle_streamable_http( + request: http::Request<&str>, + state: Arc, + ) -> TransportServerResult> { + let (request, auth_info) = request.take::(); let method = request.method(); + let response = match method { - &http::Method::GET => return self.handle_http_get(request, state).await, - &http::Method::POST => return self.handle_http_post(request, state).await, - &http::Method::DELETE => return self.handle_http_delete(request, state).await, + &http::Method::GET => return Self::handle_http_get(request, state, auth_info).await, + &http::Method::POST => return Self::handle_http_post(request, state, auth_info).await, + &http::Method::DELETE => return Self::handle_http_delete(request, state).await, other => { let error = SdkError::bad_request().with_message(&format!( "'{other}' is not a valid HTTP method for StreamableHTTP transport." @@ -194,24 +296,15 @@ impl McpHttpHandler { } }; - self.middleware_chain - .process_response(response?) - .await - .map_err(|e| TransportServerError::HttpError(e.to_string())) + response } /// Processes POST requests for the Streamable HTTP Protocol async fn handle_http_post( - &self, request: http::Request<&str>, state: Arc, + auth_info: Option, ) -> TransportServerResult> { - let request = self - .middleware_chain - .process_request(request) - .await - .map_err(|e| TransportServerError::HttpError(e.to_string()))?; - let headers = request.headers(); if !valid_streaming_http_accept_header(headers) { @@ -237,20 +330,20 @@ impl McpHttpHandler { .and_then(|value| value.to_str().ok()) .map(|s| s.to_string()); - let payload = *request.body(); + let payload = request.body(); let response = match session_id { // has session-id => write to the existing stream Some(id) => { if state.enable_json_response { - process_incoming_message_return(id, state, payload).await + process_incoming_message_return(id, state, payload, auth_info).await } else { - process_incoming_message(id, state, payload).await + process_incoming_message(id, state, payload, auth_info).await } } None => match valid_initialize_method(payload) { Ok(_) => { - return start_new_session(state, payload).await; + return start_new_session(state, payload, auth_info).await; } Err(McpSdkError::SdkError(error)) => error_response(StatusCode::BAD_REQUEST, error), Err(error) => { @@ -260,24 +353,15 @@ impl McpHttpHandler { }, }; - self.middleware_chain - .process_response(response?) - .await - .map_err(|e| TransportServerError::HttpError(e.to_string())) + response } /// Processes GET requests for the Streamable HTTP Protocol async fn handle_http_get( - &self, request: http::Request<&str>, state: Arc, + auth_info: Option, ) -> TransportServerResult> { - let request = self - .middleware_chain - .process_request(request) - .await - .map_err(|e| TransportServerError::HttpError(e.to_string()))?; - let headers = request.headers(); if !accepts_event_stream(headers) { @@ -304,7 +388,8 @@ impl McpHttpHandler { let response = match session_id { Some(session_id) => { - let res = create_standalone_stream(session_id, last_event_id, state).await; + let res = + create_standalone_stream(session_id, last_event_id, state, auth_info).await; res } None => { @@ -313,24 +398,14 @@ impl McpHttpHandler { } }; - self.middleware_chain - .process_response(response?) - .await - .map_err(|e| TransportServerError::HttpError(e.to_string())) + response } /// Processes DELETE requests for the Streamable HTTP Protocol async fn handle_http_delete( - &self, request: http::Request<&str>, state: Arc, ) -> TransportServerResult> { - let request = self - .middleware_chain - .process_request(request) - .await - .map_err(|e| TransportServerError::HttpError(e.to_string()))?; - let headers = request.headers(); if let Err(parse_error) = validate_mcp_protocol_version_header(headers) { @@ -352,9 +427,6 @@ impl McpHttpHandler { } }; - self.middleware_chain - .process_response(response?) - .await - .map_err(|e| TransportServerError::HttpError(e.to_string())) + response } } diff --git a/crates/rust-mcp-sdk/src/mcp_http/mcp_http_middleware.rs b/crates/rust-mcp-sdk/src/mcp_http/mcp_http_middleware.rs deleted file mode 100644 index 9353abc..0000000 --- a/crates/rust-mcp-sdk/src/mcp_http/mcp_http_middleware.rs +++ /dev/null @@ -1,390 +0,0 @@ -use crate::mcp_http::utils::GenericBody; -use crate::mcp_server::error::TransportServerResult; -use http::{Request, Response}; -use std::future::Future; -use std::pin::Pin; -use std::sync::Arc; - -/// Defines a middleware trait for processing HTTP requests and responses. -/// -/// Implementors of this trait can define custom logic to modify or inspect HTTP -/// requests before they reach the handler and HTTP responses before they are sent -/// back to the client. Middleware must be thread-safe (`Send + Sync`) and have a -/// static lifetime. -pub trait Middleware: Send + Sync + 'static { - /// Processes an incoming HTTP request. - /// - /// This method takes a request, applies middleware-specific logic, and returns - /// a future that resolves to a `TransportServerResult` containing the modified - /// request or an error. - /// - /// # Arguments - /// * `request` - The incoming HTTP request with a string body reference. - /// - /// # Returns - /// A pinned boxed future resolving to a `TransportServerResult` containing the - /// processed request. - fn process_request<'a, 'b>( - &'a self, - request: Request<&'b str>, - ) -> Pin>> + Send + 'a>> - where - 'b: 'a; // Ensure the request's lifetime outlives the future - - /// Processes an outgoing HTTP response. - /// - /// This method takes a response, applies middleware-specific logic, and returns - /// a future that resolves to a `TransportServerResult` containing the modified - /// response or an error. - /// - /// # Arguments - /// * `response` - The HTTP response with a `GenericBody`. - /// - /// # Returns - /// A pinned boxed future resolving to a `TransportServerResult` containing the - /// processed response. - fn process_response<'a, 'b>( - &'a self, - response: Response, - ) -> Pin>> + Send + 'a>> - where - 'b: 'a; // Optional, included for consistency -} - -/// A chain of middleware to process HTTP requests and responses sequentially. -/// -/// `MiddlewareChain` allows multiple middleware instances to be registered and -/// executed in order for requests (forward order) and responses (reverse order). -#[derive(Clone)] -pub struct MiddlewareChain { - middlewares: Vec>, -} - -impl MiddlewareChain { - /// Creates a new, empty middleware chain. - /// - /// # Returns - /// A new `MiddlewareChain` instance with no middleware registered. - pub fn new() -> Self { - MiddlewareChain { - middlewares: Vec::new(), - } - } - - /// Adds a middleware to the chain. - /// - /// The middleware is wrapped in an `Arc` to ensure thread-safety and shared - /// ownership. Middleware will be executed in the order they are added for - /// requests and in reverse order for responses. - /// - /// # Arguments - /// * `middleware` - The middleware to add to the chain. - pub fn add_middleware(&mut self, middleware: M) { - self.middlewares.push(Arc::new(middleware)); - } - - /// Processes an HTTP request through all registered middleware. - /// - /// Each middleware's `process_request` method is called in the order they - /// were added. If any middleware returns an error, processing stops and the - /// error is returned. - /// - /// # Arguments - /// * `request` - The HTTP request to process. - /// - /// # Returns - /// A `TransportServerResult` containing the processed request or an error. - pub async fn process_request<'a>( - &self, - request: http::Request<&'a str>, - ) -> TransportServerResult> { - let mut request = request; - for middleware in &self.middlewares { - request = middleware.process_request(request).await?; - } - Ok(request) - } - - /// Processes an HTTP response through all registered middleware. - /// - /// Each middleware's `process_response` method is called in the reverse order - /// of their addition. If any middleware returns an error, processing stops and - /// the error is returned. - /// - /// # Arguments - /// * `response` - The HTTP response to process. - /// - /// # Returns - /// A `TransportServerResult` containing the processed response or an error. - pub async fn process_response( - &self, - response: http::Response, - ) -> TransportServerResult> { - let mut response = response; - for middleware in self.middlewares.iter().rev() { - response = middleware.process_response(response).await?; - } - Ok(response) - } -} - -#[allow(dead_code)] -// Sample Middleware -pub struct LoggingMiddleware; - -impl Middleware for LoggingMiddleware { - fn process_request<'a, 'b>( - &'a self, - request: http::Request<&'b str>, - ) -> Pin>> + Send + 'a>> - where - 'b: 'a, - { - Box::pin(async move { - tracing::info!("Request: {} {}", request.method(), request.uri()); - Ok(request) - }) - } - - fn process_response<'a, 'b>( - &'a self, - response: http::Response, - ) -> Pin>> + Send + 'a>> - where - 'b: 'a, - { - Box::pin(async move { - tracing::info!("Response: {}", response.status()); - Ok(response) - }) - } -} - -#[cfg(test)] -mod tests { - use crate::{mcp_http::utils::empty_response, mcp_server::error::TransportServerError}; - - use super::*; - use async_trait::async_trait; - use bytes::Bytes; - use http::{Request, Response}; - use http_body_util::{BodyExt, Full}; - use std::sync::Mutex; - use thiserror::Error; - - /// Custom error type for test middleware. - #[derive(Error, Debug)] - enum TestMiddlewareError { - #[error("Request processing failed: {0}")] - RequestError(String), - #[error("Response processing failed: {0}")] - ResponseError(String), - } - - /// A test middleware that records its interactions with requests and responses. - struct TestMiddleware { - /// Tracks request calls with their input bodies. - request_calls: Arc>>, - /// Tracks response calls with their status codes. - response_calls: Arc>>, - /// Optional error to simulate failure in request processing. - request_error: Option, - /// Optional error to simulate failure in response processing. - response_error: Option, - } - - impl TestMiddleware { - fn new() -> Self { - TestMiddleware { - request_calls: Arc::new(Mutex::new(Vec::new())), - response_calls: Arc::new(Mutex::new(Vec::new())), - request_error: None, - response_error: None, - } - } - - fn with_errors(request_error: Option, response_error: Option) -> Self { - TestMiddleware { - request_calls: Arc::new(Mutex::new(Vec::new())), - response_calls: Arc::new(Mutex::new(Vec::new())), - request_error, - response_error, - } - } - } - - #[async_trait] - impl Middleware for TestMiddleware { - fn process_request<'a, 'b>( - &'a self, - request: Request<&'b str>, - ) -> Pin>> + Send + 'a>> - where - 'b: 'a, - { - Box::pin(async move { - if let Some(err) = &self.request_error { - return Err(TransportServerError::HttpError(err.to_string())); - } - self.request_calls - .lock() - .unwrap() - .push(request.body().to_string()); - Ok(request) - }) - } - - fn process_response<'a, 'b>( - &'a self, - response: Response, - ) -> Pin>> + Send + 'a>> - where - 'b: 'a, - { - Box::pin(async move { - if let Some(err) = &self.response_error { - return Err(TransportServerError::HttpError(err.to_string())); - } - self.response_calls - .lock() - .unwrap() - .push(response.status().as_u16()); - Ok(response) - }) - } - } - - #[tokio::test] - async fn test_empty_middleware_chain() { - let chain = MiddlewareChain::new(); - let request = Request::builder().body("test").unwrap(); - - let response = Response::builder() - .status(200) - .body(empty_response()) - .unwrap(); - - let result_request = chain.process_request(request).await.unwrap(); - let result_response = chain.process_response(response).await.unwrap(); - - assert_eq!(result_request.body().to_ascii_lowercase(), "test"); - assert_eq!(result_response.status(), 200); - } - - #[tokio::test] - async fn test_single_middleware() { - let mut chain = MiddlewareChain::new(); - let middleware = TestMiddleware::new(); - let request_calls = middleware.request_calls.clone(); - let response_calls = middleware.response_calls.clone(); - - chain.add_middleware(middleware); - - let request = Request::builder().body("test").unwrap(); - let response = Response::builder() - .status(200) - .body(empty_response()) - .unwrap(); - - let result_request = chain.process_request(request).await.unwrap(); - let result_response = chain.process_response(response).await.unwrap(); - - assert_eq!(result_request.body().to_ascii_lowercase(), "test"); - assert_eq!(result_response.status(), 200); - assert_eq!(request_calls.lock().unwrap().as_slice(), &["test"]); - assert_eq!(response_calls.lock().unwrap().as_slice(), &[200]); - } - - #[tokio::test] - async fn test_multiple_middlewares_request_order() { - let mut chain = MiddlewareChain::new(); - let middleware1 = TestMiddleware::new(); - let middleware2 = TestMiddleware::new(); - let request_calls1 = middleware1.request_calls.clone(); - let request_calls2 = middleware2.request_calls.clone(); - - chain.add_middleware(middleware1); - chain.add_middleware(middleware2); - - let request = Request::builder().body("test").unwrap(); - - let result = chain.process_request(request).await.unwrap(); - assert_eq!(result.body().to_ascii_lowercase(), "test"); - - // Check order of execution - assert_eq!(request_calls1.lock().unwrap().as_slice(), &["test"]); - assert_eq!(request_calls2.lock().unwrap().as_slice(), &["test"]); - } - - #[tokio::test] - async fn test_multiple_middlewares_response_reverse_order() { - let mut chain = MiddlewareChain::new(); - let middleware1 = TestMiddleware::new(); - let middleware2 = TestMiddleware::new(); - let response_calls1 = middleware1.response_calls.clone(); - let response_calls2 = middleware2.response_calls.clone(); - - chain.add_middleware(middleware1); - chain.add_middleware(middleware2); - - let response = Response::builder() - .status(200) - .body(empty_response()) - .unwrap(); - - let result = chain.process_response(response).await.unwrap(); - assert_eq!(result.status(), 200); - - // Check reverse order of execution - assert_eq!(response_calls2.lock().unwrap().as_slice(), &[200]); - assert_eq!(response_calls1.lock().unwrap().as_slice(), &[200]); - } - - #[tokio::test] - async fn test_middleware_request_error() { - let mut chain = MiddlewareChain::new(); - let middleware = TestMiddleware::with_errors(Some("request error".to_string()), None); - chain.add_middleware(middleware); - - let request = Request::builder().body("test").unwrap(); - - let result = chain.process_request(request).await; - assert!(result.is_err()); - assert_eq!(result.unwrap_err().to_string(), "request error"); - } - - #[tokio::test] - async fn test_middleware_response_error() { - let mut chain = MiddlewareChain::new(); - let middleware = TestMiddleware::with_errors(None, Some("response error".to_string())); - chain.add_middleware(middleware); - - let response = Response::builder() - .status(200) - .body(empty_response()) - .unwrap(); - - let result = chain.process_response(response).await; - assert!(result.is_err()); - assert_eq!(result.unwrap_err().to_string(), "response error"); - } - - #[tokio::test] - async fn test_middleware_chain_clone() { - let mut chain = MiddlewareChain::new(); - let middleware = TestMiddleware::new(); - let request_calls = middleware.request_calls.clone(); - - chain.add_middleware(middleware); - let chain_clone = chain.clone(); - - let request = Request::builder().body("test").unwrap(); - - // Process on original and clone - chain.process_request(request.clone()).await.unwrap(); - chain_clone.process_request(request).await.unwrap(); - - // Both should have processed the request - assert_eq!(request_calls.lock().unwrap().as_slice(), &["test", "test"]); - } -} diff --git a/crates/rust-mcp-sdk/src/mcp_http/middleware.rs b/crates/rust-mcp-sdk/src/mcp_http/middleware.rs new file mode 100644 index 0000000..c8637e0 --- /dev/null +++ b/crates/rust-mcp-sdk/src/mcp_http/middleware.rs @@ -0,0 +1,496 @@ +#[cfg(feature = "auth")] +mod auth_middleware; +mod cors_middleware; +mod dns_rebind_protector; +pub mod logging_middleware; + +use super::types::{GenericBody, RequestHandler}; +use crate::mcp_http::{McpAppState, MiddlewareNext}; +use crate::mcp_server::error::TransportServerResult; +#[cfg(feature = "auth")] +pub(crate) use auth_middleware::*; +pub use cors_middleware::*; +pub(crate) use dns_rebind_protector::*; +use http::{Request, Response}; +use std::sync::Arc; + +#[async_trait::async_trait] +pub trait Middleware: Send + Sync + 'static { + async fn handle<'req>( + &self, + req: Request<&'req str>, + state: Arc, + next: MiddlewareNext<'req>, + ) -> TransportServerResult>; +} + +/// Build the final handler by folding the middlewares **in reverse**. +/// Each middleware and handler is consumed exactly once. +pub fn compose<'a, I>(middlewares: I, final_handler: RequestHandler) -> RequestHandler +where + I: IntoIterator>, + I::IntoIter: DoubleEndedIterator, +{ + // Start with the final handler + let mut handler = final_handler; + + // Fold middlewares in reverse order + for mw in middlewares.into_iter().rev() { + let mw = Arc::clone(mw); + let next = handler; + + // Each loop iteration consumes `next` and returns a new boxed FnOnce + handler = Box::new(move |req: Request<&str>, state: Arc| { + let mw = Arc::clone(&mw); + Box::pin(async move { mw.handle(req, state, next).await }) + }); + } + + handler +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::schema::{Implementation, InitializeResult, ProtocolVersion, ServerCapabilities}; + use crate::{ + id_generator::{FastIdGenerator, UuidGenerator}, + mcp_http::{ + middleware::{cors_middleware::CorsMiddleware, logging_middleware::LoggingMiddleware}, + types::GenericBodyExt, + }, + mcp_server::{error::TransportServerError, ServerHandler, ToMcpServerHandler}, + session_store::InMemorySessionStore, + }; + use async_trait::async_trait; + use http::{HeaderName, Request, Response, StatusCode}; + use http_body_util::BodyExt; + use std::{ + sync::{Arc, Mutex}, + time::Duration, + }; + struct TestHandler; + impl ServerHandler for TestHandler {} + + fn app_state() -> Arc { + let handler = TestHandler {}; + + Arc::new(McpAppState { + session_store: Arc::new(InMemorySessionStore::new()), + id_generator: Arc::new(UuidGenerator {}), + stream_id_gen: Arc::new(FastIdGenerator::new(Some("s_"))), + server_details: Arc::new(InitializeResult { + capabilities: ServerCapabilities { + ..Default::default() + }, + instructions: None, + meta: None, + protocol_version: ProtocolVersion::V2025_06_18.to_string(), + server_info: Implementation { + name: "server".to_string(), + title: None, + version: "0.1.0".to_string(), + }, + }), + handler: handler.to_mcp_server_handler(), + ping_interval: Duration::from_secs(15), + transport_options: Arc::new(rust_mcp_transport::TransportOptions::default()), + enable_json_response: false, + event_store: None, + }) + } + + /// Helper: Convert response to string + async fn response_string(res: Response) -> String { + let (_parts, body) = res.into_parts(); + let bytes = body.collect().await.unwrap().to_bytes(); + String::from_utf8(bytes.to_vec()).unwrap() + } + + /// Test Middleware – records everything, modifies req/res, supports early return + #[derive(Clone)] + struct TestMiddleware { + id: usize, + request_calls: Arc)>>>, + response_calls: Arc)>>>, + add_req_header: Option<(String, String)>, + add_res_header: Option<(String, String)>, + + // ---- early return (clone-able) ---- + early_return_status: Option, + early_return_body: Option, + + fail_request: bool, + fail_response: bool, + } + + impl TestMiddleware { + fn new(id: usize) -> Self { + Self { + id, + request_calls: Arc::new(Mutex::new(Vec::new())), + response_calls: Arc::new(Mutex::new(Vec::new())), + add_req_header: None, + add_res_header: None, + early_return_status: None, + early_return_body: None, + fail_request: false, + fail_response: false, + } + } + + fn with_req_header(mut self, name: &str, value: &str) -> Self { + self.add_req_header = Some((name.to_string(), value.to_string())); + self + } + + fn with_res_header(mut self, name: &str, value: &str) -> Self { + self.add_res_header = Some((name.to_string(), value.to_string())); + self + } + + fn early_return_200(mut self) -> Self { + self.early_return_status = Some(StatusCode::OK); + self.early_return_body = Some(format!("early-{}", self.id)); + self + } + + #[allow(unused)] + fn early_return(mut self, status: StatusCode, body: impl Into) -> Self { + self.early_return_status = Some(status); + self.early_return_body = Some(body.into()); + self + } + + fn fail_request(mut self) -> Self { + self.fail_request = true; + self + } + + fn fail_response(mut self) -> Self { + self.fail_response = true; + self + } + } + + #[async_trait] + impl Middleware for TestMiddleware { + async fn handle<'req>( + &self, + mut req: Request<&'req str>, + state: Arc, + next: MiddlewareNext<'req>, + ) -> TransportServerResult> { + // ---- record request ------------------------------------------------- + let headers = req + .headers() + .iter() + .map(|(k, v)| (k.as_str().to_string(), v.to_str().unwrap_or("").to_string())) + .collect(); + self.request_calls + .lock() + .unwrap() + .push((self.id, req.body().to_string(), headers)); + + if self.fail_request { + return Err(TransportServerError::HttpError(format!( + "middleware {} failed request", + self.id + ))); + } + + // ---- add request header -------------------------------------------- + if let Some((name, value)) = &self.add_req_header { + req.headers_mut().insert( + HeaderName::from_bytes(name.as_bytes()).unwrap(), + value.parse().unwrap(), + ); + } + + // ---- early return --------------------------------------------------- + if let (Some(status), Some(body)) = (&self.early_return_status, &self.early_return_body) + { + return Ok(Response::builder() + .status(*status) + .body(GenericBody::from_string(body.to_string())) + .unwrap()); + } + + // ---- call next ------------------------------------------------------ + let mut res = next(req, state).await?; + // ---- add response header -------------------------------------------- + if let Some((name, value)) = &self.add_res_header { + res.headers_mut().insert( + HeaderName::from_bytes(name.as_bytes()).unwrap(), + value.parse().unwrap(), + ); + } + + if self.fail_response { + return Err(TransportServerError::HttpError(format!( + "middleware {} failed response", + self.id + ))); + } + + // ---- record response ------------------------------------------------ + let headers = res + .headers() + .iter() + .map(|(k, v)| (k.as_str().to_string(), v.to_str().unwrap_or("").to_string())) + .collect(); + + self.response_calls + .lock() + .unwrap() + .push((self.id, res.status().as_u16(), headers)); + + Ok(res) + } + } + + /// Final handler – returns a fixed response + fn final_handler(body: &'static str, status: StatusCode) -> RequestHandler { + Box::new(move |_req, _| { + let resp = Response::builder() + .status(status) + .body(GenericBody::from_string(body.to_string())) + .unwrap(); + Box::pin(async move { Ok(resp) }) + }) + } + + // TESTS + + /// Middleware order (request → final → response) + #[tokio::test] + async fn test_middleware_order() { + let mw1 = Arc::new(TestMiddleware::new(1)); + let mw2 = Arc::new(TestMiddleware::new(2)); + let mw3 = Arc::new(TestMiddleware::new(3)); + + let middlewares: Vec> = vec![mw1.clone(), mw2.clone(), mw3.clone()]; + + let handler = final_handler("final", StatusCode::OK); + let composed = compose(&middlewares, handler); + + let req = Request::builder().body("").unwrap(); + let _ = composed(req, app_state()).await.unwrap(); + + // request order: 3 → 2 → 1 → final + let rc3 = mw3.request_calls.lock().unwrap(); + let rc2 = mw2.request_calls.lock().unwrap(); + let rc1 = mw1.request_calls.lock().unwrap(); + assert_eq!(rc3[0].0, 3); + assert_eq!(rc2[0].0, 2); + assert_eq!(rc1[0].0, 1); + + // response order: 1 → 2 → 3 + let pc1 = mw1.response_calls.lock().unwrap(); + let pc2 = mw2.response_calls.lock().unwrap(); + let pc3 = mw3.response_calls.lock().unwrap(); + assert_eq!(pc1[0].0, 1); + assert_eq!(pc2[0].0, 2); + assert_eq!(pc3[0].0, 3); + } + + /// Request header added by earlier middleware is visible later + #[tokio::test] + async fn test_request_header_propagation() { + let mw1 = Arc::new(TestMiddleware::new(1).with_req_header("x-mid", "1")); + let mw2 = Arc::new(TestMiddleware::new(2)); + + let middlewares: Vec> = vec![mw1.clone(), mw2.clone()]; + let handler = final_handler("ok", StatusCode::OK); + let composed = compose(&middlewares, handler); + + let req = Request::builder().body("").unwrap(); + let _ = composed(req, app_state()).await.unwrap(); + + let rc = mw2.request_calls.lock().unwrap(); + let hdr = rc[0].2.iter().find(|(k, _)| k == "x-mid").map(|(_, v)| v); + assert_eq!(hdr, Some(&"1".to_string())); + } + + /// Response header added by later middleware is visible earlier + #[tokio::test] + async fn test_response_header_propagation() { + let mw1 = Arc::new(TestMiddleware::new(1)); + let mw2 = Arc::new(TestMiddleware::new(2).with_res_header("x-mid", "1")); + + let middlewares: Vec> = vec![mw1.clone(), mw2.clone()]; + let handler = final_handler("ok", StatusCode::OK); + let composed = compose(&middlewares, handler); + + let req = Request::builder().body("").unwrap(); + let res = composed(req, app_state()).await.unwrap(); + + let pc1 = mw1.response_calls.lock().unwrap(); + + let hdr = pc1[0].2.iter().find(|(k, _)| k == "x-mid").map(|(_, v)| v); + assert_eq!(hdr, Some(&"1".to_string())); + + assert_eq!(res.headers().get("x-mid").unwrap().to_str().unwrap(), "1"); + } + + /// Early return stops the chain + #[tokio::test] + async fn test_early_return_stops_chain() { + let mw1 = Arc::new(TestMiddleware::new(1).early_return_200()); + let mw2 = Arc::new(TestMiddleware::new(2)); + let mw3 = Arc::new(TestMiddleware::new(3)); + + let middlewares: Vec> = vec![mw1.clone(), mw2.clone(), mw3.clone()]; + let handler = final_handler("should-not-see", StatusCode::OK); + let composed = compose(&middlewares, handler); + + let req = Request::builder().body("").unwrap(); + let res = composed(req, app_state()).await.unwrap(); + + assert_eq!(response_string(res).await, "early-1"); + + assert!(mw2.request_calls.lock().unwrap().is_empty()); + assert!(mw3.request_calls.lock().unwrap().is_empty()); + } + + /// Request error stops response processing + #[tokio::test] + async fn test_request_error_stops_response_chain() { + let mw1 = Arc::new(TestMiddleware::new(1).fail_request()); + let mw2 = Arc::new(TestMiddleware::new(2)); + + let middlewares: Vec> = vec![mw1.clone(), mw2.clone()]; + let handler = final_handler("ok", StatusCode::OK); + let composed = compose(&middlewares, handler); + + let req = Request::builder().body("").unwrap(); + let result = composed(req, app_state()).await; + + assert!(result.is_err()); + assert!(mw2.request_calls.lock().unwrap().is_empty()); + assert!(mw2.response_calls.lock().unwrap().is_empty()); + } + + ///Response error after next() + #[tokio::test] + async fn test_response_error_after_next() { + let mw1 = Arc::new(TestMiddleware::new(1).fail_response()); + let mw2 = Arc::new(TestMiddleware::new(2)); + + let middlewares: Vec> = vec![mw1.clone(), mw2.clone()]; + let handler = final_handler("ok", StatusCode::OK); + let composed = compose(&middlewares, handler); + + let req = Request::builder().body("").unwrap(); + let result = composed(req, app_state()).await; + + assert!(result.is_err()); + assert!(!mw1.request_calls.lock().unwrap().is_empty()); + // response_calls is empty because we error before recording + assert!(mw1.response_calls.lock().unwrap().is_empty()); + } + + /// No middleware → direct handler + #[tokio::test] + async fn test_no_middleware() { + let middlewares: Vec> = vec![]; + let handler = final_handler("direct", StatusCode::IM_A_TEAPOT); + let composed = compose(&middlewares, handler); + + let req = Request::builder().body("").unwrap(); + let res = composed(req, app_state()).await.unwrap(); + + assert_eq!(res.status(), StatusCode::IM_A_TEAPOT); + assert_eq!(response_string(res).await, "direct"); + } + + /// Multiple headers accumulate correctly + #[tokio::test] + async fn test_multiple_headers_accumulate() { + let mw1 = Arc::new( + TestMiddleware::new(1) + .with_req_header("x-a", "1") + .with_res_header("x-b", "1"), + ); + let mw2 = Arc::new( + TestMiddleware::new(2) + .with_req_header("x-c", "2") + .with_res_header("x-d", "2"), + ); + + let mw3 = Arc::new(TestMiddleware::new(3)); + + let middlewares: Vec> = vec![mw1.clone(), mw2.clone(), mw3.clone()]; + let handler = final_handler("ok", StatusCode::OK); + let composed = compose(&middlewares, handler); + + let req = Request::builder().body("").unwrap(); + let res = composed(req, app_state()).await.unwrap(); + + let h = res.headers(); + assert_eq!(h["x-b"], "1"); + assert_eq!(h["x-d"], "2"); + + // Request headers are NOT in response + assert!(!h.contains_key("x-a")); + assert!(!h.contains_key("x-c")); + + // But they were added to the request + let req_calls_mw3 = mw3.request_calls.lock().unwrap(); + let req_headers = &req_calls_mw3[0].2; + + assert!(req_headers.iter().any(|(k, v)| k == "x-a" && v == "1")); + assert!(req_headers.iter().any(|(k, v)| k == "x-c" && v == "2")); + } + + /// Request body is passed unchanged + #[tokio::test] + async fn test_request_body_unchanged() { + let mw1 = Arc::new(TestMiddleware::new(1)); + let mw2 = Arc::new(TestMiddleware::new(2)); + + let middlewares: Vec> = vec![mw1.clone(), mw2.clone()]; + let handler: RequestHandler = Box::new(move |req, _| { + let body = req.into_body().to_string(); + Box::pin(async move { + Ok(Response::builder() + .body(GenericBody::from_string(format!("echo:{body}"))) + .unwrap()) + }) + }); + let composed = compose(&middlewares, handler); + + let req = Request::builder().body("secret-payload").unwrap(); + let res = composed(req, app_state()).await.unwrap(); + assert_eq!(response_string(res).await, "echo:secret-payload"); + } + + // Integration: CORS + Logger (order matters) + #[tokio::test] + async fn test_cors_and_logger_integration() { + let cors = Arc::new(CorsMiddleware::permissive()); + let logger = Arc::new(LoggingMiddleware); + + // Order in the vector is the order they are *registered*. + // compose folds in reverse, so logger runs *first* (request) and *last* (response). + let middlewares: Vec> = vec![cors.clone(), logger.clone()]; + let handler = final_handler("ok", StatusCode::OK); + let composed = compose(&middlewares, handler); + + let req = Request::builder() + .method(http::Method::GET) + .uri("/api") + .header("Origin", "https://example.com") + .body("") + .unwrap(); + + let res = composed(req, app_state()).await.unwrap(); + + // CORS headers added by CorsMiddleware + assert_eq!( + res.headers()["access-control-allow-origin"], + "https://example.com" + ); + assert_eq!(res.headers()["access-control-allow-credentials"], "true"); + } +} diff --git a/crates/rust-mcp-sdk/src/mcp_http/middleware/auth_middleware.rs b/crates/rust-mcp-sdk/src/mcp_http/middleware/auth_middleware.rs new file mode 100644 index 0000000..f6de197 --- /dev/null +++ b/crates/rust-mcp-sdk/src/mcp_http/middleware/auth_middleware.rs @@ -0,0 +1,531 @@ +use crate::{ + auth::{AuthInfo, AuthProvider, AuthenticationError}, + mcp_http::{types::GenericBody, GenericBodyExt, McpAppState, Middleware, MiddlewareNext}, + mcp_server::error::TransportServerResult, +}; +use async_trait::async_trait; +use http::{ + header::{AUTHORIZATION, WWW_AUTHENTICATE}, + HeaderMap, HeaderValue, Request, Response, StatusCode, +}; +use std::{sync::Arc, time::SystemTime}; + +pub struct AuthMiddleware { + auth_provider: Arc, +} + +impl AuthMiddleware { + pub fn new(auth_provider: Arc) -> Self { + Self { auth_provider } + } + + async fn validate( + &self, + headers: &HeaderMap, + ) -> Result { + let Some(auth_token) = headers + .get(AUTHORIZATION) + .map(|v| v.to_str().ok().unwrap_or_default()) + else { + return Err(AuthenticationError::InvalidToken { + description: "Missing access token in Authorization header", + }); + }; + + let token = auth_token.trim(); + let parts: Vec<&str> = token.splitn(2, ' ').collect(); + + if parts.len() != 2 || !parts[0].eq_ignore_ascii_case("bearer") { + return Err(AuthenticationError::InvalidToken { + description: "Invalid Authorization header format, expected 'Bearer TOKEN'", + }); + } + + let bearer_token = parts[1].trim(); + + let auth_info = self + .auth_provider + .verify_token(bearer_token.to_string()) + .await?; + + match auth_info.expires_at { + Some(expires_at) => { + if SystemTime::now() >= expires_at { + return Err(AuthenticationError::InvalidToken { + description: "Token has expired", + }); + } + } + None => { + return Err(AuthenticationError::InvalidToken { + description: "Token has no expiration time", + }) + } + } + + if let Some(required_scopes) = self.auth_provider.required_scopes() { + if let Some(user_scopes) = auth_info.scopes.as_ref() { + if !required_scopes + .iter() + .all(|scope| user_scopes.contains(scope)) + { + return Err(AuthenticationError::InsufficientScope); + } + } + } + + Ok(auth_info) + } + + fn create_www_auth_value(&self, error_code: &str, error: AuthenticationError) -> String { + if let Some(resource_metadata) = self.auth_provider.protected_resource_metadata_url() { + format!( + r#"Bearer error="{error_code}", error_description="{error}", resource_metadata="{resource_metadata}""#, + ) + } else { + format!(r#"Bearer error="{error_code}", error_description="{error}""#,) + } + } + + fn error_response(&self, error: AuthenticationError) -> Response { + let as_json = error.as_json_value(); + let error_code = as_json + .get("error") + .unwrap_or_default() + .as_str() + .unwrap_or("unknown"); + + let (status_code, www_auth_value) = match error { + AuthenticationError::InactiveToken + | AuthenticationError::InvalidToken { description: _ } => ( + StatusCode::UNAUTHORIZED, + Some(self.create_www_auth_value(error_code, error)), + ), + AuthenticationError::InsufficientScope => ( + StatusCode::FORBIDDEN, + Some(self.create_www_auth_value(error_code, error)), + ), + AuthenticationError::TokenVerificationFailed { + description: _, + status_code, + } => { + if status_code.is_some_and(|s| s == StatusCode::FORBIDDEN) { + ( + StatusCode::FORBIDDEN, + Some(self.create_www_auth_value(error_code, error)), + ) + } else { + ( + status_code + .and_then(|v| StatusCode::from_u16(v).ok()) + .unwrap_or(StatusCode::BAD_REQUEST), + None, + ) + } + } + _ => (StatusCode::BAD_REQUEST, None), + }; + + let mut response = GenericBody::from_value(&as_json).into_json_response(status_code, None); + + if let Some(www_auth_value) = www_auth_value { + let Ok(www_auth_header_value) = HeaderValue::from_str(&www_auth_value) else { + return GenericBody::from_string("Unsupported WWW_AUTHENTICATE value".to_string()) + .into_response(StatusCode::INTERNAL_SERVER_ERROR, None); + }; + response + .headers_mut() + .append(WWW_AUTHENTICATE, www_auth_header_value); + } + + response + } +} + +#[async_trait] +impl Middleware for AuthMiddleware { + async fn handle<'req>( + &self, + mut req: Request<&'req str>, + state: Arc, + next: MiddlewareNext<'req>, + ) -> TransportServerResult> { + let auth_info = match self.validate(req.headers()).await { + Ok(auth_info) => auth_info, + Err(err) => { + return Ok(self.error_response(err)); + } + }; + req.extensions_mut().insert(auth_info); + next(req, state).await + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::auth::AuthMetadataBuilder; + use crate::schema::{Implementation, InitializeResult, ProtocolVersion, ServerCapabilities}; + use crate::{ + auth::{OauthTokenVerifier, RemoteAuthProvider}, + error::SdkResult, + id_generator::{FastIdGenerator, UuidGenerator}, + mcp_server::{ServerHandler, ToMcpServerHandler}, + session_store::InMemorySessionStore, + }; + use crate::{mcp_http::GenericBodyExt, mcp_server::error::TransportServerError}; + use bytes::Bytes; + use http_body_util::combinators::BoxBody; + use http_body_util::BodyExt; + use std::time::Duration; + + pub struct TestTokenVerifier {} + + impl TestTokenVerifier { + pub fn new() -> Self { + Self {} + } + } + + pub(crate) async fn body_to_string( + body: BoxBody, + ) -> Result { + let bytes = body.collect().await?.to_bytes(); + Ok(String::from_utf8_lossy(&bytes).into_owned()) + } + + #[async_trait] + impl OauthTokenVerifier for TestTokenVerifier { + async fn verify_token( + &self, + access_token: String, + ) -> Result { + let info = match access_token.as_str() { + "valid-token" => AuthInfo { + token_unique_id: "valid-token".to_string(), + client_id: Some("client-id".to_string()), + user_id: None, + scopes: Some(vec!["read".to_string(), "write".to_string()]), + expires_at: Some(SystemTime::now() + Duration::from_secs(90)), + audience: None, + extra: None, + }, + "expired-token" => AuthInfo { + token_unique_id: "expired-token".to_string(), + client_id: Some("client-id".to_string()), + user_id: None, + scopes: Some(vec!["read".to_string(), "write".to_string()]), + expires_at: Some(SystemTime::now() - Duration::from_secs(90)), // 90 seconds in the past + audience: None, + extra: None, + }, + + "no-expiration-token" => AuthInfo { + token_unique_id: "no-expiration-token".to_string(), + client_id: Some("client-id".to_string()), + scopes: Some(vec!["read".to_string(), "write".to_string()]), + user_id: None, + expires_at: None, + audience: None, + extra: None, + }, + "insufficient-scope" => AuthInfo { + token_unique_id: "insufficient-scope".to_string(), + client_id: Some("client-id".to_string()), + scopes: Some(vec!["read".to_string()]), + user_id: None, + expires_at: Some(SystemTime::now() + Duration::from_secs(90)), + audience: None, + extra: None, + }, + _ => return Err(AuthenticationError::NotFound("Bad token".to_string())), + }; + + Ok(info) + } + } + + pub fn create_oauth_provider() -> SdkResult { + let auth_metadata = AuthMetadataBuilder::new("http://127.0.0.1:3000/mcp") + .issuer("http://localhost:8090") + .authorization_servers(vec!["http://localhost:8090"]) + .scopes_supported(vec![ + "mcp:tools".to_string(), + "read".to_string(), + "write".to_string(), + ]) + .introspection_endpoint("/introspect") + .authorization_endpoint("/authorize") + .token_endpoint("/token") + .resource_name("MCP Demo Server".to_string()) + .build() + .unwrap(); + + let token_verifier = TestTokenVerifier::new(); + + Ok(RemoteAuthProvider::new( + auth_metadata.0, + auth_metadata.1, + Box::new(token_verifier), + Some(vec!["read".to_string(), "write".to_string()]), + )) + } + struct TestHandler; + impl ServerHandler for TestHandler {} + fn app_state() -> Arc { + let handler = TestHandler {}; + + Arc::new(McpAppState { + session_store: Arc::new(InMemorySessionStore::new()), + id_generator: Arc::new(UuidGenerator {}), + stream_id_gen: Arc::new(FastIdGenerator::new(Some("s_"))), + server_details: Arc::new(InitializeResult { + capabilities: ServerCapabilities { + ..Default::default() + }, + instructions: None, + meta: None, + protocol_version: ProtocolVersion::V2025_06_18.to_string(), + server_info: Implementation { + name: "server".to_string(), + title: None, + version: "0.1.0".to_string(), + }, + }), + handler: handler.to_mcp_server_handler(), + ping_interval: Duration::from_secs(15), + transport_options: Arc::new(rust_mcp_transport::TransportOptions::default()), + enable_json_response: false, + event_store: None, + }) + } + + #[tokio::test] + //should call next when token is valid + async fn test_call_next_when_token_is_valid() { + let provider = create_oauth_provider().unwrap(); + let middleware = AuthMiddleware::new(Arc::new(provider)); + + let req = Request::builder() + .header(AUTHORIZATION, "Bearer valid-token") + .body("") + .unwrap(); + let res = middleware + .handle( + req, + app_state(), + Box::new(move |_req, _state| { + let resp = Response::builder() + .status(StatusCode::OK) + .body(GenericBody::from_string("reached".to_string())) + .unwrap(); + Box::pin(async { Ok(resp) }) + }), + ) + .await + .unwrap(); + let (parts, body) = res.into_parts(); + assert_eq!(body_to_string(body).await.unwrap(), "reached"); + assert_eq!(parts.status, StatusCode::OK) + } + + #[tokio::test] + //should reject expired tokens + async fn should_reject_expired_tokens() { + let provider = create_oauth_provider().unwrap(); + let middleware = AuthMiddleware::new(Arc::new(provider)); + + let req = Request::builder() + .header(AUTHORIZATION, "Bearer expired-token") + .body("") + .unwrap(); + let res = middleware + .handle( + req, + app_state(), + Box::new(move |_req, _state| { + let resp = Response::builder() + .status(StatusCode::OK) + .body(GenericBody::from_string("reached".to_string())) + .unwrap(); + Box::pin(async { Ok(resp) }) + }), + ) + .await + .unwrap(); + let (parts, body) = res.into_parts(); + + let body_string = body_to_string(body).await.unwrap(); + assert!(body_string.contains("Token has expired")); + assert!(body_string.contains("invalid_token")); + assert_eq!(parts.status, StatusCode::UNAUTHORIZED); + let header_value = parts + .headers + .get(WWW_AUTHENTICATE) + .unwrap() + .to_str() + .unwrap(); + assert!(header_value.contains(r#"Bearer error="invalid_token""#)) + } + + //should reject tokens with no expiration time + #[tokio::test] + async fn should_reject_tokens_with_no_expiration_time() { + let provider = create_oauth_provider().unwrap(); + let middleware = AuthMiddleware::new(Arc::new(provider)); + + let req = Request::builder() + .header(AUTHORIZATION, "Bearer no-expiration-token") + .body("") + .unwrap(); + let res = middleware + .handle( + req, + app_state(), + Box::new(move |_req, _state| { + let resp = Response::builder() + .status(StatusCode::OK) + .body(GenericBody::from_string("reached".to_string())) + .unwrap(); + Box::pin(async { Ok(resp) }) + }), + ) + .await + .unwrap(); + let (parts, body) = res.into_parts(); + + assert_eq!(parts.status, StatusCode::UNAUTHORIZED); + + let body_string = body_to_string(body).await.unwrap(); + assert!(body_string.contains("invalid_token")); + assert!(body_string.contains("Token has no expiration time")); + let header_value = parts + .headers + .get(WWW_AUTHENTICATE) + .unwrap() + .to_str() + .unwrap(); + assert!(header_value.contains(r#"Bearer error="invalid_token""#)) + } + + // should require specific scopes when configured + #[tokio::test] + async fn should_require_specific_scopes_when_configured() { + let provider = create_oauth_provider().unwrap(); + let middleware = AuthMiddleware::new(Arc::new(provider)); + + let req = Request::builder() + .header(AUTHORIZATION, "Bearer insufficient-scope") + .body("") + .unwrap(); + let res = middleware + .handle( + req, + app_state(), + Box::new(move |_req, _state| { + let resp = Response::builder() + .status(StatusCode::OK) + .body(GenericBody::from_string("reached".to_string())) + .unwrap(); + Box::pin(async { Ok(resp) }) + }), + ) + .await + .unwrap(); + let (parts, body) = res.into_parts(); + + assert_eq!(parts.status, StatusCode::FORBIDDEN); + + let body_string = body_to_string(body).await.unwrap(); + assert!(body_string.contains("insufficient_scope")); + assert!(body_string.contains("Insufficient scope")); + let header_value = parts + .headers + .get(WWW_AUTHENTICATE) + .unwrap() + .to_str() + .unwrap(); + assert!(header_value.contains(r#"Bearer error="insufficient_scope""#)) + } + + // should return 401 when no Authorization header is present + #[tokio::test] + async fn should_return_401_when_no_authorization_header_is_present() { + let provider = create_oauth_provider().unwrap(); + let middleware = AuthMiddleware::new(Arc::new(provider)); + + let req = Request::builder().body("").unwrap(); + let res = middleware + .handle( + req, + app_state(), + Box::new(move |_req, _state| { + let resp = Response::builder() + .status(StatusCode::OK) + .body(GenericBody::from_string("reached".to_string())) + .unwrap(); + Box::pin(async { Ok(resp) }) + }), + ) + .await + .unwrap(); + let (parts, body) = res.into_parts(); + + assert_eq!(parts.status, StatusCode::UNAUTHORIZED); + + let body_string = body_to_string(body).await.unwrap(); + assert!(body_string.contains("invalid_token")); + assert!(body_string.contains("Missing access token in Authorization header")); + let header_value = parts + .headers + .get(WWW_AUTHENTICATE) + .unwrap() + .to_str() + .unwrap(); + assert!(header_value.contains(r#"Bearer error="invalid_token""#)) + } + //should return 401 when Authorization header format is invalid + #[tokio::test] + async fn should_return_401_when_authorization_header_format_is_invalid() { + let provider = create_oauth_provider().unwrap(); + let middleware = AuthMiddleware::new(Arc::new(provider)); + + let req = Request::builder() + .header(AUTHORIZATION, "INVALID") + .body("") + .unwrap(); + let res = middleware + .handle( + req, + app_state(), + Box::new(move |_req, _state| { + let resp = Response::builder() + .status(StatusCode::OK) + .body(GenericBody::from_string("reached".to_string())) + .unwrap(); + Box::pin(async { Ok(resp) }) + }), + ) + .await + .unwrap(); + let (parts, body) = res.into_parts(); + + assert_eq!(parts.status, StatusCode::UNAUTHORIZED); + + let body_string = body_to_string(body).await.unwrap(); + assert!(body_string.contains("invalid_token")); + assert!(body_string.contains("Bearer TOKEN")); + let header_value = parts + .headers + .get(WWW_AUTHENTICATE) + .unwrap() + .to_str() + .unwrap(); + + assert!(header_value.contains(r#"Bearer error="invalid_token""#)); + + assert!(header_value.contains( + r#"resource_metadata="http://127.0.0.1/.well-known/oauth-protected-resource/mcp"# + )); + } +} diff --git a/crates/rust-mcp-sdk/src/mcp_http/middleware/cors_middleware.rs b/crates/rust-mcp-sdk/src/mcp_http/middleware/cors_middleware.rs new file mode 100644 index 0000000..08bbba1 --- /dev/null +++ b/crates/rust-mcp-sdk/src/mcp_http/middleware/cors_middleware.rs @@ -0,0 +1,617 @@ +//! # CORS Middleware +//! +//! A configurable CORS middleware that follows the +//! [WHATWG CORS specification](https://fetch.spec.whatwg.org/#http-cors-protocol). +//! +//! ## Features +//! - Full preflight (`OPTIONS`) handling +//! - Configurable origins: `*`, explicit list, or echo +//! - Credential support (with correct `Access-Control-Allow-Origin` behavior) +//! - Header/method validation +//! - `Access-Control-Expose-Headers` support + +use crate::{ + mcp_http::{types::GenericBody, GenericBodyExt, McpAppState, Middleware, MiddlewareNext}, + mcp_server::error::TransportServerResult, +}; +use http::{ + header::{ + self, HeaderName, HeaderValue, ACCESS_CONTROL_ALLOW_CREDENTIALS, + ACCESS_CONTROL_ALLOW_HEADERS, ACCESS_CONTROL_ALLOW_METHODS, ACCESS_CONTROL_ALLOW_ORIGIN, + ACCESS_CONTROL_EXPOSE_HEADERS, ACCESS_CONTROL_MAX_AGE, ACCESS_CONTROL_REQUEST_HEADERS, + ACCESS_CONTROL_REQUEST_METHOD, + }, + Method, Request, Response, StatusCode, +}; +use rust_mcp_transport::MCP_SESSION_ID_HEADER; +use std::{collections::HashSet, sync::Arc}; + +/// Configuration for CORS behavior. +/// +/// See [MDN CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) for details. +#[derive(Clone)] +pub struct CorsConfig { + /// Which origins are allowed to make requests. + pub allow_origins: AllowOrigins, + + /// HTTP methods allowed in preflight and actual requests. + pub allow_methods: Vec, + + /// Request headers allowed in preflight. + pub allow_headers: Vec, + + /// Whether to allow credentials (cookies, HTTP auth, etc). + /// + /// **Important**: When `true`, `allow_origins` cannot be `Any` - browsers reject `*`. + pub allow_credentials: bool, + + /// How long (in seconds) the preflight response can be cached. + pub max_age: Option, + + /// Headers that should be exposed to the client JavaScript. + pub expose_headers: Vec, +} + +impl Default for CorsConfig { + fn default() -> Self { + Self { + allow_origins: AllowOrigins::Any, + allow_methods: vec![Method::GET, Method::POST, Method::OPTIONS], + allow_headers: vec![ + header::CONTENT_TYPE, + header::AUTHORIZATION, + HeaderName::from_static(MCP_SESSION_ID_HEADER), + ], + allow_credentials: false, + max_age: Some(86_400), // 24 hours + expose_headers: vec![], + } + } +} + +/// Policy for allowed origins. +#[derive(Clone, Debug)] +pub enum AllowOrigins { + /// Allow any origin (`*`). + /// + /// **Cannot** be used with `allow_credentials = true`. + Any, + + /// Allow only specific origins. + List(HashSet), + + /// Echo the `Origin` header back (required when `allow_credentials = true`). + Echo, +} + +/// CORS middleware implementing the `Middleware` trait. +/// +/// Handles both **preflight** (`OPTIONS`) and **actual** requests, +/// adding appropriate CORS headers and rejecting invalid origins/methods/headers. +#[derive(Clone, Default)] +pub struct CorsMiddleware { + config: Arc, +} + +impl CorsMiddleware { + /// Create a new CORS middleware with custom config. + pub fn new(config: CorsConfig) -> Self { + Self { + config: Arc::new(config), + } + } + + /// Create a permissive CORS config - useful for public APIs or local dev. + /// + /// Allows all common methods, credentials, and common headers. + pub fn permissive() -> Self { + Self::new(CorsConfig { + allow_origins: AllowOrigins::Any, + allow_methods: vec![ + Method::GET, + Method::POST, + Method::PUT, + Method::DELETE, + Method::PATCH, + Method::OPTIONS, + Method::HEAD, + ], + allow_headers: vec![ + header::CONTENT_TYPE, + header::AUTHORIZATION, + header::ACCEPT, + header::ORIGIN, + ], + allow_credentials: true, + max_age: Some(86_400), + expose_headers: vec![], + }) + } + + // Internal: resolve allowed origin header value + fn resolve_allowed_origin(&self, origin: &str) -> Option { + match &self.config.allow_origins { + AllowOrigins::Any => { + // Only return "*" if credentials are not allowed + if self.config.allow_credentials { + // rule MDN , RFC 6454 + // If Access-Control-Allow-Credentials: true is set, + // then Access-Control-Allow-Origin CANNOT be *. + // It MUST be the exact origin (e.g., https://example.com). + Some(origin.to_string()) + } else { + Some("*".to_string()) + } + } + AllowOrigins::List(allowed) => { + if allowed.contains(origin) { + Some(origin.to_string()) + } else { + None + } + } + AllowOrigins::Echo => Some(origin.to_string()), + } + } + + // Build preflight response (204 No Content) + fn preflight_response(&self, origin: &str) -> Response { + let allowed_origin = self.resolve_allowed_origin(origin); + let mut resp = Response::builder() + .status(StatusCode::NO_CONTENT) + .body(GenericBody::empty()) + .expect("preflight response is static"); + + let headers = resp.headers_mut(); + + if let Some(origin) = allowed_origin { + headers.insert( + ACCESS_CONTROL_ALLOW_ORIGIN, + HeaderValue::from_str(&origin).expect("origin is validated"), + ); + } + + if self.config.allow_credentials { + headers.insert( + ACCESS_CONTROL_ALLOW_CREDENTIALS, + HeaderValue::from_static("true"), + ); + } + + if let Some(age) = self.config.max_age { + headers.insert( + ACCESS_CONTROL_MAX_AGE, + HeaderValue::from_str(&age.to_string()).expect("u32 is valid"), + ); + } + + let methods = self + .config + .allow_methods + .iter() + .map(|m| m.as_str()) + .collect::>() + .join(", "); + headers.insert( + ACCESS_CONTROL_ALLOW_METHODS, + HeaderValue::from_str(&methods).expect("methods are static"), + ); + + let headers_list = self + .config + .allow_headers + .iter() + .map(|h| h.as_str()) + .collect::>() + .join(", "); + headers.insert( + ACCESS_CONTROL_ALLOW_HEADERS, + HeaderValue::from_str(&headers_list).expect("headers are static"), + ); + + resp + } + + // Add CORS headers to normal response + fn add_cors_to_response( + &self, + mut resp: Response, + origin: &str, + ) -> Response { + let allowed_origin = self.resolve_allowed_origin(origin); + let headers = resp.headers_mut(); + + if let Some(origin) = allowed_origin { + headers.insert( + ACCESS_CONTROL_ALLOW_ORIGIN, + HeaderValue::from_str(&origin).expect("origin is validated"), + ); + } + + if self.config.allow_credentials { + headers.insert( + ACCESS_CONTROL_ALLOW_CREDENTIALS, + HeaderValue::from_static("true"), + ); + } + + if !self.config.expose_headers.is_empty() { + let expose = self + .config + .expose_headers + .iter() + .map(|h| h.as_str()) + .collect::>() + .join(", "); + headers.insert( + ACCESS_CONTROL_EXPOSE_HEADERS, + HeaderValue::from_str(&expose).expect("expose headers are static"), + ); + } + + resp + } +} + +// Middleware trait implementation +#[async_trait::async_trait] +impl Middleware for CorsMiddleware { + /// Process a request, handling preflight or adding CORS headers. + /// + /// - For `OPTIONS` with `Access-Control-Request-Method`: performs preflight. + /// - For other requests: passes to `next`, then adds CORS headers. + async fn handle<'req>( + &self, + req: Request<&'req str>, + state: Arc, + next: MiddlewareNext<'req>, + ) -> TransportServerResult> { + let origin = req + .headers() + .get(header::ORIGIN) + .and_then(|v| v.to_str().ok()) + .map(|s| s.to_string()); + + // Preflight: OPTIONS + Access-Control-Request-Method + if *req.method() == Method::OPTIONS { + let requested_method = req + .headers() + .get(ACCESS_CONTROL_REQUEST_METHOD) + .and_then(|v| v.to_str().ok()) + .and_then(|s| s.parse::().ok()); + + let requested_headers = req + .headers() + .get(ACCESS_CONTROL_REQUEST_HEADERS) + .and_then(|v| v.to_str().ok()) + .map(|s| { + s.split(',') + .map(|h| h.trim().to_ascii_lowercase()) + .collect::>() + }) + .unwrap_or_default(); + + let origin = match origin { + Some(o) => o, + None => { + // Some tools send preflight without Origin - allow if Any + if matches!(self.config.allow_origins, AllowOrigins::Any) + && !self.config.allow_credentials + { + return Ok(self.preflight_response("*")); + } else { + return Ok(GenericBody::build_response( + StatusCode::BAD_REQUEST, + "CORS origin missing in preflight".to_string(), + None, + )); + } + } + }; + + // Validate origin + if self.resolve_allowed_origin(&origin).is_none() { + return Ok(GenericBody::build_response( + StatusCode::FORBIDDEN, + "CORS origin not allowed".to_string(), + None, + )); + } + + // Validate method + if let Some(m) = requested_method { + if !self.config.allow_methods.contains(&m) { + return Ok(GenericBody::build_response( + StatusCode::METHOD_NOT_ALLOWED, + "CORS method not allowed".to_string(), + None, + )); + } + } + + // Validate headers + let allowed = self + .config + .allow_headers + .iter() + .map(|h| h.as_str().to_ascii_lowercase()) + .collect::>(); + + if !requested_headers.is_subset(&allowed) { + return Ok(GenericBody::build_response( + StatusCode::BAD_REQUEST, + "CORS header not allowed".to_string(), + None, + )); + } + + // All good - return preflight + return Ok(self.preflight_response(&origin)); + } + + // Normal request: forward to next handler + let mut resp = next(req, state).await?; + if let Some(origin) = origin { + if self.resolve_allowed_origin(&origin).is_some() { + resp = self.add_cors_to_response(resp, &origin); + } + } + + Ok(resp) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::{ + id_generator::{FastIdGenerator, UuidGenerator}, + mcp_http::{types::GenericBodyExt, MiddlewareNext}, + mcp_server::{ServerHandler, ToMcpServerHandler}, + schema::{Implementation, InitializeResult, ProtocolVersion, ServerCapabilities}, + session_store::InMemorySessionStore, + }; + use http::{header, Request, Response, StatusCode}; + use std::time::Duration; + + type TestResult = Result<(), Box>; + struct TestHandler; + impl ServerHandler for TestHandler {} + + fn app_state() -> Arc { + let handler = TestHandler {}; + + Arc::new(McpAppState { + session_store: Arc::new(InMemorySessionStore::new()), + id_generator: Arc::new(UuidGenerator {}), + stream_id_gen: Arc::new(FastIdGenerator::new(Some("s_"))), + server_details: Arc::new(InitializeResult { + capabilities: ServerCapabilities { + ..Default::default() + }, + instructions: None, + meta: None, + protocol_version: ProtocolVersion::V2025_06_18.to_string(), + server_info: Implementation { + name: "server".to_string(), + title: None, + version: "0.1.0".to_string(), + }, + }), + handler: handler.to_mcp_server_handler(), + ping_interval: Duration::from_secs(15), + transport_options: Arc::new(rust_mcp_transport::TransportOptions::default()), + enable_json_response: false, + event_store: None, + }) + } + + fn make_handler<'req>(status: StatusCode, body: &'static str) -> MiddlewareNext<'req> { + Box::new(move |_, _| { + let resp = Response::builder() + .status(status) + .body(GenericBody::from_string(body.to_string())) + .unwrap(); + Box::pin(async { Ok(resp) }) + }) + } + + #[tokio::test] + async fn test_preflight_allowed() -> TestResult { + let cors = CorsMiddleware::permissive(); + let handler = make_handler(StatusCode::OK, "should not see"); + + let req = Request::builder() + .method(Method::OPTIONS) + .uri("/") + .header(header::ORIGIN, "https://example.com") + .header(ACCESS_CONTROL_REQUEST_METHOD, "POST") + .header( + ACCESS_CONTROL_REQUEST_HEADERS, + "content-type, authorization", + ) + .body("")?; + + let resp = cors.handle(req, app_state(), handler).await?; + + assert_eq!(resp.status(), StatusCode::NO_CONTENT); + assert_eq!( + resp.headers()[ACCESS_CONTROL_ALLOW_ORIGIN], + "https://example.com" + ); + assert_eq!( + resp.headers()[ACCESS_CONTROL_ALLOW_METHODS], + "GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD" + ); + Ok(()) + } + + #[tokio::test] + async fn test_preflight_disallowed_origin() -> TestResult { + let mut allowed = HashSet::new(); + allowed.insert("https://trusted.com".to_string()); + + let cors = CorsMiddleware::new(CorsConfig { + allow_origins: AllowOrigins::List(allowed), + allow_methods: vec![Method::GET], + allow_headers: vec![], + allow_credentials: false, + max_age: None, + expose_headers: vec![], + }); + + let handler = make_handler(StatusCode::OK, "irrelevant"); + + let req = Request::builder() + .method(Method::OPTIONS) + .uri("/") + .header(header::ORIGIN, "https://evil.com") + .header(ACCESS_CONTROL_REQUEST_METHOD, "GET") + .body("")?; + + let result: Response = cors.handle(req, app_state(), handler).await.unwrap(); + let (parts, _body) = result.into_parts(); + assert_eq!(parts.status, 403); + Ok(()) + } + + #[tokio::test] + async fn test_normal_request_with_origin() -> TestResult { + let cors = CorsMiddleware::permissive(); + let handler = make_handler(StatusCode::OK, "hello"); + + let req = Request::builder() + .method(Method::GET) + .uri("/") + .header(header::ORIGIN, "https://client.com") + .body("")?; + + let resp = cors.handle(req, app_state(), handler).await?; + + assert_eq!(resp.status(), StatusCode::OK); + + assert_eq!( + resp.headers()[ACCESS_CONTROL_ALLOW_ORIGIN], + "https://client.com" + ); + assert_eq!(resp.headers()[ACCESS_CONTROL_ALLOW_CREDENTIALS], "true"); + Ok(()) + } + + #[tokio::test] + async fn test_wildcard_with_no_credentials() -> TestResult { + let cors = CorsMiddleware::new(CorsConfig { + allow_origins: AllowOrigins::Any, + allow_methods: vec![Method::GET], + allow_headers: vec![], + allow_credentials: false, + max_age: None, + expose_headers: vec![], + }); + + let handler = make_handler(StatusCode::OK, "ok"); + + let req = Request::builder() + .method(Method::GET) + .uri("/") + .header(header::ORIGIN, "https://any.com") + .body("")?; + + let resp = cors.handle(req, app_state(), handler).await?; + assert_eq!(resp.headers()[ACCESS_CONTROL_ALLOW_ORIGIN], "*"); + Ok(()) + } + + #[tokio::test] + async fn test_no_wildcard_with_credentials() -> TestResult { + let cors = CorsMiddleware::new(CorsConfig { + allow_origins: AllowOrigins::Any, + allow_methods: vec![Method::GET], + allow_headers: vec![], + allow_credentials: true, // This should prevent "*" + max_age: None, + expose_headers: vec![], + }); + + let handler = make_handler(StatusCode::OK, "ok"); + + let req = Request::builder() + .method(Method::GET) + .uri("/") + .header(header::ORIGIN, "https://any.com") + .body("")?; + + let resp = cors.handle(req, app_state(), handler).await?; + + // Should NOT have "*" even though config says Any + let origin_header = resp + .headers() + .get(ACCESS_CONTROL_ALLOW_ORIGIN) + .expect("CORS header missing"); + assert_eq!(origin_header, "https://any.com"); + + // And credentials should be allowed + assert_eq!( + resp.headers() + .get(ACCESS_CONTROL_ALLOW_CREDENTIALS) + .unwrap(), + "true" + ); + Ok(()) + } + + #[tokio::test] + async fn test_echo_origin_with_credentials() -> TestResult { + let cors = CorsMiddleware::new(CorsConfig { + allow_origins: AllowOrigins::Echo, + allow_methods: vec![Method::GET], + allow_headers: vec![], + allow_credentials: true, + max_age: None, + expose_headers: vec![], + }); + + let handler = make_handler(StatusCode::OK, "ok"); + + let req = Request::builder() + .method(Method::GET) + .uri("/") + .header(header::ORIGIN, "https://dynamic.com") + .body("")?; + + let resp = cors.handle(req, app_state(), handler).await?; + assert_eq!( + resp.headers()[ACCESS_CONTROL_ALLOW_ORIGIN], + "https://dynamic.com" + ); + assert_eq!(resp.headers()[ACCESS_CONTROL_ALLOW_CREDENTIALS], "true"); + Ok(()) + } + + #[tokio::test] + async fn test_expose_headers() -> TestResult { + let cors = CorsMiddleware::new(CorsConfig { + allow_origins: AllowOrigins::Any, + allow_methods: vec![Method::GET], + allow_headers: vec![], + allow_credentials: false, + max_age: None, + expose_headers: vec![HeaderName::from_static("x-ratelimit-remaining")], + }); + + let handler = make_handler(StatusCode::OK, "ok"); + + let req = Request::builder() + .method(Method::GET) + .uri("/") + .header(header::ORIGIN, "https://client.com") + .body("")?; + + let resp = cors.handle(req, app_state(), handler).await?; + assert_eq!( + resp.headers()[ACCESS_CONTROL_EXPOSE_HEADERS], + "x-ratelimit-remaining" + ); + Ok(()) + } +} diff --git a/crates/rust-mcp-sdk/src/mcp_http/middleware/dns_rebind_protector.rs b/crates/rust-mcp-sdk/src/mcp_http/middleware/dns_rebind_protector.rs new file mode 100644 index 0000000..4cdd7ef --- /dev/null +++ b/crates/rust-mcp-sdk/src/mcp_http/middleware/dns_rebind_protector.rs @@ -0,0 +1,132 @@ +//! DNS Rebinding Protection Middleware +//! +//! This module provides a middleware that protects against DNS rebinding attacks +//! by validating the `Host` and `Origin` headers against configurable allowlists. +//! +//! DNS rebinding is an attack where a malicious site tricks a client's DNS resolver +//! into resolving a domain (e.g., `attacker.com`) to a private IP (like `127.0.0.1`), +//! allowing it to bypass same-origin policy and access internal services. +//! +//! # Security Model +//! +//! - If `allowed_hosts` is `Some(vec![..])` and non-empty → `Host` header **must** match (case-insensitive) +//! - If `allowed_origins` is `Some(vec![..])` and non-empty → `Origin` header **must** match (case-insensitive) +//! - Missing or unparsable headers → treated as invalid → 403 Forbidden +//! - If allowlist is `None` or empty → that check is skipped + +use crate::{ + mcp_http::{error_response, types::GenericBody, McpAppState, Middleware, MiddlewareNext}, + mcp_server::error::TransportServerResult, + schema::schema_utils::SdkError, +}; +use async_trait::async_trait; +use http::{ + header::{HOST, ORIGIN}, + Request, Response, StatusCode, +}; +use std::sync::Arc; + +/// DNS Rebinding Protection Middleware +/// +/// Validates `Host` and `Origin` headers against allowlists to prevent DNS rebinding attacks. +/// Returns `403 Forbidden` with a descriptive error if validation fails. +/// +/// This middleware should be placed **early** in the chain (before routing) to ensure +/// protection even for unmatched routes. +/// +/// # When to use +/// - Public-facing APIs +/// - Services accessible via custom domains +/// - Any server that should **never** be accessible via `127.0.0.1`, `localhost`, or raw IPs +/// +/// # Security Considerations +/// - Always pin exact hostnames (e.g., `app.example.com:8443`) +/// - Avoid wildcards or overly broad patterns +/// - For local development, include `localhost:PORT` explicitly +/// - Never allow raw IP addresses in production allowlists +pub(crate) struct DnsRebindProtector { + /// List of allowed host header values for DNS rebinding protection. + /// If not specified, host validation is disabled. + pub allowed_hosts: Option>, + /// List of allowed origin header values for DNS rebinding protection. + /// If not specified, origin validation is disabled. + pub allowed_origins: Option>, +} + +#[async_trait] +impl Middleware for DnsRebindProtector { + /// Processes the incoming request and applies DNS rebinding protection. + /// + /// # Arguments + /// + /// * `req` - The incoming HTTP request with `&str` body (pre-read) + /// * `state` - Shared application state + /// * `next` - The next middleware/handler in the chain + /// + /// # Returns + /// + /// * `Ok(Response)` - If validation passes, forwards to next handler + /// * `Err` via `error_response(403, ...)` - If Host/Origin validation fails + async fn handle<'req>( + &self, + req: Request<&'req str>, + state: Arc, + next: MiddlewareNext<'req>, + ) -> TransportServerResult> { + if let Err(error) = self.protect_dns_rebinding(req.headers()).await { + return error_response(StatusCode::FORBIDDEN, error); + } + next(req, state).await + } +} + +impl DnsRebindProtector { + pub fn new(allowed_hosts: Option>, allowed_origins: Option>) -> Self { + Self { + allowed_hosts, + allowed_origins, + } + } + + // Protect against DNS rebinding attacks by validating Host and Origin headers. + // If protection fails, respond with HTTP 403 Forbidden. + async fn protect_dns_rebinding(&self, headers: &http::HeaderMap) -> Result<(), SdkError> { + if let Some(allowed_hosts) = self.allowed_hosts.as_ref() { + if !allowed_hosts.is_empty() { + let Some(host) = headers.get(HOST).and_then(|h| h.to_str().ok()) else { + return Err( + SdkError::bad_request().with_message("Invalid Host header: [unknown] ") + ); + }; + + if !allowed_hosts + .iter() + .any(|allowed| allowed.eq_ignore_ascii_case(host)) + { + return Err(SdkError::bad_request() + .with_message(format!("Invalid Host header: \"{host}\" ").as_str())); + } + } + } + + if let Some(allowed_origins) = self.allowed_origins.as_ref() { + if !allowed_origins.is_empty() { + let Some(origin) = headers.get(ORIGIN).and_then(|h| h.to_str().ok()) else { + return Err( + SdkError::bad_request().with_message("Invalid Origin header: [unknown] ") + ); + }; + + if !allowed_origins + .iter() + .any(|allowed| allowed.eq_ignore_ascii_case(origin)) + { + return Err(SdkError::bad_request() + .with_message(format!("Invalid Origin header: \"{origin}\" ").as_str())); + } + } + } + + Ok(()) + } +} diff --git a/crates/rust-mcp-sdk/src/mcp_http/middleware/logging_middleware.rs b/crates/rust-mcp-sdk/src/mcp_http/middleware/logging_middleware.rs new file mode 100644 index 0000000..957e04d --- /dev/null +++ b/crates/rust-mcp-sdk/src/mcp_http/middleware/logging_middleware.rs @@ -0,0 +1,34 @@ +//! A very simple example middleware for inspiration. +//! +//! This demonstrates how to implement a basic logging middleware +//! using the `Middleware` trait. It logs incoming requests and outgoing +//! responses. In a real-world application, you might extend this to +//! include structured logging, tracing, timing, or error reporting. +use crate::{ + mcp_http::{types::GenericBody, McpAppState, Middleware, MiddlewareNext}, + mcp_server::error::TransportServerResult, +}; +use async_trait::async_trait; +use http::{Request, Response}; +use std::sync::Arc; + +/// A minimal middleware that logs request URIs and response statuses. +/// +/// This is just a *very, very* simple example meant for inspiration. +/// It shows how to wrap a request/response cycle inside a middleware layer. +pub struct LoggingMiddleware; + +#[async_trait] +impl Middleware for LoggingMiddleware { + async fn handle<'req>( + &self, + req: Request<&'req str>, + state: Arc, + next: MiddlewareNext<'req>, + ) -> TransportServerResult> { + println!("➡️ Logging request: {}", req.uri()); + let res = next(req, state).await?; + println!("⬅️ Logging response: {}", res.status()); + Ok(res) + } +} diff --git a/crates/rust-mcp-sdk/src/mcp_http/types.rs b/crates/rust-mcp-sdk/src/mcp_http/types.rs new file mode 100644 index 0000000..b6db3dc --- /dev/null +++ b/crates/rust-mcp-sdk/src/mcp_http/types.rs @@ -0,0 +1,176 @@ +use crate::{ + mcp_http::McpAppState, + mcp_server::error::{TransportServerError, TransportServerResult}, +}; +use bytes::Bytes; +use futures::future::BoxFuture; +use http::{ + header::{ALLOW, CONTENT_TYPE}, + HeaderMap, HeaderName, HeaderValue, Method, Request, Response, StatusCode, +}; +use http_body_util::{combinators::BoxBody, BodyExt, Full}; +use serde_json::Value; +use std::sync::Arc; + +pub type GenericBody = BoxBody; + +pub trait GenericBodyExt { + fn from_string(s: String) -> Self; + fn from_value(value: &Value) -> Self; + fn empty() -> Self; + fn build_response( + status_code: StatusCode, + payload: String, + headers: Option, + ) -> http::Response; + fn into_response( + self, + status_code: StatusCode, + headers: Option, + ) -> http::Response; + + fn into_json_response( + self, + status_code: StatusCode, + headers: Option, + ) -> http::Response; + + fn create_404_response() -> http::Response; + + fn create_405_response( + method: &Method, + allowed_methods: &[Method], + ) -> http::Response; +} + +impl GenericBodyExt for GenericBody { + fn from_string(s: String) -> Self { + Full::new(Bytes::from(s)) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed() + } + + fn from_value(value: &Value) -> Self { + let bytes = match serde_json::to_vec(value) { + Ok(vec) => Bytes::from(vec), + Err(_) => Bytes::from_static(b"{\"error\":\"internal_error\"}"), + }; + Full::new(bytes) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed() + } + + fn empty() -> Self { + Full::new(Bytes::new()) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed() + } + + fn build_response( + status_code: StatusCode, + payload: String, + headers: Option, + ) -> http::Response { + let body = Self::from_string(payload); + body.into_response(status_code, headers) + } + + fn into_json_response( + self, + status_code: StatusCode, + headers: Option, + ) -> http::Response { + let mut headers = headers.unwrap_or_default(); + headers.append(CONTENT_TYPE, HeaderValue::from_static("application/json")); + self.into_response(status_code, Some(headers)) + } + + fn into_response( + self, + status_code: StatusCode, + headers: Option, + ) -> http::Response { + let mut resp = http::Response::new(self); + *resp.status_mut() = status_code; + + if let Some(mut headers) = headers { + let mut current_name: Option = None; + for (name_opt, value) in headers.drain() { + if let Some(name) = name_opt { + current_name = Some(name); + } + let name = current_name.as_ref().unwrap(); + resp.headers_mut().append(name.clone(), value); + } + } + if !resp.headers().contains_key(CONTENT_TYPE) { + resp.headers_mut() + .append(CONTENT_TYPE, HeaderValue::from_static("text/plain")); + } + resp + } + + fn create_404_response() -> http::Response { + Self::empty().into_response(StatusCode::NOT_FOUND, None) + } + + fn create_405_response( + method: &Method, + allowed_methods: &[Method], + ) -> http::Response { + let allow_header_value = HeaderValue::from_str( + allowed_methods + .iter() + .map(|m| m.as_str()) + .collect::>() + .join(", ") + .as_str(), + ) + .unwrap_or(HeaderValue::from_static("unknown")); + let mut response = Self::from_string(format!( + "The method {method} is not allowed for this endpoint" + )) + .into_response(StatusCode::METHOD_NOT_ALLOWED, None); + response.headers_mut().append(ALLOW, allow_header_value); + response + } +} + +pub trait RequestExt { + fn insert(&mut self, val: T); + fn get(&self) -> Option<&T>; + fn take(self) -> (Self, Option) + where + Self: Sized; +} + +impl RequestExt for http::Request<&str> { + fn insert(&mut self, val: T) { + self.extensions_mut().insert(val); + } + + fn get(&self) -> Option<&T> { + self.extensions().get::() + } + + fn take(mut self) -> (Self, Option) { + let exts = self.extensions_mut(); + let val = exts.remove::(); + (self, val) + } +} + +pub type BoxFutureResponse<'req> = BoxFuture<'req, TransportServerResult>>; +// pub type BoxFutureResponse<'req> = +// Pin>> + Send + 'req>>; + +// Handler function type (can only be called once) +pub type RequestHandlerFnOnce = + dyn for<'req> FnOnce(Request<&'req str>, Arc) -> BoxFutureResponse<'req> + Send; + +// RequestHandler cannot be Arc<...> anymore because FnOnce isn’t clonable +pub type RequestHandler = Box; + +// Middleware "next" closure type - can only be called once +pub type MiddlewareNext<'req> = + Box, Arc) -> BoxFutureResponse<'req> + Send>; diff --git a/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime.rs b/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime.rs index 2093dc3..70a18d2 100644 --- a/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime.rs +++ b/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime.rs @@ -2,9 +2,7 @@ pub mod mcp_client_runtime; pub mod mcp_client_runtime_core; use crate::error::{McpSdkError, SdkResult}; use crate::id_generator::FastIdGenerator; -use crate::mcp_traits::mcp_client::McpClient; -use crate::mcp_traits::mcp_handler::McpClientHandler; -use crate::mcp_traits::IdGenerator; +use crate::mcp_traits::{IdGenerator, McpClient, McpClientHandler}; use crate::utils::ensure_server_protocole_compatibility; use crate::{ mcp_traits::{RequestIdGen, RequestIdGenNumeric}, diff --git a/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime.rs b/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime.rs index 43a7079..06964ed 100644 --- a/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime.rs +++ b/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime.rs @@ -13,10 +13,7 @@ use async_trait::async_trait; use rust_mcp_transport::StreamableTransportOptions; use rust_mcp_transport::TransportDispatcher; -use crate::{ - error::SdkResult, mcp_client::ClientHandler, mcp_traits::mcp_handler::McpClientHandler, - McpClient, -}; +use crate::{error::SdkResult, mcp_client::ClientHandler, mcp_traits::McpClientHandler, McpClient}; use super::ClientRuntime; diff --git a/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime_core.rs b/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime_core.rs index 884de9d..21c0a4a 100644 --- a/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime_core.rs +++ b/crates/rust-mcp-sdk/src/mcp_runtimes/client_runtime/mcp_client_runtime_core.rs @@ -9,7 +9,7 @@ use crate::schema::{ use crate::{ error::SdkResult, mcp_handlers::mcp_client_handler_core::ClientHandlerCore, - mcp_traits::{mcp_client::McpClient, mcp_handler::McpClientHandler}, + mcp_traits::{McpClient, McpClientHandler}, }; use async_trait::async_trait; #[cfg(feature = "streamable-http")] diff --git a/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime.rs b/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime.rs index 5502cee..a429bae 100644 --- a/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime.rs +++ b/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime.rs @@ -1,9 +1,8 @@ pub mod mcp_server_runtime; pub mod mcp_server_runtime_core; +use crate::auth::AuthInfo; use crate::error::SdkResult; -use crate::mcp_traits::mcp_handler::McpServerHandler; -use crate::mcp_traits::mcp_server::McpServer; -use crate::mcp_traits::{RequestIdGen, RequestIdGenNumeric}; +use crate::mcp_traits::{McpServer, McpServerHandler, RequestIdGen, RequestIdGenNumeric}; use crate::schema::{ schema_utils::{ ClientMessage, ClientMessages, FromMessage, MessageFromServer, SdkError, ServerMessage, @@ -23,8 +22,7 @@ use std::panic; use std::sync::Arc; use std::time::Duration; use tokio::io::AsyncWriteExt; - -use tokio::sync::{mpsc, oneshot, watch}; +use tokio::sync::{mpsc, oneshot, watch, RwLock, RwLockReadGuard}; pub const DEFAULT_STREAM_ID: &str = "STANDALONE-STREAM"; const TASK_CHANNEL_CAPACITY: usize = 500; @@ -52,6 +50,7 @@ pub struct ServerRuntime { request_id_gen: Box, client_details_tx: watch::Sender>, client_details_rx: watch::Receiver>, + auth_info: tokio::sync::RwLock>, } #[async_trait] @@ -67,6 +66,30 @@ impl McpServer for ServerRuntime { }) } + async fn update_auth_info(&self, new_auth_info: Option) { + let should_update = { + let current = self.auth_info.read().await; + match (&*current, &new_auth_info) { + (None, Some(_)) => true, + (Some(old), Some(new)) => old.token_unique_id != new.token_unique_id, + (Some(_), None) => true, + (None, None) => false, + } + }; + + if should_update { + *self.auth_info.write().await = new_auth_info; + } + } + + async fn auth_info(&self) -> RwLockReadGuard<'_, Option> { + self.auth_info.read().await + } + async fn auth_info_cloned(&self) -> Option { + let guard = self.auth_info.read().await; + guard.clone() + } + async fn wait_for_initialization(&self) { loop { if self.client_details_rx.borrow().is_some() { @@ -548,7 +571,10 @@ impl ServerRuntime { server_details: Arc, handler: Arc, session_id: SessionId, + auth_info: Option, ) -> Arc { + use tokio::sync::RwLock; + let (client_details_tx, client_details_rx) = watch::channel::>(None); Arc::new(Self { @@ -559,6 +585,7 @@ impl ServerRuntime { client_details_tx, client_details_rx, request_id_gen: Box::new(RequestIdGenNumeric::new(None)), + auth_info: RwLock::new(auth_info), }) } @@ -586,6 +613,7 @@ impl ServerRuntime { client_details_tx, client_details_rx, request_id_gen: Box::new(RequestIdGenNumeric::new(None)), + auth_info: RwLock::new(None), }) } } diff --git a/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime.rs b/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime.rs index 62fd31f..c4eeb81 100644 --- a/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime.rs +++ b/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime.rs @@ -1,5 +1,7 @@ use std::sync::Arc; +#[cfg(feature = "hyper-server")] +use crate::auth::AuthInfo; use crate::schema::{ schema_utils::{ self, CallToolError, ClientMessage, ClientMessages, MessageFromServer, @@ -18,7 +20,7 @@ use rust_mcp_transport::SessionId; use crate::{ error::SdkResult, mcp_handlers::mcp_server_handler::ServerHandler, - mcp_traits::{mcp_handler::McpServerHandler, mcp_server::McpServer}, + mcp_traits::{McpServer, McpServerHandler}, }; /// Creates a new MCP server runtime with the specified configuration. @@ -62,8 +64,9 @@ pub(crate) fn create_server_instance( server_details: Arc, handler: Arc, session_id: SessionId, + auth_info: Option, ) -> Arc { - ServerRuntime::new_instance(server_details, handler, session_id) + ServerRuntime::new_instance(server_details, handler, session_id, auth_info) } pub(crate) struct ServerRuntimeInternalHandler { diff --git a/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime_core.rs b/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime_core.rs index 110b20b..c617cea 100644 --- a/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime_core.rs +++ b/crates/rust-mcp-sdk/src/mcp_runtimes/server_runtime/mcp_server_runtime_core.rs @@ -1,8 +1,7 @@ use super::ServerRuntime; use crate::error::SdkResult; use crate::mcp_handlers::mcp_server_handler_core::ServerHandlerCore; -use crate::mcp_traits::mcp_handler::McpServerHandler; -use crate::mcp_traits::mcp_server::McpServer; +use crate::mcp_traits::{McpServer, McpServerHandler}; use crate::schema::schema_utils::{ self, ClientMessage, MessageFromServer, NotificationFromClient, RequestFromClient, ResultFromServer, ServerMessage, diff --git a/crates/rust-mcp-sdk/src/mcp_traits.rs b/crates/rust-mcp-sdk/src/mcp_traits.rs index b66ba93..f265829 100644 --- a/crates/rust-mcp-sdk/src/mcp_traits.rs +++ b/crates/rust-mcp-sdk/src/mcp_traits.rs @@ -1,10 +1,15 @@ pub(super) mod id_generator; #[cfg(feature = "client")] -pub mod mcp_client; -pub mod mcp_handler; +mod mcp_client; +mod mcp_handler; #[cfg(feature = "server")] -pub mod mcp_server; +mod mcp_server; mod request_id_gen; pub use id_generator::*; +#[cfg(feature = "client")] +pub use mcp_client::*; +pub use mcp_handler::*; +#[cfg(feature = "server")] +pub use mcp_server::*; pub use request_id_gen::*; diff --git a/crates/rust-mcp-sdk/src/mcp_traits/mcp_server.rs b/crates/rust-mcp-sdk/src/mcp_traits/mcp_server.rs index da087d1..43e04f1 100644 --- a/crates/rust-mcp-sdk/src/mcp_traits/mcp_server.rs +++ b/crates/rust-mcp-sdk/src/mcp_traits/mcp_server.rs @@ -1,3 +1,6 @@ +use crate::auth::AuthInfo; +use crate::{error::SdkResult, utils::format_assertion_message}; + use crate::schema::{ schema_utils::{ ClientMessage, McpMessage, MessageFromServer, NotificationFromServer, RequestFromServer, @@ -14,10 +17,10 @@ use crate::schema::{ ResourceUpdatedNotification, ResourceUpdatedNotificationParams, RpcError, ServerCapabilities, SetLevelRequest, ToolListChangedNotification, ToolListChangedNotificationParams, }; -use crate::{error::SdkResult, utils::format_assertion_message}; use async_trait::async_trait; use rust_mcp_transport::SessionId; use std::{sync::Arc, time::Duration}; +use tokio::sync::RwLockReadGuard; //TODO: support options , such as enforceStrictCapabilities #[async_trait] @@ -27,6 +30,10 @@ pub trait McpServer: Sync + Send { fn server_info(&self) -> &InitializeResult; fn client_info(&self) -> Option; + async fn auth_info(&self) -> RwLockReadGuard<'_, Option>; + async fn auth_info_cloned(&self) -> Option; + async fn update_auth_info(&self, auth_info: Option); + async fn wait_for_initialization(&self); async fn send( diff --git a/crates/rust-mcp-sdk/src/utils.rs b/crates/rust-mcp-sdk/src/utils.rs index 2d80f1e..231f1ab 100644 --- a/crates/rust-mcp-sdk/src/utils.rs +++ b/crates/rust-mcp-sdk/src/utils.rs @@ -2,6 +2,9 @@ use crate::error::{McpSdkError, ProtocolErrorKind, SdkResult}; use crate::schema::schema_utils::{ClientMessages, SdkError}; use crate::schema::ProtocolVersion; use std::cmp::Ordering; +use std::time::{Duration, SystemTime, UNIX_EPOCH}; +#[cfg(feature = "auth")] +use url::Url; /// A guard type that automatically aborts a Tokio task when dropped. /// @@ -42,6 +45,11 @@ pub fn format_assertion_message(entity: &str, capability: &str, method_name: &st format!("{entity} does not support {capability} (required for {method_name})") } +// Function to convert Unix timestamp to SystemTime +pub fn unix_timestamp_to_systemtime(timestamp: u64) -> SystemTime { + UNIX_EPOCH + Duration::from_secs(timestamp) +} + /// Checks if the client and server protocol versions are compatible by ensuring they are equal. /// /// This function compares the provided client and server protocol versions. If they are equal, @@ -233,6 +241,30 @@ pub fn valid_initialize_method(json_str: &str) -> SdkResult<()> { Ok(()) } +#[cfg(feature = "auth")] +pub fn join_url(base: &Url, segment: &str) -> Result { + // Fast early check — Url must be absolute + if base.cannot_be_a_base() { + return Err(url::ParseError::RelativeUrlWithoutBase); + } + + // We have to clone — there is no way around this when taking &Url + let mut url = base.clone(); + + // This is the official, safe, and correct way + url.path_segments_mut() + .map_err(|_| url::ParseError::RelativeUrlWithoutBase)? + .pop_if_empty() // makes it act like a directory + .extend( + segment + .trim_start_matches('/') + .split('/') + .filter(|s| !s.is_empty()), + ); + + Ok(url) +} + #[cfg(test)] mod tests { use super::*; @@ -250,4 +282,36 @@ mod tests { ); assert_eq!(remove_query_and_hash("/"), "/"); } + + #[test] + fn test_join_url() { + let expect = "http://example.com/api/user/userinfo"; + let result = join_url( + &Url::parse("http://example.com/api").unwrap(), + "/user/userinfo", + ) + .unwrap(); + assert_eq!(result.to_string(), expect); + + let result = join_url( + &Url::parse("http://example.com/api").unwrap(), + "user/userinfo", + ) + .unwrap(); + assert_eq!(result.to_string(), expect); + + let result = join_url( + &Url::parse("http://example.com/api/").unwrap(), + "/user/userinfo", + ) + .unwrap(); + assert_eq!(result.to_string(), expect); + + let result = join_url( + &Url::parse("http://example.com/api/").unwrap(), + "user/userinfo", + ) + .unwrap(); + assert_eq!(result.to_string(), expect); + } } diff --git a/crates/rust-mcp-sdk/tests/common/common.rs b/crates/rust-mcp-sdk/tests/common/common.rs index d6b45f7..8e61704 100644 --- a/crates/rust-mcp-sdk/tests/common/common.rs +++ b/crates/rust-mcp-sdk/tests/common/common.rs @@ -8,6 +8,7 @@ use rust_mcp_macros::{mcp_tool, JsonSchema}; use rust_mcp_schema::ProtocolVersion; use rust_mcp_sdk::mcp_client::ClientHandler; +use rust_mcp_sdk::auth::{AuthInfo, AuthenticationError, OauthTokenVerifier}; use rust_mcp_sdk::schema::{ClientCapabilities, Implementation, InitializeRequestParams}; use std::collections::HashMap; use std::process; @@ -142,6 +143,31 @@ pub async fn send_get_request( client.get(url).headers(headers).send().await } +pub async fn send_option_request( + base_url: &str, + extra_headers: Option>, +) -> Result { + let client = Client::new(); + let url = Url::parse(base_url).expect("Invalid URL"); + + let mut headers = reqwest::header::HeaderMap::new(); + + if let Some(extra) = extra_headers { + for (key, value) in extra { + headers.insert( + reqwest::header::HeaderName::from_bytes(key.as_bytes()).unwrap(), + value.parse().unwrap(), + ); + } + } + + client + .request(reqwest::Method::OPTIONS, url) + .headers(headers) + .send() + .await +} + use futures::stream::Stream; // stream: &mut impl Stream>, @@ -260,11 +286,10 @@ impl Xorshift { // Generate the next random u64 using Xorshift fn next_u64(&mut self) -> u64 { let mut x = self.state; - x ^= x << 13; - x ^= x >> 7; - x ^= x << 17; - self.state = x; - x + self.state = x.wrapping_add(0x9E3779B97F4A7C15); + x = (x ^ (x >> 30)).wrapping_mul(0xBF58476D1CE4E5B9); + x = (x ^ (x >> 27)).wrapping_mul(0x94D049BB133111EB); + x ^ (x >> 31) } // Generate a random u16 within a range [min, max] @@ -345,6 +370,35 @@ pub mod sample_tools { } } + //******************// + // AuthInfo Tool // + //******************// + #[mcp_tool( + name = "display_auth_info", + description = "Displays auth_info if user is authenticated", + idempotent_hint = false, + destructive_hint = false, + open_world_hint = false, + read_only_hint = false + )] + #[derive(Debug, ::serde::Deserialize, ::serde::Serialize, JsonSchema)] + pub struct DisplayAuthInfo {} + use rust_mcp_sdk::auth::AuthInfo; + impl DisplayAuthInfo { + pub fn call_tool( + &self, + auth_info: Option, + ) -> Result { + let message = format!("{}", serde_json::to_string(&auth_info).unwrap()); + #[cfg(feature = "2025_06_18")] + return Ok(CallToolResult::text_content(vec![ + rust_mcp_sdk::schema::TextContent::from(message), + ])); + #[cfg(not(feature = "2025_06_18"))] + return Ok(CallToolResult::text_content(message, None)); + } + } + //******************// // SayGoodbyeTool // //******************// @@ -420,7 +474,6 @@ pub async fn wiremock_request(mock_server: &MockServer, index: usize) -> Request pub async fn debug_wiremock(mock_server: &MockServer) { let requests = mock_server.received_requests().await.unwrap(); let len = requests.len(); - println!(">>> {len} request(s) received <<<"); for (index, request) in requests.iter().enumerate() { println!("\n--- #{index} of {len} ---"); @@ -460,3 +513,32 @@ pub async fn wait_for_n_requests( .await .unwrap(); } + +pub struct TestTokenVerifier { + token_map: HashMap, +} + +impl TestTokenVerifier { + pub fn new(token_map: HashMap) -> Self { + Self { token_map } + } +} + +#[async_trait] +impl OauthTokenVerifier for TestTokenVerifier { + async fn verify_token(&self, access_token: String) -> Result { + let info = self.token_map.get(&access_token); + + let Some(info) = info else { + return Err(AuthenticationError::InactiveToken); + }; + + if info.expires_at.unwrap() < SystemTime::now() { + return Err(AuthenticationError::InvalidOrExpiredToken( + "expired".to_string(), + )); + } + + Ok(info.clone()) + } +} diff --git a/crates/rust-mcp-sdk/tests/common/mock_server.rs b/crates/rust-mcp-sdk/tests/common/mock_server.rs index f5b533a..59c9b16 100644 --- a/crates/rust-mcp-sdk/tests/common/mock_server.rs +++ b/crates/rust-mcp-sdk/tests/common/mock_server.rs @@ -330,7 +330,6 @@ impl MockServerHandle { let requests = self.get_history().await; let len = requests.len(); - println!("\n>>> {len} request(s) received <<<"); for (index, (request, response)) in requests.iter().enumerate() { println!( diff --git a/crates/rust-mcp-sdk/tests/common/test_client.rs b/crates/rust-mcp-sdk/tests/common/test_client.rs index 46a8525..912501a 100644 --- a/crates/rust-mcp-sdk/tests/common/test_client.rs +++ b/crates/rust-mcp-sdk/tests/common/test_client.rs @@ -131,9 +131,6 @@ pub mod test_client_common { } } -// Custom responder for SSE with 10 ping messages -struct SsePingResponder; - // Test handler pub struct TestClientHandler { message_history: Arc>>, @@ -151,7 +148,7 @@ impl ClientHandler for TestClientHandler { async fn handle_ping_request( &self, request: PingRequest, - runtime: &dyn McpClient, + _runtime: &dyn McpClient, ) -> std::result::Result { self.register_message(&request.into()).await; diff --git a/crates/rust-mcp-sdk/tests/common/test_server.rs b/crates/rust-mcp-sdk/tests/common/test_server.rs index d64244b..9c8e6ee 100644 --- a/crates/rust-mcp-sdk/tests/common/test_server.rs +++ b/crates/rust-mcp-sdk/tests/common/test_server.rs @@ -1,6 +1,6 @@ #[cfg(feature = "hyper-server")] pub mod test_server_common { - use crate::common::sample_tools::SayHelloTool; + use crate::common::sample_tools::{DisplayAuthInfo, SayHelloTool}; use async_trait::async_trait; use rust_mcp_schema::schema_utils::CallToolError; use rust_mcp_schema::{ @@ -95,20 +95,27 @@ pub mod test_server_common { runtime .assert_server_request_capabilities(request.method()) .map_err(CallToolError::new)?; - if request.params.name != "say_hello" { - Ok( - CallToolError::unknown_tool(format!("Unknown tool: {}", request.params.name)) - .into(), - ) - } else { - let tool = SayHelloTool { - name: request.params.arguments.unwrap()["name"] - .as_str() - .unwrap() - .to_string(), - }; - - Ok(tool.call_tool().unwrap()) + + match request.params.name.as_str() { + "say_hello" => { + let tool = SayHelloTool { + name: request.params.arguments.unwrap()["name"] + .as_str() + .unwrap() + .to_string(), + }; + + Ok(tool.call_tool().unwrap()) + } + "display_auth_info" => { + let tool = DisplayAuthInfo {}; + Ok(tool.call_tool(runtime.auth_info_cloned().await).unwrap()) + } + _ => Ok(CallToolError::unknown_tool(format!( + "Unknown tool: {}", + request.params.name + )) + .into()), } } } diff --git a/crates/rust-mcp-sdk/tests/test_streamable_http_server.rs b/crates/rust-mcp-sdk/tests/test_streamable_http_server.rs index 3592c97..43f162d 100644 --- a/crates/rust-mcp-sdk/tests/test_streamable_http_server.rs +++ b/crates/rust-mcp-sdk/tests/test_streamable_http_server.rs @@ -1,5 +1,12 @@ -use std::{collections::HashMap, error::Error, sync::Arc, time::Duration, vec}; - +use crate::common::{ + random_port, read_sse_event, read_sse_event_from_stream, send_delete_request, send_get_request, + send_option_request, send_post_request, + test_server_common::{ + create_start_server, initialize_request, LaunchedServer, TestIdGenerator, + }, + TestTokenVerifier, +}; +use http::header::{ACCEPT, ACCESS_CONTROL_ALLOW_ORIGIN, AUTHORIZATION, CONTENT_TYPE}; use hyper::StatusCode; use rust_mcp_schema::{ schema_utils::{ @@ -12,36 +19,89 @@ use rust_mcp_schema::{ LoggingMessageNotificationParams, RequestId, RootsListChangedNotification, ServerNotification, ServerRequest, ServerResult, }; -use rust_mcp_sdk::{event_store::InMemoryEventStore, mcp_server::HyperServerOptions}; +use rust_mcp_sdk::{ + auth::{AuthInfo, AuthMetadataBuilder, AuthProvider, RemoteAuthProvider}, + event_store::InMemoryEventStore, + mcp_server::HyperServerOptions, +}; use serde_json::{json, Map, Value}; - -use crate::common::{ - random_port, read_sse_event, read_sse_event_from_stream, send_delete_request, send_get_request, - send_post_request, - test_server_common::{ - create_start_server, initialize_request, LaunchedServer, TestIdGenerator, - }, +use std::{ + collections::HashMap, + error::Error, + sync::Arc, + time::{Duration, SystemTime}, + vec, }; +use url::Url; #[path = "common/common.rs"] pub mod common; const ONE_MILLISECOND: Option = Some(Duration::from_millis(1)); +pub const VALID_ACCESS_TOKEN: &str = "valid-access-token"; async fn initialize_server( enable_json_response: Option, + auth_token_map: Option>, ) -> Result<(LaunchedServer, String), Box> { let json_rpc_message: ClientJsonrpcRequest = ClientJsonrpcRequest::new(RequestId::Integer(0), initialize_request().into()); + let port = random_port(); + + let auth = auth_token_map.and_then(|token_map| { + let mut token_map: HashMap = token_map + .into_iter() + .map(|(k, v)| (k.to_string(), v)) + .collect(); + + token_map.insert( + VALID_ACCESS_TOKEN.to_string(), + AuthInfo { + token_unique_id: VALID_ACCESS_TOKEN.to_string(), + client_id: Some("valid-client-id".to_string()), + scopes: Some(vec!["mcp".to_string(), "mcp:tools".to_string()]), + expires_at: Some(SystemTime::now() + Duration::from_secs(90)), + audience: None, + extra: None, + user_id: None, + }, + ); + + let (auth_server_meta, protected_resource_met) = + AuthMetadataBuilder::new("http://127.0.0.1:3000/mcp") + .issuer("http://localhost:3030") + .authorization_servers(vec!["http://localhost:3030"]) + .authorization_endpoint("/authorize") + .token_endpoint("/token") + .scopes_supported(vec!["mcp:tools".to_string()]) + .introspection_endpoint("/introspect") + .resource_name("MCP Test Server".to_string()) + .build() + .unwrap(); + + let token_verifier = TestTokenVerifier::new(token_map); + + Some(RemoteAuthProvider::new( + auth_server_meta, + protected_resource_met, + Box::new(token_verifier), + None, + )) + }); + + let oauth_metadata_provider = auth.map(|v| -> Arc { Arc::new(v) }); + let server_options = HyperServerOptions { - port: random_port(), + port, session_id_generator: Some(Arc::new(TestIdGenerator::new(vec![ "AAA-BBB-CCC".to_string() ]))), enable_json_response, ping_interval: Duration::from_secs(1), event_store: Some(Arc::new(InMemoryEventStore::default())), + auth: oauth_metadata_provider, + ..Default::default() }; @@ -52,7 +112,14 @@ async fn initialize_server( &server.streamable_url, &serde_json::to_string(&json_rpc_message).unwrap(), None, - None, + Some(HashMap::from([ + ( + AUTHORIZATION.as_str(), + format!("Bearer {VALID_ACCESS_TOKEN}").as_str(), + ), + (CONTENT_TYPE.as_str(), "application/json"), + (ACCEPT.as_str(), "application/json, text/event-stream"), + ])), ) .await .expect("Request failed"); @@ -154,7 +221,7 @@ async fn should_reject_batch_initialize_request() { // should handle post requests via sse response correctly #[tokio::test] async fn should_handle_post_requests_via_sse_response_correctly() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let json_rpc_message: ClientJsonrpcRequest = ClientJsonrpcRequest::new(RequestId::Integer(1), ListToolsRequest::new(None).into()); @@ -196,7 +263,7 @@ async fn should_handle_post_requests_via_sse_response_correctly() { // should call a tool and return the result #[tokio::test] async fn should_call_a_tool_and_return_the_result() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let mut map = Map::new(); map.insert("name".to_string(), Value::String("Ali".to_string())); @@ -244,7 +311,7 @@ async fn should_call_a_tool_and_return_the_result() { // should reject requests without a valid session ID #[tokio::test] async fn should_reject_requests_without_a_valid_session_id() { - let (server, _session_id) = initialize_server(None).await.unwrap(); + let (server, _session_id) = initialize_server(None, None).await.unwrap(); let json_rpc_message: ClientJsonrpcRequest = ClientJsonrpcRequest::new(RequestId::Integer(1), ListToolsRequest::new(None).into()); @@ -269,7 +336,7 @@ async fn should_reject_requests_without_a_valid_session_id() { // should reject invalid session ID #[tokio::test] async fn should_reject_invalid_session_id() { - let (server, _session_id) = initialize_server(None).await.unwrap(); + let (server, _session_id) = initialize_server(None, None).await.unwrap(); let json_rpc_message: ClientJsonrpcRequest = ClientJsonrpcRequest::new(RequestId::Integer(1), ListToolsRequest::new(None).into()); @@ -315,7 +382,7 @@ async fn get_standalone_stream( // should establish standalone SSE stream and receive server-initiated messages #[tokio::test] async fn should_establish_standalone_stream_and_receive_server_messages() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let response = get_standalone_stream(&server.streamable_url, &session_id, None).await; assert_eq!(response.status(), StatusCode::OK); @@ -377,7 +444,7 @@ async fn should_establish_standalone_stream_and_receive_server_messages() { // should establish standalone SSE stream and receive server-initiated requests #[tokio::test] async fn should_establish_standalone_stream_and_receive_server_requests() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let response = get_standalone_stream(&server.streamable_url, &session_id, None).await; assert_eq!(response.status(), StatusCode::OK); @@ -462,7 +529,7 @@ async fn should_establish_standalone_stream_and_receive_server_requests() { // should not close GET SSE stream after sending multiple server notifications #[tokio::test] async fn should_not_close_get_sse_stream() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let response = get_standalone_stream(&server.streamable_url, &session_id, None).await; assert_eq!(response.status(), StatusCode::OK); @@ -533,7 +600,7 @@ async fn should_not_close_get_sse_stream() { //should reject second SSE stream for the same session #[tokio::test] async fn should_reject_second_sse_stream_for_the_same_session() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let response = get_standalone_stream(&server.streamable_url, &session_id, None).await; assert_eq!(response.status(), StatusCode::OK); @@ -550,7 +617,7 @@ async fn should_reject_second_sse_stream_for_the_same_session() { // should reject GET requests without Accept: text/event-stream header #[tokio::test] async fn should_reject_get_requests() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let mut headers = HashMap::new(); headers.insert("Accept", "application/json"); @@ -573,7 +640,7 @@ async fn should_reject_get_requests() { // should reject POST requests without proper Accept header #[tokio::test] async fn reject_post_requests_without_accept_header() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let json_rpc_message: ClientJsonrpcRequest = ClientJsonrpcRequest::new(RequestId::Integer(1), ListToolsRequest::new(None).into()); @@ -607,7 +674,7 @@ async fn reject_post_requests_without_accept_header() { //should reject unsupported Content-Type #[tokio::test] async fn should_reject_unsupported_content_type() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let json_rpc_message: ClientJsonrpcRequest = ClientJsonrpcRequest::new(RequestId::Integer(1), ListToolsRequest::new(None).into()); @@ -642,7 +709,7 @@ async fn should_reject_unsupported_content_type() { // should handle JSON-RPC batch notification messages with 202 response #[tokio::test] async fn should_handle_batch_notification_messages_with_202_response() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let batch_notification = ClientMessages::Batch(vec![ ClientMessage::from_message(RootsListChangedNotification::new(None), None).unwrap(), @@ -663,7 +730,7 @@ async fn should_handle_batch_notification_messages_with_202_response() { // should properly handle invalid JSON data #[tokio::test] async fn should_properly_handle_invalid_json_data() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let response = send_post_request( &server.streamable_url, @@ -684,7 +751,7 @@ async fn should_properly_handle_invalid_json_data() { // should send response messages to the connection that sent the request #[tokio::test] async fn should_send_response_messages_to_the_connection_that_sent_the_request() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let json_rpc_message_1: ClientJsonrpcRequest = ClientJsonrpcRequest::new(RequestId::Integer(1), ListToolsRequest::new(None).into()); @@ -764,7 +831,7 @@ async fn should_send_response_messages_to_the_connection_that_sent_the_request() // should properly handle DELETE requests and close session #[tokio::test] async fn should_properly_handle_delete_requests_and_close_session() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let mut headers = HashMap::new(); headers.insert("Content-Type", "text/plain"); @@ -785,7 +852,7 @@ async fn should_properly_handle_delete_requests_and_close_session() { // should reject DELETE requests with invalid session ID #[tokio::test] async fn should_reject_delete_requests_with_invalid_session_id() { - let (server, _session_id) = initialize_server(None).await.unwrap(); + let (server, _session_id) = initialize_server(None, None).await.unwrap(); let mut headers = HashMap::new(); headers.insert("Content-Type", "text/plain"); @@ -819,7 +886,7 @@ async fn should_reject_delete_requests_with_invalid_session_id() { // should accept requests without protocol version header #[tokio::test] async fn should_accept_requests_without_protocol_version_header() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let mut headers = HashMap::new(); headers.insert("Content-Type", "application/json"); @@ -846,7 +913,7 @@ async fn should_accept_requests_without_protocol_version_header() { // should reject requests with unsupported protocol version #[tokio::test] async fn should_reject_requests_with_unsupported_protocol_version() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let mut headers = HashMap::new(); headers.insert("Content-Type", "application/json"); @@ -878,7 +945,7 @@ async fn should_reject_requests_with_unsupported_protocol_version() { // should handle protocol version validation for get requests #[tokio::test] async fn should_handle_protocol_version_validation_for_get_requests() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let mut headers = HashMap::new(); headers.insert("Content-Type", "application/json"); @@ -903,7 +970,7 @@ async fn should_handle_protocol_version_validation_for_get_requests() { // should handle protocol version validation for DELETE requests #[tokio::test] async fn should_handle_protocol_version_validation_for_delete_requests() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let mut headers = HashMap::new(); headers.insert("Content-Type", "application/json"); @@ -931,7 +998,7 @@ async fn should_handle_protocol_version_validation_for_delete_requests() { // should return JSON response for a single request #[tokio::test] async fn should_return_json_response_for_a_single_request() { - let (server, session_id) = initialize_server(Some(true)).await.unwrap(); + let (server, session_id) = initialize_server(Some(true), None).await.unwrap(); let json_rpc_message: ClientJsonrpcRequest = ClientJsonrpcRequest::new(RequestId::Integer(1), ListToolsRequest::new(None).into()); @@ -975,7 +1042,7 @@ async fn should_return_json_response_for_a_single_request() { // should return JSON response for batch requests #[tokio::test] async fn should_return_json_response_for_a_batch_request() { - let (server, session_id) = initialize_server(Some(true)).await.unwrap(); + let (server, session_id) = initialize_server(Some(true), None).await.unwrap(); let json_rpc_message_1: ClientJsonrpcRequest = ClientJsonrpcRequest::new( RequestId::String("req_1".to_string()), @@ -1053,7 +1120,7 @@ async fn should_return_json_response_for_a_batch_request() { // should handle batch request messages with SSE stream for responses #[tokio::test] async fn should_handle_batch_request_messages_with_sse_stream_for_responses() { - let (server, session_id) = initialize_server(None).await.unwrap(); + let (server, session_id) = initialize_server(None, None).await.unwrap(); let json_rpc_message_1: ClientJsonrpcRequest = ClientJsonrpcRequest::new( RequestId::String("req_1".to_string()), @@ -1131,18 +1198,18 @@ async fn should_accept_requests_with_allowed_host_headers() { ClientJsonrpcRequest::new(RequestId::Integer(0), initialize_request().into()); let server_options = HyperServerOptions { - port: 8090, + port: 9090, session_id_generator: Some(Arc::new(TestIdGenerator::new(vec![ "AAA-BBB-CCC".to_string() ]))), - allowed_hosts: Some(vec!["127.0.0.1:8090".to_string()]), + allowed_hosts: Some(vec!["127.0.0.1:9090".to_string()]), dns_rebinding_protection: true, ..Default::default() }; let server = create_start_server(server_options).await; - tokio::time::sleep(Duration::from_millis(250)).await; + tokio::time::sleep(Duration::from_millis(350)).await; let response = send_post_request( &server.streamable_url, &serde_json::to_string(&json_rpc_message).unwrap(), @@ -1372,7 +1439,7 @@ async fn should_skip_all_validations_when_false() { #[tokio::test] async fn should_store_and_include_event_ids_in_server_sse_messages() { common::init_tracing(); - let (server, session_id) = initialize_server(Some(true)).await.unwrap(); + let (server, session_id) = initialize_server(Some(true), None).await.unwrap(); let response = get_standalone_stream(&server.streamable_url, &session_id, None).await; assert_eq!(response.status(), StatusCode::OK); @@ -1447,7 +1514,7 @@ async fn should_store_and_include_event_ids_in_server_sse_messages() { #[tokio::test] async fn should_store_and_replay_mcp_server_tool_notifications() { common::init_tracing(); - let (server, session_id) = initialize_server(Some(true)).await.unwrap(); + let (server, session_id) = initialize_server(Some(true), None).await.unwrap(); let response = get_standalone_stream(&server.streamable_url, &session_id, None).await; assert_eq!(response.status(), StatusCode::OK); @@ -1517,6 +1584,130 @@ async fn should_store_and_replay_mcp_server_tool_notifications() { assert_eq!(notification1.params.data.as_str().unwrap(), "notification2"); } +#[tokio::test] +async fn metadata_requires_get_method() { + common::init_tracing(); + let auth_map = HashMap::new(); + let (server, _session_id) = initialize_server(Some(true), Some(auth_map)).await.unwrap(); + + let mut headers = HashMap::new(); + headers.insert("Content-Type", "application/json"); + headers.insert("Accept", "application/json, text/event-stream"); + + let url = Url::parse(&server.streamable_url).unwrap(); + let url = url.join("/.well-known/oauth-authorization-server").unwrap(); + let response = send_post_request(&url.to_string(), "", None, Some(headers)) + .await + .unwrap(); + assert_eq!(response.status(), StatusCode::METHOD_NOT_ALLOWED); +} + +#[tokio::test] +async fn should_return_the_metadata_object_with_cors() { + common::init_tracing(); + let auth_map = HashMap::new(); + let (server, _session_id) = initialize_server(Some(true), Some(auth_map)).await.unwrap(); + + let mut headers = HashMap::new(); + headers.insert("Content-Type", "application/json"); + headers.insert("Accept", "application/json, text/event-stream"); + headers.insert("Origin", "https://example.com"); + + let url = Url::parse(&server.streamable_url).unwrap(); + let url = url.join("/.well-known/oauth-authorization-server").unwrap(); + let response = send_get_request(&url.to_string(), Some(headers)) + .await + .unwrap(); + + let allow_origin = response.headers().get(ACCESS_CONTROL_ALLOW_ORIGIN).unwrap(); + assert_eq!(allow_origin, "*"); + + let metadata = response.json::().await.unwrap(); + let issuer = metadata.get("issuer").unwrap().as_str().unwrap(); + assert_eq!(issuer, "http://localhost:3030/"); +} + +#[tokio::test] +// supports OPTIONS preflight requests +async fn should_support_options_preflight_requests() { + common::init_tracing(); + let auth_map = HashMap::new(); + let (server, _session_id) = initialize_server(Some(true), Some(auth_map)).await.unwrap(); + + let mut headers = HashMap::new(); + headers.insert("Content-Type", "application/json"); + headers.insert("Access-Control-Request-Method", "GET"); + headers.insert("Origin", "https://example.com"); + + let url = Url::parse(&server.streamable_url).unwrap(); + let url = url.join("/.well-known/oauth-authorization-server").unwrap(); + let response = send_option_request(&url.to_string(), Some(headers)) + .await + .unwrap(); + + assert_eq!(response.status(), StatusCode::NO_CONTENT); + let allow_origin = response.headers().get(ACCESS_CONTROL_ALLOW_ORIGIN).unwrap(); + assert_eq!(allow_origin, "*"); +} + +#[tokio::test] +// should call a tool with authInfo when authenticated +async fn should_call_a_tool_with_auth_info_when_authenticated() { + common::init_tracing(); + let auth_map = HashMap::new(); + let (server, session_id) = initialize_server(Some(false), Some(auth_map)) + .await + .unwrap(); + + let json_rpc_message: ClientJsonrpcRequest = ClientJsonrpcRequest::new( + RequestId::Integer(1), + CallToolRequest::new(CallToolRequestParams { + arguments: None, + name: "display_auth_info".to_string(), + }) + .into(), + ); + + let response = send_post_request( + &server.streamable_url, + &serde_json::to_string(&json_rpc_message).unwrap(), + Some(&session_id), + Some(HashMap::from([ + ( + AUTHORIZATION.as_str(), + format!("Bearer {VALID_ACCESS_TOKEN}").as_str(), + ), + (CONTENT_TYPE.as_str(), "application/json"), + (ACCEPT.as_str(), "application/json, text/event-stream"), + ])), + ) + .await + .expect("Request failed"); + + assert_eq!(response.status(), StatusCode::OK); + + let events = read_sse_event(response, 1).await.unwrap(); + let message: ServerJsonrpcResponse = serde_json::from_str(&events[0].2).unwrap(); + + assert!(matches!(message.id, RequestId::Integer(1))); + + let ResultFromServer::ServerResult(ServerResult::CallToolResult(result)) = message.result + else { + panic!("invalid CallToolResult") + }; + + let response_json: Value = + serde_json::from_str(&result.content[0].as_text_content().unwrap().text).unwrap(); + + assert_eq!(response_json["client_id"], "valid-client-id"); + assert_eq!(response_json["token_unique_id"], "valid-access-token"); + + assert!(response_json["scopes"] + .as_array() + .unwrap() + .iter() + .all(|s| ["mcp", "mcp:tools"].contains(&s.as_str().unwrap())),); +} // should return 400 error for invalid JSON-RPC messages // should keep stream open after sending server notifications // NA: should reject second initialization request @@ -1525,8 +1716,7 @@ async fn should_store_and_replay_mcp_server_tool_notifications() { // should reject requests to uninitialized server // should accept requests with matching protocol version // should accept when protocol version differs from negotiated version -// should call a tool with authInfo -// should calls tool without authInfo when it is optional + // should accept pre-parsed request body // should handle pre-parsed batch messages // should prefer pre-parsed body over request body diff --git a/crates/rust-mcp-transport/src/constants.rs b/crates/rust-mcp-transport/src/constants.rs index 6ae0342..05ebb5d 100644 --- a/crates/rust-mcp-transport/src/constants.rs +++ b/crates/rust-mcp-transport/src/constants.rs @@ -1,3 +1,3 @@ -pub const MCP_SESSION_ID_HEADER: &str = "Mcp-Session-Id"; -pub const MCP_PROTOCOL_VERSION_HEADER: &str = "Mcp-Protocol-Version"; +pub const MCP_SESSION_ID_HEADER: &str = "mcp-session-id"; +pub const MCP_PROTOCOL_VERSION_HEADER: &str = "mcp-protocol-version"; pub const MCP_LAST_EVENT_ID_HEADER: &str = "last-event-id"; diff --git a/crates/rust-mcp-transport/src/utils/sse_parser.rs b/crates/rust-mcp-transport/src/utils/sse_parser.rs index 3074e9f..8ed5a07 100644 --- a/crates/rust-mcp-transport/src/utils/sse_parser.rs +++ b/crates/rust-mcp-transport/src/utils/sse_parser.rs @@ -46,7 +46,7 @@ impl SseParser { pub fn process_new_chunk(&mut self, bytes: Bytes) -> Vec { self.buffer.extend_from_slice(&bytes); - // Collect complete lines (ending in \n)—keep ALL lines, including empty ones for \n\n detection + // Collect complete lines (ending in \n)-keep ALL lines, including empty ones for \n\n detection let mut lines = Vec::new(); while let Some(pos) = self.buffer.iter().position(|&b| b == b'\n') { let line = self.buffer.split_to(pos + 1).freeze(); diff --git a/examples/auth/server-oauth-remote/Cargo.toml b/examples/auth/server-oauth-remote/Cargo.toml new file mode 100644 index 0000000..f9d7f2b --- /dev/null +++ b/examples/auth/server-oauth-remote/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "server-oauth-remote" +version = "0.1.34" +edition = "2021" +publish = false +license = "MIT" + + +[dependencies] +rust-mcp-sdk = { workspace = true, default-features = false, features = [ + "server", + "macros", + "streamable-http", + "sse", + "auth", + "hyper-server", + "2025_06_18", +] } +rust-mcp-extra={ workspace = true, features=["auth"]} + +tokio = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +async-trait = { workspace = true } +futures = { workspace = true } +tracing = { workspace = true } +tracing-subscriber = { workspace = true, features = ["env-filter"] } + + +[lints] +workspace = true diff --git a/examples/auth/server-oauth-remote/README.md b/examples/auth/server-oauth-remote/README.md new file mode 100644 index 0000000..e8cf59b --- /dev/null +++ b/examples/auth/server-oauth-remote/README.md @@ -0,0 +1,63 @@ +# MCP Server - Remote Oauth (Keycloack) + + +A minimal, MCP server example that demonstrates **OAuth 2.0 / OpenID Connect authentication** using the `RemoteAuthProvider` from [rust-mcp-sdk](https://github.com/rust-mcp-stack/rust-mcp-sdk). + +It features: +- Full OAuth 2.0 protection via bearer tokens +- Remote authentication metadata discovery +- Token verification using both JWKs and token introspection +- A single tool: `show_auth_info` - returns the authenticated user's claims and scopes in pretty-printed JSON + +## Overview + +**RemoteAuthProvider** can be used with any OpenID Connect provider that supports Dynamic Client Registration (DCR), but in this example, it is configured to point to a local [Keycloak](https://www.keycloak.org) instance. + +👉 For more information on how to start and configure your local Keycloak server, please refer to the **keycloak-setup** section of the following blog post: https://modelcontextprotocol.io/docs/tutorials/security/authorization#keycloak-setup + + +## Running the Example + + +### Step 1: +Clone the repo: +```bash +git clone git@github.com:rust-mcp-stack/rust-mcp-sdk.git +cd rust-mcp-sdk +``` + +### Step 2: +Make sure you have a Keycloak server running and configured as described in this [blog post](https://modelcontextprotocol.io/docs/tutorials/security/authorization#keycloak-setup) + +> 💡 _You can update the configuration in `create_oauth_provider()` function to connect to any other OAuth provider with DCR support or in case your keycloak configuration is different._ + +### Step 3: +Set the `OAUTH_CLIENT_ID` and `OAUTH_CLIENT_SECRET` environment variables with the values from your keycloak server dashboard: + +``` +export OAUTH_CLIENT_ID=test-server OAUTH_CLIENT_SECRET=XYZ +``` + + +### Step 3: +start the project + +```bash +cargo run -p server-oauth-remote +``` + +You will see: + +```sh +• Streamable HTTP Server is available at http://[::1]:3000/ +``` + +You can test it with [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector), or alternatively, use it with any MCP client you prefer. + +```bash +npx -y @modelcontextprotocol/inspector@latest +``` + +Here you can see it in action : + +![mcp-server-remote-oauth](../../assets/examples/mcp-remote-oauth.gif) diff --git a/examples/auth/server-oauth-remote/src/handler.rs b/examples/auth/server-oauth-remote/src/handler.rs new file mode 100644 index 0000000..d137080 --- /dev/null +++ b/examples/auth/server-oauth-remote/src/handler.rs @@ -0,0 +1,71 @@ +use async_trait::async_trait; +use rust_mcp_sdk::auth::AuthInfo; +use rust_mcp_sdk::macros::{mcp_tool, JsonSchema}; +use rust_mcp_sdk::schema::TextContent; +use rust_mcp_sdk::schema::{ + schema_utils::CallToolError, CallToolRequest, CallToolResult, ListToolsRequest, + ListToolsResult, RpcError, +}; +use rust_mcp_sdk::{mcp_server::ServerHandler, McpServer}; +use std::sync::Arc; +use std::vec; + +//*******************************// +// Show Authentication Info // +//*******************************// +#[mcp_tool( + name = "show_auth_info", + description = "Shows current user authentication info in json format" +)] +#[derive(Debug, ::serde::Deserialize, ::serde::Serialize, JsonSchema, Default)] +pub struct ShowAuthInfo {} +impl ShowAuthInfo { + pub fn call_tool(&self, auth_info: Option) -> Result { + let auth_info_json = serde_json::to_string_pretty(&auth_info).map_err(|err| { + CallToolError::from_message(format!("Undable to display auth info as string :{err}")) + })?; + Ok(CallToolResult::text_content(vec![TextContent::from( + auth_info_json, + )])) + } +} + +// Custom Handler to handle MCP Messages +pub struct McpServerHandler; + +// To check out a list of all the methods in the trait that you can override, take a look at +// https://github.com/rust-mcp-stack/rust-mcp-sdk/blob/main/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler.rs + +#[async_trait] +#[allow(unused)] +impl ServerHandler for McpServerHandler { + // Handle ListToolsRequest, return list of available tools as ListToolsResult + async fn handle_list_tools_request( + &self, + request: ListToolsRequest, + runtime: Arc, + ) -> std::result::Result { + Ok(ListToolsResult { + meta: None, + next_cursor: None, + tools: vec![ShowAuthInfo::tool()], + }) + } + + /// Handles incoming CallToolRequest and processes it using the appropriate tool. + async fn handle_call_tool_request( + &self, + request: CallToolRequest, + runtime: Arc, + ) -> std::result::Result { + if request.params.name.eq(&ShowAuthInfo::tool_name()) { + let tool = ShowAuthInfo::default(); + tool.call_tool(runtime.auth_info_cloned().await) + } else { + Err(CallToolError::from_message(format!( + "Tool \"{}\" does not exists or inactive!", + request.params.name, + ))) + } + } +} diff --git a/examples/auth/server-oauth-remote/src/main.rs b/examples/auth/server-oauth-remote/src/main.rs new file mode 100644 index 0000000..951f6ad --- /dev/null +++ b/examples/auth/server-oauth-remote/src/main.rs @@ -0,0 +1,132 @@ +mod handler; + +use crate::handler::McpServerHandler; +use rust_mcp_extra::token_verifier::{ + GenericOauthTokenVerifier, TokenVerifierOptions, VerificationStrategies, +}; +use rust_mcp_sdk::auth::{AuthMetadataBuilder, RemoteAuthProvider}; +use rust_mcp_sdk::error::SdkResult; +use rust_mcp_sdk::event_store::InMemoryEventStore; +use rust_mcp_sdk::mcp_server::{hyper_server, HyperServerOptions}; +use rust_mcp_sdk::schema::{ + Implementation, InitializeResult, ServerCapabilities, ServerCapabilitiesTools, + LATEST_PROTOCOL_VERSION, +}; +use std::env; +use std::sync::Arc; +use std::time::Duration; +use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; + +// this function creates and setup a RemoteAuthProvider , pointing to a local KeyCloak server +// please refer to the keycloak-setup section of the following blog post for +// detailed instrctions on how to setup a KeyCloak server for this : +// https://modelcontextprotocol.io/docs/tutorials/security/authorization#keycloak-setup +pub async fn create_oauth_provider() -> SdkResult { + // build metadata from a oauth discovery url : .well-known/openid-configuration + let (auth_server_meta, protected_resource_meta) = AuthMetadataBuilder::from_discovery_url( + "http://localhost:8080/realms/master/.well-known/openid-configuration", + "http://localhost:3000", //mcp server url + vec!["mcp:tools", "phone"], + ) + .await? + .resource_name("MCP Server with Remote Oauth") + .build()?; + + // Alternatively, build metadata manually: + // let (auth_server_meta, protected_resource_meta) = + // AuthMetadataBuilder::new("http://localhost:3000") + // .issuer("http://localhost:8080/realms/master") + // .authorization_endpoint("/protocol/openid-connect/auth") + // .token_endpoint("/protocol/openid-connect/token") + // .jwks_uri("/protocol/openid-connect/certs") + // .introspection_endpoint("/protocol/openid-connect/token/introspect") + // .authorization_servers(vec!["http://localhost:8080/realms/master"]) + // .scopes_supported(vec!["mcp:tools", "phone"]) + // .resource_name("MCP Server with Remote Oauth") + // .build()?; + + // create a token verifier with Jwks and Introspection strategies + // GenericOauthTokenVerifier is used from rust-mcp-extra crate + // you can implement yours by implementing the OauthTokenVerifier trait + let token_verifier = GenericOauthTokenVerifier::new(TokenVerifierOptions { + validate_audience: None, + validate_issuer: Some(auth_server_meta.issuer.to_string()), + strategies: vec![ + VerificationStrategies::JWKs { + jwks_uri: auth_server_meta.jwks_uri.as_ref().unwrap().to_string(), + }, + VerificationStrategies::Introspection { + introspection_uri: auth_server_meta + .introspection_endpoint + .as_ref() + .unwrap() + .to_string(), + client_id: env::var("OAUTH_CLIENT_ID") + .expect("Please set the 'OAUTH_CLIENT_ID' environment variable!"), + client_secret: env::var("OAUTH_CLIENT_SECRET") + .expect("Please set the 'OAUTH_CLIENT_SECRET' environment variable!"), + use_basic_auth: true, + extra_params: None, + }, + ], + cache_capacity: Some(15), + }) + .unwrap(); + + Ok(RemoteAuthProvider::new( + auth_server_meta, + protected_resource_meta, + Box::new(token_verifier), + Some(vec!["mcp:tools".to_string()]), + )) +} + +#[tokio::main] +async fn main() -> SdkResult<()> { + // initialize tracing + tracing_subscriber::registry() + .with( + tracing_subscriber::EnvFilter::try_from_default_env().unwrap_or_else(|_| "info".into()), + ) + .with(tracing_subscriber::fmt::layer()) + .init(); + + let server_details = InitializeResult { + // server name and version + server_info: Implementation { + name: "Remote Oauth Test MCP Server".to_string(), + version: "0.1.0".to_string(), + title: Some("Remote Oauth Test MCP Server".to_string()), + }, + capabilities: ServerCapabilities { + // indicates that server support mcp tools + tools: Some(ServerCapabilitiesTools { list_changed: None }), + ..Default::default() // Using default values for other fields + }, + meta: None, + instructions: Some("server instructions...".to_string()), + protocol_version: LATEST_PROTOCOL_VERSION.to_string(), + }; + + let handler = McpServerHandler {}; + + let oauth_metadata_provider = create_oauth_provider().await?; + + let server = hyper_server::create_server( + server_details, + handler, + HyperServerOptions { + host: "localhost".to_string(), + port: 3000, + custom_streamable_http_endpoint: Some("/".to_string()), + ping_interval: Duration::from_secs(5), + event_store: Some(Arc::new(InMemoryEventStore::default())), // enable resumability + auth: Some(Arc::new(oauth_metadata_provider)), // enable authentication + ..Default::default() + }, + ); + + server.start().await?; + + Ok(()) +} diff --git a/examples/hello-world-mcp-server-stdio-core/Cargo.toml b/examples/hello-world-mcp-server-stdio-core/Cargo.toml index 915896c..e8a6d63 100644 --- a/examples/hello-world-mcp-server-stdio-core/Cargo.toml +++ b/examples/hello-world-mcp-server-stdio-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hello-world-mcp-server-stdio-core" -version = "0.1.22" +version = "0.1.23" edition = "2021" publish = false license = "MIT" diff --git a/examples/hello-world-mcp-server-stdio/Cargo.toml b/examples/hello-world-mcp-server-stdio/Cargo.toml index 7880158..57d43db 100644 --- a/examples/hello-world-mcp-server-stdio/Cargo.toml +++ b/examples/hello-world-mcp-server-stdio/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hello-world-mcp-server-stdio" -version = "0.1.31" +version = "0.1.32" edition = "2021" publish = false license = "MIT" diff --git a/examples/hello-world-server-streamable-http-core/Cargo.toml b/examples/hello-world-server-streamable-http-core/Cargo.toml index 01580cc..cac3890 100644 --- a/examples/hello-world-server-streamable-http-core/Cargo.toml +++ b/examples/hello-world-server-streamable-http-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hello-world-server-streamable-http-core" -version = "0.1.22" +version = "0.1.23" edition = "2021" publish = false license = "MIT" diff --git a/examples/hello-world-server-streamable-http/Cargo.toml b/examples/hello-world-server-streamable-http/Cargo.toml index 3cb8887..4da0543 100644 --- a/examples/hello-world-server-streamable-http/Cargo.toml +++ b/examples/hello-world-server-streamable-http/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hello-world-server-streamable-http" -version = "0.1.34" +version = "0.1.35" edition = "2021" publish = false license = "MIT" diff --git a/examples/simple-mcp-client-sse-core/Cargo.toml b/examples/simple-mcp-client-sse-core/Cargo.toml index 0defa1d..34c28cb 100644 --- a/examples/simple-mcp-client-sse-core/Cargo.toml +++ b/examples/simple-mcp-client-sse-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "simple-mcp-client-sse-core" -version = "0.1.22" +version = "0.1.23" edition = "2021" publish = false license = "MIT" diff --git a/examples/simple-mcp-client-sse/Cargo.toml b/examples/simple-mcp-client-sse/Cargo.toml index 0fb2308..0f95088 100644 --- a/examples/simple-mcp-client-sse/Cargo.toml +++ b/examples/simple-mcp-client-sse/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "simple-mcp-client-sse" -version = "0.1.25" +version = "0.1.26" edition = "2021" publish = false license = "MIT" diff --git a/examples/simple-mcp-client-stdio-core/Cargo.toml b/examples/simple-mcp-client-stdio-core/Cargo.toml index 29223ec..8140b5e 100644 --- a/examples/simple-mcp-client-stdio-core/Cargo.toml +++ b/examples/simple-mcp-client-stdio-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "simple-mcp-client-stdio-core" -version = "0.1.31" +version = "0.1.32" edition = "2021" publish = false license = "MIT" diff --git a/examples/simple-mcp-client-stdio/Cargo.toml b/examples/simple-mcp-client-stdio/Cargo.toml index a36dcec..9e4989b 100644 --- a/examples/simple-mcp-client-stdio/Cargo.toml +++ b/examples/simple-mcp-client-stdio/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "simple-mcp-client-stdio" -version = "0.1.31" +version = "0.1.32" edition = "2021" publish = false license = "MIT" diff --git a/examples/simple-mcp-client-streamable-http-core/Cargo.toml b/examples/simple-mcp-client-streamable-http-core/Cargo.toml index c446bb6..aed016c 100644 --- a/examples/simple-mcp-client-streamable-http-core/Cargo.toml +++ b/examples/simple-mcp-client-streamable-http-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "simple-mcp-client-streamable-http-core" -version = "0.1.3" +version = "0.1.4" edition = "2021" publish = false license = "MIT" diff --git a/examples/simple-mcp-client-streamable-http/Cargo.toml b/examples/simple-mcp-client-streamable-http/Cargo.toml index d4200c8..098cb42 100644 --- a/examples/simple-mcp-client-streamable-http/Cargo.toml +++ b/examples/simple-mcp-client-streamable-http/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "simple-mcp-client-streamable-http" -version = "0.1.3" +version = "0.1.4" edition = "2021" publish = false license = "MIT" From c4f035ddfc2d034ce484a78e4894e3efc47491de Mon Sep 17 00:00:00 2001 From: Ali Hashemi Date: Sun, 23 Nov 2025 09:55:36 -0400 Subject: [PATCH 2/7] chore: update readme --- README.md | 5 +- crates/rust-mcp-sdk/README.md | 59 +++++++++++++------ .../rust-mcp-sdk/src/hyper_servers/server.rs | 2 + crates/rust-mcp-sdk/src/utils.rs | 4 +- 4 files changed, 49 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index dd1f2b6..d92d964 100644 --- a/README.md +++ b/README.md @@ -408,7 +408,7 @@ MCP server can verify tokens issued by other systems, integrate with external id ### OAuthProxy OAuthProxy enables authentication with OAuth providers that don’t support Dynamic Client Registration (DCR).It accepts any client registration request, handles the DCR on your server side and then uses your pre-registered app credentials upstream.The proxy also forwards callbacks, allowing dynamic redirect URIs to work with providers that require fixed ones. -> ⚠️ OAuthProxy support is still in development—please use RemoteAuthProvider for now. +> ⚠️ OAuthProxy support is still in development, please use RemoteAuthProvider for now. ## Macros @@ -608,6 +608,9 @@ pub struct HyperServerOptions { /// Optional custom path for the MCP messages endpoint for sse (default: `/messages`) /// Applicable only if sse_support is true pub custom_messages_endpoint: Option, + + /// Optional authentication provider for protecting MCP server. + pub auth: Option>, } ``` diff --git a/crates/rust-mcp-sdk/README.md b/crates/rust-mcp-sdk/README.md index 6d813b4..d92d964 100644 --- a/crates/rust-mcp-sdk/README.md +++ b/crates/rust-mcp-sdk/README.md @@ -21,37 +21,35 @@ Leveraging the [rust-mcp-schema](https://github.com/rust-mcp-stack/rust-mcp-sche **rust-mcp-sdk** supports all three official versions of the MCP protocol. By default, it uses the **2025-06-18** version, but earlier versions can be enabled via Cargo features. - - -This project supports following transports: -- **Stdio** (Standard Input/Output) -- **Streamable HTTP** -- **SSE** (Server-Sent Events) - - 🚀 The **rust-mcp-sdk** includes a lightweight [Axum](https://github.com/tokio-rs/axum) based server that handles all core functionality seamlessly. Switching between `stdio` and `Streamable HTTP` is straightforward, requiring minimal code changes. The server is designed to efficiently handle multiple concurrent client connections and offers built-in support for SSL. -**MCP Streamable HTTP Support** -- ✅ Streamable HTTP Support for MCP Servers +**Features** +- ✅ Stdio, SSE and Streamable HTTP Support +- ✅ Supports multiple MCP protocol versions - ✅ DNS Rebinding Protection - ✅ Batch Messages - ✅ Streaming & non-streaming JSON response -- ✅ Streamable HTTP Support for MCP Clients - ✅ Resumability -- ⬜ Oauth Authentication +- ✅ OAuth Authentication for MCP Servers + - ✅ [Remote Oauth Provider](crates/rust-mcp-sdk/src/auth/auth_provider/remote_auth_provider.rs) (for any provider with DCR support) + - ✅ **Keycloak** Provider (via [rust-mcp-extra](crates/rust-mcp-extra/README.md#keycloak)) + - ✅ **WorkOS** Authkit Provider (via [rust-mcp-extra](crates/rust-mcp-extra/README.md#workos-authkit)) + - ✅ **Scalekit** Authkit Provider (via [rust-mcp-extra](crates/rust-mcp-extra/README.md#scalekit)) +- ⬜ OAuth Authentication for MCP Clients **⚠️** Project is currently under development and should be used at your own risk. ## Table of Contents +- [Getting Started](#getting-started) - [Usage Examples](#usage-examples) - [MCP Server (stdio)](#mcp-server-stdio) - [MCP Server (Streamable HTTP)](#mcp-server-streamable-http) - [MCP Client (stdio)](#mcp-client-stdio) - - [MCP Client (Streamable HTTP)](#mcp-client_streamable-http)) + - [MCP Client (Streamable HTTP)](#mcp-client-streamable-http) - [MCP Client (sse)](#mcp-client-sse) +- [Authentication](#authentication) - [Macros](#macros) -- [Getting Started](#getting-started) - [HyperServerOptions](#hyperserveroptions) - [Security Considerations](#security-considerations) - [Cargo features](#cargo-features) @@ -68,6 +66,12 @@ This project supports following transports: - [Development](#development) - [License](#license) + +## Getting Started + +If you are looking for a step-by-step tutorial on how to get started with `rust-mcp-sdk` , please see : [Getting Started MCP Server](https://github.com/rust-mcp-stack/rust-mcp-sdk/tree/main/doc/getting-started-mcp-server.md) + + ## Usage Examples ### MCP Server (stdio) @@ -387,6 +391,26 @@ Creating an MCP client using the `rust-mcp-sdk` with the SSE transport is almost 👉 see [examples/simple-mcp-client-sse](https://github.com/rust-mcp-stack/rust-mcp-sdk/tree/main/examples/simple-mcp-client-sse) for a complete working example. +## Authentication +MCP server can verify tokens issued by other systems, integrate with external identity providers, or manage the entire authentication process itself. Each option offers a different balance of simplicity, security, and control. + + ### RemoteAuthProvider + [RemoteAuthProvider](src/mcp_http/auth/auth_provider/remote_auth_provider.rs) RemoteAuthProvider enables authentication with identity providers that support Dynamic Client Registration (DCR) such as KeyCloak and WorkOS AuthKit, letting MCP clients auto-register and obtain credentials without manual setup. + +👉 See the [server-oauth-remote](examples/auth/server-oauth-remote) example for how to use RemoteAuthProvider with a DCR-capable remote provider. + +👉 [rust-mcp-extra](https://crates.io/crates/rust-mcp-extra) also offers drop-in auth providers for common identity platforms, working seamlessly with rust-mcp-sdk: + - [Keycloack auth example](crates/rust-mcp-extra/README.md#keycloak) + - [WorkOS autn example](crates/rust-mcp-extra/README.md#workos-authkit) + + + + ### OAuthProxy + OAuthProxy enables authentication with OAuth providers that don’t support Dynamic Client Registration (DCR).It accepts any client registration request, handles the DCR on your server side and then uses your pre-registered app credentials upstream.The proxy also forwards callbacks, allowing dynamic redirect URIs to work with providers that require fixed ones. + +> ⚠️ OAuthProxy support is still in development, please use RemoteAuthProvider for now. + + ## Macros [rust-mcp-sdk](https://github.com/rust-mcp-stack/rust-mcp-sdk) includes several helpful macros that simplify common tasks when building MCP servers and clients. For example, they can automatically generate tool specifications and tool schemas right from your structs, or assist with elicitation requests and responses making them completely type safe. @@ -495,10 +519,6 @@ let user_info = UserInfo::from_content_map(result.content)?; 💻 For mre info please see : - https://github.com/rust-mcp-stack/rust-mcp-sdk/tree/main/crates/rust-mcp-macros -## Getting Started - -If you are looking for a step-by-step tutorial on how to get started with `rust-mcp-sdk` , please see : [Getting Started MCP Server](https://github.com/rust-mcp-stack/rust-mcp-sdk/tree/main/doc/getting-started-mcp-server.md) - ## HyperServerOptions HyperServer is a lightweight Axum-based server that streamlines MCP servers by supporting **Streamable HTTP** and **SSE** transports. It supports simultaneous client connections, internal session management, and includes built-in security features like DNS rebinding protection and more. @@ -588,6 +608,9 @@ pub struct HyperServerOptions { /// Optional custom path for the MCP messages endpoint for sse (default: `/messages`) /// Applicable only if sse_support is true pub custom_messages_endpoint: Option, + + /// Optional authentication provider for protecting MCP server. + pub auth: Option>, } ``` diff --git a/crates/rust-mcp-sdk/src/hyper_servers/server.rs b/crates/rust-mcp-sdk/src/hyper_servers/server.rs index 438cd8b..a3eb655 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/server.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/server.rs @@ -102,6 +102,8 @@ pub struct HyperServerOptions { /// Optional custom path for the MCP messages endpoint for sse (default: `/messages`) /// Applicable only if sse_support is true pub custom_messages_endpoint: Option, + + /// Optional authentication provider for protecting MCP server. #[cfg(feature = "auth")] pub auth: Option>, } diff --git a/crates/rust-mcp-sdk/src/utils.rs b/crates/rust-mcp-sdk/src/utils.rs index 231f1ab..c63010d 100644 --- a/crates/rust-mcp-sdk/src/utils.rs +++ b/crates/rust-mcp-sdk/src/utils.rs @@ -243,12 +243,12 @@ pub fn valid_initialize_method(json_str: &str) -> SdkResult<()> { #[cfg(feature = "auth")] pub fn join_url(base: &Url, segment: &str) -> Result { - // Fast early check — Url must be absolute + // Fast early check - Url must be absolute if base.cannot_be_a_base() { return Err(url::ParseError::RelativeUrlWithoutBase); } - // We have to clone — there is no way around this when taking &Url + // We have to clone - there is no way around this when taking &Url let mut url = base.clone(); // This is the official, safe, and correct way From 4513d7c06c8727f6950dc67abd7b9bbe5457bc6e Mon Sep 17 00:00:00 2001 From: Ali Hashemi Date: Sun, 23 Nov 2025 10:01:41 -0400 Subject: [PATCH 3/7] chorel remove unused Claims struct --- crates/rust-mcp-sdk/src/auth/spec/jwk.rs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/crates/rust-mcp-sdk/src/auth/spec/jwk.rs b/crates/rust-mcp-sdk/src/auth/spec/jwk.rs index 67d3982..0af9124 100644 --- a/crates/rust-mcp-sdk/src/auth/spec/jwk.rs +++ b/crates/rust-mcp-sdk/src/auth/spec/jwk.rs @@ -10,16 +10,6 @@ pub struct JsonWebKeySet { pub keys: Vec, } -#[derive(Debug, Serialize, Deserialize, Clone)] -struct Claims { - aud: Option, // Optional. Audience - exp: usize, // Required (validate_exp defaults to true in validation). Expiration time (as UTC timestamp) - iat: Option, // Optional. Issued at (as UTC timestamp) - iss: Option, // Optional. Issuer - nbf: Option, // Optional. Not Before (as UTC timestamp) - sub: Option, // Optional. Subject (whom token refers to) -} - pub fn decode_token_header(token: &str) -> Result { let header = decode_header(token).map_err(|err| AuthenticationError::TokenVerificationFailed { From fc2459c2c0d7ee3496f9815462f2cd71d6792b23 Mon Sep 17 00:00:00 2001 From: Ali Hashemi Date: Sun, 23 Nov 2025 10:05:20 -0400 Subject: [PATCH 4/7] chore: update rust-mcp-extra readme --- crates/rust-mcp-extra/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/rust-mcp-extra/README.md b/crates/rust-mcp-extra/README.md index 1cd1017..2add0f9 100644 --- a/crates/rust-mcp-extra/README.md +++ b/crates/rust-mcp-extra/README.md @@ -7,14 +7,14 @@ A companion crate to [`rust-mcp-sdk`](https://github.com/rust-mcp-stack/rust-mcp - [Keycloak](#keycloak) - [WorkOs Authkit](#workos-authkit) - [Scalekit](#scalekit) -- [ID Generators](#-id-generators) +- **[ID Generators](#-id-generators)** - [NanoIdGenerator](#nanoidgenerator) - [TimeBase64Generator](#timebase64generator) - [RandomBase62Generator](#randombase62generator) - [SnowflakeIdGenerator](#snowflakeidgenerator) -- [Session Stores](#-session-stores) +- **[Session Stores](#-session-stores)** - 🔜 Coming Soon -- [Event Stores](#-event-stores) +- **[Event Stores](#-event-stores)** - 🔜 Coming Soon From 09790161c4131da70d9b1a99b3772eabb9b8430d Mon Sep 17 00:00:00 2001 From: Ali Hashemi Date: Sun, 23 Nov 2025 10:32:03 -0400 Subject: [PATCH 5/7] chore: fix doc --- Makefile.toml | 7 ++++++- crates/rust-mcp-extra/src/auth_provider/keycloak.rs | 2 +- crates/rust-mcp-sdk/src/auth/spec/audience.rs | 2 +- crates/rust-mcp-sdk/src/auth/spec/discovery.rs | 12 ++++++------ 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Makefile.toml b/Makefile.toml index 7362412..173e5c1 100644 --- a/Makefile.toml +++ b/Makefile.toml @@ -41,8 +41,13 @@ command = "cargo" args = ["test", "--doc", "-p", "rust-mcp-macros"] +[tasks.doc-strict] +command = "cargo" +args = ["doc", "--no-deps"] +env = { RUSTDOCFLAGS = "-D warnings" } + [tasks.check] -dependencies = ["fmt", "clippy", "test", "doc-test"] +dependencies = ["fmt", "clippy", "test", "doc-strict", "doc-test"] [tasks.clippy-fix] command = "cargo" diff --git a/crates/rust-mcp-extra/src/auth_provider/keycloak.rs b/crates/rust-mcp-extra/src/auth_provider/keycloak.rs index 497ed64..53ddad6 100644 --- a/crates/rust-mcp-extra/src/auth_provider/keycloak.rs +++ b/crates/rust-mcp-extra/src/auth_provider/keycloak.rs @@ -39,7 +39,7 @@ static SCOPES_SUPPORTED: &[&str] = &[ /// Configuration options for the Keycloak OAuth provider. pub struct KeycloakAuthOptions<'a> { - /// Base URL of the Keycloak server (e.g. https://keycloak.example.com) + /// Base URL of the Keycloak server (e.g. `https://keycloak.example.com`) pub keycloak_base_url: String, /// Public base URL of this MCP server (used for discovery endpoints) pub mcp_server_url: String, diff --git a/crates/rust-mcp-sdk/src/auth/spec/audience.rs b/crates/rust-mcp-sdk/src/auth/spec/audience.rs index 88690d1..229c27d 100644 --- a/crates/rust-mcp-sdk/src/auth/spec/audience.rs +++ b/crates/rust-mcp-sdk/src/auth/spec/audience.rs @@ -11,7 +11,7 @@ pub enum Audience { } impl Audience { - /// Converts the audience to a Vec for uniform access. + /// Converts the audience to a `Vec` for uniform access. pub fn to_vec(&self) -> Vec { match self { Audience::Single(s) => vec![s.clone()], diff --git a/crates/rust-mcp-sdk/src/auth/spec/discovery.rs b/crates/rust-mcp-sdk/src/auth/spec/discovery.rs index 0d1bce3..181a37c 100644 --- a/crates/rust-mcp-sdk/src/auth/spec/discovery.rs +++ b/crates/rust-mcp-sdk/src/auth/spec/discovery.rs @@ -19,7 +19,7 @@ pub struct AuthorizationServerMetadata { /// URL to exchange authorization codes for tokens or refresh tokens. pub token_endpoint: Url, - /// URL of the authorization server's JWK Set [JWK] document + /// URL of the authorization server's JWK Set `JWK` document #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] pub jwks_uri: Option, @@ -27,7 +27,7 @@ pub struct AuthorizationServerMetadata { #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] pub registration_endpoint: Option, - /// List of supported OAuth scopes (e.g., "openid", "profile", "email", mcp:tools) [RECOMMENDED] + /// List of supported OAuth scopes (e.g., "openid", "profile", "email", mcp:tools) #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] pub scopes_supported: Option>, @@ -58,7 +58,7 @@ pub struct AuthorizationServerMetadata { pub token_endpoint_auth_signing_alg_values_supported: Option>, /// Link to human-readable docs for developers. - /// https://datatracker.ietf.org/doc/html/rfc8414 + /// #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] pub service_documentation: Option, @@ -171,7 +171,7 @@ impl AuthorizationServerMetadata { /// represents metadata about a protected resource in the OAuth 2.0 ecosystem. /// It allows clients and authorization servers to discover how to interact with a protected resource (like an MCP endpoint), /// including security requirements and supported features. -/// https://datatracker.ietf.org/doc/rfc9728/ +/// #[derive(Debug, Serialize, Deserialize, Clone)] pub struct OauthProtectedResourceMetadata { /// The base identifier of the protected resource (e.g., an MCP server's URI). @@ -185,7 +185,7 @@ pub struct OauthProtectedResourceMetadata { /// URL where the resource exposes its public keys (JWKS) to verify signed tokens. /// Typically used to verify JWT access tokens. - /// Example: "https://example.com/.well-known/jwks.json" + /// Example: `https://example.com/.well-known/jwks.json` #[serde(default, skip_serializing_if = "::std::option::Option::is_none")] pub jwks_uri: Option, @@ -245,7 +245,7 @@ pub struct OauthProtectedResourceMetadata { } impl OauthProtectedResourceMetadata { - /// Creates a new [`OAuthProtectedResourceMetadata`] instance with only the + /// Creates a new `OAuthProtectedResourceMetadata` instance with only the /// minimal required fields populated. /// /// The `resource` and each entry in `authorization_servers` must be valid URLs. From ad3593d920b669545de449a4692ea613e199ab5e Mon Sep 17 00:00:00 2001 From: Ali Hashemi Date: Sun, 23 Nov 2025 10:40:42 -0400 Subject: [PATCH 6/7] chore: typo --- crates/rust-mcp-extra/README.md | 2 +- crates/rust-mcp-extra/src/auth_provider/keycloak.rs | 2 +- crates/rust-mcp-extra/src/auth_provider/scalekit.rs | 2 +- crates/rust-mcp-extra/src/auth_provider/work_os.rs | 2 +- crates/rust-mcp-sdk/src/auth/auth_provider.rs | 2 +- .../src/auth/auth_provider/remote_auth_provider.rs | 2 +- crates/rust-mcp-sdk/src/auth/metadata.rs | 4 ++-- examples/auth/server-oauth-remote/src/main.rs | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/crates/rust-mcp-extra/README.md b/crates/rust-mcp-extra/README.md index 2add0f9..aeaad82 100644 --- a/crates/rust-mcp-extra/README.md +++ b/crates/rust-mcp-extra/README.md @@ -74,7 +74,7 @@ let auth_provider = WorkOsAuthProvider::new(WorkOSAuthOptions { })?; ``` -Before running the [example](../../examples/workos-auth.rs), make sure you enabled DCR (Dynamic Client Regsitration) in your WorkOS Authkit dashboard. +Before running the [example](../../examples/workos-auth.rs), make sure you enabled DCR (Dynamic Client Registration) in your WorkOS Authkit dashboard. Set the `AUTH_SERVER` environment variable and start the example: diff --git a/crates/rust-mcp-extra/src/auth_provider/keycloak.rs b/crates/rust-mcp-extra/src/auth_provider/keycloak.rs index 53ddad6..1dfa8d4 100644 --- a/crates/rust-mcp-extra/src/auth_provider/keycloak.rs +++ b/crates/rust-mcp-extra/src/auth_provider/keycloak.rs @@ -228,7 +228,7 @@ impl AuthProvider for KeycloakAuthProvider { request: http::Request<&str>, state: Arc, ) -> Result, TransportServerError> { - let Some(endpoint) = self.endpont_type(&request) else { + let Some(endpoint) = self.endpoint_type(&request) else { return http::Response::builder() .status(StatusCode::NOT_FOUND) .body(GenericBody::empty()) diff --git a/crates/rust-mcp-extra/src/auth_provider/scalekit.rs b/crates/rust-mcp-extra/src/auth_provider/scalekit.rs index a540db7..b3b1ffb 100644 --- a/crates/rust-mcp-extra/src/auth_provider/scalekit.rs +++ b/crates/rust-mcp-extra/src/auth_provider/scalekit.rs @@ -212,7 +212,7 @@ impl AuthProvider for ScalekitAuthProvider { request: http::Request<&str>, state: Arc, ) -> Result, TransportServerError> { - let Some(endpoint) = self.endpont_type(&request) else { + let Some(endpoint) = self.endpoint_type(&request) else { return http::Response::builder() .status(StatusCode::NOT_FOUND) .body(GenericBody::empty()) diff --git a/crates/rust-mcp-extra/src/auth_provider/work_os.rs b/crates/rust-mcp-extra/src/auth_provider/work_os.rs index 920747c..cd7f8fe 100644 --- a/crates/rust-mcp-extra/src/auth_provider/work_os.rs +++ b/crates/rust-mcp-extra/src/auth_provider/work_os.rs @@ -211,7 +211,7 @@ impl AuthProvider for WorkOsAuthProvider { request: http::Request<&str>, state: Arc, ) -> Result, TransportServerError> { - let Some(endpoint) = self.endpont_type(&request) else { + let Some(endpoint) = self.endpoint_type(&request) else { return http::Response::builder() .status(StatusCode::NOT_FOUND) .body(GenericBody::empty()) diff --git a/crates/rust-mcp-sdk/src/auth/auth_provider.rs b/crates/rust-mcp-sdk/src/auth/auth_provider.rs index 258addd..0f7ab20 100644 --- a/crates/rust-mcp-sdk/src/auth/auth_provider.rs +++ b/crates/rust-mcp-sdk/src/auth/auth_provider.rs @@ -47,7 +47,7 @@ pub trait AuthProvider: Send + Sync { /// - If your token and revocation endpoints share the same URL path (valid in some implementations), /// you may want to override this method to correctly distinguish the request type /// (e.g., based on request parameters like `grant_type` vs `token`). - fn endpont_type(&self, request: &http::Request<&str>) -> Option<&OauthEndpoint> { + fn endpoint_type(&self, request: &http::Request<&str>) -> Option<&OauthEndpoint> { let endpoints = self.auth_endpoints()?; endpoints.get(request.uri().path()) } diff --git a/crates/rust-mcp-sdk/src/auth/auth_provider/remote_auth_provider.rs b/crates/rust-mcp-sdk/src/auth/auth_provider/remote_auth_provider.rs index 1df62e4..ce4fa56 100644 --- a/crates/rust-mcp-sdk/src/auth/auth_provider/remote_auth_provider.rs +++ b/crates/rust-mcp-sdk/src/auth/auth_provider/remote_auth_provider.rs @@ -133,7 +133,7 @@ impl AuthProvider for RemoteAuthProvider { request: http::Request<&str>, state: Arc, ) -> Result, TransportServerError> { - let Some(endpoint) = self.endpont_type(&request) else { + let Some(endpoint) = self.endpoint_type(&request) else { return http::Response::builder() .status(StatusCode::NOT_FOUND) .body(GenericBody::empty()) diff --git a/crates/rust-mcp-sdk/src/auth/metadata.rs b/crates/rust-mcp-sdk/src/auth/metadata.rs index 217936b..bd7ff49 100644 --- a/crates/rust-mcp-sdk/src/auth/metadata.rs +++ b/crates/rust-mcp-sdk/src/auth/metadata.rs @@ -34,7 +34,7 @@ pub enum AuthMetadateError { pub struct AuthMetadataEndpoints { pub protected_resource_endpoint: String, - pub autorization_server_endpoint: String, + pub authorization_server_endpoint: String, } // Builder struct to construct both OAuthMetadata and OAuthProtectedResourceMetadata @@ -101,7 +101,7 @@ impl OauthMetadata { pub fn endpoints(&self) -> AuthMetadataEndpoints { AuthMetadataEndpoints { - autorization_server_endpoint: WELL_KNOWN_OAUTH_AUTHORIZATION_SERVER.to_string(), + authorization_server_endpoint: WELL_KNOWN_OAUTH_AUTHORIZATION_SERVER.to_string(), protected_resource_endpoint: format!( "{OAUTH_PROTECTED_RESOURCE_BASE}{}", match self.protected_resource_metadata.resource.path() { diff --git a/examples/auth/server-oauth-remote/src/main.rs b/examples/auth/server-oauth-remote/src/main.rs index 951f6ad..e1d442e 100644 --- a/examples/auth/server-oauth-remote/src/main.rs +++ b/examples/auth/server-oauth-remote/src/main.rs @@ -19,7 +19,7 @@ use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; // this function creates and setup a RemoteAuthProvider , pointing to a local KeyCloak server // please refer to the keycloak-setup section of the following blog post for -// detailed instrctions on how to setup a KeyCloak server for this : +// detailed instructions on how to setup a KeyCloak server for this : // https://modelcontextprotocol.io/docs/tutorials/security/authorization#keycloak-setup pub async fn create_oauth_provider() -> SdkResult { // build metadata from a oauth discovery url : .well-known/openid-configuration From d859e997b6ad5e71cac92e54abcd33064abe4676 Mon Sep 17 00:00:00 2001 From: Ali Hashemi Date: Sun, 23 Nov 2025 11:00:03 -0400 Subject: [PATCH 7/7] chore: audit ignore dev dependency --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8badef4..eb07df2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,6 +69,7 @@ jobs: uses: actions-rust-lang/audit@v1 with: token: ${{ secrets.GITHUB_TOKEN }} + ignore: RUSTSEC-2023-0071 if: matrix.os == 'ubuntu-latest' # Run audit only on Linux # install nodejs that is required for tests