Koskamo

Razi Document Tools MCP

Provides an MCP endpoint for document processing tools including merging, splitting, and compressing PDFs, running OCR, and extracting text. It offers scoped servers for specific domains like documents, media, and web, accessible via JSON-RPC 2.0 or npx.

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 Document 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/documents
Vendor documentation

What its tools do

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

6 of 6 have a description · 0 of 6 declare behavior hints · 3 of 3 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

  • Merge, split, and compress PDF files
  • Run OCR and extract text from documents
  • Compress images and video files
  • Generate SQL queries and QR codes

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

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

Tools

6 advertised

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

Concatenate two or more PDFs into a single PDF, in the order supplied, and return the merged file. Over MCP the PDF is never inlined: it comes back as a stored URL that stays retrievable for about 24 hours. Page content is copied unchanged — it does not compress (use compress_pdf) or select pages (use split_pdf). Fewer than two files is rejected. Every input must already be a PDF; a photo handed to this tool is rejected rather than converted. Use images_to_pdf when any input is a picture — it takes PDFs alongside them and splices both in one pass. There is no upload channel over MCP: pass `fileUrls`, an array of URLs in razi.pro's own storage; third-party URLs are rejected. Obtain such a URL by uploading the file over the REST API first (POST /api/v1/tools/execute with the file attached). Over the REST API the files may instead be attached as multipart/form-data. Limited to 20 merges per hour per IP.

merge_pdf input schema
{
  "type": "object",
  "required": [],
  "properties": {}
}
split_pdf
Advertised by the server during the last successful anonymous check.

Extract page ranges from one PDF into new PDFs. One output file is produced per range: a single range returns that PDF directly, several ranges return a ZIP containing one PDF each. Over MCP you receive a link to the stored output rather than its bytes, and that link keeps working for roughly a day. Pages are copied verbatim — this does not reduce file size (use compress_pdf) and it cannot rasterise pages into images, which is a browser-only feature of razi.pro. Every output stays a PDF. 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 PDF over the REST API first, where it may instead be attached as multipart/form-data. Limited to 20 splits per hour per IP.

split_pdf input schema
{
  "type": "object",
  "required": [
    "ranges"
  ],
  "properties": {
    "ranges": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Page ranges to extract, 1-based and inclusive, one output file per entry. Use 'first-last' for a span ('1-2', '3-5'), a bare number for one page ('7'), or a comma-separated combination in one entry ('1-3,7'). Spans are clamped to the document length and pages that do not exist are dropped; an entry that selects no page produces no output file."
    }
  }
}
compress_pdf
Advertised by the server during the last successful anonymous check.

Shrink a PDF's byte size while keeping it a PDF, for email limits or slow connections. Returns the compressed PDF; over MCP it is never inlined, arriving as a stored URL that stays retrievable for about 24 hours. Ghostscript on razi.pro's worker downsamples embedded images at a fixed 'ebook' preset — lossy, with no quality knob. Compression is not guaranteed: if the worker is unavailable the fallback only rewrites the file with object streams, which typically saves almost nothing, and when nothing can be saved the original bytes are returned unchanged. PDFs only: an image or a video is rejected, and neither can be re-encoded anywhere on this server. Paid compute; 20 calls per hour per IP; a large file can take minutes. 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 PDF over the REST API first (POST /api/v1/tools/execute with the file attached).

compress_pdf input schema
{
  "type": "object",
  "required": [],
  "properties": {}
}
images_to_pdf
Advertised by the server during the last successful anonymous check.

Assemble pictures into one PDF, a page per picture, in the order supplied. PNG and JPEG bytes are embedded untouched; WebP, GIF, TIFF and AVIF are re-encoded to PNG on the way in, which loses no detail but does rewrite the file. A PDF sitting among the pictures is spliced in whole at its position, so a photo/contract/photo sequence takes one call. Each page defaults to the pixel dimensions of its picture, so nothing is scaled, cropped or letterboxed; choose 'a4' or 'letter' instead to centre every picture on a fixed portrait sheet, optionally inside a `margin` of blank points. Ceilings per call: 100 files, and 50MB summed across all of them, at 20 calls an hour per IP. Bytes that cannot be decoded as a picture — a spreadsheet, a video, a corrupt upload — earn an HTTP 400 naming the offending file; a blank page is never substituted to hide one. Output is the finished PDF: raw bytes over REST, and over MCP a link to the stored document that keeps working for roughly a day. MCP carries no attachments, so name the pictures with `fileUrls` — an ordered array of links inside razi.pro's own storage. Links elsewhere on the internet are refused. Mint them by POSTing the pictures to /api/v1/tools/execute first, where they may simply be attached.

images_to_pdf input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "margin": {
      "type": "number",
      "description": "Blank border in points (72 to the inch) kept clear on every side. Default 0. With 'a4' or 'letter' it shrinks the area the picture is fitted into; with 'fit' it enlarges the page around the picture instead."
    },
    "pageSize": {
      "enum": [
        "fit",
        "a4",
        "letter"
      ],
      "type": "string",
      "description": "Page geometry. 'fit' (default) makes each page exactly as many points as its picture has pixels, preserving the aspect ratio with no empty space. 'a4' (595x842pt) and 'letter' (612x792pt) use a fixed portrait sheet and centre the picture on it, scaling it up or down to fit; the leftover space is blank."
    }
  }
}
extract_text_ocr
Advertised by the server during the last successful anonymous check.

Use this ONLY when the text exists as PIXELS and nothing else — a photo, a screenshot, a scan. It runs optical character recognition on an image and GUESSES the characters, so it is a best-effort transcription that misreads under blur, skew or low contrast. Returns JSON { text, language, confidence? }. If the file already stores real characters, this is the wrong tool and will be less accurate: parse_document reads them exactly. The deciding question is what the bytes contain, never the file extension — a .png of a letter needs this tool, a .txt never does. Layout is not preserved — no tables, columns or coordinates, just a flat string. 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).

extract_text_ocr input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "language": {
      "enum": [
        "eng",
        "ara",
        "chi_sim",
        "fra",
        "deu",
        "spa",
        "jpn",
        "kor"
      ],
      "type": "string",
      "description": "ISO 639-2 style code for the language the recogniser should expect: eng English, ara Arabic, chi_sim Simplified Chinese, fra French, deu German, spa Spanish, jpn Japanese, kor Korean. Default eng. One language per call; naming the wrong one badly degrades accuracy."
    }
  }
}
parse_document
Advertised by the server during the last successful anonymous check.

Use this when the file ALREADY stores its text as characters: it decodes them and returns JSON { text, metadata } verbatim, with no guessing involved. That exactness is the whole difference from extract_text_ocr, which recovers text from pixels by guessing at glyph shapes and should only ever be pointed at a photo, screenshot or scan. Supported: .txt, decoded as UTF-8 and returned in full with metadata { format: "txt", words }; and .pdf, where the text layer is read page by page and joined with a `--- Page N ---` separator, returning metadata { format: "pdf", pages, words } — pages and words are counted from the document itself, never estimated. .docx and every other extension are rejected with 400. A scanned or photographed PDF has no text layer, so nothing can be extracted from it here; that case returns 422 with a metadata.imageOnly flag rather than an empty success, and extract_text_ocr is the tool for it. Limits: 50MB and 300 pages, over which the call returns 413; an unreadable or encrypted PDF returns 400. Layout is not preserved — no tables, columns or coordinates, just a flat string per page. The file type is decided by the filename extension, not by inspecting the bytes. 10 calls per minute per caller. 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 file over the REST API first (POST /api/v1/tools/execute with the file attached).

parse_document input schema
{
  "type": "object",
  "required": [],
  "properties": {}
}

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
423 ms
95th percentile latency
423 ms

Maintenance history

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

  • · probe · passed · 423 ms · metadata changed · 6 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-document-tools-mcp https://www.razi.pro/api/mcp/documents

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-document-tools-mcp --url https://www.razi.pro/api/mcp/documents

Cursor

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

Cline

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

VS Code

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

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-document-tools-mcp https://www.razi.pro/api/mcp/documents

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/documents

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-document-tools-mcp": {
      "serverUrl": "https://www.razi.pro/api/mcp/documents"
    }
  }
}

Let your agent find its tools

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