I create markdown content calendars and export them as PDFs via PDF Generator MCP
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Delete one stored PDF draft by preview_id from this chat session only. Hidden from suggestion buttons — agent-only. Returns deleted true/false. Does not remove already-generated public PDF files. Never accept path-like ids.
Hex preview_id from list_previews / get_preview in THIS session only
Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Delete one stored PDF draft by preview_id from this chat session only. Hidden from suggestion buttons — agent-only. Returns deleted true/false. Does not remove already-generated public PDF files. Never accept path-like ids.
| Argument | Type | Description |
|---|---|---|
| preview_id* | string | Hex preview_id from list_previews / get_preview in THIS session only |
| notification_message | string | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
{
"type": "object",
"required": [
"preview_id"
],
"properties": {
"preview_id": {
"type": "string",
"description": "Hex preview_id from list_previews / get_preview in THIS session only"
},
"notification_message": {
"type": "string",
"description": "Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names."
}
}
}Generate a PDF from a preview. Call with no args first: if multiple previews exist, returns needs_selection + previews (title + preview_id) — ask the user which one, then call again with preview_id. If only one preview exists, generates it immediately. Returns pdf_url when generated.
| Argument | Type | Description |
|---|---|---|
| preview_id | string | Unique preview_id from a prior preview_document result. Omit to list choices (when multiple) or generate the only/last preview. |
| notification_message | string | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
{
"type": "object",
"required": [],
"properties": {
"preview_id": {
"type": "string",
"description": "Unique preview_id from a prior preview_document result. Omit to list choices (when multiple) or generate the only/last preview."
},
"notification_message": {
"type": "string",
"description": "Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names."
}
}
}Preview PDF button. Call with no args first: if one draft exists, returns document_markdown; if multiple, returns needs_selection + previews — emit_display layout P (interaction_mode none) numbered picker only. NEVER collect_user_input or emit_display input for preview_id. After user replies with a number/title, call again with preview_id.
| Argument | Type | Description |
|---|---|---|
| preview_id | string | Optional. Omit on first Preview PDF tap so the tool can list drafts. Pass only after the user picks from the numbered list (or when chat already has a clear id). |
| notification_message | string | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
{
"type": "object",
"required": [],
"properties": {
"preview_id": {
"type": "string",
"description": "Optional. Omit on first Preview PDF tap so the tool can list drafts. Pass only after the user picks from the numbered list (or when chat already has a clear id)."
},
"notification_message": {
"type": "string",
"description": "Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names."
}
}
}List all stored PDF drafts in this session. Returns previews[{preview_id, title}], count, and most_recent_preview_id. Use when the user taps List PDFs or asks which drafts exist. Does not show document body — follow with get_preview after they pick.
| Argument | Type | Description |
|---|---|---|
| notification_message | string | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
{
"type": "object",
"required": [],
"properties": {
"notification_message": {
"type": "string",
"description": "Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names."
}
}
}Write or revise draft markdown into session storage (creates preview_id). Agent-only — not a suggestion button. Use when the user asks to create/write/edit document content. For showing an existing draft use get_preview (Preview PDF). Never put emit_display chrome into content.
| Argument | Type | Description |
|---|---|---|
| title | string | Document title (real topic title, not 'Preview') |
| content* | string | Full substantive markdown for the PDF pages (use --- between pages; each page needs a heading). Must be the document the user requested — never UI phrases like 'Here is a preview of your PDF document.' |
| update_preview_id | string | When the user asks to adjust an existing preview, set this to that preview's preview_id. Omit to create a new preview. |
| notification_message | string | Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names. |
{
"type": "object",
"required": [
"content"
],
"properties": {
"title": {
"type": "string",
"description": "Document title (real topic title, not 'Preview')"
},
"content": {
"type": "string",
"description": "Full substantive markdown for the PDF pages (use --- between pages; each page needs a heading). Must be the document the user requested — never UI phrases like 'Here is a preview of your PDF document.'"
},
"update_preview_id": {
"type": "string",
"description": "When the user asks to adjust an existing preview, set this to that preview's preview_id. Omit to create a new preview."
},
"notification_message": {
"type": "string",
"description": "Short user-facing sentence for this action if the follow-up reply fails. Plain text only; do not mention template syntax or variable names."
}
}
}Reply conversationally when the request is ambiguous or needs clarification.
| Argument | Type | Description |
|---|---|---|
| reply_hint | string | Optional hint for the conversational reply. |
{
"type": "object",
"properties": {
"reply_hint": {
"type": "string",
"description": "Optional hint for the conversational reply."
}
}
}🖼️ Slidegen: generate image
| Argument | Type | Description |
|---|---|---|
| detail | string | Specific parameters for this action. |
{
"type": "object",
"properties": {
"detail": {
"type": "string",
"description": "Specific parameters for this action."
}
}
}🖼️ Slidegen: generate multiple graphics
| Argument | Type | Description |
|---|---|---|
| detail | string | Specific parameters for this action. |
{
"type": "object",
"properties": {
"detail": {
"type": "string",
"description": "Specific parameters for this action."
}
}
}🖼️ Slidegen: generate single graphic
| Argument | Type | Description |
|---|---|---|
| detail | string | Specific parameters for this action. |
{
"type": "object",
"properties": {
"detail": {
"type": "string",
"description": "Specific parameters for this action."
}
}
}