diff --git a/src/everything/everything.ts b/src/everything/everything.ts index 2abce9a0..2d06c713 100644 --- a/src/everything/everything.ts +++ b/src/everything/everything.ts @@ -86,6 +86,15 @@ const GetResourceReferenceSchema = z.object({ .describe("ID of the resource to reference (1-100)"), }); +const GetResourceLinksSchema = z.object({ + count: z + .number() + .min(1) + .max(10) + .default(3) + .describe("Number of resource links to return (1-10)"), +}); + enum ToolName { ECHO = "echo", ADD = "add", @@ -95,6 +104,7 @@ enum ToolName { GET_TINY_IMAGE = "getTinyImage", ANNOTATED_MESSAGE = "annotatedMessage", GET_RESOURCE_REFERENCE = "getResourceReference", + GET_RESOURCE_LINKS = "getResourceLinks", } enum PromptName { @@ -117,7 +127,7 @@ export const createServer = () => { logging: {}, completions: {}, }, - instructions + instructions, } ); @@ -164,13 +174,12 @@ export const createServer = () => { server.notification(message); }, 20000); - // Set up update interval for stderr messages stdErrUpdateInterval = setInterval(() => { const shortTimestamp = new Date().toLocaleTimeString([], { hour: "2-digit", minute: "2-digit", - second: "2-digit" + second: "2-digit", }); server.notification({ method: "notifications/stderr", @@ -459,6 +468,12 @@ export const createServer = () => { "Returns a resource reference that can be used by MCP clients", inputSchema: zodToJsonSchema(GetResourceReferenceSchema) as ToolInput, }, + { + name: ToolName.GET_RESOURCE_LINKS, + description: + "Returns multiple resource links that reference different types of resources", + inputSchema: zodToJsonSchema(GetResourceLinksSchema) as ToolInput, + }, ]; return { tools }; @@ -648,6 +663,42 @@ export const createServer = () => { return { content }; } + if (name === ToolName.GET_RESOURCE_LINKS) { + const { count } = GetResourceLinksSchema.parse(args); + const content = []; + + // Add intro text + content.push({ + type: "text", + text: `Here are ${count} resource links to resources available in this server:`, + }); + + // Return resource links to actual resources from ALL_RESOURCES + const actualCount = Math.min(count, ALL_RESOURCES.length); + for (let i = 0; i < actualCount; i++) { + const resource = ALL_RESOURCES[i]; + content.push({ + type: "resource_link", + uri: resource.uri, + name: resource.name, + description: `Resource ${i + 1}: ${ + resource.mimeType === "text/plain" + ? "plaintext resource" + : "binary blob resource" + }`, + mimeType: resource.mimeType, + }); + } + + // Add summary text + content.push({ + type: "text", + text: `\nThese resource links reference actual resources available through the resources/read endpoint.`, + }); + + return { content }; + } + throw new Error(`Unknown tool: ${name}`); });