使用说明
项目简介
attestable-mcp-server 是一个基于 Model Context Protocol (MCP) 的服务器实现,其核心特点是远程可信证明 (Remote Attestation)。这意味着 MCP 客户端可以验证服务器端代码的完整性和运行环境的安全性,从而确保数据交互的机密性和可信度。该项目利用 Intel SGX 等可信执行环境技术和 RA-TLS 协议,为 MCP 应用提供更高级别的安全保障。
主要功能点
- MCP 服务器核心功能: 实现了 MCP 协议定义的核心服务器功能,包括资源管理、工具注册与执行、Prompt 模板支持等 (虽然仓库代码中目前只展示了工具功能,但框架已搭建完成)。
- 远程可信证明 (RA-TLS): 使用 RA-TLS 协议,允许 MCP 客户端验证服务器是否运行在可信执行环境 (TEE) 中,以及运行的代码是否与预期一致,增强数据安全性和服务可信度。
- 基于 Gramine 构建: 利用 Gramine 框架在 SGX 环境中运行服务器,简化 TEE 环境的部署和管理。
- 支持 SSE 和 Stdio 传输: 提供 SSE (Server-Sent Events) 和 Stdio 两种传输协议,方便不同场景下的客户端连接。
- Docker 部署: 提供 Docker 镜像,方便快速部署和运行服务器,支持在本地开发环境和安全硬件环境中运行。
安装步骤
-
安装依赖: 确保你的系统满足以下依赖:
- Intel SGX 硬件 (如果需要在 SGX 环境中运行)
- Gramine (用于 SGX 环境)
- Python 3.13 或更高版本
- Ubuntu 22.04 (推荐)
- Intel SGX SDK & PSW (如果需要在 SGX 环境中运行)
-
克隆仓库:
git clone https://github.com/co-browser/attestable-mcp-server.git cd attestable-mcp-server -
构建 Docker 镜像:
uv sync # 安装 Python 依赖 (使用 uv 工具,仓库中可能需要先安装 uv) docker build -t attestable-mcp-server . -
生成 SGX 密钥 (仅在 SGX 环境中需要):
gramine-sgx-gen-private-key -
构建 Gramine 镜像 (仅在 SGX 环境中需要):
git clone https://github.com/gramineproject/gsc docker/gsc cd docker/gsc uv run ./gsc build-gramine --rm --no-cache -c ../gramine_base.config.yaml gramine_base uv run ./gsc build -c ../attestable-mcp-server.config.yaml --rm attestable-mcp-server ../attestable-mcp-server.manifest uv run ./gsc sign-image -c ../attestable-mcp-server.config.yaml attestable-mcp-server "$HOME"/.config/gramine/enclave-key.pem uv run ./gsc info-image gsc-attestable-mcp-server
服务器配置
以下是 MCP 客户端连接 'attestable-mcp-server' 时所需的服务器配置信息 (JSON 格式)。客户端需要根据选择的传输协议 (SSE 或 Stdio) 以及运行环境 (安全硬件或本地开发机) 选择相应的配置。
1. SSE 传输 (安全硬件环境 - SGX):
{ "serverName": "attestable-mcp-server-sse-sgx", "command": "docker", "args": [ "run", "-itp", "--device=/dev/sgx_provision:/dev/sgx/provision", "--device=/dev/sgx_enclave:/dev/sgx/enclave", "-v", "/var/run/aesmd/aesm.socket:/var/run/aesmd/aesm.socket", "-p", "8000:8000", "--rm", "gsc-attestable-mcp-server", "python", "-m", "server", "--transport", "sse" ], "transport": "sse", "baseUrl": "https://your-server-ip:8000/sse" // 请替换为你的服务器 IP 地址或域名 }
参数注释:
- 'serverName': 服务器名称,客户端用于标识连接。
- 'command': 启动服务器的命令,这里使用 'docker'。
- 'args': Docker 运行参数,包括:
- 'run': Docker 运行命令。
- '-itp': 交互式终端,端口映射。
- '--device=/dev/sgx_provision:/dev/sgx/provision --device=/dev/sgx_enclave:/dev/sgx/enclave': 将 SGX 设备映射到 Docker 容器 (SGX 环境必需)。
- '-v /var/run/aesmd/aesm.socket:/var/run/aesmd/aesm.socket': 挂载 AESM socket 文件 (SGX 环境必需)。
- '-p 8000:8000': 将容器 8000 端口映射到主机 8000 端口。
- '--rm': 容器退出后自动删除。
- 'gsc-attestable-mcp-server': Gramine SGX 镜像名称。
- 'python', '-m', 'server', '--transport', 'sse': 在容器内执行的命令,启动 Python 服务器并指定 SSE 传输。
- 'transport': 传输协议,设置为 'sse'。
- 'baseUrl': SSE 连接的基础 URL,客户端通过此 URL 与服务器建立 SSE 连接。请务必将 'your-server-ip' 替换为你的服务器实际 IP 地址或域名。 由于使用了 RA-TLS,请使用 'https' 协议。
2. SSE 传输 (本地开发机):
{ "serverName": "attestable-mcp-server-sse-local", "command": "docker", "args": [ "run", "-p", "8000:8000", "--rm", "gsc-attestable-mcp-server", "python", "-m", "server", "--transport", "sse" ], "transport": "sse", "baseUrl": "http://localhost:8000/sse" // 本地开发机可以使用 http }
参数注释: 与 SGX 环境配置类似,但移除了 SGX 相关的设备和 socket 挂载参数。'baseUrl' 可以使用 'http' 协议进行本地测试。
3. Stdio 传输 (任何环境):
{ "serverName": "attestable-mcp-server-stdio", "command": "docker", "args": [ "run", "--rm", "gsc-attestable-mcp-server", "python", "-m", "server" // 默认 transport 为 stdio,可省略 "--transport stdio" ], "transport": "stdio" }
参数注释:
- 'transport': 传输协议,设置为 'stdio'。
- 无需 'baseUrl',Stdio 传输通过标准输入/输出流进行通信。
注意:
- 远程证明验证: 要充分利用远程证明功能,MCP 客户端需要支持 RA-TLS 协议,并配置相应的验证参数 (仓库中 'src/gramine-ratls/verify.py' 提供了客户端验证的示例代码,但需要集成到 MCP 客户端中)。
- 安全证书: 在生产环境中,建议配置有效的 SSL/TLS 证书,并使用 HTTPS 协议,以确保通信安全。 (当前配置使用了 'gramine-ratls' 生成的证书,用于 RA-TLS,但可能需要根据实际情况进行调整)。
- 工具功能: 当前仓库提供的示例服务器仅实现了一个 'fetch' 工具,你可以根据 MCP 协议规范扩展更多工具和资源管理功能。
基本使用方法
-
启动 MCP 服务器: 根据上述服务器配置,使用 MCP 客户端配置中提供的 'command' 和 'args' 启动服务器。例如,对于 SSE 传输 (安全硬件环境),在终端执行配置中 'args' 数组中的命令即可。
-
配置 MCP 客户端: 在你的 MCP 客户端应用中,配置连接到 'attestable-mcp-server'。 你需要提供服务器配置信息 (JSON) 给客户端,客户端会根据配置信息与服务器建立连接并进行通信。
-
调用工具: 客户端连接成功后,可以向服务器发送 MCP 请求,例如调用 'fetch' 工具来获取网页内容。具体的请求格式和参数需要参考 MCP 协议文档和客户端 SDK 的使用说明。
例如,使用 MCP 客户端 SDK (如 Python SDK) 调用 'fetch' 工具的示例代码 (伪代码,具体代码请参考 MCP 客户端 SDK 文档):
# 假设 client 是已连接到 MCP 服务器的 MCP 客户端实例 result = client.call_tool( tool_name="fetch", arguments={"url": "https://www.example.com"} ) print(result) # 打印获取的网页内容
请参考 MCP 协议文档和 MCP 客户端 SDK 的文档,了解更详细的使用方法和 API。
信息
分类
AI与计算