Agnes MCP Server
by zssty2010
README.md
# Agnes MCP Server
An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that wraps the [Agnes AI](https://agnes-ai.com) image and video generation APIs, enabling AI assistants (Claude, Cursor, VS Code, etc.) to generate images and videos via standardized tool calls.
## Features
- **Image Generation** — Text-to-image and image-to-image via `generate_image`
- **Video Generation** — Text-to-video and image-to-video via `generate_video` + `get_video`
- **Two Transport Modes** — `stdio` (local) and `Streamable HTTP` (remote)
- **Auto Download** — Optionally save generated media to disk automatically
- **Blocking & Async** — `wait=true` for synchronous generation, or poll with `get_video`
## Quick Start
### 1. Install Dependencies
```bash
cd agnes-mcp-server
npm install
npm run build
```
### 2. Set API Key
```bash
export AGNES_API_KEY="sk-agnes-your-api-key-here"
```
### 3. Run the Server
**Stdio mode** (default, for local MCP clients like Claude Desktop, Cursor):
```bash
npm run start
# or
node agnes-mcp-server.cjs
```
**Streamable HTTP mode** (for remote MCP clients):
```bash
MCP_TRANSPORT=http npm run start:http
# Default port: 3100 (configurable via HTTP_PORT)
```
### 4. Configure Your MCP Client
Add this to your MCP client configuration (e.g., `.mcp.json`):
```json
{
"mcpServers": {
"agnes": {
"command": "node",
"args": ["agnes-mcp-server.cjs"],
"env": {
"AGNES_API_KEY": "sk-agnes-your-api-key-here"
}
}
}
}
```
## Available Tools
| Tool | Description |
|------|-------------|
| `generate_image` | Generate or edit an image. Supports text-to-image and image-to-image modes. |
| `generate_video` | Submit a video generation task. Set `wait=true` to block until complete. |
| `get_video` | Query video generation status and optionally download the result. |
### Tool Parameters
**`generate_image`**
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `prompt` | string | Yes | — | Text description of the desired image |
| `size` | string | No | `1024x1024` | Image dimensions (e.g., `512x512`, `1024x1024`) |
| `images` | string[] | No | — | Input images (local file paths or base64 data URIs) |
| `format` | `"url"` \| `"b64"` | No | `url` | Output format when no `outputDir` is set |
| `outputDir` | string | No | — | Directory to download the image file |
**`generate_video`**
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `prompt` | string | Yes | — | Text description of the desired video |
| `image` | string \| string[] | No | — | Input image(s) for image-to-video mode |
| `mode` | string | No | — | Generation mode (e.g., `"image-to-video"`) |
| `width` | number | No | — | Video width |
| `height` | number | No | — | Video height |
| `num_frames` | number | No | — | Number of frames |
| `frame_rate` | number | No | — | Frames per second |
| `seed` | number | No | — | Random seed for reproducibility |
| `negative_prompt` | string | No | — | Things to exclude from the video |
| `outputDir` | string | No | — | Directory to download the video file |
| `wait` | boolean | No | `false` | Block until generation completes |
**`get_video`**
| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `videoId` | string | Yes | — | Video ID returned by `generate_video` |
| `taskId` | string | No | — | Task ID (fallback for querying) |
| `outputDir` | string | No | — | Directory to download the video file |
## Environment Variables
| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `AGNES_API_KEY` | Yes | — | Your Agnes API key (starts with `sk-`) |
| `MCP_TRANSPORT` | No | `stdio` | Transport mode: `stdio` or `http` |
| `HTTP_PORT` | No | `3100` | HTTP server port (only in `http` mode) |
| `DEFAULT_DOWNLOAD_DIR` | No | — | Root directory for auto-downloaded media |
## Project Structure
```
agnes-mcp-server/
├── src/
│ ├── app/ # Server entry points (stdio, http, bundle)
│ ├── client/ # HTTP client wrapper
│ ├── core/ # Core MCP setup and registry
│ ├── module/
│ │ ├── image/ # Image generation service
│ │ └── video/ # Video generation service
│ ├── providers/ # API providers (AgnesClient, image, video)
│ ├── tools/ # MCP tool implementations
│ └── types/ # Shared types and result formatters
├── agnes-mcp-server.cjs # Bundled entry point
├── agnes-bundle.cjs # Standalone bundle
├── SKILL.md # MCP skill definition
├── TOKEN_AUTH.md # Authentication documentation
└── package.json
```
## Development
```bash
# Watch mode (TypeScript → Node)
npm run dev
# Build TypeScript
npm run build
# Create standalone bundle
npm run bundle
# Run smoke test
npm run test
```
## Test Script
A standalone test script is included for verifying the image-to-video API flow:
```bash
npx tsx test-video-image.ts <local-image-path> <api-key>
# or
IMAGE_PATH=test.jpg AGNES_API_KEY=sk-xxx npx tsx test-video-image.ts
```
## License
MIT
TDQS
A3.8/5.0
Scored across 3 tools
Disambiguation5/5
Each tool targets a distinct operation: image generation, video generation submission, and video status polling/download. No overlapping functionality, making selection unambiguous.
Naming Consistency5/5
All tool names follow a consistent verb_noun pattern in snake_case (generate_image, generate_video, get_video), with no deviations or mixed conventions.
Tool Count5/5
Three tools cover the essential workflows for image and video generation without unnecessary bloat, fitting well within the ideal 3-15 range.
Completeness4/5
Core generation and status retrieval are covered. Missing delete or list operations for generated content, but these are minor gaps given the server's likely purpose.
Maintenance
ActivityInactive
ResponsivenessNo issues