Install
$ agentstack add mcp-pdfgeneratorapi-mcp-server ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
PDF Generator API — MCP Server
Model Context Protocol (MCP) server for the PDF Generator API, generated from the OpenAPI v4 specification.
Overview
This server supports both stdio and HTTP transports:
- Stdio mode (default): For local MCP client integration (Claude Desktop, Claude Code, Cline, etc.)
- HTTP mode: For production deployment, marketplaces, and multiple clients
Quick Start
Local Development (Stdio Mode)
Install and build:
npm install
npm run build
MCP Client Configuration Example:
{
"mcpServers": {
"pdf-generator-api": {
"command": "node",
"args": ["/path/to/mcp-server/build/index.js"],
"env": {
"API_BASE_URL": "https://us1.pdfgeneratorapi.com/api/v4",
"BEARER_TOKEN_JWT": "your-jwt-token-here"
}
}
}
}
Note: Replace /path/to/mcp-server with your actual path and your-jwt-token-here with your PDF Generator API JWT token (see [JWT Token Generation](#jwt-token-generation) below).
Common config locations:
- Claude Desktop: Settings > Developer > Edit Config
- Claude Code (CLI):
~/.claude/mcp_config.json - Cline/Roo-Codeium:
.vscode/mcp_config.json - Continue:
~/.continue/config.json
Remote MCP Server (Streamable HTTP)
If you have a deployed MCP server (e.g. https://mcp.example.com), you can connect to it directly from your MCP client without running anything locally.
Claude Code (~/.claude/mcp_config.json):
{
"mcpServers": {
"pdf-generator-api": {
"type": "streamable-http",
"url": "https://mcp.pdfgeneratorapi.com/mcp",
"headers": {
"Authorization": "Bearer your-jwt-token-here"
}
}
}
}
Claude Desktop (claude_desktop_config.json):
Claude Desktop does not support streamable-http directly. Use mcp-remote as a bridge:
{
"mcpServers": {
"pdf-generator-api": {
"command": "npx",
"args": [
"mcp-remote",
"https://mcp.pdfgeneratorapi.com/mcp",
"--header",
"Authorization: Bearer your-jwt-token-here"
]
}
}
}
Note: For remote servers, use a long-lived JWT token (e.g. --expiresIn 30d) to avoid mid-session expiration. See [JWT Token Generation](#jwt-token-generation) for how to create one. Restart your MCP client after updating the config.
Production Deployment (HTTP Mode)
Run locally:
npm install
npm run start:http
# Server runs on http://localhost:3000
# MCP endpoint: http://localhost:3000/mcp
# Health check: http://localhost:3000/health
Docker:
docker compose -f deploy/docker-compose.yml up -d
# MCP endpoint: http://localhost:3001/mcp
Authentication
Stdio Mode: Pass the JWT token via the BEARER_TOKEN_JWT environment variable in your MCP client config.
HTTP Mode: Pass the JWT token in the Authorization header with each request:
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer your-jwt-token-here" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize",...}'
JWT Token Generation
You need a JWT token to authenticate with the PDF Generator API. Get your credentials from the PDF Generator API dashboard under Account Settings > API Integration.
You'll need three values:
- Workspace ID (
issclaim) — your numeric workspace identifier - Workspace Identifier (
subclaim) — your workspace email or unique key - Secret Key — the signing key for your JWT (keep this secret)
See: https://docs.pdfgeneratorapi.com/v4#section/Authentication/Creating-a-JWT
Node.js
const jwt = require('jsonwebtoken');
const token = jwt.sign(
{
iss: 'YOUR_WORKSPACE_ID', // e.g. "12345"
sub: 'YOUR_WORKSPACE_IDENTIFIER' // e.g. "user@example.com"
},
'YOUR_SECRET_KEY',
{
algorithm: 'HS256',
expiresIn: '24h' // Token lifetime — see notes below
}
);
console.log(token);
Quick one-liner (npx)
npx jsonwebtoken-cli -- sign \
'{"iss":"YOUR_WORKSPACE_ID","sub":"YOUR_WORKSPACE_IDENTIFIER"}' \
'YOUR_SECRET_KEY' \
--algorithm HS256 \
--expiresIn 24h
Token Expiration (TTL)
Choose a TTL that matches your use case:
| Use case | Recommended TTL | Why | |----------|----------------|-----| | Local MCP (stdio) | 24h or longer | MCP sessions can be long-lived; avoids mid-session expiration | | Production (HTTP) | 1h | Shorter-lived tokens reduce risk if leaked | | CI/CD or scripts | 5m – 15m | Minimal exposure window for automated tasks |
The PDF Generator API validates the token on every request. If the token expires mid-session, subsequent API calls will return 401 Unauthorized — generate a new token and restart the MCP client.
Security Best Practices
- Never commit tokens or secret keys to version control
- Use environment variables or a secrets manager to store your
BEARER_TOKEN_JWT - Rotate secret keys periodically in the PDF Generator API dashboard
- For HTTP mode, use HTTPS in production to protect tokens in transit
See: PDF Generator API Authentication Docs
Environment Variables
| Variable | Mode | Default | Description | |----------|------|---------|-------------| | API_BASE_URL | Both | https://us1.pdfgeneratorapi.com/api/v4 | PDF Generator API base URL | | BEARER_TOKEN_JWT | Stdio | — | JWT token for authentication | | PORT | HTTP | 3000 | Server port | | LOG_LEVEL | Both | info | Logging level (debug, info, warn, error) | | SESSION_TTL_MINUTES | HTTP | 30 | Session idle timeout in minutes | | CORS_ORIGIN | HTTP | * (all origins) | Comma-separated allowed origins |
Create a .env file in the repo root:
cp .env.example .env
Regenerating
To regenerate after OpenAPI spec changes:
# Place the updated spec at docs/apiv4.json, then:
./scripts/generate-mcp.sh
# Or specify a custom input:
./scripts/generate-mcp.sh --input /path/to/apiv4.json
Note: After regeneration, custom patches may need to be re-applied.
Testing
npm run build
npm test
Test stdio mode manually:
BEARER_TOKEN_JWT="your-token" echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npm run start:stdio
Test HTTP mode:
npm run start:http
curl http://localhost:3000/health
Resources
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: pdfgeneratorapi
- Source: pdfgeneratorapi/mcp-server
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.