GitHub平台功能大揭秘:含AI创作与安全防护,适配SharkClean扫地机器人MCP服务器
导航菜单可切换导航。[ ](/)[ 登录 ](/login?return_tohttps%3A%2F%2Fgithub.com%2Fa-funk%2Fsharkclean-mcp)外观设置平台-AI 代码创作- GitHub Copilot借助 AI 编写更优质代码- GitHub Copilot 应用从问题到合并的直接代理- MCP 注册表新功能集成外部工具-开发者工作流- Actions自动化任何工作流- Codespaces即时开发环境- Issues规划和跟踪工作- 代码审查管理代码变更-应用程序安全- GitHub 高级安全发现并修复漏洞- 代码安全在构建过程中保障代码安全- 密钥保护防患于未然阻止信息泄露-探索- 为何选择 GitHub- 文档- 博客- 更新日志- 市场查看所有功能解决方案-按公司规模划分- 企业版- 中小型团队版- 初创公司版- 非营利组织版-按用例划分- 应用现代化- DevSecOps- DevOps- CI/CD- 查看所有用例-按行业划分- 医疗保健- 金融服务- 制造业- 政府部门- 查看所有行业查看所有解决方案资源-按主题探索- AI- 软件开发- DevOps- 安全- 查看所有主题-按类型探索- 客户案例- 活动与网络研讨会- 电子书与报告- 商业洞察- GitHub 技能-支持与服务- 文档- 客户支持- 社区论坛- 信任中心- 合作伙伴查看所有资源开源-社区- GitHub 赞助资助开源开发者-项目- 安全实验室- 维护者社区- 加速器- GitHub 明星项目- 存档项目-仓库- 主题- 热门趋势- 集合企业版-企业解决方案- 企业平台由 AI 驱动的开发者平台-可用附加组件- GitHub 高级安全企业级安全功能- Copilot for Business企业级 AI 功能- 高级支持企业级 24/7 支持定价搜索或跳转至...可进行搜索。清除搜索语法提示提供反馈我们会阅读每一条反馈并认真对待您的意见。包含我的电子邮件地址以便能与我联系取消 提交反馈保存的搜索使用保存的搜索可以更快地过滤结果名称查询要查看所有可用的限定符请参阅我们的文档。取消 创建保存的搜索[ 登录 ](/login?return_tohttps%3A%2F%2Fgithub.com%2Fa-funk%2Fsharkclean-mcp)[ 注册 ](/signup?ref_ctaSignupref_locheaderloggedoutref_page%2F%3Cuser-name%3E%2F%3Crepo-name%3Esourceheader-reposource_repoa-funk%2Fsharkclean-mcp)外观设置重置焦点您已在另一个标签页或窗口中登录。[重新加载]()以刷新您的会话。您已在另一个标签页或窗口中注销。[重新加载]()以刷新您的会话。您已在另一个标签页或窗口中切换账户。[重新加载]()以刷新您的会话。 关闭提醒{{ message }}[ a-funk ](/a-funk) /[sharkclean-mcp](/a-funk/sharkclean-mcp)公开- [ 通知 ](/login?return_to%2Fa-funk%2Fsharkclean-mcp) 您必须登录才能更改通知设置- [ 复刻 0 ](/login?return_to%2Fa-funk%2Fsharkclean-mcp)- [ 收藏 3 ](/login?return_to%2Fa-funk%2Fsharkclean-mcp)- [ 代码 ](/a-funk/sharkclean-mcp)- [ 问题 0 ](/a-funk/sharkclean-mcp/issues)- [ 拉取请求 1 ](/a-funk/sharkclean-mcp/pulls)- [ 操作 ](/a-funk/sharkclean-mcp/actions)- [ 项目 ](/a-funk/sharkclean-mcp/projects)- [ 安全与质量 0 ](/a-funk/sharkclean-mcp/security)- [ 洞察 ](/a-funk/sharkclean-mcp/pulse)其他导航选项- [ 代码 ](/a-funk/sharkclean-mcp)- [ 问题 ](/a-funk/sharkclean-mcp/issues)- [ 拉取请求 ](/a-funk/sharkclean-mcp/pulls)- [ 操作 ](/a-funk/sharkclean-mcp/actions)- [ 项目 ](/a-funk/sharkclean-mcp/projects)- [ 安全与质量 ](/a-funk/sharkclean-mcp/security)- [ 洞察 ](/a-funk/sharkclean-mcp/pulse)[](/a-funk/sharkclean-mcp)a-funk/sharkclean-mcp主分支[分支](/a-funk/sharkclean-mcp/branches)[标签](/a-funk/sharkclean-mcp/tags)[](/a-funk/sharkclean-mcp/branches)[](/a-funk/sharkclean-mcp/tags)转到文件代码打开更多操作菜单文件夹和文件名称名称最后提交消息最后提交日期最新提交历史记录[6 次提交](/a-funk/sharkclean-mcp/commits/main/)[](/a-funk/sharkclean-mcp/commits/main/)6 次提交[.github/workflows](/a-funk/sharkclean-mcp/tree/main/.github/workflows 此路径跳过空目录)| [.github/workflows](/a-funk/sharkclean-mcp/tree/main/.github/workflows 此路径跳过空目录)| |[src/shark_mcp](/a-funk/sharkclean-mcp/tree/main/src/shark_mcp 此路径跳过空目录)| [src/shark_mcp](/a-funk/sharkclean-mcp/tree/main/src/shark_mcp 此路径跳过空目录)| |[tests](/a-funk/sharkclean-mcp/tree/main/tests 测试)| [tests](/a-funk/sharkclean-mcp/tree/main/tests 测试)| |[.env.example](/a-funk/sharkclean-mcp/blob/main/.env.example .env.example)| [.env.example](/a-funk/sharkclean-mcp/blob/main/.env.example .env.example)| |[.gitignore](/a-funk/sharkclean-mcp/blob/main/.gitignore .gitignore)| [.gitignore](/a-funk/sharkclean-mcp/blob/main/.gitignore .gitignore)| |[.mcp.json.example](/a-funk/sharkclean-mcp/blob/main/.mcp.json.example .mcp.json.example)| [.mcp.json.example](/a-funk/sharkclean-mcp/blob/main/.mcp.json.example .mcp.json.example)| |[CHANGELOG.md](/a-funk/sharkclean-mcp/blob/main/CHANGELOG.md CHANGELOG.md)| [CHANGELOG.md](/a-funk/sharkclean-mcp/blob/main/CHANGELOG.md CHANGELOG.md)| |[CONFIRMED_MODELS.md](/a-funk/sharkclean-mcp/blob/main/CONFIRMED_MODELS.md CONFIRMED_MODELS.md)| [CONFIRMED_MODELS.md](/a-funk/sharkclean-mcp/blob/main/CONFIRMED_MODELS.md CONFIRMED_MODELS.md)| |[CONTRIBUTING.md](/a-funk/sharkclean-mcp/blob/main/CONTRIBUTING.md CONTRIBUTING.md)| [CONTRIBUTING.md](/a-funk/sharkclean-mcp/blob/main/CONTRIBUTING.md CONTRIBUTING.md)| |[LICENSE](/a-funk/sharkclean-mcp/blob/main/LICENSE LICENSE)| [LICENSE](/a-funk/sharkclean-mcp/blob/main/LICENSE LICENSE)| |[README.md](/a-funk/sharkclean-mcp/blob/main/README.md README.md)| [README.md](/a-funk/sharkclean-mcp/blob/main/README.md README.md)| |[SECURITY.md](/a-funk/sharkclean-mcp/blob/main/SECURITY.md SECURITY.md)| [SECURITY.md](/a-funk/sharkclean-mcp/blob/main/SECURITY.md SECURITY.md)| |[pyproject.toml](/a-funk/sharkclean-mcp/blob/main/pyproject.toml pyproject.toml)| [pyproject.toml](/a-funk/sharkclean-mcp/blob/main/pyproject.toml pyproject.toml)| |[uv.lock](/a-funk/sharkclean-mcp/blob/main/uv.lock uv.lock)| [uv.lock](/a-funk/sharkclean-mcp/blob/main/uv.lock uv.lock)| |查看所有文件仓库文件导航- README- 贡献指南- MIT 许可证- 安全sharkclean-mcp这是一个适用于 SharkClean / SharkNinja 扫地机器人的 MCP 服务器。它允许任何 MCP 客户端如 Claude Code、Claude Desktop 等以自然语言的方式智能地启动清扫任务、清扫特定房间、让机器人返回基站以及检查状态。非官方项目与 SharkNinja 无关联也未得到其认可。所有命令都通过 SharkNinja 当前的云服务“skegox”执行这与 SharkClean 应用使用的后端相同因此机器人的行为与通过应用控制时完全一致无需对硬件进行修改。为何不使用 Ayla 云广泛使用的 sharkiq SDK以及基于它构建的 Home Assistant Shark IQ 集成与 SharkNinja 的旧版 Ayla IoT 云进行通信。较新的机器人如 Matrix、AI Ultra、Mach 2、RV2500 系列已从 Ayla 迁移到 skegox 后端。在 Ayla 上这些机器人显示为永久“离线”房间地图冻结且陈旧尽管应用可以正常控制它们。此服务器直接与 skegox 通信因此它可以与 sharkiq 无法控制的较新机器人兼容。对 skegox API 的逆向工程得益于 shark2mqtt 项目。工具工具功能list_robots列出账户中的机器人名称、设备 IDget_status获取实时状态清扫/暂停/停靠、电池百分比、充电状态、功率模式、在线状态、错误信息start_cleaning全屋清扫可选功率模式eco/normal/maxlist_rooms列出机器人当前地图中的房间包含楼层 ID 和最后更新时间clean_rooms仅清扫特定房间根据实时地图进行验证pause_cleaning / resume_cleaning / stop_cleaning运行控制return_to_dock让机器人返回基站充电/自清洁set_power_mode设置吸力eco、normal、maxlocate_robot让机器人发出蜂鸣声start_cleaning 和 clean_rooms 会先检查机器人是否在线如果不在线则拒绝执行命令避免命令无声无息地丢失。支持多机器人账户每个工具都可以接受一个可选的 robot 参数名称或设备 ID。如果只有一个机器人可以省略该参数。设置需要 uv 和 Python ≥ 3.10。git clone https://github.com/a-funk/sharkclean-mcpcd sharkclean-mcpuv synccp .env.example .env # 添加您的 SharkClean 应用电子邮件和密码uv run shark-mcp-auth # 一次性浏览器登录见下文uv run shark-mcp-doctor # 确认打印您的机器人和当前房间地图一次性登录 (shark-mcp-auth)SharkNinja 的 Auth0 租户阻止无头密码登录因此首次登录需要在浏览器中使用 SharkClean 应用的 PKCE 流程1. shark-mcp-auth 会打开真正的 SharkClean 登录页面。2. 登录。浏览器随后会尝试重定向到 com.sharkninja.shark://...通常会显示错误、空白页面或“打开 SharkClean”对话框这是正常现象。3. 复制完整的 com.sharkninja.shark://... URL从地址栏、浏览器历史记录或开启“保留日志”的 DevTools 网络标签中获取并在提示处粘贴。完成以上步骤即可。令牌会缓存到 ~/.config/shark-mcp/tokens.json权限模式为 600并自动刷新之后无需再使用浏览器登录。有关凭证处理方式请参阅 SECURITY.md。在 MCP 客户端注册-Claude Code用户级claude mcp add --scope user sharkclean -- uv run --directory /ABSOLUTE/PATH/TO/sharkclean-mcp shark-mcp或者将 .mcp.json.example 复制为 .mcp.json设置绝对路径Claude Code 在打开此目录时会自动识别。-Claude Desktop将以下内容添加到 claude_desktop_config.json 中{mcpServers: {sharkclean: {command: uv,args: [run, --directory, /ABSOLUTE/PATH/TO/sharkclean-mcp, shark-mcp]}}}凭证来自环境变量或 .env 文件SHARKCLEAN_EMAIL、SHARKCLEAN_PASSWORD可选的 SHARKCLEAN_REGIONeu。示例提示- “启动最大功率清扫。”- “清扫厨房和客厅。”- “扫地机器人清扫完了吗电池还有多少”- “让机器人返回基站。”命令行控制除了 MCP 服务器shark-mcp-rc 可以在 shell 中控制机器人适用于脚本或定时任务uv run shark-mcp-rc statusuv run shark-mcp-rc roomsuv run shark-mcp-rc clean Kitchen Living Roomuv run shark-mcp-rc start maxuv run shark-mcp-rc dock开发uv run pytest # 单元测试模拟机器人不进行云调用uv run shark-mcp # 在标准输入输出上运行服务器uv run shark-mcp-doctor # 针对云进行实时端到端检查请参阅 CONTRIBUTING.md。如果您的机器人可以正常工作请将其添加到 CONFIRMED_MODELS.md 中。注意事项和限制- 认证一次性浏览器登录 (shark-mcp-auth) 会生成一个 Auth0 刷新令牌缓存到 ~/.config/shark-mcp/tokens.json。服务器会使用该令牌生成短期的 skegox id_token。SharkNinja 的 Auth0 租户会轮换刷新令牌因此服务器会在每次刷新时保存轮换后的令牌。如果出现 invalid_grant 错误请重新运行 shark-mcp-auth。- 无头/脚本化密码登录会被 Auth0 的机器人检测机制阻止“可疑请求需要验证”浏览器流程是可靠的登录方式。- 房间定位 (clean_rooms) 需要机器人有完整的地图较旧的不支持房间识别的型号将无法列出房间。- 这是一个非官方项目基于社区的逆向工程构建。SharkNinja 可能随时更改后端。关于这是一个适用于 SharkClean / SharkNinja 扫地机器人的 MCP 服务器可以通过任何 MCP 客户端启动清扫任务、清扫房间、让机器人返回基站以及检查状态。主题家庭自动化 mcp 鲨鱼 claude 扫地机器人 模型上下文协议 sharkninja资源- 自述文件- 许可证MIT 许可证- 贡献指南- 安全策略哎呀加载时出现错误。[请重新加载此页面]()[ 活动](/a-funk/sharkclean-mcp/activity)收藏**3** 个收藏关注者**0** 个关注者复刻**0** 个复刻举报仓库[版本发布](/a-funk/sharkclean-mcp/releases)1 个标签[包 0](/users/a-funk/packages?repo_namesharkclean-mcp)哎呀加载时出现错误。[请重新加载此页面]()贡献者* * *哎呀加载时出现错误。[请重新加载此页面]()Python 100.0%页脚[ ](https://github.com) (C) 2026 GitHub, Inc.页脚导航- 条款- 隐私- 安全- 状态- 社区- 文档- 联系我们- 管理 Cookie- 不共享我的个人信息此时您无法执行该操作。