Penline Handwriting Sheets
Tracing sheets & lined paper
Should I use this
Quality & Safety
Findings (1)
- LOWin generate_lined_paper
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"handwriting-sheets": {
"url": "https://handwriting-sheets.zovo.one/mcp"
}
}
}Remote endpoints
https://handwriting-sheets.zovo.one/mcpstreamable-httpWhat it can do
Tool inventory
Tools (3)
🟢generate_handwriting_sheet(text, line_size, paper, orientation, title, ...)
Use this when the user wants handwriting worksheets, tracing worksheets, letter tracing or handwriting practice sheets as a printable vector PDF. Supports up to 600 characters and word wrapping. Repeats text to fill each tracing row when repetitions are omitted, or uses an explicit one to four copies, followed by a blank copy row. Does not support cursive. Print letters only. Latin, Greek and Cyrillic supported. Oversized words produce a clear error.
Input Schema
{
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Letters, words or sentences to trace, up to 600 characters. Example: The cat sat."
},
"line_size": {
"description": "Capital-to-baseline body height in inches: 0.5, 0.625, 0.75 or 1.0. Example: 0.5. Default 0.5.",
"type": "number"
},
"paper": {
"description": "Paper: Letter or A4. Example: Letter. Default Letter.",
"type": "string"
},
"orientation": {
"description": "Page direction: portrait or landscape. Example: portrait. Default portrait.",
"type": "string"
},
"title": {
"description": "Optional page title, up to 80 supported characters. Example: Letter practice.",
"type": "string"
},
"trace_style": {
"description": "Tracing style: dotted, light_grey or outline. Example: dotted. Default dotted.",
"type": "string"
},
"name_date": {
"description": "Print a blank name and date line. Example: true. Default false.",
"type": "boolean"
},
"repetitions": {
"description": "Whole-number repetitions per tracing row, 1 to 4; each row is followed by a blank copy row. Example: 2. Omit to repeat as many copies as fit, with one body-height gap.",
"type": "number"
}
},
"required": [
"text"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"page_count": {
"type": "number"
},
"paper": {
"type": "string"
},
"orientation": {
"type": "string"
},
"line_size": {
"type": "number"
},
"body_height_pt": {
"type": "number"
},
"margin_pt": {
"type": "number"
},
"total_rows": {
"type": "number"
},
"trace_rows": {
"type": "number"
},
"copy_rows": {
"type": "number"
},
"repetitions": {
"type": "number"
},
"repetition_counts": {
"type": "array",
"items": {
"type": "number"
}
},
"rows_per_page": {
"type": "number"
},
"page_size_pt": {
"type": "array",
"items": {
"type": "number"
}
},
"guide_positions_pt": {
"type": "array",
"items": {
"type": "object",
"properties": {
"top": {
"type": "number"
},
"midline": {
"type": [
"number",
"null"
]
},
"baseline": {
"type": "number"
},
"descender_bottom": {
"type": "number"
}
},
"required": [
"top",
"midline",
"baseline",
"descender_bottom"
],
"additionalProperties": false
}
},
"trace_style": {
"type": "string"
},
"midline": {
"type": "boolean"
},
"downloads": {
"type": "object",
"properties": {
"pdf": {
"type": "string"
}
},
"required": [
"pdf"
],
"additionalProperties": false
}
},
"required": [
"kind",
"page_count",
"paper",
"orientation",
"line_size",
"body_height_pt",
"margin_pt",
"total_rows",
"trace_rows",
"copy_rows",
"repetitions",
"repetition_counts",
"rows_per_page",
"page_size_pt",
"guide_positions_pt",
"trace_style",
"midline",
"downloads"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢generate_name_tracing_sheet(name, lines, line_size, paper, orientation, ...)
Use this when the user wants name tracing worksheets or a custom tracing worksheet as a printable PDF. Supports a name up to 40 characters and 1 to 30 total writing rows, alternating trace and blank rows starting with trace. Does not support cursive. Print letters only. Latin, Greek and Cyrillic supported. A name must fit one row at the chosen size.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Name to trace, up to 40 characters. Example: Emma."
},
"lines": {
"description": "Total writing rows, alternating trace and blank; 1 to 30. Example: 6. Default 6.",
"type": "number"
},
"line_size": {
"description": "Capital-to-baseline body height in inches: 0.5, 0.625, 0.75 or 1.0. Example: 0.5. Default 0.5.",
"type": "number"
},
"paper": {
"description": "Paper: Letter or A4. Example: Letter. Default Letter.",
"type": "string"
},
"orientation": {
"description": "Page direction: portrait or landscape. Example: portrait. Default portrait.",
"type": "string"
},
"title": {
"description": "Optional page title, up to 80 supported characters. Example: Letter practice.",
"type": "string"
},
"trace_style": {
"description": "Tracing style: dotted, light_grey or outline. Example: dotted. Default dotted.",
"type": "string"
},
"name_date": {
"description": "Print a blank name and date line. Example: true. Default false.",
"type": "boolean"
},
"repetitions": {
"description": "Optional whole-number copies per tracing row, 1 to 4. Example: 2. Omit to fill the row with a body-height gap between copies.",
"type": "number"
}
},
"required": [
"name"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"page_count": {
"type": "number"
},
"paper": {
"type": "string"
},
"orientation": {
"type": "string"
},
"line_size": {
"type": "number"
},
"body_height_pt": {
"type": "number"
},
"margin_pt": {
"type": "number"
},
"total_rows": {
"type": "number"
},
"trace_rows": {
"type": "number"
},
"copy_rows": {
"type": "number"
},
"repetitions": {
"type": "number"
},
"repetition_counts": {
"type": "array",
"items": {
"type": "number"
}
},
"rows_per_page": {
"type": "number"
},
"page_size_pt": {
"type": "array",
"items": {
"type": "number"
}
},
"guide_positions_pt": {
"type": "array",
"items": {
"type": "object",
"properties": {
"top": {
"type": "number"
},
"midline": {
"type": [
"number",
"null"
]
},
"baseline": {
"type": "number"
},
"descender_bottom": {
"type": "number"
}
},
"required": [
"top",
"midline",
"baseline",
"descender_bottom"
],
"additionalProperties": false
}
},
"trace_style": {
"type": "string"
},
"midline": {
"type": "boolean"
},
"downloads": {
"type": "object",
"properties": {
"pdf": {
"type": "string"
}
},
"required": [
"pdf"
],
"additionalProperties": false
}
},
"required": [
"kind",
"page_count",
"paper",
"orientation",
"line_size",
"body_height_pt",
"margin_pt",
"total_rows",
"trace_rows",
"copy_rows",
"repetitions",
"repetition_counts",
"rows_per_page",
"page_size_pt",
"guide_positions_pt",
"trace_style",
"midline",
"downloads"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢generate_lined_paper(line_size, paper, orientation, title, pages, ...)
Use this when the user wants printable lined paper or kindergarten writing paper as a vector PDF. Produces 1 to 20 pages with solid top and baseline guides, descender space and an optional dashed midline. Four body heights, Letter or A4, portrait or landscape. Does not produce cursive examples.
Input Schema
{
"type": "object",
"properties": {
"line_size": {
"description": "Capital-to-baseline body height in inches: 0.5, 0.625, 0.75 or 1.0. Example: 0.5. Default 0.5.",
"type": "number"
},
"paper": {
"description": "Paper: Letter or A4. Example: Letter. Default Letter.",
"type": "string"
},
"orientation": {
"description": "Page direction: portrait or landscape. Example: portrait. Default portrait.",
"type": "string"
},
"title": {
"description": "Optional page title, up to 80 supported characters. Example: Letter practice.",
"type": "string"
},
"pages": {
"description": "Number of blank practice pages, whole number 1 to 20. Example: 2. Default 1.",
"type": "number"
},
"midline": {
"description": "Include the dashed guide halfway between top and baseline. Example: true. Default true.",
"type": "boolean"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"page_count": {
"type": "number"
},
"paper": {
"type": "string"
},
"orientation": {
"type": "string"
},
"line_size": {
"type": "number"
},
"body_height_pt": {
"type": "number"
},
"margin_pt": {
"type": "number"
},
"total_rows": {
"type": "number"
},
"trace_rows": {
"type": "number"
},
"copy_rows": {
"type": "number"
},
"repetitions": {
"type": "number"
},
"repetition_counts": {
"type": "array",
"items": {
"type": "number"
}
},
"rows_per_page": {
"type": "number"
},
"page_size_pt": {
"type": "array",
"items": {
"type": "number"
}
},
"guide_positions_pt": {
"type": "array",
"items": {
"type": "object",
"properties": {
"top": {
"type": "number"
},
"midline": {
"type": [
"number",
"null"
]
},
"baseline": {
"type": "number"
},
"descender_bottom": {
"type": "number"
}
},
"required": [
"top",
"midline",
"baseline",
"descender_bottom"
],
"additionalProperties": false
}
},
"trace_style": {
"type": "string"
},
"midline": {
"type": "boolean"
},
"downloads": {
"type": "object",
"properties": {
"pdf": {
"type": "string"
}
},
"required": [
"pdf"
],
"additionalProperties": false
}
},
"required": [
"kind",
"page_count",
"paper",
"orientation",
"line_size",
"body_height_pt",
"margin_pt",
"total_rows",
"trace_rows",
"copy_rows",
"repetitions",
"repetition_counts",
"rows_per_page",
"page_size_pt",
"guide_positions_pt",
"trace_style",
"midline",
"downloads"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Community
Evidence