test

test

test

Category
Visit Server

README

Insecure MCP Demo

Overview

This project demonstrates a vulnerable MCP server and multiple clients, including a proof-of-concept attack client and also a good client. It is designed for educational purposes to showcase potential security vulnerabilities in MCP server.

Project Structure

  • vuln-mcp.py: Vulnerable MCP server exposing insecure tools.
  • good-mcp-client.py: Regular good client for normal interactions (insert/query records).
  • attack-mcp-client.py: Automated attack client that demonstrates exploitation of server vulnerabilities.
  • requirements.txt: Python dependencies for the project.

Features & Vulnerabilities

Exposed Server Tools

  1. insert_record
    • Inserts a name/address record into the database.
    • Vulnerability: Prone to SQL injection due to direct string interpolation of user input into SQL queries.
  2. query_records
    • Lists all records in the database.
    • Vulnerability: Exposes all data without authentication or access control.
  3. execute_sql
    • Executes arbitrary SQL queries provided by the client.
    • Vulnerability: Allows any SQL command, including destructive ones (e.g., data exfiltration, schema changes).
  4. get_env_variable
    • Returns the value of any environment variable requested.
    • Vulnerability: Leaks sensitive environment variables (e.g., secrets, API keys).

How to Run

1. Install Dependencies

pip install -r requirements.txt

2. Start the Server and Good Client

In one terminal:

python good-mcp-client.py vuln-mcp.py

Follow the prompts to insert/query records interactively.

3. Run the Attack Client

In another terminal:

python attack-mcp-client.py vuln-mcp.py

This will automatically:

  • Attempt SQL injection attacks
  • Execute arbitrary SQL queries
  • Attempt to read several common environment variables

Example Output

  • Attack client will show which payloads succeed or fail, and print out database contents and environment variable values if accessible.

Vulnerabilities Demonstrated

  • SQL Injection: User input is unsanitized, allowing attackers to manipulate SQL logic and insert arbitrary data.
  • Arbitrary Code Execution: The execute_sql tool allows attackers to run any SQL command, including data theft or destruction.
  • Sensitive Data Exposure: The get_env_variable tool allows attackers to read secrets and configuration values.
  • Lack of Access Control: Anyone can run all tools and access all data without authentication.

Mitigation Strategies

To secure a real-world MCP server, you should:

  1. Use Parameterized Queries:
    • Always use parameter substitution instead of string interpolation for SQL queries to prevent injection.
    • Example (secure):
      cursor.execute("INSERT INTO records (name, address) VALUES (?, ?)", (name, address))
      
  2. Restrict Dangerous Tools:
    • Remove or strictly limit tools like execute_sql and get_env_variable.
    • Only expose necessary functionality.
  3. Implement Authentication & Authorization:
    • Require users to authenticate and check permissions before allowing access to sensitive tools or data.
  4. Validate and Sanitize Input:
    • Check and sanitize all user inputs, especially those that interact with the database or system.
  5. Limit Environment Variable Access:
    • Only allow access to non-sensitive variables, or remove this tool entirely.
  6. Audit and Monitor Usage:
    • Log all tool invocations and monitor for suspicious or abusive behavior.
  7. Principle of Least Privilege:
    • Run the server with minimal privileges and restrict database and OS access as much as possible.

Disclaimer

This project is for educational and demonstration purposes only. Do not deploy this code in production environments.


For questions or further improvements, please open an issue or contact the project maintainer.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured