Skip to main content
Glama
smythmyke

MarkItUp - AI Image Marketing and Annotation

by smythmyke
README.md
# markitup-mcp-server

[![npm version](https://img.shields.io/npm/v/markitup-mcp-server.svg)](https://www.npmjs.com/package/markitup-mcp-server)
[![MCP Registry](https://img.shields.io/badge/MCP%20Registry-active-2da44e)](https://registry.modelcontextprotocol.io/v0/servers?search=markitup)
[![Glama](https://img.shields.io/badge/Glama-listed-blue)](https://glama.ai/mcp/servers/smythmyke/markitup-mcp-server)
[![smithery badge](https://smithery.ai/badge/smythmyke/markitup-mcp-server)](https://smithery.ai/servers/smythmyke/markitup-mcp-server)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

MCP (Model Context Protocol) server for [MarkItUp](https://markitup.app) — 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

1. A MarkItUp account — sign up at https://markitup.app.
2. A MarkItUp API key — generate one at https://markitup.app/dashboard.
3. Node.js 18 or newer (only if installing locally; `npx` doesn't require a local Node.js if your MCP client bundles one).

## Configure in Claude Code

Add to your MCP config (`~/.claude/mcp.json` or project-scoped `.mcp.json`):

```jsonc
{
  "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):

```jsonc
{
  "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:

```jsonc
{
  "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 |
|---|---|---|---|
| `description` | string | yes | What the image shows and what to highlight |
| `template_id` | string | yes | One of `glassmorphic`, `clean_minimal`, `bold_marketing`, `dark_professional`, `documentation` (and more) |
| `image_url` | string | one-of | Public HTTPS URL of the source image |
| `image_base64` | string | one-of | Base64-encoded image bytes (no `data:` prefix) |
| `image_mime_type` | string | no | MIME type when supplying `image_base64`. Default: `image/png` |
| `aspect_ratio` | string | no | One of `1:1`, `3:2`, `2:3`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9`, `21:9` |
| `image_size` | string | no | `1K`, `2K`, or `4K` |

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 |
|---|---|---|---|
| `image_url` / `image_base64` | string | one-of | Source image |
| `aspect_ratio` | string | yes | Target ratio (`16:9`, `9:16`, etc.) |
| `target_width` / `target_height` | number | yes | Output pixel dimensions |
| `image_size` | string | no | `1K`, `2K`, or `4K` |

### `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 |
|---|---|---|---|
| `image_url` / `image_base64` | string | one-of | Source image |

## Environment variables

| Var | Required | Description |
|---|---|---|
| `MARKITUP_API_KEY` | yes | API key from your MarkItUp dashboard |
| `MARKITUP_API_BASE` | no | Override the API base URL. Default: `https://markitup.app/api/v1`. Useful for testing against staging. |

## Local development

```bash
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_KEY` to 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

TDQS

A4.2/5.0

Scored across 5 tools

Disambiguation4/5

Each tool targets a distinct operation: balance checking, generating, regenerating, extending, and background removal. Generate and regen are closely related, but regen's dependency on a previous analysis object and variation_index makes the boundary clear.

Naming Consistency4/5

All tools share the markitup_ prefix and snake_case convention, which is good. The naming style is slightly inconsistent because credit_balance is a noun phrase while the others are verb-led, and regen is an abbreviated form of generate.

Tool Count5/5

Five tools is a well-scoped set for an image marketing and processing server. Each tool serves a clear purpose with no redundant or expendable entries.

Completeness4/5

The main generation, regeneration, extension, background removal, and credit-check workflows are covered. Minor gaps include the lack of a template discovery tool and no explicit annotation tool despite the server name, but common template IDs are documented and generate returns marketing copy.

Maintenance

ActivityInactive
ResponsivenessUnresponsive