一个MCP服务器
Eagle Eye Networks相机系统的模型上下文协议(MCP)服务器。该服务器使Claude和Gemini等AI助手能够与EEN摄像头交互,查看实时/记录的图像,查询事件,管理布局等。
特性
- 相机管理:列出摄像头,查看摄像头详细信息,按状态过滤
- 实时和录制的图像:获取当前快照或历史录像
- 布局管理:查看和查询相机布局(预定义网格视图)
- 事件查询:查询运动事件、分析事件和60多种事件类型
- 用户管理:查看用户和当前用户配置文件
- 警报访问:查询触发的警报和通知
- 桥梁信息:查看网桥设备及其连接状态
- 多账户支持:在多个EEN帐户之间进行配置和切换
- 自动选择单个帐户:当只配置一个帐户时,会自动为API调用选择该帐户
- 自动令牌刷新:令牌在到期前会自动刷新
先决条件
- Node.js 18.0或更高版本
- 鹰眼网络帐户
- 来自EEN开发者门户的OAuth客户端凭据(客户端ID和密钥)
安装
# Clone the repository
git clone https://github.com/klaushofrichter/een-api-mcp.git
cd een-api-mcp
# Install dependencies
npm install
# Install Playwright browsers (required for OAuth authentication)
npx playwright install chromium
# Build the project
npm run build认证
MCP服务器在使用前需要进行预身份验证。身份验证是通过CLI工具处理的,该工具通过无头浏览器执行OAuth登录。
设置环境变量
创建 .env 使用OAuth客户端凭据在项目根目录中创建文件:
EEN_CLIENT_ID=your-client-id
EEN_CLIENT_SECRET=your-client-secret您可以从以下网址获取这些凭据 鹰眼网络开发者门户.
登录进程
身份验证CLI使用Playwright自动化OAuth登录流程:
# Basic login (will prompt for password if not provided)
npm run auth login -- --username user@example.com
# Login with password on command line
npm run auth login -- --username user@example.com --password "your-password"
# Login and store password for automatic re-authentication
npm run auth login -- \
--username user@example.com \
--password "your-password" \
--persistPassword
# Provide OAuth credentials explicitly (overrides .env)
npm run auth login -- \
--username user@example.com \
--password "your-password" \
--client-id your-client-id \
--client-secret your-client-secret \
--persistPassword重要标志:
--persistPassword:在本地加密并存储密码,以便在令牌过期时自动重新验证--client-id/--client-secret:覆盖OAuth凭据的环境变量
验证身份验证
# List all configured accounts
npm run auth list
# Show detailed status including token expiration
npm run auth status状态输出示例:
Account: user@example.com
User: John Doe
Base URL: https://api.c001.eagleeyenetworks.com:443
Token Valid: true
Expires: 2026-01-28T22:48:44.000Z
Password Stored: true管理多个帐户
您可以配置多个EEN帐户并在它们之间切换:
# Login to additional accounts
npm run auth login -- --username another@example.com --persistPassword
# List all accounts
npm run auth list
# Revoke and remove an account
npm run auth revoke -- --account user@example.com帐户自动选择
MCP服务器包括自动帐户选择,以提高与AI助手的兼容性:
- 单一账户:当只配置一个帐户时,会自动为API调用选择该帐户,而无需
een_set_account先被叫 - 多个帐户:配置多个帐户时,必须使用以下命令明确选择一个
een_set_account在进行API调用之前
当使用可能并不总是调用的AI助手时,此功能提高了鲁棒性 een_set_account 在发出API请求之前。
凭据存储
凭据被安全地存储:
- 位置:
~/.een-mcp/credentials.json - 权限:文件是使用创建的
0600(仅限所有者读/写) - 密码加密:密码使用AES-256-GCM和机器特定密钥进行加密
- 许可证管理:访问令牌在到期前5分钟自动刷新
配置Claude
MCP服务器可以与Claude Desktop或Claude Code一起使用。
Claude桌面配置
将MCP服务器添加到Claude Desktop配置文件中:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%\Claude\claude_desktop_config.json
使用内置版本(建议用于生产):
{
"mcpServers": {
"een-mcp-server": {
"command": "node",
"args": ["/absolute/path/to/een-api-mcp/dist/src/index.js"],
"env": {
"EEN_CLIENT_ID": "your-client-id",
"EEN_CLIENT_SECRET": "your-client-secret"
}
}
}
}直接使用TypeScript(用于开发):
{
"mcpServers": {
"een-mcp-server": {
"command": "npx",
"args": ["tsx", "/absolute/path/to/een-api-mcp/src/index.ts"],
"env": {
"EEN_CLIENT_ID": "your-client-id",
"EEN_CLIENT_SECRET": "your-client-secret"
}
}
}
}更新配置后,重新启动Claude Desktop。
Claude代码配置
对于Claude Code,将MCP服务器添加到您的设置文件中:
全局设置: ~/.claude/settings.json 项目设置: .mcp.json 在项目根中
{
"mcpServers": {
"een-mcp-server": {
"command": "node",
"args": ["/absolute/path/to/een-api-mcp/dist/src/index.js"]
}
}
}提供了一个模板配置文件: mcp-config-template.json
验证连接
配置后,您可以通过询问Claude来验证MCP服务器是否已连接:
“我配置了哪些EEN帐户?”
克劳德应该使用 een_list_accounts 工具并返回您配置的帐户。
配置Gemini CLI
MCP服务器也可以与 谷歌Gemini CLI.
Gemini CLI配置
将MCP服务器添加到Gemini CLI设置文件中:
全局设置: ~/.gemini/settings.json
{
"mcpServers": {
"een-mcp-server": {
"command": "node",
"args": ["/absolute/path/to/een-api-mcp/dist/src/index.js"],
"env": {
"EEN_CLIENT_ID": "your-client-id",
"EEN_CLIENT_SECRET": "your-client-secret"
},
"timeout": 60000
}
}
}可选参数:
timeout:请求超时(毫秒)(默认值:600000)trust:设置为true绕过工具确认(谨慎使用)cwd:服务器进程的工作目录
与npx一起使用(替代)
您也可以直接通过npx运行服务器,而无需本地安装:
{
"mcpServers": {
"een-mcp-server": {
"command": "npx",
"args": ["tsx", "/absolute/path/to/een-api-mcp/src/index.ts"],
"env": {
"EEN_CLIENT_ID": "your-client-id",
"EEN_CLIENT_SECRET": "your-client-secret"
}
}
}
}验证连接
配置后,通过询问Gemini来验证MCP服务器是否已连接:
“我配置了哪些EEN帐户?”
双子座应该使用 een_list_accounts 工具并返回您配置的帐户。
可用工具
身份验证工具(3)
| 工具 | 说明 |
|---|---|
een_auth_status | 检查所有已配置帐户的身份验证状态 |
een_list_accounts | 列出所有已配置的帐户ID |
een_set_account | 为后续API调用设置活动帐户 |
相机工具(2)
| 工具 | 说明 |
|---|---|
een_get_cameras | 列出具有分页、按状态过滤和名称搜索功能的摄像头 |
een_get_camera | 获取特定相机的详细信息 |
媒体工具(3)
| 工具 | 说明 |
|---|---|
een_get_live_image | 从相机获取当前实时快照(返回base64 JPEG) |
een_get_recorded_image | 获取特定时间戳的历史图像 |
een_list_media | 列出记录间隔(有可用记录的时间段) |
事件工具(2)
| 工具 | 说明 |
|---|---|
een_get_events | 使用参与者、类型和时间范围过滤器查询事件 |
een_get_event_types | 列出所有60+可用事件类型 |
用户工具(3)
| 工具 | 说明 |
|---|---|
een_get_current_user | 获取经过身份验证的用户的个人资料 |
een_get_users | 列出帐户中的所有用户 |
een_get_user | 获取特定用户的详细信息 |
警报工具(1)
| 工具 | 说明 |
|---|---|
een_get_alerts | 使用时间、参与者和类型过滤器列出触发的警报 |
桥接工具(2)
| 工具 | 说明 |
|---|---|
een_get_bridges | 列出具有可选状态过滤的网桥设备 |
een_get_bridge | 获取特定桥梁的详细信息 |
布局工具(2)
| 工具 | 说明 |
|---|---|
een_get_layouts | 列出相机布局(预定义网格视图) |
een_get_layout | 获取布局详细信息,包括相机窗格和显示设置 |
用法示例
配置后,您可以通过自然语言与EEN摄像头进行交互:
身份验证:
- “我配置了哪些EEN帐户?”
- “显示我的身份验证状态”
摄像头:
- “列出我的所有相机”
- “显示所有在线摄像头”
- “哪些摄像头当前处于离线状态?”
- “我有多少台相机?”
实时图像:
- “从前门摄像头拍摄快照”
- “显示摄像头1005963a的实时图像”
录制视频:
- “给我看昨天下午3点大厅摄像头的录像”
- “获取一小时前的录制图像”
活动:
- “我可以查询哪些类型的事件?”
- “在过去的一个小时里,第一台摄像机上有任何动态事件吗?”
警报:
- “显示最近的提醒”
- “今天触发了哪些警报?”
桥梁:
- “列出我的所有桥梁”
- “我的任何桥梁都离线了吗?”
用户:
- “我以谁的身份登录?”
- 列出我的EEN帐户中的所有用户
布局:
- “列出我的所有相机布局”
- “给我看看Klaus布局的细节”
- “我的布局中有哪些摄像头?”
组合查询:
- “给我所有相机、网桥和布局的状态概述”
测试
集成测试
该项目包括针对实时EEN API运行的全面集成测试。这些测试需要一个已配置并经过身份验证的帐户。
# Run all integration tests
npm test
# Run specific test file
npx vitest run test/integration/tools.test.ts
# Run tests for a specific category
npx vitest run test/integration/tools.test.ts -t "Camera"
npx vitest run test/integration/tools.test.ts -t "Layout"
npx vitest run test/integration/tools.test.ts -t "Event"测试套件包括:
- 身份验证工具:帐户列表、状态检查、帐户切换
- 摄影机工具:列出摄像头,按状态过滤,获取摄像头详细信息
- 媒体工具:实时快照、录制的图像、录制间隔
- 事件工具:事件类型列表、运动事件查询
- 警报工具:警报列表和筛选
- 桥接工具:桥梁列表和详细信息
- 布局工具:布局列表、筛选和详细信息
- 错误处理:参数无效,工具未知
通过环境变量配置测试帐户:
TEST_USER=your-test-account@example.com npm test快速测试
提供了一个bash脚本,用于通过Claude Code在MCP服务器上测试自然语言提示:
# Interactive menu to select and run prompts
./test-prompts.sh
# List all available test prompts
./test-prompts.sh --list
# Run all prompts sequentially
./test-prompts.sh --all
# Run a specific prompt by number
./test-prompts.sh 3
# Run a custom prompt
./test-prompts.sh --custom "Show me a live image from camera 1005963a"该脚本包括22个预定义的提示,涵盖所有工具类别:
- 身份验证(3个提示)
- 摄像头(4个提示)
- 媒体(2个提示)
- 事件(2个提示)
- 警报(1个提示)
- 桥接(2个提示)
- 用户(2个提示)
- 布局(5个提示)
- 组合查询(1个提示)
其他示例提示记录在 example-prompts.md.
备注:提示测试脚本要求安装Claude Code,并在Claude Code设置中配置MCP服务器。
项目结构
een-api-mcp/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── api/ # EEN API client functions
│ │ ├── client.ts # Base HTTP client with auth
│ │ ├── cameras.ts # Camera API
│ │ ├── bridges.ts # Bridge API
│ │ ├── users.ts # User API
│ │ ├── events.ts # Event API
│ │ ├── alerts.ts # Alert API
│ │ ├── media.ts # Media/image API
│ │ └── layouts.ts # Layout API
│ ├── auth/ # Authentication module
│ │ ├── token-manager.ts # Token storage and refresh
│ │ ├── oauth.ts # OAuth login flow
│ │ └── crypto.ts # Password encryption
│ ├── tools/ # MCP tool definitions
│ │ ├── definitions.ts # JSON Schema tool definitions
│ │ └── handlers.ts # Tool implementation
│ └── types/ # TypeScript type definitions
├── cli/
│ └── auth.ts # Authentication CLI
├── test/
│ └── integration/ # Integration tests
├── .env # Environment variables (create this)
├── mcp-config-template.json # Template MCP configuration
└── test-prompts.sh # Prompt testing script安全
- 凭据存储:
~/.een-mcp/credentials.json和0600权限 - 密码加密:带机器特定密钥的AES-256-GCM
- 许可证管理:过期前5分钟自动刷新
- 刷新令牌轮换:支持EEN OAuth刷新令牌轮换
- 代码中没有凭据:通过环境变量或CLI获取所有机密
故障排除
“找不到凭据文件”
运行auth-CLI登录:
npm run auth login -- --username user@example.com --persistPassword“未选择帐户”
MCP工具会自动选择第一个可用帐户,但您可以明确设置一个:
# Via Claude
> "Set my EEN account to user@example.com"“令牌已过期”
如果已存储密码(--persistPassword),令牌自动刷新。否则,请重新运行登录:
npm run auth login -- --username user@example.com“身份验证失败”
- 验证您的凭据是否正确
- 检查您的OAuth客户端ID/密钥是否有效
- 确保您的EEN帐户在web控制台中处于活动状态
“MCP服务器未连接”
- 验证Claude配置中的路径是否正确
- 确保项目建成:
npm run build - 检查是否安装了Node.js 18+
- 查看克劳德桌面/代码日志中的错误
发展
# Run in development mode (auto-reload)
npm run dev
# Type checking
npm run typecheck
# Build for production
npm run build
# Run integration tests
npm test
# Run auth CLI
npm run auth -- 许可证
麻省理工学院
