Write, validate, render and analyze spintax templates. Backed by @spintax/core. No auth.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Reports what the template needs and contains: refs (variables referenced), sets (#set macros, re-picked per reference), defs (#def, rolled once per render), includes, diagnostics, and best-effort construct counts. Answers "what variables must I supply" — it is NOT a variant-cardinality counter.
Spintax template source (max 8192 characters). #include is disabled on this server.
Locale for {plural …} arity, e.g. "en" (2-form), "ru" (3-form: ru/uk/be/sr/hr/bs) or "ar" (6-form). Omit for the 2-form default.
Reports what the template needs and contains: refs (variables referenced), sets (#set macros, re-picked per reference), defs (#def, rolled once per render), includes, diagnostics, and best-effort construct counts. Answers "what variables must I supply" — it is NOT a variant-cardinality counter.
| Argument | Type | Description |
|---|---|---|
| locale | string | Locale for {plural …} arity, e.g. "en" (2-form), "ru" (3-form: ru/uk/be/sr/hr/bs) or "ar" (6-form). Omit for the 2-form default. |
| template* | string | Spintax template source (max 8192 characters). #include is disabled on this server. |
| knownVariables | array |
{
"type": "object",
"required": [
"template"
],
"properties": {
"locale": {
"type": "string",
"description": "Locale for {plural …} arity, e.g. \"en\" (2-form), \"ru\" (3-form: ru/uk/be/sr/hr/bs) or \"ar\" (6-form). Omit for the 2-form default."
},
"template": {
"type": "string",
"maxLength": 8192,
"description": "Spintax template source (max 8192 characters). #include is disabled on this server."
},
"knownVariables": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}Renders up to 20 variants. With a seed the output is deterministic (variant i uses seed "<seed>#<i>"); without one it is random. The engine is lenient: structural mistakes never throw, they surface in the output — run validate_spintax first.
| Argument | Type | Description |
|---|---|---|
| seed | string | number | Deterministic RNG seed; omit for random output. |
| count | integer | Number of variants (1–20). |
| locale | string | Locale for {plural …} arity, e.g. "en" (2-form), "ru" (3-form: ru/uk/be/sr/hr/bs) or "ar" (6-form). Omit for the 2-form default. |
| context | object | Variable map, e.g. {"CITY": "Prague"}. Overrides #set/#def definitions. |
| template* | string | Spintax template source (max 8192 characters). #include is disabled on this server. |
{
"type": "object",
"required": [
"template"
],
"properties": {
"seed": {
"type": [
"string",
"number"
],
"description": "Deterministic RNG seed; omit for random output."
},
"count": {
"type": "integer",
"default": 3,
"maximum": 20,
"minimum": 1,
"description": "Number of variants (1–20)."
},
"locale": {
"type": "string",
"description": "Locale for {plural …} arity, e.g. \"en\" (2-form), \"ru\" (3-form: ru/uk/be/sr/hr/bs) or \"ar\" (6-form). Omit for the 2-form default."
},
"context": {
"type": "object",
"description": "Variable map, e.g. {\"CITY\": \"Prague\"}. Overrides #set/#def definitions.",
"additionalProperties": {
"type": "string"
}
},
"template": {
"type": "string",
"maxLength": 8192,
"description": "Spintax template source (max 8192 characters). #include is disabled on this server."
}
},
"additionalProperties": false
}Read this BEFORE writing or editing a spintax template — it is the canonical authoring guide the whole spintax toolchain is written against, not a tutorial. Pass the locale you will author in: for ru/uk/be and sr/hr/bs it carries the agreement and case rules that decide whether the variants read as human writing, which is the hard part and the part a valid template can still get wrong; for ar, the six plural forms and their order. Returns text to read, not a template.
| Argument | Type | Description |
|---|---|---|
| locale | string | Language you will author in, e.g. "en" or "ru". Selects the grammar rules and the worked examples. Omit for the language-neutral rules only. |
| variationLevel | string | How much markup to use. Omit to decide for yourself — the guide then states no level. |
{
"type": "object",
"properties": {
"locale": {
"type": "string",
"description": "Language you will author in, e.g. \"en\" or \"ru\". Selects the grammar rules and the worked examples. Omit for the language-neutral rules only."
},
"variationLevel": {
"enum": [
"conservative",
"balanced",
"aggressive"
],
"type": "string",
"description": "How much markup to use. Omit to decide for yourself — the guide then states no level."
}
},
"additionalProperties": false
}Static validation: returns diagnostics with severity, stable code, message and 1-based line/column. No "error"-severity diagnostic means the template is structurally sound — read the warnings before rendering, because some of them (plural.locale-missing) mean a block will not resolve. Pass knownVariables for names you will supply at render time to silence their variable.undefined warnings.
| Argument | Type | Description |
|---|---|---|
| locale | string | Locale for {plural …} arity, e.g. "en" (2-form), "ru" (3-form: ru/uk/be/sr/hr/bs) or "ar" (6-form). Omit for the 2-form default. |
| template* | string | Spintax template source (max 8192 characters). #include is disabled on this server. |
| knownVariables | array | Variable names the caller will supply at render time (case-insensitive). |
{
"type": "object",
"required": [
"template"
],
"properties": {
"locale": {
"type": "string",
"description": "Locale for {plural …} arity, e.g. \"en\" (2-form), \"ru\" (3-form: ru/uk/be/sr/hr/bs) or \"ar\" (6-form). Omit for the 2-form default."
},
"template": {
"type": "string",
"maxLength": 8192,
"description": "Spintax template source (max 8192 characters). #include is disabled on this server."
},
"knownVariables": {
"type": "array",
"items": {
"type": "string"
},
"description": "Variable names the caller will supply at render time (case-insensitive)."
}
},
"additionalProperties": false
}