PDF签名服务

一个提供在PDF文档指定坐标添加签名图像工具的MCP服务器,适用于电子签名和文档处理场景。

  • by adamanz
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 adamanz/esign-mcp

使用说明

eSign MCP服务器

一种MCP(模型上下文协议)服务器,通过在指定坐标处添加签名图像来提供对PDF文档进行签名的工具。

鸣谢

此MCP服务器建立在优秀的 签名pdf 项目by 查理·德塔尔 (cfd@media.mit.edu).原始的signpdf实用程序提供了此MCP服务器用现代MCP接口包装的核心PDF签名功能。

特性

  • sign_pdf:通过精确定位将签名图像添加到PDF文档中
  • get_pdf_info:获取PDF元数据,包括页数和尺寸
  • 输入验证和错误处理
  • 支持PNG和JPG签名图像
  • 可选日期戳记
  • 文件传输的Base64编码

工具

sign_pdf

通过在指定坐标处添加签名图像来签署PDF文档。

参数:

  • pdf_data (string):Base64编码的PDF文件内容
  • signature_data (string):Base64编码的签名图像(PNG、JPG)
  • page_number (int,可选):要签名的页码(基于1的索引,默认值:1)
  • x (浮点数,可选):PDF单位左下角的X坐标(默认值:100)
  • y (浮点数,可选):PDF单位左下角的Y坐标(默认值:100)
  • width (浮点数,可选):以PDF为单位的签名宽度(默认值:125)
  • height (浮点数,可选):签名的高度,以PDF为单位(默认值:40)
  • add_date (bool,可选):是否在签名旁边添加当前日期(默认值:false)

退货: Base64编码的签名PDF内容

get_pdf_info

获取有关PDF文档的信息,包括页数和尺寸。

参数:

  • pdf_data (string):Base64编码的PDF文件内容

退货:

{
  "num_pages": 1,
  "pages": [
    {
      "page_number": 1,
      "width": 612.0,
      "height": 792.0
    }
  ]
}

安装

先决条件

  • Python 3.11+
  • uv 包管理器(推荐)或 pip

本地安装

  1. 克隆或下载此存储库
  2. 安装依赖项:
    uv pip install -r requirements.txt
    

运行服务器

要运行MCP服务器,请执行以下操作:

uv run python mcp_server.py

默认情况下,服务器将以stdio传输方式启动。

测试

提供了一个测试脚本来验证服务器功能:

uv run python test_server.py

这将:

  1. 创建测试PDF文档
  2. 生成测试签名图像
  3. 测试 get_pdf_info 工具
  4. 测试 sign_pdf 工具
  5. 将签名的PDF另存为 test_signed.pdf

Docker部署

服务器包括Docker对容器化部署的支持:

# Build the image
docker build -t pdf-signer-mcp .

# Run the container
docker run -p 8000:8000 pdf-signer-mcp

Smithery部署

此服务器配置为在Smithery上部署,包括 smithery.yaml 配置文件。

配置文件

  • Dockerfile:容器构建说明
  • smithery.yaml:Smithery部署配置
  • requirements.txt:Python依赖关系

使用示例

与Claude Desktop一起使用

  1. 安装克劳德桌面 从 claude.ai/下载
  2. 克隆此存储库:
    git clone https://github.com/adamanz/esign-mcp.git
    cd esign-mcp
    
  3. 安装依赖项:
    uv pip install -r requirements.txt
    
  4. 配置Claude桌面 通过编辑配置文件:

配置文件的位置:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 视窗: %APPDATA%\Claude\claude_desktop_config.json

配置:

{
  "mcpServers": {
    "esign-mcp": {
      "command": "uv",
      "args": [
        "run", 
        "python", 
        "/ABSOLUTE/PATH/TO/esign-mcp/mcp_server.py"
      ]
    }
  }
}
  1. 重新启动克劳德桌面 加载MCP服务器
  2. 查找MCP工具 -你应该看到一个🔨 指示可用工具的锤子图标

使用Claude代码

  1. 安装Claude代码 (如果尚未安装)
  2. 克隆此存储库 在您的项目目录中:
    git clone https://github.com/adamanz/esign-mcp.git
    cd esign-mcp
    uv pip install -r requirements.txt
    
  3. 启动MCP服务器 在您的终端中:
    uv run python mcp_server.py
    
  4. 克劳德密码,MCP服务器在stdio模式下运行时将被自动检测到
  5. 使用工具 直接在您与Claude Code的对话中

与光标一起使用

  1. 安装游标 从 cursor.sh
  2. 设置MCP服务器 通过将其添加到您的项目中:
    git clone https://github.com/adamanz/esign-mcp.git
    cd esign-mcp
    uv pip install -r requirements.txt
    
  3. 配置光标 通过创建或编辑光标MCP配置来使用MCP服务器
  4. 运行服务器:
    uv run python mcp_server.py
    
  5. 访问工具 通过Cursor的AI助手界面

替代方案:不使用紫外线

如果你更喜欢使用标准pip:

git clone https://github.com/adamanz/esign-mcp.git
cd esign-mcp
pip install -r requirements.txt
python mcp_server.py

更新配置以使用 python 而不是 uv run python.

工具调用示例

获取PDF信息:

{
  "tool": "get_pdf_info",
  "arguments": {
    "pdf_data": "JVBERi0xLjQK..."
  }
}

签署PDF:

{
  "tool": "sign_pdf",
  "arguments": {
    "pdf_data": "JVBERi0xLjQK...",
    "signature_data": "iVBORw0KGgoAAAA...",
    "page_number": 1,
    "x": 100,
    "y": 100,
    "width": 125,
    "height": 40,
    "add_date": true
  }
}

实际使用示例

一旦您的MCP服务器运行,您就可以使用自然语言与PDF签名工具进行交互:

对话示例:

  1. 获取PDF信息:

    “我有一个PDF文件。你能告诉我它有多少页,尺寸是多少吗?”

    AI会要求您提供PDF文件,然后使用 get_pdf_info 工具来分析它。

  2. 签署PDF:

    “我需要在第一页签署这份PDF合同。你能在右下角添加我的签名图片吗?”

    AI将使用 sign_pdf 工具具有适当的坐标,用于右下角放置。

  3. 多个签名:

    请将我的签名添加到此PDF的第2页,位于坐标200、150处,并使其为100x30像素。还要添加今天的日期

    AI将使用精确的坐标并启用日期戳记。

  4. 获取坐标帮助:

    “我想在这份PDF上签名,但我不确定签名的位置。你能帮我理解坐标系吗?”

    AI可以解释PDF坐标,并帮助您选择合适的值。

技术说明

PDF坐标

  • 坐标使用PDF标准单位(1/72英寸)
  • 原点(0,0)位于页面的左下角
  • X向右增加,Y向上增加

支持的图像格式

  • PNG(建议用于透明度支持)
  • JPG/JPEG

文件处理

  • 所有文件操作都使用自动清理的临时文件
  • 输入验证可防止常见错误
  • 使用描述性消息进行正确的错误处理

依赖项

  • fastmcp:用于MCP服务器实现的FastMCP框架
  • pypdf:PDF读写库
  • reportlab:PDF生成和图像放置
  • pillow:图像处理(依赖于reportlab)

故障排除

常见问题

  1. “找不到模块”错误

    # Make sure dependencies are installed
    uv pip install -r requirements.txt
    # Or with pip
    pip install -r requirements.txt
    
  2. MCP服务器未出现在Claude Desktop中

    • 检查路径是否正确 claude_desktop_config.json 是绝对的(不是相对的)
    • 更改配置后重新启动Claude Desktop
    • 检查克劳德桌面日志: ~/Library/Logs/Claude/mcp*.log (macOS)
  3. “找不到命令:uv”

    • 安装紫外线: curl -LsSf https://astral.sh/uv/install.sh | sh
    • 或者使用常规pip:替换 uv run python 随着 python
  4. 权限错误

    # Make sure the script is executable
    chmod +x mcp_server.py
    
  5. PDF签名失败

    • 确保您的PDF和签名图像有效
    • 检查坐标是否在页面边界内
    • 使用 get_pdf_info 首先了解页面尺寸

获取帮助

  • 检查 GitHub问题 常见问题
  • 运行测试脚本以验证安装: uv run python test_server.py
  • 有关Claude Desktop的特定问题,请查看 MCP故障排除指南

许可证

MIT许可证-此项目与原始项目保持相同的许可证 签名pdf 查理·德塔尔的项目。

原始项目

PDF签名的核心功能基于 签名pdf Charlie DeTar的实用程序。这个MCP服务器扩展了这项工作,为现代人工智能集成提供了与MCP兼容的工具。

贡献

  1. 使用提供的测试脚本测试您的更改
  2. 确保正确指定了所有依赖项
  3. 根据需要更新文档
  4. 遵循现有的代码样式和模式