I built an MCP server that lets Claude watermark images - here's how

Published: (March 4, 2026 at 08:20 AM EST)
3 min read
Source: Dev.to

Source: Dev.to

I built an MCP server that lets Claude watermark images

I’m a solo developer and I built Markly, an image watermarking service. This post covers what MCP is, why I built the server, and how you can use it.

What is MCP?

MCP (Model Context Protocol) is an open standard by Anthropic that lets AI assistants connect to external tools. Think of it as giving Claude “hands.” Instead of just talking about watermarks, Claude can actually invoke functions to edit images.

The problem I was solving

My previous workflow for adding watermarks was:

  1. Open photo in editor
  2. Add text layer
  3. Adjust opacity, position, font
  4. Export

Repeating this 50 times was tedious. The API automated steps 1‑4, but I still had to write the API call, manage parameters, and handle the response.

Setup (≈10 seconds)

Add the following to your claude_desktop_config.json:

{
  "mcpServers": {
    "markly": {
      "command": "npx",
      "args": ["-y", "markly-mcp-server"]
    }
  }
}

No API key is needed; the free tier works immediately. After restarting Claude you’ll see four new tools:

  • markly_watermark_text – Add a text watermark to an image
  • markly_watermark_logo – Overlay a logo on an image
  • markly_batch_watermark – Watermark up to 20 images and get a ZIP

Usage examples

Simple text watermark

“Add ‘Copyright 2026’ as a watermark to this image: https://example.com/photo.jpg”

Claude calls markly_watermark_text with sensible defaults (semi‑transparent, bottom‑right).

“Watermark all these images with my logo.png, bottom‑right corner, 20 % opacity”

Claude calls markly_batch_watermark, uploads the files, and returns a download link.

Iterative refinement

“Make the text bigger and move it to the center”

Claude remembers the context and re‑processes the image with the adjusted parameters.

How it works under the hood

  • The MCP server is a TypeScript package that exposes tool definitions (name, parameters, description) via the MCP protocol.
  • When Claude calls a tool, the server makes an HTTP request to the Markly REST API.
  • The API processes the image with Imagick (text rendering, logo compositing) and returns the watermarked image.
  • The MCP server passes the result back to Claude.

You can also call the REST API directly:

curl -X POST https://www.markly.cloud/api/v1/watermark/text \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -F "image=@photo.jpg" \
    -F "text=Copyright 2026" \
    -F "position=bottom-right" \
    -F "opacity=50" \
    -o watermarked.jpg

Pricing

  • The free tier works without signup or API key; it adds a small “markly.cloud” text to the output.
  • For clean output, credit packs are one‑time purchases starting at 5 € for 250 credits.
  • Credits never expire. 1 credit = 1 image processed.

Tech stack

  • API: Laravel 11, PHP 8.3, Imagick, MySQL, Redis
  • MCP server: TypeScript, @modelcontextprotocol/sdk
  • Hosting: VPS behind Cloudflare
  • Payments: Stripe Checkout (for credit packs)

Try it

  • MCP server (npm):
  • GitHub repository (MIT):
  • API landing page:
  • MCP landing page:
  • API documentation:
  • Web tool:
0 views
Back to Blog

Related posts

Read more »