Trusted MCP是火山引擎推出的可信MCP解决方案,它在MCP协议的基础上,为MCP的核心组件提供了身份证明及验证能力,并提供了端到端的通信加密解决方案,确保MCP核心组件身份可信及通信安全,解决了MCP应用中存在的服务身份不可信、数据被篡改、流量劫持、数据隐私泄露等安全威胁。
Trusted MCP对MCP做了扩展,主要是在MCP协议的能力协商阶段,MCP Client和MCP Server会彼此判断对方是否部署在TEE中,并会对对方的远程证明报告进行验证,如果条件满足,会在jsonrpc中标记是否具有可信能力,在Client和Server后续的通信流程中,会根据该标记确定要不要启动通信加密功能。
sh build.sh
或
uv build
进入dist目录,安装SDK
version=0.0.1
pip install bytedance_jeddak_trusted_mcp-${version}-py3-none-any.whl
让MCP服务支持Trusted MCP协议非常简单,仅需要使用TrustedMcp代替FastMCP,并准备TEE相关的配置即可,其余只需要按照MCP的开发指引进行开发即可,如下所示是获取天气的MCP Server的示例:
from bytedance.jeddak_trusted_mcp import TrustedMcp
demo_mcp = TrustedMcp(name="demo")
@demo_mcp.tool()
def server_func(city: str) -> dict:
"""Get current weather for a city (e.g. "beijing")."""
import httpx
return (
httpx.get(f"https://wttr.in/{city}?format=j1")
.json()
.get("current_condition")[0]
)
为了方便后续调试,这里给出了一个简单的MCP Client的示例代码:
from bytedance.jeddak_trusted_mcp import trusted_mcp_client
MCP_URL = os.environ.get("MCP_URL", "http://***/mcp")
async def client_func(mcp_session: mcp.ClientSession) -> None:
"""Main chat session handler."""
tools = (await mcp_session.list_tools()).tools
pass
async def main() -> None:
"""Initialize and run the chat session."""
async with trusted_mcp_client(MCP_URL) as mcp_session:
logging.info("Client initialized")
await mcp_session.initialize()
logging.info("MCP session initialized")
await client_func(mcp_session)
logging.info("Exiting")
一个典型MCP应用主要包含三个模块,即Host、Client和Server,Host收到用户请求后,会请求LLM解析用户请求,并将其转化为结构化的工具调用输入,然后传输给Client。接下来,Client依据 Trusted MCP 协议,将密文参数传输给Server,得到对应的密文结果。随后,Client 会解密并把明文结果返回给用户。
Trusted MCP服务运行最佳实践是将各模块,包括大模型服务都运行在TEE环境中,这样能提供最完备的安全保障,但为了方便调试及功能验证,同时也支持将Trusted MCP服务运行在普通的非TEE环境中,在普通环境中运行时,Trusted MCP SDK仅为Client和Server提供机密通信能力。
首先,准备好一个RSA公私钥对(也可以通过openssl工具生成)
openssl genrsa -out ./myPrivateKey.pem 4096
openssl rsa -pubout -in ./myPrivateKey.pem -out ./myPublicKey.pem
启动Server(参考./demo/server.py)
python server.py
启动Host以及Client(参考./demo/local_client.py)
python local_client.py
# 注:运行前需要配置Server以及方舟模型信息等相关环境变量
# MCP_URL:MCP server地址,可选,缺省默认是http://127.0.0.1:8000/mcp
# LLM_API_KEY:火山方舟的API Key,必须,如果没有可以联系火山获取一个临时的API Key
# LLM_MODEL_NAME:方舟模型名称,可选,缺省默认是doubao-1.5-pro-32k-250115
当Trusted MCP服务部署在TEE环境中时,Client和Server会彼此验证对方的远程证明报告,我们以火山引擎的AICC机密计算平台为例
火山AK、SK请联系火山引擎AICC获取 将AK、SK填到Client和Server的配置文件中,参考 ./demo/client_config.json 以及 ./demo/server_config.json
{
"ra_service_name": "**", //服务在AICC中部署时的名称
"ra_policy_id": "**", //证明验证的policy信息
"ra_uid": "2100xxxxxx", //火山引擎账号ID
"bytedance_top_info": "{\"url\": \"open.volcengineapi.com\", \"ak\": \"***\", \"sk\": \"****\"}"
}
MCP Server运行配置
{
"tks_url": "***", //火山top网关地址
"tks_app_id": "2100xxxxxx",//火山引擎账号ID
"bytedance_top_info": "{\"ak\": \"***\", \"sk\": \"***\"}",
"refresh_interval": 3600
}
参考./demo/aicc_client.py 及 ./demo/aicc_server.py
详见火山引擎AICC
python ./demo/aicc_server.py
python ./demo/aicc_client.py
感谢火山引擎AICC项目组成员,倘若没有项目组成员的努力,该项目无法实现开源发布。期望本项目能够在AI智能体隐私保护领域,特别是在涉及用户数据安全的场景中,贡献一份力量。
MIT。
