Skip to main content

MCP server for Quillmark document rendering. Run with uvx (recommended).

Project description

Quillmark MCP Server

Python 3.10+ MCP

A Model Context Protocol (MCP) server that exposes Quillmark's document rendering capabilities to AI models and MCP clients.

Overview

The Quillmark MCP server enables AI assistants to:

  • Discover available document templates (Quills)
  • Understand template requirements and frontmatter schemas
  • Validate document frontmatter before rendering
  • Render markdown documents to PDF or SVG formats
  • Receive rich error diagnostics to help users fix issues

Installation

Run with uvx (recommended):

uvx quillmark-mcp
# Using uv (recommended)
uv pip install quillmark-mcp

# Using pip
pip install quillmark-mcp

Quick Start

Running the Server

# Run using Python module
python -m quillmark_mcp

# Or using uv
uvx quillmark-mcp

MCP Client Configuration

Add to your MCP client configuration (e.g., Claude Desktop):

{
  "mcpServers": {
    "quillmark": {
      "command": "python",
      "args": ["-m", "quillmark_mcp"]
    }
  }
}

Available Tools

1. list_quills

List all registered Quill templates with metadata.

{}

Returns:

{
  "quills": [
    {
      "name": "taro",
      "backend": "typst",
      "description": "",
      "tags": []
    },
    {
      "name": "usaf_memo",
      "backend": "typst",
      "description": "",
      "tags": []
    }
  ]
}

2. get_quill_info

Get detailed information about a specific Quill template.

{
  "quill_name": "taro"
}

Returns frontmatter schema, required fields, and the example markdown content.

3. get_markdown_template

Get markdown template content by template name from the templates collection.

{
  "template_name": "U.S. Air Force Memo"
}

Returns the markdown content of the specified template from list_markdown_templates.

4. list_markdown_templates

List available markdown templates from the templates.json manifest.

{}

Returns:

{
  "templates": [
    {
      "name": "U.S. Air Force Memo",
      "description": "AFH 33-337 compliant official memorandum for the U.S. Air Force."
    },
    {
      "name": "U.S. Space Force Memo",
      "description": "Official memorandum template for the U.S. Space Force."
    }
  ]
}

5. render_document

Render a markdown document to PDF or SVG.

{
  "markdown": "---\nQUILL: taro\nauthor: John\nice_cream: Taro\ntitle: My Favorite\n...",
  "output_format": "PDF"
}

The quill_name parameter is optional if the markdown contains a QUILL: directive in the frontmatter.

6. validate_frontmatter

Validate frontmatter without rendering.

{
  "markdown": "---\nQUILL: taro\nauthor: John\n..."
}

Returns validation status and any missing required fields.

Usage Examples

AI-Assisted Document Writing

User: "Help me create a document using the taro template"

AI Workflow:

  1. Call list_quills() to discover available quill templates
  2. Call get_quill_info("taro") to learn requirements and get the example markdown
  3. Generate markdown based on user's input
  4. Call validate_frontmatter() to check correctness
  5. Call render_document() to produce the final PDF

Note: For general-purpose templates like "U.S. Air Force Memo", use:

  1. Call list_markdown_templates() to discover available templates
  2. Call get_markdown_template("U.S. Air Force Memo") to get the template content
  3. Modify the template for the specific use case
  4. Call render_document() to produce the final PDF

Error Handling

The server provides rich diagnostics when errors occur:

{
  "success": false,
  "error_type": "ValidationError",
  "error_message": "Required fields missing",
  "diagnostics": [
    {
      "severity": "ERROR",
      "message": "Required field 'recipient' is missing",
      "code": "missing_field",
      "hint": "Add 'recipient: <value>' to your frontmatter"
    }
  ]
}

Extended YAML Metadata Standard

Quillmark supports structured content with the Extended YAML Metadata Standard:

  • QUILL key: Specifies which template to use
  • SCOPE key: Creates collections of content blocks

Example:

---
title: Product Catalog
---

Main description.

---
SCOPE: products
name: Widget
price: 19.99
---

Widget description.

---
SCOPE: products
name: Gadget
price: 29.99
---

Gadget description.

Architecture

┌──────────────────────────────┐
│       AI Model / Client      │
│    (via MCP protocol)        │
└──────────────┬───────────────┘
               │ MCP JSON-RPC
               ▼
┌──────────────────────────────┐
│     Quillmark MCP Server     │
│  - list_quills               │
│  - get_quill_info            │
│  - get_quill_template        │
│  - render_document           │
│  - validate_frontmatter      │
└──────────────┬───────────────┘
               │
               ▼
┌──────────────────────────────┐
│    Quillmark Engine          │
│  (Python package)            │
└──────────────────────────────┘

Design Principles

  1. MCP-Native: Follows MCP protocol specifications
  2. Rich Diagnostics: Provides helpful error messages with hints
  3. Stateless: Each tool call is independent
  4. JSON-Based: All data exchanged via JSON for compatibility

Development

Setup

# Clone the repository
git clone https://github.com/nibsbin/quillmark-mcp.git
cd quillmark-mcp

# Install dependencies
uv pip install -e ".[dev]"

Testing

# Run tests
pytest

# Run type checking
mypy src/quillmark_mcp

# Run linting
ruff check src/quillmark_mcp

Security Considerations

  • Input Validation: Markdown size limits, YAML depth limits
  • Output Safety: Binary outputs are base64-encoded
  • Read-Only: All MCP tools are read-only operations
  • Sandboxing: Consider running rendering in isolated environment

License

See LICENSE file for details.

References

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

Status

Version: 0.1.0
Status: Implementation Phase
Python: 3.10+
Protocol: Model Context Protocol (MCP)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quillmark_mcp-0.0.6.tar.gz (2.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

quillmark_mcp-0.0.6-py3-none-any.whl (2.7 MB view details)

Uploaded Python 3

File details

Details for the file quillmark_mcp-0.0.6.tar.gz.

File metadata

  • Download URL: quillmark_mcp-0.0.6.tar.gz
  • Upload date:
  • Size: 2.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.1

File hashes

Hashes for quillmark_mcp-0.0.6.tar.gz
Algorithm Hash digest
SHA256 0545706526db5da2372123454ca4225d3ae4c7526e663d9c98eabf2d5f543176
MD5 52e57298b8460ac7df30cee2a6c5cf50
BLAKE2b-256 f9d805e588ed5eb9c52204c1b6a9a48d4a8d85a980405daabe085beb22728541

See more details on using hashes here.

File details

Details for the file quillmark_mcp-0.0.6-py3-none-any.whl.

File metadata

File hashes

Hashes for quillmark_mcp-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 e3c605d22cf93b31d32b1846dacbf66824d20f99ef878977fda72a654dcc9762
MD5 d7a81ad4dc421cba021a086bafe3e133
BLAKE2b-256 041d8077b239e0fcf37cf4cd3c91e624e546396f56e5f73a9cba075f8e72d256

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page