@imageat/mcp
Summary: An MCP server that generates images and videos and runs ImageAT image-edit features, billed to your ImageAT account.
Generate images (
imageat_generate_image): text-to-image or image-to-image with reference images; pick model (nano-banana-pro, gpt-image-2, seedream, krea…), resolution (1K–4K), aspect ratio, format, up to 4 images — returns CDN URLs.Generate videos (
imageat_generate_video): text-to-video or image-to-video with model, duration, resolution, audio and negative prompt — returns a CDN mp4 URL.Video task/status tools: an experimental MCP Tasks variant (
imageat_generate_video_taskwithtasks/get/tasks/result) andimageat_check_video_statusto poll async renders.Edit images (
imageat_edit_<feature>per catalog feature, e.g. remove-background, object-eraser, relight, virtual-try-on, city-teleport, ai-edit-pro; falls back to genericimageat_edit_imagewith afeatureid).Ask Gemini 4 Argon (
imageat_ask_gemini_argon) with optional image URLs and Google Search/Maps grounding.Check spend (
imageat_check_credits) — current prepaid API balance in USD.Free tools:
ai_visibility_check(AI-search visibility audit), plus a game kit —imageat_game_guide,imageat_search_game_models(2,700+ 3D models),imageat_generate_game_asset,imageat_publish_game,imageat_update_game.Resources & prompts: credits, edit-feature and model catalogs, recent generations, and reusable workflow prompts (product visual, animate image, social campaign, upscale, creative variants).
Two transports: local stdio via
npx(Claude Desktop, Cursor) or a remote Streamable HTTP endpoint with OAuth for claude.ai/ChatGPT, including a curated ChatGPT app profile with rendered media widget.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@imageat/mcpGenerate an image of a futuristic city skyline at night"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@imageat/mcp
Model Context Protocol (MCP) server for ImageAT. Gives any MCP client (Claude Desktop, Cursor, etc.) tools to generate images, generate video, and run ImageAT's image-edit features — billed against your ImageAT account.
Billing. If you have an active subscription, MCP requests spend your website credits at the same rate you'd pay on imageat.com — the same generation costs the same either way. When those credits run out (or if you have no subscription), requests bill your prepaid API balance at the API tariff. Connecting a client requires one of the two.
Tools
Tool | What it does |
| Text-to-image / image-to-image. Returns CDN image URL(s). |
| Text-to-video / image-to-video. Returns a CDN mp4 URL. |
| Experimental MCP Tasks version with |
| Checks an asynchronous video generation until it completes. |
| Ask Google's Gemini 4 Argon (optional image URLs, Google Search / Maps grounding). Returns the text answer. |
| Current prepaid API balance (USD). |
| Score how visible a website is to ChatGPT, Claude, Perplexity and AI agents (llms.txt, AI crawler rules, JSON-LD, sitemap, OpenGraph, MCP/agent files) with a fix list. Free. |
| Start here for a playable browser game: workflow, runtime rules and the kit API (Phaser 2D / three.js 3D). Free. |
| Search 2,700+ game-ready 3D library models; returns |
| One game asset: sprite, background, texture, logo, or an AI-made 3D |
| Checks your game code, bundles it with the engine and assets, and returns a shareable play link. |
| Publishes new code for one of your games as a new version (same link). Free. |
| One tool per edit feature, fetched live at startup — e.g. |
If the feature catalog can't be reached at startup, a single generic imageat_edit_image tool
(taking a feature id parameter) is registered instead, so the server still works.
Tool results include both readable text and typed structuredContent. Tool schemas, safety
annotations, and output schemas let agent clients validate calls and distinguish read-only tools.
Related MCP server: pixapi-mcp
Resources and prompts
imageat://account/credits— live prepaid API balance (USD).imageat://edit/features— live edit-feature catalog.imageat://models/imagesandimageat://models/videos— media model catalogs.imageat://generations/recent— ten most recent account generations.create-product-visual— reusable product-image workflow prompt.animate-image— reusable image-to-video workflow prompt.create-social-campaign,generate-and-upscale,create-creative-variants— campaign workflows.
Setup
Create an API key on your ImageAT Projects page (starts with
iat_live_).Add the server to your MCP client config:
{
"mcpServers": {
"imageat": {
"command": "npx",
"args": ["-y", "@imageat/mcp"],
"env": {
"IMAGEAT_API_KEY": "iat_live_xxxxxxxxxxxx"
}
}
}
}Restart the client. The
imageat_*tools will be available.
Environment variables
Var | Required | Default | Notes |
| yes | — | Your |
| no |
| The web app that serves the |
Remote server (claude.ai, ChatGPT, other web clients)
The npx setup above is stdio — it works in desktop apps that launch a local process
(Claude Desktop, Cursor, Claude Code). Browser clients like claude.ai and chatgpt.com
instead connect to a remote MCP endpoint over Streamable HTTP.
The same tools are served over HTTP by dist/http.js. Each MCP session carries the user's
own API key via the Authorization: Bearer iat_live_... header (multi-user), so this is what
you point a hosted connector at.
# Run the remote server locally against a local ImageAT instance:
IMAGEAT_BASE_URL=http://localhost:3000 PORT=8787 npm run start:http
# MCP endpoint: http://localhost:8787/mcp · health: /healthDeploy it (e.g. on Dokploy as mcp.imageat.com) with the included Dockerfile, then add it as
a custom connector:
claude.ai — Settings → Connectors → Add custom connector → URL
https://mcp.imageat.com/mcp.ChatGPT — Connectors / Developer mode → add server URL
https://mcp.imageat.com/mcp.
Browser clients run the OAuth flow: after adding the connector they open a consent page
served by this server where you paste your iat_live_ key, and the client receives a short-lived
access token bound to it. Non-browser clients (mcp-remote, MCP Inspector, curl) can still send
a raw iat_live_ key directly as Authorization: Bearer iat_live_....
The OAuth layer (src/oauth.ts) exposes the
RFC 8414/9728 discovery docs, RFC 7591 dynamic client registration, and PKCE /authorize +
/token. Expiring access and refresh tokens are encrypted with AES-256-GCM under
MCP_OAUTH_SECRET; refresh tokens rotate after use and /revoke invalidates issued tokens. OAuth
tokens are bound to their client ID and requested scope. Idle MCP sessions are reclaimed automatically.
Var | Where | Default | Notes |
| remote only |
| HTTP listen port. |
| both |
| Upstream web app serving |
| remote only | (random per boot) | Long random string that encrypts issued OAuth tokens. Set this in production or tokens are invalidated on every restart. |
| remote only | derived from request | Public origin, e.g. |
| remote only | ChatGPT, Claude, Cursor, VS Code, GitHub, imageat | Comma-separated browser Origin allowlist. Requests without an Origin (normal server-to-server clients) are unaffected. |
| remote only |
| Reclaim MCP sessions idle for this many milliseconds. |
| remote only |
| Reject new sessions with |
| remote only | — | Shared with the web app. Completes "Sign in with imageat" and signs the ChatGPT profile's calls so they bill website credits. |
| remote only | — | Domain verification token from the OpenAI plugin submission, served raw at |
ChatGPT app profile (/chatgpt/mcp)
The published ChatGPT app connects to https://mcp.imageat.com/chatgpt/mcp, not /mcp. It is a
separate, curated profile (src/chatgpt.ts) because OpenAI's directory rules differ from other clients:
Fixed tool list. OpenAI reviews tools and holds new ones for approval, so the profile does not build tools from the live edit-feature catalog. Adding a tool here means it waits for review.
Strict content filter. Upstream calls carry
X-Imageat-Surface: chatgpt, and the web app applies the restricted-account filter to every request (lib/content-restriction.ts).Website credits for every account. ChatGPT users can't buy API balance in the app, so calls signed with
X-Imageat-Surface-Auth(HMAC ofINTERNAL_SERVICE_KEY) spend website credits (lib/api-credit-mode.ts).No purchase prompts. Error text never links to pricing or top-ups.
Attached photos arrive through
openai/fileParamsas{ download_url, file_id }.Results render in a widget (
src/widget.ts, MCP Appsui://imageat/media-v1.html). The widget also pollsimageat_check_video_statusitself while a video renders.
The URL cannot be changed after the app is published without contacting OpenAI support.
OAuth accepts ChatGPT's client ID metadata document (https://chatgpt.com/oauth/client.json),
returns iss on authorization redirects (RFC 9207), and binds tokens to the requested resource.
Local development
npm install
npm run build
# Inspect the stdio server with the official MCP Inspector against a local ImageAT instance:
IMAGEAT_API_KEY=iat_live_... IMAGEAT_BASE_URL=http://localhost:3000 \
npx @modelcontextprotocol/inspector node dist/index.jsSecurity notes
Set a stable, long random MCP_OAUTH_SECRET in production. Browser Origins are restricted by
default; add any self-hosted web client to MCP_ALLOWED_ORIGINS. Direct server-to-server clients
normally omit the Origin header and continue to work with an iat_live_ bearer key.
Available Tools
4 toolsimageat_check_creditsCheck CreditsAInspect
Return the current credit balance for the API key's account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the core behavior and the account scope, but it does not mention whether the call consumes credits, what response format is returned, or whether authentication is required beyond the assumed API key.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, focused sentence that front-loads the purpose and contains no filler or redundant phrasing. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only balance check with no output schema, the description covers the essential invocation intent. It could be slightly more complete by indicating the response shape or that the call does not modify any state, but nothing critical is missing for basic selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description appropriately adds no parameter details because there are none; the empty schema is complete and no further parameter semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Return') and resource ('current credit balance'), scoped to the API key's account. This is immediately distinct from the sibling generation/edit tools, which all perform creative/media operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it — whenever the agent needs the current credit balance — but it does not explicitly discuss when not to use it or mention alternatives. The sibling tools are so different in purpose that confusion is unlikely, but explicit guidance is still absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
imageat_edit_imageEdit ImageCInspect
Edit an image using one of ImageAT's edit features. Pass the feature id (e.g. remove-background, object-eraser, relight, virtual-try-on, city-teleport, ai-edit-pro).
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | No | ||
| feature | Yes | Edit feature id. | |
| maskUrl | No | ||
| options | No | ||
| imageUrl | Yes | Image to edit: base64 data URL or http(s) URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure, yet it only says 'edit'. It does not disclose whether the edit is applied in place, returns a new image, consumes credits, requires authentication, or behaves asynchronously.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with no filler. It front-loads the purpose and adds useful concrete examples of allowed feature ids.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with nested options, no annotations, and no output schema, this description is incomplete. An agent cannot know which features require which optional parameters or what a successful call returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 40%, and the description contributes little beyond feature id examples. prompt, maskUrl, and options are left undefined, and options is a free-form nested object that needs more explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and resource ('Edit an image') and lists concrete feature ids, so an agent can tell this is an image-editing tool. It does not explicitly compare to the sibling generate tools, but the edit verb is enough to distinguish it from generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance or mention of when generate_image or generate_video would be preferable. The only usage hint is to pass a feature id, which is already required by the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
imageat_generate_imageGenerate ImageBInspect
Generate an image from a text prompt (text-to-image), optionally with reference images for image-to-image editing. Returns CDN image URL(s).
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model id. One of: "nano-banana-pro" (default), "nano-banana-2", "nano-banana", "gpt-image-2" (OpenAI GPT Image 2), "seedream-5.0-lite", "krea-2-large", "krea-2-medium". Use these exact ids — do not invent variants like gpt-image-2.0. | |
| images | No | Reference images as base64 data URLs or http(s) URLs for image-to-image. | |
| prompt | Yes | What to generate. | |
| numImages | No | ||
| resolution | No | ||
| aspectRatio | No | e.g. "1:1", "16:9", "9:16", "4:5". | |
| outputFormat | No | ||
| enableWebSearch | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior, and it does reveal the return type: 'Returns CDN image URL(s).' It also clarifies that reference images enable image-to-image editing. However, it does not mention whether generation is asynchronous, consumes credits, has content policy limits, or what happens if generation fails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the core operation and optional mode, the second states the return behavior. The most important information is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple generation call with only 'prompt' required, the description provides enough to get started and specifies the return format. However, it lacks guidance on sibling-tool selection, default behaviors, and API-specific constraints such as credit usage or async behavior, leaving some operational gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds some conceptual meaning by framing 'prompt' as the text-to-image input and 'images' as reference inputs for image-to-image editing, which maps to the schema. With 8 parameters and only 50% schema description coverage, it does not compensate for undocumented parameters like numImages limits, resolution defaults, or enableWebSearch semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific action ('Generate an image from a text prompt') and resource (text-to-image, with optional reference images for image-to-image editing), which clearly exceeds a tautology. It differentiates from imageat_generate_video, but the overlap with imageat_edit_image is not explicitly addressed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as imageat_edit_image. It does not state conditions, exclusions, or the preferred tool for pure editing vs. generation with reference images, leaving the choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
imageat_generate_videoGenerate VideoBInspect
Generate a video from a text prompt (text-to-video) or from a starting image (image-to-video). Returns a CDN mp4 URL.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | e.g. "veo", "veo-lite", "kling", "kling3", "seedance2", "pixverse". | |
| prompt | Yes | What the video should show. | |
| duration | No | e.g. "8s". | |
| imageUrl | No | Starting image URL for image-to-video. | |
| resolution | No | e.g. "720p", "1080p". | |
| aspectRatio | No | ||
| generateAudio | No | ||
| negativePrompt | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the two input modes and the returned CDN URL, but it does not disclose important behaviors like whether generation is asynchronous, how long it might take, whether costs or rate limits apply, or what happens if generation fails. For a generative tool with no safety annotations, this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The core capability and return type are front-loaded, and the text-to-video/image-to-video distinction is packed efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this tool has 8 parameters, no annotations, and no output schema, the description is too sparse to be fully actionable. It conveys the basic function and output but omits guidance on model choice, duration, resolution, aspect ratio, audio generation, and negative prompts, all of which would help an agent select values correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for 5 of 8 parameters, and the description adds high-level context that prompt and imageUrl correspond to text-to-video and image-to-video modes. However, parameters like aspectRatio, generateAudio, and negativePrompt have empty descriptions in the schema and are not addressed by the tool description. The description helps but does not fully compensate for those gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as generating a video using either a text prompt or a starting image, and explicitly states the output is a CDN mp4 URL. It differentiates from the sibling tools by naming the video-specific capability, making confusion with image editing or image generation unlikely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it clear this tool is for video generation, which implies when to use it, but it does not explicitly contrast it with alternatives or state when not to use it. No usage context such as model selection guidance or provider preferences is provided, leaving the decision to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.2.0- First observed
imageat_check_credits - First observed
imageat_edit_image - First observed
imageat_generate_image - First observed
imageat_generate_video
TDQS
Scored across 4 tools
check_credits is clearly distinct. edit_image and generate_image could overlap, since generate_image supports reference images for image-to-image editing, but descriptions clarify that generate is text-prompt driven while edit uses specific feature IDs. Overall, boundaries are mostly clear.
All tools follow a consistent snake_case verb_noun pattern with the imageat_ prefix: check_credits, edit_image, generate_image, generate_video. The naming is predictable and uniform.
Four tools cover the core actions for an image/video generation and editing API: credit checking, image generation, image editing, and video generation. This is appropriately scoped with no redundancy.
The server covers the primary workflows: generating images and videos, editing images, and checking credits. A minor gap is the lack of a way to list available edit features, but agents can likely infer them from the documentation provided in the tool description.
Maintenance
Related MCP Connectors
Generate images with any major model — one API key, one prepaid balance, one MCP.
MCP server for Pixapi: check live credit pricing and balance, then generate images and video.
Image generation, image editing and text/image-to-video with credit quotes and connection budgets.
Generate images from Claude, ChatGPT, Cursor and Codex with 12 top AI image models. Up to 4 images per call, SVG vectorization, background removal, upscaling and image-to-video. Remote MCP with OAuth, no API keys.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables MCP-compatible clients to generate and upscale AI images, videos, music, and sound effects, manage generation jobs, access model catalogs, and track credits.3MIT

pixapi-mcpofficial
AlicenseNot gradedqualityBmaintenanceEnables MCP clients to use Pixapi's AI image and video generation tools, including checking pricing and balance, starting asynchronous generation tasks, and retrieving results.36 npmMIT- AlicenseNot gradedqualityBmaintenanceEnables image and video generation and editing through MCP tools, including image editing, upscaling, background removal, video generation, image-to-video, and video extension. Video generation runs asynchronously with job status and result retrieval.MIT
- AlicenseNot gradedqualityAmaintenanceEnables MCP-compatible clients to generate images and videos, synthesize speech, clone and design voices, and dynamically configure API interactions.549 npmMIT