diff --git a/Cargo.lock b/Cargo.lock index 451512c1..2314dd41 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21,9 +21,9 @@ dependencies = [ [[package]] name = "actix-http" -version = "3.11.2" +version = "3.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7926860314cbe2fb5d1f13731e387ab43bd32bca224e82e6e2db85de0a3dba49" +checksum = "93acb4a42f64936f9b8cae4a433b237599dd6eb6ed06124eb67132ef8cc90662" dependencies = [ "actix-codec", "actix-rt", @@ -818,7 +818,7 @@ dependencies = [ "libc", "option-ext", "redox_users 0.5.2", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -903,7 +903,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -1495,7 +1495,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.1", + "socket2 0.5.10", "system-configuration", "tokio", "tower-service", @@ -1722,7 +1722,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -2130,15 +2130,14 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl" -version = "0.10.75" +version = "0.10.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" +checksum = "77823a27f0babb03091cb9ed9ef80af3b39dbc82f97e8fa530374b7dafd87a45" dependencies = [ "bitflags 2.10.0", "cfg-if", "foreign-types", "libc", - "once_cell", "openssl-macros", "openssl-sys", ] @@ -2171,9 +2170,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.111" +version = "0.9.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" +checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695" dependencies = [ "cc", "libc", @@ -2480,9 +2479,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +checksum = "7ec095654a25171c2124e9e3393a930bddbffdc939556c914957a4c3e0a87166" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.4", @@ -2700,12 +2699,11 @@ dependencies = [ [[package]] name = "rmcp" -version = "0.12.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528d42f8176e6e5e71ea69182b17d1d0a19a6b3b894b564678b74cd7cab13cfa" +checksum = "f542f74cf247da16f19bbc87e298cd201e912314f4083e88cdd671f44f5fcb53" dependencies = [ "async-trait", - "base64 0.22.1", "chrono", "futures", "pastey", @@ -2722,9 +2720,9 @@ dependencies = [ [[package]] name = "rmcp-macros" -version = "0.12.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3f81daaa494eb8e985c9462f7d6ce1ab05e5299f48aafd76cdd3d8b060e6f59" +checksum = "b2391e4ae47f314e70eaafb6c7bd82e495e770b935448864446302143019151f" dependencies = [ "darling 0.23.0", "proc-macro2", @@ -2747,13 +2745,13 @@ dependencies = [ [[package]] name = "rpassword" -version = "7.4.0" +version = "7.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d4c8b64f049c6721ec8ccec37ddfc3d641c4a7fca57e8f2a89de509c73df39" +checksum = "2da316a15f47e3d053de9cb2c439650bd8fa4aaeb9365f2e5f27f492ff73c196" dependencies = [ "libc", "rtoolbox", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2803,7 +2801,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -2830,9 +2828,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.8" +version = "0.103.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" dependencies = [ "ring", "rustls-pki-types", @@ -2869,18 +2867,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "schemars" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" -dependencies = [ - "dyn-clone", - "schemars_derive 0.8.22", - "serde", - "serde_json", -] - [[package]] name = "schemars" version = "0.9.0" @@ -2902,23 +2888,11 @@ dependencies = [ "chrono", "dyn-clone", "ref-cast", - "schemars_derive 1.2.0", + "schemars_derive", "serde", "serde_json", ] -[[package]] -name = "schemars_derive" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" -dependencies = [ - "proc-macro2", - "quote", - "serde_derive_internals", - "syn", -] - [[package]] name = "schemars_derive" version = "1.2.0" @@ -2969,7 +2943,7 @@ dependencies = [ "reqwest", "rmcp", "rpassword", - "schemars 0.8.22", + "schemars 1.2.0", "sentry", "sentry-anyhow", "serde", @@ -3097,7 +3071,7 @@ version = "0.46.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26ab054c34b87f96c3e4701bea1888317cde30cc7e4a6136d2c48454ab96661c" dependencies = [ - "rand 0.9.2", + "rand 0.9.3", "sentry-types", "serde", "serde_json", @@ -3145,7 +3119,7 @@ checksum = "eecbd63e9d15a26a40675ed180d376fcb434635d2e33de1c24003f61e3e2230d" dependencies = [ "debugid", "hex", - "rand 0.9.2", + "rand 0.9.3", "serde", "serde_json", "thiserror 2.0.17", @@ -3643,7 +3617,7 @@ dependencies = [ "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -3663,7 +3637,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8c27177b12a6399ffc08b98f76f7c9a1f4fe9fc967c784c5a071fa8d93cf7e1" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4303,7 +4277,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 7882704c..e334b29b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -52,8 +52,8 @@ walkdir = "2.3.3" warp = "0.3" # MCP server dependencies -rmcp = { version = "0.12", features = ["schemars", "server", "transport-io"] } -schemars = "0.8" +rmcp = { version = "1.4", default-features = false, features = ["macros", "server", "schemars", "transport-io"] } +schemars = "1" [dev-dependencies] envtestkit = "1.1.2" diff --git a/src/mcp/server.rs b/src/mcp/server.rs index 3ef881b3..29f9bb33 100644 --- a/src/mcp/server.rs +++ b/src/mcp/server.rs @@ -2,7 +2,6 @@ use std::sync::Arc; -use rmcp::handler::server::router::tool::ToolRouter; use rmcp::handler::server::wrapper::Parameters; use rmcp::model::{ServerCapabilities, ServerInfo}; use rmcp::{schemars, tool, tool_handler, tool_router, ServiceExt}; @@ -191,7 +190,6 @@ pub struct AppUuidParam { #[derive(Clone)] pub struct ScreenlyMcpServer { auth: Arc, - tool_router: ToolRouter, } impl ScreenlyMcpServer { @@ -200,7 +198,6 @@ impl ScreenlyMcpServer { let auth = Authentication::new()?; Ok(Self { auth: Arc::new(auth), - tool_router: Self::tool_router(), }) } @@ -610,21 +607,17 @@ impl ScreenlyMcpServer { #[tool_handler] impl rmcp::ServerHandler for ScreenlyMcpServer { fn get_info(&self) -> ServerInfo { - ServerInfo { - instructions: Some( - "Screenly MCP Server - Manage digital signage screens, assets, and playlists. \ - Use API_TOKEN environment variable or ~/.screenly file for authentication.\n\n\ - PLAYLIST PREDICATES: Playlists use a predicate DSL for scheduling. Variables: \ - $DATE (Unix ms), $TIME (ms since midnight, 0-86400000), $WEEKDAY (0=Sun..6=Sat). \ - Operators: =, <=, >=, <, >, AND, OR, NOT, BETWEEN {min,max}, IN {values}. \ - Examples: 'TRUE' (always show), '$WEEKDAY IN {1,2,3,4,5}' (weekdays only), \ - '$TIME BETWEEN {32400000, 61200000}' (9AM-5PM), \ - '$TIME >= 32400000 AND $TIME <= 61200000 AND NOT $WEEKDAY IN {0, 6}' (business hours). \ - Time reference: 32400000=9AM, 43200000=12PM, 61200000=5PM, 72000000=8PM." - .to_string(), - ), - capabilities: ServerCapabilities::builder().enable_tools().build(), - ..Default::default() - } + // ServerInfo is #[non_exhaustive] in rmcp 1.x; use its builder instead of a struct literal. + ServerInfo::new(ServerCapabilities::builder().enable_tools().build()).with_instructions( + "Screenly MCP Server - Manage digital signage screens, assets, and playlists. \ + Use API_TOKEN environment variable or ~/.screenly file for authentication.\n\n\ + PLAYLIST PREDICATES: Playlists use a predicate DSL for scheduling. Variables: \ + $DATE (Unix ms), $TIME (ms since midnight, 0-86400000), $WEEKDAY (0=Sun..6=Sat). \ + Operators: =, <=, >=, <, >, AND, OR, NOT, BETWEEN {min,max}, IN {values}. \ + Examples: 'TRUE' (always show), '$WEEKDAY IN {1,2,3,4,5}' (weekdays only), \ + '$TIME BETWEEN {32400000, 61200000}' (9AM-5PM), \ + '$TIME >= 32400000 AND $TIME <= 61200000 AND NOT $WEEKDAY IN {0, 6}' (business hours). \ + Time reference: 32400000=9AM, 43200000=12PM, 61200000=5PM, 72000000=8PM.", + ) } }