内容
# 轴心MCP服务器
### 首款搭载于摄像机的模型上下文协议服务器 — 将每台轴心摄像头转变为AI原生设备
> **任意AI。任意摄像头。零云服务。**
> 安装一个`.eap`文件,Claude、Gemini、ChatGPT、Perplexity或您自己的代理可以直接在摄像头上看到、理解和操作摄像头 — 无需云服务。
---
<img width="1263" height="919" alt="axis-mcp-server-console-claude-connected" src="https://github.com/user-attachments/assets/64968f31-68d5-4023-8d2c-d3b19f6c5e28" />
## 突破
二十年来,集成IP摄像头意味着学习VAPIX、连接SOAP事件、处理摘要认证以及为每个项目构建定制后端。AI代理更是雪上加霜:每个代理都需要一个自定义桥梁、一个云中继和一个安全审查。
**轴心MCP服务器将所有这些功能压缩为一个安装包。** 它在摄像头内部作为原生ACAP运行一个符合标准的[模型上下文协议](https://modelcontextprotocol.io)服务器 — 无需网关、无需中间件、无需云端往返。指向任何支持MCP的AI客户端`http://<camera-ip>/mcp`,它立即获得一个丰富、结构化的设备工具集。
这是在最真实意义上的边缘AI:智能在摄像头自己的环回接口上与摄像头通信。除非您选择暴露它,否则没有任何数据离开局域网。
---
<img width="1635" height="959" alt="claude-code-camera-view-areas" src="https://github.com/user-attachments/assets/53666828-ef9c-4005-bf0f-6cac687ad85b" />
## 为什么它是一个定义类别的获奖解决方案
**这是真正首创的。** MCP服务器在笔记本电脑和云端运行。这个服务器直接在摄像头上运行 — 一个Node.js运行时被捆绑到一个原生AXIS OS 12 ACAP中,使用现代代理期望的Streamable HTTP协议。这一组合以前并不存在。
**它解锁了一个庞大的已安装基数。** 轴心公司已经出货了数百万台摄像头;运行AXIS OS 11–12的ARTPEC-7/8/9世代在大型部署中仅数量就达到了数万台。一个`.eap`文件使所有这些摄像头都可以被AI寻址 — 无需硬件更改,无需更换设备。
**它在设计上是模型无关的。** 因为它通过HTTP公开开放的MCP,所以它与Claude、Google Antigravity / Gemini、ChatGPT开发人员模式、Perplexity、Claude Code以及任何自定义代理一起工作 — 今天和未来。
**它尊重企业。** 通过摄像头自己的管理员身份验证反向代理,带有可选的承载者保护的直接端口用于LAN自动化。参数写入是允许列出的。除非操作员故意隧道传输,否则没有任何内容暴露给互联网。
---
## AI可以实际执行的操作
开箱即用,服务器通过MCP公开了一套精选的工具:
- **设备和健康状况** — 型号、序列号、固件、运行时间、温度、网络和时间。
- **成像和光学** — 捕获实时JPEG快照,模型可以看到,读取和调整图像设置,驱动变焦/聚焦,并通过自动发现光学器件并记住有效方法的四种方法运行**自动聚焦**。
- **事件和分析** — 列出摄像头的事件主题并报告设备分析(如AXIS对象分析和运动检测)的状态。
- **应用程序控制** — 列出、启动和停止ACAP;读取和(安全)更新参数。
- **CamStreamer套件** — 列出和控制CamStreamer流,切换和排队CamSwitcher视图,并更新CamOverlay自定义图形和信息提要。询问代理*“切换到门视图并启动YouTube流,”*它就会发生。
每个工具都返回干净的、结构化的数据,一个大型语言模型可以推理这些数据 — 而不是原始CGI转储。
---
<img width="576" height="893" alt="claude-code-list-installed-acaps" src="https://github.com/user-attachments/assets/7bece3fa-56b9-4921-a259-3c76df069909" />
## 一个真正令人愉悦的操作员控制台
内置的设置页面是一个实时控制室,而不是一个表单:
- **一眼可见的状态** — 应用程序健康状况、VAPIX连接性和设备标识,带有单击即可运行的自检。
- **实时日志** — 每个请求和每个MCP工具调用都会实时流入,镜像到AXIS系统日志。
- **独特的标志:动画AI存在。** 控制台识别**哪个**模型已连接并渲染其徽标为ASCII字符 — Claude火花,Gemini星星,OpenAI结,Antigravity标记 — 带有在AI和摄像头之间脉动的动画链接和“LLM已连接”指示器。它将一个不可见的协议变成您可以观看、演示和喜欢的东西。
这是一种赢得奖项和赢得青睐的细节。
---
<img width="1215" height="422" alt="axis-mcp-server-installed-on-camera" src="https://github.com/user-attachments/assets/eaa61ca7-ed27-4d0a-83dc-ed0a11386176" />
## 构建正确
- **AXIS OS 11/12的原生ACAP** (ARTPEC-8,`aarch64`),使用官方ACAP原生SDK打包。
- **Streamable HTTP MCP** ,无状态 — 干净地生存于摄像机的重启生命周期中。
- **从头开始构建的VAPIX摘要客户端** ,尊重现代MD5和SHA-256挑战。
- **捆绑的Node.js 20** — 对摄像头没有运行时假设。
- **通过构造强化** — 可写入路径的自动发现、前缀无关路由、在给定模型上不存在某个功能时的优雅降级。
---
## 适用人群
- **运维集成商** ,无需构建后端即可交付AI辅助监控。
- **广播和实时制作团队** ,让代理编排CamStreamer和CamSwitcher。
- **安全运营** ,为分析师提供直接连接到设备的自然语言线路。
- **开发人员和研究人员** ,在几分钟内(而不是几周内)原型设计代理摄像头控制。
---
## 一句话推销
> **轴心MCP服务器将模型上下文协议服务器放入摄像头中 — 在无需云服务、无需中间件和无需妥协的情况下,打开数万台轴心设备以供任意AI使用。**
*安装`.eap`文件。指向您的代理摄像头。看着它活起来。*
一个独立的ACAP(`.eap`)在轴心摄像头(ARTPEC-8,AXIS OS 12 — 例如Q1656)上直接运行**模型上下文协议服务器**。它通过**Streamable HTTP**公开VAPIX支持的工具,以便Claude
Desktop / Claude Code可以连接到摄像头并检查/控制它。
使用ACAP **原生SDK** (Node.js 20捆绑到软件包中)构建。摄像头上没有Docker运行 —
Docker仅用于在您的Mac上**构建**.eap。
<div align="center">
<img width="758" height="154" alt="mcp-client-ascii-logos" src="https://github.com/user-attachments/assets/e60d0fcc-0368-4a53-85d5-297773e98aa8" />
</div>
## 布局
```
axis-mcp-acap/
├── Dockerfile # ACAP原生SDK构建(aarch64)
├── build.sh # docker build + docker cp -> .eap
├── plan.md # 设计计划
└── app/
├── manifest.json # schemaVersion 1.7.4; appName axis_mcp
├── axis_mcp # 启动器(文件名 == appName)
├── Makefile # no-op(acap-build运行make)
├── LICENSE
├── package.json # main: dist/bootstrap.js
├── tsconfig.json
├── src/
│ ├── bootstrap.ts # HTTP服务器:/mcp,/status.cgi,/settings.cgi
│ ├── mcpServer.ts # McpServer + 工具注册
│ ├── vapix.ts # 摘要认证客户端(MD5 + SHA-256)
│ ├── settings.ts # 持久化配置(PERSISTENT_DATA_PATH)
│ └── tools/ # 设备、成像、事件、应用程序
└── html/index.html # 设置UI(浅色默认 + 主题切换器)
```
## 工具(v1)
| 工具 | VAPIX |
|---|---|
| `get_device_info` | basicdeviceinfo.cgi(getAllProperties) |
| `get_system_status` | param.cgi(Network/Brand/Firmware)+ temperaturecontrol.cgi |
| `get_time` | time.cgi |
| `take_snapshot` | jpg/image.cgi → MCP图像内容 |
| `get_image_settings` / `set_image_settings` | param.cgi ImageSource/Image |
| `get_optics` | opticscontrol.cgi getOptics(ids + capabilities) |
| `autofocus` | 级联:opticscontrol.cgi performAutofocus → startFocusSearch → opticssetup.cgi → ptz.cgi?autofocus=on(缓存工作方法) |
| `set_zoom_focus` | opticscontrol.cgi setMagnification / autofocus级联 |
| `list_event_declarations` | SOAP GetEventInstances |
| `get_analytics_status` | applications/list.cgi(filtered) |
| `list_apps` / `control_app` | applications/list.cgi,control.cgi |
| `get_params` / `set_param` | param.cgi(写入允许列表) |
### CamStreamer套件(需要安装相应的ACAP)
| 工具 | 端点 |
|---|---|
| `camstreamer_list_streams` | /local/camstreamer/stream/list.cgi |
| `camstreamer_stream_status` | /local/camstreamer/stream/status.cgi |
| `camstreamer_control_stream` | /local/camstreamer/stream/set.cgi(start/stop) |
| `camswitcher_list_playlists` | /local/camswitcher/playlists.cgi?action=get |
| `camswitcher_switch_playlist` | /local/camswitcher/playlist_switch.cgi |
| `camswitcher_queue_playlist` | /local/camswitcher/playlist_queue_push.cgi |
| `camswitcher_get_queue` / `camswitcher_play_next` / `camswitcher_clear_queue` | playlist_queue_*.cgi |
| `camswitcher_output_info` / `camswitcher_list_clips` | output_info.cgi,clips.cgi |
| `camoverlay_list_services` | /local/camoverlay/api/services.cgi |
| `camoverlay_set_service_enabled` | services.cgi?action=set |
| `camoverlay_update_graphic_text` | customGraphics.cgi?action=update_text |
| `camoverlay_infoticker` | infoticker.cgi |
这些调用同一个摄像头上的CamStreamer/CamSwitcher/CamOverlay CGI,使用相同的摘要认证。
如果相应的ACAP未安装,则工具会返回一个清晰的“未安装”错误。
## 构建
在您的Mac上需要Docker Desktop。
```sh
cd axis-mcp-acap
sh build.sh arm64 # -> Axis_MCP_Server_1_0_0_aarch64.eap(或axis_mcp_*.eap)
```
## 安装
摄像头UI → **系统→应用程序** → 启用*允许未签名应用程序* → **添加应用程序** → 上传aarch64 `.eap` →
**启动**。打开应用程序的设置页面,输入VAPIX管理员凭证,单击**运行自检**。
## 连接MCP客户端
两个端点:
- 反向代理(摄像头强制管理员摘要认证):
`http://<camera-ip>/local/axis_mcp/mcp`
- 直接LAN端口(适用于不支持摘要认证的客户端;可选的承载者令牌):
`http://<camera-ip>:8000/mcp`
```sh
claude mcp add --transport http axis-q1656 http://<camera-ip>:8000/mcp
```
检查:`npx @modelcontextprotocol/inspector`
## 验证检查清单
- [ ] `.eap`文件在FW 12.x上安装并启动,无manifest错误
- [ ] `curl -X POST http://<ip>:8000/mcp`带有`initialize`正文返回服务器信息
- [ ] MCP Inspector列出所有工具,每个工具返回实时数据
- [ ] `take_snapshot`返回可查看的JPEG
- [ ] `set_param`拒绝非允许列表组
- [ ] 应用程序在重启后存活(保存设置→应用程序重启→MCP仍然回答)
- [ ] 清洁的SIGINT退出
## 备注
- 摘要认证尊重`algorithm`指令(MD5 **和** SHA-256 + `-sess`)— 仅MD5的客户端在现代AXIS OS上获得静默401。
- 应用程序服务器绑定`process.env.HTTP_PORT`(AXIS OS分配它;仅用于本地开发的32554)。
- 直接端口在LAN上的可达性取决于摄像头防火墙;反向代理路径是批准的路由。如果启用直接端口,请设置承载者令牌。