内容
# Anker Solix MCP 服务器
[](https://github.com/gkoenig/anker-solix-mcp/actions/workflows/ci.yml)
[](https://github.com/gkoenig/anker-solix-mcp/actions/workflows/security.yml)
[](https://github.com/astral-sh/ruff)
[](https://github.com/astral-sh/uv)
[](https://www.python.org/)
[](LICENSE)
Anker Solix MCP 服务器,暴露 Anker Solix 太阳能设备的数据,例如 Solarbank、扩展电池组和智能电表,作为工具,供 LLM 代理(Claude Desktop、Claude Code 或其他 MCP 主机)直接调用。您可以询问诸如“我们现在正在产生多少太阳能电力?”或“电池的充电状态是什么?”之类的问题,并让助手获取实时数据,而不是您自己打开 Anker 应用程序。
该服务器是针对 **Solarbank 2 E1600 Pro** + **1600 扩展电池组** + **Anker 智能电表**进行构建和测试的,但这些工具编写得足够通用,可以与您的 Anker 账户关联的任何 Solix 设备一起使用。
> ⚠️ **非官方。** 该项目通过反向工程的、社区维护的 [`anker-solix-api`](https://github.com/thomluther/anker-solix-api) 库(与 [Home Assistant Anker Solix 集成](https://github.com/thomluther/anker-solix-ha) 背后的同一个库)与 Anker 的云 API 进行通信。它与 Anker Innovations 没有关联或得到其认可,Anker 可以随时更改其 API 并破坏此功能。
---
## 目录
- [工作原理](#工作原理)
- [代码结构](#代码结构)
- [先决条件](#先决条件)
- [安装](#安装)
- [配置](#配置)
- [独立运行服务器](#独立运行服务器)
- [连接到 MCP 客户端](#连接到-mcp-客户端)
- [通过 HTTP 运行](#通过-http-运行)
- [可用工具](#可用工具)
- [设计笔记](#设计笔记)
- [开发](#开发)
- [持续集成与安全](#持续集成与安全)
- [扩展](#扩展)
---
## 工作原理
MCP(模型上下文协议)是一种用于连接 LLM 应用程序(“主机”,例如 Claude Desktop 或 Claude Code)与外部工具和数据的协议。组成部分:
- **MCP 主机** — 聊天应用程序(Claude Desktop、Claude Code 等)。它读取模型的调用工具的请求,调用工具,并将结果反馈到对话中。
- **MCP 服务器** — *此项目*。一个小型程序,声明一组 **工具**(名称、描述、输入模式和实现),并通过传输层讲 MCP 协议。
- **传输层** — 主机和服务器之间的通信方式。该服务器支持两种:
- **stdio**(默认)— 主机将其作为子进程启动,并通过 stdin/stdout 交换 JSON-RPC 消息。无需网络端口,无身份验证握手,由主机管理进程生命周期。这是在同一台机器上使用 Claude Desktop/Claude Code 时所需的内容(参见 [连接到 MCP 客户端](#连接到-mcp-客户端))。
- **streamable-http** — 服务器改为监听 TCP 端口,并通过 HTTP(使用 SSE 进行流式响应)讲 MCP。这样,它可以作为一个长期运行的、独立部署的服务,由一个或多个远程 MCP 主机连接(参见 [通过 HTTP 运行](#通过-http-运行))。
```
┌─────────────────┐ JSON-RPC over stdio ┌───────────────────────┐ HTTPS ┌──────────────┐
│ MCP 主机 │ ─────────────────────▶ │ anker-solix-mcp │ ────────▶ │ Anker 云 │
│ (Claude Desktop, │ ◀───────────────────── │ (此服务器,一个 │ ◀──────── │ API │
│ Claude Code,…) │ 工具调用/结果 │ 子进程) │ 数据 │ (非官方) │
└─────────────────┘ └───────────────────────┘ └──────────────┘
```
在服务器中,每个 **工具** 只是一个用 `@mcp.tool()` 装饰的 Python `async` 函数。[官方 Python MCP SDK](https://github.com/modelcontextprotocol/python-sdk) 的 `FastMCP` 类将函数的类型提示和文档字符串转换为模型看到的 JSON 模式和描述 — 您编写普通的 Python,协议的管道(模式生成、JSON-RPC 分帧、传输)为您处理。
## 代码结构
```
anker-solix-mcp/
├── pyproject.toml # 包元数据、依赖项、控制台脚本入口点
├── uv.lock # 锁定、重现性依赖项版本(uv 管理、提交)
├── .python-version # 固定 uv 使用的解释器(3.12)
├── .env.example # Anker 账户凭证模板
├── .github/
│ ├── workflows/
│ │ ├── ci.yml # lint(ruff)+ 类型检查(pyright)+ 测试(pytest),每次推送
│ │ └── security.yml # pip-audit(依赖项 CVE)+ CodeQL,每次推送 + 每周
│ └── dependabot.yml # 每周版本更新 PR(Python 依赖项 + GitHub Actions)
├── src/
│ └── anker_solix_mcp/
│ ├── server.py # 构建 FastMCP 应用程序,注册工具模块,运行 stdio 或 HTTP 传输
│ ├── _dev.py # 模块级 `mcp` 对象,用于 `uv run mcp dev`(MCP 检视器)
│ ├── config.py # 从环境加载设置(凭证、刷新间隔、传输)
│ ├── client.py # AnkerSolixClient:延迟身份验证 + 限流包装器,围绕 AnkerSolixApi
│ ├── http_auth.py # BearerTokenMiddleware:HTTP 传输的静态令牌门控
│ ├── util.py # sanitize()(凭证编辑)、filter_devices()(启发式类型过滤)
│ └── tools/
│ ├── sites.py # list_sites, get_site_overview
│ ├── devices.py # list_devices, get_device
│ ├── solarbank.py # list_solarbanks, get_solarbank_status, get_solarbank_schedule
│ ├── smartmeter.py # list_smartmeters, get_smartmeter_status
│ ├── energy.py # get_energy_statistics, get_energy_analysis
│ └── maintenance.py # refresh_data, get_account_info
└── tests/
├── test_util.py # 单元测试:凭证编辑 / 过滤
├── test_http_auth.py # BearerTokenMiddleware 接受/拒绝情况
└── test_server.py # 烟雾测试:组装服务器对抗伪造客户端(无网络)
```
每个 `tools/*.py` 模块都导出一个 `register(mcp, client) -> None` 函数,该函数将工具附加到共享的 `FastMCP` 实例上,关闭共享的 `AnkerSolixClient`。`server.py` 只是一个组装点 — 这将每个域的工具放在一个地方,并使添加新文件以支持新域变得容易(参见 [扩展](#扩展))。
## 先决条件
- [`uv`](https://docs.astral.sh/uv/) — 用于所有内容(依赖项管理、虚拟环境创建、运行服务器和测试)。使用 `curl -LsSf https://astral.sh/uv/install.sh | sh` 或查看 [uv 安装文档](https://docs.astral.sh/uv/getting-started/installation/) 进行安装。
- 具有至少一个 Solix 系统的 Anker 账户,注册在 Anker 应用程序中。
- **无需其他内容** — 您不需要预先安装 Python。该项目通过 `.python-version`/`requires-python` 固定 Python **3.12**(由上游 `anker-solix-api` 库要求),`uv` 将在首次运行 `uv` 命令时透明地下载确切的解释器,如果它尚未在您的机器上。
## 安装
```bash
git clone <此仓库网址> anker-solix-mcp
cd anker-solix-mcp
uv sync
```
`uv sync` 读取 `pyproject.toml` + 提交的 `uv.lock`,下载 Python 3.12(如果需要),创建项目本地 `.venv/`,并安装每个依赖项(包括仅限开发的依赖项,如 `pytest`,来自 `dev` 依赖组)以确切的锁定版本。无需激活 — 以下每个命令都通过 `uv run ...` 运行,它透明地使用该 `.venv`。
`anker-solix-api` 未发布到 PyPI,因此它直接从其 GitHub 仓库拉取(参见 `pyproject.toml` 中的条目,固定在 `uv.lock` 中的提交)— `uv` 本机支持 Git 依赖项,无需额外配置。
如果您手动更改 `pyproject.toml` 中的依赖项,请运行 `uv lock` 以更新 `uv.lock` 以匹配(或使用 `uv add <package>` / `uv remove <package>`,它们一步更新两个文件)。
## 配置
复制示例环境文件并填写您的 Anker 账户凭证(与您登录 Anker 移动应用程序时使用的相同):
```bash
cp .env.example .env
$EDITOR .env
```
| 变量 | 必需 | 描述 |
| ----------------------- | -------- | ----------------------------------------------------------------------------|
| `ANKER_EMAIL` | 是 | Anker 账户邮箱 |
| `ANKER_PASSWORD` | 是 | Anker 账户密码 |
| `ANKER_COUNTRY` | 否 | 注册时使用的两字母国家代码(默认 `DE`) |
| `ANKER_REFRESH_SECONDS` | 否 | 自动数据刷新的最小秒数(默认 `60`) |
| `ANKER_SITE_ID` | 否 | 默认站点 ID,如果您有多个 Anker Solix 系统 |
| `ANKER_MCP_TRANSPORT` | 否 | `stdio`(默认)、`streamable-http` 或 `sse`。参见 [通过 HTTP 运行](#通过-http-运行) |
| `ANKER_MCP_HOST` | 否 | HTTP 传输的绑定地址(默认 `127.0.0.1`) |
| `ANKER_MCP_PORT` | 否 | HTTP 传输的绑定端口(默认 `8000`) |
| `ANKER_MCP_PATH` | 否 | MCP 端点安装的 HTTP 路径(默认 `/mcp`) |
| `ANKER_MCP_AUTH_TOKEN` | 否 | 每个 HTTP 请求所需的 Bearer 令牌。强烈建议用于任何不绑定到 `127.0.0.1` 的 HTTP 传输;参见 [通过 HTTP 运行](#通过-http-运行) |
凭证仅从环境/`.env` 文件中读取并用于向 Anker 的 API 进行身份验证 — 任何其他地方都不会发送任何内容。工具输出也会经过编辑步骤(参见 [设计笔记](#设计笔记)),以便令牌/密码不会泄露到会话中,即使它们出现在原始 API 响应中。
**请勿提交您的 `.env` 文件。** 它已在 `.gitignore` 中列出。
## 独立运行服务器
在将其连接到 MCP 主机之前,值得检查它是否确实与您的账户通信。MCP Python SDK 附带了一个检视器 UI,用于此目的:
```bash
uv run mcp dev src/anker_solix_mcp/_dev.py
```
这将在您的浏览器中打开 **MCP 检视器**,您可以在其中手动调用每个工具并查看它返回的原始 JSON。它指向 `_dev.py` 而不是 `server.py`,因为 `mcp dev` CLI 需要一个模块级 `FastMCP` 对象来检视,而 `server.py` 故意不在导入时构建一个(`build_server()` 需要一个显式客户端;`main()` 仅在加载 `Settings` 后构造一个 — 这就是导入 `server.py` 免受任何凭证/网络要求的代价)。`_dev.py` 是为了检视器的缘故而做出的权衡,因此它仍然需要设置 `ANKER_EMAIL`/`ANKER_PASSWORD`。
或者,直接运行服务器(它将等待 stdio 输入,这是预期的):
```bash
uv run anker-solix-mcp
```
## 连接到 MCP 客户端
将仓库克隆到本地文件夹一次,然后将每个 MCP 客户端指向该克隆:
```bash
mkdir -p ~/src
cd ~/src
git clone https://github.com/gkoenig/anker-solix-mcp.git
cd anker-solix-mcp
uv sync
```
### Claude Code
在 Claude Code 的 MCP 设置中使用本地路径:
```bash
claude mcp add anker-solix -- uv --directory ~/src/anker-solix-mcp run anker-solix-mcp
```
或手动将其添加到 Claude Code 的 MCP 设置中:
```json
{
"mcpServers": {
"anker-solix": {
"command": "uv",
"args": ["--directory", "~/src/anker-solix-mcp", "run", "anker-solix-mcp"]
}
}
}
```
### Claude Desktop
在 `claude_desktop_config.json`(设置 → 开发人员 → 编辑配置)中使用相同的本地克隆,然后重启 Claude Desktop。
### Cline
Cline 在 `cline_mcp_settings.json` 中存储 MCP 服务器,使用与此处其他客户端相同的 `mcpServers` 形状。将服务器条目添加到那里,并用本地克隆替换路径:
```json
{
"mcpServers": {
"anker-solix": {
"command": "uv",
"args": ["--directory", "~/src/anker-solix-mcp", "run", "anker-solix-mcp"]
}
}
}
```
保存文件,重新加载 Cline,并要求它调用诸如“列出我的站点”或“显示太阳能银行状态”等工具。
### 任何其他 MCP 主机
任何可以启动本地进程并通过 stdio 讲 MCP 的主机都可以使用此服务器 — 将其指向 `uv run anker-solix-mcp`(或在虚拟环境内部等效的 `python -m anker_solix_mcp`),将工作目录设置为此仓库(或直接在主机的环境中导出 `ANKER_EMAIL`/`ANKER_PASSWORD`/等)。
## 通过 HTTP 运行
上述所有内容都假设 **stdio**:MCP 主机在同一台机器上运行并启动此服务器。如果您想将服务器作为一个独立的、长期运行的服务运行 — 例如,在靠近您网络的家用服务器/NAS/树莓派上,有一个或多个 MCP 主机(笔记本电脑、手机客户端、多个用户)远程连接到它 — 请改用 **streamable-http** 传输。
### 启动它
```bash
ANKER_MCP_TRANSPORT=streamable-http \
ANKER_MCP_HOST=127.0.0.1 \
ANKER_MCP_PORT=8000 \
ANKER_MCP_AUTH_TOKEN=$(openssl rand -hex 32) \
uv run anker-solix-mcp
```
或在您的 `.env` 文件中设置相同的变量(参见 `.env.example`)— 注意 `ANKER_MCP_AUTH_TOKEN` 需要是一个固定的值,而不是每次运行时重新生成,因为客户端需要知道它。现在,该进程的行为类似于普通的 Web 服务器:它保持运行,将日志输出到 stderr,并监听 `http://<host>:<port><path>`(默认路径 `/mcp`),直到您停止它(Ctrl+C 或 `SIGTERM` — Anker API 会话在关闭时干净地关闭)。
将 HTTP 启用为 MCP 客户端,传递令牌作为 Bearer 头,例如对于 Claude Code:
```bash
claude mcp add --transport http anker-solix http://127.0.0.1:8000/mcp \
--header "Authorization: Bearer <ANKER_MCP_AUTH_TOKEN 值>"
```
或在客户端的 MCP 设置 JSON 中:
```json
{
"mcpServers": {
"anker-solix": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp",
"headers": {
"Authorization": "Bearer <ANKER_MCP_AUTH_TOKEN 值>"
}
}
}
}
```
对于 Cline,此相同的文件有效:使用 `mcpServers`,但在运行服务器时将条目切换到上面的 HTTP 形状,并使用 `ANKER_MCP_TRANSPORT=streamable-http`。对于本地 stdio 使用,保持 Cline 特有的条目来自 [连接到 MCP 客户端](#连接到-mcp-客户端)。
### 与_stdio相比的变更及注意事项
从_stdio迁移到HTTP,意味着从“仅限启动该进程的主机可见的子进程”转变为“网络服务”——一些_stdio提供的内容现在需要您自行负责:
- **暴露/访问控制**:任何可以访问该端口的人都可以调用这里的每个工具——虽然是只读的,但这意味着您的Solix站点/设备数据和Anker账户信息(参见[可用工具](#可用工具))对任何连接的人都是可读的。设置`ANKER_MCP_AUTH_TOKEN`(参见[配置](#配置))以要求每个请求都带有匹配的`Authorization: Bearer <token>`头部——`anker_solix_mcp.http_auth.BearerTokenMiddleware`拒绝其他任何请求。这是一个故意简单的静态令牌检查,而不是完整的OAuth:`mcp[cli]`的`FastMCP`支持插入真正的`TokenVerifier`/OAuth提供者(`FastMCP(auth=...)`),但这需要建立OAuth保护的资源元数据(`issuer_url`、发现端点……)——对于单账户个人服务器来说,这有些过度。如果您需要此流程(例如多个不同的用户/身份、令牌过期、范围),请更换为真正的`TokenVerifier`而不是`ANKER_MCP_AUTH_TOKEN`。如果未设置令牌,服务器会记录启动警告并接受未经身份验证的请求——只有在环回或已经受信任的网络上才可接受(参见下文)。
- **建议:请勿将其暴露在公共互联网上**:承载令牌保护了端点,但除非添加TLS(参见下文),否则它仍以纯HTTP发送——还需添加网络级保护:
1. **仅限环回**(`ANKER_MCP_HOST=127.0.0.1`,默认)如果MCP主机在同一台机器上运行——如果这样的话,相比_stdio没有任何收获,因此在这种情况下更倾向于使用_stdio。
2. **私有网络/VPN**:绑定到您的局域网接口(或`0.0.0.0`),但仅在您控制的VPN(Tailscale、WireGuard)或您的家庭局域网上可访问,绝不能将端口转发到公共互联网上。
3. **前面使用反向代理**(Caddy、nginx、Traefik):如果您确实需要从网络外部访问:请在那里终止TLS(streamable-http本身没有TLS)——无论如何,请设置`ANKER_MCP_AUTH_TOKEN`,以便令牌和TLS涵盖不同的风险(谁被允许访问 vs. 流量在传输过程中是否可读)。
- **单进程,非集群**:`AnkerSolixClient`限制刷新并使用进程内状态(`asyncio.Lock`和上次刷新时间戳——参见`client.py`)进行延迟身份验证。这在单个进程中才能正确工作:不要运行多个`uv run anker-solix-mcp`实例或在同一Anker账户前运行多工作线程服务器(例如`uvicorn --workers N`),否则刷新限制将失效,您可能会同时从多个不同步的进程中大量调用Anker的API。一个进程可以舒适地为许多并发的MCP客户端/会话提供服务。
- **保持运行**:与_stdio不同(主机为您启动/停止进程),您现在负责进程生命周期:请在进程监管器下运行它——`systemd`用户/系统服务、`Docker`容器中的`restart: unless-stopped`、`tmux`/`screen`用于快速手动设置——以便它在重启和崩溃后存活,并且其日志(它记录到stderr)可以在您检查的地方找到。
- **凭证仍然来自环境**:这里没有变化——`ANKER_EMAIL`/`ANKER_PASSWORD`/等仍然在进程启动时(从环境或工作目录中的`.env`)读取一次。确保无论哪个监管进程设置它们的方式与您为_stdio设置的方式相同;由于这仍然是一个单账户工具,而不是多租户服务,因此没有关于每请求凭证处理的担忧。
- **`sse`传输**也可用(`ANKER_MCP_TRANSPORT=sse`)用于旧的MCP客户端,但它已在MCP规范中被弃用——除非您特别需要它,否则请优先使用`streamable-http`。
## 可用工具
| 工具 | 描述 |
| ------------------------ | --------------------------------------------------------------------------------------------------|
| `list_sites` | 列出账户上的每个Anker电力系统(“站点”),按站点ID键控。 |
| `get_site_overview` | 一个站点的完整缓存详细记录(电力流动摘要,如果有报告)。 |
| `list_devices` | 列出每个设备(Solarbank、扩展包、智能电表等)按序列号键控。 |
| `get_device` | 一个设备的完整、未过滤的缓存详细记录。 |
| `list_solarbanks` | 看起来像Solarbanks /扩展电池包的设备。 |
| `get_solarbank_status` | 电池SoC、太阳能输入、输出功率、充/放电功率、温度等。 |
| `get_solarbank_schedule` | 配置的充/放电时间表/输出功率计划(如果存在)。 |
| `list_smartmeters` | 看起来像Anker智能电表的设备。 |
| `get_smartmeter_status` | 当前电网导入/导出功率和其他报告字段。 |
| `get_energy_statistics` | 新鲜(非缓存)能源总量:生产、充/放电、电网导入/导出、家庭使用。 |
| `get_energy_analysis` | 站点的时间序列能源分解(日/周/月/年);`range_type="day"`返回日内(~20分钟)点,用于日内查询,如夜间使用。 |
| `refresh_data` | 强制立即刷新所有缓存数据,绕过限制。 |
| `get_account_info` | 基本Anker账户信息(昵称等),凭证已删除。 |
所有工具都是**只读**的——它们没有任何更改设备设置的功能。这是刻意为之的范围选择(参见[设计说明](#设计说明)和[扩展](#扩展),如果您想自己添加控制工具)。
## 设计说明
**为什么工具返回大部分原始、直接数据**:`anker-solix-api`与未公开的私有API通信——其缓存数据的确切格式因设备型号和固件而异,并且可能会在未通知的情况下更改。相比硬编码可能与您特定设置不匹配的字段名称(并静默删除无法匹配假定模式的数据),大多数工具返回底层库的缓存字典,尽可能保持原样,限定在相关站点/设备范围内。现代大型语言模型(LLM)擅长读取任意JSON并提取用户询问的字段,因此这用一点“原始JSON在转录中”为代价,换来了对上游模式漂移的恢复能力。`list_solarbanks` / `list_smartmeters`应用尽力而为的启发式过滤器(匹配已知型号代码/类型字符串),但如果没有匹配,则恢复为返回所有内容,而不是静默返回空结果。
**数据脱敏**:每个工具响应都通过`util.sanitize()`,递归删除任何看起来像凭证的字典键(`password`、`token`、`secret`、`cookie`、`auth_*`等),然后再返回。这是除了直接不打印凭证之外的深度防御——特别是账户缓存可能携带会话相关的字段。
**刷新限制**:`AnkerSolixClient.refresh()`限制为`ANKER_REFRESH_SECONDS`(默认为60秒),因此在一个对话回合内的一次工具调用会产生单个往返Anker的API调用,而不是每个工具调用一次。`get_energy_statistics`、`get_energy_analysis`和`refresh_data`故意绕过限制,因为“给我最新的数字”是调用它们最常见的原因。
**延迟身份验证**:Anker API客户端及其HTTP会话仅在第一次使用时创建(在`AnkerSolixClient._ensure_api`内部),而不是在导入时——因此导入服务器模块或运行其测试套件时,不会进行网络调用,也不需要凭证。
## 开发
```bash
uv sync # 默认包含开发依赖组(pytest、pytest-asyncio、ruff、pyright、pip-audit)
uv run pytest
uv run ruff check . # lint
uv run ruff format . # format(添加 --check 仅进行验证,例如在CI中)
uv run pyright # 类型检查
```
`tests/test_server.py`针对小型伪造客户端(参见`FakeAnkerSolixClient`)构建MCP服务器,因此测试套件在没有Anker凭证和网络访问的情况下运行。`tools/*.py`和`build_server()`将客户端视为`AnkerSolixClientProtocol`(参见`client.py`),而不是具体的`AnkerSolixClient`,因此鸭子类型检查也适用。
要添加或升级依赖项,请优先使用`uv add <package>`(或`uv add --group dev <package>`用于仅限开发的工具)而不是手动编辑`pyproject.toml`——它为您解决并更新`uv.lock`。偶尔运行`uv lock --upgrade`以获取新的兼容版本,包括`anker-solix-api`的上游库的新提交。
## 持续集成与安全
每次推送到每个分支都会运行三个GitHub Actions作业([`.github/workflows/ci.yml`](.github/workflows/ci.yml)):
| 作业 | 命令 |
| ---------- | ------------------------------------------------- |
| Lint | `uv run ruff check .` + `uv run ruff format --check .` |
| 类型检查 | `uv run pyright` |
| 测试 | `uv run pytest` |
安全扫描在每次推送和每周计划([`.github/workflows/security.yml`](.github/workflows/security.yml))上运行:
- **`pip-audit`**:检查每个已解析的依赖项版本(来自锁定环境)是否与已知的CVE数据库冲突。
- **CodeQL**:GitHub的静态分析,扫描此项目自己的Python源代码以查找安全相关的错误模式(与依赖项CVE分开)。
[`.github/dependabot.yml`](.github/dependabot.yml)还为Python依赖项(`uv`生态系统)和工作流中使用的GitHub Actions打开了版本更新的PR,频率为每周。注意`anker-solix-api`是一个git依赖项,没有固定标签,因此Dependabot可以更新这里的每个其他依赖项,但不能更新该特定项——请定期重新运行`uv lock --upgrade`以获取其新提交。
## 扩展
添加新工具:
1. 在现有`tools/*.py`模块中(或为新域创建新模块)添加`async def`函数,用模块的`register(mcp, client)`函数内的`@mcp.tool()`装饰。
2. 编写清晰的文档字符串——MCP客户端(进而模型)将其视为工具的描述,因此请明确说明工具返回的内容以及何时调用它。
3. 如果是新模块,请在`server.py`中的`build_server()`中注册它。
4. 使用`FakeAnkerSolixClient`(如果您的工具需要假客户端尚未提供的数据,请扩展它)在`tests/`中添加测试。
要添加**设备控制**工具(例如,通过`AnkerSolixApi.set_station_parm` / `set_device_attributes`更改Solarbank的输出功率或充电时间表),请考虑在MCP主机中限制明确的用户确认,因为与这里的只读工具不同,错误调用实际上会更改您的硬件行为。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器