使用说明
谷歌聊天Webhook MCP服务器
一个MCP(模型上下文协议)服务器,通过webhooks向谷歌聊天发送消息。通过图像验证、结构化日志记录和回退处理,自动将Markdown转换为Google Chat Cards V2格式。
特性
- 🚀 MCP协议支持:与Claude Code、GitHub Copilot和其他MCP客户端集成
- � MCP协议支持:与Claude Code、GitHub Copilot和其他MCP客户端集成
- �📝 Markdown→ 卡片V2自动转换:支持标头、列表、代码块、表、图像等
- 🖼️ 图像URL验证:使用HEAD请求进行验证(HTTP状态、内容类型、大小)
- 🔄 自动回退:当Cards V2失败时,自动回退到文本
- 📊 结构化日志记录:JSON格式,保留30天
- ✅ 测试自动化:快照测试、集成测试、CI/CD管道
安装
npm(推荐)
npm install -g google-chat-webhook-mcp
来源(发展)
git clone https://github.com/ice3x2/google-chat-webhook-mcp.git
cd google-chat-webhook-mcp
npm install
npm run build
谷歌聊天Webhook设置
在配置MCP服务器之前,请创建一个Google Chat Webhook URL:
- 打开您的谷歌聊天空间
- Menu → “应用程序和集成”→ “管理webhooks”
- 点击“添加webhook”
- 输入名称,然后 复制URL
- 在下面的配置中使用它
MCP客户端配置
1.克劳德密码
配置文件位置
- 视窗:
%USERPROFILE%\.claude.json - macOS/Linux:
~/.claude.json
备注:Claude Desktop使用不同的路径:
- 窗户:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
npm安装
{
"mcpServers": {
"google-chat": {
"command": "npx",
"args": ["-y", "google-chat-webhook-mcp"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx"
}
}
}
}
源安装
{
"mcpServers": {
"google-chat": {
"command": "node",
"args": ["C:\\path\\to\\google-chat-webhook-mcp\\dist\\index.js"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx"
}
}
}
}
⚠️ 备注:使用 \\ 或 / 对于Windows路径(例如。, C:/path/to/...)
配置范围
Claude Code支持三种配置范围:
- 用户范围 (全球):
~/.claude.json-适用于所有项目 - 项目范围 (共享):
.mcp.json在项目根目录中-版本受控,团队共享 - 本地范围 (私人):项目特定的个人设置
优先:本地>项目>用户
项目范围配置(.mcp.json)
对于团队共享的MCP服务器,创建 .mcp.json 在项目根目录中:
{
"mcpServers": {
"google-chat": {
"command": "npx",
"args": ["-y", "google-chat-webhook-mcp"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "${GOOGLE_CHAT_WEBHOOK_URL}"
}
}
}
}
益处:
- ✅ 版本由Git控制
- ✅ 团队共享配置
- ✅ 环境变量支持:
${VAR}或${VAR:-default} - ✅ 特定于项目的MCP服务器
环境变量:每个团队成员都可以设置自己的webhook URL:
# Linux/macOS
export GOOGLE_CHAT_WEBHOOK_URL="https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx"
# Windows (PowerShell)
$env:GOOGLE_CHAT_WEBHOOK_URL="https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx"
如何申请
用户范围配置 (~/.Claude.JSON):
- 编辑
~/.claude.json(或%USERPROFILE%\.claude.json在Windows上) - 保存文件
- 如果已经运行,请重新启动Claude代码
项目范围配置 (.mcp.json):
- 创建
.mcp.json在项目根中 - 为敏感数据设置环境变量
- 提交
.mcp.json到版本控制 - 使用“向谷歌聊天室发送消息”等命令
2.GitHub副本(VS代码)
VS代码GitHub副本 通过以下方式支持MCP 代理模式在工作区或用户设置中配置MCP服务器。
配置文件位置
选择以下选项之一:
- 用户设置:
~/.vscode/settings.json或%APPDATA%\Code\User\settings.json(Windows) - 工作区设置:
.vscode/settings.json在项目根目录中 - Claude代码配置 (自动导入):复制自
~/.claude.json
配置(mcp.json格式)
增添 settings.json:
{
"github.copilot.chat.mcp.servers": {
"google-chat": {
"command": "npx",
"args": ["-y", "google-chat-webhook-mcp"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx"
}
}
}
}
特性
- 代理模式集成:代理工作流中提供MCP工具
- 每次会话工具选择:选择每个会话启用哪些工具
- STDIO和SSE支持:支持两种运输类型
- 调试:内置重启命令和输出日志
与代理模式一起使用
- 在VS代码中打开GitHub Copilot聊天
- 启用代理模式(如果尚未启用)
- 开始对话-副驾驶将自动访问MCP工具
- 工具在执行前需要批准
例子:
@workspace Send a deployment summary to Google Chat
📝 备注GitHub Copilot的MCP支持包括代理模式,允许复杂的工作流程。确保您使用的是最新的VS Code和GitHub Copilot扩展。
3.其他MCP客户端
适用于任何兼容MCP的客户端:
{
"command": "npx",
"args": ["-y", "google-chat-webhook-mcp"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "your-webhook-url"
}
}
用法
MCP工具(3个工具)
Claude Code或其他MCP客户端中的可用工具:
1. send_google_chat_text
发送简单的短信
示例(克劳德代码):
Send "Hello from Claude!" to Google Chat
参数:
{
"text": "Hello, Google Chat!"
}
2. send_google_chat_cards_v2
直接发送V2格式的卡片(高级用户)
参数:
{
"text": "Card Message",
"cardsV2": [
{
"cardId": "unique-card",
"card": {
"header": { "title": "Card Title" },
"sections": [
{
"widgets": [
{ "textParagraph": { "text": "Card content" } }
]
}
]
}
}
]
}
3. send_google_chat_markdown ⭐ 推荐
将Markdown转换为Cards V2并发送
示例(克劳德代码):
Send this markdown to Google Chat:
# Project Update
- Task 1: ✅ Completed
- Task 2: 🚧 In Progress
**Deadline**: Tomorrow
参数:
{
"markdown": "# Title\n\n**Bold** and *italic*\n\n- List item 1\n- List item 2\n\n```python\nprint('Hello')\n```",
"cardTitle": "Markdown Message",
"fallbackToText": true
}
选项:
cardTitle:卡片顶部显示的标题(可选)fallbackToText:转换失败时自动以文本形式发送(默认值:false)
Claude代码使用示例
设置后,Claude将在您自然聊天时自动使用MCP工具:
👤 用户:
“向Google聊天室发送项目状态更新。以标记列表的形式显示3个已完成的任务和2个正在进行的任务。”
🤖 克劳德:
(自动呼叫
send_google_chat_markdown工具)我已将消息发送到谷歌聊天室。项目状态已更新。
支持的Markdown语法
用Claude或MCP客户端编写的Markdown会自动转换为Google Chat Cards V2。
| 语法 | Markdown示例 | 谷歌聊天渲染 |
|---|---|---|
| 标头 | # H1, ## H2, ### H3 |
大胆,尺寸不同 |
| 大胆 | **bold** 或 __bold__ |
大胆 |
| 斜体 | *italic* 或 _italic_ |
斜体 |
| 内联代码 | `code` |
code (单空间) |
| 代码块 | ```python\ncode\n``` |
语法突出显示框 |
| 排序列表 | 1. First\n2. Second 1.第一2.第二 |
|
| 无序列表 | - Item 或 * Item |
•项目 |
| 嵌套列表 | - nested (2空格缩进) |
•嵌套(Em空格) |
| 表格 | | A | B |\n|--|--| |
单空间桌 |
| 图像 |  |
图像小部件(验证后) |
| 链接 | [text](https://...) |
可点击链接 |
| 水平线 | --- 或 *** |
分流器 |
| 块引用 | > quote |
缩进+灰色文本 |
Markdown示例:
# Project Deployment Complete 🚀
## Key Changes
- **Performance**: API response 30% faster
- **Bug Fix**: Login error resolved
- New feature added
## Deployment Status
| Environment | Status | Version |
|-------------|--------|---------|
| Production | ✅ | v2.1.0 |
| Staging | ✅ | v2.1.0 |
## Next Steps
1. Monitor for 24 hours
2. Collect user feedback
3. Plan next sprint
Code example:
```python
def deploy():
print("Deploying v2.1.0...")
return True
看 文档 了解详情。
**Result:** Headers, lists, tables, and code blocks are all visually distinguished in Google Chat.
## Environment Variables
### Required
| Variable | Description | Example |
|----------|-------------|---------|
| `GOOGLE_CHAT_WEBHOOK_URL` | Google Chat Webhook URL | `https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx` |
### Optional (Logging)
| Variable | Description | Default | Values |
|----------|-------------|---------|--------|
| `LOG_LEVEL` | Log level | `INFO` | `DEBUG`, `INFO`, `WARN`, `ERROR` |
| `LOG_DIR` | Log directory path | `./logs` | Absolute/relative path |
| `LOG_RETENTION_DAYS` | Days to keep logs | `30` | Number (days) |
| `LOG_ENABLE_CONSOLE` | Enable console output | `true` | `true`, `false` |
### Configuration Methods
#### Claude Code (~/.claude.json)
```json
{
"mcpServers": {
"google-chat": {
"command": "npx",
"args": ["-y", "google-chat-webhook-mcp"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx",
"LOG_LEVEL": "INFO",
"LOG_RETENTION_DAYS": "30"
}
}
}
}
.env文件(开发)
创建 .env 在项目根目录中:
GOOGLE_CHAT_WEBHOOK_URL=https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx
LOG_LEVEL=INFO
LOG_DIR=./logs
LOG_RETENTION_DAYS=30
LOG_ENABLE_CONSOLE=true
局限性
Google Chat API限制
| 项目 | 限制 | 解决方法 |
|---|---|---|
| 图像协议 | 仅HTTPS | HTTP URL已替换为文本链接 |
| 图像大小 | 最大5MB | 验证失败时显示为链接 |
| 图像认证 | 仅限公共URL | 如果需要身份验证,则无法访问 |
| 内容类型 | image/* 仅 |
HTML页面被拒绝 |
| Markdown支持 | 有限 | 近似不支持的语法 |
Markdown转换限制
✅ 完全支持:
- 集管(H1~H6)
- 粗体、斜体、内联代码
- 有序/无序列表(最多3级)
- 代码块(语法高亮显示)
- 表格(单空间)
- 链接、图片
⚠️ 部分支持:
- 复杂的嵌套→ 简体
- HTML标记→ 转换为文本
- 区块链报价→ 显示为凹痕
❌ 不支持:
- 脚注
- 定义列表
- 数学公式(LaTeX)
- 任务复选框(
- [ ],- [x]) - 表情符号快捷方式(
:smile:,Unicode表情符号工作)
常见问题
Q: 图像未显示
A.:图像验证失败的原因:
- 仅限HTTPS (不支持HTTP)
- 文件大小:必须低于5MB
- 公众知情权:必须无需身份验证即可访问
- 内容类型:响应标头必须为
image/*
调试:
cat logs/app-YYYY-MM-DD.log | grep "image_validation_failed"
Q: 卡V2转换失败
A.:使用 fallbackToText 选项:
{
"markdown": "...",
"fallbackToText": true
}
查看日志以了解详细信息:
cat logs/errors-YYYY-MM-DD.log
Q: 日志文件太多
A.:根据环境变量进行调整:
{
"env": {
"LOG_LEVEL": "WARN",
"LOG_RETENTION_DAYS": "7"
}
}
Q: 多个谷歌聊天空间
A.:注册单独的MCP服务器实例:
{
"mcpServers": {
"google-chat-team-a": {
"command": "npx",
"args": ["-y", "google-chat-webhook-mcp"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "https://chat.googleapis.com/.../team-a/..."
}
},
"google-chat-team-b": {
"command": "npx",
"args": ["-y", "google-chat-webhook-mcp"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "https://chat.googleapis.com/.../team-b/..."
}
}
}
}
许可证
MIT许可证- 许可证
链接
韩国人:
通过Google Chat网络钩子向模型上下文协议(MCP)服务器发送消息。自动将Markdown转换为Google Chat Cards V2格式,支持图像验证、自动记录和回退处理。
主要功能
- 🚀 MCP协议支持:与Claude Code、GitHub Copilot等集成
- 📝 Markdown→Cards V2自动转换:支持标题、列表、代码块、表格、图像等
- 🖼️ 验证图像URL:通过HEAD请求验证有效性(HTTP状态、Content-Type、大小)
- 🔄 自动回退:Cards V2失败时自动切换为文本
- 📊 结构化日志记录:JSON格式,30天自动存档
- ✅ 自动化测试:快照测试、集成测试、CI/CD管道
安装
npm安装(建议)
npm install -g google-chat-webhook-mcp
安装源(用于开发)
git clone https://github.com/ice3x2/google-chat-webhook-mcp.git
cd google-chat-webhook-mcp
npm install
npm run build
创建Google Chat Webhook URL
在设置MCP服务器之前,必须先创建Google Chat Webhook URL:
- 打开Google Chat空间
- 顶部菜单→“应用程序和集成”→“Webhook管理”
- 单击“添加Webhook”
- 输入名称后 复制URL
- 在以下设置中使用
MCP客户端设置
1.克劳德密码
设置文件位置
- 视窗:
%USERPROFILE%\.claude.json - macOS/Linux:
~/.claude.json
参考:Claude Desktop使用不同的路径:
- 窗户:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
安装npm时
{
"mcpServers": {
"google-chat": {
"command": "npx",
"args": ["-y", "google-chat-webhook-mcp"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx"
}
}
}
}
安装源时
{
"mcpServers": {
"google-chat": {
"command": "node",
"args": ["C:\\path\\to\\google-chat-webhook-mcp\\dist\\index.js"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx"
}
}
}
}
注意:Windows路径为 \\ 或者 / 使用(例如: C:/path/to/...)
设置镜
Claude Code支持三种设置标记:
- 用户范围 (全局):
~/.claude.json-适用于所有项目 - 项目范围 (共享):项目根目录的
.mcp.json-版本控制,团队共享 - 本地范围 (个人):特定于项目的个人设置
优先级:本地>项目>用户
设置项目级别(.mcp.json)
要与团队共享的MCP服务器设置在项目根目录中 .mcp.json 创建文件:
{
"mcpServers": {
"google-chat": {
"command": "npx",
"args": ["-y", "google-chat-webhook-mcp"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "${GOOGLE_CHAT_WEBHOOK_URL}"
}
}
}
}
优点:
- 可以通过Git进行版本管理
- 与团队共享设置
- 支持环境变量:
${VAR}或者${VAR:-기본값} - 设置项目特定的MCP服务器
设置环境变量:每个团队成员都可以设置自己的Webhook URL:
# Linux/macOS
export GOOGLE_CHAT_WEBHOOK_URL="https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx"
# Windows (PowerShell)
$env:GOOGLE_CHAT_WEBHOOK_URL="https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx"
应用方法
设置User级别 (~/.Claude.JSON):
~/.claude.json编辑(Windows%USERPROFILE%\.claude.json)- 保存文件
- Claude Code正在运行时重新启动
设置项目级别 (.mcp.json):
- 在项目根目录中
.mcp.json生成 - 将敏感数据设置为环境变量
.mcp.json向版本控制系统提交- 使用“Send a message to Google Chat”等命令
2.GitHub副本(VS代码)
VS代码GitHub副本银 代理模式通过支持MCP。可以在工作空间或用户设置中配置MCP服务器。
设置文件位置
选择以下选项之一:
- 用户设置:
~/.vscode/settings.json或者%APPDATA%\Code\User\settings.json(Windows) - 工作空间设置:项目根目录的
.vscode/settings.json - Claude Code设置 (自动导入):
~/.claude.json从复制
如何设置(mcp.json格式)
settings.json添加到:
{
"github.copilot.chat.mcp.servers": {
"google-chat": {
"command": "npx",
"args": ["-y", "google-chat-webhook-mcp"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx"
}
}
}
}
功能
- 代理模式集成:在代理工作流中启用MCP工具
- 选择特定于会话的工具:可以为每个会话选择要激活的工具
- STDIO&SSE支持:支持两种传输方式
- 调试:内置重新启动命令和输出记录
在代理模式下使用
- 在VS Code中打开GitHub Copilot聊天
- 启用代理模式(有时默认启用)
- 开始对话-Copilot自动访问MCP工具
- 工具运行前需要批准
示例:
@workspace 배포 요약을 Google Chat에 전송해줘
📝 参考:GitHub Copilot的MCP支持支持复杂的工作流,包括代理模式。使用最新版本的VS Code和GitHub Copilot扩展。
3.其他MCP客户端
适用于所有支持MCP协议的客户端:
{
"command": "npx",
"args": ["-y", "google-chat-webhook-mcp"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "your-webhook-url"
}
}
1. Google Chat 스페이스 열기
2. 상단 메뉴 → "앱 및 통합" → "Webhook 관리"
3. "Webhook 추가" 클릭
4. 이름 입력 후 URL 복사
5. 환경 변수에 설정
## 사용법
### MCP 도구 (3가지)
Claude Code이나 다른 MCP 클라이언트에서 다음 도구들을 사용할 수 있습니다:
#### 1. `send_google_chat_text`
간단한 텍스트 메시지 전송
**예시 (Claude Code):**
发送“克劳德你好!”到谷歌聊天
**파라미터:**
```json
{
"text": "안녕하세요, Google Chat!"
}
2. send_google_chat_cards_v2
直接以Cards V2格式传输(面向高级用户)
参数:
{
"text": "Card Message",
"cardsV2": [
{
"cardId": "unique-card",
"card": {
"header": { "title": "Card Title" },
"sections": [
{
"widgets": [
{ "textParagraph": { "text": "Card content" } }
]
}
]
}
}
]
}
3. send_google_chat_markdown ⭐ 推荐
自动将Markdown转换为Cards V2并发送
示例(Claude Code):
Send this markdown to Google Chat:
# Project Update
- Task 1: ✅ Completed
- Task 2: 🚧 In Progress
**Deadline**: Tomorrow
参数:
{
"markdown": "# 제목\n\n**굵은 글씨**와 *기울임*\n\n- 리스트 항목 1\n- 리스트 항목 2\n\n```python\nprint('Hello')\n```",
"cardTitle": "마크다운 메시지",
"fallbackToText": true
}
可选:
cardTitle:显示在卡片顶部的标题(可选)fallbackToText:转换失败时自动发送到文本(默认为false)
Claude Code使用示例
设置完成后,使用自然语言与Claude对话时,将自动使用MCP工具:
👤 用户:
“请向Google Chat发送项目状态更新,将完成的3个任务和正在进行的2个任务列为标记列表。”
🤖 克劳德:
(自动
send_google_chat_markdown工具调用)已向Google Chat发送消息。项目状态已更新。
👤 用户:
“把代码示例也添加到刚刚发送的消息中。”
🤖 克劳德:
(再次通过Markdown创建和发送消息)
支持的Markdown语法
在Claude或MCP客户端上使用Markdown创建消息时,它会自动转换为Google Chat Cards V2。
| 语法 | Markdown示例 | Google Chat呈现 |
|---|---|---|
| 标题 | # H1, ## H2, ### H3 |
粗体字+大小差别 |
| 粗体 | **bold** 或者 __bold__ |
大胆 |
| 倾斜 | *italic* 或者 _italic_ |
斜体 |
| 内联代码 | `code` |
code (固定宽度字体) |
| 代码块 | ```python\ncode\n``` |
语法突出显示框 |
| 顺序列表 | 1. First\n2. Second 1.第一2.第二 |
|
| 非顺序列表 | - Item 或者 * Item |
•项目 |
| 嵌套列表 | - nested (缩进2格)•nested(Em space) |
|
| 表 | | A | B |\n|--|--| |
固定宽度字体表 |
| 图像 |  |
图像构件(验证URL后) |
| 链接 | [텍스트](https://...) |
可点击的链接 |
| 水平线 | --- 或者 *** |
分隔线 |
| 引文 | > quote |
缩进+灰色文本 |
示例Markdown:
# 프로젝트 배포 완료 🚀
## 주요 변경사항
- **성능 개선**: API 응답 속도 30% 향상
- **버그 수정**: 로그인 오류 해결
- 새 기능 추가
## 배포 상태
| 환경 | 상태 | 버전 |
|------|------|------|
| Production | ✅ | v2.1.0 |
| Staging | ✅ | v2.1.0 |
## 다음 단계
1. 모니터링 24시간
2. 사용자 피드백 수집
3. 다음 스프린트 계획
코드 예제:
```python
def deploy():
print("Deploying v2.1.0...")
return True
有关详细信息,请访问 文档请参阅。
**변환 결과:** Google Chat에서 헤더, 리스트, 표, 코드블록이 모두 시각적으로 구분되어 표시됩니다.
## 환경 변수
### 필수 환경 변수
| 변수명 | 설명 | 예시 |
|--------|------|------|
| `GOOGLE_CHAT_WEBHOOK_URL` | Google Chat Webhook URL | `https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx` |
### 선택 환경 변수 (로깅)
| 변수명 | 설명 | 기본값 | 허용값 |
|--------|------|--------|--------|
| `LOG_LEVEL` | 로그 레벨 | `INFO` | `DEBUG`, `INFO`, `WARN`, `ERROR` |
| `LOG_DIR` | 로그 디렉토리 경로 | `./logs` | 절대/상대 경로 |
| `LOG_RETENTION_DAYS` | 로그 보관 일수 | `30` | 숫자 (일) |
| `LOG_ENABLE_CONSOLE` | 콘솔 출력 여부 | `true` | `true`, `false` |
### 설정 방법
#### Claude Code (~/.claude.json)
```json
{
"mcpServers": {
"google-chat": {
"command": "npx",
"args": ["-y", "google-chat-webhook-mcp"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx",
"LOG_LEVEL": "INFO",
"LOG_RETENTION_DAYS": "30"
}
}
}
}
.env文件(用于开发)
在项目根目录中 .env 创建文件:
GOOGLE_CHAT_WEBHOOK_URL=https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx
LOG_LEVEL=INFO
LOG_DIR=./logs
LOG_RETENTION_DAYS=30
LOG_ENABLE_CONSOLE=true
系统环境变量
Windows(PowerShell):
$env:GOOGLE_CHAT_WEBHOOK_URL="https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx"
Linux/macOS(Bash/Zsh):
export GOOGLE_CHAT_WEBHOOK_URL="https://chat.googleapis.com/v1/spaces/xxx/messages?key=xxx&token=xxx"
开发
# 의존성 설치
npm install
# 빌드
npm run build
# 개발 모드 (TypeScript 직접 실행)
npm run dev
# Lint 검사
npm run lint
# Lint 자동 수정
npm run lint:fix
# 테스트
npm run test:snapshot # 스냅샷 테스트 (12개)
npm run test:logging # 로깅 시스템 테스트
npm run test:integration # 통합 테스트 (웹훅 필요)
npm test # 전체 테스트
体系结构
src/
├── index.ts # 진입점
├── server.ts # MCP 서버 설정
├── tools/ # MCP 도구
│ ├── sendTextMessage.ts # 텍스트 전송
│ ├── sendCardsV2Message.ts # Cards V2 전송
│ ├── sendMarkdownMessage.ts # Markdown 전송 (메인)
│ └── markdownToCards.ts # Markdown → Cards V2 변환
├── utils/ # 유틸리티
│ ├── imageValidator.ts # 이미지 URL 검증
│ ├── cardsV2Validator.ts # Cards V2 스키마 검증
│ ├── logger.ts # 로깅 시스템
│ └── logCleaner.ts # 로그 정리
└── types/ # 타입 정의
├── markdown.ts
├── googleChat.ts
└── log.ts
记录
日志文件结构
logs/
├── app-2025-10-29.log # 일별 로그 (모든 레벨)
├── errors-2025-10-29.log # 에러 전용 로그
└── ... # 30일 자동 삭제
日志格式(JSON)
{
"timestamp": "2025-10-29T12:34:56.789Z",
"level": "INFO",
"module": "sendMarkdownMessage",
"event": "message_sent",
"messageId": "spaces/xxx/messages/yyy",
"elapsed": 123,
"usedFallback": false,
"cardTitle": "Test Card"
}
日志事件
message_sent:消息发送成功fallback_used:使用回退(Cards V2→Text)image_validation_failed:映像验证失败send_failed:传输失败validation_failed:验证失败
整理日志
- 服务器启动时自动清除(删除30天以上的日志)
- 每24小时自动运行
- 环境变量
LOG_RETENTION_DAYS可以设置为
限制
Google Chat API限制
| 项目 | 限制 | 响应方式 |
|---|---|---|
| 映像协议 | 仅支持HTTPS | HTTP URL将替换为文本链接 |
| 图像大小 | 最大5MB | 验证失败时显示为链接 |
| 映像认证 | 只能公开URL,需要认证时无法访问 | |
| 内容类型 | image/*只允许 |
拒绝HTML页面等 |
| Markdown支持 | 有限的 | 不支持的语法转换为近似值 |
Markdown转换限制
完全支持:
- 标题(H1-H6)
- 粗体、斜体、内嵌代码
- 顺序/非顺序列表(最多嵌套3个步骤)
- 代码块(突出显示语法)
- 表(固定宽度字体)
- 链接,图像
部分支持:
- 复杂的嵌套结构→简化
- HTML标签→转换为文本
- 引文→缩进
不支持:
- 脚注(footnotes)
- 定义列表(Definition lists)
- 数学公式(LaTeX)
- 任务复选框(
- [ ],- [x]) - Emoji快捷代码(
:smile:等,可以进行Unicode聚合)
性能和限制
- 映像验证超时:5秒
- Webhook请求超时:5秒
- 日志文件大小:无限制(30天自动删除)
- 并发请求:无限制(遵守Google Chat API限制)
安全注意事项
⚠️ Webhook URL是敏感信息:
- 不要提交到Git
- 禁止暴露在公共存储库中
- 建议定期再生
.env文件.gitignore必须包括在中
常见问题
问:不显示图像
A.:图像URL验证失败原因:
- 仅支持HTTPS (HTTP不可用)
- 文件大小:必须小于5 MB
- 公开访问:必须是无需身份验证即可访问的URL
- 内容类型:响应头
image/*必须为
调试:
# 로그 확인
cat logs/app-YYYY-MM-DD.log | grep "image_validation_failed"
验证失败时的行为:
- 图像由文本链接替换
- 示例:
⚠️ 이미지 로드 실패: https://... (HTTP 404: Not Found)
问:Cards V2转换失败
A.:请确认:
-
使用fallback ToText选项:
{ "markdown": "...", "fallbackToText": true }转换失败时会自动发送到文本。
-
检查日志中的原因:
cat logs/errors-YYYY-MM-DD.log -
不支持的Markdown语法:
- 脚注(footnotes)
- 定义列表(Definition lists)
- 复杂的HTML标签
问:日志文件堆积太多
A.:调整为环境变量:
{
"env": {
"LOG_LEVEL": "WARN",
"LOG_RETENTION_DAYS": "7"
}
}
LOG_LEVEL=ERROR:仅记录错误LOG_RETENTION_DAYS=7:仅保留7天LOG_ENABLE_CONSOLE=false:禁用控制台输出
问:运行npx时出现“command not found”错误
A.:验证是否安装了Node.js和npm:
node --version # v18.0.0 이상 권장
npm --version
如果未安装:
- 视窗: https://nodejs.org/从下载
- macOS:
brew install node - Linux:
sudo apt install nodejs npm(Ubuntu/Debian)
问:如何安全地管理Webhook URL?
A.:
- 使用环境变量 (不要直接写入配置文件)
- 不要提交到Git (检查gitignore)
- 定期再生 (疑似泄露时)
- 从Google Chat中删除Webhook可通过无效
问:我想向多个Google Chat空间发送消息
A.:为每个空间注册不同的MCP服务器实例:
{
"mcpServers": {
"google-chat-team-a": {
"command": "npx",
"args": ["-y", "google-chat-webhook-mcp"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "https://chat.googleapis.com/.../team-a/..."
}
},
"google-chat-team-b": {
"command": "npx",
"args": ["-y", "google-chat-webhook-mcp"],
"env": {
"GOOGLE_CHAT_WEBHOOK_URL": "https://chat.googleapis.com/.../team-b/..."
}
}
}
}
可以在Claude中使用“Send to team-a”或“Send to team-b”。
CI/CD
通过GitHub Actions实现自动化:
- Node.js 18.x,20.x矩阵构建
- ESLint,构建,测试
- 测试(12个)快照
- 集成测试(master branch)
贡献
欢迎话题和PR!
许可证
MIT许可证- 许可证