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+ } ;
25use tracing_subscriber:: { layer:: SubscriberExt , util:: SubscriberInitExt } ;
36mod common;
47use 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+ }
Original file line number Diff line number Diff line change 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 },
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