内容
# 摄像头数据库 MCP 服务器
用于查询闭路电视摄像头信息的数据库的 MCP(模型上下文协议)服务器。该服务器提供工具来搜索、筛选和检索来自存储在内存中的 10,000 个摄像头数据集的摄像头详细信息。
## 功能
- **10,000 个示例摄像头**:预加载随机生成的摄像头数据
- **丰富的摄像头数据**:每个摄像头包括:
- 摄像头 ID、名称、型号
- 制造商
- IP 地址、MAC 地址
- 固件版本
- 地点、类型
- 安装日期、保修日期
- 状态(激活/非激活/维护中)
## 可用工具
### `get_camera`
通过 ID 获取特定摄像头的详细信息。
**参数:**
- `cameraId`(字符串,必填):摄像头 ID(例如 "CAM-000001")
### `search_cameras`
按各种条件搜索摄像头,支持分页。
**参数:**
- `search`(字符串,可选):搜索词,匹配名称、型号、制造商、地点、IP 或 MAC
- `manufacturer`(字符串,可选):按制造商筛选
- `type`(字符串,可选):按摄像头类型筛选(Dome、Bullet、PTZ、Box、Fisheye、Thermal、IP、Analog)
- `location`(字符串,可选):按地点筛选
- `status`(字符串,可选):按状态筛选(active、inactive、maintenance)
- `limit`(数字,可选):最大结果数(默认:100)
- `offset`(数字,可选):分页偏移量(默认:0)
### `get_camera_stats`
获取摄像头数据库的整体统计信息,包括按制造商、类型和状态的计数。
### `list_manufacturers`
列出数据库中所有唯一的制造商。
### `list_locations`
列出数据库中所有唯一的地点。
## 安装
1. 安装依赖项:
```bash
npm install
```
2. 构建项目:
```bash
npm run build
```
## 使用
### 运行服务器
服务器在 stdio 上运行,设计用于与 MCP 兼容的客户端配合使用:
```bash
npm start
```
### 快速入门:选择您的客户端
您可以将此 MCP 服务器与多个 AI 客户端集成:
1. **Claude Desktop** (免费,推荐)- 参见 [Claude Desktop 设置](#1-claude-desktop-recommended-alternative)
2. **Cursor IDE** (付费)- 参见 [Cursor 设置](#connecting-to-cursor)
3. **Windsurf IDE** (免费/付费)- 参见 [Windsurf 设置](#2-windsurf-ide)
4. **自定义集成** - 参见 [自定义集成](#3-custom-integration-using-mcp-sdk)
> 💡 **MCP 新手?** 从 **Claude Desktop** 开始 - 它是免费的,并且最容易设置!
### 连接到 Cursor
有两种方法将此 MCP 服务器连接到 Cursor:
#### 方法 1:使用 Cursor 的 GUI(推荐)
1. **打开 Cursor 设置**:
- 进入 `设置` → `功能` → `MCP`(或按 `Cmd+,` 在 Mac 上或 `Ctrl+,` 在 Windows/Linux 上,然后搜索"MCP")
2. **添加新的 MCP 服务器**:
- 点击 `+ 添加新的 MCP 服务器` 按钮
3. **配置服务器**:
- **名称**:`Camera DB` (或您喜欢的任何名称)
- **类型**:选择 `stdio`
- **命令**:输入 Node.js 的完整路径
- 在 Mac/Linux 上:通常为 `/usr/local/bin/node` 或 `/usr/bin/node`
- 在 Windows 上:通常为 `C:\Program Files\nodejs\node.exe`
- 您可以通过运行以下命令找到它:`which node` (Mac/Linux)或 `where node` (Windows)
- **参数**:输入编译服务器的绝对路径:
```
/Users/harshakrishnak/Projects/CameraDBMCP/dist/index.js
```
> **注意**:替换为您实际的项目路径。运行 `pwd` 在项目目录中获取绝对路径。
4. **保存并连接**:
- 点击保存
- Cursor 将自动连接到您的 MCP 服务器
- 您应该在 MCP 服务器列表中看到服务器,状态指示器为绿色
#### 方法 2:使用配置文件
如果 Cursor 支持配置文件,您可以将其添加到您的 MCP 配置文件中:
```json
{
"mcpServers": {
"camera-db": {
"command": "node",
"args": ["/Users/harshakrishnak/Projects/CameraDBMCP/dist/index.js"]
}
}
}
```
> **获取您的绝对路径**:在项目目录中运行 `./get-path.sh` 获取确切的路径,或运行 `pwd` 获取项目路径。
#### 验证连接
在 Cursor 中添加服务器后:
1. **检查 MCP 状态**:在 Cursor 的 MCP 设置中,您应该看到您的服务器,状态指示器为绿色
2. **用查询测试**:尝试询问 Cursor:
- "获取摄像头统计信息"
- "列出所有制造商"
- "查找 Hikvision 摄像头"
如果服务器已连接,Cursor 将能够查询您的摄像头数据库!
## 替代 MCP 客户端
除了 Cursor 之外,您还可以将此 MCP 服务器与多个其他支持模型上下文协议的 AI 客户端集成:
### 1. Claude Desktop(推荐替代方案)
**Claude Desktop** 是 Anthropic 的官方桌面应用程序,支持 MCP 服务器。它是免费的,并提供了一种与您的摄像头数据库交互的好方法。
#### 安装和设置:
1. **下载 Claude Desktop**:
- 访问 [claude.ai/download](https://claude.ai/download)
- 为您的操作系统下载并安装 Claude Desktop
2. **配置 MCP 服务器**:
- 配置文件位置取决于您的操作系统:
- **macOS**:`~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**:`%APPDATA%\Claude\claude_desktop_config.json`
- **Linux**:`~/.config/Claude/claude_desktop_config.json`
3. **编辑配置文件**:
- 创建或编辑配置文件(如果它不存在,请创建目录)
- 添加您的 MCP 服务器配置:
```json
{
"mcpServers": {
"camera-db": {
"command": "node",
"args": ["/Users/harshakrishnak/Projects/CameraDBMCP/dist/index.js"],
"description": "闭路电视摄像头数据库,包含 10,000 个摄像头"
}
}
}
```
> **重要**:替换 `/Users/harshakrishnak/Projects/CameraDBMCP/dist/index.js` 为您的绝对路径。使用 `pwd` 在您的项目目录中获取路径。
4. **重启 Claude Desktop**:
- 关闭并重新打开 Claude Desktop
- MCP 服务器应自动连接
5. **验证连接**:
- 在 Claude Desktop 中查找"MCP 服务器已连接"指示器
- 询问 Claude: "获取摄像头统计信息" 或 "列出所有 Hikvision 摄像头"
### 2. Windsurf IDE
**Windsurf** 是另一个支持 MCP 集成的代码编辑器,类似于 Cursor。
#### 设置:
1. **安装 Windsurf**:从 [codeium.com/windsurf](https://codeium.com/windsurf) 下载
2. **配置 MCP**:类似于 Cursor,使用设置 → MCP 部分
3. **添加服务器**:使用相同的配置(stdio 传输)
### 3. 使用 MCP SDK 的自定义集成
您可以使用 MCP SDK 构建自己的客户端或与现有应用程序集成:
#### 使用 Node.js:
参见 `example-client.js` 以获取一个完整的示例。以下是快速片段:
```javascript
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
// 创建传输
const transport = new StdioClientTransport({
command: 'node',
args: ['/path/to/CameraDBMCP/dist/index.js']
});
// 创建客户端
const client = new Client({
name: 'my-camera-client',
version: '1.0.0'
}, {
capabilities: {}
});
// 连接并使用
await client.connect(transport);
// 调用工具
const result = await client.callTool({
name: 'get_camera_stats',
arguments: {}
});
console.log(result);
```
**运行示例:**
```bash
node example-client.js
```
#### 使用 Python:
```python
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def main():
# 创建服务器参数
server_params = StdioServerParameters(
command="node",
args=["/path/to/CameraDBMCP/dist/index.js"]
)
# 创建会话
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# 初始化
await session.initialize()
# 调用工具
result = await session.call_tool(
"get_camera_stats",
arguments={}
)
print(result)
# 运行
import asyncio
asyncio.run(main())
```
### 4. 基于 Web 的 MCP 客户端
您还可以创建一个与您的 MCP 服务器通信的 Web 界面:
- 在 Node.js 后端使用 MCP SDK
- 创建包装 MCP 工具调用的 REST API 端点
- 构建一个查询您的 API 的前端
- 这允许基于 Web 的访问您的摄像头数据库
### MCP 客户端比较
| 客户端 | 类型 | 成本 | 设置难度 | 最适合 |
|--------|------|------|------------------|----------|
| **Claude Desktop** | 桌面应用程序 | 免费 | 简单 | 通用 AI 查询,聊天界面 |
| **Cursor** | IDE | 付费 | 简单 | 代码聚焦的工作流程 |
| **Windsurf** | IDE | 免费/付费 | 简单 | 代码聚焦的工作流程 |
| **自定义 SDK** | 自定义 | 免费 | 中等 | 自定义应用程序,集成 |
### 获取服务器路径
要为任何客户端获取 MCP 服务器的绝对路径:
```bash
# 在 Mac/Linux 上
cd /Users/harshakrishnak/Projects/CameraDBMCP
pwd
# 输出: /Users/harshakrishnak/Projects/CameraDBMCP
# 服务器路径将是:
# /Users/harshakrishnak/Projects/CameraDBMCP/dist/index.js
# 或使用提供的脚本:
./get-path.sh
```
### 排查 MCP 连接问题
1. **服务器未启动**:
- 确保您已运行 `npm run build`
- 检查 `dist/index.js` 是否存在
- 验证 Node.js 是否在您的 PATH 中
2. **路径问题**:
- 始终在配置中使用绝对路径
- 在 Windows 上,使用正斜杠或转义反斜杠
- 测试服务器手动:`node dist/index.js`
3. **权限问题**:
- 确保服务器文件可执行
- 检查文件权限:`chmod +x dist/index.js` (Mac/Linux)
4. **连接超时**:
- 验证服务器是否正确启动
- 检查客户端日志中的错误消息
- 使用 `node test-server.js` 测试服务器功能
### 示例查询
连接后,您可以使用自然语言查询摄像头数据库:
- "查找所有 Hikvision 摄像头"
- "显示停车场的摄像头"
- "列出所有活动摄像头"
- "获取摄像头数据库的统计信息"
- "查找 IP 地址以 192.168 开头的摄像头"
- "显示我安装于 2024 年的 PTZ 摄像头"
## 开发
### 项目结构
```
CameraDBMCP/
├── src/
│ ├── index.ts # MCP 服务器实现
│ ├── cache.ts # 摄像头内存缓存
│ ├── dataGenerator.ts # 示例数据生成器
│ └── types.ts # TypeScript 类型定义
├── dist/ # 编译后的 JavaScript(生成)
├── package.json
├── tsconfig.json
└── README.md
```
### 构建
```bash
npm run build
```
### 开发模式
开发的监视模式:
```bash
npm run dev
```
## 数据生成
示例数据包括:
- 12 个不同的制造商(Hikvision、Dahua、Axis、Bosch、Sony 等)
- 8 种摄像头类型(Dome、Bullet、PTZ、Box、Fisheye、Thermal、IP、Analog)
- 20 个不同地点
- 随机 IP 地址、MAC 地址和固件版本
- 安装日期在 2020-2024 之间
- 保修日期在安装日期后 1-3 年
## License
MIT