项目简介
该项目是一个基于Model Context Protocol (MCP) 实现的后端服务器,专注于演示如何通过mTLS客户端证书和Biscuit加密授权令牌,为LLM应用提供企业级的多层安全上下文服务。它能够托管和管理数据库资源、执行SQL查询工具,并支持LLM生成SQL和可视化Prompt模板。其核心在于将传输层安全、令牌加密验证、数据库权限和行级安全(RLS)深度结合,构建了一个零信任架构。
主要功能点
- 多层安全授权: 结合mTLS客户端证书和Biscuit令牌,实现传输层身份验证、令牌防篡改、数据库权限控制和行级数据过滤。
- 上下文服务: 作为MCP服务器,提供标准化的方式向LLM客户端提供上下文信息,包括数据库Schema、数据访问等。
- 工具集成: 注册并执行与数据库交互的工具(如连接管理、SQL查询、SQL执行计划、数据可视化元数据)。
- Prompt模板: 定义并渲染Prompt模板,帮助LLM将自然语言转换为SQL查询,或生成数据可视化描述。
- 数据库交互: 支持与PostgreSQL数据库进行安全、受控的交互,并利用数据库的行级安全特性。
安装步骤
- 克隆仓库:
git clone https://github.com/esweiss/MCP-biscuit-PoC.git cd MCP-biscuit-PoC - 安装Python依赖: 推荐使用'uv'包管理器:
pip install uv uv sync - 安装PostgreSQL数据库: 确保您的系统上已安装并运行PostgreSQL数据库(推荐搭配pgAdmin4)。
- 获取Anthropic API Key: 如果需要使用文本到SQL功能,请从Anthropic获取Claude API密钥。
- 生成证书: 进入'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 .. - 生成Biscuit密钥并配置环境变量: 运行设置脚本将Biscuit密钥生成并写入'.env'文件。
uv run python setup_enhanced_security_demo.py # 运行后,请根据提示重启终端或执行 'source .env' 加载环境变量。 - 数据库设置: 请根据项目'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'。
基本使用方法
- 启动MCP服务器: 在项目根目录的第一个终端中运行:
服务器将启动并监听'https://0.0.0.0:8443'。PYTHONPATH=. uv run python server/app.py - 运行互动式演示: 在另一个终端中运行:
此脚本将启动一个交互式命令行界面,您可以在其中输入自然语言查询,它将通过Claude API生成SQL,并通过服务器的增强安全模型进行验证和执行。# 确保您已加载BISCUIT_PRIVATE_KEY和BISCUIT_PUBLIC_KEY环境变量 uv run python demo_enhanced_security_interactive.py --user alice --interactive - 运行安全测试: 要全面验证安全模型,可以在另一个终端中运行所有测试:
这将执行一系列测试,包括授权访问、错误客户端身份、错误服务器受众、错误用户身份等场景,并提供详细的报告。uv run python run_all_security_tests.py
信息
分类
AI与计算