Skip to main content
Glama
skmprb

s3-md-pdf-converter-mcp

by skmprb

s3-md-pdf-converter-mcp

npm version License: MIT MCP SDK Node.js

A powerful Model Context Protocol (MCP) server that converts Markdown files and content to beautifully stylegd PDFs with S3 integration, Mermaid diagrams and ApexCharts support. Built with MCP SDK 1.16.x featuring all transport modes: stdio, HTTP, and SSE.

✨ Features

🚀 Transport Layer Support (MCP SDK 1.16.x)

  • stdio: Perfect for Claude Desktop integration

  • Streamable HTTP: Modern web applications with session management

  • SSE (Server-Sent Events): Legacy compatibility support

  • CORS enabled: Browser-friendly with proper headers

  • DNS rebinding protection: Enhanced security

📄 PDF Conversion

  • 🔄 Three conversion modes: File-to-PDF, content-to-PDF, and S3-to-PDF

  • ☁️ S3 Integration: Direct download from S3 buckets and upload PDFs back to S3

  • 📊 Charts & diagrams: Mermaid diagrams + ApexCharts support

  • 🎨 Modern styling: Professional typography with syntax highlighting

  • 📄 Multiple formats: A4, A3, A5, Letter, Legal, Tabloid

  • ⚙️ Configurable margins: Custom spacing in inches, mm, cm

  • 📝 Front matter support: YAML metadata for document properties

  • 🎯 Accessibility: Tagged PDFs with proper outline structure

  • 📦 Large content support: JSON structure for handling 10,000+ line documents

Related MCP server: MCP MD2PDF Server

🚀 Quick Start

# Default stdio mode (for Claude Desktop)
npx s3-md-pdf-converter-mcp

# HTTP server mode
npx s3-md-pdf-converter-mcp http 3000

# SSE server mode (legacy)
npx s3-md-pdf-converter-mcp sse 3001

Option 2: Global Installation

npm install -g s3-md-pdf-converter-mcp

# Run in different modes
s3-md-pdf-converter-mcp              # stdio (default)
s3-md-pdf-converter-mcp http 3000    # HTTP server
s3-md-pdf-converter-mcp sse 3001     # SSE server

🔧 Integration Options

Claude Desktop (stdio)

Add to your Claude Desktop configuration:

Windows: %APPDATA%\Claude\claude_desktop_config.json macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "s3-markdown-pdf": {
      "command": "npx",
      "args": ["s3-md-pdf-converter-mcp"]
    }
  }
}

HTTP Server

# Start HTTP server on port 3000
npx s3-md-pdf-converter-mcp http 3000

# Or with npm
npm run start:http

SSE Server (Legacy)

# Start SSE server on port 3001
npx s3-md-pdf-converter-mcp sse 3001

# Or with npm
npm run start:sse

Restart Claude Desktop after configuration.

📖 Usage Examples

Convert Markdown File to PDF

"Convert my README.md file to PDF and save it as documentation.pdf"

Convert Markdown Content to PDF

"Take this markdown content and create a PDF with A4 format:
# My Document
This is **bold** text with a [link](https://example.com)
"

S3 Integration

"Convert S3 markdown from bucket 'my-docs' key 'report.md' and save to 'output.pdf'"
"Convert S3 markdown from bucket 'docs' key 'readme.md' and upload PDF to S3 with key 'readme.pdf' and uploadToS3 true"

Large Content Support

"Convert this large markdown content to PDF: {content: 'Main content...', chunks: ['Section 1...', 'Section 2...']}"

Custom Formatting

"Convert the markdown file with custom margins of 1 inch on all sides and Letter format"

Charts & Diagrams

ApexCharts:

# Sales Data

```chart
{
  "chart": { "type": "line", "height": 350 },
  "series": [{ "name": "Sales", "data": [30, 40, 35, 50, 49, 60, 70] }],
  "xaxis": { "categories": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul"] }
}

**Mermaid:**
```markdown
```mermaid
graph TD
    A[Start] --> B{Decision}
    B -->|Yes| C[Action 1]
    B -->|No| D[Action 2]

## 🚀 Transport Modes (MCP SDK 1.16.x)

This server implements **all transport modes** from the latest MCP SDK, making it compatible with various integration scenarios:

### 💻 stdio (Default) - Claude Desktop Ready
**Perfect for**: Claude Desktop, command-line tools, direct integrations
```bash
npx md-mermaid-chart-pdf-mcp

Features:

  • Zero configuration required

  • Direct stdin/stdout communication

  • Ideal for desktop AI applications

  • Automatic process lifecycle management

🌐 Streamable HTTP - Modern Web Applications

Perfect for: Web applications, microservices, cloud deployments

npx md-mermaid-chart-pdf-mcp http 3000

Features:

  • Endpoints: POST/GET/DELETE /mcp

  • Session management with mcp-session-id header

  • CORS enabled for browser clients

  • DNS rebinding protection for security

  • Stateful sessions with automatic cleanup

  • Error handling with proper HTTP status codes

Integration Example:

// Browser/Node.js client
const response = await fetch('http://localhost:3000/mcp', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'mcp-session-id': sessionId // Optional for new sessions
  },
  body: JSON.stringify(mcpRequest)
});

📡 SSE (Server-Sent Events) - Legacy Support

Perfect for: Backwards compatibility, existing SSE-based systems

npx md-mermaid-chart-pdf-mcp sse 3001

Features:

  • SSE endpoint: GET /sse for real-time notifications

  • Message endpoint: POST /messages for client requests

  • Session-based communication

  • Legacy compatibility with older MCP implementations

Integration Example:

// SSE connection for notifications
const eventSource = new EventSource('http://localhost:3001/sse');

// POST messages for requests
fetch('http://localhost:3001/messages?sessionId=abc123', {
  method: 'POST',
  body: JSON.stringify(mcpRequest)
});

🛠️ Available Tools

convert_markdown_to_pdf

Converts a markdown file to PDF (supports local files, URLs, and S3 URLs).

Parameters:

  • markdownPath (string): Path to the markdown file (local path or URL)

  • outputPath (string): Where to save the PDF

  • format (optional): Page format (A4, A3, A5, Letter, Legal, Tabloid)

  • margin (optional): Custom margins object

convert_s3_markdown_to_pdf

Converts a markdown file from S3 bucket to PDF using bucket and key parameters.

Parameters:

  • bucket (string): S3 bucket name

  • key (string): S3 object key (path to the markdown file)

  • outputPath (string): Where to save the PDF (local path or S3 key for upload)

  • uploadToS3 (boolean, optional): Whether to upload the PDF back to the same S3 bucket

  • region (string, optional): AWS region (defaults to us-east-1)

  • format (optional): Page format (A4, A3, A5, Letter, Legal, Tabloid)

  • margin (optional): Custom margins object

markdown_content_to_pdf

Converts markdown content directly to PDF (supports large content with JSON structure).

Parameters:

  • markdownContent (string or object): Markdown content to convert (string or JSON object with content/chunks)

  • outputPath (string): Where to save the PDF

  • title (optional): Document title

  • format (optional): Page format

  • margin (optional): Custom margins object

📚 API Documentation

MCP Protocol Methods

tools/list

Returns available tools for PDF conversion.

Response:

{
  "tools": [
    {
      "name": "convert_markdown_to_pdf",
      "title": "Convert Markdown File to PDF",
      "description": "Convert a markdown file to PDF",
      "inputSchema": { /* Zod schema */ }
    },
    {
      "name": "markdown_content_to_pdf",
      "title": "Convert Markdown Content to PDF",
      "description": "Convert markdown content directly to PDF",
      "inputSchema": { /* Zod schema */ }
    }
  ]
}

tools/call

Execute PDF conversion tools.

Request:

{
  "name": "convert_markdown_to_pdf",
  "arguments": {
    "markdownPath": "./README.md",
    "outputPath": "./output.pdf",
    "format": "A4",
    "margin": {
      "top": "1in",
      "right": "0.5in",
      "bottom": "1in",
      "left": "0.5in"
    }
  }
}

Response:

{
  "content": [
    {
      "type": "text",
      "text": "Successfully converted markdown to PDF!\nInput: ./README.md\nOutput: /full/path/output.pdf"
    }
  ]
}

HTTP API Endpoints (HTTP Transport)

POST /mcp

Main MCP communication endpoint.

Headers:

  • Content-Type: application/json

  • mcp-session-id: <session-id> (optional for new sessions)

Request Body: Standard MCP JSON-RPC 2.0 message

GET /mcp

Server-to-client notifications via Server-Sent Events.

Headers:

  • mcp-session-id: <session-id> (required)

DELETE /mcp

Terminate MCP session.

Headers:

  • mcp-session-id: <session-id> (required)

SSE API Endpoints (SSE Transport)

GET /sse

Establish SSE connection for notifications.

Response: Server-Sent Events stream

POST /messages

Send MCP messages to server.

Query Parameters:

  • sessionId: <session-id> (required)

Request Body: Standard MCP JSON-RPC 2.0 message

🎨 Supported Markdown Features

  • Headers: H1-H6 with modern styling

  • Text formatting: Bold, italic, strikethrough

  • Lists: Ordered and unordered with custom bullets

  • Tables: Styled with alternating row colors

  • Code blocks: Syntax highlighting for 100+ languages

  • Blockquotes: Elegant left-border styling

  • Links: Styled with hover effects

  • Images: Embedded with proper scaling

  • Charts: ApexCharts (line, bar, pie, area, etc.) via chart blocks

  • Mermaid diagrams: Flowcharts, sequence, gantt, and more

🛠️ Installation & Deployment

Local Development

# Clone and install
git clone https://github.com/skmprb/s3-md-pdf-converter-mcp.git
cd s3-md-pdf-converter-mcp
npm install
npm run build

# Run in different modes
npm start              # stdio mode
npm run start:http     # HTTP server on port 3000
npm run start:sse      # SSE server on port 3001

Production Deployment

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "run", "start:http"]

PM2 Process Manager

# Install globally
npm install -g s3-md-pdf-converter-mcp pm2

# Start with PM2
pm2 start "s3-md-pdf-converter-mcp http 3000" --name s3-mcp-pdf-server
pm2 startup
pm2 save

Systemd Service

[Unit]
Description=MCP PDF Converter Server
After=network.target

[Service]
Type=simple
User=mcp
WorkingDirectory=/opt/mcp-pdf
ExecStart=/usr/bin/node /opt/mcp-pdf/build/index.js http 3000
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Cloud Deployment

Vercel/Netlify Functions

// api/mcp.js
import { createServer, setupServer } from '../src/index.js';

export default async function handler(req, res) {
  const server = createServer();
  setupServer(server);
  // Handle MCP requests
}

AWS Lambda

// lambda.js
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';

export const handler = async (event, context) => {
  // Lambda handler for MCP requests
};

📋 Requirements & Compatibility

System Requirements

  • Node.js 18+ (LTS recommended)

  • Chrome/Chromium (automatically installed with Puppeteer)

  • Memory: 512MB+ available RAM for PDF generation

  • Disk: 200MB+ for Chromium and dependencies

MCP Compatibility

  • MCP SDK: 1.16.x (latest with all transport modes)

  • Protocol Version: 2024-11-05 and later

  • Backwards Compatible: Supports legacy SSE transport

  • Client Support: Claude Desktop, custom MCP clients

Transport-Specific Requirements

Transport

Port

Dependencies

Use Case

stdio

N/A

None

Claude Desktop, CLI

HTTP

3000+

express, cors

Web apps, APIs

SSE

3001+

express

Legacy systems

🔧 Configuration Examples

Custom Margins

{
  "margin": {
    "top": "1in",
    "right": "0.5in",
    "bottom": "1in",
    "left": "0.5in"
  }
}

Front Matter Support

---
title: My Document
author: John Doe
date: 2024-01-01
---

# Document Content
Your markdown content here...

Environment Variables

# Server configuration
MCP_PORT=3000                    # HTTP server port
MCP_HOST=localhost               # HTTP server host
MCP_CORS_ORIGIN=*               # CORS allowed origins
MCP_SESSION_TIMEOUT=3600000     # Session timeout (ms)

# PDF generation
PDF_TIMEOUT=30000               # PDF generation timeout (ms)
PDF_QUALITY=100                 # PDF quality (1-100)
CHROME_ARGS="--no-sandbox"      # Additional Chrome arguments

⚡ Performance & Optimization

PDF Generation Performance

  • Average conversion time: 2-5 seconds for typical documents

  • Memory usage: 100-300MB per conversion

  • Concurrent requests: Supports multiple simultaneous conversions

  • Caching: Automatic font and resource caching

Optimization Tips

// Optimize for large documents
const options = {
  format: 'A4',
  margin: { top: '0.5in', right: '0.5in', bottom: '0.5in', left: '0.5in' },
  // Reduce quality for faster generation
  printBackground: false,
  // Disable animations for better performance
  preferCSSPageSize: true
};

Scaling Considerations

  • Horizontal scaling: Deploy multiple instances behind load balancer

  • Resource limits: Set appropriate memory limits (1GB+ recommended)

  • Queue management: Implement request queuing for high load

  • Monitoring: Track conversion times and error rates

🔍 Troubleshooting

Common Issues

"Chrome not found" Error

# Install Chrome/Chromium manually
sudo apt-get install chromium-browser  # Ubuntu/Debian
brew install chromium                  # macOS

# Or set custom Chrome path
export CHROME_PATH=/path/to/chrome

Memory Issues

# Increase Node.js memory limit
node --max-old-space-size=4096 build/index.js

# Or set environment variable
export NODE_OPTIONS="--max-old-space-size=4096"

Port Already in Use

# Find process using port
lsof -i :3000

# Kill process
kill -9 <PID>

# Or use different port
npx s3-md-pdf-converter-mcp http 3001

CORS Issues

// Custom CORS configuration
app.use(cors({
  origin: ['https://yourdomain.com'],
  credentials: true,
  exposedHeaders: ['Mcp-Session-Id']
}));

Debug Mode

# Enable debug logging
DEBUG=mcp:* npx s3-md-pdf-converter-mcp http 3000

# Verbose Puppeteer logging
DEBUG=puppeteer:* npx s3-md-pdf-converter-mcp

Health Check Endpoint

# Add to your HTTP server
app.get('/health', (req, res) => {
  res.json({
    status: 'healthy',
    version: '1.0.0',
    uptime: process.uptime(),
    memory: process.memoryUsage()
  });
});

🤝 Contributing

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

📊 Feature Comparison

Feature

stdio

HTTP

SSE

Notes

Claude Desktop

Primary use case

Web Applications

HTTP recommended

Session Management

Stateful connections

CORS Support

N/A

Browser compatibility

Real-time Notifications

Server-to-client

DNS Protection

N/A

Security feature

Process Lifecycle

Auto

Manual

Manual

Automatic cleanup

Scalability

Low

High

Medium

Concurrent connections

Setup Complexity

None

Low

Medium

Configuration required

🛡️ Security Considerations

HTTP Transport Security

  • DNS Rebinding Protection: Enabled by default

  • CORS Configuration: Properly configured origins

  • Session Validation: Secure session ID generation

  • Input Sanitization: All inputs validated with Zod schemas

Production Security Checklist

  • Use HTTPS in production

  • Configure specific CORS origins (not *)

  • Set up proper firewall rules

  • Enable rate limiting

  • Monitor for suspicious activity

  • Regular security updates

// Production CORS configuration
app.use(cors({
  origin: [
    'https://yourdomain.com',
    'https://app.yourdomain.com'
  ],
  credentials: true,
  exposedHeaders: ['Mcp-Session-Id'],
  allowedHeaders: ['Content-Type', 'mcp-session-id']
}));

🐛 Issues & Support

Found a bug or need help? Please open an issue on GitHub.

Before Opening an Issue

  1. Check existing issues for duplicates

  2. Include your Node.js version

  3. Specify which transport mode you're using

  4. Provide sample markdown content (if applicable)

  5. Include error logs and stack traces

🌟 Show Your Support

Give a ⭐️ if this project helped you!

Ways to Contribute

  • ⭐ Star the repository

  • 🐛 Report bugs and issues

  • 💡 Suggest new features

  • 📝 Improve documentation

  • 🔧 Submit pull requests

  • 💬 Share your use cases


Built with ❤️ using MCP SDK 1.16.x and AWS SDK v3

Available Tools

3 tools
convert_markdown_to_pdfConvert Markdown File to PDFC

Convert a markdown file to PDF

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoPDF page format (default: A4)
marginNoPDF margins (e.g., '0.5in', '20mm')
outputPathYesPath where the PDF should be saved
markdownPathYesPath to the markdown file to convert (local path or URL)

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of transparency. It only states the conversion action without disclosing key behavioral traits such as whether existing output files are overwritten, whether input can be a URL, or what happens on conversion failure. No additional context is provided.

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

Conciseness2/5

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

The description is a single short sentence, but it simply restates the tool name and title without adding meaningful information. It is under-specified rather than concise; the sentence does not earn its place because it provides no additional value over the already-known title.

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

Completeness2/5

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

Given the tool has a nested margin object, multiple output formats, and no output schema, the description is inadequate. It omits context about return values, side effects, or how the conversion handles edge cases, leaving the agent without practical guidance beyond the schema.

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

Parameters3/5

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

The input schema provides full descriptions for all parameters (100% coverage), including nested margins and enum options. The description adds no parameter-specific details, so it does not improve upon the schema; it neither compensates for gaps nor introduces ambiguity, warranting the baseline score.

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

Purpose4/5

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

The description states the specific verb 'Convert' and the resource 'markdown file' to PDF, clearly indicating the primary function. However, it does not differentiate this tool from its siblings 'convert_s3_markdown_to_pdf' or 'markdown_content_to_pdf', which have distinct input sources.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus the alternatives. It lacks any mention of prerequisites, exclusions, or specific scenarios where this local-path/URL-based converter is preferred over S3 or content-based converters.

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

convert_s3_markdown_to_pdfConvert S3 Markdown File to PDFB

Convert a markdown file from S3 bucket to PDF using bucket and key parameters

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesS3 object key (path to the markdown file)
bucketYesS3 bucket name
formatNoPDF page format (default: A4)
marginNoPDF margins (e.g., '0.5in', '20mm')
regionNoAWS region (defaults to us-east-1)
outputPathYesPath where the PDF should be saved (local path or S3 key for upload)
uploadToS3NoWhether to upload the PDF back to the same S3 bucket (default: false)

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, and the description only states the core conversion action without disclosing any side effects (e.g., whether the file is uploaded back to S3, credential requirements, or output handling). It fails to describe behavior beyond the literal conversion, leaving the agent without information about potential permissions or network dependencies.

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?

The description is a single, concise sentence that front-loads the action and resource. It contains no filler or redundant explanation, making it highly scannable.

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

Completeness2/5

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

Given the tool has seven parameters, nested objects, and no output schema, the description is sparse. It doesn't mention the uploadToS3 behavior, default region, or any distinctions from sibling tools, which are important for correct selection and invocation. The schema covers parameters, but the description lacks contextual depth beyond the basic conversion.

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

Parameters3/5

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

The input schema has 100% coverage with all 7 parameters described, so the baseline is 3. The description adds no extra parameter information beyond mentioning bucket and key, which is already in the schema. It does not clarify the format/margin parameters or outputPath semantics.

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 uses the specific verb 'Convert' with clear source ('markdown file from S3 bucket') and target (PDF), and explicitly mentions bucket and key parameters, distinguishing it from sibling tools like convert_markdown_to_pdf which likely handle non-S3 sources.

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

Usage Guidelines3/5

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

The description implies that this tool is for S3-hosted markdown files, but it does not explicitly state when to use it over sibling tools like markdown_content_to_pdf or convert_markdown_to_pdf, nor does it provide exclusions or prerequisites. This is only implied usage, not clear guidance.

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

markdown_content_to_pdfConvert Markdown Content to PDFC

Convert markdown content directly to PDF

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoDocument title for the PDF
formatNoPDF page format (default: A4)
marginNoPDF margins (e.g., '0.5in', '20mm')
outputPathYesPath where the PDF should be saved
markdownContentYesMarkdown content to convert (string or JSON object with content/chunks)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state whether existing files are overwritten, what permissions are required, or what the function returns. As a tool that writes a PDF file, this lack of side-effect disclosure is a significant gap.

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 a single sentence, front-loaded with the action, and contains no wasteful language. It is appropriately concise, though it borders on being too minimal to provide meaningful value beyond the title.

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

Completeness2/5

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

The tool has a nested object parameter (markdownContent) and multiple optional settings (title, format, margin), but the description does not address return values, usage examples, or limitations. For a tool with this complexity, the description is incomplete and insufficient.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter documented in the input schema. The description itself adds no additional parameter semantics, such as relationships or special constraints, so the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the verb 'convert' and resource 'markdown content to PDF', making the core function obvious. However, it does not explicitly differentiate from sibling tools like convert_markdown_to_pdf or convert_s3_markdown_to_pdf beyond the word 'directly', which is implied rather than explicit.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. The description does not mention convert_s3_markdown_to_pdf or any conditions that would favor one tool over another. Users are left to infer usage from the tool name and title.

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. 3 tool updatesv1.2.3
    • First observedconvert_markdown_to_pdf
    • First observedconvert_s3_markdown_to_pdf
    • First observedmarkdown_content_to_pdf

TDQS

B3.2/5.0

Scored across 3 tools

Disambiguation4/5

The three tools differ by input source: file, S3 object, and content string. However, the generic 'convert_markdown_to_pdf' could be misread as covering S3 or content, though the explicit S3 and content tools reduce ambiguity.

Naming Consistency3/5

The first two tools follow a convert_X_to_pdf pattern, but the third breaks convention by starting with 'markdown_content' instead of a verb. This mixed style is readable but not fully consistent.

Tool Count5/5

With three input modes (file, S3, content), each tool serves a distinct purpose and justifies its existence. This is an appropriate scope for a specialized markdown-to-PDF converter.

Completeness4/5

The server covers the core conversion needs for local files, S3 objects, and raw content. Minor gaps like URL-based conversion or batch processing are absent but not critical for the core purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

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
    D
    maintenance
    Provides tools for converting Markdown content and files into professional PDF documents with full support for Mermaid diagrams and LaTeX rendering. It allows for high-quality output customization, including paper size, table of contents, and syntax highlighting styles.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Converts Markdown files and raw content into professionally styled PDFs with full support for Mermaid diagrams and syntax highlighting. It offers customizable page formats, margins, and modern typography for high-quality document generation.
    11
    -

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/skmprb/md-mermaid-chart-pdf-mcp'

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