F

flatwrite.md

A minimalist markdown editor with live preview, paged document layout, and one-click export to HTML, PDF, or shareable URL.

2action
https://flatwrite.md/

live · Productivity & Work · JSON · API for agents

Tools 2 tools

render_markdownaction

Render raw markdown into FlatWrite-styled HTML <head> and <body> fragments, with optional typography and page-layout controls. Returns { head, body } — head is CSS to inject, body is the document fragment.

View tool JSON
{
  "name": "render_markdown",
  "kind": "action",
  "impl": "imperative",
  "description": "Render raw markdown into FlatWrite-styled HTML <head> and <body> fragments, with optional typography and page-layout controls. Returns { head, body } — head is CSS to inject, body is the document fragment.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "markdown": {
        "type": "string",
        "description": "Raw markdown content to render"
      },
      "framework": {
        "type": "string",
        "enum": [
          "spectre",
          "poshui",
          "pico",
          "milligram",
          "chota"
        ],
        "description": "Optional UI framework applied when surfaceMode=\"app\"."
      },
      "fontFamily": {
        "type": "string",
        "enum": [
          "Inter",
          "JetBrains Mono",
          "Lato",
          "Lora",
          "Merriweather",
          "Playfair Display",
          "Comfortaa",
          "Unbounded"
        ],
        "description": "Optional font family — must be a bundled family. Defaults to Inter."
      },
      "fontSize": {
        "oneOf": [
          {
            "type": "string",
            "description": "Scale token (e.g. \"-1\", \"0\", \"1\")"
          },
          {
            "type": "number",
            "description": "Absolute pixel value (8..72)"
          }
        ],
        "description": "Optional font size",
        "minimum": 8,
        "maximum": 72
      },
      "fontWeight": {
        "oneOf": [
          {
            "type": "string",
            "description": "Scale token (e.g. \"-1\", \"0\")"
          },
          {
            "type": "number",
            "description": "Absolute weight (100..900, multiples of 100)"
          }
        ],
        "description": "Optional font weight",
        "minimum": 100,
        "maximum": 900
      },
      "lineHeight": {
        "oneOf": [
          {
            "type": "string",
            "description": "Scale token (e.g. \"-1\", \"0\", \"1\")"
          },
          {
            "type": "number",
            "description": "Absolute multiplier (0.8..4.0)"
          }
        ],
        "description": "Optional line height",
        "minimum": 0.8,
        "maximum": 4
      },
      "uiZoom": {
        "type": "number",
        "description": "Optional UI zoom level (1.0 = default; >1 zooms in, <1 zooms out)",
        "minimum": 0.25,
        "maximum": 4
      },
      "pageSize": {
        "type": "string",
        "enum": [
          "A0",
          "A1",
          "A2",
          "A3",
          "A4",
          "A5",
          "Letter",
          "Legal"
        ],
        "description": "Optional page size for paged output."
      },
      "orientation": {
        "type": "string",
        "enum": [
          "portrait",
          "landscape"
        ],
        "description": "Optional page orientation"
      },
      "marginsLR": {
        "type": "string",
        "enum": [
          "narrow",
          "normal",
          "wide"
        ],
        "description": "Optional left/right page margin preset."
      },
      "marginsTB": {
        "type": "string",
        "enum": [
          "narrow",
          "normal",
          "wide"
        ],
        "description": "Optional top/bottom page margin preset."
      },
      "footer": {
        "type": "boolean",
        "description": "Optional: include a page-number footer in paged output"
      },
      "width": {
        "type": "number",
        "description": "Optional content width in pixels (400..1400)",
        "minimum": 400,
        "maximum": 1400
      },
      "docEngine": {
        "type": "string",
        "enum": [
          "none",
          "pagedjs",
          "vivliostyle"
        ],
        "description": "Optional document engine — \"none\" emits plain CSS; \"pagedjs\"/\"vivliostyle\" wrap the output in @page rules."
      },
      "surfaceMode": {
        "type": "string",
        "enum": [
          "doc",
          "app"
        ],
        "description": "Optional surface mode — \"doc\" or \"app\". \"app\" unlocks the framework picker."
      },
      "theme": {
        "type": "string",
        "description": "Optional theme identifier (e.g. \"light\" or \"dark\") rendered as body[data-theme=\"...\"]."
      }
    },
    "required": [
      "markdown"
    ]
  }
}
render_markdown_from_urlaction

Fetch markdown from an allowlisted URL (raw.githubusercontent.com, raw.gitlab.com, bitbucket.org) and render it into FlatWrite-styled HTML <head> and <body> fragments, with the same optional typography and page-layout controls as render_markdown. Returns { head, body }.

View tool JSON
{
  "name": "render_markdown_from_url",
  "kind": "action",
  "impl": "imperative",
  "description": "Fetch markdown from an allowlisted URL (raw.githubusercontent.com, raw.gitlab.com, bitbucket.org) and render it into FlatWrite-styled HTML <head> and <body> fragments, with the same optional typography and page-layout controls as render_markdown. Returns { head, body }.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "markdownUrl": {
        "type": "string",
        "format": "uri",
        "description": "URL pointing to raw markdown content. Must be on an allowlisted host (raw.githubusercontent.com, raw.gitlab.com, bitbucket.org). The deprecated alias `url` is still accepted."
      },
      "framework": {
        "type": "string",
        "enum": [
          "spectre",
          "poshui",
          "pico",
          "milligram",
          "chota"
        ],
        "description": "Optional UI framework applied when surfaceMode=\"app\"."
      },
      "fontFamily": {
        "type": "string",
        "enum": [
          "Inter",
          "JetBrains Mono",
          "Lato",
          "Lora",
          "Merriweather",
          "Playfair Display",
          "Comfortaa",
          "Unbounded"
        ],
        "description": "Optional font family — must be a bundled family. Defaults to Inter."
      },
      "fontSize": {
        "oneOf": [
          {
            "type": "string",
            "description": "Scale token (e.g. \"-1\", \"0\", \"1\")"
          },
          {
            "type": "number",
            "description": "Absolute pixel value (8..72)"
          }
        ],
        "description": "Optional font size",
        "minimum": 8,
        "maximum": 72
      },
      "fontWeight": {
        "oneOf": [
          {
            "type": "string",
            "description": "Scale token (e.g. \"-1\", \"0\")"
          },
          {
            "type": "number",
            "description": "Absolute weight (100..900, multiples of 100)"
          }
        ],
        "description": "Optional font weight",
        "minimum": 100,
        "maximum": 900
      },
      "lineHeight": {
        "oneOf": [
          {
            "type": "string",
            "description": "Scale token (e.g. \"-1\", \"0\", \"1\")"
          },
          {
            "type": "number",
            "description": "Absolute multiplier (0.8..4.0)"
          }
        ],
        "description": "Optional line height",
        "minimum": 0.8,
        "maximum": 4
      },
      "uiZoom": {
        "type": "number",
        "description": "Optional UI zoom level (1.0 = default; >1 zooms in, <1 zooms out)",
        "minimum": 0.25,
        "maximum": 4
      },
      "pageSize": {
        "type": "string",
        "enum": [
          "A0",
          "A1",
          "A2",
          "A3",
          "A4",
          "A5",
          "Letter",
          "Legal"
        ],
        "description": "Optional page size for paged output."
      },
      "orientation": {
        "type": "string",
        "enum": [
          "portrait",
          "landscape"
        ],
        "description": "Optional page orientation"
      },
      "marginsLR": {
        "type": "string",
        "enum": [
          "narrow",
          "normal",
          "wide"
        ],
        "description": "Optional left/right page margin preset."
      },
      "marginsTB": {
        "type": "string",
        "enum": [
          "narrow",
          "normal",
          "wide"
        ],
        "description": "Optional top/bottom page margin preset."
      },
      "footer": {
        "type": "boolean",
        "description": "Optional: include a page-number footer in paged output"
      },
      "width": {
        "type": "number",
        "description": "Optional content width in pixels (400..1400)",
        "minimum": 400,
        "maximum": 1400
      },
      "docEngine": {
        "type": "string",
        "enum": [
          "none",
          "pagedjs",
          "vivliostyle"
        ],
        "description": "Optional document engine — \"none\" emits plain CSS; \"pagedjs\"/\"vivliostyle\" wrap the output in @page rules."
      },
      "surfaceMode": {
        "type": "string",
        "enum": [
          "doc",
          "app"
        ],
        "description": "Optional surface mode — \"doc\" or \"app\". \"app\" unlocks the framework picker."
      },
      "theme": {
        "type": "string",
        "description": "Optional theme identifier (e.g. \"light\" or \"dark\") rendered as body[data-theme=\"...\"]."
      }
    },
    "required": [
      "markdownUrl"
    ]
  }
}