RepairDesk MCP Server
RepairDesk MCP Server
MCP(Model Context Protocol) 서버로, MCP 호환 AI 어시스턴트(Claude Code, Claude Desktop, Codex CLI, OpenCode, Cursor, Windsurf 또는 기타 MCP 클라이언트)에 RepairDesk 매장 데이터에 대한 직접적인 읽기/쓰기 액세스를 제공합니다. 매장의 API 키를 지정하고 "티켓 T-15423 조회", "인보이스 8821의 연체 항목", "iPhone 화면 작업을 Dave에게 할당" 같은 질문을 시작하세요.
공식 RepairDesk 제품이 아닙니다. RepairDesk 매장이 RepairDesk 매장을 위해 만든 독립 도구입니다. 보증 없음, 사용에 따른 책임은 본인에게 있습니다(License 참조). 하지만 실제 수리점의 티켓 대기열을 운영하는 데 매일 사용되고 있으며, 개념 증명이 아닙니다.
목차
Related MCP server: RogerRoger MCP Server
실제로 할 수 있는 작업
AI 어시스턴트에 연결되면 웹 UI를 클릭하는 대신 RepairDesk 데이터에 직접 말을 걸 수 있습니다. 몇 가지 실제 예:
프런트 카운터 / 트리아지
"티켓 T-15423 조회" — 전체 티켓 세부 정보: 고객, 기기, 기기별 상태, 메모.
"Sarah Miller의 전화 상태는?" — 고객 이름/키워드로 티켓 검색.
"Pending 또는 Waiting for Parts인 모든 항목 보여줘" — 상태별 티켓 필터링.
"지금 Dave에게 할당된 것은?" — 기술자별 티켓 필터링.
"John의 연락처 정보 불러와" — 이름, 전화, 이메일로 고객 조회.
워크플로 / 벤치 작업
"T-15423에 진단 메모 추가: 화면 교체, 배터리 테스트 통과"
"티켓 T-15490을 Dave에게 할당"
"T-15423을 Repaired로 표시" — 서버가 먼저 확인을 요청하며, 이 상태가 RepairDesk에서 고객 SMS/이메일을 자동으로 발송한다는 점을 알려줍니다.
"이 고객에 대한 티켓 생성: iPhone 13, 화면 교체" — 실제로 생성하기 전에 확인이 필요합니다.
금전 / 관리
"지난달에 아직 미지불된 인보이스는?"
"인보이스 8821의 미결제 잔액은?"
"iPhone 13 배터리 재고가 있나요?" — 재고 검색.
"모든 기술자 목록" / "설정된 결제 수단은?"
"구성된 수리 카테고리/기기 유형은?" — 티켓을 만들거나 기기 모델이 시스템에서 무엇인지 진단할 때 유용한 컨텍스트.
고정된 대시보드가 아닌 실제 AI 어시스턴트를 통해 실행되므로 자연스럽게 연결할 수 있습니다. "아직 열려 있는 티켓이 있는 고객의 연체 인보이스 찾기" 같은 요청을 하면 어시스턴트가 도구를 넘나들며 처리하므로 두 화면을 수동으로 대조할 필요가 없습니다.
도구 참조
도구 | 기능 |
| 상태/날짜/키워드/기술자로 티켓 검색, 또는 단일 티켓의 전체 세부 정보(기기별 상태 포함) 조회 |
| 티켓 생성, 상태/기기 필드 업데이트, 내부 또는 진단 메모 추가, 기술자 배정 |
| 이름, 전화, 이메일 또는 ID로 고객 조회 |
| 인보이스 검색, 단일 인보이스 조회, 또는 미결제/연체 금액 확인 |
| 키워드로 부품 재고 검색 |
| 직원/기술자 목록 |
| 참조 조회: 기기, 카테고리, 상태, 색상, 네트워크, 세금 클래스, 결제 수단, 추천 소스, 수리/서비스 유형, 위치, 문제(기기별), 트레이드인, 구매 주문 |
안전 레일: repairdesk_tickets_write는 상태 변경을 적용하기 전에 confirmed: true를 요구하며, 대상 상태가 RepairDesk가 고객에게 자동 알림을 보내는 상태(Repaired, Ready for Pickup, Completed, Waiting on Customer, Waiting For Quote, Cancelled)인 경우 경고합니다. 이 기능이 작동하도록 특별히 할 일은 없습니다. 어시스턴트가 확인 프롬프트를 전달하면 "예"라고 답하기만 하면 됩니다.
유용한 세부 정보: 티켓 조회/쓰기는 RepairDesk의 주문 ID 형식(T-15423) 또는 내부 숫자 티켓 ID를 모두 허용합니다. 어떤 형식을 가지고 있는지 알 필요 없이 서버가 자동으로 해결합니다.
이것이 아닌 것
이것은 RepairDesk의 읽기 측면과 핵심 티켓 워크플로 쓰기를 다룹니다. 견적, 약속 생성, POS/판매 거래, 재고 쓰기, 결제 기록, 티켓 이미지/첨부 파일 업로드, 웹훅은 다루지 않습니다. 이러한 기능이 필요하면 PR을 환영합니다.
빠른 시작
개발자가 아니어도 실행할 수 있습니다. 터미널에 몇 가지 명령을 입력할 수 있으면 됩니다. 총 소요 시간: 약 5분.
1. Node.js 설치(없는 경우)
nodejs.org에서 다운로드하여 설치하세요. "LTS" 버전을 받으세요. 그러면 node와 npm이 모두 설치됩니다. 제대로 설치되었는지 확인하려면 터미널을 열고 다음을 실행하세요:
node --versionv20.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 관리자에서: Settings → 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.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.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.jsonWindows:
%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가 처리). 대부분의 MCP 클라이언트는 .env 파일을 자동으로 읽지 않으므로 .env 파일이 아닙니다. 이 저장소의 .env.example에는 동일한 변수가 참조용으로 나열되어 있습니다.
변수 | 필수 | 기본값 | 용도 |
| 예 | — | RepairDesk API 키 |
| 아니요 |
| API 기본 URL 재정의 |
| 아니요 |
| 모든 요청에 전송되는 User-Agent. 원하면 자신의 매장/도구 이름으로 설정하세요. 비어 있을 수 없습니다(문제 해결 참조) |
| 아니요 |
| 아웃바운드 API 호출 사이의 최소 밀리초 — 아래 속도 제한 참조 |
| 아니요 |
|
|
| 아니요 |
| 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 서버 자체가 고장난 것은 아닙니다.
여전히 해결되지 않았나요? 이 저장소에 오류 메시지와 함께 이슈를 열어주세요(출력에 API 키가 포함된 경우 먼저 삭제하세요).
FAQ
이것은 공식 RepairDesk 도구인가요? 아니요. RepairDesk의 공개 API를 사용하여 독립적으로 구축되고 유지관리되는 도구입니다. 사용에 따른 책임은 본인에게 있습니다.
실행 비용이 드나요? 아니요 — 이미 RepairDesk 요금제에서 허용하는 것과 동일한 API 호출을 수행할 뿐입니다. 이 프로젝트에서 추가 비용은 없습니다. (Claude와 같은 AI 어시스턴트 구독료는 별개이며 이 서버와 무관합니다.)
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 처리되어 있습니다 — 환경 변수보다 파일을 선호한다면 로컬에서 사용하되, 값이 채워진 복사본을 커밋하지 마세요. 보안 문제를 발견했나요? 악용 세부 정보가 포함된 공개 PR 대신 이슈(또는 호스트가 지원하는 경우 비공개 보고)를 열어주세요.
라이선스
MIT — LICENSE 참조. 있는 그대로 제공되며 보증이 없습니다 — 본인의 RepairDesk 계정에 대해 사용하는 방식에 대한 책임은 사용자에게 있습니다.
Available Tools
7 toolsrepairdesk_customersB
Look up customers by name, phone, email, or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| action | Yes | ||
| keyword | No | Search by name, phone, or email | |
| pagesize | No | ||
| customer_id | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| pagesize | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| keyword | No | ||
| pagesize | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| action | Yes | ||
| status | No | ||
| keyword | No | ||
| to_date | No | ||
| pagesize | No | ||
| from_date | No | ||
| invoice_id | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| brand | No | Filter devices by brand | |
| lookup | Yes | ||
| keyword | No | ||
| pagesize | No | ||
| device_id | No | Required when lookup=problems | |
| device_name | No | Filter devices by name |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| action | Yes | "list" to search, "get" for specific ticket | |
| status | No | Filter by status (Pending, In Progress, Repaired, etc.) | |
| keyword | No | Search keyword (customer name, device, etc.) | |
| to_date | No | End date as Unix timestamp | |
| pagesize | No | ||
| from_date | No | Start date as Unix timestamp | |
| ticket_id | No | Ticket ID (for action=get) | |
| assigned_to | No | Filter by assigned employee ID |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Note text (for add_note) | |
| action | Yes | ||
| status | No | Ticket status — MAY TRIGGER NOTIFICATION | |
| confirmed | No | Must be true for status changes | |
| device_id | No | Device type ID (for create) | |
| note_type | No | internal or diagnostic | internal |
| ticket_id | No | Ticket ID (for update/add_note/assign) | |
| service_id | No | Service/repair item ID | |
| customer_id | No | Customer ID (for create) | |
| device_name | No | Device name/model | |
| service_name | No | Service name | |
| security_code | No | Device PIN/password | |
| serial_number | No | ||
| technician_id | No | Employee ID (for assign) | |
| additional_notes | No | Internal notes |
TDQS
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.
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.
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.
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.
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.
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.
7 tool updates
v1.0.0- First observed
repairdesk_customers - First observed
repairdesk_employees - First observed
repairdesk_inventory - First observed
repairdesk_invoices - First observed
repairdesk_shop_info - First observed
repairdesk_tickets - First observed
repairdesk_tickets_write
TDQS
Scored across 7 tools
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.
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.
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.
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
Related MCP Connectors
Let AI agents query data and act across all your business apps via MCP.
- PressoOAuthnow.presso
Connect e-commerce and marketing data to AI assistants via MCP.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Connect AI to store orders, products and inventory with scoped access and human approvals.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to analyze IT support tickets, categorize urgency, suggest responses, and retrieve statistics via MCP tools.-
- AlicenseBqualityCmaintenanceEnables AI assistants to manage RogerRoger CRM data including people, organizations, lists, tags, and tasks through standardized MCP tools.224 npmMIT
- AlicenseAqualityBmaintenanceEnables AI assistants to read and manage a Jobkeepr field service business including jobs, customers, scheduling, estimates, invoices, and payments via MCP.19MIT
- AlicenseNot gradedqualityCmaintenanceEnables 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