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

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_check_credits

Current credit balance.

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.

Related MCP server: Imaginode

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) is a minimal, stateless authorization server: it exposes the RFC 8414/9728 discovery docs, RFC 7591 dynamic client registration, and PKCE /authorize + /token. Access/refresh tokens are the API key encrypted (AES-256-GCM) under MCP_OAUTH_SECRET, so there is no session store.

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.

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

Auth roadmap

Today the server authenticates with a static iat_live_ API key (the remote server reads it per-session from the Authorization header). Auth is isolated behind an AuthProvider interface (src/auth.ts), so a future "Sign in with ImageAT" OAuth provider can be dropped in without changing the tools, the HTTP client, or the backend /v1 routes.

Available Tools

4 tools
imageat_check_creditsCheck CreditsAInspect

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

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

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

ParametersJSON Schema
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.

ParametersJSON Schema
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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers