根据提供的信息,原文“eSIM Hub MCP API”翻译成中文为:“eSIM中心MCP API”
一个基于FastAPI的模型上下文协议(MCP)服务器,提供通过eSIM Hub服务管理eSIM套餐的工具。
概述
该项目实现了一个MCP服务器,该服务器将eSIM Hub功能作为工具暴露出来,供AI助手和其他MCP客户端使用。它提供了REST API接口和MCP工具,用于获取和购买eSIM套餐。
特点/功能
- MCP工具集成将eSIM Hub操作作为MCP工具暴露出来
- REST API(Representational State Transfer Application Programming Interface,表述性状态传递应用程序编程接口)基于FastAPI的HTTP端点
- 包管理获取所有可用的eSIM套餐
- 采购运营通过套餐代码购买eSIM套餐
- 健康监测健康检查端点
项目结构
esim-hub-mcp/
├── main.py # FastAPI app with MCP integration
├── requirements.txt # Python dependencies
├── .env # Environment configuration
├── .gitignore # Git ignore rules
├── config/
│ └── utils.py # Configuration utilities
├── dto/
│ ├── __init__.py
│ ├── bundle.py # Bundle data models
│ └── mapper.py # Data mapping utilities
└── services/
├── __init__.py
└── esim_hub_service.py # eSIM Hub API client安装
- 克隆仓库:
git clone
cd esim-hub-mcp- 创建一个虚拟环境:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate- 安装依赖项:
pip install -r requirements.txt- 配置环境变量:
创建一个 .env 在项目根目录中创建一个文件,包含以下变量:
ESIM_HUB_API_KEY=your_api_key_here
ESIM_MM_HUB_API_URL=https://mm-hub-api-software-qa.montylocal.net
ESIM_DIGITAL_SERVICE_URL=https://digital-services-api-software-qa.montylocal.net
ESIM_HUB_TENANT_KEY=your_tenant_key_here
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_USE_TLS=true
SMTP_USERNAME=your_username
SMTP_PASSWORD=your_password
SMTP_SENDER=noreply@yourdomain.com
SMTP_SENDER_NAME=Esim Support环境变量
| 变量 | 描述 | 必填 |
|---|---|---|
ESIM_HUB_API_KEY 用于eSIM Hub认证的API密钥 | 是 | |
ESIM_MM_HUB_API_URL MM Hub API的基础URL | 是 | |
ESIM_DIGITAL_SERVICE_URL 数字服务API的基线URL | 是 | |
ESIM_HUB_TENANT_KEY | 多租户访问的租户密钥 | 是 |
SMTP_SERVER | SMTP服务器主机名 | 是(用于电子邮件) |
SMTP_PORT | SMTP 端口(587 或 465) | 是(用于电子邮件) |
SMTP_USE_TLS | 使用 SSL/TLS(真/假) | 是(用于电子邮件) |
SMTP_USERNAME | SMTP 用户名 | 是(用于电子邮件) |
SMTP_PASSWORD | SMTP 密码 | 是(用于电子邮件) |
SMTP_SENDER | 发件人电子邮件地址 | 推荐 |
SMTP_SENDER_NAME | 发件人显示名称 | 推荐 |
使用方法
在本地运行服务器
通过随附的运行程序启动MCP服务器(绑定到0.0.0.0并尊重PORT环境变量):
python main.py --server_type=sse --port 8000服务器将在以下地址可用:
- REST API(Representational State Transfer Application Programming Interface,表述性状态传递应用程序编程接口)http://localhost:8000 翻译为中文是:“本地主机上的8000端口”。不过,通常我们不会直接这样翻译URL,而是根据上下文或使用场景来解释其含义,比如“访问本地开发服务器的8000端口”或“本地运行的Web服务地址(端口8000)”。在这里,为了简洁明了,可以将其翻译为“本地主机8000端口(Web服务地址)”
- MCP服务器http://localhost:8000/mcp 翻译为中文是:“本地主机上的8000端口,路径为/mcp”。不过,在中文语境中,我们通常不会直接这样翻译网址,而是会说“访问本地主机的8000端口上的/mcp路径”或者简化为“访问本地8000端口的/mcp页面”
- API 文档http://localhost:8000/docs 翻译为中文是:“本地主机:8000 端口的文档页面”。不过,通常我们不会直接翻译网址,而是说明其用途或指向的内容,比如“访问本地开发服务器上的文档页面,地址为 http://localhost:8000/docs”
可用的终端节点
REST API
GET /- 健康检查端点
MCP 工具
以下工具可通过MCP接口使用:
- test()(注:这是一个函数或方法的名称,在中文中通常直接保留原样,不进行翻译,表示“测试”这个动作或功能。)测试与API的连接性
- 返回值: {"message": "The API is working!"}
- 获取所有软件包(或资源包)获取所有可用的eSIM套餐
- 返回:包含套餐对象的列表,其中包含名称、价格、数据流量等详细信息。
- 购买套餐(用户邮箱: 字符串,套餐代码: 字符串)购买eSIM套餐
- 参数: user_email 和 bundle_code
- 购买套餐并发送激活码(用户邮箱: str, 套餐代码: str)一键流程:购买、获取激活码、构建激活URL,并将其通过电子邮件发送给用户。
- 获取激活码(order_id: str)获取订单的激活码
- 通过电子邮件发送激活链接(用户邮箱:str,激活链接:str)将激活URL通过电子邮件发送给用户
示例用法
使用REST API
# Health check
curl http://localhost:8000/
# Access MCP interface
curl http://localhost:8000/mcp部署到Render
您可以使用Render仪表板(手动方式)或提供的Blueprint文件进行部署。
选项A:渲染仪表板(手动)
- 构建命令:
pip install -r requirements.txt- 启动命令:
python main.py --server_type=sse --port $PORT- 健康检查路径:
/ - 环境:设置“环境变量”部分中列出的所有变量。
这取代了任何 uv run ... 使用(渲染图像不包含 uv)。
选项B:渲染蓝图(render.yaml)
A. render.yaml 已包含在仓库根目录中。它定义了一个Web服务,包括适当的构建和启动命令以及健康检查。要使用它:
- 将此仓库推送到GitHub/GitLab。
- 在Render中,创建一个新的蓝图并将其指向该仓库。
- 在Render仪表板中设置环境变量。
该服务将绑定到 0.0.0.0 并从(某个地方)读取端口 $PORT 自动地。
依赖项
关键依赖项包括:
- FastAPIREST API的Web框架
- FastMCPMCP服务器实现
- httpx(注:httpx是一个用于执行HTTP请求的工具,常用于网络安全测试等场景,但具体含义和用途可能根据上下文有所不同)用于eSIM Hub API调用的异步HTTP客户端
- pydantic(一个用于数据验证和设置管理的Python库)数据验证和设置管理
- python-dotenv(注:这是一个库名,直接翻译为“Python 点环境变量”并不准确,因为它实际上是一个用于加载环境变量到Python环境中库的名称,但为保持格式一致,此处仅翻译其字面意思,实际使用时应理解为该库的功能或用途)环境变量管理
- loguru(注:这是一个专有名词,通常指的是一种日志记录库或工具,直接翻译为中文可能无法准确传达其含义,因此保持原样。)增强的日志记录
见 requirements.txt 以获取完整的依赖项列表。
发展
项目架构
该项目遵循了整洁架构模式:
main.py使用FastAPI应用和MCP工具定义的入口点services/业务逻辑和外部API集成dto/数据传输对象和映射工具config/配置管理和服务实例化
添加新工具
添加新的MCP工具:
- 在(某处)定义工具函数
main.py:
@mcp.tool
async def new_tool(param: str) -> dict:
"""Description of the new tool."""
# Implementation here
return {"result": "success"}- 在适当的服务中实现业务逻辑
- 更新文档
测试
使用以下命令运行测试:
python -m pytest test.py安全注意事项
- 保持你的
.env文件要安全存储,切勿提交到版本控制系统中 - API密钥和租户密钥可提供对eSIM Hub服务的访问权限
- 在生产环境中使用HTTPS
- 确保您的SMTP服务提供商允许来自Render的连接以及所选端口(587/465)的连接
- 考虑在生产环境中实施速率限制
许可证
\[在此添加您的许可证信息\]
贡献
\[在此添加贡献指南\]
支持
对于问题和疑问:
- 在仓库中创建一个问题
- 请查阅API文档
/docs当服务器正在运行时 - 查看日志以获取调试信息
