Skip to main content
Glama
1cyberlangke1

agnes-mcp

README.md
# agnes-mcp

基于 [Agnes AI](https://agnes-ai.com/) 的 MCP 服务端 — 读图·生图·生视频,全部走 OpenAI 兼容接口。

官方仓库:[AgnesAI-Labs/AgnesAI-Models](https://github.com/AgnesAI-Labs/AgnesAI-Models) — 模型目录、API 文档和示例。
API 平台:[https://platform.agnes-ai.com/](https://platform.agnes-ai.com/)

## 工具列表

| 工具 | 说明 |
|------|------|
| `describe_image` | 读本地图片 → 自动压缩 → base64 → Agnes 视觉模型 → 返回文字描述。支持 png/jpg/webp/bmp/gif |
| `generate_image` | 文字生图(异步)→ 返回 `taskId: "img_1"`,后台自动下载 |
| `generate_video` | 文字生视频(异步)→ 返回 `taskId: "vid_1"`,后台自动轮询并下载 |
| `get_task_status` | 查询任意异步任务状态(0ms 缓存,不调 API)→ 完成后返回下载路径 + 总耗时 |

### describe_image

| 参数 | 类型 | 必填 | 默认 | 说明 |
|------|------|------|------|------|
| `filePath` | string | 是 | — | 本地图片路径,支持 png/jpg/jpeg/gif/webp/bmp |
| `prompt` | string | 否 | `"Describe this image in detail"` | 传给视觉模型的提示词 |

返回:文字描述 + 耗时

### generate_image

| 参数 | 类型 | 必填 | 默认 | 说明 |
|------|------|------|------|------|
| `prompt` | string | 是 | — | 生成图片的文字描述 |
| `size` | string | 否 | `"1024x768"` | 期望尺寸,如 `"1024x768"`、`"512x512"`(实际由 Agnes 决定最终分辨率) |
| `outputPath` | string | 是 | — | 图片保存路径 |

返回:`{"taskId":"img_1","status":"queued"}`

### generate_video

| 参数 | 类型 | 必填 | 默认 | 说明 |
|------|------|------|------|------|
| `prompt` | string | 是 | — | 生成视频的文字描述 |
| `outputPath` | string | 是 | — | 视频保存路径 |

返回:`{"taskId":"vid_1","status":"queued"}`

### get_task_status

| 参数 | 类型 | 必填 | 默认 | 说明 |
|------|------|------|------|------|
| `taskId` | string | 是 | — | 异步任务 ID,`img_*` 或 `vid_*` |

返回:`{"status":"completed","outputPath":"...","totalTime":"26s"}` 或 `{"status":"in_progress","progress":30}`

## 快速开始

```bash
npm install
# 编辑 config.json 填入 Agnes API key
npm run dev
```

## 配置

编辑项目根目录的 `config.json`:

```json
{
  "apiKeys": ["sk-xxx", "sk-yyy"],
  "baseUrl": "https://apihub.agnes-ai.com/v1",
  "models": {
    "vision": "agnes-2.0-flash",
    "image": "agnes-image-2.1-flash",
    "video": "agnes-video-v2.0"
  },
  "videoTimeout": 600000,
  "imageMaxDimension": 2048,
  "imageQuality": 80
}
```

| 字段 | 默认值 | 说明 |
|------|--------|------|
| `apiKeys` | `[]` | 多个 key 自动轮询(round-robin) |
| `baseUrl` | `https://apihub.agnes-ai.com/v1` | API 地址 |
| `models.*` | agnes-2.0-flash 等 | 各任务使用模型 |
| `videoTimeout` | `600000` | 视频生成超时(毫秒),默认 10 分钟 |
| `imageMaxDimension` | `2048` | 读图时最大宽/高,超过等比缩小 |
| `imageQuality` | `80` | JPEG 压缩质量(保留以备后续扩展) |
| `retryCount` | `3` | API 请求失败时自动重试次数(对 429/5xx/网络错误生效) |

`config.json` 已被 `.gitignore` 和 `pre-commit` 钩子双重保护,禁止提交到仓库。

## 环境变量

| 变量 | 作用 |
|------|------|
| `AGNES_BASE_URL` | 覆盖 API 地址(默认使用 config.json) |
| `AGNES_API_KEYS` | JSON 数组格式的 key 列表(优先级高于 config.json) |

## 接入 MCP Host

### opencode.json

```json
{
  "mcp": {
    "agnes-mcp": {
      "type": "local",
      "command": ["npx", "tsx", "src/main.ts"],
      "cwd": "D:\\path\\to\\agnes_mcp"
    }
  }
}
```

### claude_desktop_config.json

```json
{
  "mcpServers": {
    "agnes-mcp": {
      "command": "node",
      "args": ["D:\\path\\to\\agnes_mcp\\dist\\main.js"]
    }
  }
}
```

确保先执行 `npm run build` 编译,然后填入实际项目路径。

## 脚本

| 命令 | 作用 |
|------|------|
| `npm run dev` | `tsx watch src/main.ts` 开发模式 |
| `npm run build` | `tsc` 编译 |
| `npm run start` | `node dist/main.js` 启动 |

## 许可

MIT © 2026 [1cyberlangke1](https://github.com/1cyberlangke1)

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool serves a distinct purpose: describing images, generating images or videos asynchronously, and checking task status. No overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., describe_image, generate_image), making the set predictable.

Tool Count5/5

Four tools is well-scoped for the server's purpose of image/video generation and description, covering the essential operations without bloat.

Completeness4/5

The core workflow (generate async, poll status) is covered, but missing cancel or delete operations for tasks. Minor gap that agents can work around.

Maintenance

ActivitySlowing
ResponsivenessNo issues