diff --git a/README.md b/README.md index 17f72fe6..052de03e 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,9 @@ Official integrations are maintained by companies building production ready MCP - **[Obsidian Markdown Notes](https://github.com/calclavia/mcp-obsidian)** - Read and search through your Obsidian vault or any directory containing Markdown notes - E2B Logo **[E2B](https://github.com/e2b-dev/mcp-server)** - Run code in secure sandboxes hosted by [E2B](https://e2b.dev) - Exa Logo **[Exa](https://github.com/exa-labs/exa-mcp-server)** - Search Engine made for AIs by [Exa](https://exa.ai) +- **[JetBrains](https://github.com/JetBrains/mcp-jetbrains)** – Work on your code with JetBrains IDEs - **[Neon](https://github.com/neondatabase/mcp-server-neon)** - Interact with the Neon serverless Postgres platform +- Neo4j Logo **[Neo4j](https://github.com/neo4j-contrib/mcp-neo4j/)** - Neo4j graph database server (schema + read/write-cypher) and separate graph database backed memory - Tinybird Logo **[Tinybird](https://github.com/tinybirdco/mcp-tinybird)** - Interact with Tinybird serverless ClickHouse platform - [Search1API](https://github.com/fatwang2/search1api-mcp) - One API for Search, Crawling, and Sitemaps - **[Qdrant](https://github.com/qdrant/mcp-server-qdrant/)** - Implement semantic memory layer on top of the Qdrant vector search engine @@ -60,7 +62,7 @@ A growing set of community-developed and maintained servers demonstrates various - **[Spotify](https://github.com/varunneal/spotify-mcp)** - This MCP allows an LLM to play and use Spotify. - **[Inoyu](https://github.com/sergehuber/inoyu-mcp-unomi-server)** - Interact with an Apache Unomi CDP customer data platform to retrieve and update customer profiles - **[Vega-Lite](https://github.com/isaacwasserman/mcp-vegalite-server)** - Generate visualizations from fetched data using the VegaLite format and renderer. -- **[Snowflake](https://github.com/datawiz168/mcp-snowflake-service)** - This MCP server enables LLMs to interact with Snowflake databases, allowing for secure and controlled data operations. +- **[Snowflake](https://github.com/isaacwasserman/mcp-snowflake-server)** - This MCP server enables LLMs to interact with Snowflake databases, allowing for secure and controlled data operations. - **[MySQL](https://github.com/designcomputer/mysql_mcp_server)** (by DesignComputer) - MySQL database integration in Python with configurable access controls and schema inspection - **[MySQL](https://github.com/benborla/mcp-server-mysql)** (by benborla) - MySQL database integration in NodeJS with configurable access controls and schema inspection - **[MSSQL](https://github.com/aekanun2020/mcp-server/)** - MSSQL database integration with configurable access controls and schema inspection @@ -80,15 +82,28 @@ A growing set of community-developed and maintained servers demonstrates various - **[Docker](https://github.com/ckreiling/mcp-server-docker)** - Integrate with Docker to manage containers, images, volumes, and networks. - **[Kubernetes](https://github.com/Flux159/mcp-server-kubernetes)** - Connect to Kubernetes cluster and manage pods, deployments, and services. - **[OpenAPI](https://github.com/snaggle-ai/openapi-mcp-server)** - Interact with [OpenAPI](https://www.openapis.org/) APIs. -- **[Pandoc](https://github.com/vivekVells/mcp-pandoc)** - MCP server for seamless document format conversion using Pandoc, supporting Markdown, HTML, and plain text, with other formats like PDF, csv and docx in development. +- **[Pandoc](https://github.com/vivekVells/mcp-pandoc)** - MCP server for seamless document format conversion using Pandoc, supporting Markdown, HTML, and plain text, with other formats like PDF, csv and docx in development. +- **[Pinecone](https://github.com/sirmews/mcp-pinecone)** - MCP server for searching and uploading records to Pinecone. Allows for simple RAG features, leveraging Pinecone's Inference API. - **[HuggingFace Spaces](https://github.com/evalstate/mcp-hfspace)** - Server for using HuggingFace Spaces, supporting Open Source Image, Audio, Text Models and more. Claude Desktop mode for easy integration. - **[ChatSum](https://github.com/chatmcp/mcp-server-chatsum)** - Query and Summarize chat messages with LLM. by [mcpso](https://mcp.so) - **[Rememberizer AI](https://github.com/skydeckai/mcp-server-rememberizer)** - An MCP server designed for interacting with the Rememberizer data source, facilitating enhanced knowledge retrieval. +- **[FlightRadar24](https://github.com/sunsetcoder/flightradar24-mcp-server)** - A Claude Desktop MCP server that helps you track flights in real-time using Flightradar24 data. - **[X (Twitter)](https://github.com/vidhupv/x-mcp)** (by vidhupv) - Create, manage and publish X/Twitter posts directly through Claude chat. - **[X (Twitter)](https://github.com/EnesCinr/twitter-mcp)** (by EnesCinr) - Interact with twitter API. Post tweets and search for tweets by query. - **[RAG Web Browser](https://github.com/apify/mcp-server-rag-web-browser)** An MCP server for Apify's RAG Web Browser Actor to perform web searches, scrape URLs, and return content in Markdown. - **[XMind](https://github.com/apeyroux/mcp-xmind)** - Read and search through your XMind directory containing XMind files. - **[oatpp-mcp](https://github.com/oatpp/oatpp-mcp)** - C++ MCP integration for Oat++. Use [Oat++](https://oatpp.io) to build MCP servers. +- **[Contentful-mcp](https://github.com/ivo-toby/contentful-mcp)** - Read, update, delete, publish content in your [Contentful](https://contentful.com) space(s) from this MCP Server. +- **[Home Assistant](https://github.com/tevonsb/homeassistant-mcp)** - Interact with [Home Assistant](https://www.home-assistant.io/) including viewing and controlling lights, switches, sensors, and all other Home Assistant entities. +- **[cognee-mcp](https://github.com/topoteretes/cognee-mcp-server)** - GraphRAG memory server with customizable ingestion, data processing and search +- **[Airtable](https://github.com/domdomegg/airtable-mcp-server)** - Read and write access to [Airtable](https://airtable.com/) databases, with schema inspection. +- **[mcp-k8s-go](https://github.com/strowk/mcp-k8s-go)** - Golang-based Kubernetes server for MCP to browse pods and their logs, events, namespaces and more. Built to be extensible. +- **[Notion](https://github.com/v-3/notion-server)** (by v-3) - Notion MCP integration. Search, Read, Update, and Create pages through Claude chat. +- **[Notion](https://github.com/suekou/mcp-notion-server)** (by suekou) - Interact with Notion API. +- **[TMDB](https://github.com/Laksh-star/mcp-server-tmdb)** - This MCP server integrates with The Movie Database (TMDB) API to provide movie information, search capabilities, and recommendations. +- **[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. +- **[Fetch](https://github.com/zcaceres/fetch-mcp)** - A server that flexibly fetches HTML, JSON, Markdown, or plaintext ## 📚 Resources diff --git a/src/everything/README.md b/src/everything/README.md index b00a6635..c4255f6f 100644 --- a/src/everything/README.md +++ b/src/everything/README.md @@ -1,4 +1,4 @@ -# Everything MCP Server +# Everything MCP Server This MCP server attempts to exercise all the features of the MCP protocol. It is not intended to be a useful server, but rather a test server for builders of MCP clients. It implements prompts, tools, resources, sampling, and more to showcase MCP capabilities. @@ -15,7 +15,7 @@ This MCP server attempts to exercise all the features of the MCP protocol. It is 2. `add` - Adds two numbers together - Inputs: - - `a` (number): First number + - `a` (number): First number - `b` (number): Second number - Returns: Text result of the addition @@ -27,7 +27,7 @@ This MCP server attempts to exercise all the features of the MCP protocol. It is - Returns: Completion message with duration and steps - Sends progress notifications during execution -4. `sampleLLM` +4. `sampleLLM` - Demonstrates LLM sampling capability using MCP sampling feature - Inputs: - `prompt` (string): The prompt to send to the LLM @@ -39,17 +39,23 @@ This MCP server attempts to exercise all the features of the MCP protocol. It is - No inputs required - Returns: Base64 encoded PNG image data +6. `printEnv` + - Prints all environment variables + - Useful for debugging MCP server configuration + - No inputs required + - Returns: JSON string of all environment variables + ### Resources The server provides 100 test resources in two formats: -- Even numbered resources: +- Even numbered resources: - Plaintext format - URI pattern: `test://static/resource/{even_number}` - Content: Simple text description - Odd numbered resources: - Binary blob format - - URI pattern: `test://static/resource/{odd_number}` + - URI pattern: `test://static/resource/{odd_number}` - Content: Base64 encoded binary data Resource features: diff --git a/src/everything/everything.ts b/src/everything/everything.ts index a31cd7f0..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, @@ -40,6 +41,8 @@ const LongRunningOperationSchema = z.object({ steps: z.number().default(5).describe("Number of steps in the operation"), }); +const PrintEnvSchema = z.object({}); + const SampleLLMSchema = z.object({ prompt: z.string().describe("The prompt to send to the LLM"), maxTokens: z @@ -48,12 +51,20 @@ 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 { ECHO = "echo", ADD = "add", LONG_RUNNING_OPERATION = "longRunningOperation", + PRINT_ENV = "printEnv", SAMPLE_LLM = "sampleLLM", GET_TINY_IMAGE = "getTinyImage", } @@ -297,6 +308,11 @@ export const createServer = () => { description: "Adds two numbers", inputSchema: zodToJsonSchema(AddSchema) as ToolInput, }, + { + name: ToolName.PRINT_ENV, + description: "Prints all environment variables, helpful for debugging MCP server configuration", + inputSchema: zodToJsonSchema(PrintEnvSchema) as ToolInput, + }, { name: ToolName.LONG_RUNNING_OPERATION, description: @@ -374,6 +390,17 @@ export const createServer = () => { }; } + if (name === ToolName.PRINT_ENV) { + return { + content: [ + { + type: "text", + text: JSON.stringify(process.env, null, 2), + }, + ], + }; + } + if (name === ToolName.SAMPLE_LLM) { const validatedArgs = SampleLLMSchema.parse(args); const { prompt, maxTokens } = validatedArgs; @@ -412,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; diff --git a/src/git/README.md b/src/git/README.md index 31e4edbb..8f3afdc7 100644 --- a/src/git/README.md +++ b/src/git/README.md @@ -73,6 +73,12 @@ Please note that mcp-server-git is currently in early development. The functiona - `repo_path` (string): Path to Git repository - `branch_name` (string): Name of branch to checkout - Returns: Confirmation of branch switch +9. `git_show` + - Shows the contents of a commit + - Inputs: + - `repo_path` (string): Path to Git repository + - `revision` (string): The revision (commit hash, branch name, tag) to show + - Returns: Contents of the specified commit ## Installation diff --git a/src/git/src/mcp_server_git/server.py b/src/git/src/mcp_server_git/server.py index dd796ee8..9b204c6e 100644 --- a/src/git/src/mcp_server_git/server.py +++ b/src/git/src/mcp_server_git/server.py @@ -52,6 +52,10 @@ class GitCheckout(BaseModel): repo_path: str branch_name: str +class GitShow(BaseModel): + repo_path: str + revision: str + class GitTools(str, Enum): STATUS = "git_status" DIFF_UNSTAGED = "git_diff_unstaged" @@ -63,6 +67,7 @@ class GitTools(str, Enum): LOG = "git_log" CREATE_BRANCH = "git_create_branch" CHECKOUT = "git_checkout" + SHOW = "git_show" def git_status(repo: git.Repo) -> str: return repo.git.status() @@ -113,6 +118,24 @@ def git_checkout(repo: git.Repo, branch_name: str) -> str: repo.git.checkout(branch_name) return f"Switched to branch '{branch_name}'" +def git_show(repo: git.Repo, revision: str) -> str: + commit = repo.commit(revision) + output = [ + f"Commit: {commit.hexsha}\n" + f"Author: {commit.author}\n" + f"Date: {commit.authored_datetime}\n" + f"Message: {commit.message}\n" + ] + if commit.parents: + parent = commit.parents[0] + diff = parent.diff(commit, create_patch=True) + else: + diff = commit.diff(git.NULL_TREE, create_patch=True) + for d in diff: + output.append(f"\n--- {d.a_path}\n+++ {d.b_path}\n") + output.append(d.diff.decode('utf-8')) + return "".join(output) + async def serve(repository: Path | None) -> None: logger = logging.getLogger(__name__) @@ -179,6 +202,11 @@ async def list_tools() -> list[Tool]: description="Switches branches", inputSchema=GitCheckout.schema(), ), + Tool( + name=GitTools.SHOW, + description="Shows the contents of a commit", + inputSchema=GitShow.schema(), + ) ] async def list_repos() -> Sequence[str]: @@ -290,6 +318,13 @@ async def call_tool(name: str, arguments: dict) -> list[TextContent]: text=result )] + case GitTools.SHOW: + result = git_show(repo, arguments["revision"]) + return [TextContent( + type="text", + text=result + )] + case _: raise ValueError(f"Unknown tool: {name}") diff --git a/src/google-maps/README.md b/src/google-maps/README.md index 962f031a..51a1b9e5 100644 --- a/src/google-maps/README.md +++ b/src/google-maps/README.md @@ -4,19 +4,19 @@ MCP Server for the Google Maps API. ## Tools -1. `geocode` +1. `maps_geocode` - Convert address to coordinates - Input: `address` (string) - Returns: location, formatted_address, place_id -2. `reverse_geocode` +2. `maps_reverse_geocode` - Convert coordinates to address - Inputs: - `latitude` (number) - `longitude` (number) - Returns: formatted_address, place_id, address_components -3. `search_places` +3. `maps_search_places` - Search for places using text query - Inputs: - `query` (string) @@ -24,12 +24,12 @@ MCP Server for the Google Maps API. - `radius` (optional): number (meters, max 50000) - Returns: array of places with names, addresses, locations -4. `get_place_details` +4. `maps_place_details` - Get detailed information about a place - Input: `place_id` (string) - Returns: name, address, contact info, ratings, reviews, opening hours -5. `get_distance_matrix` +5. `maps_distance_matrix` - Calculate distances and times between points - Inputs: - `origins` (string[]) @@ -37,12 +37,12 @@ MCP Server for the Google Maps API. - `mode` (optional): "driving" | "walking" | "bicycling" | "transit" - Returns: distances and durations matrix -6. `get_elevation` +6. `maps_elevation` - Get elevation data for locations - Input: `locations` (array of {latitude, longitude}) - Returns: elevation data for each point -7. `get_directions` +7. `maps_directions` - Get directions between points - Inputs: - `origin` (string)