From b5a907263c77c2fa6bd40db38609cbf98b290ec6 Mon Sep 17 00:00:00 2001 From: Brian Buvinghausen Date: Tue, 1 Apr 2025 08:39:10 -0500 Subject: [PATCH 01/19] Fix docker warnings --- src/puppeteer/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/puppeteer/Dockerfile b/src/puppeteer/Dockerfile index d0f58a3a..6bcfbb97 100644 --- a/src/puppeteer/Dockerfile +++ b/src/puppeteer/Dockerfile @@ -1,12 +1,12 @@ FROM node:22-bookworm-slim -ENV DEBIAN_FRONTEND noninteractive +ENV DEBIAN_FRONTEND=noninteractive # for arm64 support we need to install chromium provided by debian # npm ERR! The chromium binary is not available for arm64. # https://github.com/puppeteer/puppeteer/issues/7740 -ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true +ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium RUN apt-get update && \ From c5de8bdf3f33090471199764370da9b0046ab59b Mon Sep 17 00:00:00 2001 From: Jun Date: Tue, 1 Apr 2025 22:28:22 -0500 Subject: [PATCH 02/19] Add a Puppeteer tool to capture screenshot as raw base64 text --- src/puppeteer/README.md | 8 ++++++ src/puppeteer/index.ts | 55 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/src/puppeteer/README.md b/src/puppeteer/README.md index 4eab314c..50f8b82e 100644 --- a/src/puppeteer/README.md +++ b/src/puppeteer/README.md @@ -21,6 +21,14 @@ A Model Context Protocol server that provides browser automation capabilities us - `width` (number, optional, default: 800): Screenshot width - `height` (number, optional, default: 600): Screenshot height +- **puppeteer_screenshot_encoded** + - Captures a screenshot of the entire page or a specific element and return it as a base64-encoded data URI. + - Inputs: + - `name` (string, required): Name for the screenshot + - `selector` (string, optional): CSS selector for element to screenshot + - `width` (number, optional, default: 800): Screenshot width + - `height` (number, optional, default: 600): Screenshot height + - **puppeteer_click** - Click elements on the page - Input: `selector` (string): CSS selector for element to click diff --git a/src/puppeteer/index.ts b/src/puppeteer/index.ts index 1849c783..feabec70 100644 --- a/src/puppeteer/index.ts +++ b/src/puppeteer/index.ts @@ -43,6 +43,20 @@ const TOOLS: Tool[] = [ required: ["name"], }, }, + { + name: "puppeteer_screenshot_encoded", + description: "Take a screenshot of the current page or a specific element and return it as a base64-encoded data URI", + inputSchema: { + type: "object", + properties: { + name: { type: "string", description: "Name for the screenshot" }, + selector: { type: "string", description: "CSS selector for element to screenshot" }, + width: { type: "number", description: "Width in pixels (default: 800)" }, + height: { type: "number", description: "Height in pixels (default: 600)" }, + }, + required: ["name"], + }, + }, { name: "puppeteer_click", description: "Click an element on the page", @@ -265,6 +279,47 @@ async function handleToolCall(name: string, args: any): Promise }; } + case "puppeteer_screenshot_encoded": { + const width = args.width ?? 800; + const height = args.height ?? 600; + await page.setViewport({ width, height }); + + const screenshot = await (args.selector + ? (await page.$(args.selector))?.screenshot({ encoding: "base64" }) + : page.screenshot({ encoding: "base64", fullPage: false })); + + if (!screenshot) { + return { + content: [ + { + type: "text", + text: args.selector ? `Element not found: ${args.selector}` : "Screenshot failed", + }, + ], + isError: true, + }; + } + + screenshots.set(args.name, screenshot as string); + server.notification({ + method: "notifications/resources/list_changed", + }); + + return { + content: [ + { + type: "text", + text: `Screenshot '${args.name}' taken at ${width}x${height}`, + } as TextContent, + { + type: "text", + text: `data:image/png;base64,${screenshot}`, + } as TextContent, + ], + isError: false, + }; + } + case "puppeteer_click": try { await page.click(args.selector); From c5dedbb343121e0e54708d8f24eade038a971cdc Mon Sep 17 00:00:00 2001 From: Ali Hashemi Date: Sat, 19 Apr 2025 10:57:44 -0300 Subject: [PATCH 03/19] chore: add rust mcp filesystem to community servers --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 38f1dada..bf92ac2c 100644 --- a/README.md +++ b/README.md @@ -348,6 +348,7 @@ A growing set of community-developed and maintained servers demonstrates various - **[Rquest](https://github.com/xxxbrian/mcp-rquest)** - An MCP server providing realistic browser-like HTTP request capabilities with accurate TLS/JA3/JA4 fingerprints for bypassing anti-bot measures. - **[Rijksmuseum](https://github.com/r-huijts/rijksmuseum-mcp)** - Interface with the Rijksmuseum API to search artworks, retrieve artwork details, access image tiles, and explore user collections. - **[Riot Games](https://github.com/jifrozen0110/mcp-riot)** - MCP server for League of Legends – fetch player info, ranks, champion stats, and match history via Riot API. +- **[Rust MCP Filesystem](https://github.com/rust-mcp-stack/rust-mcp-filesystem)** - Fast, asynchronous MCP server for efficient handling of various filesystem operations built with the power of Rust. - **[Salesforce MCP](https://github.com/smn2gnt/MCP-Salesforce)** - Interact with Salesforce Data and Metadata - **[Scholarly](https://github.com/adityak74/mcp-scholarly)** - A MCP server to search for scholarly and academic articles. - **[scrapling-fetch](https://github.com/cyberchitta/scrapling-fetch-mcp)** - Access text content from bot-protected websites. Fetches HTML/markdown from sites with anti-automation measures using Scrapling. From 2e25c60bfbaec752fe2c1739b05126d769d11ea8 Mon Sep 17 00:00:00 2001 From: VivekKumarNeu Date: Sat, 19 Apr 2025 18:32:45 -0700 Subject: [PATCH 04/19] add lucene mcp server --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a7eaf946..831b83e1 100644 --- a/README.md +++ b/README.md @@ -406,6 +406,7 @@ A growing set of community-developed and maintained servers demonstrates various - **[YouTube](https://github.com/Klavis-AI/klavis/tree/main/mcp_servers/youtube)** - Extract Youtube video information (with proxies support). - **[YouTube](https://github.com/ZubeidHendricks/youtube-mcp-server)** - Comprehensive YouTube API integration for video management, Shorts creation, and analytics. - **[mcp_weather](https://github.com/isdaniel/mcp_weather_server)** - Get weather information from https://api.open-meteo.com API. +- **[mcp-lucene-server](https://github.com/VivekKumarNeu/MCP-Lucene-Server)** - spring boot server using Lucene for fast document search and management. ## 📚 Frameworks From 943252994b7a07cfee459d41bc9da74cf5f4bd24 Mon Sep 17 00:00:00 2001 From: VivekKumarNeu Date: Sat, 19 Apr 2025 22:51:33 -0700 Subject: [PATCH 05/19] add lucene mcp server --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 831b83e1..7629a2c2 100644 --- a/README.md +++ b/README.md @@ -279,6 +279,7 @@ A growing set of community-developed and maintained servers demonstrates various - **[LINE](https://github.com/amornpan/py-mcp-line)** (by amornpan) - Implementation for LINE Bot integration that enables Language Models to read and analyze LINE conversations through a standardized interface. Features asynchronous operation, comprehensive logging, webhook event handling, and support for various message types. - **[LlamaCloud](https://github.com/run-llama/mcp-server-llamacloud)** (by marcusschiesser) - Integrate the data stored in a managed index on [LlamaCloud](https://cloud.llamaindex.ai/) - **[llm-context](https://github.com/cyberchitta/llm-context.py)** - Provides a repo-packing MCP tool with configurable profiles that specify file inclusion/exclusion patterns and optional prompts. +- **[lucene-mcp-server](https://github.com/VivekKumarNeu/MCP-Lucene-Server)** - spring boot server using Lucene for fast document search and management. - **[mac-messages-mcp](https://github.com/carterlasalle/mac_messages_mcp)** - An MCP server that securely interfaces with your iMessage database via the Model Context Protocol (MCP), allowing LLMs to query and analyze iMessage conversations. It includes robust phone number validation, attachment processing, contact management, group chat handling, and full support for sending and receiving messages. - **[MariaDB](https://github.com/abel9851/mcp-server-mariadb)** - MariaDB database integration with configurable access controls in Python. - **[Markdown2doc](https://github.com/Klavis-AI/klavis/tree/main/mcp_servers/pandoc)** - Convert between various file formats using Pandoc @@ -406,7 +407,7 @@ A growing set of community-developed and maintained servers demonstrates various - **[YouTube](https://github.com/Klavis-AI/klavis/tree/main/mcp_servers/youtube)** - Extract Youtube video information (with proxies support). - **[YouTube](https://github.com/ZubeidHendricks/youtube-mcp-server)** - Comprehensive YouTube API integration for video management, Shorts creation, and analytics. - **[mcp_weather](https://github.com/isdaniel/mcp_weather_server)** - Get weather information from https://api.open-meteo.com API. -- **[mcp-lucene-server](https://github.com/VivekKumarNeu/MCP-Lucene-Server)** - spring boot server using Lucene for fast document search and management. + ## 📚 Frameworks From 22df04f0007f51bc512f7660c9f53dafafc35fb6 Mon Sep 17 00:00:00 2001 From: VivekKumarNeu Date: Sat, 19 Apr 2025 22:57:32 -0700 Subject: [PATCH 06/19] add lucene mcp server --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 7629a2c2..0b01d771 100644 --- a/README.md +++ b/README.md @@ -408,7 +408,6 @@ A growing set of community-developed and maintained servers demonstrates various - **[YouTube](https://github.com/ZubeidHendricks/youtube-mcp-server)** - Comprehensive YouTube API integration for video management, Shorts creation, and analytics. - **[mcp_weather](https://github.com/isdaniel/mcp_weather_server)** - Get weather information from https://api.open-meteo.com API. - ## 📚 Frameworks These are high-level frameworks that make it easier to build MCP servers or clients. From 1037620edbdd2e1cdeb42945969c5f7ff10ddffd Mon Sep 17 00:00:00 2001 From: Kris Muhi Date: Tue, 29 Apr 2025 11:28:33 +0200 Subject: [PATCH 07/19] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 275f0667..7220c189 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,7 @@ Official integrations are maintained by companies building production ready MCP - **[Couchbase](https://github.com/Couchbase-Ecosystem/mcp-server-couchbase)** - Interact with the data stored in Couchbase clusters. - Dart Logo **[Dart](https://github.com/its-dart/dart-mcp-server)** - Interact with task, doc, and project data in [Dart](https://itsdart.com), an AI-native project management tool - DevHub Logo **[DevHub](https://github.com/devhub/devhub-cms-mcp)** - Manage and utilize website content within the [DevHub](https://www.devhub.com) CMS platform +- Dynatrace Logo **[Dynatrace](https://github.com/dynatrace-oss/dynatrace-mcp)** - Manage and interact with the [Dynatrace Platform ](https://www.dynatrace.com) for real-time observability and monitoring. - E2B Logo **[E2B](https://github.com/e2b-dev/mcp-server)** - Run code in secure sandboxes hosted by [E2B](https://e2b.dev) - EduBase Logo **[EduBase](https://github.com/EduBase/MCP)** - Interact with [EduBase](https://www.edubase.net), a comprehensive e-learning platform with advanced quizzing, exam management, and content organization capabilities - Elasticsearch Logo **[Elasticsearch](https://github.com/elastic/mcp-server-elasticsearch)** - Query your data in [Elasticsearch](https://www.elastic.co/elasticsearch) From 21c7a0673c85017a16fb2387ba11f1ae0b71b3f2 Mon Sep 17 00:00:00 2001 From: Kris Muhi Date: Tue, 29 Apr 2025 11:29:45 +0200 Subject: [PATCH 08/19] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7220c189..77da84db 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ Official integrations are maintained by companies building production ready MCP - **[Couchbase](https://github.com/Couchbase-Ecosystem/mcp-server-couchbase)** - Interact with the data stored in Couchbase clusters. - Dart Logo **[Dart](https://github.com/its-dart/dart-mcp-server)** - Interact with task, doc, and project data in [Dart](https://itsdart.com), an AI-native project management tool - DevHub Logo **[DevHub](https://github.com/devhub/devhub-cms-mcp)** - Manage and utilize website content within the [DevHub](https://www.devhub.com) CMS platform -- Dynatrace Logo **[Dynatrace](https://github.com/dynatrace-oss/dynatrace-mcp)** - Manage and interact with the [Dynatrace Platform ](https://www.dynatrace.com) for real-time observability and monitoring. +- Dynatrace Logo **[Dynatrace](https://github.com/dynatrace-oss/dynatrace-mcp)** - Manage and interact with the [Dynatrace Platform ](https://www.dynatrace.com/platform) for real-time observability and monitoring. - E2B Logo **[E2B](https://github.com/e2b-dev/mcp-server)** - Run code in secure sandboxes hosted by [E2B](https://e2b.dev) - EduBase Logo **[EduBase](https://github.com/EduBase/MCP)** - Interact with [EduBase](https://www.edubase.net), a comprehensive e-learning platform with advanced quizzing, exam management, and content organization capabilities - Elasticsearch Logo **[Elasticsearch](https://github.com/elastic/mcp-server-elasticsearch)** - Query your data in [Elasticsearch](https://www.elastic.co/elasticsearch) From 15e1b79b0d12fa095c56c9993b4d1193891f1c8c Mon Sep 17 00:00:00 2001 From: Shaofeng Shi Date: Fri, 18 Apr 2025 18:56:15 +0800 Subject: [PATCH 09/19] Add Apache Gravitino --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 275f0667..90c572b2 100644 --- a/README.md +++ b/README.md @@ -168,6 +168,7 @@ A growing set of community-developed and maintained servers demonstrates various - **[Amadeus](https://github.com/donghyun-chae/mcp-amadeus)** (by donghyun-chae) - An MCP server to access, explore, and interact with Amadeus Flight Offers Search API for retrieving detailed flight options, including airline, times, duration, and pricing data. - **[Anki](https://github.com/scorzeth/anki-mcp-server)** - An MCP server for interacting with your [Anki](https://apps.ankiweb.net) decks and cards. - **[Any Chat Completions](https://github.com/pyroprompts/any-chat-completions-mcp)** - Interact with any OpenAI SDK Compatible Chat Completions API like OpenAI, Perplexity, Groq, xAI and many more. +- **[Apache Gravitino(incubating)](https://github.com/datastrato/mcp-gravitino)** - Allow LLMs to explore metadata of structured data and unstructured data with Gravitino, and perform data governance tasks including tagging/classification. - **[Apple Calendar](https://github.com/Omar-v2/mcp-ical)** - An MCP server that allows you to interact with your MacOS Calendar through natural language, including features such as event creation, modification, schedule listing, finding free time slots etc. - **[Apple Script](https://github.com/peakmojo/applescript-mcp)** - MCP server that lets LLM run AppleScript code to to fully control anything on Mac, no setup needed. - **[Aranet4](https://github.com/diegobit/aranet4-mcp-server)** - MCP Server to manage your Aranet4 CO2 sensor. Fetch data and store in a local SQLite. Ask questions about historical data. From f5f0c65677eb47fca25804be1b0d8998e51ea24e Mon Sep 17 00:00:00 2001 From: Shaofeng Shi Date: Mon, 21 Apr 2025 10:54:17 +0800 Subject: [PATCH 10/19] minor, update the code repo name --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 90c572b2..2fba06c8 100644 --- a/README.md +++ b/README.md @@ -168,7 +168,7 @@ A growing set of community-developed and maintained servers demonstrates various - **[Amadeus](https://github.com/donghyun-chae/mcp-amadeus)** (by donghyun-chae) - An MCP server to access, explore, and interact with Amadeus Flight Offers Search API for retrieving detailed flight options, including airline, times, duration, and pricing data. - **[Anki](https://github.com/scorzeth/anki-mcp-server)** - An MCP server for interacting with your [Anki](https://apps.ankiweb.net) decks and cards. - **[Any Chat Completions](https://github.com/pyroprompts/any-chat-completions-mcp)** - Interact with any OpenAI SDK Compatible Chat Completions API like OpenAI, Perplexity, Groq, xAI and many more. -- **[Apache Gravitino(incubating)](https://github.com/datastrato/mcp-gravitino)** - Allow LLMs to explore metadata of structured data and unstructured data with Gravitino, and perform data governance tasks including tagging/classification. +- **[Apache Gravitino(incubating)](https://github.com/datastrato/mcp-server-gravitino)** - Allow LLMs to explore metadata of structured data and unstructured data with Gravitino, and perform data governance tasks including tagging/classification. - **[Apple Calendar](https://github.com/Omar-v2/mcp-ical)** - An MCP server that allows you to interact with your MacOS Calendar through natural language, including features such as event creation, modification, schedule listing, finding free time slots etc. - **[Apple Script](https://github.com/peakmojo/applescript-mcp)** - MCP server that lets LLM run AppleScript code to to fully control anything on Mac, no setup needed. - **[Aranet4](https://github.com/diegobit/aranet4-mcp-server)** - MCP Server to manage your Aranet4 CO2 sensor. Fetch data and store in a local SQLite. Ask questions about historical data. From afdf0bd26fb5f89641244feaf358208573b1ab80 Mon Sep 17 00:00:00 2001 From: Rohan Sharma <65773548+rohans2@users.noreply.github.com> Date: Thu, 1 May 2025 21:15:11 -0400 Subject: [PATCH 11/19] Add Google Sheets MCP Server This google sheets MCP Server is written in TypeScript. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 562a6e33..ffd4085f 100644 --- a/README.md +++ b/README.md @@ -271,6 +271,7 @@ A growing set of community-developed and maintained servers demonstrates various - **[Google Calendar](https://github.com/nspady/google-calendar-mcp)** - Google Calendar MCP Server for managing Google calendar events. Also supports searching for events by attributes like title and location. - **[Google Custom Search](https://github.com/adenot/mcp-google-search)** - Provides Google Search results via the Google Custom Search API - **[Google Sheets](https://github.com/xing5/mcp-google-sheets)** - Access and editing data to your Google Sheets. +- **[Google Sheets](https://github.com/rohans2/mcp-google-sheets)** - A MCP Server written in TypeScript to access and edit data in your Google Sheets. - **[Google Tasks](https://github.com/zcaceres/gtasks-mcp)** - Google Tasks API Model Context Protocol Server. - **[Google Vertex AI Search](https://github.com/ubie-oss/mcp-vertexai-search)** - Provides Google Vertex AI Search results by grounding a Gemini model with your own private data - **[GraphQL Schema](https://github.com/hannesj/mcp-graphql-schema)** - Allow LLMs to explore large GraphQL schemas without bloating the context. From f93911607b165c1e0b0f0a68b6ab9647b62adece Mon Sep 17 00:00:00 2001 From: cliffhall Date: Mon, 5 May 2025 13:09:38 -0400 Subject: [PATCH 12/19] Update `server-everything` to allow choosing the transport on the command line. # Run the default (stdio) server ```npx @modelcontextprotocol/server-everything``` # Or specify stdio explicitly ```npx @modelcontextprotocol/server-everything stdio``` # Run the SSE server ```npx @modelcontextprotocol/server-everything sse``` # Run the streamable HTTP server ```npx @modelcontextprotocol/server-everything streamableHttp``` * In src/everything/index.ts - refactor/extracted contents to stdio.ts - replaced with code that - Gets the single argument from the commandline as scriptName - switches on scriptName - imports the appropriate server script or outputs usage options - scripts run on import * In src/everything/stdio.ts - added console log "Starting default (STDIO) server..." * In src/everything/sse.ts - added console log "Starting SSE server..." * In src/everything/streamableHttp.ts - added console log "Starting Streamable HTTP server..." * This fixes #1594 --- src/everything/index.ts | 50 ++++++++++++++++++++------------ src/everything/sse.ts | 2 ++ src/everything/stdio.ts | 26 +++++++++++++++++ src/everything/streamableHttp.ts | 2 ++ 4 files changed, 62 insertions(+), 18 deletions(-) create mode 100644 src/everything/stdio.ts diff --git a/src/everything/index.ts b/src/everything/index.ts index c0ab77a2..801fe721 100644 --- a/src/everything/index.ts +++ b/src/everything/index.ts @@ -1,23 +1,37 @@ #!/usr/bin/env node -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; -import { createServer } from "./everything.js"; +// Parse command line arguments first +const args = process.argv.slice(2); +const scriptName = args[0] || 'stdio'; -async function main() { - const transport = new StdioServerTransport(); - const { server, cleanup } = createServer(); - - await server.connect(transport); - - // Cleanup on exit - process.on("SIGINT", async () => { - await cleanup(); - await server.close(); - process.exit(0); - }); +async function run() { + try { + // Dynamically import only the requested module to prevent all modules from initializing + switch (scriptName) { + case 'stdio': + // Import and run the default server + await import('./stdio.js'); + break; + case 'sse': + // Import and run the SSE server + await import('./sse.js'); + break; + case 'streamableHttp': + // Import and run the streamable HTTP server + await import('./streamableHttp.js'); + break; + default: + console.error(`Unknown script: ${scriptName}`); + console.log('Available scripts:'); + console.log('- stdio'); + console.log('- sse'); + console.log('- streamableHttp'); + process.exit(1); + } + } catch (error) { + console.error('Error running script:', error); + process.exit(1); + } } -main().catch((error) => { - console.error("Server error:", error); - process.exit(1); -}); +run(); diff --git a/src/everything/sse.ts b/src/everything/sse.ts index 7a02eb53..08d44654 100644 --- a/src/everything/sse.ts +++ b/src/everything/sse.ts @@ -2,6 +2,8 @@ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js"; import express from "express"; import { createServer } from "./everything.js"; +console.log('Starting SSE server...'); + const app = express(); const { server, cleanup } = createServer(); diff --git a/src/everything/stdio.ts b/src/everything/stdio.ts new file mode 100644 index 00000000..2c94fa35 --- /dev/null +++ b/src/everything/stdio.ts @@ -0,0 +1,26 @@ +#!/usr/bin/env node + +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { createServer } from "./everything.js"; + +console.log('Starting default (STDIO) server...'); + +async function main() { + const transport = new StdioServerTransport(); + const {server, cleanup} = createServer(); + + await server.connect(transport); + + // Cleanup on exit + process.on("SIGINT", async () => { + await cleanup(); + await server.close(); + process.exit(0); + }); +} + +main().catch((error) => { + console.error("Server error:", error); + process.exit(1); +}); + diff --git a/src/everything/streamableHttp.ts b/src/everything/streamableHttp.ts index 3a87bc83..2e4d52de 100644 --- a/src/everything/streamableHttp.ts +++ b/src/everything/streamableHttp.ts @@ -4,6 +4,8 @@ import express, { Request, Response } from "express"; import { createServer } from "./everything.js"; import { randomUUID } from 'node:crypto'; +console.log('Starting Streamable HTTP server...'); + const app = express(); const { server, cleanup } = createServer(); From f06dc654ff65bd4bd814bd9b4b4aacfa2a13aae6 Mon Sep 17 00:00:00 2001 From: cliffhall Date: Mon, 5 May 2025 13:33:25 -0400 Subject: [PATCH 13/19] Update `server-everything` to allow choosing the transport on the command line. * Update README.md --- src/everything/README.md | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/everything/README.md b/src/everything/README.md index 4d51de51..261ce033 100644 --- a/src/everything/README.md +++ b/src/everything/README.md @@ -173,7 +173,7 @@ Optionally, you can add it to a file called `.vscode/mcp.json` in your workspace } ``` -## Run with [HTTP+SSE Transport](https://modelcontextprotocol.io/specification/2024-11-05/basic/transports#http-with-sse) (deprecated as of [2025-03-26](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports)) +## Running from source with [HTTP+SSE Transport](https://modelcontextprotocol.io/specification/2024-11-05/basic/transports#http-with-sse) (deprecated as of [2025-03-26](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports)) ```shell cd src/everything @@ -181,10 +181,37 @@ npm install npm run start:sse ``` -## Run with [Streamable HTTP Transport](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http) +## Run from source with [Streamable HTTP Transport](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http) ```shell cd src/everything npm install npm run start:streamableHttp ``` + +## Running as an installed package +### Install +```shell +npm install -g @modelcontextprotocol/server-everything@latest +```` + +### Run the default (stdio) server +```shell +npx @modelcontextprotocol/server-everything +``` + +### Or specify stdio explicitly +```shell +npx @modelcontextprotocol/server-everything stdio +``` + +### Run the SSE server +```shell +npx @modelcontextprotocol/server-everything sse +``` + +### Run the streamable HTTP server +```shell +npx @modelcontextprotocol/server-everything streamableHttp +``` + From c4371d95d5d47171006f92585795cb29421ce712 Mon Sep 17 00:00:00 2001 From: cliffhall Date: Mon, 5 May 2025 18:00:44 -0400 Subject: [PATCH 14/19] Update `server-everything` to use the latest version of the SDK --- package-lock.json | 8 ++++---- src/everything/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 23e61d70..7555fa00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5435,7 +5435,7 @@ "version": "0.6.2", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.10.1", + "@modelcontextprotocol/sdk": "^1.11.0", "express": "^4.21.1", "zod": "^3.23.8", "zod-to-json-schema": "^3.23.5" @@ -5450,9 +5450,9 @@ } }, "src/everything/node_modules/@modelcontextprotocol/sdk": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.10.1.tgz", - "integrity": "sha512-xNYdFdkJqEfIaTVP1gPKoEvluACHZsHZegIoICX8DM1o6Qf3G5u2BQJHmgd0n4YgRPqqK/u1ujQvrgAxxSJT9w==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.0.tgz", + "integrity": "sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==", "license": "MIT", "dependencies": { "content-type": "^1.0.5", diff --git a/src/everything/package.json b/src/everything/package.json index ffe6b7cd..553db407 100644 --- a/src/everything/package.json +++ b/src/everything/package.json @@ -22,7 +22,7 @@ "start:streamableHttp": "node dist/streamableHttp.js" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.10.1", + "@modelcontextprotocol/sdk": "^1.11.0", "express": "^4.21.1", "zod": "^3.23.8", "zod-to-json-schema": "^3.23.5" From 51593d9a9a8c5bd5b4c1915d889f3eda961a4c77 Mon Sep 17 00:00:00 2001 From: Jun Date: Tue, 6 May 2025 02:46:41 -0500 Subject: [PATCH 15/19] add optional encoded param to puppeteer_screenshot for base64 output --- src/puppeteer/README.md | 9 +------- src/puppeteer/index.ts | 49 +++++------------------------------------ 2 files changed, 7 insertions(+), 51 deletions(-) diff --git a/src/puppeteer/README.md b/src/puppeteer/README.md index 5b31f4af..03646437 100644 --- a/src/puppeteer/README.md +++ b/src/puppeteer/README.md @@ -22,14 +22,7 @@ A Model Context Protocol server that provides browser automation capabilities us - `selector` (string, optional): CSS selector for element to screenshot - `width` (number, optional, default: 800): Screenshot width - `height` (number, optional, default: 600): Screenshot height - -- **puppeteer_screenshot_encoded** - - Captures a screenshot of the entire page or a specific element and return it as a base64-encoded data URI. - - Inputs: - - `name` (string, required): Name for the screenshot - - `selector` (string, optional): CSS selector for element to screenshot - - `width` (number, optional, default: 800): Screenshot width - - `height` (number, optional, default: 600): Screenshot height + - `encoded` (boolean, optional): If true, capture the screenshot as a base64-encoded data URI (as text) instead of binary image content. Default false. - **puppeteer_click** diff --git a/src/puppeteer/index.ts b/src/puppeteer/index.ts index feabec70..592e0cdc 100644 --- a/src/puppeteer/index.ts +++ b/src/puppeteer/index.ts @@ -242,6 +242,7 @@ async function handleToolCall(name: string, args: any): Promise case "puppeteer_screenshot": { const width = args.width ?? 800; const height = args.height ?? 600; + const encoded = args.encoded ?? false; await page.setViewport({ width, height }); const screenshot = await (args.selector ? @@ -269,52 +270,14 @@ async function handleToolCall(name: string, args: any): Promise type: "text", text: `Screenshot '${args.name}' taken at ${width}x${height}`, } as TextContent, - { + encoded ? ({ + type: "text", + text: `data:image/png;base64,${screenshot}`, + } as TextContent) : ({ type: "image", data: screenshot, mimeType: "image/png", - } as ImageContent, - ], - isError: false, - }; - } - - case "puppeteer_screenshot_encoded": { - const width = args.width ?? 800; - const height = args.height ?? 600; - await page.setViewport({ width, height }); - - const screenshot = await (args.selector - ? (await page.$(args.selector))?.screenshot({ encoding: "base64" }) - : page.screenshot({ encoding: "base64", fullPage: false })); - - if (!screenshot) { - return { - content: [ - { - type: "text", - text: args.selector ? `Element not found: ${args.selector}` : "Screenshot failed", - }, - ], - isError: true, - }; - } - - screenshots.set(args.name, screenshot as string); - server.notification({ - method: "notifications/resources/list_changed", - }); - - return { - content: [ - { - type: "text", - text: `Screenshot '${args.name}' taken at ${width}x${height}`, - } as TextContent, - { - type: "text", - text: `data:image/png;base64,${screenshot}`, - } as TextContent, + } as ImageContent), ], isError: false, }; From 69549cc8445ab9f4189c2c867b7b8f6cca2f8d78 Mon Sep 17 00:00:00 2001 From: cliffhall Date: Tue, 6 May 2025 10:26:47 -0400 Subject: [PATCH 16/19] Update `server-everything` to use the latest version of the SDK * In stdio.ts - change console.log to console.error --- src/everything/stdio.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/everything/stdio.ts b/src/everything/stdio.ts index 2c94fa35..a98fbc53 100644 --- a/src/everything/stdio.ts +++ b/src/everything/stdio.ts @@ -3,7 +3,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { createServer } from "./everything.js"; -console.log('Starting default (STDIO) server...'); +console.error('Starting default (STDIO) server...'); async function main() { const transport = new StdioServerTransport(); From e30f30868fb3b1ba488c5a6ae09f60c64ebe5bc7 Mon Sep 17 00:00:00 2001 From: cliffhall Date: Tue, 6 May 2025 10:27:49 -0400 Subject: [PATCH 17/19] Update `server-everything` to use the latest version of the SDK * In sse.ts & streamableHttp.ts - change console.log to console.error --- src/everything/sse.ts | 2 +- src/everything/streamableHttp.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/everything/sse.ts b/src/everything/sse.ts index 08d44654..928916c7 100644 --- a/src/everything/sse.ts +++ b/src/everything/sse.ts @@ -2,7 +2,7 @@ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js"; import express from "express"; import { createServer } from "./everything.js"; -console.log('Starting SSE server...'); +console.error('Starting SSE server...'); const app = express(); diff --git a/src/everything/streamableHttp.ts b/src/everything/streamableHttp.ts index 2e4d52de..e6486dfa 100644 --- a/src/everything/streamableHttp.ts +++ b/src/everything/streamableHttp.ts @@ -4,7 +4,7 @@ import express, { Request, Response } from "express"; import { createServer } from "./everything.js"; import { randomUUID } from 'node:crypto'; -console.log('Starting Streamable HTTP server...'); +console.error('Starting Streamable HTTP server...'); const app = express(); From 96352032fc21e64f068f7a08624084390b785f77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=BF=E3=81=AE=E3=82=8B=E3=82=93?= <74597894+minorun365@users.noreply.github.com> Date: Wed, 7 May 2025 00:10:50 +0900 Subject: [PATCH 18/19] Fixed README: Added NPX config for Claude Desktop --- src/gdrive/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gdrive/README.md b/src/gdrive/README.md index e8247f00..89eb21e0 100644 --- a/src/gdrive/README.md +++ b/src/gdrive/README.md @@ -84,7 +84,10 @@ Once authenticated, you can use the server in your app's server configuration: "args": [ "-y", "@modelcontextprotocol/server-gdrive" - ] + ], + "env": { + "GDRIVE_CREDENTIALS_PATH": "/path/to/.gdrive-server-credentials.json" + } } } } From 4bb9ec779e4218250fe2c2b9ef6087abc9ce1750 Mon Sep 17 00:00:00 2001 From: Jun Date: Tue, 6 May 2025 16:18:57 -0500 Subject: [PATCH 19/19] remove redundancy and update puppeteer_screenshot tool description --- src/puppeteer/index.ts | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/puppeteer/index.ts b/src/puppeteer/index.ts index 592e0cdc..63007799 100644 --- a/src/puppeteer/index.ts +++ b/src/puppeteer/index.ts @@ -39,20 +39,7 @@ const TOOLS: Tool[] = [ selector: { type: "string", description: "CSS selector for element to screenshot" }, width: { type: "number", description: "Width in pixels (default: 800)" }, height: { type: "number", description: "Height in pixels (default: 600)" }, - }, - required: ["name"], - }, - }, - { - name: "puppeteer_screenshot_encoded", - description: "Take a screenshot of the current page or a specific element and return it as a base64-encoded data URI", - inputSchema: { - type: "object", - properties: { - name: { type: "string", description: "Name for the screenshot" }, - selector: { type: "string", description: "CSS selector for element to screenshot" }, - width: { type: "number", description: "Width in pixels (default: 800)" }, - height: { type: "number", description: "Height in pixels (default: 600)" }, + encoded: { type: "boolean", description: "If true, capture the screenshot as a base64-encoded data URI (as text) instead of binary image content. Default false." }, }, required: ["name"], },