|
| 1 | +use anyhow::Error; |
| 2 | +use rmcp::{ServiceExt, transport::TokioChildProcess}; |
1 | 3 | use serde_json::json; |
2 | | -use std::process::Command; |
| 4 | +use std::{env, process::Command}; |
3 | 5 | use trustify_test_context::subset::ContainsSubset; |
4 | 6 |
|
5 | 7 | #[test] |
6 | | -fn tools_list() { |
7 | | - let output = Command::new("sh").arg("-c").arg("npx @modelcontextprotocol/inspector --cli --config ./tests/mcp-inspector-tests-config.json --server trustify-stdio --method tools/list") |
8 | | - // set timeouts (in milliseconds) in order to allow the `cargo run` from mcp-inspector-tests-config.json to run successfully |
9 | | - .env("MCP_SERVER_REQUEST_TIMEOUT", "120000") |
10 | | - .env("MCP_REQUEST_MAX_TOTAL_TIMEOUT", "120000") |
| 8 | +fn tools_list_mcp_inspector() { |
| 9 | + let inspector_commmand = format!( |
| 10 | + "npx @modelcontextprotocol/inspector --cli {} --method tools/list", |
| 11 | + env!("CARGO_BIN_EXE_stdio") |
| 12 | + ); |
| 13 | + log::debug!("inspector command: {}", inspector_commmand); |
| 14 | + let output = Command::new("sh") |
| 15 | + .arg("-c") |
| 16 | + .arg(inspector_commmand) |
| 17 | + .env("API_URL", "") |
| 18 | + .env("OPENID_ISSUER_URL", "") |
| 19 | + .env("OPENID_CLIENT_ID", "") |
| 20 | + .env("OPENID_CLIENT_SECRET", "") |
11 | 21 | .output() |
12 | 22 | .expect("failed to execute process"); |
13 | 23 |
|
14 | 24 | let result = serde_json::from_str(str::from_utf8(&output.stdout).unwrap_or_default()) |
15 | 25 | .unwrap_or_default(); |
| 26 | + log::debug!("{:#?}", result); |
| 27 | + log::debug!("{:#?}", str::from_utf8(&output.stderr).unwrap_or_default()); |
16 | 28 | let expected_result = json!({ |
17 | 29 | "tools": [ |
18 | 30 | { |
@@ -251,3 +263,27 @@ fn tools_list() { |
251 | 263 | }); |
252 | 264 | assert!(expected_result.contains_subset(result)); |
253 | 265 | } |
| 266 | + |
| 267 | +#[tokio::test] |
| 268 | +async fn tools_list_mcp_client() -> Result<(), Error> { |
| 269 | + let mut command = tokio::process::Command::new(env!("CARGO_BIN_EXE_stdio")); |
| 270 | + command |
| 271 | + .env("API_URL", "") |
| 272 | + .env("OPENID_ISSUER_URL", "") |
| 273 | + .env("OPENID_CLIENT_ID", "") |
| 274 | + .env("OPENID_CLIENT_SECRET", ""); |
| 275 | + // Start server |
| 276 | + let service = ().serve(TokioChildProcess::new(&mut command)?).await?; |
| 277 | + |
| 278 | + // Initialize |
| 279 | + let server_info = service.peer_info(); |
| 280 | + log::debug!("Connected to server: {server_info:#?}"); |
| 281 | + assert_eq!(server_info.server_info.name, "mcp-stdio"); |
| 282 | + |
| 283 | + // List tools |
| 284 | + let tools = service.list_all_tools().await?; |
| 285 | + log::debug!("Available tools: {tools:#?}"); |
| 286 | + assert_eq!(tools.len(), 10); |
| 287 | + |
| 288 | + Ok(()) |
| 289 | +} |
0 commit comments