Koskamo

razi.pro Razi Text Generation MCP

Provides access to text generation and manipulation tools over MCP, including prose writing, email drafting, blog outlining, SQL generation, text humanization, diffing, and fake data creation. It is part of a broader suite of developer tools available via scoped servers.

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.pro Razi Text Generation MCP logo, by razi.proCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published 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/text
Vendor documentation

What its tools do

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

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

  • Generate SQL queries
  • Create blog outlines
  • Diff text changes
  • Generate fake data

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

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

Tools

7 advertised

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

Rewrite text you already have so it reads less like model output — fewer stock phrases, more contractions, varied sentence rhythm. Returns JSON { humanizedText }. Meaning is meant to be preserved but wording is not: never use it on text that must stay verbatim, such as quotes, legal copy or code. Use generate_text to produce new prose from a prompt and draft_email for a whole email; this one only transforms text it is given. Requires a signed-in razi.pro account — an anonymous call is rejected with 401. Paid model call; input capped at 10,000 characters and output at roughly 2,000 tokens, so long passages come back truncated. 30 calls per hour per account, and identical inputs may return a cached result.

humanize_text input schema
{
  "type": "object",
  "required": [
    "text"
  ],
  "properties": {
    "text": {
      "type": "string",
      "description": "The passage to rewrite. Plain text. Maximum 10,000 characters; longer input is rejected with 413."
    },
    "level": {
      "enum": [
        "light",
        "medium",
        "strong"
      ],
      "type": "string",
      "description": "How far the rewrite may drift from the original voice. 'light' strips AI tells but stays professional, 'medium' (the default, also used for any unrecognised value) turns it conversational with contractions, 'strong' rewrites it casually with short punchy sentences."
    }
  }
}
draft_email
Advertised by the server during the last successful anonymous check.

Write a business email body from a short brief. Returns JSON { email, cached } containing the body only — no subject line, no recipient, and nothing is sent anywhere. Choose this over generate_text when the output should be a whole email; use humanize_text to rewrite an email you already drafted. Paid model call. Anonymous callers get 3 per hour per IP and are then refused with 401; signed-in callers get 15 per minute per IP. Length is capped at roughly 400 tokens. Identical briefs may return a cached draft.

draft_email input schema
{
  "type": "object",
  "required": [
    "prompt"
  ],
  "properties": {
    "tone": {
      "enum": [
        "formal",
        "casual",
        "friendly"
      ],
      "type": "string",
      "description": "Register of the writing. Default formal. Passed to the model as an instruction, so it shapes wording rather than enforcing a fixed template."
    },
    "prompt": {
      "type": "string",
      "description": "What the email needs to say: purpose, recipient context, and any facts to include. A sentence or two is enough. Required and must not be blank."
    }
  }
}
generate_blog_outline
Advertised by the server during the last successful anonymous check.

Produce a markdown heading structure for a blog post — title, introduction, numbered sections with subsections, conclusion and an FAQ block. Returns JSON { outline } holding the markdown. It writes the skeleton only, not the article: use generate_text for body prose and humanize_text to rework text that already exists. Paid model call, capped at roughly 1,000 tokens, so a large section count yields thinner sections. 10 calls per minute per IP; identical requests may return a cached outline.

generate_blog_outline input schema
{
  "type": "object",
  "required": [
    "topic"
  ],
  "properties": {
    "topic": {
      "type": "string",
      "description": "The subject of the post, or a comma-free keyword phrase to build it around. The first thing supplied is treated as the primary keyword and the rest as secondary keywords to work in."
    },
    "sections": {
      "type": "number",
      "description": "How many main sections to plan between the introduction and the conclusion. Default 5; a non-numeric or zero value also falls back to 5."
    }
  }
}
generate_sql
Advertised by the server during the last successful anonymous check.

Translate a natural-language request into a SQL statement. Returns JSON { sql } containing the query text and nothing else — no validation report, no complexity score, and the query is never executed or checked against a real database. It has no knowledge of your schema beyond what the request states, so table and column names are guesses unless you supply them. Review before running, especially anything that writes. Paid model call. Anonymous callers get 3 per hour per IP and are then refused with 401; signed-in callers get 15 per minute per IP. Capped at roughly 500 tokens. Answers are cached, so the same request returns the same query.

generate_sql input schema
{
  "type": "object",
  "required": [
    "description"
  ],
  "properties": {
    "dialect": {
      "enum": [
        "mysql",
        "postgresql",
        "sqlite"
      ],
      "type": "string",
      "description": "Intended SQL dialect. Accepted for forward compatibility but NOT currently passed to the model, so the generated SQL is generic and may need adjusting for your engine."
    },
    "description": {
      "type": "string",
      "description": "What the query should do, in plain language. Include the table and column names you want used, otherwise the model invents plausible ones. Required and must not be blank."
    }
  }
}
compare_text
Advertised by the server during the last successful anonymous check.

Compare two blocks of text line by line. Returns JSON { identical, linesCompared, changeCount, changes[] }, where each change carries a 1-based line number, a change of 'added' | 'removed' | 'modified', and the before/after text. Lines are matched by POSITION, not by content: this is not an LCS diff, so inserting one line near the top reports every following line as modified. There is no character-level or word-level detail, and no unified-diff patch output. Whitespace and case are significant; \r\n and \n line endings are treated the same. Runs locally and costs nothing.

compare_text input schema
{
  "type": "object",
  "required": [
    "text1",
    "text2"
  ],
  "properties": {
    "text1": {
      "type": "string",
      "description": "The baseline text, reported as `before` in each change."
    },
    "text2": {
      "type": "string",
      "description": "The revised text, reported as `after` in each change."
    }
  }
}
generate_fake_data
Advertised by the server during the last successful anonymous check.

Produce placeholder person records for testing and fixtures. Returns JSON { type, count, records } where records is an array of strings, or of objects when type is 'user'. The values are drawn from a fixed word list by index, so they are DETERMINISTIC: the same arguments always return the same records, and asking twice does not give you fresh data. Emails all use example.com and phone numbers all use the +1-555 reserved range. It fabricates people only — for lorem-style prose use generate_text.

generate_fake_data input schema
{
  "type": "object",
  "required": [
    "type"
  ],
  "properties": {
    "type": {
      "enum": [
        "name",
        "email",
        "address",
        "phone",
        "user"
      ],
      "type": "string",
      "description": "Shape of each record. 'name', 'email', 'address' and 'phone' each return a plain string; 'user' returns an object with all four fields. Required; any other value is rejected."
    },
    "count": {
      "type": "number",
      "description": "How many records to return. Default 1, clamped to the range 1-100, and truncated to a whole number. Records are always the same sequence, so count 10 is the first 5 of count 5 plus 5 more."
    }
  }
}
generate_text
Advertised by the server during the last successful anonymous check.

Generate filler prose — lorem ipsum, random copy or sentences — for mockups and placeholder content. Returns JSON { text, provider, cached } with the blocks separated by newlines. A language model writes it, so it is a paid call and the output is approximate: type, length and count are phrased into the prompt rather than enforced, and the result will not match a requested character count exactly. For placeholder people (names, emails, addresses) use generate_fake_data, which is exact, free and deterministic. For a real email use draft_email, and to rework existing text use humanize_text. 15 calls per minute per IP; capped at roughly 1,500 tokens; identical requests may return a cached result.

generate_text input schema
{
  "type": "object",
  "required": [
    "type"
  ],
  "properties": {
    "type": {
      "enum": [
        "lorem",
        "random",
        "sentence"
      ],
      "type": "string",
      "description": "Flavour of filler to ask for: classic latin lorem ipsum, arbitrary English copy, or standalone sentences. Default lorem. Used as a prompt hint, so it steers the style rather than guaranteeing it."
    },
    "count": {
      "type": "number",
      "description": "How many separate blocks to return. Default 1. Large values are bounded in practice by the ~1,500 token output cap."
    },
    "length": {
      "type": "number",
      "description": "Rough size of each block in characters. Default 100. Requested in the prompt, so treat it as a target, not a limit."
    }
  }
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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

Maintenance history

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

  • · probe · passed · 439 ms · metadata changed · 7 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-text-generation-mcp https://www.razi.pro/api/mcp/text

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-text-generation-mcp --url https://www.razi.pro/api/mcp/text

Cursor

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

Cline

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

VS Code

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

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-text-generation-mcp https://www.razi.pro/api/mcp/text

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

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

Let your agent find its tools

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