项目简介

该项目是一个基于Model Context Protocol (MCP) 实现的后端服务器,专注于演示如何通过mTLS客户端证书和Biscuit加密授权令牌,为LLM应用提供企业级的多层安全上下文服务。它能够托管和管理数据库资源、执行SQL查询工具,并支持LLM生成SQL和可视化Prompt模板。其核心在于将传输层安全、令牌加密验证、数据库权限和行级安全(RLS)深度结合,构建了一个零信任架构。

主要功能点

  • 多层安全授权: 结合mTLS客户端证书和Biscuit令牌,实现传输层身份验证、令牌防篡改、数据库权限控制和行级数据过滤。
  • 上下文服务: 作为MCP服务器,提供标准化的方式向LLM客户端提供上下文信息,包括数据库Schema、数据访问等。
  • 工具集成: 注册并执行与数据库交互的工具(如连接管理、SQL查询、SQL执行计划、数据可视化元数据)。
  • Prompt模板: 定义并渲染Prompt模板,帮助LLM将自然语言转换为SQL查询,或生成数据可视化描述。
  • 数据库交互: 支持与PostgreSQL数据库进行安全、受控的交互,并利用数据库的行级安全特性。

安装步骤

  1. 克隆仓库:
    git clone https://github.com/esweiss/MCP-biscuit-PoC.git
    cd MCP-biscuit-PoC
  2. 安装Python依赖: 推荐使用'uv'包管理器:
    pip install uv
    uv sync
  3. 安装PostgreSQL数据库: 确保您的系统上已安装并运行PostgreSQL数据库(推荐搭配pgAdmin4)。
  4. 获取Anthropic API Key: 如果需要使用文本到SQL功能,请从Anthropic获取Claude API密钥。
  5. 生成证书: 进入'certs'目录并运行脚本生成mTLS所需的CA证书、服务器证书和客户端证书:
    cd certs
    ./create-ca.sh
    ./create-server-cert.sh
    ./create-client-cert.sh claude-client
    # 可选:为测试生成一个未经授权的客户端证书
    ./create-client-cert.sh unauthorized-hacker
    cd ..
  6. 生成Biscuit密钥并配置环境变量: 运行设置脚本将Biscuit密钥生成并写入'.env'文件。
    uv run python setup_enhanced_security_demo.py
    # 运行后,请根据提示重启终端或执行 'source .env' 加载环境变量。
  7. 数据库设置: 请根据项目'database/'目录下的说明,设置并填充PostgreSQL数据库(例如创建'healthcare_data'库并导入模拟数据)。

服务器配置

MCP客户端需要MCP服务器的连接信息来建立通信。以下是一个示例配置,您无需编写代码,只需理解其含义,并根据您的实际情况填充'YOUR_...'占位符:

{
  "server_name": "pg-mcp-server",
  "command": "python",
  "args": [
    "server/app.py"
  ],
  "env": {
    "LOG_LEVEL": "INFO",
    "ENABLE_TLS": "true",
    "BISCUIT_PUBLIC_KEY": "YOUR_GENERATED_BISCUIT_PUBLIC_KEY_HEX",
    "ANTHROPIC_API_KEY": "YOUR_ANTHROPIC_API_KEY",
    "DATABASE_URL": "postgresql://user:password@host:port/database_name"
  },
  "working_directory": "/path/to/MCP-biscuit-PoC",
  "protocol": "sse",
  "tls_config": {
    "ca_file": "certs/ca-cert.pem",
    "client_cert_file": "certs/claude-client-cert.pem",
    "client_key_file": "certs/claude-client-key.pem",
    "verify_server_hostname": false
  }
}

参数注释:

  • 'server_name': 服务器的唯一名称,此处为'pg-mcp-server'。
  • 'command': 启动服务器的可执行文件,这里是'python'。
  • 'args': 传递给'command'的参数列表,这里是运行'server/app.py'。
  • 'env': 环境变量,需要配置:
    • 'LOG_LEVEL': 日志级别(例如'INFO'、'DEBUG')。
    • 'ENABLE_TLS': 设为'true'以启用mTLS。
    • 'BISCUIT_PUBLIC_KEY': 步骤6中生成的Biscuit公共密钥的十六进制字符串。
    • 'ANTHROPIC_API_KEY': 您的Anthropic API密钥(如果需要LLM集成)。
    • 'DATABASE_URL': PostgreSQL数据库的连接字符串(例如'postgresql://user:password@localhost:5432/healthcare_data')。
  • 'working_directory': MCP仓库的根目录的绝对路径,例如'/home/user/MCP-biscuit-PoC'。
  • 'protocol': 通信协议,此处为'sse' (Server-Sent Events)。
  • 'tls_config': TLS配置,用于mTLS客户端证书验证:
    • 'ca_file': CA证书文件路径(相对于'working_directory')。
    • 'client_cert_file': 客户端证书文件路径(相对于'working_directory'),例如'claude-client-cert.pem'。
    • 'client_key_file': 客户端私钥文件路径(相对于'working_directory'),例如'claude-client-key.pem'。
    • 'verify_server_hostname': 是否验证服务器主机名,对于'localhost'通常设为'false'。

基本使用方法

  1. 启动MCP服务器: 在项目根目录的第一个终端中运行:
    PYTHONPATH=. uv run python server/app.py
    服务器将启动并监听'https://0.0.0.0:8443'。
  2. 运行互动式演示: 在另一个终端中运行:
    # 确保您已加载BISCUIT_PRIVATE_KEY和BISCUIT_PUBLIC_KEY环境变量
    uv run python demo_enhanced_security_interactive.py --user alice --interactive
    此脚本将启动一个交互式命令行界面,您可以在其中输入自然语言查询,它将通过Claude API生成SQL,并通过服务器的增强安全模型进行验证和执行。
  3. 运行安全测试: 要全面验证安全模型,可以在另一个终端中运行所有测试:
    uv run python run_all_security_tests.py
    这将执行一系列测试,包括授权访问、错误客户端身份、错误服务器受众、错误用户身份等场景,并提供详细的报告。

信息

分类

AI与计算