mijiaAPI 4.0.0__tar.gz → 4.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/.gitignore +1 -1
  2. {mijiaapi-4.0.0/mijiaAPI.egg-info → mijiaapi-4.1.0}/PKG-INFO +22 -3
  3. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/README.md +21 -2
  4. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/mijiaAPI/__main__.py +25 -18
  5. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/mijiaAPI/apis.py +37 -7
  6. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/mijiaAPI/mcp_server.py +110 -25
  7. mijiaapi-4.1.0/mijiaAPI/version.py +1 -0
  8. {mijiaapi-4.0.0 → mijiaapi-4.1.0/mijiaAPI.egg-info}/PKG-INFO +22 -3
  9. mijiaapi-4.0.0/mijiaAPI/version.py +0 -1
  10. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  11. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/LICENSE +0 -0
  12. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/demos/test_apis.py +0 -0
  13. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/demos/test_get_statistics.py +0 -0
  14. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/demos/test_login.py +0 -0
  15. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/mijiaAPI/__init__.py +0 -0
  16. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/mijiaAPI/devices.py +0 -0
  17. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/mijiaAPI/errors.py +0 -0
  18. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/mijiaAPI/logger.py +0 -0
  19. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/mijiaAPI/miutils.py +0 -0
  20. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/mijiaAPI.egg-info/SOURCES.txt +0 -0
  21. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/mijiaAPI.egg-info/dependency_links.txt +0 -0
  22. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/mijiaAPI.egg-info/entry_points.txt +0 -0
  23. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/mijiaAPI.egg-info/requires.txt +0 -0
  24. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/mijiaAPI.egg-info/top_level.txt +0 -0
  25. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/pyproject.toml +0 -0
  26. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/setup.cfg +0 -0
  27. {mijiaapi-4.0.0 → mijiaapi-4.1.0}/uv.lock +0 -0
@@ -20,4 +20,4 @@ wheels/
20
20
 
21
21
  # VitePress
22
22
  node_modules/
23
- .vitepress/
23
+ /.vitepress/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mijiaAPI
3
- Version: 4.0.0
3
+ Version: 4.1.0
4
4
  Summary: A Python API for Xiaomi Mijia
5
5
  Author-email: Do1e <i@do1e.cn>
6
6
  License-Expression: GPL-3.0-or-later
@@ -21,7 +21,9 @@ Dynamic: license-file
21
21
 
22
22
  # mijiaAPI
23
23
 
24
- 小米米家设备的 API,可以使用代码直接控制米家设备。
24
+ 米家 API,可以使用代码、CLI、MCP 直接控制米家设备。
25
+
26
+ > 🎉 **v4 版本已支持 MCP**,详见 [MCP 使用文档](https://mijia-api.do1e.com/usage/mcp)
25
27
 
26
28
  [![GitHub](https://img.shields.io/badge/GitHub-Do1e%2Fmijia--api-blue)](https://github.com/Do1e/mijia-api)
27
29
  [![PyPI](https://img.shields.io/badge/PyPI-mijiaAPI-blue)](https://pypi.org/project/mijiaAPI/)
@@ -29,6 +31,8 @@ Dynamic: license-file
29
31
 
30
32
  📖 **完整文档请见 [mijia-api.do1e.com](https://mijia-api.do1e.com)**
31
33
 
34
+ [常见问题](https://mijia-api.do1e.com/faq) | [更新日志](https://mijia-api.do1e.com/changelog)
35
+
32
36
  ## 安装
33
37
 
34
38
  > 要求 Python >= 3.10
@@ -38,7 +42,7 @@ pip install mijiaAPI
38
42
  # Or `uv add mijiaAPI` for uv users
39
43
  ```
40
44
 
41
- 其他安装方式(源码安装、AUR)请参考[文档](https://mijia-api.do1e.com)。
45
+ 其他安装方式(源码安装、AUR)请参考[文档](https://mijia-api.do1e.com/guide/installation)。
42
46
 
43
47
  ## 快速开始
44
48
 
@@ -66,6 +70,21 @@ mijiaAPI -l # 列出所有设备
66
70
  mijiaAPI set --dev_name "台灯" --prop_name "brightness" --value 60
67
71
  ```
68
72
 
73
+ MCP 用法:
74
+
75
+ 执行 `uvx mijiaAPI login -p /path/to/auth.json` 登录后,在 MCP 客户端配置中添加以下内容即可接入米家:
76
+
77
+ ```json
78
+ {
79
+ "mcpServers": {
80
+ "mijia-api": {
81
+ "command": "uvx",
82
+ "args": ["mijiaAPI", "mcp", "-p", "/path/to/auth.json"]
83
+ }
84
+ }
85
+ }
86
+ ```
87
+
69
88
  更多用法(API 基础调用、MCP Server、CLI 完整参数、最佳实践等)请查阅[完整文档](https://mijia-api.do1e.com)。
70
89
 
71
90
  ## 致谢
@@ -1,6 +1,8 @@
1
1
  # mijiaAPI
2
2
 
3
- 小米米家设备的 API,可以使用代码直接控制米家设备。
3
+ 米家 API,可以使用代码、CLI、MCP 直接控制米家设备。
4
+
5
+ > 🎉 **v4 版本已支持 MCP**,详见 [MCP 使用文档](https://mijia-api.do1e.com/usage/mcp)
4
6
 
5
7
  [![GitHub](https://img.shields.io/badge/GitHub-Do1e%2Fmijia--api-blue)](https://github.com/Do1e/mijia-api)
6
8
  [![PyPI](https://img.shields.io/badge/PyPI-mijiaAPI-blue)](https://pypi.org/project/mijiaAPI/)
@@ -8,6 +10,8 @@
8
10
 
9
11
  📖 **完整文档请见 [mijia-api.do1e.com](https://mijia-api.do1e.com)**
10
12
 
13
+ [常见问题](https://mijia-api.do1e.com/faq) | [更新日志](https://mijia-api.do1e.com/changelog)
14
+
11
15
  ## 安装
12
16
 
13
17
  > 要求 Python >= 3.10
@@ -17,7 +21,7 @@ pip install mijiaAPI
17
21
  # Or `uv add mijiaAPI` for uv users
18
22
  ```
19
23
 
20
- 其他安装方式(源码安装、AUR)请参考[文档](https://mijia-api.do1e.com)。
24
+ 其他安装方式(源码安装、AUR)请参考[文档](https://mijia-api.do1e.com/guide/installation)。
21
25
 
22
26
  ## 快速开始
23
27
 
@@ -45,6 +49,21 @@ mijiaAPI -l # 列出所有设备
45
49
  mijiaAPI set --dev_name "台灯" --prop_name "brightness" --value 60
46
50
  ```
47
51
 
52
+ MCP 用法:
53
+
54
+ 执行 `uvx mijiaAPI login -p /path/to/auth.json` 登录后,在 MCP 客户端配置中添加以下内容即可接入米家:
55
+
56
+ ```json
57
+ {
58
+ "mcpServers": {
59
+ "mijia-api": {
60
+ "command": "uvx",
61
+ "args": ["mijiaAPI", "mcp", "-p", "/path/to/auth.json"]
62
+ }
63
+ }
64
+ }
65
+ ```
66
+
48
67
  更多用法(API 基础调用、MCP Server、CLI 完整参数、最佳实践等)请查阅[完整文档](https://mijia-api.do1e.com)。
49
68
 
50
69
  ## 致谢
@@ -193,26 +193,27 @@ def parse_args(args):
193
193
  return parser.parse_args(args)
194
194
 
195
195
  def init_api(auth_path: Path) -> mijiaAPI:
196
- class APIUnavailableError(Exception):
197
- pass
198
-
199
196
  if Path(auth_path).is_dir():
200
197
  auth_path = auth_path / "auth.json"
201
- if auth_path.exists():
202
- try:
203
- api = mijiaAPI(auth_data_path=auth_path)
204
- if not api.available:
205
- api._refresh_token()
206
- if not api.available:
207
- raise APIUnavailableError()
208
- return api
209
- except (json.JSONDecodeError, APIUnavailableError):
210
- auth_path.unlink(missing_ok=True)
211
- api = mijiaAPI(auth_data_path=auth_path)
212
- api.login()
213
- else:
198
+ if not auth_path.exists():
199
+ print(f"认证文件不存在: {auth_path}")
200
+ print("请调用 'mijiaAPI login' 进行扫描登录")
201
+ sys.exit(1)
202
+ try:
214
203
  api = mijiaAPI(auth_data_path=auth_path)
215
- api.login()
204
+ except json.JSONDecodeError:
205
+ print(f"认证文件已损坏: {auth_path}")
206
+ print("请调用 'mijiaAPI login' 进行扫描登录")
207
+ sys.exit(1)
208
+ if not api.available:
209
+ try:
210
+ api._refresh_token()
211
+ except Exception:
212
+ pass
213
+ if not api.available:
214
+ print(f"认证已失效且刷新失败: {auth_path}")
215
+ print("请调用 'mijiaAPI login' 进行扫描登录")
216
+ sys.exit(1)
216
217
  return api
217
218
 
218
219
  def get_homes_list(api: mijiaAPI, verbose: bool = True, device_mapping: Optional[dict] = None) -> dict:
@@ -345,7 +346,13 @@ def main(args):
345
346
  run_mcp(args.auth_path)
346
347
  return
347
348
  if hasattr(args, 'func') and args.func == 'login':
348
- api = init_api(args.auth_path)
349
+ auth_path = args.auth_path
350
+ file_path = Path(auth_path) / "auth.json" if Path(auth_path).is_dir() else Path(auth_path)
351
+ try:
352
+ api = mijiaAPI(auth_data_path=auth_path)
353
+ except json.JSONDecodeError:
354
+ file_path.unlink(missing_ok=True)
355
+ api = mijiaAPI(auth_data_path=auth_path)
349
356
  if not api.available:
350
357
  api.login()
351
358
  return
@@ -226,15 +226,30 @@ class mijiaAPI():
226
226
  异常:
227
227
  LoginError: 当登录超时或服务器返回错误时抛出
228
228
  """
229
- # Step 1: 从 serviceLogin 获取登录链接参数
229
+ login_data = self._get_qr_login_data()
230
+ if login_data.get("refreshed"):
231
+ return self.auth_data
232
+ self._print_qr(login_data["loginUrl"])
233
+ print(f"也可以访问链接查看二维码图片: {login_data['qr']}")
234
+ return self._complete_qr_login(login_data)
235
+
236
+ def _get_qr_login_data(self) -> dict:
237
+ """获取二维码登录数据(含 loginUrl/qr/lp),不阻塞等待扫码。
238
+
239
+ 先尝试刷新 token,若成功返回 {"refreshed": True};否则请求二维码并返回
240
+ 登录数据,供 _complete_qr_login 长轮询完成登录。
241
+
242
+ 返回值:
243
+ dict: 刷新成功时为 {"refreshed": True};否则包含 loginUrl(二维码原始
244
+ 链接)、qr(二维码图片链接)、lp(长轮询地址)等字段。
245
+ """
230
246
  location_data = self._get_location()
231
247
  if location_data.get("code", -1) == 0 and location_data.get("message", "") == "刷新Token成功":
232
248
  self._save_auth_data()
233
249
  self._init_session()
234
250
  logger.info("刷新Token成功,无需登录")
235
- return self.auth_data
251
+ return {"refreshed": True}
236
252
 
237
- # Step 2: 获取并打印二维码
238
253
  location_data.update({
239
254
  "theme": "",
240
255
  "bizDeviceType": "",
@@ -251,10 +266,26 @@ class mijiaAPI():
251
266
  }
252
267
  login_ret = requests.get(url, headers=headers)
253
268
  login_data = self._handle_ret(login_ret)
254
- self._print_qr(login_data["loginUrl"])
255
- print(f"也可以访问链接查看二维码图片: {login_data['qr']}")
269
+ return login_data
270
+
271
+ def _complete_qr_login(self, login_data: dict) -> dict:
272
+ """长轮询等待扫码并完成登录,保存认证数据。
256
273
 
257
- # Step 3: 轮询等待扫码登录
274
+ 参数:
275
+ login_data: _get_qr_login_data 返回的登录数据(含 lp 等字段)。
276
+
277
+ 返回值:
278
+ dict: 包含认证信息的字典。
279
+
280
+ 异常:
281
+ LoginError: 当扫码超时或服务器返回错误时抛出。
282
+ """
283
+ headers = {
284
+ "User-Agent": self.user_agent,
285
+ "Accept-Encoding": "gzip",
286
+ "Content-Type": "application/x-www-form-urlencoded",
287
+ "Connection": "keep-alive",
288
+ }
258
289
  session = requests.Session()
259
290
  try:
260
291
  lp_ret = session.get(login_data["lp"], headers=headers, timeout=120)
@@ -262,7 +293,6 @@ class mijiaAPI():
262
293
  except requests.exceptions.Timeout:
263
294
  raise LoginError(-1, "超时,请重试")
264
295
 
265
- # Step 4: 处理登录结果
266
296
  auth_keys = ["psecurity", "nonce", "ssecurity", "passToken", "userId", "cUserId"]
267
297
  for key in auth_keys:
268
298
  self.auth_data[key] = lp_data[key]
@@ -1,6 +1,7 @@
1
1
  import json
2
2
  import logging
3
3
  import sys
4
+ import threading
4
5
  from pathlib import Path
5
6
  from typing import Optional
6
7
 
@@ -10,19 +11,25 @@ from .apis import mijiaAPI
10
11
  from .devices import get_device_info, mijiaDevice
11
12
  from .errors import LoginError
12
13
  from .logger import logger
14
+ from .version import version
13
15
 
14
16
 
15
- mcp = FastMCP("mijia-api")
17
+ mcp = FastMCP("mijia-api", version=version)
16
18
 
17
19
  _api: Optional[mijiaAPI] = None
18
20
  _auth_path: Optional[Path] = None
19
21
 
22
+ _login_api: Optional[mijiaAPI] = None
23
+ _login_data: Optional[dict] = None
24
+ _login_thread: Optional[threading.Thread] = None
25
+ _login_status: dict = {"status": "idle"}
26
+
20
27
 
21
28
  def _get_api() -> mijiaAPI:
22
29
  global _api
23
30
  if _api is not None:
24
31
  return _api
25
- raise RuntimeError("mijiaAPI 未初始化,请先登录后重启 MCP server")
32
+ raise RuntimeError("mijiaAPI 未初始化,请先调用 login 工具完成登录")
26
33
 
27
34
 
28
35
  def _refresh_if_needed(api: mijiaAPI) -> None:
@@ -31,8 +38,7 @@ def _refresh_if_needed(api: mijiaAPI) -> None:
31
38
  api._refresh_token()
32
39
  except LoginError:
33
40
  raise RuntimeError(
34
- "认证已失效且无法自动刷新,请运行 "
35
- f"`mijiaAPI login -p {_auth_path}` 重新登录后重启 MCP server"
41
+ "认证已失效且无法自动刷新,请调用 login 工具重新登录"
36
42
  )
37
43
 
38
44
 
@@ -40,30 +46,28 @@ def run(auth_path: Path) -> None:
40
46
  global _api, _auth_path
41
47
  _auth_path = auth_path if not auth_path.is_dir() else auth_path / "auth.json"
42
48
 
43
- if not _auth_path.exists():
44
- print(
45
- f"认证文件不存在: {_auth_path}\n"
46
- f"请先运行 `mijiaAPI login -p {_auth_path}` 登录后再启动 MCP server",
47
- file=sys.stderr,
48
- )
49
- sys.exit(1)
50
-
51
49
  logger.handlers = [h for h in logger.handlers if not isinstance(h, logging.StreamHandler) or h.stream is sys.stderr]
52
- try:
53
- _api = mijiaAPI(auth_data_path=_auth_path)
54
- if not _api.available:
55
- _api._refresh_token()
56
- if not _api.available:
57
- raise LoginError(-1, "认证不可用")
58
- except Exception as e:
59
- print(
60
- f"认证不可用且无法自动刷新: {e}\n"
61
- f"请运行 `mijiaAPI login -p {_auth_path}` 重新登录后再启动 MCP server",
62
- file=sys.stderr,
50
+
51
+ if not _auth_path.exists():
52
+ _api = None
53
+ logger.warning(
54
+ f"认证文件不存在: {_auth_path},请调用 login 工具完成登录后再使用其他工具"
63
55
  )
64
- sys.exit(1)
56
+ else:
57
+ try:
58
+ _api = mijiaAPI(auth_data_path=_auth_path)
59
+ if not _api.available:
60
+ _api._refresh_token()
61
+ if not _api.available:
62
+ raise LoginError(-1, "认证不可用")
63
+ logger.info(f"MCP server 启动,认证文件: {_auth_path}")
64
+ except Exception as e:
65
+ _api = None
66
+ logger.warning(
67
+ f"认证不可用且无法自动刷新: {e}\n"
68
+ f"请调用 login 工具重新登录后再使用其他工具"
69
+ )
65
70
 
66
- logger.info(f"MCP server 启动,认证文件: {_auth_path}")
67
71
  mcp.run()
68
72
 
69
73
 
@@ -318,3 +322,84 @@ def run_speaker_command(
318
322
  speaker = mijiaDevice(api, did=match["did"])
319
323
  speaker.run_action("execute-text-directive", _in=[prompt, 1 if quiet else 0])
320
324
  return f"已通过 {match['name']} 执行: {prompt}"
325
+
326
+
327
+ def _login_worker(api: mijiaAPI, login_data: dict) -> None:
328
+ try:
329
+ api._complete_qr_login(login_data)
330
+ _login_status.update({"status": "success", "message": "登录成功"})
331
+ except LoginError as e:
332
+ _login_status.update({"status": "error", "message": f"登录失败: {e}"})
333
+ except Exception as e:
334
+ _login_status.update({"status": "error", "message": f"登录失败: {e}"})
335
+
336
+
337
+ @mcp.tool
338
+ def login() -> str:
339
+ """发起米家二维码登录。
340
+
341
+ 当 API 调用失败或凭证过期且自动刷新失败时使用。先尝试刷新 token,
342
+ 失败则生成二维码并在后台长轮询等待扫码。返回二维码图片链接,请用
343
+ 米家APP在2分钟内扫码,然后调用 login_status 查询结果。
344
+ """
345
+ global _api, _login_api, _login_data, _login_thread, _login_status
346
+ if _auth_path is None:
347
+ return "认证路径未初始化,请检查 MCP server 启动配置"
348
+ if _login_thread is not None and _login_thread.is_alive():
349
+ return "已有登录正在进行中,请调用 login_status 查询结果"
350
+
351
+ if _api is not None:
352
+ try:
353
+ if _api.available:
354
+ return "凭证仍然有效,无需重新登录"
355
+ _api._refresh_token()
356
+ if _api.available:
357
+ return "Token 刷新成功,无需重新登录"
358
+ except LoginError:
359
+ pass
360
+
361
+ new_api = mijiaAPI(auth_data_path=_auth_path)
362
+ login_data = new_api._get_qr_login_data()
363
+ if login_data.get("refreshed"):
364
+ _api = new_api
365
+ return "Token 刷新成功,无需重新登录"
366
+
367
+ _login_api = new_api
368
+ _login_data = login_data
369
+ _login_status = {"status": "pending", "message": "等待扫码"}
370
+ _login_thread = threading.Thread(target=_login_worker, args=(new_api, login_data), daemon=True)
371
+ _login_thread.start()
372
+ return (
373
+ "二维码已生成,请在2分钟内用米家APP扫码完成登录。\n"
374
+ f"二维码图片链接: {login_data['qr']}\n"
375
+ "扫码后请调用 login_status 查询登录结果。"
376
+ )
377
+
378
+
379
+ @mcp.tool
380
+ def login_status() -> str:
381
+ """查询 login 发起的二维码登录结果。
382
+
383
+ 返回 pending(等待扫码)/ success(登录成功,已切换为新凭证)/ error(失败)。
384
+ 成功后后续工具调用将使用新登录的凭证。
385
+ """
386
+ global _api, _login_api, _login_data, _login_thread, _login_status
387
+ if _login_thread is None:
388
+ return "没有正在进行的登录,请先调用 login"
389
+
390
+ status = _login_status.get("status", "idle")
391
+ if status == "success":
392
+ _api = _login_api
393
+ _login_thread = None
394
+ _login_api = None
395
+ _login_data = None
396
+ _login_status = {"status": "idle"}
397
+ return "登录成功,已切换为新凭证,可继续调用其他工具"
398
+ if status == "error":
399
+ message = _login_status.get("message", "登录失败")
400
+ _login_thread = None
401
+ _login_api = None
402
+ _login_data = None
403
+ _login_status = {"status": "idle"}
404
+ return message
405
+ return "等待扫码中,请用米家APP扫描 login 返回的二维码后再次查询"
@@ -0,0 +1 @@
1
+ version = "4.1.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mijiaAPI
3
- Version: 4.0.0
3
+ Version: 4.1.0
4
4
  Summary: A Python API for Xiaomi Mijia
5
5
  Author-email: Do1e <i@do1e.cn>
6
6
  License-Expression: GPL-3.0-or-later
@@ -21,7 +21,9 @@ Dynamic: license-file
21
21
 
22
22
  # mijiaAPI
23
23
 
24
- 小米米家设备的 API,可以使用代码直接控制米家设备。
24
+ 米家 API,可以使用代码、CLI、MCP 直接控制米家设备。
25
+
26
+ > 🎉 **v4 版本已支持 MCP**,详见 [MCP 使用文档](https://mijia-api.do1e.com/usage/mcp)
25
27
 
26
28
  [![GitHub](https://img.shields.io/badge/GitHub-Do1e%2Fmijia--api-blue)](https://github.com/Do1e/mijia-api)
27
29
  [![PyPI](https://img.shields.io/badge/PyPI-mijiaAPI-blue)](https://pypi.org/project/mijiaAPI/)
@@ -29,6 +31,8 @@ Dynamic: license-file
29
31
 
30
32
  📖 **完整文档请见 [mijia-api.do1e.com](https://mijia-api.do1e.com)**
31
33
 
34
+ [常见问题](https://mijia-api.do1e.com/faq) | [更新日志](https://mijia-api.do1e.com/changelog)
35
+
32
36
  ## 安装
33
37
 
34
38
  > 要求 Python >= 3.10
@@ -38,7 +42,7 @@ pip install mijiaAPI
38
42
  # Or `uv add mijiaAPI` for uv users
39
43
  ```
40
44
 
41
- 其他安装方式(源码安装、AUR)请参考[文档](https://mijia-api.do1e.com)。
45
+ 其他安装方式(源码安装、AUR)请参考[文档](https://mijia-api.do1e.com/guide/installation)。
42
46
 
43
47
  ## 快速开始
44
48
 
@@ -66,6 +70,21 @@ mijiaAPI -l # 列出所有设备
66
70
  mijiaAPI set --dev_name "台灯" --prop_name "brightness" --value 60
67
71
  ```
68
72
 
73
+ MCP 用法:
74
+
75
+ 执行 `uvx mijiaAPI login -p /path/to/auth.json` 登录后,在 MCP 客户端配置中添加以下内容即可接入米家:
76
+
77
+ ```json
78
+ {
79
+ "mcpServers": {
80
+ "mijia-api": {
81
+ "command": "uvx",
82
+ "args": ["mijiaAPI", "mcp", "-p", "/path/to/auth.json"]
83
+ }
84
+ }
85
+ }
86
+ ```
87
+
69
88
  更多用法(API 基础调用、MCP Server、CLI 完整参数、最佳实践等)请查阅[完整文档](https://mijia-api.do1e.com)。
70
89
 
71
90
  ## 致谢
@@ -1 +0,0 @@
1
- version = "4.0.0"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes