Caddy插件开发服务器

用于Caddy Web服务器管理和插件开发的模型上下文协议(MCP)服务器,提供插件创建、构建、测试和部署的全套工具。

  • by Cabooman
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 cabooman/caddy-mcp

使用说明

Caddy MCP服务器

用于Caddy web服务器管理和插件开发的模型上下文协议(MCP)服务器。

入门指南

Claude Code快速入门

  1. 克隆并设置服务器:

    git clone https://github.com/Cabooman/caddy-mcp.git
    cd caddy-mcp
    npm install
    npm run build
    
  2. 安装xcaddy(插件构建所需):

    go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
    
  3. 添加到您的Claude Code MCP配置中:

    {
      "mcpServers": {
        "caddy": {
          "command": "node",
          "args": ["/path/to/caddy-mcp/dist/index.js"]
        }
      }
    }
    
  4. 在Claude Code中尝试一下:

    • 请Claude“创建一个简单的hello world Caddy插件”
    • 观看它如何使用MCP工具生成、构建和配置您的插件
    • 测试示例访问者计数器插件 examples/

30秒内的第一个插件

连接到Claude Code后,请尝试以下操作:

“创建一个名为'hello'的Caddy插件,为所有请求添加自定义标头”

克劳德将:

  1. 生成完整的插件结构
  2. 演示如何使用xcaddy构建它
  3. 提供有效的Caddyfile配置
  4. 解释如何在本地进行测试

特性

插件开发工具

  • caddy_create_plugin:使用适当的Go模块结构创建新的Caddy插件
  • caddy_build_plugin:使用xcaddy使用自定义插件构建Caddy
  • caddy_dev_server:使用测试插件启动开发服务器

生产部署工具

  • caddy_deploy_plugin:通过自动备份将插件安全部署到生产环境
  • caddy_backup_list:管理Caddy二进制备份(备份、还原、列表)
  • caddy_validate_config:验证Caddy配置文件

安装

  1. 安装依赖项:
npm install
  1. 构建服务器:
npm run build
  1. 安装xcaddy(插件构建所需):
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest

用法

作为MCP服务器

添加到MCP客户端配置中:

{
  "mcpServers": {
    "caddy": {
      "command": "node",
      "args": ["/path/to/caddy-mcp-server/dist/index.js"]
    }
  }
}

插件开发工作流程

  1. 创建新插件:

    caddy_create_plugin:
    - name: "myplugin"
    - directory: "./plugins"
    - module_path: "github.com/user/myplugin"
    - description: "My custom Caddy plugin"
    
  2. 使用您的插件构建Caddy:

    caddy_build_plugin:
    - plugin_path: "./plugins/myplugin"
    - output_path: "./caddy-custom"
    
  3. 启动开发服务器:

    caddy_dev_server:
    - caddy_binary: "./caddy-custom"
    - config_file: "./Caddyfile"
    - port: 8080
    

工具参考

caddy_create_plugin

创建具有正确Go模块结构的新Caddy插件。

参数:

  • name (必填):插件名称
  • directory (必填):应创建插件的目录
  • module_path (必填):转到模块路径(例如github.com/user/plugin)
  • description:插件描述
  • author:插件作者(默认:“Claude Code”)

生成的文件:

  • main.go:主要入口点
  • plugin.go:使用中间件处理程序实现插件
  • go.mod:Go模块文件
  • README.md:文件
  • Caddyfile.example:配置示例

caddy_build_plugin

使用xcaddy使用自定义插件构建Caddy。

参数:

  • plugin_path (必填):插件目录的路径
  • output_path:生成的Caddy二进制文件的输出路径(默认值:“./cady”)
  • caddy_version:用于构建的Caddy版本(默认:“最新”)

要求:

  • 必须安装xcaddy
  • 插件目录必须包含有效的go.mod文件

caddy_dev_server

使用自定义插件启动Caddy开发服务器。

参数:

  • caddy_binary:带有插件的Caddy二进制文件的路径(默认:“./cady”)
  • config_file:Caddyfile或JSON配置的路径
  • port:运行服务器的端口(默认值:8080)
  • admin_port:管理API端口(默认值:2019)

caddy_deploy_plugin

通过构建并用自动备份替换Caddy二进制文件,将插件安全地部署到生产环境中。

参数:

  • plugin_path (必填):要部署的插件目录的路径
  • caddy_binary:要替换的当前Caddy二进制文件的路径(默认值:“/usr/bin/Caddy”)
  • backup_dir:存储当前二进制文件备份的目录(默认:“/opt/cardy/backups”)
  • validate_config:使用新二进制文件验证的Caddyfile路径

安全特性:

  • 使用时间戳自动备份当前二进制文件
  • 部署前验证配置(如果提供了配置)
  • 使用xcaddy使用插件构建新的二进制文件
  • 提供清晰的重启说明

caddy_backup_list

管理Caddy二进制备份以实现安全回滚。

参数:

  • action (必填):“备份”、“还原”或“列表”
  • caddy_binary:Caddy二进制文件的路径(默认:“/usr/bin/Caddy”)
  • backup_dir:包含备份的目录(默认:“/opt/cardy/backups”)
  • restore_name:要还原的备份名称(还原操作所需)

行动:

  • 备份:创建当前二进制文件的带时间戳的备份
  • 列表:显示所有可用的备份及其日期和大小
  • 恢复:从特定备份还原

caddy_validate_config

验证Caddy配置文件语法。

参数:

  • config_file (必填):要验证的Caddyfile或JSON配置的路径
  • caddy_binary:用于验证的Caddy二进制文件的路径(默认值:“Caddy”)

特征:

  • 在不启动服务器的情况下测试配置语法
  • 适用于自定义Caddy二进制文件(带插件)
  • 显示无效配置的详细错误消息

生产部署工作流

将插件部署到Homelab

  1. 开发和测试你的插件:

    caddy_create_plugin: Create plugin structure
    caddy_build_plugin: Build and test locally
    caddy_dev_server: Test with development server
    
  2. 部署前验证:

    caddy_validate_config:
    - config_file: "/etc/caddy/Caddyfile"
    - caddy_binary: "./caddy-with-plugin"
    
  3. 安全部署:

    caddy_deploy_plugin:
    - plugin_path: "./my-plugin" 
    - caddy_binary: "/usr/bin/caddy"
    - backup_dir: "/opt/caddy/backups"
    - validate_config: "/etc/caddy/Caddyfile"
    
  4. 重新启动Caddy服务:

    sudo systemctl restart caddy
    # OR
    docker-compose restart caddy
    
  5. 如果出了什么问题:

    caddy_backup_list:
    - action: "list"  # Find the backup to restore
    
    caddy_backup_list:
    - action: "restore"
    - restore_name: "caddy-backup-2024-08-22T10-30-00-000Z"
    

插件模板

生成的插件模板包括:

  • HTTP中间件处理程序:处理HTTP请求
  • Caddyfile指令:可通过Caddyfile配置
  • JSON配置:支持JSON配置格式
  • 适当的接口:实现Caddy的配置器、验证器和解组器接口

Caddyfile中的示例用法:

example.com {
    myplugin {
        message "Hello from my plugin!"
    }
    respond "Server is running"
}

发展

# Install dependencies
npm install

# Build
npm run build

# Development with watch
npm run dev

# Start server
npm start

# Run tests
npm test

例子

请参阅 examples/ 示例Caddy插件的目录:

  • 访客柜台:一个统计和显示网站访问者的插件

需求

  • Node.js 18+
  • 转到1.21+
  • xcaddy(用于构建插件)

许可证

麻省理工学院