内容
# inbody-api-mcp
<!-- mcp-name: io.github.rwestergren/inbody-api-mcp -->
[](https://opensource.org/licenses/MIT)
[](https://github.com/rwestergren/inbody-api-mcp/actions/workflows/ci.yml)
[](https://github.com/rwestergren/inbody-api-mcp/actions/workflows/docker.yml)
[](https://pypi.org/project/inbody-api-mcp/)
> **Claude.ai、ChatGPT 和 Grok 的托管版本即将上线。** [**加入等待列表 →**](https://tally.so/r/A7WVge?ref=inbody-api-mcp)
一款适用于 [InBody](https://inbody.com/) 身体成分数据的 [MCP(模型上下文协议)](https://modelcontextprotocol.io/) 服务器,基于 InBody Android 应用使用的反向工程移动 REST API 构建。
InBody 没有公开的 API,也没有用于个人扫描数据的 Web 界面。该服务器与移动应用使用的相同 JSON REST 端点进行通信,将您的身体成分历史(身体脂肪、肌肉量、身体水分、分割阻抗)暴露给任何 MCP 客户端。
## 功能
- **个人资料** -- 身份和基线指标(身高、体重、年龄、性别)
- **扫描历史** -- 按时间顺序的摘要(体重、BMI、体脂百分比、肌肉量)
- **完整扫描指标** -- 完整的身体成分(BCA)、BMI/体脂/肌肉量与正常范围(MFA)和分割/多频阻抗(IMP)
- **自动区域路由** -- 从您的国家代码解析正确的区域 API 主机
- **自动重新身份验证** -- 缓存 24 小时的 JWT 并在到期时重新登录
## 快速入门
### 1. 安装 [uv](https://docs.astral.sh/uv/)
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
### 2. 设置凭证
```bash
export INBODY_LOGIN_ID="3026323617" # 注册手机号,仅限数字
export INBODY_LOGIN_PW="your-password"
export INBODY_COUNTRY_CODE="US" # ISO 国家代码(默认为 US)
```
> **`INBODY_LOGIN_ID` 是注册时使用的手机号**,不包括国家代码或 `+`(例如 `3026323617`)。InBody 的登录密钥基于手机号;邮箱仅作为个人资料数据返回。邮箱值将使用 `EmptyData` 失败登录。
### 3. 配置您的 MCP 客户端
`uvx` 按需下载并运行服务器 -- 无需单独的安装步骤。
#### OpenCode (`opencode.json`)
```json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"inbody": {
"type": "local",
"command": ["uvx", "inbody-api-mcp"],
"environment": {
"INBODY_LOGIN_ID": "{env:INBODY_LOGIN_ID}",
"INBODY_LOGIN_PW": "{env:INBODY_LOGIN_PW}",
"INBODY_COUNTRY_CODE": "US"
},
"enabled": true
}
}
}
```
#### Claude Desktop (`claude_desktop_config.json`)
```json
{
"mcpServers": {
"inbody": {
"command": "uvx",
"args": ["inbody-api-mcp"],
"env": {
"INBODY_LOGIN_ID": "3026323617",
"INBODY_LOGIN_PW": "your-password",
"INBODY_COUNTRY_CODE": "US"
}
}
}
}
```
## 可用工具
| 工具 | 描述 |
|------|-------------|
| `get_profile` | 用户身份和基线指标(身高、体重、年龄、性别) |
| `get_scan_count` | 账户上的扫描总数 |
| `list_scans` | 按时间顺序的扫描摘要(体重、BMI、体脂百分比、肌肉量) |
| `get_scan` | 单次扫描的完整指标集(BCA / MFA / IMP 模块) |
该服务器为只读:不支持写入或删除端点。
## 工作原理
该服务器与区域 `*.lookinbody.com` REST API 进行通信 -- 与 InBody Android 应用(v2.8.31)使用的后端相同。API 通过使用 mitmproxy 捕获应用流量并确认有效载荷形状与实时 API 一致而被反向工程。
身份验证流程:
1. `POST /CommonAPI/GetCountryInfoV2` (在 `appapicommon.lookinbody.com` 上)返回每个国家的 host 表。您的 ISO 国家代码的 `Type == "API"` 行提供区域 API 基址(US -> `appapiusav2.lookinbody.com`)和请求正文中使用的数字电话代码。
2. `POST /V2/Main/GetLoginWithSyncDataPartV2` 交换登录 ID + 密码以获取 24 小时的 JWT、刷新令牌和账户 UID。
3. 后续调用发送 `Authorization: Bearer <JWT>`。客户端在令牌过期时自动重新身份验证。
每个扫描记录嵌套三个模块:**BCA** (身体成分分析 -- 身体水分、蛋白质、矿物质、脂肪、分割水分)、**MFA** (BMI、体脂百分比、骨骼肌肉量、WHR 与正常范围)和 **IMP** (每个频率和身体分割的原始阻抗)。
## Python API
您可以直接使用客户端:
```python
from inbody_api_mcp.client import InBodyClient
client = InBodyClient()
# 扫描总数
count = client.get_scan_count()
# 最近的扫描(最新的在前),分页
scans = client.get_scans(number=20, index=0)
# 用户个人资料
profile = client.get_user_info()
```
## 传输
仅限 stdio。MCP 客户端(OpenCode、Claude Desktop)直接通过 `uvx`/`uv` 启动 stdio 进程。
## 许可证
MIT