RepairDesk MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@RepairDesk MCP ServerLook up ticket T-15423"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
RepairDesk MCP Server
An MCP (Model Context Protocol) server that gives any MCP-compatible AI assistant — Claude Code, Claude Desktop, Codex CLI, OpenCode, Cursor, Windsurf, or any other MCP client — direct, read/write access to your RepairDesk shop data. Point it at your store's API key and start asking things like "look up ticket T-15423", "what's overdue on invoice 8821", or "assign the iPhone screen job to Dave".
Not an official RepairDesk product — an independent tool built by a RepairDesk shop for RepairDesk shops. No warranty, use at your own risk (see License) — but it's in daily use running a real repair shop's ticket queue, not a proof of concept.
Contents
Related MCP server: TicketAI
What you can actually do with this
Once it's wired into your AI assistant, you can just talk to your RepairDesk data instead of clicking through the web UI. Some real examples:
Front counter / triage
"Look up ticket T-15423" — full ticket detail: customer, device, per-device status, notes.
"What's the status on Sarah Miller's phone?" — searches tickets by customer name/keyword.
"Show me everything that's Pending or Waiting for Parts" — filter tickets by status.
"What's assigned to Dave right now?" — filter tickets by technician.
"Pull up John's contact details" — customer lookup by name, phone, or email.
Workflow / bench work
"Add a diagnostic note to T-15423: replaced screen, battery tested OK"
"Assign ticket T-15490 to Dave"
"Mark T-15423 as Repaired" — the server will ask you to confirm first, and flags that this status auto-fires a customer SMS/email in RepairDesk.
"Create a ticket for this customer: iPhone 13, screen replacement" — again, confirmation required before it actually creates anything.
Money / admin
"Which invoices are still unpaid from last month?"
"What's the outstanding balance on invoice 8821?"
"Do we have an iPhone 13 battery in stock?" — inventory search.
"List all our technicians" / "What payment methods do we have set up?"
"What repair categories/device types do we have configured?" — useful context when building a ticket or diagnosing what a device model even is in your system.
Because this runs through an actual AI assistant rather than a fixed dashboard, you can chain these naturally — "find any overdue invoices for customers with a ticket still open" — and the assistant works it out across tools instead of you cross-referencing two screens by hand.
Tools reference
Tool | What it does |
| Search tickets by status/date/keyword/tech, or get one ticket's full detail (including per-device status) |
| Create tickets, update status/device fields, add internal or diagnostic notes, assign a technician |
| Look up customers by name, phone, email, or ID |
| Search invoices, get one invoice, or check its outstanding/due amount |
| Search parts stock by keyword |
| List employees/technicians |
| Reference lookups: devices, categories, statuses, colors, networks, tax classes, payment methods, referral sources, repair/service types, locations, problems (by device), trade-ins, purchase orders |
Safety rail: repairdesk_tickets_write requires confirmed: true before applying a status
change, and warns when the target status is one RepairDesk auto-notifies the customer on
(Repaired, Ready for Pickup, Completed, Waiting on Customer, Waiting For Quote, Cancelled). You
don't need to do anything for this to work — just answer "yes" when your assistant relays the
confirmation prompt.
Handy detail: ticket lookups/writes accept either RepairDesk's order ID format (T-15423)
or the internal numeric ticket ID — you never need to know which one you have, the server
resolves it for you.
What this is not
This covers the read side of RepairDesk plus core ticket workflow writes. It does not cover estimates, appointment creation, POS/sales transactions, inventory writes, payment recording, ticket image/attachment upload, or webhooks. PRs welcome if you need one of those.
Quick start
You don't need to be a developer to run this — just comfortable typing a handful of commands into a terminal. Total time: about 5 minutes.
1. Install Node.js (if you don't have it)
Download and install from nodejs.org — get the "LTS" version. This
installs both node and npm. To check it worked, open a terminal and run:
node --versionYou should see something like v20.x.x (anything 18 or higher is fine).
2. Get the code
If you have Git:
git clone https://github.com/codeyoc/repairdesk-mcp.git
cd repairdesk-mcpIf you don't: click the green Code button on the GitHub repo page → Download ZIP → unzip it somewhere → open a terminal in that folder.
3. Get your RepairDesk API key
In your RepairDesk admin: Settings → API. Copy the key shown there — the setup script asks for it in the next step. Treat it like a password: it grants full read/write access to your shop's data (see Security).
4. Run the setup script
node setup.mjsThis is the fastest path and handles everything: it runs npm install for you if needed, asks
for your API key, asks which AI assistant you're using (Claude Code, Claude Desktop, Codex CLI,
or OpenCode), and writes the config for you automatically — backing up any existing config file
first. If you're on something else, it prints the config block to paste in yourself.
If you'd rather do it by hand — or your client isn't one of the four above — see
Manual setup below instead. Either way, run npm install yourself first if you
skip the script.
5. Try it
Ask your assistant something like "Using RepairDesk, list my 5 most recent tickets". If it comes back with real ticket data, you're done.
Manual setup
Skip this if node setup.mjs already worked for you. Otherwise, run npm install in this
folder first, then wire up your client by hand:
Run this from anywhere, replacing the path with the full path to where you unzipped/cloned the folder, and the key with your real one:
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.mjsOpen (or create) the config file for your OS:
Mac:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Add this (merge it with anything already in mcpServers if the file isn't empty):
{
"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"
}
}
}
}Save the file, then fully quit and reopen Claude Desktop (not just close the window).
Edit (or create) ~/.codex/config.toml and add:
[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"Start a new Codex session and run /mcp to confirm it connected. (Codex also has an interactive
codex mcp add command if you prefer that over editing the file — check codex mcp add --help
for the exact flags on your installed version.)
Open (or create) the config file for your OS:
Mac/Linux:
~/.config/opencode/opencode.jsonWindows:
%APPDATA%\opencode\opencode.json
Add this (merge it with anything already in mcp if the file isn't empty):
{
"$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"
}
}
}
}Restart OpenCode to pick it up.
The command/args/env shape used above (Claude Code/Desktop) is the de facto standard —
most MCP clients follow it, just in a different settings file. Check your client's docs for
where that file lives; the block itself should work as-is.
Use the full, absolute path to server.mjs (e.g. /Users/you/repairdesk-mcp/server.mjs or
C:\Users\you\repairdesk-mcp\server.mjs) — a relative path will fail because your AI client
doesn't run from inside this folder.
All configuration options
Everything below goes in the env/environment block your client's config uses (setup.mjs
handles this for you) — not a .env file, since most MCP clients don't read one automatically.
.env.example in this repo lists the same variables for reference.
Variable | Required | Default | Purpose |
| Yes | — | Your RepairDesk API key |
| No |
| Override the API base URL |
| No |
| User-Agent sent on every request. Set this to your own shop/tool name if you like — it just can't be empty (see Troubleshooting) |
| No |
| Minimum ms between outbound API calls — see rate limiting below |
| No |
| Where |
| No |
| Path to a JSON config file, if you'd rather use one than env vars (see below) |
Alternative: config file instead of env vars. If your setup makes env vars awkward, create a
config.json (gitignored) next to server.mjs:
{
"repairdesk_api_key": "your_key_here",
"repairdesk_base_url": "https://api.repairdesk.co/api/web/v1"
}It's re-read on every API call, so you can rotate the key without restarting the server. Environment variables take priority over this file when both are present.
Rate limiting — the 100/minute thing
RepairDesk's documented cap is 100 requests per minute per API key (some plans allow up to 120 — check your own plan if you're unsure). This server handles that for you automatically:
Every outbound call is queued through a single throttle that waits at least
REPAIRDESK_MIN_INTERVAL_MS(default 600ms ≈ 100/min) between requests — so asking for a big batch of tickets won't itself trigger a rate-limit error.If RepairDesk still returns a 429 (rate limited) — e.g. another tool is also hammering the same key — the server automatically waits and retries once before giving up.
You don't need to configure anything for this to work. Only touch
REPAIRDESK_MIN_INTERVAL_MSif you're consistently seeing rate-limit errors (raise it) or you know your plan allows a higher cap and want faster bulk lookups (lower it, carefully).
Troubleshooting
"RepairDesk API returned 401 Unauthorized" / "Unauthorized" in the response
Your API key is wrong, was revoked, or wasn't picked up. Double-check the key in Settings →
API in RepairDesk, and that it's spelled correctly in your MCP client's config (not a stray
space, not still YOUR_REPAIRDESK_API_KEY_HERE). Fully restart your AI client after any config
change — most don't reload MCP config live.
Requests fail immediately / look like they're being blocked, not authenticated
RepairDesk's Cloudflare blocks requests with an empty or default-looking User-Agent. Don't set
REPAIRDESK_USER_AGENT to an empty string.
"RepairDesk API rate limit hit twice in a row (429)"
You're making requests faster than your key's limit even after the built-in retry. Raise
REPAIRDESK_MIN_INTERVAL_MS (try 1000) in your config.
"Ticket T-XXXXX not found — could not resolve to internal ID" Check the order ID is correct and exists in this RepairDesk store. If you have the internal numeric ID instead, that works too — pass it directly.
"RepairDesk API request timed out after 15000ms"
Usually a network/firewall issue reaching api.repairdesk.co, or REPAIRDESK_BASE_URL is
wrong. Check you can reach that host from wherever this server is running.
Your AI assistant doesn't see the tool at all
Confirm the path in
argsis absolute, not relative, and actually points atserver.mjs.Confirm you ran
npm installin that folder (missingnode_modules= the server can't start).Fully quit and restart your AI client — don't just close the chat window.
Run
node /full/path/to/server.mjsdirectly in a terminal — if it errors, you'll see the actual problem instead of a generic "tool not available" from your client.
node setup.mjs says it couldn't find claude/codex on your PATH
That's fine — it falls back to printing the config block for you to paste in by hand (see
Manual setup). This just means that CLI isn't installed or isn't on your PATH;
it doesn't mean the MCP server itself is broken.
Still stuck? Open an issue on this repo with the error message (redact your API key first if it appears anywhere in the output).
FAQ
Is this an official RepairDesk tool? No. It's independently built and maintained, using RepairDesk's public API. Use it at your own discretion.
Does this cost anything to run? No — it's just making the same API calls your RepairDesk plan already allows. There's no additional fee from this project. (Your AI assistant subscription, e.g. Claude, is separate and unrelated to this server.)
Can I use this with something other than Claude?
Yes — MCP is an open standard. setup.mjs configures Claude Code, Claude Desktop, Codex CLI, and
OpenCode directly; anything else that speaks MCP over stdio (Cursor, Windsurf, etc.) can use this
server too, via the manual config in Manual setup.
Can I run this for multiple RepairDesk stores?
Yes — register it multiple times under different names (e.g. repairdesk-store1,
repairdesk-store2) in your MCP client, each with its own REPAIRDESK_API_KEY.
Will my AI assistant accidentally email/text my customers?
Only repairdesk_tickets_write can trigger that, and only via a status change — which always
requires an explicit confirmed: true and is flagged in the tool description when the target
status is one of RepairDesk's notifying statuses. It won't happen silently.
Security
Your REPAIRDESK_API_KEY grants full read/write access to your shop's customer and financial
data. Keep it in your MCP client's env config, never in a committed file. config.json and
.env are gitignored here for exactly that reason — use them locally if you prefer a file over
env vars, but don't commit a filled-in copy. Found a security issue? Please open an issue (or a
private report if your host supports it) rather than a public PR with exploit details.
License
MIT — see LICENSE. Provided as-is, no warranty — you're responsible for how you use it against your own RepairDesk account.
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. Dates show when Glama detected each change.
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
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI-powered customer support with real-time access to CRM, ticketing, and communication tools via MCP, supporting context-aware conversations and automated actions.Apache 2.0
- FlicenseNot gradedqualityBmaintenanceEnables 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.2211MIT
- AlicenseNot gradedqualityBmaintenanceAI-powered helpdesk management via Model Context Protocol. Connect any MCP-compatible assistant to your support workspace.17MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/codeyoc/repairdesk-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server