DocPenny PDF Generator
Server Details
Generate PDFs from HTML templates via AI agents or API. List templates, submit jobs with JSON data, check credits, and generate watermarked previews — all through MCP tools. Templates support LiquidJS templating with conditionals, loops, and raw variable injection.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 3.9/5 across 6 of 6 tools scored. Lowest: 2.8/5.
Each tool serves a distinct purpose: preview generation, credit checking, job status, template details, listing templates, and job submission. There is no functional overlap.
All tools follow a consistent verb_noun pattern in snake_case (e.g., generate_preview, list_templates), making the set predictable and easy to navigate.
With 6 tools, the set is well-scoped for a PDF generation service, covering template management, job lifecycle, credits, and preview without unnecessary clutter.
The tool surface covers template browsing, submission, status tracking, and previewing. A minor gap is the lack of an explicit tool to retrieve the final generated PDF after job completion, though get_job might return a URL (not specified).
Available Tools
6 toolsgenerate_previewAInspect
Generate a watermarked preview PDF (no credits consumed). The preview PDF is available for one-time download via the returned URL, then deleted from storage.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | JSON string of template variable data (e.g. report info, holdings, allocation, performance arrays). Pass an empty object {} if omitted. | |
| templateId | Yes | The UUID of the template to use for generating the preview |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully bears transparency burden. Discloses watermarking, zero credit cost, one-time download, and deletion after retrieval.
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?
Two sentences cover purpose, behavior, and constraint (no credits). No wasted words, front-loaded.
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?
No output schema, but description explains the returned URL's behavior. Could mention size limits or format, but overall adequate for a preview tool.
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 already covers both parameters with descriptions. The description adds minimal extra context (data as JSON template variables). Baseline 3 is appropriate.
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?
Clearly states the action (Generate), resource (preview PDF), and key differentiators: watermarked, no credits consumed. Distinguishes from sibling submit_job which likely consumes credits.
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?
Implicitly defines when to use (preview vs. actual job via no-credits hint). Lacks explicit when-not or alternatives, but context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_creditsAInspect
Check the organization's credit balance, including paid credits, free/promotional credits, and total available credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It clearly indicates a read operation (check) and lists the credit types returned. It does not disclose authentication or rate limits, but for a simple param-less query, this is sufficient.
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?
Single sentence conveying all necessary information with no wasted words. Front-loaded with the action and specifics.
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 no parameters and no output schema, the description fully explains what the tool returns (credit balance components). The agent can correctly invoke and interpret results.
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?
Input schema is empty (0 parameters), schema coverage 100%. Baseline for 0 params is 4. Description adds no parameter info since none exist, which is appropriate.
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 checks the organization's credit balance and lists specific components (paid, free/promotional, total). It distinguishes from sibling tools which deal with jobs and templates.
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 implies usage for checking credit balance but gives no explicit guidance on when to use vs alternatives or when not to use. Siblings are different enough to avoid confusion, but lack of explicit usage context lowers score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jobAInspect
Get the status and progress of a PDF generation job, including task counts (total, completed, failed).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The UUID of the job to retrieve |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description conveys a read-only operation (getting status) but lacks explicit statements about non-destructiveness, authentication, or error handling. Without annotations, the description carries the full burden and could be more detailed.
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 a single, well-structured sentence that front-loads the action and includes key details. No unnecessary words.
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 simple retrieval tool with one parameter, the description adequately specifies the return information (task counts). However, it does not mention other possible return fields or error cases, which could be added for 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 already describes the 'id' parameter as a UUID, and the tool description reinforces that it identifies the job. No additional semantics beyond the schema are provided, so baseline score applies.
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 it retrieves the status and progress of a PDF generation job with specific details (task counts). It is distinct from sibling tools like 'submit_job' and 'generate_preview', which perform different actions.
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 implies usage for checking job status after submission, but it does not explicitly state when to use versus alternatives like 'submit_job' or 'generate_preview'. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_templateAInspect
Get detailed information about a specific template, including its variables and JSON schema.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The UUID of the template to retrieve |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns 'detailed information, including variables and JSON schema,' but does not mention potential errors (e.g., template not found), required permissions, or any side effects. For a read-only tool, this is adequate but lacks depth.
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 a single, well-structured sentence with no unnecessary words. It efficiently conveys the tool's function and return content.
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 low complexity (one parameter, no output schema, no annotations), the description is mostly complete. It clearly states what the tool does and what it returns. However, it could be improved by briefly distinguishing from 'list_templates' or mentioning error handling.
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 100% for the sole parameter 'id' (described as 'The UUID of the template to retrieve'). The description adds meaning beyond the schema by specifying that the response includes variables and JSON schema, but does not enhance parameter semantics directly. Baseline 3 is appropriate.
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: 'Get detailed information about a specific template, including its variables and JSON schema.' It uses a specific verb ('Get') and a specific resource ('template'), and distinguishes from siblings like 'list_templates' by emphasizing 'detailed information' for a single template.
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?
No usage guidance is provided. The description does not indicate when to use this tool over alternatives such as 'list_templates' for listing, or when not to use it. There is no mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_templatesAInspect
List available PDF templates with optional pagination. Returns template names, IDs, and their required LiquidJS variables. Use source="system" to list system-wide pre-built templates instead of org-owned ones.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| source | No | If set to "system", returns system-wide starter templates instead of org-specific ones. | |
| pageSize | No | Items per page (default: 15) |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the tool supports pagination and returns specific fields (names, IDs, variables). With no annotations, this is sufficient for a read-only list operation, though it could explicitly state it is non-destructive.
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?
Two sentences only, each with clear purpose: first states action and return, second gives usage hint. No filler, perfectly concise.
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?
Covers return fields (names, IDs, variables) and pagination behavior. With no output schema, this is reasonably complete, though pagination metadata (like total count) is not mentioned.
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 covers all parameters, but the description adds value by explaining the source parameter's effect (system vs. org templates) and noting pagination is optional, going beyond the schema descriptions.
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: listing PDF templates with optional pagination. It specifies what is returned (names, IDs, LiquidJS variables), distinguishing it from siblings like get_template (which likely fetches a single template).
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?
Provides explicit guidance on using source="system" for system-wide templates. However, it does not directly contrast with sibling tools like get_template, though the purpose implies this is for listing vs. single retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_jobCInspect
Submit a new PDF generation job using a template and JSONL data. Each line in the data array represents one PDF to generate with variable values.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | JSONL formatted data — one JSON object per line, each line is one PDF to generate | |
| templateId | Yes | The UUID of the template to use for PDF generation | |
| webhookUrl | No | Optional URL to receive a webhook notification when the job completes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It does not mention that jobs are likely asynchronous, return a job ID, or have any side effects, rate limits, or authorization requirements.
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 concise with two sentences, no fluff, and gets directly to the point. It earns its place.
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 lack of output schema and annotations, the description is insufficient. It omits critical context like what the tool returns (job ID?), how to track progress, and any prerequisites or restrictions.
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 coverage is 100%, so baseline is 3, but the description introduces an inaccuracy by calling data an 'array' when it is a JSONL string. It adds minimal value beyond the schema, and the error reduces clarity.
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 action (submit) and resource (PDF generation job) and mentions using a template and JSONL data, which differentiates from sibling tools like generate_preview. However, it incorrectly refers to 'data array' when the schema defines data as a string, causing slight confusion.
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 no guidance on when to use this tool versus alternatives like generate_preview (for single previews) or get_job (for status updates). No explicit context or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!