fixRAgent maintenance triage
Assess a property maintenance photo: what it is, how urgent, which trade to call.
Should I use this
Quality & Safety
Findings (2)
- HIGH
- LOWin assess_property_photo
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"fixragent": {
"url": "https://fixragent.com/mcp"
}
}
}Remote endpoints
https://fixragent.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (3)
🟢assess_property_photo(image_base64, mime_type, problem_text, reporter, depth)
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.
Input Schema
{
"type": "object",
"properties": {
"image_base64": {
"type": "string",
"description": "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."
},
"mime_type": {
"type": "string",
"enum": [
"image/jpeg",
"image/png",
"image/webp"
],
"description": "The photo's type. Must match the bytes; a mismatch is refused, not guessed."
},
"problem_text": {
"type": "string",
"maxLength": 1200,
"description": "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."
},
"reporter": {
"type": "string",
"enum": [
"resident",
"assessor",
"technician"
],
"default": "resident",
"description": "Who took the photo. Changes how the explanation is worded, not the verdict."
},
"depth": {
"type": "string",
"enum": [
"fast",
"deep"
],
"default": "fast",
"description": "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."
}
},
"required": [
"image_base64",
"mime_type"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"diagnosis_id": {
"type": "string",
"description": "Server-minted id for this assessment; the key for the profile and the outcome."
},
"share_url": {
"type": "string",
"description": "The Triage Profile as a page a resident or contractor can open."
},
"outcome_url": {
"type": "string",
"description": "Two taps to tell us what actually fixed it."
},
"engine_version": {
"type": "string"
},
"rubric_version": {
"type": "string"
},
"config_id": {
"type": "string",
"description": "An id beginning \"fallback-\" means a hardcoded config answered, not a measured one."
},
"core": {
"type": "object",
"description": "The fixed contract: asset, fault, tier, trade_required, resident_explanation and the rest."
},
"agreement": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
],
"description": "n reads ran, k agreed. k is null on a tie."
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"sample": {
"type": "boolean",
"description": "true = no key was sent: this is the stored SAMPLE, NOT an assessment of the photo you sent. Absent on a real assessment."
}
},
"required": [
"diagnosis_id",
"share_url",
"core"
]
}🟢get_triage_profile(diagnosis_id)
Use this when you already have a fixRAgent diagnosis_id (from assess_property_photo, or from a fixragent.com/c/<id> 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.
Input Schema
{
"type": "object",
"properties": {
"diagnosis_id": {
"type": "string",
"description": "The UUID from assess_property_photo, or the last path segment of a fixragent.com/c/<id> link."
}
},
"required": [
"diagnosis_id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"diagnosis_id": {
"type": "string"
},
"share_url": {
"type": "string"
},
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"engine_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"rubric_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"config_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"agreement": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
},
"core": {
"type": "object"
}
},
"required": [
"diagnosis_id",
"share_url",
"core"
]
}🟢try_sample
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.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"sample": {
"type": "boolean",
"description": "Always true: this is a stored example, not a read of any photo you sent."
},
"label": {
"type": "string",
"description": "One sentence saying what this is, to show the person as-is."
},
"photo": {
"type": "object",
"description": "What the sample photo shows, in words. The photo itself is not served."
},
"captured_utc": {
"type": "string",
"description": "When the real engine produced this answer."
},
"diagnosis_id": {
"type": "string"
},
"engine_version": {
"type": "string"
},
"rubric_version": {
"type": "string"
},
"config_id": {
"type": "string"
},
"core": {
"type": "object",
"description": "The fixed contract, exactly as the engine returned it for the sample photo."
},
"agreement": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
],
"description": "n reads ran, k agreed."
},
"next_step": {
"type": "string",
"description": "How to get a free key and assess your own photo."
}
},
"required": [
"sample",
"label",
"core",
"next_step"
]
}Community
Evidence