Skip to main content
Glama
odiecay

RepairDesk MCP Server

by odiecay

RepairDesk MCP 服务器

一个 MCP(模型上下文协议)服务器,可为任何兼容 MCP 的 AI 助手——Claude Code、Claude Desktop、Codex CLI、OpenCode、Cursor、Windsurf 或任何其他 MCP 客户端——提供对您的 RepairDesk 店铺数据的直接读写访问。将其指向您店铺的 API 密钥,然后就可以开始提问,例如 "查找工单 T-15423"、"发票 8821 上有什么逾期未付",或 "把 iPhone 屏幕维修任务分配给 Dave"。

这不是 RepairDesk 的官方产品——而是一个由 RepairDesk 店铺为 RepairDesk 店铺构建的独立工具。不提供任何担保,使用风险自负(请参阅许可证)——但它每天都在实际运行一家真实维修店的工单队列,而不是一个概念验证。

目录

Related MCP server: RogerRoger MCP Server

您实际可以用它做什么

一旦接入您的 AI 助手,您就可以直接与您的 RepairDesk 数据对话,而无需在网页界面中点击操作。以下是一些真实示例:

前台 / 分诊

  • "查找工单 T-15423" — 完整工单详情:客户、设备、各设备状态、备注。

  • "Sarah Miller 的手机状态如何?" — 按客户姓名/关键词搜索工单。

  • "显示所有待处理或等待零件的工单" — 按状态筛选工单。

  • "Dave 现在分配了什么任务?" — 按技术人员筛选工单。

  • "调出 John 的联系方式" — 按姓名、电话或电子邮件查找客户。

工作流程 / 维修台工作

  • "为 T-15423 添加一条诊断备注:已更换屏幕,电池测试正常"

  • "将工单 T-15490 分配给 Dave"

  • "将 T-15423 标记为已修复" — 服务器会先要求您确认,并提示此状态会在 RepairDesk 中自动触发客户短信/电子邮件。

  • "为这位客户创建一张工单:iPhone 13,更换屏幕" — 同样,在实际创建之前需要确认。

财务 / 管理

  • "上个月还有哪些发票未支付?"

  • "发票 8821 的未结余额是多少?"

  • "我们有 iPhone 13 电池的库存吗?" — 库存搜索。

  • "列出我们所有的技术人员" / "我们设置了哪些支付方式?"

  • "我们配置了哪些维修类别/设备类型?" — 在创建工单或判断某个设备型号在您的系统中是什么时,这是有用的上下文信息。

由于这是通过真正的 AI 助手而非固定仪表板运行的,您可以自然地串联这些操作——"查找所有仍有未结工单的客户的逾期发票"——助手会跨工具自行完成,而无需您手动对照两个屏幕。

工具参考

工具

功能

repairdesk_tickets

按状态/日期/关键词/技术人员搜索工单,或获取单个工单的完整详情(包括各设备状态)

repairdesk_tickets_write

创建工单、更新状态/设备字段、添加内部或诊断备注、分配技术人员

repairdesk_customers

按姓名、电话、电子邮件或 ID 查找客户

repairdesk_invoices

搜索发票、获取单张发票,或检查其未结/到期金额

repairdesk_inventory

按关键词搜索零件库存

repairdesk_employees

列出员工/技术人员

repairdesk_shop_info

参考查询:设备、类别、状态、颜色、网络、税类、支付方式、推荐来源、维修/服务类型、地点、问题(按设备)、以旧换新、采购订单

安全护栏: repairdesk_tickets_write 在应用状态更改之前要求 confirmed: true,并在目标状态是 RepairDesk 会自动通知客户的状态(已修复、待取件、已完成、等待客户、等待报价、已取消)时发出警告。您无需为此做任何事——只需在您的助手转达确认提示时回答"是"即可。

便捷细节: 工单查询/写入接受 RepairDesk 的订单 ID 格式(T-15423)或内部数字工单 ID——您无需知道自己拥有的是哪一种,服务器会为您解析。

这不是什么

这涵盖了 RepairDesk 的读取端以及核心工单工作流写入。它不涵盖估价、预约创建、POS/销售交易、库存写入、付款记录、工单图片/附件上传或 Webhook。如果您需要其中某一项,欢迎提交 PR。

快速开始

您不需要是开发人员也能运行此工具——只需能熟练地在终端中输入几条命令即可。总时间:约 5 分钟。

1. 安装 Node.js(如果尚未安装)

从 nodejs.org 下载并安装——选择"LTS"版本。这将同时安装 node 和 npm。要检查是否安装成功,请打开终端并运行:

node --version

您应该会看到类似 v20.x.x 的内容(18 或更高版本都可以)。

2. 获取代码

如果您有 Git:

git clone https://github.com/codeyoc/repairdesk-mcp.git
cd repairdesk-mcp

如果没有: 点击 GitHub 仓库页面上的绿色 Code 按钮 → Download ZIP → 将其解压到某个位置 → 在该文件夹中打开终端。

3. 获取您的 RepairDesk API 密钥

在您的 RepairDesk 管理后台中:设置 → API。复制那里显示的密钥——设置脚本会在下一步中要求提供。请像对待密码一样对待它:它授予对您店铺数据的完全读写权限(请参阅安全性)。

4. 运行设置脚本

node setup.mjs

这是最快的路径,可处理所有事项:如有需要,它会为您运行 npm install,询问您的 API 密钥,询问您使用的 AI 助手(Claude Code、Claude Desktop、Codex CLI 或 OpenCode),并自动为您写入配置——首先备份任何现有配置文件。如果您使用其他工具,它会打印出配置块供您自行粘贴。

如果您更愿意手动操作——或者您的客户端不是上述四种之一——请参阅下面的手动设置。无论哪种方式,如果您跳过脚本,请先自行运行 npm install。

5. 试用

向您的助手提问,例如 "使用 RepairDesk,列出我最近的 5 张工单"。如果它返回了真实的工单数据,就完成了。

手动设置

如果 node setup.mjs 已经为您成功运行,请跳过此部分。否则,请先在此文件夹中运行 npm install,然后手动配置您的客户端:

在任意位置运行以下命令,将路径替换为您解压/克隆文件夹的完整路径,将密钥替换为您真实的密钥:

claude mcp add repairdesk \
  --env REPAIRDESK_API_KEY=your_key_here \
  --env REPAIRDESK_USER_AGENT=YourShopName-MCP/1.0 \
  -- node /full/path/to/repairdesk-mcp/server.mjs

打开(或创建)适用于您操作系统的配置文件:

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

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

添加以下内容(如果文件不为空,请与 mcpServers 中已有的内容合并):

{
  "mcpServers": {
    "repairdesk": {
      "command": "node",
      "args": ["/full/path/to/repairdesk-mcp/server.mjs"],
      "env": {
        "REPAIRDESK_API_KEY": "your_key_here",
        "REPAIRDESK_USER_AGENT": "YourShopName-MCP/1.0"
      }
    }
  }
}

保存文件,然后完全退出并重新打开 Claude Desktop(不仅仅是关闭窗口)。

编辑(或创建)~/.codex/config.toml 并添加:

[mcp_servers.repairdesk]
command = "node"
args = ["/full/path/to/repairdesk-mcp/server.mjs"]

[mcp_servers.repairdesk.env]
REPAIRDESK_API_KEY = "your_key_here"
REPAIRDESK_USER_AGENT = "YourShopName-MCP/1.0"

启动一个新的 Codex 会话并运行 /mcp 以确认其已连接。(Codex 也有交互式 codex mcp add 命令,如果您更喜欢使用它而不是编辑文件——请查看 codex mcp add --help 以了解您安装版本的确切标志。)

打开(或创建)适用于您操作系统的配置文件:

  • Mac/Linux: ~/.config/opencode/opencode.json

  • Windows: %APPDATA%\opencode\opencode.json

添加以下内容(如果文件不为空,请与 mcp 中已有的内容合并):

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "repairdesk": {
      "type": "local",
      "command": ["node", "/full/path/to/repairdesk-mcp/server.mjs"],
      "enabled": true,
      "environment": {
        "REPAIRDESK_API_KEY": "your_key_here",
        "REPAIRDESK_USER_AGENT": "YourShopName-MCP/1.0"
      }
    }
  }
}

重启 OpenCode 以使其生效。

上面使用的 command/args/env 结构(Claude Code/Desktop)是事实上的标准——大多数 MCP 客户端都遵循它,只是配置文件位置不同。请查看您客户端的文档以了解该文件的位置;配置块本身应该可以直接使用。

请使用 server.mjs 的完整绝对路径(例如 /Users/you/repairdesk-mcp/server.mjs 或 C:\Users\you\repairdesk-mcp\server.mjs)——相对路径会失败,因为您的 AI 客户端不会从此文件夹内部运行。

所有配置选项

以下所有内容都放在客户端配置使用的 env/environment 块中(setup.mjs 会为您处理)——而不是 .env 文件,因为大多数 MCP 客户端不会自动读取 .env 文件。本仓库中的 .env.example 列出了相同的变量供参考。

变量

必需

默认值

用途

REPAIRDESK_API_KEY

是

—

您的 RepairDesk API 密钥

REPAIRDESK_BASE_URL

否

https://api.repairdesk.co/api/web/v1

覆盖 API 基础 URL

REPAIRDESK_USER_AGENT

否

RepairDesk-MCP/1.0

每次请求发送的 User-Agent。如果您愿意,可以将其设置为您自己的店铺/工具名称——只是不能为空(请参阅故障排除)

REPAIRDESK_MIN_INTERVAL_MS

否

600

出站 API 调用之间的最小毫秒数——请参阅下面的速率限制

REPAIRDESK_LOG_DIR

否

./logs

mcp_audit.log 的写入位置

REPAIRDESK_CONFIG

否

./config.json

JSON 配置文件的路径,如果您更愿意使用配置文件而不是环境变量(请参阅下文)

备选方案:用配置文件代替环境变量。 如果你的环境变量配置起来不方便,可以在 server.mjs 旁边创建一个 config.json(已加入 gitignore):

{
  "repairdesk_api_key": "your_key_here",
  "repairdesk_base_url": "https://api.repairdesk.co/api/web/v1"
}

该文件在每次 API 调用时都会重新读取,因此你无需重启服务器即可轮换密钥。当两者同时存在时,环境变量优先于该文件。

速率限制——100 次/分钟的问题

RepairDesk 文档规定的上限是每个 API 密钥每分钟 100 次请求(部分套餐允许 120 次——如果不确定,请查看你自己的套餐)。本服务器会自动为你处理这个问题:

  • 每次出站调用都会通过一个单一的节流器排队,该节流器在请求之间至少等待 REPAIRDESK_MIN_INTERVAL_MS(默认 600ms ≈ 100 次/分钟)——因此请求大批量工单本身不会触发速率限制错误。

  • 如果 RepairDesk 仍然返回 429(速率受限)——例如另一个工具也在用同一个密钥频繁请求——服务器会自动等待并重试一次,然后才放弃。

  • 你无需配置任何东西即可正常工作。只有在你持续看到速率限制错误(调高它)或你确定你的套餐允许更高的上限并希望加快批量查询速度(调低它,谨慎操作)时,才需要修改 REPAIRDESK_MIN_INTERVAL_MS。

故障排查

"RepairDesk API returned 401 Unauthorized" / 响应中出现"Unauthorized" 你的 API 密钥错误、已被吊销,或未被正确读取。请仔细检查 RepairDesk 中设置 → API 里的密钥,并确认它在你的 MCP 客户端配置中拼写正确(没有多余空格,也不是仍然保留着 YOUR_REPAIRDESK_API_KEY_HERE)。任何配置更改后请完全重启你的 AI 客户端——大多数客户端不会实时重新加载 MCP 配置。

请求立即失败 / 看起来像是被拦截,而不是认证失败 RepairDesk 的 Cloudflare 会拦截 User-Agent 为空或看起来像默认值的请求。不要将 REPAIRDESK_USER_AGENT 设置为空字符串。

"RepairDesk API rate limit hit twice in a row (429)" 即使在内置重试之后,你的请求速度仍然超过了密钥的限制。请在配置中调高 REPAIRDESK_MIN_INTERVAL_MS(试试 1000)。

"Ticket T-XXXXX not found — could not resolve to internal ID" 请检查订单 ID 是否正确,并且确实存在于这个 RepairDesk 店铺中。如果你有内部数字 ID,也可以直接传入。

"RepairDesk API request timed out after 15000ms" 通常是网络/防火墙无法访问 api.repairdesk.co,或者 REPAIRDESK_BASE_URL 配置错误。请确认运行此服务器的环境能够访问该主机。

你的 AI 助手完全看不到该工具

  • 确认 args 中的路径是绝对路径而非相对路径,并且确实指向 server.mjs。

  • 确认你已在该文件夹中运行过 npm install(缺少 node_modules = 服务器无法启动)。

  • 完全退出并重启你的 AI 客户端——不要只关闭聊天窗口。

  • 直接在终端中运行 node /full/path/to/server.mjs——如果出错,你会看到实际问题,而不是客户端给出的笼统的"工具不可用"提示。

node setup.mjs 提示在 PATH 中找不到 claude/codex 这没关系——它会回退为打印配置块,供你手动粘贴(参见手动设置)。这只是意味着该 CLI 未安装或不在你的 PATH 中;并不代表 MCP 服务器本身有问题。

仍然卡住了? 请在本仓库中提交一个 issue,附上错误信息(如果输出中任何位置出现你的 API 密钥,请先将其打码)。

常见问题

这是 RepairDesk 的官方工具吗? 不是。它是独立构建和维护的,使用 RepairDesk 的公共 API。请自行斟酌使用。

运行这个需要付费吗? 不需要——它只是发起你的 RepairDesk 套餐本来就允许的 API 调用。本项目不收取任何额外费用。(你的 AI 助手订阅,例如 Claude,是独立的,与本服务器无关。)

我可以将它用于 Claude 以外的工具吗? 可以——MCP 是一个开放标准。setup.mjs 直接配置 Claude Code、Claude Desktop、Codex CLI 和 OpenCode;任何其他通过 stdio 支持 MCP 的工具(Cursor、Windsurf 等)也可以使用本服务器,只需按照手动设置中的手动配置即可。

我可以为多个 RepairDesk 店铺运行这个吗? 可以——在 MCP 客户端中以不同名称注册多次(例如 repairdesk-store1、repairdesk-store2),每次使用各自的 REPAIRDESK_API_KEY。

我的 AI 助手会不会意外地给客户发邮件/短信? 只有 repairdesk_tickets_write 能触发该操作,而且只能通过状态变更触发——这始终需要显式的 confirmed: true,并且当目标状态是 RepairDesk 的通知类状态之一时,工具描述中会明确标注。不会静默发生。

安全

你的 REPAIRDESK_API_KEY 拥有对你店铺客户和财务数据的完全读写权限。请将其保存在 MCP 客户端的环境配置中,切勿放入已提交的文件。config.json 和 .env 在这里被 gitignore 正是出于这个原因——如果你更喜欢用文件而不是环境变量,可以在本地使用它们,但不要提交填写好的副本。发现安全问题?请提交 issue(如果你的托管平台支持,也可以提交私密报告),而不是公开带有利用细节的 PR。

许可证

MIT——参见 LICENSE。按原样提供,不附带任何担保——你需自行负责如何针对自己的 RepairDesk 账户使用它。

Available Tools

7 tools
repairdesk_customersB

Look up customers by name, phone, email, or ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
actionYes
keywordNoSearch by name, phone, or email
pagesizeNo
customer_idNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It states 'look up' which suggests a read-only operation, and the action enum (list/get) reinforces this. However, it does not explicitly confirm read-only semantics, nor does it mention pagination behavior or any permissions required. The description is adequate but leaves room for inference about side effects and constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no redundancy. It efficiently conveys the core purpose. However, it could include a bit more detail (e.g., mention of action modes) without losing conciseness, so it's not a perfect 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters including an action enum and pagination, yet the description does not explain the 'action' parameter, the difference between list and get, or how pagination works. It also doesn't address how 'customer_id' vs 'keyword' are used together. For a tool of this complexity, the description is incomplete and requires the agent to infer critical usage details from the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is only 20% (only 'keyword' is described). The tool description adds partial meaning by mentioning name, phone, email, or ID, mapping roughly to 'keyword' and 'customer_id', but it does not explain the 'action' parameter, nor does it clarify how 'keyword' and 'customer_id' relate or when to use each. It also omits pagination parameters (page, pagesize). The description adds some value but insufficiently compensates for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (look up) and resource (customers), and lists the search fields. It is distinct from sibling tools (tickets, invoices, etc.) which target different resources. However, it does not mention the 'action' parameter that distinguishes between listing and getting a single customer, leaving some ambiguity about the exact operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for customer lookup but provides no explicit guidance on when to use it versus alternatives. Since siblings are for other resources, the use case is fairly obvious, yet there is no mention of scenarios like retrieving a specific customer vs. browsing all customers, which the action parameter addresses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

repairdesk_employeesC

List employees/technicians.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
pagesizeNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'List', which implies a read operation, but it does not disclose pagination behavior, return format, or any side effects. For a simple listing tool, the lack of even basic behavioral context (e.g., that results are paged) leaves the agent guessing about what to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the verb and resource. It is not verbose or redundant, and it follows a clear structure. However, it is so terse that it borders on under-specification, but the dimension is about conciseness and structure, not completeness, so it earns a 4.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description should at least hint at pagination and typical response characteristics. The description covers only the basic action and does not mention that results may be paged (as implied by the parameters) or what fields to expect. An agent cannot fully anticipate the tool's behavior from this description alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention the 'page' or 'pagesize' parameters at all. Since the schema properties have no descriptions, the agent has no explanation of these parameters beyond their names and defaults. The description fails to compensate for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and the resource ('employees/technicians'). It is not a tautology and provides a specific verb+resource pair. However, it does not explicitly differentiate from sibling tools, though no other sibling handles employees, so it is reasonably distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any conditions, exclusions, or contexts where another tool like repairdesk_tickets or repairdesk_customers would be more appropriate. The only intended use is implicit from the resource name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

repairdesk_inventoryC

Search inventory/parts stock.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
keywordNo
pagesizeNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. The tool is a search, which implies a read-only operation, but the description does not state that explicitly, nor does it mention pagination behavior, response structure, or any side effects. It only states the purpose without disclosing observable behaviors or constraints. Both the read-only nature and pagination are left entirely to inference.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with no fluff or redundancy, which is technically concise. However, it is under-specified for an agent; the brevity does not earn its place because it omits essential information. It is neither front-loaded with useful details nor structured to guide usage. It is compact but not informative, so a middle score is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters, no output schema, and no annotations, the description is severely incomplete. It does not explain what the search returns, what fields are searched, how to paginate, or what a typical response looks like. An agent cannot confidently call this tool correctly because it lacks the context needed to construct a valid query or interpret results. The description is virtually absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% coverage (no descriptions for page, keyword, or pagesize), so the description must compensate and explain parameter meaning. It does not mention any of the parameters at all. The agent is left to guess what 'keyword' searches against (e.g., part name, SKU) and how pagination is applied. The description provides zero value beyond the schema structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action ('Search') and a clear resource ('inventory/parts stock'). It distinguishes the tool from siblings like repairdesk_tickets, repairdesk_customers, and repairdesk_invoices by naming the resource domain. However, it could be more specific about what 'inventory/parts' means in the repair-desk context (e.g., parts availability), but the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any context such as 'use this to find parts available for a repair' or 'use this to check stock levels.' There are no exclusions or references to sibling tools. The only implied usage is searching inventory, which is not explicit enough to route an agent effectively.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

repairdesk_invoicesC

Search invoices, get details, or check due/outstanding amounts.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
actionYes
statusNo
keywordNo
to_dateNo
pagesizeNo
from_dateNo
invoice_idNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions three distinct operations but does not disclose side effects, permission requirements, rate limits, or return behavior. The description adds little beyond what the tool name implies, leaving the agent uncertain about operational impact.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no waste, front-loading the core purpose. However, given the tool's complexity (8 parameters, 3 actions), it is under-specified. The conciseness itself is good, but the structure lacks the necessary detail to be fully valuable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 8 parameters, an action enum, and no output schema, yet the description provides almost no contextual information. It does not explain how the three actions map to the enum values, what each parameter does, or what the response format looks like. This is critically incomplete for an agent to use effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% because the description does not mention any parameters. It fails to explain the meaning of action values, how keyword filtering works, date ranges, pagination, or the purpose of invoice_id. With 8 parameters and zero description coverage, the agent is left to guess parameter usage from the schema alone, which is insufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb+resource: search, get details, and check amounts specifically for invoices. It distinguishes itself from sibling tools that handle tickets, customers, etc., even though it doesn't name them. The three actions are explicit and convey the tool's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. It does not mention any exclusions, prerequisites, or conditions for using one action over another. An agent must infer usage context from the action enum, but the description provides no such context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

repairdesk_shop_infoB

Look up reference data: devices, categories, statuses, colors, networks, tax classes, payment methods, referral sources, repair types, service types, locations, problems (by device), trade-ins, purchase orders.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
brandNoFilter devices by brand
lookupYes
keywordNo
pagesizeNo
device_idNoRequired when lookup=problems
device_nameNoFilter devices by name

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full burden of disclosing behavioral traits. It indicates a read operation ('look up') and hints at a dependency for problems ('by device'), but it does not explicitly state that the tool is read-only, has no side effects, requires authentication, or handles pagination. The description lacks essential behavioral context for an agent to call it safely without assumptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, consisting of a single sentence that front-loads the verb and resource. It efficiently enumerates the lookup types without unnecessary filler. While the list is long, it is still concise and well-structured, earning a high but not perfect score for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 parameters, one required, low schema coverage, no output schema), the description is far too sparse. It does not explain return values, pagination behavior, required dependencies (e.g., device_id for problems), or how to effectively use filters. An agent would need to infer much from the sparse schema descriptions, making the tool under-documented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 43% (only brand, device_id, and device_name have descriptions), so the description needs to compensate by explaining parameter usage. However, it only lists the lookup enum values and mentions 'problems (by device)' without tying that to the device_id parameter. It does not clarify the role of page, pagesize, keyword, or how filters work, leaving a significant semantic gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb ('Look up') and a specific resource ('reference data'), then enumerates the exact entity types supported. This makes the tool's purpose unambiguous and distinguishes it from siblings like repairdesk_tickets or repairdesk_inventory, which handle operational entities rather than lookups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for retrieving reference data, and its distinct name and content signal a different usage context from the sibling tools. However, there is no explicit statement about when to use this tool versus alternatives, nor exclusions for when not to use it. The guidance is only implied by the tool's nature, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

repairdesk_ticketsB

Search and look up repair tickets. List tickets filtered by status, date, keyword, or tech. Get full details by ticket ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
actionYes"list" to search, "get" for specific ticket
statusNoFilter by status (Pending, In Progress, Repaired, etc.)
keywordNoSearch keyword (customer name, device, etc.)
to_dateNoEnd date as Unix timestamp
pagesizeNo
from_dateNoStart date as Unix timestamp
ticket_idNoTicket ID (for action=get)
assigned_toNoFilter by assigned employee ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavior. It uses read-oriented verbs ('search', 'look up', 'list', 'get') implying a non-destructive operation, but it never explicitly states that no changes are made. It also discloses filtering capabilities but omits details like pagination behavior or any side effects, which is a moderate gap for a read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no fluff. It front-loads the primary action and then lists the filter options in a logical order. Every word contributes to understanding the tool's purpose and usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with no output schema and moderate complexity (9 parameters, but only one required), the description covers the main actions (list with filters, get by ID). It does not explicitly mention pagination or the response format, but given the simple read nature and the schema covering parameters, it is reasonably complete. A slightly more detailed mention of return contents would push it higher.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 78% (slightly below the high threshold), so the description partially compensates by enumerating filter categories (status, date, keyword, tech) and mentioning 'get by ticket ID'. This maps to several parameters, but it adds little beyond the schema's own descriptions, which already explain each parameter's purpose. Overall, it meets the baseline for a moderately covered schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a search/lookup for repair tickets with specific verbs (search, look up, list, get) and a resource (repair tickets). It effectively conveys the read-only nature, though it does not explicitly mention the sibling write tool or contrast itself, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for reading/searching but provides no explicit guidance on when to use this tool versus alternatives like repairdesk_tickets_write. There are no statements about when not to use it or prerequisites, leaving the agent to infer usage context from the action enum and filter descriptions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

repairdesk_tickets_writeA

Create/update tickets, add notes, assign techs. WARNING: Status changes may trigger automatic customer SMS/email! Statuses that notify: Repaired, Ready for Pickup, Completed, Waiting on Customer, Waiting For Quote, Cancelled. ALWAYS confirm with user before status changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoNote text (for add_note)
actionYes
statusNoTicket status — MAY TRIGGER NOTIFICATION
confirmedNoMust be true for status changes
device_idNoDevice type ID (for create)
note_typeNointernal or diagnosticinternal
ticket_idNoTicket ID (for update/add_note/assign)
service_idNoService/repair item ID
customer_idNoCustomer ID (for create)
device_nameNoDevice name/model
service_nameNoService name
security_codeNoDevice PIN/password
serial_numberNo
technician_idNoEmployee ID (for assign)
additional_notesNoInternal notes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the major side effect: status changes may trigger automatic customer SMS/email and lists the specific statuses that notify. It also mandates confirmation. This covers the primary behavioral risk, though it does not mention authentication or rate limits, which is acceptable for this context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and effective: a single sentence states the purpose, then a warning in caps draws attention to the critical side effect and the confirmation requirement. Every sentence earns its place with no fluff, and the critical warning is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is complex with 15 parameters and multiple actions, but the schema provides detailed per-parameter descriptions and the action enum clarifies usage. The description covers the essential context: what the tool does and the notification risk. It does not need to explain return values since there is no output schema. The description is sufficiently complete for an agent to call it correctly with the schema's help.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 87%, so the schema already explains most parameters well (e.g., note, ticket_id, customer_id). The description's warning about status notifications adds context to the status parameter, but the schema already includes 'MAY TRIGGER NOTIFICATION'. The description does not add significant semantic value beyond the schema; it meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's actions: create/update tickets, add notes, assign techs. It names the specific resource (tickets) and verb, distinguishing it from the read-focused sibling repairdesk_tickets. The purpose is unambiguous and not a tautology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit guidance to always confirm with the user before status changes, which is critical for safe usage. It implies this is the write tool vs. the read tool repairdesk_tickets, though it does not explicitly name alternatives. The confirmation requirement is a clear usage rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv1.0.0
    • First observedrepairdesk_customers
    • First observedrepairdesk_employees
    • First observedrepairdesk_inventory
    • First observedrepairdesk_invoices
    • First observedrepairdesk_shop_info
    • First observedrepairdesk_tickets
    • First observedrepairdesk_tickets_write

TDQS

B3.3/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct domain entity (tickets, customers, invoices, inventory, employees, reference data), with read and write operations clearly separated. There is no overlap or ambiguity between tool purposes.

Naming Consistency4/5

All tools share a consistent 'repairdesk_' prefix and noun-based names (customers, invoices, inventory, etc.). The 'tickets' vs 'tickets_write' pair introduces a minor inconsistency, but overall the naming pattern is predictable and clear.

Tool Count5/5

Seven tools is well-scoped for a repair shop management domain. Each tool covers a necessary function without redundancy, making the set compact and purposeful.

Completeness4/5

The surface provides full ticket lifecycle (search, create, update), customer lookup, invoice queries, inventory search, employee list, and reference data. Minor gaps like ticket deletion or invoice creation exist, but the core workflows are covered.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables AI assistants to manage RogerRoger CRM data including people, organizations, lists, tags, and tasks through standardized MCP tools.
    22
    4 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to read and manage a Jobkeepr field service business including jobs, customers, scheduling, estimates, invoices, and payments via MCP.
    19
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to query and operate a help desk and service desk through MCP over HTTP, including tickets, requester communications, internal notes, attachments, stage and SLA history, time entries, clients, requesters, desks, knowledge base, contracts, and billing/satisfaction reports.
    MIT