diff --git a/README.md b/README.md index 60f63885..58bc488f 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,7 @@ A growing set of community-developed and maintained servers demonstrates various - **[MongoDB](https://github.com/kiliczsh/mcp-mongo-server)** - A Model Context Protocol Server for MongoDB. - **[Airtable](https://github.com/felores/airtable-mcp)** - Airtable Model Context Protocol Server. - **[Google Tasks](https://github.com/zcaceres/gtasks-mcp)** - Google Tasks API Model Context Protocol Server. +- **[Fetch](https://github.com/zcaceres/fetch-mcp)** - A server that flexibly fetches HTML, JSON, Markdown, or plaintext ## 📚 Resources diff --git a/src/everything/everything.ts b/src/everything/everything.ts index f6b5dca5..e89dd192 100644 --- a/src/everything/everything.ts +++ b/src/everything/everything.ts @@ -1,6 +1,7 @@ import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { CallToolRequestSchema, + CompleteRequestSchema, CreateMessageRequest, CreateMessageResultSchema, GetPromptRequestSchema, @@ -50,6 +51,13 @@ const SampleLLMSchema = z.object({ .describe("Maximum number of tokens to generate"), }); +// Example completion values +const EXAMPLE_COMPLETIONS = { + style: ["casual", "formal", "technical", "friendly"], + temperature: ["0", "0.5", "0.7", "1.0"], + resourceId: ["1", "2", "3", "4", "5"], +}; + const GetTinyImageSchema = z.object({}); enum ToolName { @@ -431,6 +439,34 @@ export const createServer = () => { throw new Error(`Unknown tool: ${name}`); }); + server.setRequestHandler(CompleteRequestSchema, async (request) => { + const { ref, argument } = request.params; + + if (ref.type === "ref/resource") { + const resourceId = ref.uri.split("/").pop(); + if (!resourceId) return { completion: { values: [] } }; + + // Filter resource IDs that start with the input value + const values = EXAMPLE_COMPLETIONS.resourceId.filter(id => + id.startsWith(argument.value) + ); + return { completion: { values, hasMore: false, total: values.length } }; + } + + if (ref.type === "ref/prompt") { + // Handle completion for prompt arguments + const completions = EXAMPLE_COMPLETIONS[argument.name as keyof typeof EXAMPLE_COMPLETIONS]; + if (!completions) return { completion: { values: [] } }; + + const values = completions.filter(value => + value.startsWith(argument.value) + ); + return { completion: { values, hasMore: false, total: values.length } }; + } + + throw new Error(`Unknown reference type`); + }); + server.setRequestHandler(SetLevelRequestSchema, async (request) => { const { level } = request.params;