Skip to content

Commit c0b6f20

Browse files
committed
tests: add new tests for client runtime
1 parent 3fca025 commit c0b6f20

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
use async_trait::async_trait;
2+
use rust_mcp_schema::{
3+
ClientCapabilities, Implementation, InitializeRequestParams, JSONRPC_VERSION,
4+
};
5+
use rust_mcp_sdk::mcp_client::ClientHandler;
6+
7+
pub const NPX_SERVER_EVERYTHING: &str = "@modelcontextprotocol/server-everything";
8+
pub const UVX_SERVER_GIT: &str = "mcp-server-git";
9+
10+
pub fn test_client_info() -> InitializeRequestParams {
11+
InitializeRequestParams {
12+
capabilities: ClientCapabilities::default(),
13+
client_info: Implementation {
14+
name: "test-rust-mcp-client".into(),
15+
version: "0.1.0".into(),
16+
},
17+
protocol_version: JSONRPC_VERSION.into(),
18+
}
19+
}
20+
21+
pub struct TestClientHandler;
22+
23+
#[async_trait]
24+
impl ClientHandler for TestClientHandler {}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
use common::{test_client_info, TestClientHandler, NPX_SERVER_EVERYTHING, UVX_SERVER_GIT};
2+
use rust_mcp_sdk::{mcp_client::client_runtime, McpClient, StdioTransport, TransportOptions};
3+
4+
#[path = "common/common.rs"]
5+
pub mod common;
6+
7+
#[tokio::test]
8+
async fn tets_client_launch_npx_server() {
9+
// NPM based MCP servers should launch successfully using `npx`
10+
let transport = StdioTransport::create_with_server_launch(
11+
"npx",
12+
vec!["-y".into(), NPX_SERVER_EVERYTHING.into()],
13+
None,
14+
TransportOptions::default(),
15+
)
16+
.unwrap();
17+
18+
let client = client_runtime::create_client(test_client_info(), transport, TestClientHandler {});
19+
20+
client.clone().start().await.unwrap();
21+
22+
let server_capabilities = client.server_capabilities().unwrap();
23+
let server_info = client.server_info().unwrap();
24+
25+
assert!(server_info.server_info.name.len() > 0);
26+
assert!(server_info.server_info.version.len() > 0);
27+
assert!(server_capabilities.tools.is_some());
28+
}
29+
30+
#[tokio::test]
31+
async fn tets_client_launch_uvx_server() {
32+
// The Python-based MCP server should launch successfully
33+
// provided that `uvx` is installed and accessible in the system's PATH
34+
let transport = StdioTransport::create_with_server_launch(
35+
"uvx",
36+
vec![UVX_SERVER_GIT.into()],
37+
None,
38+
TransportOptions::default(),
39+
)
40+
.unwrap();
41+
42+
let client = client_runtime::create_client(test_client_info(), transport, TestClientHandler {});
43+
44+
client.clone().start().await.unwrap();
45+
46+
let server_capabilities = client.server_capabilities().unwrap();
47+
let server_info = client.server_info().unwrap();
48+
49+
assert!(server_info.server_info.name.len() > 0);
50+
assert!(server_info.server_info.version.len() > 0);
51+
assert!(server_capabilities.tools.is_some());
52+
}

0 commit comments

Comments
 (0)