使用说明
Gorgias MCP服务器
一个MCP服务器,向人工智能助手公开整个Gorgias帮助台API。
这是什么?
Gorgias MCP服务器是一个 模型上下文协议 该服务器允许人工智能助手Claude和任何其他兼容MCP的客户端完全访问Gorgias帮助台平台。它与 112工具:3个处理最常见工作流的高级“智能”工具,以及109个涵盖每个Gorgias REST端点的原始API工具。
将其连接到Claude Desktop(或任何MCP客户端),您可以搜索工单、阅读对话、提取分析、管理客户,并通过自然语言操作整个帮助台。
示例用法
你: 上周我们买了几张票?
克劳德使用
gorgias_smart_stats上周你收到了142张票,比前一周下降了12%。 热门渠道:电子邮件(89)、聊天(31)、电话(22)。
你: 给我看看关于退款的未决问题
克劳德使用
gorgias_smart_search找到8张符合“退款”条件的未结门票:
- #4521--“未收到退款”(爱丽丝·约翰逊,2天前)
- #4518--“商品错了,想要退款”(鲍勃·史密斯,3天前)
- ...
你: 4521号票中的对话是什么?
克劳德使用
gorgias_smart_get_ticket票#4521-“未收到退款”(打开,普通优先级) 客户爱丽丝·约翰逊(alice@example.com),分配给Sarah
- 3月24日,爱丽丝(客户): “嗨,我两周前退回了订单,但还没有收到退款……”
- 3月24日,Sarah(经纪人): “我可以看到您的退货已收到。让我检查退款状态……”
- 3月25日,爱丽丝(客户): “有更新吗?”
智能工具
这三个智能工具是主要接口。它们组成多个API调用,缓存引用数据,并将项目响应转换为干净的LLM友好格式。
| 工具 | 说明 |
|---|---|
gorgias_smart_search |
多策略门票搜索。自动检测电子邮件、工单ID(#12345)、客户名称、视图名称和主题关键字。通过逐步扩大搜索策略来最大限度地提高结果质量。 |
gorgias_smart_get_ticket |
检索带有完整对话线程的票证。并行获取票证和消息,按时间顺序排序,并投影到精简到基本字段的紧凑格式中。 |
gorgias_smart_stats |
具有自动默认值、输入验证、维度解析和代理名称到ID解析的分析。涵盖音量、性能、质量、自动化、语音和故障范围。 |
这些可以处理80%的常见用例。109个原始工具为其他一切提供了直接的API访问--批量操作、自定义字段管理、规则配置等等。
安装
需要Node.js 20或更高版本。(节点18于2025年4月达到生命周期终点。)
npm install -g gorgias-mcp-server
或者直接使用npx运行:
npx gorgias-mcp-server
配置
需要三个环境变量:
| 变量 | 描述 | 示例 |
|---|---|---|
GORGIAS_DOMAIN |
您的Gorgias子域或完整URL | mycompany 或 mycompany.gorgias.com |
GORGIAS_EMAIL |
API用户的电子邮件地址 | admin@mycompany.com |
GORGIAS_API_KEY |
REST API密钥 | a1b2c3d4e5f6... |
获取API密钥
- 登录您的Gorgias帮助台
- 首选 设置 > REST API
- 点击 添加REST API密钥
- 复制生成的密钥
服务器接受灵活的域格式: mycompany, mycompany.gorgias.com,或 https://mycompany.gorgias.com 所有工作。
访问级别
控制哪些工具暴露在AI中 GORGIAS_ACCESS_LEVEL:
| 级别 | 工具 | 用例 |
|---|---|---|
readonly |
50个工具(全部为读取/搜索/列表/智能工具) | 分析机器人、仪表板、监控 |
agent |
61个工具(只读+回复、关闭、标记、重新分配) | 面向客户的支持聊天机器人 |
admin |
所有112个工具(默认) | 内部管理工具,API完全访问 |
GORGIAS_ACCESS_LEVEL=readonly # Only read operations exposed
GORGIAS_ACCESS_LEVEL=agent # Read + support agent workflow
GORGIAS_ACCESS_LEVEL=admin # Full access (default if not set)
这 代理 层允许聊天机器人:创建工单、回复客户、更新消息、更新工单状态/优先级/受让人、管理工单标签和自定义字段,以及更新客户字段值。它阻止:删除、帐户设置、规则、宏、集成、用户管理和团队管理。
未在给定访问级别注册的工具对AI来说是完全不可见的——它无法看到或调用它们。
MCP客户端设置
克劳德桌面版
将以下内容添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"gorgias": {
"command": "npx",
"args": ["gorgias-mcp-server"],
"env": {
"GORGIAS_DOMAIN": "mycompany",
"GORGIAS_EMAIL": "admin@mycompany.com",
"GORGIAS_API_KEY": "your-api-key-here",
"GORGIAS_ACCESS_LEVEL": "agent"
}
}
}
}
配置文件位于:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json - 视窗:
%APPDATA%\Claude\claude_desktop_config.json
克劳德代码(CLI)
使用将服务器添加到项目中 claude mcp add-json:
claude mcp add-json gorgias '{
"command": "npx",
"args": ["gorgias-mcp-server"],
"env": {
"GORGIAS_DOMAIN": "mycompany",
"GORGIAS_EMAIL": "admin@mycompany.com",
"GORGIAS_API_KEY": "your-api-key-here",
"GORGIAS_ACCESS_LEVEL": "readonly"
}
}' -s project
这创建了一个 .mcp.json 项目根目录中的文件。您还可以在用户范围内添加它 -s user.
或者,创建 .mcp.json 在项目根目录中手动:
{
"mcpServers": {
"gorgias": {
"command": "npx",
"args": ["gorgias-mcp-server"],
"env": {
"GORGIAS_DOMAIN": "mycompany",
"GORGIAS_EMAIL": "admin@mycompany.com",
"GORGIAS_API_KEY": "your-api-key-here",
"GORGIAS_ACCESS_LEVEL": "readonly"
}
}
}
}
注: 您还可以使用
claude mcp add直接。所有旗帜(--transport,--env,--scope)一定要来 之前 服务器名称,以及--将名称与命令分开:claude mcp add --transport stdio --scope project \ --env GORGIAS_DOMAIN=mycompany \ --env GORGIAS_EMAIL=admin@mycompany.com \ --env GORGIAS_API_KEY=your-api-key-here \ --env GORGIAS_ACCESS_LEVEL=readonly \ gorgias -- npx gorgias-mcp-server对于大多数用户来说,
claude mcp add-json(如上所示)更简单。
注: 如果在会话中添加MCP服务器,可能需要重新启动Claude Code(
/quit并重新启动),以便工具出现。验证与的连接claude mcp list.
程序化使用(Web应用程序和聊天机器人)
该包导出a createGorgiasServer() 工厂,用于嵌入到您自己的应用程序中。这就是如何将Gorgias MCP集成到web应用程序聊天机器人后端。
npm install gorgias-mcp-server @modelcontextprotocol/sdk
Express/Node.js
import express from "express";
import { randomUUID } from "node:crypto";
import { createGorgiasServer } from "gorgias-mcp-server";
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
const app = express();
app.use(express.json());
// Create a transport and server per session
const sessions = new Map<string, StreamableHTTPServerTransport>();
// Production: add authentication, CORS, and rate limiting to this endpoint.
app.post("/mcp", async (req, res) => {
const sessionId = req.headers["mcp-session-id"] as string | undefined;
if (sessionId && sessions.has(sessionId)) {
// Existing session — route to its transport
await sessions.get(sessionId)!.handleRequest(req, res, req.body);
return;
}
// New session — create a server locked to the "agent" tier
const server = createGorgiasServer({
domain: process.env.GORGIAS_DOMAIN!,
email: process.env.GORGIAS_EMAIL!,
apiKey: process.env.GORGIAS_API_KEY!,
accessLevel: "agent",
});
const transport = new StreamableHTTPServerTransport({
sessionIdGenerator: () => randomUUID(),
});
transport.onclose = () => {
if (transport.sessionId) sessions.delete(transport.sessionId);
};
await server.connect(transport);
if (transport.sessionId) sessions.set(transport.sessionId, transport);
await transport.handleRequest(req, res, req.body);
});
app.listen(3000);
无状态(无服务器/边缘)
对于无法维护内存会话的无服务器环境:
import { createGorgiasServer } from "gorgias-mcp-server";
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
// Conceptual pattern — adapt to your framework's handler signature.
// Maps to: Vercel (req, res), Netlify/AWS Lambda (event, context), Cloudflare Workers (request).
export async function handler(req, res) {
const server = createGorgiasServer({
domain: process.env.GORGIAS_DOMAIN!,
email: process.env.GORGIAS_EMAIL!,
apiKey: process.env.GORGIAS_API_KEY!,
accessLevel: "readonly",
});
const transport = new StreamableHTTPServerTransport({
sessionIdGenerator: undefined, // stateless mode
});
await server.connect(transport);
await transport.handleRequest(req, res, req.body);
}
出口API
import {
createGorgiasServer, // Factory — returns a configured McpServer
type GorgiasServerConfig,
type AccessLevel, // "readonly" | "agent" | "admin"
type AccessFilterStats, // { registeredCount, skippedCount }
type GorgiasClientConfig,
isToolAllowed, // Check if a tool passes an access level
getAccessFilterStats, // Read tool registration counts from a server
AGENT_WRITE_TOOLS, // Set of tool names allowed in agent tier
GorgiasError, // Base error class
GorgiasApiError, // API-specific error (status, endpoint, body)
} from "gorgias-mcp-server";
可用工具
112种工具按类别排列:
| 类别 | 计数 | 描述 |
|---|---|---|
| 智能工具 | 3 | 智能搜索、票务详情和分析 |
| 门票 | 13 | 列出、获取、创建、更新、删除工单;管理门票上的标签和自定义字段 |
| 客户 | 12 | 列出、获取、创建、更新、删除客户;合并客户;管理数据和字段值 |
| 消息 | 6 | 按票证列出消息,列出所有消息,获取、创建、更新、删除 |
| 标签 | 7 | 完全CRUD、批量删除和标签合并 |
| 视图 | 7 | 全CRUD;列出和搜索视图项 |
| 报告 | 1 | 检索报告数据(旧统计端点已被删除) |
| 用户 | 5 | 用户管理和查找 |
| 团队 | 5 | 团队管理 |
| 规则 | 6 | 自动化规则CRUD和管理 |
| 宏 | 7 | 宏模板CRUD和管理 |
| 集成 | 5 | 集成配置和管理 |
| 自定义字段 | 5 | 自定义字段定义CRUD |
| 满意度调查 | 4 | 调查配置和结果 |
| 乔布斯 | 5 | 后台作业跟踪和管理 |
| 事件 | 2 | 事件检索 |
| 语音通话 | 7 | 语音通话管理和记录 |
| 小部件 | 5 | 聊天小部件配置 |
| 搜索 | 1 | 原始全文搜索 |
| 账户 | 4 | 帐户设置和配置 |
| 文件 | 2 | 文件上传和管理 |
术语和行业优化
智能工具使用主题关键字检测将查询路由到正确的搜索策略。默认关键字集针对澳大利亚、美国和英国的电子商务客户支持进行了优化,涵盖了运营商、地区拼写、支付提供商、税务条款、消费者法律机构和150多个常见的电子商务术语。
要为其他行业(如SaaS、医疗保健、金融)进行定制,请编辑 TOPIC_KEYWORDS 开始 src/tools/smart-search.ts。关键字应反映客户在联系支持时实际使用的词汇。
安全
- 错误清除器剥离凭证、令牌、供应商API密钥前缀(条纹
sk_live_,松弛xoxb-,GitHubghp_,AWSAKIA…等)、电子邮件地址、内部/环回IP以及所有错误消息到达LLM之前的敏感文件系统路径。 - HTTP客户端强制每个请求超时30秒,并限制
Retry-After标头为60秒,因此停滞或配置错误的上游无法冻结工具调用。 - 访问级别(
readonly,agent,admin)控制哪些工具暴露在外。开始readonly除非需要写访问。 默认值为admin如果GORGIAS_ACCESS_LEVEL未设置 --明确地将其设置为生产。 - 在
agent模式,AI 能 发送面向客户的消息并修改工单。在启用它之前,请确保这是故意的。 - 客户数据(工单消息、姓名、电子邮件地址)作为正常MCP操作的一部分传递给LLM。如果您处理敏感数据,请将其纳入合规性审查。
- 引用数据(用户、标签、视图、自定义字段、团队)在进程内缓存10分钟,以减少API调用。缓存为per-
GorgiasClient实例,并存在于普通进程内存中。重新启动服务器以刷新。 - 永远不要承诺你的
GORGIAS_API_KEY源代码控制。使用环境变量或秘密管理器。
故障排除
Missing required environment variables
集 GORGIAS_DOMAIN, GORGIAS_EMAIL,以及 GORGIAS_API_KEYThe domain 接受 mycompany, mycompany.gorgias.com,或 https://mycompany.gorgias.com.
401 Unauthorized / Authentication failed
- 验证电子邮件是否与创建API密钥的用户帐户匹配(设置>REST API)。
- 验证API密钥未被旋转或撤销。
- 确认
GORGIAS_DOMAIN匹配密钥发放的租户。
403 Forbidden
- Gorgias REST API被封闭到特定的计划层。在Gorgias管理UI中检查您的帐户计划。
- API密钥背后的用户可能没有访问资源的权限(例如,某些端点需要管理员角色)。
429 Rate limited by Gorgias API
HTTP客户端以指数回退(1s/2s/4s,加上抖动)自动重试429个响应,最多3次,以尊重上游 Retry-After 头球以60秒为上限。如果在内置重试后仍然看到持续的429错误,那么您已经超过了租户的漏桶预算——放慢速度或等待几分钟。
MCP客户端中未显示工具
- 完全退出并重新启动Claude Desktop或您的IDE——大多数客户端只在重新启动时重新读取MCP配置。
- 通过检查客户端的MCP日志来验证服务器是否实际启动。服务器日志
Gorgias MCP server started — N tools registered (access level: …)到stderr。 - 确认
GORGIAS_ACCESS_LEVEL不会无意中设置为readonly(它隐藏了每个写入工具)。 - 检查
claude mcp list(Claude Code CLI)确认注册。
域格式错误
接受的格式: mycompany, mycompany.gorgias.com, https://mycompany.gorgias.com.平原 http:// 被拒绝。空白、空字符串和内部空格将在请求时失败。SSRF主机名分配列表强制执行 *.gorgias.com --非Gorgias主机、原始IP和易混淆的尾随标签旁路在启动时被拒绝。
Maximum allowed period size is 366 days (智能启动/报告)
Gorgias报告API强制执行每个请求366天的最大范围。将较长的查询拆分为多个窗口。
smart_status结果为空或小得令人惊讶
该工具将每个查询限制为100行。多代理+每日粒度查询速度如此之快(例如30天×4个代理=120行)。粒度更粗(week 或 month),缩短日期范围,或使用 gorgias_retrieve_reporting_statistic 用于分页原始访问。
建筑
- 智能工具组成 --智能工具通过缓存、响应投影和模糊匹配来协调多个API调用,以提供简洁、相关的结果。
- 错误清除 --在向LLM公开之前,所有错误都会被删除敏感数据(凭据、内部URL、供应商API密钥、电子邮件地址)。步行
error.cause链条最深可达5层。 - SSRF主机名分配列表 --
buildBaseUrl验证解析的主机名是否为*.gorgias.com,拒绝非Gorgias主机、原始IP和易混淆的旁路。 - 内存TTL缓存 --引用数据(用户、标签、视图)缓存10分钟,以减少多步骤工作流期间的API调用。
- 费率限制处理 --尊重Gorgias漏桶速率限制器,具有自动指数回退(1s/2s/4s+抖动)功能。大写字母
Retry-After60秒。
发展
先决条件
- Node.js>=20.0.0
脚本
npm run build # Compile TypeScript
npm run dev # Compile in watch mode
npm run lint # Run ESLint
npm run test # Run tests once
npm run test:watch # Run tests in watch mode
项目结构
src/
server.ts # Library entry point — createGorgiasServer() factory
index.ts # CLI entry point (bin) — reads env vars, connects stdio
client.ts # Gorgias API HTTP client
access-control.ts # Access level gating (readonly/agent/admin)
tool-handler.ts # Shared error wrapper for all tool handlers
errors.ts # Custom error types (GorgiasError, GorgiasApiError)
reporting-knowledge.ts # Statistics scope/dimension/measure knowledge base
cache.ts # In-memory TTL cache for reference data
projection.ts # Response projection for LLM-friendly output
error-sanitiser.ts # Strips sensitive data from errors
fuzzy-match.ts # Fuzzy name matching for smart tools
tools/ # One module per API category + smart tools
致谢
最初灵感来自 mattcoatsworth/Gorgias MCP服务器.
免责声明
这是一个非官方的社区建设项目,与Gorgias股份有限公司无关、不受其认可或支持。
许可证
麻省理工学院