MCPOSprint
Provides direct USB printing support for Epson ESC/POS compatible thermal printers to output generated task cards, images, and diagnostic reports.
Allows generating and printing formatted task cards from markdown files, supporting headers for card titles and specific syntax for priority tasks.
Enables fetching tasks from Notion databases to generate and print task cards, supporting task properties like priority, status, and due dates, along with QR code generation.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCPOSprintPrint my Notion tasks for today with QR codes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 libusbUbuntu/Debian:
sudo apt install libusb-1.0-0-dev
Related MCP server: Klipper MCP Server
Getting Started
Install UV (if not already installed):
curl -LsSf https://astral.sh/uv/install.sh | shConfigure Your MCP Client with MCPOSprint (see configuration section below)
π― MCP Client Setup
Minimal Configuration (Recommended)
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-17CARD_WIDTH/HEIGHT:
580pixels (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 |
|
| Where generated card images are saved |
|
| Your thermal printer name |
|
| Card width in pixels |
|
| Card height in pixels |
| (none) | Your Notion integration API key |
| (none) | Your Notion tasks database ID |
|
| 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
Create a Notion integration at https://www.notion.so/my-integrations
Copy the API key to your
.envfileShare your tasks database with the integration
Copy the database ID to your
.envfile
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_cardstoolFetch Notion tasks: Use
process_notion_taskstool (with progress tracking)Print existing images: Use
print_onlytoolTest printer: Use
test_printer_connectiontoolRun diagnostics: Use
run_diagnosticstoolGet printer specs: Access
image://thermal-card-sizeresource
Markdown Format
## Morning Routine
- *Get dressed
- Brush teeth
- Make coffee
- Check calendar
## Work Tasks
- *Review emails
- Update project status
- *Prepare for 2pm meeting
- Submit timesheetUse
## Titlefor card headersUse
- Taskfor regular tasksUse
- *Taskfor 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
process_static_cards- Generate cards from markdown filesParameters:
file(string),no_print(boolean)Returns: List of generated file paths
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
print_only- Print existing image files from directoryParameters:
directory(string)Returns: Success status message
test_printer_connection- Test thermal printer connectivityReturns: Connection status message
run_diagnostics- Run comprehensive system diagnosticsReturns: Detailed diagnostic information
create_sample_files- Generate sample markdown file for testingReturns: Success status message
MCP Resources
image://thermal-card-size- Thermal printer card specificationsWidth: 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_diagnosticsArchitecture
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
Printer not found
Use the
test_printer_connectionMCP toolUse the
run_diagnosticsMCP tool for detailed informationCheck USB connections and printer power
Notion connection fails
Use the
run_diagnosticsMCP tool to verify API configurationCheck that your API key is valid in
.envVerify database permissions in Notion
Ensure the database ID is correct
MCP Server connection issues
Verify the server is running:
uv run mcposprintCheck 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 localhostLicense
MIT License - see LICENSE file for details.
Contributing
Fork the repository
Create a feature branch
Make your changes
Add tests if applicable
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 toolscreate_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
print_onlyA
Send existing image files to the thermal printer without regenerating them.
Scans a directory for PNG/JPG image files and sends them directly to your thermal printer. Useful for reprinting previously generated cards or printing custom images you've created.
Args: directory: Path to directory containing image files
Returns: Success message with count of printed images
Supported formats: PNG, JPG, JPEG Images are printed in alphabetical order with automatic paper cutting.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 behavioral traits: it scans directories, supports specific formats (PNG, JPG, JPEG), prints in alphabetical order, and includes automatic paper cutting. However, it doesn't mention potential error conditions, permission requirements, or rate limits that would be helpful for a printing operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and appropriately sized with zero wasted sentences. It front-loads the core purpose, provides usage context, documents the parameter, return value, and behavioral details in clear sections. Every sentence earns its place by adding valuable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (directory scanning, file format handling, printing operations) and the presence of an output schema (which handles return values), the description is quite complete. It covers purpose, usage, parameters, formats, and behavioral details. The main gap is lack of error handling or permission information, but overall it provides good context for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage for the single parameter, the description compensates well by explaining what 'directory' means ('Path to directory containing image files') and providing context about what the tool does with that directory (scans it for image files). The description adds meaningful semantics beyond what the bare schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('send existing image files to the thermal printer without regenerating them') and distinguishes it from siblings by emphasizing it works with pre-existing files rather than generating new content. It explicitly mentions what resource it operates on (PNG/JPG image files) and the action (printing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 ('useful for reprinting previously generated cards or printing custom images you've created'), but doesn't explicitly state when not to use it or name specific alternatives among the sibling tools. It implies usage for existing images rather than generating new ones, which helps differentiate from tools like task_cards_from_notion.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| no_print | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| no_print | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
7 tool updates
v1.0.0- First observed
create_sample_files - First observed
info - First observed
print_only - First observed
run_diagnostics - First observed
task_cards_from_notion - First observed
test_printer_connection - First observed
todo_list_cards_from_markdown
TDQS
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.
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.
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.
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
Nifty's MCP server β exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for generating rough-draft project plans from natural-language prompts.
Related MCP Servers
- AlicenseAqualityAmaintenanceMarkdown-first MCP server for Notion that provides 7 composite action-based tools consolidating 28+ REST API endpoints, enabling AI agents to efficiently manage pages, databases, blocks, and content with automatic pagination and bulk operations.1189136Apache 2.0
- FlicenseNot gradedqualityBmaintenanceAn 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-
- FlicenseNot gradedqualityDmaintenanceA cross-platform MCP server that enables AI assistants to manage printers, query printer status, and print files on Windows, macOS, and Linux.14-
- AlicenseAqualityBmaintenanceMCP server for printing POS receipts via CUPS printers, supporting a two-step confirmation flow with preview.124MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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