Skip to content

Commit 8491e77

Browse files
fix: corrected the resource templates endpoint
1 parent a3467b6 commit 8491e77

File tree

2 files changed

+66
-17
lines changed

2 files changed

+66
-17
lines changed

examples/mcp-sdk/src/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ app.post(
4646
name: "Todo list",
4747
mimeType: "text/plain",
4848
},
49+
{
50+
type: "template",
51+
uri: "https://lorem.{ending}",
52+
name: "Todo list",
53+
mimeType: "text/plain",
54+
},
4955
]);
5056
}),
5157
);

packages/core/src/muppet.ts

Lines changed: 60 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { sValidator } from "@hono/standard-validator";
22
import {
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

Comments
 (0)