Skip to main content
Glama
pdfmonkey

PDFMonkey MCP Server

Official
by pdfmonkey

PDFMonkey MCP Server

A Model Context Protocol (MCP) server that enables AI assistants like Claude to interact with the PDFMonkey API for generating PDFs from templates.

Docker License: MIT Tests

Features

  • Template Management: List and inspect PDF templates with detailed information (HTML, CSS, properties)

  • Document Generation: Create PDFs with async generation and automatic polling

  • Document Management: List, check status, and delete generated documents

  • Snippet Support: Access reusable Liquid code snippets

  • Workspace Info: View workspace details

  • User & Quota Management: Check account quota, plan information, and user details

Related MCP server: mcp-server-pdfnoodle

Quick Start

# Build locally (a published Docker Hub image is not available yet)
docker build -t pdfmonkey-mcp-server:latest .

Configure in Claude Desktop:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "pdfmonkey": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "PDFMONKEY_API_KEY=your-api-key-here",
        "pdfmonkey-mcp-server:latest"
      ]
    }
  }
}

See DOCKER-MCP-TOOLKIT.md for Docker MCP Toolkit integration.

Option 2: From npm

npm install -g pdfmonkey-mcp-server
{
  "mcpServers": {
    "pdfmonkey": {
      "command": "pdfmonkey-mcp-server",
      "env": {
        "PDFMONKEY_API_KEY": "your-api-key-here"
      }
    }
  }
}

Option 3: From Source

git clone https://github.com/pdfmonkey/pdfmonkey-mcp
cd pdfmonkey-mcp
npm install
npm run build
{
  "mcpServers": {
    "pdfmonkey": {
      "command": "node",
      "args": ["/absolute/path/to/pdfmonkey-mcp-server/dist/index.js"],
      "env": {
        "PDFMONKEY_API_KEY": "your-api-key-here"
      }
    }
  }
}

Get Your API Key

  1. Sign up at dashboard.pdfmonkey.io/register

  2. Get your API key from the dashboard

Available Tools (11 total)

Workspace Operations

  • list_workspaces - List all accessible workspaces

Template Operations

  • list_templates - List all PDF templates

  • get_template - Get template details with full HTML, CSS, and properties

Document Operations

  • generate_document - Generate PDF with async polling (1.5s intervals, 3min timeout)

  • get_document_status - Check document status and get download URL

  • list_documents - List documents with filters (status, template_id, page, updated_since)

  • delete_document - Delete document permanently

Snippet Operations

  • list_snippets - List all Liquid code snippets

  • get_snippet - Get snippet code

User & Quota Operations

  • get_quota - Get quota and plan information

  • get_user_info - Get complete account details

Usage Examples

Generate an Invoice

User: Generate a PDF invoice using my invoice template

Claude: I'll help you generate an invoice. First, let me list your templates.
[Uses list_templates tool]
I found your invoice template (ID: abc-123). Now I'll generate the PDF.
[Uses generate_document tool with data]
Your invoice has been generated! Download: https://...

View Template Code

User: Show me the HTML and CSS for template abc-123

Claude: [Uses get_template tool]
Here's the complete template:

### πŸ“ HTML Template
[Shows full HTML code]

### 🎨 CSS Styles
[Shows full CSS code]

### πŸ“Š Sample Data
[Shows JSON properties]

Check Account Status

User: What's my current quota?

Claude: [Uses get_quota tool]
You have 450 documents available on your Professional plan (monthly).
Share links are enabled.

Development

Build

npm run build

Test

npm test                  # Run all tests
npm run test:watch        # Watch mode
npm run test:coverage     # Coverage report

Current test coverage: 80/80 tests passing (~89% overall statements/lines; tools.ts dispatch 100%)

Watch Mode

npm run watch

Test Locally

export PDFMONKEY_API_KEY="your-api-key"
npm start

Test Docker Image

# Build
docker build -t pdfmonkey-mcp-server:latest .

# Test with real API
docker run -it --rm \
  -e PDFMONKEY_API_KEY="your-key" \
  pdfmonkey-mcp-server:latest

# In another terminal, send test JSON-RPC
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | \
  docker run -i --rm -e PDFMONKEY_API_KEY="your-key" pdfmonkey-mcp-server:latest

Publishing to Docker Hub

Prerequisites

  • Docker Hub account

  • Image tested and validated

  • All tests passing

Steps

# 1. Tag image
docker tag pdfmonkey-mcp-server:latest yourusername/pdfmonkey-mcp-server:1.0.0
docker tag pdfmonkey-mcp-server:latest yourusername/pdfmonkey-mcp-server:latest

# 2. Login to Docker Hub
docker login

# 3. Push images
docker push yourusername/pdfmonkey-mcp-server:1.0.0
docker push yourusername/pdfmonkey-mcp-server:latest

Multi-Architecture Build

Support Mac M1/M2 (ARM64) and Intel (AMD64):

# Create builder
docker buildx create --use --name mcp-builder

# Build and push multi-arch
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t yourusername/pdfmonkey-mcp-server:1.0.0 \
  -t yourusername/pdfmonkey-mcp-server:latest \
  --push \
  .

GitHub Actions CI/CD

Create .github/workflows/docker-publish.yml:

name: Docker Build and Publish

on:
  release:
    types: [created]
  push:
    branches: [main]

jobs:
  build-and-push:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '18'

      - name: Install and test
        run: |
          npm ci
          npm test
          npm run build

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_TOKEN }}

      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          platforms: linux/amd64,linux/arm64
          push: true
          tags: |
            yourusername/pdfmonkey-mcp-server:latest
            yourusername/pdfmonkey-mcp-server:${{ github.ref_name }}

Docker Image Details

  • Base: Node 18 Alpine

  • Size: ~236MB

  • User: Non-root (nodejs:1001)

  • Security: Read-only filesystem, no hardcoded secrets

  • Architecture: Multi-arch (AMD64, ARM64)

API Reference

Important Notes

  • Async Generation: generate_document polls every 1.5 seconds for up to 3 minutes

  • Download URLs: Expire after 1 hour

  • Share Links: Permanent URLs for premium users

  • Rate Limiting: 60 requests/minute

Full API documentation: docs.pdfmonkey.io

Troubleshooting

"PDFMONKEY_API_KEY environment variable is required"

Verify your configuration file includes the API key.

"Invalid API key" or 401 errors

Get a new key from dashboard.pdfmonkey.io.

Document generation timeout

Generation took >3 minutes. Use get_document_status with the document ID to check later.

Docker container exits immediately

Ensure you're using -i (interactive) flag:

docker run -i --rm -e PDFMONKEY_API_KEY="key" pdfmonkey-mcp-server:latest

View Docker logs

docker logs <container-id>

Contributing

Contributions welcome! Please:

  1. Fork the repository

  2. Create a feature branch

  3. Add tests for new functionality

  4. Ensure all tests pass (npm test)

  5. Submit a pull request

Testing

The project has comprehensive test coverage:

  • Unit tests: 80 tests covering the formatters, API client, and tool/prompt dispatch

  • Coverage: ~89% overall statements/lines (tools.ts dispatch at 100%)

  • Mock testing: Full fetch API mocking

  • Async testing: Polling and timeout scenarios

Run tests:

npm test              # All tests
npm run test:watch    # Watch mode
npm run test:coverage # Coverage report

Project Structure

pdfmonkey-mcp-server/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ index.ts              # MCP server bootstrap (env, client, stdio)
β”‚   β”œβ”€β”€ tools.ts              # Tool/prompt definitions + dispatch
β”‚   β”œβ”€β”€ pdfmonkey-client.ts   # PDFMonkey API client
β”‚   └── formatters.ts         # Output formatters
β”œβ”€β”€ tests/
β”‚   └── unit/
β”‚       β”œβ”€β”€ formatters.test.ts        # Formatter tests (21)
β”‚       β”œβ”€β”€ pdfmonkey-client.test.ts  # Client tests (25)
β”‚       └── tools.test.ts             # Tool dispatch tests (34)
β”œβ”€β”€ server.json               # MCP registry manifest
β”œβ”€β”€ Dockerfile                # Multi-stage build
β”œβ”€β”€ package.json
β”œβ”€β”€ tsconfig.json
└── jest.config.js

License

MIT License - see LICENSE file

Resources

Support

Available Tools

11 tools
delete_documentA

Permanently delete a document and its generated PDF

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe ID of the document to delete

TDQS

A3.6/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the burden of disclosing behavior. It clearly states that deletion is permanent and also deletes the generated PDF, which is a critical side effect. This is exactly the kind of behavioral disclosure an agent needs for a destructive operation, even though it lacks mention of ownership or permission requirements.

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, well-structured sentence that front-loads the action ('delete') and clearly states the scope, including the generated PDF. There is no wasted wording.

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 single-parameter destructive tool with no output schema, the description covers the essential: the action and its impact. However, it could add a note on how to confirm deletion (e.g., via response) or whether deletion is reversible, but given the simplicity, it is nearly complete.

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 schema provides a description for document_id ('The ID of the document to delete'), and coverage is 100%, so the schema fully documents the parameter. The description does not add extra meaning, such as where to find the ID or any format constraints, so the baseline 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 specifies a clear verb ('delete') and a resource ('document and its generated PDF'), which distinguishes it from non-destructive siblings like get_document_status. However, it does not differentiate from potential delete operations on other resources (e.g., snippets), but in this sibling context, it is unambiguous.

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 gives no guidance on when to use this tool versus alternatives, and no exclusions (e.g., 'use only if you own the document'). It implies a use case (deleting a document) but doesn't specify prerequisites or warn against deleting documents in use.

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

generate_documentA

Generate a PDF document from a template with provided data. This uses async generation with automatic polling until completion. Returns the download URL when ready. Optionally target a specific workspace with workspace_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoOptional time-to-live for automatic deletion (e.g., "7d", "2h", "30m")
metaNoOptional additional metadata to store with the document
payloadYesThe data to merge into the template (must match template structure)
filenameNoOptional filename for the generated PDF (e.g., "invoice-001.pdf")
template_idYesThe ID of the template to use for generation
workspace_idNoOptional workspace (app) ID to generate the document in. When omitted, uses the default workspace.

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 the full behavioral disclosure burden. It does this well by revealing that generation is asynchronous, that polling happens automatically until completion, and that the result is a download URL. It does not mention side effects like document persistence or quota impact, but the core mutation and return behavior are transparent.

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 three concise sentences with no filler. The primary purpose is front-loaded, the async behavior and return value are stated next, and the workspace option is placed last. Every sentence contributes useful 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 6-parameter tool with no output schema and no annotations, the description does a good job covering the return value and async workflow. It could additionally mention failure modes or how to source template_id, but the schema plus sibling tool names provide enough context for an agent to invoke it correctly.

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 schema covers all 6 parameters with descriptions, so the baseline is 3. The description adds only minimal semantic value beyond the schema, such as clarifying that payload is 'provided data' and that workspace_id is optional. It does not enrich parameter understanding meaningfully, but it does not need to because the schema already documents the parameters well.

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 begins with a specific verb and resource: 'Generate a PDF document from a template with provided data.' This clearly distinguishes it from sibling tools like list_documents, delete_document, and get_document_status, which are about retrieving or managing documents rather than creating them.

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 gives clear context for when to use the tool: when a PDF needs to be produced from a template. It also communicates the async polling workflow and optional workspace targeting, though it does not explicitly state exclusions or name alternatives like list_templates for finding a template_id.

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

get_document_statusB

Check the generation status of a document and get its download URL if ready

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesThe ID of the document to check

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must carry the behavioral burden. It states the primary action (checking status) and a conditional outcome (get URL if ready), but doesn't disclose side effects, error behavior (e.g., document not found), response format, or whether it's a read-only operation. This is minimal.

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 sentence with no waste. It front-loads the primary action and conditionally adds the secondary outcome, making it concise and easily parsed.

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?

For a simple one-parameter tool, the description covers the main function, but without an output schema or annotations, it leaves gaps: it doesn't explain typical status values, what happens when the document isn't ready, or the response structure. Since the tool is low in complexity, a 3 is appropriateβ€”adequate but not robust.

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 coverage is 100% and the parameter document_id is described as 'The ID of the document to check' in the schema itself. The description adds no additional semantic detail beyond that, so it meets the baseline of 3 for full schema coverage.

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 tool checks document generation status and retrieves a download URL when ready. It uses a specific verb and resource, and the name is self-explanatory. It doesn't explicitly differentiate from siblings like generate_document, but the purpose is unambiguous enough to avoid confusion.

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 implies you use this to check status but gives no explicit guidance on when to choose this over generate_document or other sibling tools. There is no mention of alternatives or conditional usage, leaving the agent to infer appropriate context.

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

get_quotaA

Get current quota and plan information for the account

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

The word 'Get' clearly implies a read-only operation, and 'current' suggests a fresh response, but no explicit disclosure of authentication requirements, rate limits, or response format is provided. Since there are no annotations, the description carries the burden, and it only partially satisfies it.

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 sentence with no filler. It front-loads the verb and resource and stays appropriately concise.

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 parameterless getter, the description is essentially complete: it names the data returned (quota and plan info) and the scope (account). It does not describe exact output fields, but no output schema exists to fill that gap. Still, the main intent and invocation are clear.

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, so the schema already covers everything. The description adds no further semantic meaning, and the baseline of 4 applies because no parameter documentation is needed.

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 states a specific action ('Get'), a clear resource ('current quota and plan information'), and the scope ('for the account'). This differentiates it from sibling tools like get_user_info or get_snippet, which target different resources.

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?

No guidance is given on when to use this tool instead of the closely related get_user_info or the other getter/list tools. The description states what it does but provides no context for selection or exclusions.

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

get_snippetA

Get the Liquid code of a specific snippet

ParametersJSON Schema
NameRequiredDescriptionDefault
snippet_idYesThe ID of the snippet to retrieve

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden. 'Get' does imply a read-only retrieval and 'Liquid code' describes the returned substance, but nothing is said about side effects, errors, permissions, or the exact response shape.

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, front-loaded sentence with zero filler. Every word contributes to the agent's understanding of what the tool returns.

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?

For a simple one-parameter getter, the description and schema cover the basics. However, there are no annotations and no output schema, so the description does not disclose potential errors, permissions, or the complete response format beyond saying it is Liquid code.

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% and the single parameter snippet_id is already documented clearly. The description adds no additional parameter semantics beyond reinforcing that the ID identifies the snippet to retrieve.

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 names a specific verb ('Get'), a precise resource ('a specific snippet'), and the returned content type ('Liquid code'). This clearly distinguishes it from list_snippets (...) and get_template (...).

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 phrase 'a specific snippet' implies use when retrieving one snippet by ID, and list_snippets is an obvious sibling for enumeration. However, there is no explicit guidance on when not to use it or what to use instead, leaving the routing to inference.

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

get_templateA

Get detailed information about a specific template including HTML, CSS, and sample data

ParametersJSON Schema
NameRequiredDescriptionDefault
template_idYesThe ID of the template to retrieve

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. The verb 'get' implies a read operation, but the description does not explicitly state that it is read-only, does not mention authentication or permission requirements, and gives no information about error behavior or rate limits. The addition of 'including HTML, CSS, and sample data' describes return content but not side effects or safety.

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, focused sentence that front-loads the core action and resource, then specifies the return content. There is zero fluff or repetition; every word contributes to the agent's understanding.

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?

Although there is no output schema, the description partially covers return values by naming HTML, CSS, and sample data. It also indirectly identifies the input (template_id) and the scope ('a specific template'). For a simple read tool with one parameter, this is largely complete, though it could mention what happens on invalid IDs or whether additional metadata is returned.

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%, so the schema already documents template_id as 'The ID of the template to retrieve'. The tool description adds no further meaning about the parameter (e.g., format, examples, or constraints). Baseline 3 is appropriate because the schema does the heavy lifting.

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 a specific verb ('Get') and resource ('detailed information about a specific template') and clarifies the content ('HTML, CSS, and sample data'). This clearly distinguishes it from sibling tools like list_templates (which would return a collection) and get_snippet (which targets a different resource type).

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 used when you need details about one specific template (as opposed to listing templates), but it does not explicitly state when to use it over alternatives like list_templates or get_snippet, nor does it mention any exclusion criteria. The usage context is inferable but not stated.

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

get_user_infoA

Get complete user account information including personal details, plan, and settings

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/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. The verb 'get' implies a read operation, but the description does not explicitly state that it is non-destructive, requires authentication, or has any side effects. It also does not mention potential response size or performance characteristics. This is a minimal disclosure that does not go beyond the verb itself.

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, front-loaded sentence that immediately states the action and resource, then enumerates what is included. There is no extraneous information, making it efficient and easy to parse.

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 simple getter with no parameters and no output schema, the description adequately communicates what the tool returns (complete user info including personal details, plan, settings). It does not mention response format or potential caveats, but given the simplicity, it is largely sufficient. It does not explicitly state that it is read-only, which would be helpful, but that falls under behavioral transparency.

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 input schema has zero parameters, so there is nothing to document. Per the rubric, with 0 parameters the baseline is 4. The description correctly makes no parameter claims, and the high schema coverage (100%) means the schema is complete. No additional semantic explanation is needed.

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 verb 'Get', the resource 'user account information', and enumerates the included details (personal details, plan, settings). This distinguishes it from siblings like get_snippet or get_quota, which target specific resources. It is specific and unambiguous.

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 usage when user account info is needed, but it does not explicitly state when to use it versus alternatives, nor does it mention any exclusions or preconditions. With siblings like get_quota and list_workspaces, an agent might infer context, but the description provides no explicit routing guidance.

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

list_documentsA

List documents with optional filtering by status, template, or update time

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 1)
statusNoFilter by document status
template_idNoFilter by template ID
updated_sinceNoFilter by update timestamp (ISO 8601 format)

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral disclosure burden. The verb 'list' clearly signals a read-only operation, and the filtering scope is stated. However, it does not disclose behaviors like default pagination, ordering, or whether all documents are returned when no filters are provided.

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?

A single sentence that states the action, resource, and filter options with no unnecessary words. The core function is front-loaded and every word earns its place.

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?

The description and schema together are adequate for a simple, read-only listing operation with four optional parameters. However, there is no output schema and no mention of default behavior or alternatives, so some context is missing for an agent to make fully informed decisions.

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%, so the input schema already documents all four parameters clearly. The description adds a concise summary of the filter options but no new semantic detail beyond the 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 states a specific verb and resource ('List documents') and names the exact filtering dimensions (status, template, update time). This distinguishes it from sibling tools like list_templates and list_snippets, which operate on different resources.

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 the tool is for retrieving documents with optional filters, but it does not explicitly say when to use this over alternatives. No exclusions or conditions are provided, leaving the agent to infer usage.

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

list_snippetsA

List all reusable Liquid code snippets in the workspace

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/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 behavioral disclosure. It only states the action but doesn't mention read-only nature, whether full snippet contents or just metadata are returned, potential pagination, or auth requirements.

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?

A single, front-loaded sentence with no filler. Every word adds meaning, and the structure is immediately scannable.

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 simple zero-parameter list tool, the description adequately captures the primary behavior. However, since there is no output schema, it could be improved by hinting at what the returned list contains (e.g., names, IDs, or full snippet code).

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, so there is nothing to document. The baseline of 4 applies because the description need not compensate for any missing parameter information.

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 a specific verb ('List') and resource ('reusable Liquid code snippets') with a defined scope ('in the workspace'). This distinguishes it from siblings like get_snippet (singular retrieval), list_templates, and list_documents.

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?

No guidance is given on when to use this tool instead of alternatives. For example, it doesn't mention that get_snippet should be used to fetch a single snippet's content. The agent must infer this from sibling names.

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

list_templatesA

List all PDF templates available in the workspace. Optionally scope the listing to a specific workspace with workspace_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idNoOptional workspace (app) ID to scope the template listing. When omitted, uses the default workspace.

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must carry behavioral disclosure itself. It does convey that this is a read-only listing operation with optional workspace scoping. However, it does not mention return format, pagination, or error behavior, so it falls short of a higher 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?

Two short sentences with no filler, with the core purpose front-loaded and the optional parameter mentioned immediately after. Every sentence earns its place.

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?

This is a simple list tool with a single optional, fully documented parameter, so the description is mostly sufficient. The only notable omission is the return shape or contents of the listing, since no output schema is provided to cover that.

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%, and the schema already explains that workspace_id is optional and defaults to the current workspace. The description only restates this parameter behavior rather than adding new semantic detail.

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 opens with a specific verb and resource: 'List all PDF templates available in the workspace.' This clearly separates it from sibling tools like get_template (single template retrieval) and list_documents/list_snippets (other resource types).

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 contextual guidance by explaining the optional workspace scoping and the default behavior when workspace_id is omitted. It does not explicitly name alternative tools or exclusion conditions, so it stops short of a 5.

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

list_workspacesA

List all PDFMonkey workspaces accessible with the current API key

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, the description carries the full burden of behavioral disclosure. It states that it lists workspaces accessible with the current API key, which implies a read-only operation and a list result. However, it does not explicitly confirm read-only behavior, pagination, or any side effects. The description is not contradictory, but it is minimal.

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, clear sentence with no wasted words. It front-loads the action and resource, making it immediately scannable.

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 list operation with no output schema, the description is nearly complete. It names the resource and the scope (current API key). It does not explicitly describe the return format, but the verb 'list' implies an array of workspace objects, which is sufficient for an agent to invoke correctly.

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, and the input schema is empty with 100% coverage. Per the rubric, a zero-parameter tool earns a baseline of 4 because there is nothing for the description to clarify. The description correctly omits any parameter details.

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 action 'List' and the resource 'all PDFMonkey workspaces' with a qualifier about the current API key. It distinguishes from sibling list tools (list_templates, list_documents, list_snippets) by resource, leaving no ambiguity about what it returns.

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 this tool is for retrieving workspace lists, but it does not explicitly state when to use it over the sibling list tools or provide exclusions. The use case is evident from the resource name, but there is no direct comparison to alternatives.

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.

  1. 11 tool updatesv1.0.0
    • First observeddelete_document
    • First observedgenerate_document
    • First observedget_document_status
    • First observedget_quota
    • First observedget_snippet
    • First observedget_template
    • First observedget_user_info
    • First observedlist_documents
    • First observedlist_snippets
    • First observedlist_templates
    • First observedlist_workspaces

TDQS

A3.7/5.0

Scored across 11 tools

Disambiguation4/5

Each tool maps to a distinct resource/action, and the list/get/generate/delete separation is clear. The only mild overlap is get_quota and get_user_info, since both mention plan information, but their primary purposes remain distinguishable.

Naming Consistency5/5

All tool names use lowercase snake_case with a consistent verb_noun convention: get_, list_, generate_, and delete_. Singular and plural nouns are used sensibly to distinguish individual resources from collections.

Tool Count5/5

With 11 tools, the surface covers account, workspace, template, snippet, and document concerns without feeling bloated. Each tool contributes meaningfully to the PDF generation workflow.

Completeness3/5

The document generation lifecycle is covered end-to-end: list/get templates, generate, poll status, list documents, and delete. However, templates and snippets are read-only, with no create/update/delete operations, which is a notable gap if the server is meant to fully manage PDFMonkey resources.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects AI assistants to DocuJSON for PDF generation, template management, and API operations via natural language. It enables tasks like creating invoices, managing templates, and viewing usage stats through MCP-compatible tools.
    2 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables PDF and image generation from templates, JSON, HTML, or URLs through the PDF Gen Studio API. Supports rendering, template management, and multiple output formats.
    6 npm
    1
    MIT