fixRAgent maintenance triage
Server Details
Assess a property maintenance photo: what it is, how urgent, which trade to call.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 3 tools
The three tools are mostly distinct: assess a new photo, retrieve a saved assessment by diagnosis_id, and fetch a keyless sample. The only real overlap is that assess_property_photo with no key also returns a SAMPLE result, which blurs its boundary with try_sample, though the descriptions explicitly steer onboarding to try_sample.
All tool names follow a consistent snake_case verb_noun pattern: assess_property_photo, get_triage_profile, try_sample. The convention is predictable and readable throughout.
Three tools is a narrow but well-scoped set for a focused triage API where each tool has a clear role (assess, retrieve, sample). It is slightly thin because there is no listing or discovery tool, but nothing feels redundant or excessive.
The core lifecycle is covered: create/assess a photo, read a saved assessment by id, and try a sample. Minor gaps remain—no way to list prior assessments or search by property/address—but agents can work around these by asking the user for a diagnosis_id or link.
Available Tools
3 toolsassess_property_photoAssess a property maintenance photoAInspect
Use this when someone has a PHOTO of something in a building — an appliance, a boiler, a pipe, a water heater, an electrical panel, a fitting, a leak, damage — and wants to know what it is, how urgent it is, and which trade to call. Typical asks: "what is wrong with this water heater", "my tenant sent this photo, is it urgent", "which trade do I call for this". Returns the fixed contract: what the asset is, whether a fault is visible, one of four urgency words (EMERGENCY, TODAY, THIS WEEK, WHENEVER), which trade to call, a line to say to the resident, and how many independent reads agreed. One call reads the photo on fixragent.com and spends one request from the key's daily allowance. Sent with NO key, it does not read the photo: it returns fixRAgent's stored sample result, labelled SAMPLE, and says how to get a free key. Do not use this for: a person, a pet, an injury, a rash, a medical or veterinary question, a vehicle, food, a document, a screenshot, or a photo of a screen. Do not use it for anything happening RIGHT NOW that needs emergency services — a fire, a gas smell or hissing gas, a carbon-monoxide alarm sounding, water pouring onto live electrics, or anyone hurt: tell the user to leave the building and call 911 (or the local emergency number) first, and do not call this tool. Do not use it to price a repair, to book a contractor, or to decide an insurance claim; it routes the job, it does not quote or dispatch it.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | fast reads the photo three times, deep five, and the reply reports how many agreed. deep is slower and spends more of the day's budget; use it only when a first read disagreed with itself. | fast |
| reporter | No | Who took the photo. Changes how the explanation is worded, not the verdict. | resident |
| mime_type | Yes | The photo's type. Must match the bytes; a mismatch is refused, not guessed. | |
| image_base64 | Yes | The photo, base64-encoded. A data:image/jpeg;base64, prefix is accepted and stripped. JPEG, PNG or WebP, at most 3 MB once decoded, at least 1 KB. Location metadata is removed on our server before the photo is hashed, read or stored; it is NOT removed before it leaves the caller. | |
| problem_text | No | What the person reported, in their own words ("no hot water since Tuesday"). Optional. Treated as a reported symptom to be checked against the photo, never as ground truth: the reply says whether the report and the photo agree. |
Output Schema
| Name | Required | Description |
|---|---|---|
| core | Yes | The fixed contract: asset, fault, tier, trade_required, resident_explanation and the rest. |
| sample | No | true = no key was sent: this is the stored SAMPLE, NOT an assessment of the photo you sent. Absent on a real assessment. |
| warnings | No | |
| agreement | No | n reads ran, k agreed. k is null on a tie. |
| config_id | No | An id beginning "fallback-" means a hardcoded config answered, not a measured one. |
| share_url | Yes | The Triage Profile as a page a resident or contractor can open. |
| outcome_url | No | Two taps to tell us what actually fixed it. |
| diagnosis_id | Yes | Server-minted id for this assessment; the key for the profile and the outcome. |
| engine_version | No | |
| rubric_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=false and openWorldHint=true, and the description explains why: each call spends one request from the key's daily allowance and the reply reports how many independent reads agreed (implying run-to-run variance). It also discloses the no-key SAMPLE fallback and the location-metadata handling nuance (stripped server-side, not before the payload leaves the caller), which is well beyond what the annotations convey.
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?
Front-loaded with the trigger and payload contract before the exclusions, and every sentence carries real routing information. It is on the long side and the three consecutive 'Do not use' sentences cover related ground, which is slight redundancy but not padding.
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?
Despite an output schema existing, the description still enumerates the return contract, cost model, sample behavior, and privacy handling, so an agent knows exactly what to expect. Nothing needed to call it correctly, or to decide not to, is missing.
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 100% and the parameters are already well documented in-schema (depth's read count and cost, reporter's wording effect, mime_type match rule, image constraints, problem_text as symptom not ground truth). The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.
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?
States a specific verb+resource ('assess a PHOTO of something in a building') and the scope of inputs it handles, then spells out the fixed return contract (asset identity, fault visibility, one of four urgency words, trade, resident line, agreement count). An agent can distinguish this from a general triage or sample tool without opening any schema.
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?
Gives explicit positive triggers with example asks, a hard exclusion list (people, pets, injuries, vehicles, food, documents, screenshots), an emergency escalation rule with concrete signals (gas hiss, CO alarm, water on live electrics) and the instruction not to call the tool, plus what it must not be used for (pricing, booking, insurance). This is about as complete a when/when-not specification as exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_triage_profileRead back a saved triage profileARead-onlyIdempotentInspect
Use this when you already have a fixRAgent diagnosis_id (from assess_property_photo, or from a fixragent.com/c/ link a person pasted) and want the saved assessment back as data. Reads only; it never re-reads the photo, never calls the model, and spends nothing from the daily allowance. Do not use this to assess a new photo — that is assess_property_photo. Do not use it to look up a person, an address, a property or an account: it takes one id and returns one assessment, and it returns no contact details of any kind.
| Name | Required | Description | Default |
|---|---|---|---|
| diagnosis_id | Yes | The UUID from assess_property_photo, or the last path segment of a fixragent.com/c/<id> link. |
Output Schema
| Name | Required | Description |
|---|---|---|
| core | Yes | |
| agreement | No | |
| config_id | No | |
| share_url | Yes | |
| created_at | No | |
| diagnosis_id | Yes | |
| engine_version | No | |
| rubric_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly/idempotent/non-destructive, and the description still layers on information they don't carry: it never re-reads the photo, never calls the model, consumes no daily allowance, and returns no contact details. Quota-cost and privacy behavior are exactly the kind of context annotations cannot express.
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 when-to-use case is front-loaded, followed by cost and privacy guarantees, then exclusions. The exclusion list is longer than strictly needed, but each clause blocks a realistic misuse, so it earns most of its length.
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 single-id read tool with full annotations and an existing output schema, the description covers usage, cost, privacy, and the return shape at a high level. There is no gap an agent would need to fill before calling it.
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?
With one parameter at 100% schema coverage, the schema already documents the UUID format and its source. The description restates the id's provenance but adds no syntax or format detail beyond the schema, so the baseline 3 applies.
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 specific verb and resource — reading back a saved triage profile keyed by diagnosis_id — and explicitly distinguishes itself from assess_property_photo. An agent can tell exactly what this tool returns without opening the schema.
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?
It gives the triggering condition (you already have a diagnosis_id from assess_property_photo or a fixragent.com/c/<id> link), names the alternative for new assessments, and enumerates what the tool is NOT for (person/address/property/account lookup). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
try_sampleTry a sample assessment (no key needed)ARead-onlyIdempotentInspect
Use this FIRST when the person has just connected fixRAgent, has no key yet, or asks what fixRAgent does or what a result looks like. It needs no key, takes no input, and returns a real stored fixRAgent assessment of a sample photo from fixRAgent's test set (an HVAC air handler and furnace), labelled SAMPLE, plus how to get a free key. It does not read any photo and spends nothing. Do not present the sample as an assessment of the person's own photo; for their photo, use assess_property_photo with a key.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| core | Yes | The fixed contract, exactly as the engine returned it for the sample photo. |
| label | Yes | One sentence saying what this is, to show the person as-is. |
| photo | No | What the sample photo shows, in words. The photo itself is not served. |
| sample | Yes | Always true: this is a stored example, not a read of any photo you sent. |
| agreement | No | n reads ran, k agreed. |
| config_id | No | |
| next_step | Yes | How to get a free key and assess your own photo. |
| captured_utc | No | When the real engine produced this answer. |
| diagnosis_id | No | |
| engine_version | No | |
| rubric_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description adds genuinely new behavior: it needs no key, takes no input, reads no photo, and spends nothing. Auth requirements and cost are exactly the traits annotations do not carry, so this adds real value.
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?
Front-loaded with the imperative 'Use this FIRST', then the conditions, then the return behavior, then the guardrail against misuse. Every sentence earns its place with no filler.
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 no-input tool with an output schema and rich annotations, the description covers the remaining gaps: what is returned (a real stored sample labelled SAMPLE plus key instructions), that it is free and reads nothing, and how it differs from the real assessment path. Nothing needed to call it correctly is missing.
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?
Zero parameters, so the baseline is 4. The description reinforces this with 'takes no input', consistent with the empty schema and additionalProperties=false, leaving nothing ambiguous.
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?
States a specific verb (try/return) and resource (a stored sample fixRAgent assessment) and explicitly names what it is not, routing to the sibling 'assess_property_photo with a key' for real photos. An agent can distinguish it from both siblings without opening any schema.
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?
Gives explicit triggering conditions ('Use this FIRST when the person has just connected fixRAgent, has no key yet, or asks what fixRAgent does') and a clear exclusion ('Do not present the sample as an assessment of the person's own photo; for their photo, use assess_property_photo with a key'). When-to-use, when-not, and the alternative are all present.
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.
3 tool updates
- First observed
assess_property_photo - First observed
get_triage_profile - First observed
try_sample
Related MCP Connectors
Routes home emergencies to the right trade: who to call in what order, first steps, sourced costs.
Property maintenance triage and vendor packet generator.
Property management AI: work orders, vendors, appliances, and triage for Claude and ChatGPT.
Quote UK trades jobs from any AI agent. Price breakdown + tappable booking link.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables turning spoken household issues into evidence-linked maintenance cases, deterministic diagnostic plans, quote comparisons, and owner-approved but unexecuted action proposals.Apache 2.0
- FlicenseAqualityDmaintenanceEnables AI agents to automate property maintenance workflows by managing tickets, sending WhatsApp notifications via Twilio, and triggering n8n automation webhooks. It allows users to query maintenance statuses, notify tenants, and escalate issues to vendors using natural language.4-
- AlicenseNot gradedqualityBmaintenanceEnables multifamily renovation cost estimation, scope of work generation, contractor bid evaluation, ROI gating, and risk flagging for real estate intelligence agents.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables voice-first household maintenance tracking, turning spoken updates into durable records, service history, and due-date reminders for a concise maintenance brief.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.