File tree Expand file tree Collapse file tree 3 files changed +68
-2
lines changed Expand file tree Collapse file tree 3 files changed +68
-2
lines changed Original file line number Diff line number Diff line change 1
- use rmcp:: transport:: sse_server:: SseServer ;
1
+ use rmcp:: {
2
+ ServiceExt ,
3
+ transport:: { SseServer , TokioChildProcess } ,
4
+ } ;
2
5
use tracing_subscriber:: { layer:: SubscriberExt , util:: SubscriberInitExt } ;
3
6
mod common;
4
7
use common:: calculator:: Calculator ;
@@ -34,3 +37,32 @@ async fn test_with_js_client() -> anyhow::Result<()> {
34
37
ct. cancel ( ) ;
35
38
Ok ( ( ) )
36
39
}
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
+ }
Original file line number Diff line number Diff line change 6
6
"name" : " test_with_ts" ,
7
7
"version" : " 1.0.0" ,
8
8
"main" : " index.js" ,
9
- "devDependencies" : {},
10
9
"scripts" : {
11
10
"test" : " echo \" Error: no test specified\" && exit 1"
12
11
},
Original file line number Diff line number Diff line change
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 ) ;
You can’t perform that action at this time.
0 commit comments