rust-sdk/examples/servers/Cargo.toml
Tanish Desai f20ed202af
Add SEP-991 (CIMD) support for URL-based client IDs (#570)
* feat(auth): add cimd support for SEP-991

add cimd support for url-based client ids

Signed-off-by: tanish111 <tanishdesai37@gmail.com>

* test(auth): add unit tests for is_https_url helper

Add test coverage for is_https_url helper to validate HTTPS scheme, non-root paths,
and reject http, javascript, data schemes, and invalid inputs per SEP-991 requirements.

Signed-off-by: tanish111 <tanishdesai37@gmail.com>

* feat(example): add CIMD OAuth server for SEP-991 testing

Implements a new server example (servers_cimd_auth_streamhttp) that
demonstrates CIMD (Client ID Metadata Document) support for URL-based
client IDs. The server validates client_id URLs, fetches and validates
client metadata documents, and provides OAuth 2.0 authorization endpoints
with MCP integration for end-to-end testing.

Signed-off-by: tanish111 <tanishdesai37@gmail.com>

* fix(oauth): add CORS headers to token endpoint

Add CORS headers to token endpoint to allow cross-origin requests from browsers
during OAuth authorization code exchange flow.

Signed-off-by: tanish111 <tanishdesai37@gmail.com>

* refactor: improve is_https_url function and consolidate tests

- Improve is_https_url function formatting and readability
- Merge all test cases into single test_is_https_url_scenarios function
- Add missing test case for "https://" URL

Signed-off-by: tanish111 <tanishdesai37@gmail.com>

* refactor: use map_err instead of match for error handling in auth.rs

Replace the verbose match statement with
map_err for more idiomatic

Signed-off-by: tanish111 <tanishdesai37@gmail.com>

* feat: add client-metadata.json

Add client metadata file for SEP-991 CIMD
authentication support

Signed-off-by: tanish111 <tanishdesai37@gmail.com>

---------

Signed-off-by: tanish111 <tanishdesai37@gmail.com>
2025-12-10 08:55:38 -05:00

107 lines
2.3 KiB
TOML

[package]
name = "mcp-server-examples"
version = "0.1.5"
edition = "2024"
publish = false
[dependencies]
rmcp = { workspace = true, features = [
"server",
"macros",
"client",
"transport-io",
"transport-streamable-http-server",
"auth",
"elicitation",
"schemars",
] }
tokio = { version = "1", features = [
"macros",
"rt",
"rt-multi-thread",
"io-std",
"signal",
] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
anyhow = "1.0"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = [
"env-filter",
"std",
"fmt",
] }
futures = "0.3"
rand = { version = "0.9", features = ["std"] }
axum = { version = "0.8", features = ["macros"] }
schemars = "1.0"
reqwest = { version = "0.12", features = ["json"] }
chrono = "0.4"
uuid = { version = "1.6", features = ["v4", "serde"] }
serde_urlencoded = "0.7"
askama = { version = "0.14" }
tower-http = { version = "0.6", features = ["cors"] }
hyper = { version = "1" }
hyper-util = { version = "0", features = ["server"] }
tokio-util = { version = "0.7" }
url = "2.5"
[dev-dependencies]
tokio-stream = { version = "0.1" }
tokio-util = { version = "0.7", features = ["codec"] }
[[example]]
name = "servers_counter_stdio"
path = "src/counter_stdio.rs"
[[example]]
name = "servers_memory_stdio"
path = "src/memory_stdio.rs"
[[example]]
name = "servers_counter_streamhttp"
path = "src/counter_streamhttp.rs"
[[example]]
name = "servers_prompt_stdio"
path = "src/prompt_stdio.rs"
[[example]]
name = "counter_hyper_streamable_http"
path = "src/counter_hyper_streamable_http.rs"
[[example]]
name = "servers_sampling_stdio"
path = "src/sampling_stdio.rs"
[[example]]
name = "servers_structured_output"
path = "src/structured_output.rs"
[[example]]
name = "servers_elicitation_stdio"
path = "src/elicitation_stdio.rs"
[[example]]
name = "servers_completion_stdio"
path = "src/completion_stdio.rs"
[[example]]
name = "servers_progress_demo"
path = "src/progress_demo.rs"
[[example]]
name = "servers_simple_auth_streamhttp"
path = "src/simple_auth_streamhttp.rs"
[[example]]
name = "servers_complex_auth_streamhttp"
path = "src/complex_auth_streamhttp.rs"
[[example]]
name = "servers_cimd_auth_streamhttp"
path = "src/cimd_auth_streamhttp.rs"
[[example]]
name = "servers_calculator_stdio"
path = "src/calculator_stdio.rs"