PDF生成API服务器

该服务是一个基于OpenAPI规范的PDF生成API服务器,支持stdio和HTTP两种传输模式,适用于本地开发和生产环境部署。

  • by pdfgeneratorapi
  • TypeScript
  • 混合部署
  • 1 星标
  • 更新于
在 GitHub 查看 pdfgeneratorapi/mcp-server

使用说明

PDF生成器API-MCP服务器

模型上下文协议(MCP)服务器 PDF生成器API,由OpenAPI v4规范生成。

概述

此服务器支持 两者 stdio和HTTP传输:

  • 标准模式 (默认):用于本地MCP客户端集成(Claude Desktop、Claude Code、Cline等)
  • HTTP模式:适用于生产部署、市场和多个客户

快速开始

地方发展(标准模式)

安装和构建:

npm install
npm run build

MCP客户端配置示例:

{
  "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"
      }
    }
  }
}

备注:替换 /path/to/mcp-server 根据您的实际路径和 your-jwt-token-here 使用您的PDF生成器API JWT令牌(请参阅 JWT令牌生成 在......下面

常见配置位置:

  • 克劳德桌面:设置>开发人员>编辑配置
  • 克劳德代码(CLI): ~/.claude/mcp_config.json
  • Cline/Roo Codeium: .vscode/mcp_config.json
  • 继续: ~/.continue/config.json

远程MCP服务器(可流式HTTP)

如果您部署了MCP服务器(例如。 https://mcp.example.com),您可以直接从MCP客户端连接到它,而无需在本地运行任何东西。

克劳德代码 (~/.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_config.json):

Claude Desktop不支持 streamable-http 直接。使用 mcp-remote 作为一座桥梁:

{
  "mcpServers": {
    "pdf-generator-api": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://mcp.pdfgeneratorapi.com/mcp",
        "--header",
        "Authorization: Bearer your-jwt-token-here"
      ]
    }
  }
}

备注:对于远程服务器,使用长期JWT令牌(例如。 --expiresIn 30d)以避免会话中期到期。看 JWT令牌生成 如何创建一个。更新配置后重新启动MCP客户端。

生产部署(HTTP模式)

在本地运行:

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 compose -f deploy/docker-compose.yml up -d
# MCP endpoint: http://localhost:3001/mcp

认证

标准模式:通过以下方式传递JWT令牌 BEARER_TOKEN_JWT MCP客户端配置中的环境变量。

HTTP模式:将JWT令牌传递到 Authorization 每个请求的标头:

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令牌生成

您需要JWT令牌才能通过PDF生成器API进行身份验证。从获取您的凭据 PDF生成器API面板 在...之下 帐户设置>API集成.

你需要三个值:

  • 工作区ID (iss claim)--您的数字工作区标识符
  • 工作区标识符 (sub claim)--您的工作区电子邮件或唯一密钥
  • 密钥 --JWT的签名密钥(请保密)

请参阅: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);

快速单层(npx)

npx jsonwebtoken-cli -- sign \
  '{"iss":"YOUR_WORKSPACE_ID","sub":"YOUR_WORKSPACE_IDENTIFIER"}' \
  'YOUR_SECRET_KEY' \
  --algorithm HS256 \
  --expiresIn 24h

令牌到期(TTL)

选择一个与您的用例相匹配的TTL:

用例 推荐TTL 为什么
本地MCP(stdio) 24h 或更长 MCP会话可以是长期的;避免会话中期过期
生产(HTTP) 1h 寿命较短的代币可降低泄露风险
CI/CD或脚本 5m – 15m 自动化任务的最小曝光窗口

PDF生成器API对每个请求验证令牌。如果令牌在会话中期过期,则随后的API调用将返回 401 Unauthorized --生成新令牌并重新启动MCP客户端。

安全最佳实践

  • 切勿提交令牌或密钥 到版本控制
  • 使用 环境变量 或者一个秘密管理器来存储你的 BEARER_TOKEN_JWT
  • 旋转密钥 定期在PDF生成器API面板中
  • 对于HTTP模式,请使用 超文本传输安全协议 在生产中保护运输中的代币

请参阅: PDF生成器API验证文档

环境变量

变量 模式 默认值 描述
API_BASE_URL 两者皆有 https://us1.pdfgeneratorapi.com/api/v4 PDF生成器API基础URL
BEARER_TOKEN_JWT 用于身份验证的Stdio -- JWT令牌
PORT HTTP 3000 服务器端口
LOG_LEVEL 两者皆有 info 日志记录级别(debug, info, warn, error)
SESSION_TTL_MINUTES HTTP 30 会话空闲超时(分钟)
CORS_ORIGIN HTTP * (所有来源) 允许使用逗号分隔的来源

创建一个 .env repo根目录中的文件:

cp .env.example .env

使再生

要在OpenAPI规范更改后重新生成:

# 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

注: 再生后,可能需要重新应用自定义补丁。

测试

npm run build
npm test

手动测试stdio模式:

BEARER_TOKEN_JWT="your-token" echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npm run start:stdio

测试HTTP模式:

npm run start:http
curl http://localhost:3000/health

资源