Skip to main content

MCP server for Quillmark document rendering

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.5.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.5-py3-none-any.whl (2.7 MB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: quillmark_mcp-0.0.5.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.5.tar.gz
Algorithm Hash digest
SHA256 933bec76a64bcf7b02255e5c89c0dc57bea0f51b802a7362111d9d5a4836b9c3
MD5 399c7baed4a114f3ac1d3c65aa5df284
BLAKE2b-256 75c2781f191fbe1706c39264cb586b22455dc0b2d9f572c00b7fe0d58cad0f92

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for quillmark_mcp-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 68304468a72ecce14307693d6cf94c5e23f3066b5a795bdb6cb4cb2f66268b21
MD5 5ece2903dc5ea21d4f98e8b6db24e720
BLAKE2b-256 8bb695652689cc2ff660ed7ecca5f4ed582c31b8422a88c4e1aa31a7679e859e

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