Skip to main content
Glama
bhandzo
by bhandzo

MCPOSprint - MCP Server for ESC/POS Printing over USB

Hi! This escalated quickly and became a whole thing. Full disclosure, AI helped me write a lot of this code, but I've tested it pretty throughly on a mac to confirm it works.

This is a uv based MCP that lets you connect an MCP client to a usb connected ESC/POS printer. It has baked in tools for printing your tasks from notion with QR codes, and a template to print out markdown tasklists, as well as a generic print image tool you can use to print arbitrary images. I've only tested it with an EPSON_TM_T20III-17, so YMMV with other ESC/POS printers.

πŸš€ Installation

MCPOSprint runs directly via uvx.

Prerequisites - Install these first

  • Python 3.10+

  • UV package manager: Install from astral.sh/uv

  • Thermal printer : ESC/POS compatible USB printer

  • Notion API Token (optional): If you want to print tasks from Notion. You can see how to generate a token in Notion's docs

  • libusb for USB printer access

    • macOS: brew install libusb

    • Ubuntu/Debian: sudo apt install libusb-1.0-0-dev

Related MCP server: Klipper MCP Server

Getting Started

  1. Install UV (if not already installed):

    curl -LsSf https://astral.sh/uv/install.sh | sh
  2. Configure Your MCP Client with MCPOSprint (see configuration section below)

🎯 MCP Client Setup

You can add this to the mcp config file of whatever client you use

For most users, just configure your Notion credentials if you want them:

{
  "mcpServers": {
    "mcposprint": {
      "command": "uvx",
      "args": ["mcposprint"],
      "env": {
        "PATH": "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin",
        "NOTION_API_KEY": "your_notion_api_key_here",
        "TASKS_DATABASE_ID": "your_database_id_here"
      }
    }
  }
}

Default settings used:

  • OUTPUT_DIR: ./images (saved relative to Claude Desktop's working directory)

  • PRINTER_NAME: EPSON_TM_T20III-17

  • CARD_WIDTH/HEIGHT: 580 pixels (optimized for 58mm thermal printers)

Full Configuration (Advanced)

If you need to override defaults:

{
  "mcpServers": {
    "mcposprint": {
      "command": "uvx", 
      "args": ["mcposprint"],
      "env": {
        "PATH": "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin",
        "OUTPUT_DIR": "./my-custom-images",
        "PRINTER_NAME": "YOUR_PRINTER_NAME",
        "CARD_WIDTH": "580",
        "CARD_HEIGHT": "580", 
        "NOTION_API_KEY": "your_notion_api_key_here",
        "TASKS_DATABASE_ID": "your_database_id_here",
        "DEBUG": "false"
      }
    }
  }
}

Configuration Notes:

  • PATH: Adjust for your system (macOS Homebrew path shown)

  • OUTPUT_DIR: Where images are saved (relative to Claude Desktop's working directory)

  • PRINTER_NAME: Use your actual thermal printer name

  • Notion credentials: Optional - only needed for Notion integration

Available Environment Variables

Variable

Default

Description

OUTPUT_DIR

./images

Where generated card images are saved

PRINTER_NAME

EPSON_TM_T20III-17

Your thermal printer name

CARD_WIDTH

580

Card width in pixels

CARD_HEIGHT

580

Card height in pixels

NOTION_API_KEY

(none)

Your Notion integration API key

TASKS_DATABASE_ID

(none)

Your Notion tasks database ID

DEBUG

false

Enable debug logging

Output Directory

Generated card images are saved to the OUTPUT_DIR (default: ./images) relative to Claude Desktop's working directory. The directory is created automatically if it doesn't exist.

Notion Setup

  1. Create a Notion integration at https://www.notion.so/my-integrations

  2. Copy the API key to your .env file

  3. Share your tasks database with the integration

  4. Copy the database ID to your .env file

Database should have these properties:

  • Name or Task (title)

  • Due Date (date)

  • Priority (select: High, Medium, Low)

  • Status (status: Not Started, In Progress, Done)

  • Description (rich text, optional)

Usage with MCP Clients

Once connected, you can use these tools in your MCP client:

  • Generate cards from markdown: Use process_static_cards tool

  • Fetch Notion tasks: Use process_notion_tasks tool (with progress tracking)

  • Print existing images: Use print_only tool

  • Test printer: Use test_printer_connection tool

  • Run diagnostics: Use run_diagnostics tool

  • Get printer specs: Access image://thermal-card-size resource

Markdown Format

## Morning Routine
- *Get dressed
- Brush teeth
- Make coffee
- Check calendar

## Work Tasks
- *Review emails
- Update project status
- *Prepare for 2pm meeting
- Submit timesheet
  • Use ## Title for card headers

  • Use - Task for regular tasks

  • Use - *Task for priority tasks (marked with β˜…)

Development Installation (Optional)

Only needed for contributing or customization:

# Clone the repository  
git clone https://github.com/your-username/mcposprint.git
cd mcposprint

# Install with uv
uv sync

# Start the MCP server
uv run mcposprint

πŸ”§ MCP Tools

MCPOSprint provides 6 MCP tools for task card generation and printing:

Available Tools

  1. process_static_cards - Generate cards from markdown files

    • Parameters: file (string), no_print (boolean)

    • Returns: List of generated file paths

  2. process_notion_tasks - Fetch and process Notion tasks (with progress tracking)

    • Parameters: no_print (boolean)

    • Returns: List of generated file paths

    • Features: Real-time progress updates via Context

  3. print_only - Print existing image files from directory

    • Parameters: directory (string)

    • Returns: Success status message

  4. test_printer_connection - Test thermal printer connectivity

    • Returns: Connection status message

  5. run_diagnostics - Run comprehensive system diagnostics

    • Returns: Detailed diagnostic information

  6. create_sample_files - Generate sample markdown file for testing

    • Returns: Success status message

MCP Resources

  • image://thermal-card-size - Thermal printer card specifications

    • Width: 384 pixels (48mm at 203 DPI)

    • Height: Variable (200-400 pixels)

    • Format: PNG, monochrome

πŸ–¨οΈ Printer Setup

Supported Printers

AI Generated List of ESC/POS Compatible Thermal Printers

  • EPSON: TM-T20III, TM-T88V, TM-T82, TM-T70

  • Star Micronics: TSP143, TSP654, TSP100

  • Citizen: CT-S310II, CT-S4000

  • Most USB thermal printers supporting ESC/POS protocol

Printer Setup via MCP Tools

Use the MCP tools to test and configure your printer:

# Test printer connection
Use: test_printer_connection

# Run full diagnostics
Use: run_diagnostics

Architecture

The MCP server is modularized into clean components:

mcposprint/
β”œβ”€β”€ core/
β”‚   β”œβ”€β”€ config.py      # Configuration management
β”‚   └── printer.py     # Main orchestration class
β”œβ”€β”€ parsers/
β”‚   β”œβ”€β”€ markdown.py    # Markdown file parser
β”‚   └── notion.py      # Notion API integration
β”œβ”€β”€ generators/
β”‚   └── card.py        # PIL-based card image generation
└── printers/
    └── escpos_printer.py  # ESC/POS direct USB interface

πŸ” Troubleshooting

Common Issues

  1. Printer not found

    • Use the test_printer_connection MCP tool

    • Use the run_diagnostics MCP tool for detailed information

    • Check USB connections and printer power

  2. Notion connection fails

    • Use the run_diagnostics MCP tool to verify API configuration

    • Check that your API key is valid in .env

    • Verify database permissions in Notion

    • Ensure the database ID is correct

  3. MCP Server connection issues

    • Verify the server is running: uv run mcposprint

    • Check your MCP client configuration

    • Ensure the working directory path is correct

Real-time Progress Tracking

The process_notion_tasks tool provides real-time progress updates:

  • βœ… API Success: Found X tasks

  • Processing task 1/3: Task Name

  • βœ… Generated: ./output/file.png

  • βœ… Print Success: Task Name

This prevents client timeouts during long operations.

Development

Local Development

# Install in development mode with dev dependencies
uv sync --all-extras

# Run tests (when available)
pytest

# Format code
black mcposprint/
isort mcposprint/

# Type checking
mypy mcposprint/

Running the MCP Server

# Start the server for development
uv run mcposprint

# Test with MCP inspector (if available)
# Connect your MCP client to localhost

License

MIT License - see LICENSE file for details.

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests if applicable

  5. Submit a pull request

Changelog

v1.0.0 - MCPOSprint Initial Release

  • βœ… Full MCP server implementation with 6 tools

  • βœ… Real-time progress tracking with Context support

  • βœ… Async Notion task processing with timeout handling

  • βœ… Thermal printer card generation and printing

  • βœ… Static markdown card processing

  • βœ… Modular architecture with clean separation

  • βœ… Environment-based configuration

  • βœ… ESC/POS direct USB printing support

  • βœ… QR code generation for Notion tasks

  • βœ… Comprehensive error handling and diagnostics

Available Tools

7 tools
create_sample_filesA

Generate a sample markdown file to test MCPOSprint functionality.

Creates 'sample_cards.md' in the current directory with example task lists formatted for MCPOSprint. Perfect for testing your setup or learning the markdown format before creating your own task lists.

Returns: Success message confirming file creation

Generated file includes: - Multiple task sections (Morning, Work, Evening) - Examples of priority tasks (marked with *) - Proper formatting with ## headers and - bullets

Use the generated file with process_static_cards tool to test printing. Configuration is handled via environment variables in your MCP client.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by disclosing key behaviors: it creates a file in the current directory, includes specific content details (multiple task sections, priority examples, formatting), and mentions configuration via environment variables. It doesn't cover potential errors or file overwriting behavior, keeping it from a perfect score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections (purpose, file details, usage guidance). Every sentence adds value: explains what it does, what the file contains, how to use it, and configuration method. No redundant or wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, has output schema), the description is complete. It explains the purpose, output format, file contents, usage context, and configuration method. With an output schema present, it doesn't need to detail return values beyond mentioning 'Success message confirming file creation'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0 parameters and 100% schema coverage, the baseline would be 4. The description appropriately explains that no parameters are needed ('Configuration is handled via environment variables'), which adds useful context beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Generate a sample markdown file'), resource ('sample_cards.md'), and purpose ('to test MCPOSprint functionality'). It distinguishes itself from siblings like 'task_cards_from_notion' or 'todo_list_cards_from_markdown' by focusing on creating a test file rather than processing external sources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool ('Perfect for testing your setup or learning the markdown format') and provides a clear alternative ('Use the generated file with process_static_cards tool to test printing'). It also distinguishes from siblings by indicating this is for sample generation rather than actual task processing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

infoA

Get MCPOSprint server information and system status.

Returns version, dependency status, configuration issues, and operational health. Essential for troubleshooting and verifying proper setup.

Returns: System information including version, dependencies, and configuration status

Checks include: - Server version and build information - Required system dependencies (libusb, PIL, etc.) - Environment variable configuration - Log file accessibility - Basic printer connectivity

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes what information is returned (version, dependencies, configuration, health) and specific checks performed, but does not mention potential side effects, error conditions, or performance characteristics like execution time or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, returns, checks) and uses bullet points for readability. While slightly verbose, every sentence adds value by explaining what the tool does and what information it provides. It could be more concise by combining some statements.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (system diagnostics with multiple checks) and no output schema, the description provides good coverage of what information is returned. However, it lacks details about the return format (e.g., JSON structure), error handling, or specific health indicators that would make it more complete for agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters with 100% schema description coverage, so the baseline is 4. The description appropriately does not discuss parameters, focusing instead on the tool's purpose and return values, which is correct for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('Get', 'Returns', 'Checks') and resources ('MCPOSprint server information and system status'). It distinguishes itself from siblings like 'test_printer_connection' by covering broader system diagnostics beyond just printer connectivity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('Essential for troubleshooting and verifying proper setup'), but does not explicitly state when not to use it or name specific alternatives among sibling tools. It implies usage for system health checks without exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_diagnosticsA

Perform comprehensive system diagnostics for MCPOSprint setup.

Runs a complete health check of your MCPOSprint installation, including configuration validation, printer connectivity, Notion API access, and system dependencies. Essential for troubleshooting setup issues.

Returns: Detailed diagnostic report as JSON object

Diagnostic checks include: - Environment variable configuration - Printer detection and connection - Notion API authentication and database access - Python package dependencies - Output directory permissions - System library availability (libusb, PIL, etc.)

Use this when: - Setting up MCPOSprint for the first time - Troubleshooting printing or Notion connection issues - Verifying configuration after changes

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by specifying what the tool checks (6 specific diagnostic areas) and what it returns ('detailed diagnostic report as JSON object'). It doesn't mention performance characteristics, timeouts, or error handling, but provides substantial behavioral context for a diagnostic tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, returns, diagnostic checks, use cases) and each sentence adds value. It could be slightly more concise by combining some lines, but overall it's efficiently organized with no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter diagnostic tool with no annotations or output schema, the description provides excellent context: clear purpose, detailed scope of checks, return format, and specific usage guidelines. The only minor gap is not explicitly stating what happens if diagnostics fail or providing example output structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema description coverage, so the baseline would be 4. The description appropriately doesn't discuss parameters since none exist, focusing instead on the tool's comprehensive diagnostic nature and use cases.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('perform comprehensive system diagnostics', 'runs a complete health check') and identifies the target system ('MCPOSprint setup'). It distinguishes from siblings by focusing on comprehensive diagnostics rather than specific functions like printing or file creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides three specific use cases in a 'Use this when:' section: first-time setup, troubleshooting printing/Notion issues, and verifying configuration after changes. This gives clear guidance on when to invoke this tool versus alternatives like test_printer_connection or other siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

task_cards_from_notionA

Fetch today's tasks from Notion and generate thermal printer cards with QR codes.

Connects to your Notion database, retrieves tasks with status "Today" or "In Progress", generates individual task cards with QR codes linking back to Notion, and optionally prints them. Provides real-time progress updates to prevent client timeouts.

Requires NOTION_API_KEY and TASKS_DATABASE_ID environment variables.

Args: no_print: If True, only generate images without printing (default: False)

Returns: List of generated PNG file paths

Progress tracking includes: - API connection status - Task fetching progress - Individual card generation - Print success/failure for each card

ParametersJSON Schema
NameRequiredDescriptionDefault
no_printNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by disclosing: real-time progress updates to prevent timeouts, required environment variables, and detailed progress tracking stages. It doesn't mention rate limits, authentication details beyond API key, or error handling, leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized but not optimally structured. The core purpose is front-loaded, but the progress tracking details could be more concise. Some sentences like 'Provides real-time progress updates to prevent client timeouts' could be integrated more efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multi-step process with external API), no annotations, and an output schema (returns list of PNG paths), the description is mostly complete. It covers purpose, prerequisites, parameters, and behavior, though could benefit from more detail on error cases or output format specifics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by explaining the single parameter 'no_print' with its purpose (generate images without printing) and default value. However, it doesn't provide format details or constraints beyond what's implied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action: 'Fetch today's tasks from Notion and generate thermal printer cards with QR codes.' It distinguishes from siblings like 'todo_list_cards_from_markdown' by specifying the Notion source and 'print_only' by including the full generation workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (fetching tasks from Notion with specific statuses and generating cards) and mentions environment variable prerequisites. However, it doesn't explicitly state when NOT to use it or compare it to alternatives like 'todo_list_cards_from_markdown' beyond the source difference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_printer_connectionA

Verify that your thermal printer is connected and responding.

Attempts to establish a USB connection to your ESC/POS thermal printer and sends a basic test command. Use this to troubleshoot connection issues before printing actual content.

Returns: Success/failure message with connection status

Checks: - USB device detection - ESC/POS command response - Printer initialization

If this fails, check: - Printer is powered on - USB cable is connected - PRINTER_NAME environment variable matches your device - libusb is installed on your system

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool does (attempts USB connection, sends test command), what it returns (success/failure message), and what it checks (USB detection, command response, initialization). However, it doesn't mention potential side effects like printer initialization noise or timeouts, leaving minor gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, usage, returns, checks, troubleshooting), but could be slightly more concise by combining some bullet points. Every sentence adds value, and it's front-loaded with the core purpose, though minor redundancy exists in the troubleshooting list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's diagnostic complexity, no annotations, and the presence of an output schema (which handles return values), the description is complete. It covers purpose, usage, behavior, checks, and troubleshooting steps, providing all necessary context for an agent to invoke it correctly without over-explaining.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema description coverage, so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, and instead focuses on the tool's functionality and troubleshooting context, which adds value beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('verify that your thermal printer is connected and responding'), identifies the resource ('ESC/POS thermal printer'), and distinguishes it from sibling tools like 'print_only' by focusing on connection testing rather than actual printing. The purpose is unambiguous and well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool ('Use this to troubleshoot connection issues before printing actual content'), provides a clear alternative scenario (if this fails, check specific items), and distinguishes it from other tools by its diagnostic nature. The guidance is comprehensive and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

todo_list_cards_from_markdownA

Generate and optionally print task cards from a markdown file.

Parses a markdown file with task lists (using ## headers and - bullets), generates PNG images for each section, and optionally sends them to your thermal printer. Priority tasks marked with * get a star symbol.

Args: file: Path to markdown file (relative to current directory) no_print: If True, only generate images without printing (default: False)

Returns: List of generated PNG file paths

Example markdown format: ## Morning Tasks - *Get dressed (priority) - Brush teeth - Make coffee

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
no_printNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: parsing markdown with specific format (## headers, - bullets), generating PNG images, optional printing with thermal printer, and priority handling. However, it lacks details on permissions, rate limits, or error handling, which are important for a tool with file I/O and printing capabilities.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded with the core functionality in the first sentence. Each subsequent sentence adds value: parsing details, output format, printing control, priority handling, and an example. While efficient, the example section is slightly lengthy but still informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 2 parameters with 0% schema coverage and no annotations, the description does well by explaining parameters, behavior, and output (list of PNG paths). The output schema exists, so return values don't need explanation. However, for a tool involving file parsing and printing, more context on error cases or dependencies would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It fully explains both parameters: 'file' as a path to a markdown file relative to current directory, and 'no_print' as a boolean controlling printing behavior with default value. The example markdown format further clarifies input expectations, adding significant value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('generate', 'print', 'parse') and resources ('task cards', 'markdown file', 'PNG images'). It distinguishes from siblings like 'print_only' (which only prints) and 'task_cards_from_notion' (which uses a different source) by specifying markdown parsing and optional printing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (parsing markdown files with task lists) and implies when not to use it (e.g., for Notion-based tasks or printing-only operations). However, it doesn't explicitly name alternatives like 'task_cards_from_notion' or state exclusions, keeping it at a 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 7 tool updatesv1.0.0
    • First observedcreate_sample_files
    • First observedinfo
    • First observedprint_only
    • First observedrun_diagnostics
    • First observedtask_cards_from_notion
    • First observedtest_printer_connection
    • First observedtodo_list_cards_from_markdown

TDQS

A4.3/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: create_sample_files generates test files, info provides system status, print_only handles existing images, run_diagnostics performs health checks, task_cards_from_notion fetches from Notion, test_printer_connection verifies printer connectivity, and todo_list_cards_from_markdown processes markdown files. The descriptions reinforce these unique functions, making tool selection straightforward for an agent.

Naming Consistency4/5

The tools follow a consistent snake_case pattern throughout, with clear verb_noun structures (e.g., create_sample_files, test_printer_connection). However, there is a minor deviation with 'info' being a single noun instead of a verb_noun pair, which slightly breaks the pattern but does not significantly impact readability or predictability.

Tool Count5/5

With 7 tools, the count is well-scoped for the MCPOSprint server's purpose of managing task cards and printer operations. Each tool serves a specific role in the workflowβ€”from setup and diagnostics to fetching tasks and printingβ€”without redundancy, making the set efficient and focused.

Completeness4/5

The tool set covers the core workflows comprehensively: creating test files, system diagnostics, printer testing, fetching tasks from Notion, processing markdown, and printing. A minor gap exists in lacking a dedicated tool for updating or deleting generated files or cards, but agents can work around this using system commands or the existing tools for reprinting or regeneration.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that enables AI assistants to control and monitor Klipper 3D printers via the Moonraker API. It supports comprehensive printer management, including G-code execution, toolchanger operations, and real-time status monitoring.
    19
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    A cross-platform MCP server that enables AI assistants to manage printers, query printer status, and print files on Windows, macOS, and Linux.
    14
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bhandzo/mcposprint'

If you have feedback or need assistance with the MCP directory API, please join our Discord server