使用说明
安全MCP网关和开发人员支架
该存储库为模型上下文协议(MCP)服务器提供了一个“设计安全”的代理和脚手架基础。它公开了一个由LiteLLM支持的OpenAI/Anthopic兼容的API,同时安全地将请求代理到:
- 谷歌顶点AI(克劳德,双子座)
- AWS基岩(克劳德)
- 当地Olama模型
所有的身份验证、审计和治理都集中在代理中——工具永远不需要云凭据。
概述
许多组织需要专有的MCP服务器来保持对数据和逻辑的控制。该项目通过以下方式简化了生命周期:
-
隐藏复杂性:将云身份验证(OAuth、ADC、IAM)转换为标准API-key标头。
-
安全第一:用于身份验证、访问控制、日志记录和策略执行的单个可审计网关。
-
开发者DX:提供“黄金模板”,使开发人员可以专注于构建工具,而不是基础设施。
建筑
┌──────────────┐
│ Tools / CLIs │ (Claude Code, MCP servers, agents)
└──────┬───────┘
│ Authorization: Bearer PROXY_MASTER_KEY
▼
┌──────────────────────┐
│ LiteLLM MCP Gateway │ (localhost:4000)
│ - Auth enforcement │
│ - Model routing │
│ - Audit logging │
└──────┬───────────────┘
│
├─ Vertex AI (ADC / OAuth)
├─ AWS Bedrock (IAM)
└─ Ollama (local)
先决条件
- Docker&Docker编写
- 以下一项或多项:
- 谷歌云SDK(用于顶点AI)
- AWS CLI(适用于基岩)
- Ollama(适用于本地车型)
设置
1.使用谷歌云(Vertex AI)进行身份验证
此设置使用应用程序默认凭据(ADC),而不是管理服务帐户JSON文件:
gcloud auth application-default login
这将在以下位置创建凭据:
~/.config/gcloud/
它们以只读方式安装到容器中。
2.使用AWS(Bedrock)进行身份验证
如果您计划使用基岩模型:
aws sts get-caller-identity
如果尚未配置:
aws configure
所需IAM权限:
bedrock:InvokeModel
bedrock:InvokeModelWithResponseStream
凭据从以下位置读取:
~/.aws/
3.配置环境变量
创建一个 .env 根目录中的文件:
# GCP Configuration
GCP_PROJECT="your-project-id"
GCP_LOCATION="us-east5"
# Security: Generate a Master Key for your local tools
# Run: openssl rand -hex 16
PROXY_MASTER_KEY="sk-your-generated-key-here"
4.启动网关
docker-compose up -d
网关现在正在运行 http://localhost:4000.
如何使用网关
网关使用与OpenAI兼容的API。
1.列出型号
curl http://localhost:4000/v1/models \
-H "Authorization: Bearer $PROXY_MASTER_KEY"
2.聊天完成(curl)
curl http://localhost:4000/v1/chat/completions \
-H "Authorization: Bearer $PROXY_MASTER_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "llama-local",
"messages": [
{ "role": "user", "content": "What model are you?" }
]
}'
3.使用克劳德代码
将克劳德代码指向代理:
export CLAUDE_CODE_BASE_URL="http://localhost:4000/v1"
export ANTHROPIC_API_KEY="$PROXY_MASTER_KEY"
现在,Claude Code将:
- 发送Anthropic风格请求
- 使用代理进行身份验证
- 顶点/基岩/局部模型的代理路由
不需要云密钥。
4.与OpenAI兼容的SDK一起使用
from openai import OpenAI
import os
client = OpenAI(
base_url="http://localhost:4000/v1",
api_key=os.environ["PROXY_MASTER_KEY"]
)
resp = client.chat.completions.create(
model="llama-local",
messages=[{"role": "user", "content": "Hello"}]
)
print(resp.choices[0].message.content)
许可证
该项目根据GPL-3.0许可证获得许可。
