Skip to main content
Glama

@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

imageat_generate_image

Text-to-image / image-to-image. Returns CDN image URL(s).

imageat_generate_video

Text-to-video / image-to-video. Returns a CDN mp4 URL.

imageat_generate_video_task

Experimental MCP Tasks version with tasks/get and tasks/result.

imageat_check_video_status

Checks an asynchronous video generation until it completes.

imageat_ask_gemini_argon

Ask Google's Gemini 4 Argon (optional image URLs, Google Search / Maps grounding). Returns the text answer.

imageat_check_credits

Current prepaid API balance (USD).

ai_visibility_check

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.

imageat_game_guide

Start here for a playable browser game: workflow, runtime rules and the kit API (Phaser 2D / three.js 3D). Free.

imageat_search_game_models

Search 2,700+ game-ready 3D library models; returns library_keys with animations. Free.

imageat_generate_game_asset

One game asset: sprite, background, texture, logo, or an AI-made 3D hero_model. Returns an asset_id.

imageat_publish_game

Checks your game code, bundles it with the engine and assets, and returns a shareable play link.

imageat_update_game

Publishes new code for one of your games as a new version (same link). Free.

imageat_edit_<feature>

One tool per edit feature, fetched live at startup — e.g. imageat_edit_remove-background, imageat_edit_object-eraser, imageat_edit_relight, imageat_edit_virtual-try-on, imageat_edit_city-teleport, imageat_edit_ai-edit-pro. New features appear automatically.

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/images and imageat://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

  1. Create an API key on your ImageAT Projects page (starts with iat_live_).

  2. Add the server to your MCP client config:

{
  "mcpServers": {
    "imageat": {
      "command": "npx",
      "args": ["-y", "@imageat/mcp"],
      "env": {
        "IMAGEAT_API_KEY": "iat_live_xxxxxxxxxxxx"
      }
    }
  }
}
  1. Restart the client. The imageat_* tools will be available.

Environment variables

Var

Required

Default

Notes

IMAGEAT_API_KEY

yes

—

Your iat_live_ key.

IMAGEAT_BASE_URL

no

https://imageat.com

The web app that serves the /api/v1/* generation endpoints. Point at http://localhost:3000 for local dev.

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: /health

Deploy 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

PORT

remote only

8787

HTTP listen port.

IMAGEAT_BASE_URL

both

https://imageat.com

Upstream web app serving /api/v1/*.

MCP_OAUTH_SECRET

remote only

(random per boot)

Long random string that encrypts issued OAuth tokens. Set this in production or tokens are invalidated on every restart.

MCP_PUBLIC_URL

remote only

derived from request

Public origin, e.g. https://mcp.imageat.com. Only needed if proxy headers are wrong.

MCP_ALLOWED_ORIGINS

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.

MCP_SESSION_IDLE_MS

remote only

7200000

Reclaim MCP sessions idle for this many milliseconds.

MCP_MAX_SESSIONS

remote only

500

Reject new sessions with 503/Retry-After after this process reaches capacity.

INTERNAL_SERVICE_KEY

remote only

—

Shared with the web app. Completes "Sign in with imageat" and signs the ChatGPT profile's calls so they bill website credits.

OPENAI_APPS_CHALLENGE

remote only

—

Domain verification token from the OpenAI plugin submission, served raw at /.well-known/openai-apps-challenge.

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 of INTERNAL_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/fileParams as { download_url, file_id }.

  • Results render in a widget (src/widget.ts, MCP Apps ui://imageat/media-v1.html). The widget also polls imageat_check_video_status itself 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.js

Security 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 tools
imageat_check_creditsCheck CreditsAInspect

Return the current credit balance for the API key's account.

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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).

NameRequiredDescriptionDefault
promptNo
featureYesEdit feature id.
maskUrlNo
optionsNo
imageUrlYesImage to edit: base64 data URL or http(s) URL.

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

NameRequiredDescriptionDefault
modelNoModel 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.
imagesNoReference images as base64 data URLs or http(s) URLs for image-to-image.
promptYesWhat to generate.
numImagesNo
resolutionNo
aspectRatioNoe.g. "1:1", "16:9", "9:16", "4:5".
outputFormatNo
enableWebSearchNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
modelNoe.g. "veo", "veo-lite", "kling", "kling3", "seedance2", "pixverse".
promptYesWhat the video should show.
durationNoe.g. "8s".
imageUrlNoStarting image URL for image-to-video.
resolutionNoe.g. "720p", "1080p".
aspectRatioNo
generateAudioNo
negativePromptNo

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 4 tool updatesv0.2.0
    • First observedimageat_check_credits
    • First observedimageat_edit_image
    • First observedimageat_generate_image
    • First observedimageat_generate_video

TDQS

A3.6/5.0

Scored across 4 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers