Skip to content

Commit ac1b8c6

Browse files
authored
test: add test with js server (#65)
1 parent d6fb12b commit ac1b8c6

File tree

3 files changed

+68
-2
lines changed

3 files changed

+68
-2
lines changed

crates/rmcp/tests/test_with_js.rs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use rmcp::transport::sse_server::SseServer;
1+
use rmcp::{
2+
ServiceExt,
3+
transport::{SseServer, TokioChildProcess},
4+
};
25
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
36
mod common;
47
use common::calculator::Calculator;
@@ -34,3 +37,32 @@ async fn test_with_js_client() -> anyhow::Result<()> {
3437
ct.cancel();
3538
Ok(())
3639
}
40+
41+
#[tokio::test]
42+
async fn test_with_js_server() -> anyhow::Result<()> {
43+
let _ = tracing_subscriber::registry()
44+
.with(
45+
tracing_subscriber::EnvFilter::try_from_default_env()
46+
.unwrap_or_else(|_| "debug".to_string().into()),
47+
)
48+
.with(tracing_subscriber::fmt::layer())
49+
.try_init();
50+
tokio::process::Command::new("npm")
51+
.arg("install")
52+
.current_dir("tests/test_with_js")
53+
.spawn()?
54+
.wait()
55+
.await?;
56+
let transport = TokioChildProcess::new(
57+
tokio::process::Command::new("node").arg("tests/test_with_js/server.js"),
58+
)?;
59+
60+
let client = ().serve(transport).await?;
61+
let resources = client.list_all_resources().await?;
62+
tracing::info!("{:#?}", resources);
63+
let tools = client.list_all_tools().await?;
64+
tracing::info!("{:#?}", tools);
65+
66+
client.cancel().await?;
67+
Ok(())
68+
}

crates/rmcp/tests/test_with_js/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
"name": "test_with_ts",
77
"version": "1.0.0",
88
"main": "index.js",
9-
"devDependencies": {},
109
"scripts": {
1110
"test": "echo \"Error: no test specified\" && exit 1"
1211
},
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
2+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3+
import { z } from "zod";
4+
5+
const server = new McpServer({
6+
name: "Demo",
7+
version: "1.0.0"
8+
});
9+
10+
server.resource(
11+
"greeting",
12+
new ResourceTemplate("greeting://{name}", { list: undefined }),
13+
async (uri, { name }) => ({
14+
contents: [{
15+
uri: uri.href,
16+
text: `Hello, ${name}`
17+
}]
18+
})
19+
);
20+
21+
server.tool(
22+
"add",
23+
{ a: z.number(), b: z.number() },
24+
async ({ a, b }) => ({
25+
"content": [
26+
{
27+
"type": "text",
28+
"text": `${a + b}`
29+
}
30+
]
31+
})
32+
);
33+
34+
const transport = new StdioServerTransport();
35+
await server.connect(transport);

0 commit comments

Comments
 (0)