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

# 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.2.tar.gz (2.8 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.2-py3-none-any.whl (2.7 MB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for quillmark_mcp-0.0.2.tar.gz
Algorithm Hash digest
SHA256 4c2e1c48a6dbe1d70d77aaca739b257a97f3230f9ea45622fa6ffbea7467e7f9
MD5 0e249d3b62097eccd6c0ea948a65e0df
BLAKE2b-256 5f2e1dbe9bd19f6d45128261ad235a9a223a7cc2abb0d2af14b6ef4044b6e1b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for quillmark_mcp-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 173f6346d12d966dced0e0c1adf235c9a72830dffd9782e32d8a268e83f3f124
MD5 5b4a938ea21cf79045c2b86dfa717848
BLAKE2b-256 54606d48af8fad76be05dc4660f84104f5d6940749111b4e7da6049b96751228

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