11import { sValidator } from "@hono/standard-validator" ;
22import {
3+ type Resource as McpResource ,
4+ type ResourceTemplate as McpResourceTemplate ,
35 CallToolRequestSchema ,
46 ErrorCode ,
57 GetPromptRequestSchema ,
@@ -281,6 +283,10 @@ export async function generateSpecs<
281283 if ( ! configuration . resources ) {
282284 configuration . resources = { } ;
283285 }
286+
287+ configuration . resources [ path ] = {
288+ path,
289+ } ;
284290 }
285291 }
286292
@@ -419,25 +425,24 @@ function createResourceApp<
419425 } ) ,
420426 ) ;
421427
422- const resources = responses . flat ( 2 ) . map ( ( resource : Resource ) => {
423- const schema = {
424- name : resource . name ,
425- description : resource . description ,
426- mimeType : resource . mimeType ,
427- } ;
428-
429- if ( resource . type === "template" ) {
430- return {
431- ...schema ,
432- uriTemplate : resource . uri ,
428+ const resources = responses
429+ . flat ( 2 )
430+ . reduce ( ( prev : McpResource [ ] , resource : Resource ) => {
431+ const schema = {
432+ name : resource . name ,
433+ description : resource . description ,
434+ mimeType : resource . mimeType ,
433435 } ;
434- }
435436
436- return {
437- ...schema ,
438- uri : resource . uri ,
439- } ;
440- } ) ;
437+ if ( resource . type !== "template" ) {
438+ prev . push ( {
439+ ...schema ,
440+ uri : resource . uri ,
441+ } ) ;
442+ }
443+
444+ return prev ;
445+ } , [ ] ) ;
441446
442447 return c . json ( {
443448 result : {
@@ -446,6 +451,44 @@ function createResourceApp<
446451 } ) ;
447452 } ) ;
448453
454+ app . post ( "/templates/list" , async ( c ) => {
455+ const responses = await Promise . all (
456+ Object . values ( config . resources ?? { } ) . map ( async ( { path } ) => {
457+ const res = await hono . request ( path , {
458+ method : "POST" ,
459+ headers : c . req . header ( ) ,
460+ } ) ;
461+
462+ return res . json ( ) as Promise < Resource [ ] > ;
463+ } ) ,
464+ ) ;
465+
466+ const resources = responses
467+ . flat ( 2 )
468+ . reduce ( ( prev : McpResourceTemplate [ ] , resource : Resource ) => {
469+ const schema = {
470+ name : resource . name ,
471+ description : resource . description ,
472+ mimeType : resource . mimeType ,
473+ } ;
474+
475+ if ( resource . type === "template" ) {
476+ prev . push ( {
477+ ...schema ,
478+ uriTemplate : resource . uri ,
479+ } ) ;
480+ }
481+
482+ return prev ;
483+ } , [ ] ) ;
484+
485+ return c . json ( {
486+ result : {
487+ resourceTemplates : resources ,
488+ } ,
489+ } ) ;
490+ } ) ;
491+
449492 app . post (
450493 "/read" ,
451494 sValidator ( "json" , ReadResourceRequestSchema ) ,
0 commit comments