Apache管理服务器

一个兼容MCP的服务器,通过SSE + HTTP提供Apache站点管理功能(列表、启用/禁用、测试、重新加载、重启),包括API密钥认证以控制访问。

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

使用说明

Apache 管理 MCP 服务器(SSE 传输)

一个小型的MCP兼容服务器,通过SSE+HTTP暴露Apache网站管理功能(列出、启用/禁用、测试、重新加载、重启)。包含API密钥认证以控制访问。

这个仓库托管着 apache-mcp-sse.py — 一个基于Starlette/uvicorn的ASGI应用程序,它封装了常见的Apache管理命令,并将它们作为MCP资源和工具呈现出来。

特点

  • 列出网站列表 /etc/apache2/sites-available 并且 /etc/apache2/sites-enabled
  • 读取站点配置文件
  • 通过(某种方式)启用/禁用站点 a2ensite / a2dissite
  • 测试Apache配置并重新加载/重启服务
  • 用于MCP客户端连接的SSE传输
  • API密钥认证(头部: X-API-Key)
  • 已启用CORS(默认:允许所有来源)

先决条件

  • Linux(采用Debian/Ubuntu风格的Apache布局)
  • Python 3.12+(项目要求) >=3.12)
  • sudo 权限以运行 a2ensite, a2dissite, apache2ctl,以及 service apache2 命令
  • UV包管理器(不使用pip)

安装 uv(一次性操作):

# Linux/macOS (from Astral)
curl -LsSf https://astral.sh/uv/install.sh | sh

# Verify
uv --version

项目布局

  • apache-mcp-sse.py — MCP的主SSE + HTTP服务器
  • apache-rest-api.py — 可选的 REST/FastAPI 版本(如果您更喜欢使用 REST 而不是 SSE)
  • pyproject.toml — 项目元数据和依赖项(fastapi, httpx, mcp[cli]等

使用 uv 进行设置(无需 pip)

同步项目环境自 pyproject.toml:

# Create/refresh a project-local virtualenv and install dependencies
uv sync

如果你计划使用SSE服务器(apache-mcp-sse.py)并且它缺少你系统中的运行时依赖项 pyproject.toml,用紫外线(一次)照射它们:

# Only if needed
uv add starlette uvicorn

注:该项目已列出 mcp[cli], fastapi,以及 httpxSSE服务器使用 starlette 并且 uvicorn 在运行时。

运行服务器(uv)

设置一个API密钥(推荐)或让服务器在启动时自动生成一个。

# 1) Set a permanent API key (recommended)
export MCP_API_KEY="my-super-secret-key-12345"

# 2) Run the SSE server under uv's environment
uv run python apache-mcp-sse.py

服务器启动时会打印连接信息,包括有效的API密钥(如果已生成)和终端节点。

默认绑定: http://0.0.0.0:8000

终点(或结局指标)

  • GET / — 服务器信息(无需认证)
  • GET /health — 健康检查(无需认证)
  • GET /sse — SSE传输(需要 X-API-Key)
  • POST /messages — MCP消息入口(需要 X-API-Key)

🔐 API密钥认证使用

设定 MCP_API_KEY 如上文“运行服务器”部分所示(或服务器将在启动时自动生成一个)。

使用curl进行测试

# WITHOUT API key (will fail)
curl http://localhost:8000/sse
# Response: {"error":"Authentication required","message":"Missing X-API-Key header"}

# WITH API key (will work)
curl -H "X-API-Key: my-super-secret-key-12345" \
     http://localhost:8000/sse

# Health check (no auth needed)
curl http://localhost:8000/health

Apache 反向代理(可选)

为了让Apache转发请求并注入API密钥头部,这样客户端就不需要包含它:

<VirtualHost *:80>
    ServerName <domain>

    ProxyPreserveHost On
    ProxyTimeout 3600

    # Pass the API key header
    RequestHeader set X-API-Key "my-super-secret-key-12345"

    SetEnv proxy-nokeepalive 1
    SetEnv proxy-initial-not-pooled 1

    <Location /sse>
        ProxyPass http://127.0.0.1:8000/sse
        ProxyPassReverse http://127.0.0.1:8000/sse
        SetEnv proxy-sendcl 0
        SetEnv proxy-sendchunked 1
    </Location>

    <Location /messages>
        ProxyPass http://127.0.0.1:8000/messages
        ProxyPassReverse http://127.0.0.1:8000/messages
    </Location>

    <Location /health>
        ProxyPass http://127.0.0.1:8000/health
        ProxyPassReverse http://127.0.0.1:8000/health
    </Location>
</VirtualHost>

然后客户端配置可以省略头部信息:

{
  "mcpServers": {
    "apache-manager": {
      "url": "http://test.kraybin.com/sse"
    }
  }
}

生成一个强密码的API密钥

uv run python -c "import secrets; print(secrets.token_urlsafe(32))"

安全特性

  • API密钥要求 /sse 并且 /messages
  • 无需认证即可 /health 和 / (仅信息)
  • 如果未设置,则自动生成密钥
  • 环境变量支持(MCP_API_KEY)
  • 自定义头部名称(X-API-Key)

与MCP Inspector一起使用

服务器为MCP Inspector打印一行信息。您也可以运行:

# Replace host if remote
npx @modelcontextprotocol/inspector http://localhost:8000/sse

添加 X-API-Key 如果未使用注入该头的反向代理,则在检查器(Inspector)UI中显示该头。

可用的MCP工具

  • list_available_sites — 列出以下所有文件 /etc/apache2/sites-available
  • list_enabled_sites — 列出以下所有文件 /etc/apache2/sites-enabled
  • get_site_status — 显示站点的启用状态和配置
  • enable_site — 通过(某种方式)启用一个网站 a2ensite (可选自动重载)
  • disable_site — 通过禁用某个网站 a2dissite (可选自动重载)
  • test_config — 跑 apache2ctl configtest
  • reload_apache — service apache2 reload
  • restart_apache — service apache2 restart

故障排除

  • 权限问题与 a2ensite/a2dissite为服务用户配置sudoers文件,或以具有适当权限的用户身份运行。非交互式sudo可能需要NOPASSWD规则。
  • 通过反向代理使用SSE(服务器发送事件):确保允许长连接并启用分块编码(参见上面的示例)。
  • 空列表:验证标准的Debian/Ubuntu Apache布局是否存在,以及文件是否可读(/etc/apache2/sites-available, /etc/apache2/sites-enabled)。

安全注意事项

  • 保护您的API密钥;它授予对Apache网站配置的控制权并允许重新加载。
  • 在生产环境中,限制CORS(跨源资源共享)/允许的来源,并在反向代理后使用HTTPS。
  • 确保生成的密钥不在共享日志中;如果未提供,则在启动时会打印到标准输出。