安全演示工具

一个专注于安全的演示项目,展示如何构建和运行MCP服务器,并通过内置的MCP客户端与之交互,适用于开发人员培训和研讨会。

  • by raphgm
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 raphgm/mcpsecuritydemo

使用说明

🛡️ MCP安全迎宾器——演示项目

一个简单的、以安全为重点的演示,展示如何构建和运行 模型上下文协议(MCP) 服务器,并使用内置的MCP客户端与之交互。 此演示专为研讨会、培训课程和开发人员入职培训而设计。


📌 这个演示教了什么

该项目展示了 安全工具调用 使用MCP:

✔️ 参与者学到了什么

  • MCP服务器的工作原理
  • 如何安全地验证用户输入
  • 如何使用STDIO传输运行服务器
  • 如何使用内置的MCP客户端调用工具
  • “默认安全”验证如何防止滥用

✔️ 为什么MCP安全很重要

MCP允许开发人员安全地向LLM公开工具。 但是 人工智能模型可能会被欺骗发送恶意输入,因此工具必须:

  • 验证每个输入
  • 拒绝可疑模式
  • 只返回安全内容

此演示显示 安全输入和不安全输入之间的区别.


⚙️ 项目结构

mcpdemo/
│
├── server.py       # MCP server with input validation
├── client.py       # Python MCP client calling the server
├── requirements.txt
└── README.md

🚀 分步设置指南

1.️⃣ 创建项目文件夹

mkdir mcpdemo
cd mcpdemo

2.️⃣ 创建Python虚拟环境(Mac)

为什么? venv保持依赖关系隔离,因此全局系统不受影响。

python3 -m venv venv
source venv/bin/activate

3.️⃣ 创建 requirements.txt

为什么? 因此,环境可以安装服务器和客户端所需的确切软件包。

touch requirements.txt

在里面加上这个:

fastmcp==2.13.1

安装所有内容:

pip install -r requirements.txt

4.️⃣ 创建MCP安全迎宾服务器(server.py)

为什么? 此文件公开了一个名为 问候,验证名称,并演示安全的错误处理。

from fastmcp import FastMCP, tool

app = FastMCP("safe-greeter")

def is_valid_name(name: str) -> bool:
    return name.replace(" ", "").isalpha()

@tool
def greet(name: str):
    if not is_valid_name(name):
        return {"error": "Invalid name — only letters and spaces allowed."}
    return {"message": f"Hello, {name}!"}

if __name__ == "__main__":
    app.run()

🔐 为什么这很重要

这 is_valid_name() 过滤器防止:

  • 代码注入
  • 提示注入
  • Script标签
  • 类似SQL的有效载荷
  • Shell 命令

这展示了MCP的 输入级安全.


5.️⃣ 创建MCP客户端(client.py)

为什么? 模拟人工智能模型或外部程序如何调用您的MCP服务器。

import asyncio
from fastmcp.client import Client

async def main():
    async with Client(
        transport="python3 server.py"
    ) as client:
        resp = await client.call_tool("greet", {"name": "Raphael"})
        print("Valid input:", resp)

        resp = await client.call_tool("greet", {"name": "Raphael123!!"})
        print("Bad input:", resp)

asyncio.run(main())

6.️⃣ 运行演示

启动客户端(自动启动服务器)

python3 client.py

预期输出

Valid input: {"message": "Hello, Raphael!"}

Bad input: {"error": "Invalid name — only letters and spaces allowed."}

您还将看到FastMCP启动:

FastMCP 2.13.1
Server: safe-greeter
Transport: STDIO

🧠 是什么让这成为一个好的MCP安全演示?

🔒 1.输入验证清晰

演示直观地显示了:

  • 良好的输入→ 接受
  • 输入错误→ 拒绝

非常适合现场解释。

🧪 2.易于修改

参与者可以尝试用以下方式打破它:

  • "Robert'); DROP TABLE Students;--"
  • "<script>alert(1)</script>"
  • "$(rm -rf ~)"

所有这些都将被安全地拒绝。

🚀 3.演示现实世界中MCP的使用

MCP工具正是这样集成到:

  • AI代理
  • ChatGPT自定义工具
  • 自动化系统
  • 保护管道

📚 其他学习想法

您可以通过以下方式扩展此演示:

  • 日志中间件
  • 速率限制
  • 基于角色的访问
  • 基于令牌的授权
  • 更多经过验证的工具(例如,电子邮件验证器、文件安全分析器)

🙌 鸣谢

为MCP安全研讨会创建 拉斐尔·加布·莫莫.