Koskamo

Razi Media Tools MCP

A scoped MCP server for media processing tasks including image compression, splitting images for social grids, and generating QR codes. It is part of a suite of developer tools available via JSON-RPC 2.0 over POST, allowing AI agents to execute these operations without requiring user authentication.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Razi Media Tools MCP logo, by razi.proCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by razi.pro
You need:No API key, no signup: anonymous callers are rate limited, and a free key raises the limit.
MCP endpoint (Streamable HTTP)
https://www.razi.pro/api/mcp/media
Vendor documentation

What its tools do

4 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

4 of 4 have a description · 0 of 4 declare behavior hints · 4 of 4 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Compress images to reduce file size
  • Split images for Instagram grids or carousels
  • Generate QR codes from text or URLs

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
razi-media-tools 2.1.1
MCP protocol negotiated in check
2025-06-18
Tools
4 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {}
}

Tools

4 advertised

compress_image
Advertised by the server during the last successful anonymous check.

Re-encode a single raster image to webp, jpeg, png or avif, optionally resizing it and/or converting it to grayscale. HEIC/HEIF input is converted to JPEG first, and SVG input is rasterised at 300 DPI, fitted inside 800x800 unless width or height is given. Lossy for webp, jpeg and avif at any quality below 1.0. Raster images only: a PDF or a video is rejected, and neither can be re-encoded anywhere on this server. Output shape depends on size: an input under 5MB is processed in-app and the encoded image bytes are returned, while anything larger is sent to razi.pro's worker and the reply is JSON { url, size, metadata } pointing at a hosted copy instead of bytes. Paid compute; 30 calls per hour per IP. There is no upload channel over MCP: pass `fileUrl`, a URL in razi.pro's own storage; third-party URLs are rejected. Obtain one by uploading the image over the REST API first (POST /api/v1/tools/execute with the file attached).

compress_image input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "width": {
      "type": "number",
      "description": "Target width in pixels. Give only one of width/height to scale the other proportionally. Omit both to keep the original dimensions. Enlarging is allowed."
    },
    "format": {
      "enum": [
        "webp",
        "jpeg",
        "png",
        "avif"
      ],
      "type": "string",
      "description": "Output container/codec. Default webp; an unrecognised value also falls back to webp. Transparency survives in webp, png and avif but not jpeg."
    },
    "height": {
      "type": "number",
      "description": "Target height in pixels. Give only one of width/height to scale the other proportionally. Omit both to keep the original dimensions."
    },
    "quality": {
      "type": "number",
      "description": "Encoder quality as a fraction from 0.1 to 1.0, scaled to the encoder's 0-100 range. Default 0.9. Higher means larger and closer to the original."
    },
    "grayscale": {
      "type": "boolean",
      "description": "Drop colour before encoding. Default false."
    },
    "keepAspectRatio": {
      "type": "boolean",
      "description": "Only has an effect when BOTH width and height are given. Default false, which centre-crops the image to fill the box exactly. Set true to fit the whole image inside the box instead, so the result may be smaller than the box in one dimension."
    }
  }
}
generate_qr_code
Advertised by the server during the last successful anonymous check.

Render text or a URL as a QR code image. Returns JSON { dataUrl, text, size } where dataUrl is a base64 PNG data URI embedded in the response — not a hosted link, so nothing is stored and the image cannot be fetched later. Runs locally and costs nothing. Writing only — it cannot read or decode an existing QR code. A long payload makes a denser, less scannable code, so shorten the address by other means before encoding it if you can.

generate_qr_code input schema
{
  "type": "object",
  "required": [
    "text"
  ],
  "properties": {
    "size": {
      "type": "number",
      "description": "Width and height of the output PNG in pixels; the code is always square. Default 300. Only applied when given as a number."
    },
    "text": {
      "type": "string",
      "description": "The exact payload to encode. A URL must include its scheme to be actionable when scanned. Very long values force a denser code that is harder to scan."
    },
    "errorCorrection": {
      "enum": [
        "L",
        "M",
        "Q",
        "H"
      ],
      "type": "string",
      "description": "Declared for compatibility but currently ignored — the code is always generated at the library default, level M (about 15% damage tolerance)."
    }
  }
}
generate_image
Advertised by the server during the last successful anonymous check.

Generate a new image from a text description with a diffusion model. Returns a single PNG; over MCP it arrives inline when under 1MB and otherwise as a stored URL that stays retrievable for about 24 hours. This invents an image from scratch — it cannot edit, upscale or restyle a picture you already have. Use compress_image to re-encode or resize an existing file. Requires a signed-in razi.pro account; an anonymous call is rejected with 401. Paid compute, 20 images per hour per account, and generation can take tens of seconds. Providers are tried in turn (Fireworks FLUX.1-schnell, Hugging Face FLUX.1-schnell, SDXL, Cloudflare SDXL, Replicate), so the model that actually ran varies with availability and there is no seed or size control. No two calls give identical output, and the image is not automatically hosted anywhere permanent.

generate_image input schema
{
  "type": "object",
  "required": [
    "prompt"
  ],
  "properties": {
    "prompt": {
      "type": "string",
      "description": "What the image should show. Subject, style and composition all help. Required, non-blank, maximum 2,000 characters."
    },
    "negativePrompt": {
      "type": "string",
      "description": "What to keep out of the image, e.g. 'text, watermark, blurry'. Maximum 2,000 characters. Only the Replicate fallback provider honours it, so on the usual path it has no effect."
    }
  }
}
split_image
Advertised by the server during the last successful anonymous check.

Cut one storyboard, collage or grid image into its separate panels and return them as a ZIP, one file per panel in reading order. Over MCP the ZIP is not inlined: it comes back as a stored URL that stays retrievable for about 24 hours. Two modes. Give both rows and cols for an exact equal division, which is free of model cost and predictable. Omit them and a vision model locates the panels, excluding borders, gaps and captions — better on uneven layouts, but it is a paid inference whose panel count and crops can vary between runs, and it fails with 400 if it finds nothing. Panels are cropped, never resized; a lossy re-encode at quality 90 is applied for jpeg and webp. This divides one image into several — it does not shrink a file (use compress_image), and it cannot take a PDF apart. Paid compute; 20 calls per hour per IP. There is no upload channel over MCP: pass `fileUrl`, a URL in razi.pro's own storage; third-party URLs are rejected. Obtain one by uploading the image over the REST API first (POST /api/v1/tools/execute with the file attached).

split_image input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "cols": {
      "type": "number",
      "description": "Number of equal-width columns in the grid. Only takes effect when rows is also given. Omit both rows and cols to have the panels detected automatically."
    },
    "rows": {
      "type": "number",
      "description": "Number of equal-height rows in the grid. Only takes effect when cols is also given; supplying both switches off vision detection and divides the image evenly, ignoring any borders or gaps."
    },
    "format": {
      "enum": [
        "png",
        "jpeg",
        "webp"
      ],
      "type": "string",
      "description": "Encoding for each extracted panel and its file extension inside the ZIP. Default png, which is lossless; jpeg and webp are written at quality 90."
    }
  }
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
498 ms
95th percentile latency
498 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 498 ms · metadata changed · 4 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http razi-media-tools-mcp https://www.razi.pro/api/mcp/media

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add razi-media-tools-mcp --url https://www.razi.pro/api/mcp/media

Cursor

Merge this server into .cursor/mcp.json in your project, then enable razi-media-tools-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "razi-media-tools-mcp": {
      "url": "https://www.razi.pro/api/mcp/media"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "razi-media-tools-mcp": {
      "type": "streamableHttp",
      "url": "https://www.razi.pro/api/mcp/media",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start razi-media-tools-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "razi-media-tools-mcp": {
      "type": "http",
      "url": "https://www.razi.pro/api/mcp/media"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http razi-media-tools-mcp https://www.razi.pro/api/mcp/media

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://www.razi.pro/api/mcp/media

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "razi-media-tools-mcp": {
      "serverUrl": "https://www.razi.pro/api/mcp/media"
    }
  }
}

Let your agent find its tools

Find servers like Razi Media Tools MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.