MarkItUp - AI Image Marketing and Annotation
The MarkItUp server provides AI-powered tools for generating marketing visuals, editing images, and managing your account — usable from MCP-compatible clients like Claude Desktop, Claude Code, and Cursor.
Check Credit Balance (
markitup_credit_balance): Verify your API key and check remaining credits before running tasks.Generate Marketing Visuals (
markitup_generate): Transform a screenshot or image (URL or base64) into 3 polished marketing-visual variations. Supports multiple templates (e.g.,glassmorphic,bold_marketing,dark_professional), aspect ratios, and output resolutions (1K/2K/4K). Costs 1 credit.Regenerate a Variation (
markitup_regen): Re-render a single variation (slot 0–2) from a previous generate call, preserving the same headline and copy for brand consistency. Costs 1 credit by default.AI Outpainting / Extend (
markitup_extend): Expand an image to a larger canvas or different aspect ratio (e.g., square to 16:9) using AI outpainting — useful for repurposing assets across platforms. Costs 1 credit.Remove Background (
markitup_remove_background): Strip the background from any image using Photoroom's HD AI model, returning a transparent PNG. Costs 1 credit (free for Pro/Power subscribers).
markitup-mcp-server
MCP (Model Context Protocol) server for MarkItUp — AI-powered image annotation and marketing-visual generation. Lets Claude Code, Claude Desktop, Cursor, ChatGPT-with-MCP, and other MCP-compatible clients call MarkItUp directly.
Five tools available: markitup_credit_balance, markitup_generate, markitup_regen, markitup_extend, markitup_remove_background.
Prerequisites
A MarkItUp account — sign up at https://markitup.app.
A MarkItUp API key — generate one at https://markitup.app/dashboard.
Node.js 18 or newer (only if installing locally;
npxdoesn't require a local Node.js if your MCP client bundles one).
Related MCP server: jgkme/kilo-image-gen-mcp
Configure in Claude Code
Add to your MCP config (~/.claude/mcp.json or project-scoped .mcp.json):
{
"mcpServers": {
"markitup": {
"command": "npx",
"args": ["-y", "markitup-mcp-server"],
"env": {
"MARKITUP_API_KEY": "mk_live_..."
}
}
}
}Configure in Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"markitup": {
"command": "npx",
"args": ["-y", "markitup-mcp-server"],
"env": {
"MARKITUP_API_KEY": "mk_live_..."
}
}
}
}Configure in Cursor
Cursor uses the same JSON shape. Settings → MCP → Add Server:
{
"mcpServers": {
"markitup": {
"command": "npx",
"args": ["-y", "markitup-mcp-server"],
"env": { "MARKITUP_API_KEY": "mk_live_..." }
}
}
}Tools
markitup_credit_balance
Returns the current credit balance and subscription status.
No arguments. Use it to verify your API key works and to check credits before calling generation tools.
markitup_generate
Generates 3 polished marketing-visual variations from a screenshot. Costs 1 credit.
Argument | Type | Required | Description |
| string | yes | What the image shows and what to highlight |
| string | yes | One of |
| string | one-of | Public HTTPS URL of the source image |
| string | one-of | Base64-encoded image bytes (no |
| string | no | MIME type when supplying |
| string | no | One of |
| string | no |
|
Returns: the marketing copy (headline, sub-headline) plus 3 generated image variations as base64 image content blocks. The full structured response is also available under structuredContent.
Example prompt (in Claude Code):
Use markitup_generate with the screenshot at https://example.com/dashboard.png — highlight the export button and pitch it for a marketing landing page using the bold_marketing template.
markitup_regen
Regenerate one variation from a previous markitup_generate call. Costs 1 credit by default (charge_credit: false to skip).
The LLM must pass back the text_analysis object from the previous generate's structuredContent.text so the regenerated visual stays on-brand with the same headline / sub-headline. variation_index selects which slot (0–2).
markitup_extend
AI outpaint — extend an image to a larger canvas / different aspect ratio. Costs 1 credit.
Argument | Type | Required | Description |
| string | one-of | Source image |
| string | yes | Target ratio ( |
| number | yes | Output pixel dimensions |
| string | no |
|
markitup_remove_background
Remove the background from an image via Photoroom's HD model. Returns a transparent PNG. Costs 1 credit (free for active Pro/Power subscribers).
Argument | Type | Required | Description |
| string | one-of | Source image |
Environment variables
Var | Required | Description |
| yes | API key from your MarkItUp dashboard |
| no | Override the API base URL. Default: |
Local development
git clone https://github.com/markitup/mcp-server.git
cd mcp-server
npm install
npm run build
# Point your MCP client config at the local build:
{
"command": "node",
"args": ["/absolute/path/to/mcp-server/dist/index.js"],
"env": { "MARKITUP_API_KEY": "mk_test_..." }
}Security
Never commit
MARKITUP_API_KEYto source control.If you accidentally expose a key, revoke it immediately at https://markitup.app/dashboard and create a new one.
Keys are SHA-256 hashed on the server; the raw key is shown only once at creation.
Errors
The server surfaces clean human-readable errors for the common cases:
Invalid or missing MARKITUP_API_KEY— set or rotate the key.Out of MarkItUp credits— top up at https://markitup.app/credits.Rate limit exceeded— wait briefly and retry.
License
MIT
Available Tools
5 toolsmarkitup_credit_balanceA
Return the current MarkItUp credit balance and subscription status for the authenticated account. Use this before calling generation tools to verify the account has credits available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It correctly implies a safe, read-only operation without causing side effects, which is adequate for a simple balance check.
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 concise, front-loaded sentences with no wasted words. Every sentence adds value: purpose first, usage guidance second.
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?
While adequate for the tool's simplicity, it lacks details about the return structure (e.g., whether balance is an object or just a number). With no output schema, more specificity would improve completeness.
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?
No parameters exist (0 params, 100% schema coverage). Description adds value by explaining what the tool returns, fulfilling the baseline expectation for zero-parameter tools.
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 explicitly states it returns 'current MarkItUp credit balance and subscription status for the authenticated account', clearly distinguishing it from sibling generation tools.
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?
It gives explicit guidance: 'Use this before calling generation tools to verify the account has credits available.' No explicit when-not, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
markitup_extendA
AI-outpaint an image to a larger canvas. Useful for converting a square asset to 16:9 or 9:16, or extending a tight crop. Costs 1 credit. Provide the source image as URL or base64, plus the target aspect ratio and pixel dimensions.
| Name | Required | Description | Default |
|---|---|---|---|
| image_url | No | Public HTTPS URL of the source image. | |
| image_base64 | No | Base64-encoded source image (no data: prefix). Mutually exclusive with image_url. | |
| image_mime_type | No | image/png | |
| aspect_ratio | Yes | Target aspect ratio. One of: 1:1, 3:2, 2:3, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9. | |
| target_width | Yes | Target output width in pixels. | |
| target_height | Yes | Target output height in pixels. | |
| image_size | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It mentions the credit cost but does not disclose other behavioral traits such as output format, synchronous/asynchronous behavior, error conditions, or whether the operation is reversible. The description provides minimal behavioral context beyond the basic action.
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 extremely concise with two sentences that front-load the purpose and immediately follow with usage context and parameters. No redundant or unnecessary information is present.
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 the complexity (7 parameters, no output schema, no annotations), the description covers the essential purpose and usage but lacks details on output format, direction of extension, or error handling. It is adequate for a basic understanding but not fully comprehensive.
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 schema has 71% description coverage, so the description's added value is limited. It reiterates that parameters include source image (URL or base64) and target dimensions, but does not explain the 'image_size' enum or add semantics beyond what the schema already provides. This meets the baseline for moderate coverage.
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 the tool's purpose: 'AI-outpaint an image to a larger canvas.' It provides specific use cases like converting a square asset to different aspect ratios, which distinguishes it from sibling tools that generate, regenerate, or remove backgrounds.
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 explicit use cases ('converting a square asset to 16:9 or 9:16, or extending a tight crop') and mentions cost ('Costs 1 credit'). However, it lacks explicit comparison to alternatives or when not to use it, though the context from sibling names implies differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
markitup_generateA
Generate polished marketing-visual variations of a screenshot or image using the MarkItUp pipeline (Claude analyzes the image and writes copy; Gemini renders the visuals). Costs 1 credit. Provide the image either as a public URL (image_url) OR as a base64-encoded string (image_base64) — exactly one. Common template IDs: glassmorphic, clean_minimal, bold_marketing, dark_professional, documentation. Returns the generated images plus the marketing copy (headline, subhead) written by Claude.
| Name | Required | Description | Default |
|---|---|---|---|
| image_url | No | Public HTTPS URL of the source image. Mutually exclusive with image_base64. | |
| image_base64 | No | Base64-encoded image bytes (no data: prefix). Mutually exclusive with image_url. | |
| image_mime_type | No | MIME type when supplying image_base64. Defaults to image/png. | image/png |
| description | Yes | Natural-language description of what the image shows and what should be highlighted or emphasized. | |
| template_id | Yes | Template ID controlling visual style. Standard options: glassmorphic, clean_minimal, bold_marketing, dark_professional, documentation. | |
| aspect_ratio | No | Optional. One of: 1:1, 3:2, 2:3, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9. | |
| image_size | No | Optional output resolution tier. Defaults to backend choice. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers cost (1 credit), the multi-model pipeline (Claude + Gemini), and return value (images + copy), providing adequate behavioral context.
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?
Description is only 3 sentences, each serving a purpose: purpose/pipeline, cost/input constraint, template IDs/output. Perfectly front-loaded.
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 7 parameters and no output schema, the description covers necessary context: input methods, cost, style options, and what is returned. No gaps.
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 100%, but the description adds value by clarifying the mutual exclusivity of image_url/image_base64 and listing example template_ids beyond schema defaults.
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 the tool generates polished marketing-visual variations using a specific pipeline, distinguishing it from siblings like markitup_extend or markitup_remove_background.
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 explicitly says to provide either image_url or image_base64 (exactly one) and lists common template IDs, but lacks explicit when-not-to-use guidance or comparisons to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
markitup_regenA
Regenerate a single variation from a previous markitup_generate call with the same source image and template. Costs 1 credit if charge_credit=true. Pass back the source image (as URL or base64) AND the text analysis object returned in the previous generate's structuredContent.text — the regen uses the same headline/copy so visuals stay consistent. Use variation_index to choose which slot (0–2) to regenerate.
| Name | Required | Description | Default |
|---|---|---|---|
| source_image_url | No | Public HTTPS URL of the same source image used in the original markitup_generate. | |
| source_image_base64 | No | Base64-encoded source image (no data: prefix). Mutually exclusive with source_image_url. | |
| source_image_mime_type | No | MIME type when supplying source_image_base64. Defaults to image/png. | image/png |
| template_id | Yes | Same template_id used in the original generate. | |
| text_analysis | Yes | The 'text' object from the previous generate's structuredContent — includes headline, subHeadline, marketingCopy. | |
| variation_index | No | Which slot (0, 1, or 2) to regenerate. Default 0. | |
| aspect_ratio | No | ||
| image_size | No | ||
| charge_credit | No | If true, deduct 1 credit. Defaults to true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description discloses important behaviors: credit cost (if charge_credit=true), the need to reuse previous text_analysis to maintain visual consistency, and the use of variation_index to select a slot. This goes beyond simple purpose.
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 front-loaded with the main purpose and logically organized. Each sentence adds distinct value (prerequisite, cost, required arguments, slot selection). No redundant or irrelevant information.
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?
Despite no output schema, the description covers key usage aspects: required inputs from previous call, variation selection, credit cost. It does not explain the return format, but the regeneration context is adequately described for an agent to infer the output.
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 78%, and the description adds context by explaining the relationship between text_analysis and the previous generate's structuredContent.text, and clarifying variation_index as a slot. This provides meaning beyond the schema definitions.
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 uses the specific verb 'Regenerate' and clearly identifies the resource as 'a single variation from a previous markitup_generate call'. It distinguishes from sibling tools (e.g., markitup_generate) by referencing the prerequisite generation call.
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 provides instructions on when to use the tool (after a markitup_generate call) and how to pass required data (source image, text_analysis object, variation_index). It also mentions credit cost. Missing explicit when-not-to-use scenarios, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
markitup_remove_backgroundA
Remove the background from an image using Photoroom's HD AI background-removal service. Returns a transparent PNG. Costs 1 credit (free for active Pro/Power subscribers). Provide the source image as URL or base64.
| Name | Required | Description | Default |
|---|---|---|---|
| image_url | No | Public HTTPS URL of the source image. | |
| image_base64 | No | Base64-encoded source image (no data: prefix). Mutually exclusive with image_url. | |
| image_mime_type | No | image/png |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses output is transparent PNG, cost of 1 credit, free for Pro/Power subscribers. No annotations provided, so description carries burden; it covers key behaviors but omits error handling or rate limits.
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, front-loaded with purpose, then cost and input format. No wasted words.
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 medium-complexity tool, description covers purpose, input, output, and cost. No output schema, but output described as transparent PNG. Enough for agent to decide.
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 has 67% description coverage. Description adds context that image_url and image_base64 are mutually exclusive and mentions mime_type default. Adds some value, but schema already covers basics.
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 it removes background from an image using Photoroom HD AI, returns transparent PNG. Distinct from siblings (credit_balance, extend, generate, regen) which are unrelated.
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?
Specifies input format (URL or base64) and credit cost. Implicitly suggests usage for background removal, but no explicit when-to-use or alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose: checking credits, extending canvas, generating marketing variations, regenerating a specific variation, and removing background. There is no ambiguity between them.
All tools share the 'markitup_' prefix and use snake_case, but 'credit_balance' is a noun phrase while others are verb phrases (extend, generate, regen, remove_background). This minor inconsistency prevents a perfect score.
With 5 tools covering core image generation and editing needs, the count is reasonable for a specialized marketing tool. Slightly more tools could be added (e.g., template listing), but it's well-scoped.
The tool surface covers the primary workflow: credit check, generate, regenerate, extend, and background removal. A minor gap is the lack of a tool to list available templates or manage credits, but the core pipeline is complete.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for Qwen Image 3 AI image generation
MCP server for NanoBanana AI image generation and editing
Focused MCP server for OpenAI image/audio generation (v2.0.0). Wraps endpoints via HAPI CLI.
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for multi-provider AI image generation (AWS Bedrock, OpenAI, Google Gemini) enabling image generation, transformation, and editing through a unified interface.41MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for generating, editing, and processing images via multiple providers including Kilo, OpenRouter, OpenAI, and Gemini, with local tools for background removal, resizing, and cropping.232MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides image generation using Google's Nano Banana Gemini models, with additional tools for background removal, upscaling, and format conversion via deterministic post-processing.1MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server for AI-powered image processing (generate, edit, vary, analyze) supporting OpenAI, Gemini, Ideogram, and custom relay endpoints.-
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/smythmyke/markitup-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server