Webhook请求服务

一个支持动态参数的HTTP请求发送服务,适用于多种Webhook场景。

  • by rafabarbosa
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 rafabarbosa/webhook_mcp

使用说明

Webhooks MCP

模型上下文协议 (MCP) 服务器,用于向具有动态参数的 webhooks 发送 HTTP 请求。

功能

  • ✅ 支持所有HTTP方法:GET,POST,PUT,PATCH,DELETE
  • ✅ 任何类型的动态参数(姓名、电子邮件、电话等)
  • ✅ 自定义 HTTP 头
  • ✅ 可配置的超时
  • ✅ 使用 Zod 验证输入
  • ✅ 详细的错误处理
  • ✅ 请求和响应日志

安装

  1. 依赖关系已经安装。如果需要重新安装:
cd webhooks-mcp
npm install
  1. 编译TypeScript:
npm run build

Claude 桌面配置

向文件添加以下配置 claude_desktop_config.json:

{
  "mcpServers": {
    "webhooks": {
      "command": "node",
      "args": ["/Users/rafabarbosa/Desktop/scripts/webhooks-mcp/dist/index.js"]
    }
  }
}

配置文件位置 :

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

使用

可用工具

send_webhook

向具有自定义参数的 webhook 发送 HTTP 请求。

参数 :

  • url (必填): webhook URL (例如:https://meuwebhook.com.br )
  • method HTTP 方法(GET、POST、PUT、PATCH、DELETE)
  • parameters (可选):任何类型的参数对象
  • headers (可选): 额外的 HTTP 标头
  • timeout (可选):超时毫秒(默认值:30000)

使用范例

1. POST用户数据

{
  "url": "https://meuwebhook.com.br/usuarios",
  "method": "POST",
  "parameters": {
    "nome": "João Silva",
    "email": "joao@email.com",
    "telefone": "11999999999",
    "idade": 30,
    "ativo": true
  }
}

2.GET com查询参数

{
  "url": "https://api.exemplo.com/dados",
  "method": "GET",
  "parameters": {
    "filtro": "ativo",
    "limite": 10,
    "pagina": 1
  }
}

3. 具有自定义标题的PUT

{
  "url": "https://api.exemplo.com/atualizar/123",
  "method": "PUT",
  "parameters": {
    "nome": "João Santos",
    "status": "atualizado"
  },
  "headers": {
    "Authorization": "Bearer token123",
    "X-Custom-Header": "valor"
  }
}

4.删除简单

{
  "url": "https://api.exemplo.com/deletar/123",
  "method": "DELETE"
}

HTTP 方法行为

  • 获取/删除参数作为查询参数发送到URL
  • 张贴/张贴/修补参数以JSON形式发送到请求的主体

错误处理

MCP 处理不同类型的错误:

  • 校验错误当参数格式不正确时
  • Erros HTTP当 webhook 返回错误状态时(4xx、5xx)
  • 网络错误超时、连接被拒绝等。

开发

可用的脚本

  • npm run build:编译TypeScript
  • npm run dev以 watch 模式编译
  • npm start: 运行编译的服务器

项目结构

webhooks-mcp/
├── src/
│   └── index.ts          # Servidor MCP principal
├── dist/                 # Arquivos compilados
├── examples.json         # Exemplos de uso
├── claude_desktop_config.json  # Configuração de exemplo
├── package.json
├── tsconfig.json
└── README.md

正在测试服务器

测试服务器是否正常工作:

# Compilar
npm run build

# Testar execução (pressione Ctrl+C para sair)
node dist/index.js

# Rodar testes automatizados
npm test

# Os exemplos do arquivo examples.json são validados automaticamente por testes automatizados.

日志

服务器生成详细日志 :

  • 已发送的请求(方法、URL、参数)
  • 已收到的回复(状态,回复时间)
  • 上下文详细错误

安全

  • 使用 Zod 严格验证输入
  • 标识 MCP 的用户代理头
  • 可配置的超时以避免无限的请求
  • 在不暴露敏感数据的情况下安全处理错误
  • 网址/网域白名单设置环境变量 WHITELIST_URLS (以逗号分隔)限制允许的目的地。例如:
export WHITELIST_URLS="api.exemplo.com,https://hooks.slack.com"

如果未配置, 则允许任何 URL 。

  • 可配置的日志级别设置环境变量 LOG_LEVEL 为了控制日志的详细性(debug, info, warn, error)。例如:
export LOG_LEVEL="debug"
  • 自动保留定义环境变量 RETRY_ATTEMPTS (试验次数,标准 1)和 RETRY_BASE_DELAY_MS (初始延迟以毫秒为单位,默认值为 500),以便在临时故障时启用指数式备份的自动保留。
export RETRY_ATTEMPTS=3
export RETRY_BASE_DELAY_MS=1000
  • **国际化(i18n)**设置环境变量 LANG 如何 pt (标准) 或 en 接收葡萄牙语或英语的消息。
export LANG=en

错误答案示例

  • 参数校验错误 :
{
  "content": [
    {
      "type": "text",
      "text": "❌ Erro ao enviar webhook!\n\n**Erro:** Erro de validação dos parâmetros\n\n**Detalhes:**\n{...}"
    }
  ],
  "isError": true
}
  • 错误HTTP(例如500):
{
  "content": [
    {
      "type": "text",
      "text": "❌ Erro ao enviar webhook!\n\n**Erro:** Erro HTTP: Request failed with status code 500\n\n**Detalhes:**\n{...}"
    }
  ],
  "isError": true
}
  • 不允许的 URL( 白名单) :
{
  "content": [
    {
      "type": "text",
      "text": "❌ URL não permitida pelo servidor (whitelist).\n\nConsulte o administrador para liberar o domínio ou URL desejada."
    }
  ],
  "isError": true
}

HTTP 标头验证

有些标头会自动验证:

  • Authorization必须是格式 Bearer <token>
  • Content-Type: 必须是 application/json, application/x-www-form-urlencoded 欧点 application/xml

有效的标头示例 :

{
  "headers": {
    "Authorization": "Bearer token123",
    "Content-Type": "application/json"
  }
}

无效的标头示例 :

{
  "headers": {
    "Authorization": "Token 123",
    "Content-Type": "text/plain"
  }
}

常见问题解答

如何设置允许的域名?

设置环境变量 WHITELIST_URLS 以逗号分隔的允许的域名或 URL 列表。

如何启用更详细的日志?

定义 LOG_LEVEL=debug 查看详细日志。

如何自动保持技能?

定义 RETRY_ATTEMPTS e RETRY_BASE_DELAY_MS 如所愿。

如何执行自动化测试?

巴斯塔·罗达尔 npm test 项目的根源。

如何报告错误或建议改进?

在GitHub仓库中打开一个问题。

下一步

  1. 配置o克劳德桌面向文件添加配置 claude_desktop_config.json
  2. 重新设计克劳德桌面: 装入新配置
  3. 测试 MCP使用 Claude 发送具有不同参数的 webhook

实际实例

查看文件 examples.json 有关如何在不同场景中使用 MCP 的详细示例:

  • 用户注册
  • 与CRM集成
  • Slack 通知
  • 付款处理
  • 还有更多!

部署com Docker

您可以使用Docker轻松运行MCP:

docker build -t webhook-mcp .
docker run --rm -p 3000:3000 \
  -e WHITELIST_URLS="api.exemplo.com" \
  -e LOG_LEVEL=info \
  -e RETRY_ATTEMPTS=3 \
  webhook-mcp

根据需要调整环境变量。

CLI交互

您可以通过终端手动测试 webhooks:

npx ts-node src/cli.ts

按照提示输入 URL、方法、参数和标题。