InstaBids
Server Details
Start home-repair requests and read anonymised contractor bids.
- Status
- Healthy
- Uptime
- 31.9% over 15 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 8 tools
Most tools map clearly to distinct steps: start_job, job_status, check_service_area, permit_facts, and the two how-to explainers. bid_checklist and job_guidance both provide preparation guidance and could be confused, though their descriptions distinguish bid comparison from intake requirements.
All names use snake_case, but conventions vary: start_job and check_service_area are verb_noun, bid_checklist/job_guidance/permit_facts are noun phrases, and how_contractors_join/how_instabids_works are conversational question-style names. Still readable and domain-coherent, but not a predictable pattern.
Eight tools is well-scoped for a specialized marketplace assistant, with each tool covering a distinct step or information need. There is no obvious bloat or redundancy.
The surface covers onboarding, job creation, status tracking, permits, and preparation guidance, but stops short of actual bid retrieval or comparison and has no update/cancel operation for drafts. Since the marketplace's core value is comparing bids, the absence of any bid-list or bid-detail operation is a notable gap.
Available Tools
8 toolsbid_checklistBid comparison checklistARead-onlyIdempotentInspect
Get six items to compare in a home-project bid and optional trade-specific preparation. Omit trade for the general checklist; the answer's trade is then null. The answer includes sourceUrl.
| Name | Required | Description | Default |
|---|---|---|---|
| trade | No | optional trade key; leave it out for the general six items; the answer's trade is null when none was given |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| trade | Yes | |
| sourceUrl | Yes | |
| tradeSections | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered. The description adds only that the answer includes sourceUrl and that trade echoes back as null when omitted, which is modest but real context beyond the annotations; it says nothing about the shape or size of the six items.
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?
Three short sentences, front-loaded with the purpose and followed by the calling rule and a response note. Little waste, though the sourceUrl sentence overlaps with what the output schema already declares.
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-optional-parameter, read-only lookup with both full schema coverage and an output schema, the description covers the calling rule (omit trade) and one return-value expectation (sourceUrl, null trade). Nothing critical is missing, though a hint about what the six items represent would improve agent confidence.
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 100% and the enum values are documented in the schema, so the description only restates the optionality of trade and the null trade in the response. That restatement is mildly useful for output interpretation but adds no new meaning about the enum keys themselves (e.g., what 'ac' or 'pool_repair' preparation entails).
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 names a specific verb and resource ('Get six items to compare in a home-project bid') plus a trade-specific variant, which is concrete enough to distinguish it from siblings like permit_facts or job_status. It does not explicitly compare itself to any sibling, though none of the listed siblings appear to overlap in function.
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 clear conditional guidance on the one input ('Omit trade for the general checklist'), so an agent knows how to call it in both modes. However, it never states when to reach for this tool versus how_instabids_works or other informational siblings, leaving selection to inference from the purpose sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_service_areaCheck a ZIP before postingARead-onlyIdempotentInspect
Every US ZIP can post a job. Homeowners anywhere in the US can post a job; once you send it, InstaBids finds contractors to bid on it. Returns guidance and whether the input is a US ZIP, plus nearby town pages. Get the answer for a five-digit ZIP, and list towns with an InstaBids town page for a five-digit ZIP.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| towns | Yes | |
| status | Yes | |
| canPost | Yes | |
| message | Yes | |
| nextStep | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuine value beyond that: it discloses the business policy that all US ZIPs are eligible and that posting triggers contractor bidding, which prevents an agent from treating a 'false' result as a hard block. It does not cover error behavior or what 'guidance' text contains, but that is largely the output schema's job.
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 first two sentences are near-duplicates ('Every US ZIP can post a job' / 'Homeowners anywhere in the US can post a job'), and the final sentence repeats 'five-digit ZIP' twice. Structure is front-loaded with policy rather than with what the tool actually does. It is readable and not bloated to the point of harm, but each sentence does not fully earn its place.
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 one-parameter, read-only lookup with an output schema, the description supplies the key policy context and input format an agent needs to interpret results. Return-value explanation is somewhat redundant given the output schema, but nothing essential is missing for correct invocation.
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 0%, so the description must carry the parameter burden, and it does confirm the input is a five-digit ZIP, matching the '^[0-9]{5}$' pattern. But the closing sentence splits the single 'zip' parameter into two apparent operations ('get the answer' and 'list towns'), which muddies rather than clarifies semantics. The format hint is the only real addition over the 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 does state the concrete outputs — guidance text, a US-ZIP determination, and nearby town pages — so an agent knows what the tool returns. The core purpose (validating/answering for a ZIP before posting) is inferable but diluted by the opening policy statement 'Every US ZIP can post a job', which reads like marketing rather than a verb+resource definition. No sibling tool is named, though none of the listed siblings clearly overlaps.
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 gating policy ('Every US ZIP can post a job') is useful context that implies this check is not a blocker, and the title's 'before posting' implies the timing. However, the description never explicitly says when to call this versus job_guidance or start_job, and gives no exclusion conditions. Usage is only implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
how_contractors_joinHow contractors join InstaBidsARead-onlyIdempotentInspect
InstaBids is an AI-run marketplace for homeowners and property managers: describe a home job once, by chat or through your own AI assistant, add photos, and get multiple written quotes on the same scope, compared apples to apples, with no phone calls or home visits before you pick. Get the contractor join steps, availability, alias privacy, job-texts status and links to join or ask for text alerts. Joining asks only for your business details. Hand over the links so the contractor signs up and asks for texts themselves; this tool creates no account and sends no text.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| urls | Yes | |
| steps | Yes | |
| identity | Yes | |
| jobTexts | Yes | |
| joinAsks | Yes | |
| humanStep | Yes | |
| availability | Yes | |
| homeownerCost | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered. The description adds genuine value beyond that by stating the tool "creates no account and sends no text" and that joining "asks only for your business details" — a privacy and side-effect disclosure the agent cannot get from annotations.
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?
Two long sentences, and the first is a marketing description of the InstaBids marketplace that does not describe what this tool does. The actionable content — what is returned and what the caller must do with the links — is buried in the second half rather than 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?
For a zero-parameter read tool with an output schema, the description is nearly complete: it enumerates the returned content (join steps, availability, alias privacy, job-texts status, links) and states the caller's follow-up action. The only gap is that it never scopes itself against the sibling how_instabids_works, leaving overlap unresolved.
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 tool takes zero parameters, so there is no parameter meaning to convey; the baseline is a 4. The description does note that joining requests only business details, but that refers to the external signup flow, not to any input this tool accepts, so it adds little parameter-level value.
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 core verb and resource are specific: "Get the contractor join steps, availability, alias privacy, job-texts status and links to join or ask for text alerts." It also distinguishes itself behaviorally from an enrollment action ("this tool creates no account and sends no text"). However, the opening half of the description is a homeowner-facing marketplace pitch rather than a statement of this tool's purpose, which dilutes the clarity.
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 clear operating context: "Hand over the links so the contractor signs up and asks for texts themselves." That tells the agent what to do with the output. It does not explicitly name sibling tools such as how_instabids_works as alternatives, so the routing guidance between the two overview-style tools 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.
how_instabids_worksHow InstaBids worksBRead-onlyIdempotentInspect
InstaBids is an AI-run marketplace for homeowners and property managers: describe a home job once, by chat or through your own AI assistant, add photos, and get multiple written quotes on the same scope, compared apples to apples, with no phone calls or home visits before you pick. Learn the homeowner steps, homeowner cost and contact privacy.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| steps | Yes | |
| guidance | Yes | |
| nextStep | No | |
| sourceUrl | Yes | |
| homeownerFee | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a read-only, idempotent, non-destructive, closed-world tool. The description adds useful domain context about what InstaBids is, but it does not disclose additional behavior such as whether the returned content is static documentation, how current it is, or any rate limits.
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 only two sentences and contains no obvious repetition. The first sentence is somewhat long and marketing-oriented, but it provides context before the second sentence states the covered topics.
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 zero-parameter informational tool with an output schema, the description covers the main content areas but remains somewhat ambiguous about whether it returns static documentation and how it differs from the contractor sibling. It is adequate, but not fully complete for an agent deciding between informational tools.
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 tool has zero parameters and the input schema is empty, so the baseline score is 4. There are no parameter meanings for the description to clarify beyond what the schema already shows.
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 names the subject (InstaBids marketplace) and the topics covered (homeowner steps, homeowner cost, contact privacy), so an agent can tell it is an informational tool. It does not explicitly contrast itself with the contractor-focused sibling, which keeps it from a 5.
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?
There is no explicit when-to-use or when-not-to-use guidance. The phrase 'Learn the homeowner steps...' implies an educational purpose, but the description never says when to call this tool instead of job_guidance, how_contractors_join, or other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_guidanceJob preparation questions and photosARead-onlyIdempotentInspect
Get must-have questions and photo asks from the current intake template for any trade. Unknown trades use the generic template. No prices or budget questions.
| Name | Required | Description | Default |
|---|---|---|---|
| trade | No | lowercase key such as roofing; leave it out for the generic template | generic |
Output Schema
| Name | Required | Description |
|---|---|---|
| trade | Yes | |
| nextStep | No | |
| mustHaves | Yes | |
| photoAsks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, closed-world, non-destructive, so safety needs no restating. The description goes beyond them by disclosing the fallback behavior for unrecognized trades and by scoping out pricing/budget content, which tells the agent what the response will and will not contain.
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?
Three short sentences, zero filler, with the core capability front-loaded and the fallback and exclusion following as qualifiers. Every sentence carries information an agent would otherwise have to guess.
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?
With rich annotations, an output schema, and one optional parameter, the definition covers purpose, fallback, and content exclusions adequately. The only mild gap is that 'current intake template' is not explained (versioning or which template is active), which an agent might need in ambiguous cases.
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 single optional 'trade' parameter already documents the lowercase-key format and the omit-for-generic default, so baseline is 3. The description adds real meaning beyond that by clarifying that an unrecognized trade value yields the generic template rather than an error.
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 ('Get') and a concrete resource ('must-have questions and photo asks from the current intake template'), scoped 'for any trade'. It is clearly distinguishable from siblings like bid_checklist or permit_facts, though it never names those siblings explicitly.
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 clear invocation context: use it to pull intake-template prep questions for a trade, omit the trade for the generic set, and note that unknown trades fall back rather than erroring. It adds one exclusion ('No prices or budget questions'), but offers no explicit comparison to alternatives such as bid_checklist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_statusCheck a draft jobARead-onlyIdempotentInspect
Use this after start_job returned a statusHandle, to see whether the homeowner has sent the job and how many bids have arrived. Returns only the stage (draft, sent, collecting_bids, picked, closed or expired), the bid count and when it last changed. Never returns bid amounts, contractor names or the job text. The handle works for 7 days. Stage expired means the one-hour link lapsed before the homeowner opened it: start again with start_job. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| statusHandle | Yes | The statusHandle returned by start_job (43 characters). Expires seven days after creation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stage | Yes | |
| bidCount | Yes | |
| nextStep | Yes | Guidance for the homeowner based on the current job stage; no action has been taken. |
| updatedAt | Yes | |
| homeownerUrl | No | InstaBids page for the homeowner to open: intake for an expired draft, or their requests for a sent, collecting_bids or picked job. Omitted for other stages or when links are unavailable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantial context beyond them: the 7-day handle lifetime, the exact field set returned, and explicit negative guarantees (no bid amounts, contractor names or job text). The 'expired means the one-hour link lapsed before the homeowner opened it' note explains a non-obvious state transition an agent would otherwise misread.
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 when-to-use clause, then the return contract, then the expiry caveat — a sensible order with no filler. Minor redundancy: 'The handle works for 7 days' and 'Read-only' duplicate what the schema and annotations already state.
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-parameter read tool this covers everything an agent needs: when to call it, what comes back, what deliberately does not come back, the handle lifetime, and how to recover from the expired state. An output schema exists, so no further return-value detail is required.
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 100% and the schema property already states the handle comes from start_job, is 43 characters, and expires in seven days. The description restates the origin and the 7-day expiry without adding format or validation 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?
Names a specific verb and resource (check a job's status after start_job returned a statusHandle) and enumerates the exact return fields (stage, bid count, last changed), which lets an agent distinguish it from siblings like start_job or bid_checklist without opening a 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 an explicit trigger ('Use this after start_job returned a statusHandle') and an explicit recovery path for the failure case: 'Stage expired ... start again with start_job.' The alternative tool and the condition that selects it are both stated, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
permit_factsPublished local permit factsBRead-onlyIdempotentInspect
Read sourced local permit facts, with the date each rule was checked; unpublished rules get guidance to ask your bidder and confirm local requirements. Homeowners anywhere in the US can post a job; once you send it, InstaBids finds contractors to bid on it.
| Name | Required | Description | Default |
|---|---|---|---|
| town | Yes | a five-digit ZIP or a town name | |
| trade | No | optional |
Output Schema
| Name | Required | Description |
|---|---|---|
| town | Yes | |
| records | Yes | |
| guidance | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and idempotent=true, so safety is covered. The description does add genuine value by disclosing that facts are sourced, timestamped with the check date, and that unpublished rules return fallback guidance telling the caller to confirm locally. However, the second sentence describes a job-posting workflow that is not part of this read-only lookup and can mislead an agent about side effects.
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 first sentence is dense and front-loaded with the essential behavior. The second sentence about homeowners posting jobs is off-topic boilerplate that does not earn its place in a permit-lookup definition.
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?
With two parameters, full schema coverage, an output schema, and rich annotations, the description only needs to add routing and behavior. It covers the unpublished-rule fallback but omits when to prefer it over the other permit/job siblings, leaving a gap for a fairly simple tool.
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%, with 'town' documented as a five-digit ZIP or town name and 'trade' constrained to an enum. The description adds nothing about either parameter, so the schema carries the full burden and 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 opens with a specific verb+resource: 'Read sourced local permit facts,' and adds the scope qualifier that each rule carries the date it was checked. That is clearly distinct from siblings like job_status or check_service_area, though no sibling is named explicitly.
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?
There is no statement of when to reach for this tool versus bid_checklist, job_guidance, or check_service_area, nor any precondition such as needing a town or trade. The only guidance is implicit in 'unpublished rules get guidance to ask your bidder,' and the closing sentence about posting a job offers no usage direction for this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_jobStart a draft jobAInspect
Use this when a homeowner wants contractor bids on a home repair or improvement job in the US. Creates a private draft from their description and five-digit ZIP and returns a one-hour link for the homeowner to open. Nothing reaches a contractor until the homeowner confirms their email and sends it. Do not include names, phone numbers, emails or street addresses. Do not use for emergencies. Ask the homeowner, one short question at a time and only for what is missing, what needs doing, where in the home, rough size or count, when it is needed and who supplies materials, then put the answers in the message. fill what you can; everything else can come later. Start with the homeowner’s description, trade and ZIP, plus a photo or a good description. Optional: photos, a description or transcript of a 20–60 s walk clip, timing and the job type’s must-haves from intake_templates. Never invent answers. ZIP only; never send a street address or a price. Nothing reaches contractors before the homeowner sends the card.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | Yes | ||
| trade | Yes | Job trade; generic home repair is allowed. | |
| message | Yes | ||
| photoUrls | No | Optional photos; attachment still requires the existing scan and photo permissions. | |
| quotes_by | No | ISO date, or null for no deadline; never a price. | |
| walk_clip | No | Description or transcript of a 20–60 s walk clip. This tool does not upload video bytes or fetch video URLs. | |
| must_haves | No | Known answers to this job type’s intake_templates must-haves; unknown answers can come later. | |
| intent_level | No | 10 emergency; 8 soon; 6 planned; 4 if the price is right; 2 someday. Use only evidence from the homeowner. | |
| deadline_hard | No | ||
| deadline_reason | No | Optional reason for the date, without names or contact details. | |
| intent_confidence | No | ||
| project_completion_deadline | No | ISO date, or null for no deadline; never a price. |
Output Schema
| Name | Required | Description |
|---|---|---|
| card | No | Saved in-chat card, present only when available. |
| status | Yes | |
| message | Yes | |
| claimUrl | Yes | |
| expiresAt | Yes | |
| understood | No | |
| photosAdded | No | |
| statusHandle | No | Read handle for job_status, present only when available. |
| photosRefused | No | |
| cardUnavailable | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the mutation/safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=false). The description adds substantial behavior beyond that: the job stays a private draft, nothing reaches a contractor until the homeowner confirms email and sends, and a one-hour link is returned. It also discloses the PII and ZIP-only constraints that govern what may be submitted.
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 critical scoping and privacy rules are front-loaded, which is good, but the text is long and repeats itself ('Nothing reaches a contractor until the homeowner confirms their email and sends it' vs 'Nothing reaches contractors before the homeowner sends the card'). The mid-section question checklist is useful but reads as a run-on.
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 12-parameter mutation tool with an output schema and annotations, the description covers the workflow, privacy constraints and intake procedure thoroughly. The main gap is that idempotentHint=false is never surfaced as a warning about creating duplicate drafts if the tool is called twice.
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 67%, and the description compensates well for the core fields: it explains what belongs in message, that zip is five-digit and street-address-free, that trade is required, and that photos, walk_clip transcripts, timing and must_haves from intake_templates are optional. It does not explain intent_level, intent_confidence, deadline_hard or project_completion_deadline, which rely on the schema text alone.
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 and resource ('Creates a private draft' job) plus the trigger condition (homeowner wants contractor bids on a US home repair/improvement job) and the return value (a one-hour link). It is clearly distinguishable from siblings like job_status and job_guidance.
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?
Explicit when-to-use ('when a homeowner wants contractor bids'), explicit when-not ('Do not use for emergencies'), and explicit data exclusions (no names, phones, emails, street addresses, prices). It also prescribes the intake procedure: ask one short question at a time, only for what is missing, and never invent answers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
start_job1 field changed- removed
Output schema / properties / sendUrlRemoved value: -{ - "format": "uri", - "type": "string" -}
3 tool updates
- Changed
job_guidance2 fields changed- added
Input schema / properties / trade / defaultAdded value: +"generic" - added
Input schema / properties / trade / descriptionAdded value: +"lowercase key such as roofing; leave it out for the generic template"
- Changed
job_status3 fields changed- added
Input schema / properties / statusHandle / descriptionAdded value: +"The statusHandle returned by start_job (43 characters). Expires seven days after creation." - added
Output schema / properties / homeownerUrl / descriptionAdded value: +"InstaBids page for the homeowner to open: intake for an expired draft, or their requests for a sent, collecting_bids or picked job. Omitted for other stages or when links are unavailable." - added
Output schema / properties / nextStep / descriptionAdded value: +"Guidance for the homeowner based on the current job stage; no action has been taken."
- Changed
permit_facts2 fields changed- added
Input schema / properties / town / descriptionAdded value: +"a five-digit ZIP or a town name" - added
Input schema / properties / trade / descriptionAdded value: +"optional"
7 tool updates
- Changed
check_service_area1 field changed- added
Output schema / properties / nextStepAdded value: +{ + "type": "string" +}
- Added
how_contractors_join - Changed
how_instabids_works1 field changed- added
Output schema / properties / nextStepAdded value: +{ + "type": "string" +}
- Added
job_guidance - Changed
job_status3 fields changed- added
Output schema / properties / homeownerUrlAdded value: +{ + "format": "uri", + "type": "string" +} - added
Output schema / properties / nextStepAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "stage", - "bidCount", - "updatedAt" -]New value: +[ + "stage", + "bidCount", + "updatedAt", + "nextStep" +]
- Changed
permit_facts4 fields changed- removed
Input schema / properties / town / enumRemoved value: -[ - "boca-raton", - "coconut-creek", - "parkland", - "pompano-beach" -] - added
Input schema / properties / town / maxLengthAdded value: +80 - added
Input schema / properties / town / minLengthAdded value: +1 - added
Input schema / properties / town / patternAdded value: +"^(?:[0-9]{5}|[\\p{L}][\\p{L}\\p{M} ,.'’-]{0,79})$"
- Changed
start_job15 fields changed- added
Input schema / properties / deadline_hardAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / deadline_reasonAdded value: +{ + "description": "Optional reason for the date, without names or contact details.", + "maxLength": 300, + "type": "string" +} - added
Input schema / properties / intent_confidenceAdded value: +{ + "enum": [ + "low", + "med", + "high" + ], + "type": "string" +} - added
Input schema / properties / intent_levelAdded value: +{ + "description": "10 emergency; 8 soon; 6 planned; 4 if the price is right; 2 someday. Use only evidence from the homeowner.", + "enum": [ + 2, + 4, + 6, + 8, + 10 + ], + "type": "integer" +} - added
Input schema / properties / must_havesAdded value: +{ + "description": "Known answers to this job type’s intake_templates must-haves; unknown answers can come later.", + "items": { + "additionalProperties": false, + "properties": { + "answer": { + "maxLength": 300, + "minLength": 1, + "type": "string" + }, + "key": { + "maxLength": 100, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "key", + "answer" + ], + "type": "object" + }, + "maxItems": 20, + "type": "array" +} - added
Input schema / properties / photoUrlsAdded value: +{ + "description": "Optional photos; attachment still requires the existing scan and photo permissions.", + "items": { + "maxLength": 2048, + "pattern": "^https://", + "type": "string" + }, + "maxItems": 5, + "type": "array" +} - added
Input schema / properties / project_completion_deadlineAdded value: +{ + "description": "ISO date, or null for no deadline; never a price.", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / quotes_byAdded value: +{ + "description": "ISO date, or null for no deadline; never a price.", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": [ + "string", + "null" + ] +} - added
Input schema / properties / tradeAdded value: +{ + "description": "Job trade; generic home repair is allowed.", + "maxLength": 100, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / walk_clipAdded value: +{ + "description": "Description or transcript of a 20–60 s walk clip. This tool does not upload video bytes or fetch video URLs.", + "maxLength": 1000, + "minLength": 1, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "message", - "zip" -]New value: +[ + "message", + "zip", + "trade" +] - added
Output schema / properties / cardUnavailableAdded value: +{ + "const": true, + "type": "boolean" +} - added
Output schema / properties / photosAddedAdded value: +{ + "maximum": 5, + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / photosRefusedAdded value: +{ + "maximum": 5, + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / understoodAdded value: +{ + "additionalProperties": false, + "properties": { + "missingMustHaves": { + "items": { + "pattern": "^gap_[a-f0-9]{16}$", + "type": "string" + }, + "maxItems": 100, + "type": "array" + }, + "nextQuestion": { + "additionalProperties": false, + "properties": { + "author": { + "const": "assistant", + "type": "string" + }, + "instructionFlags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "text": { + "maxLength": 600, + "type": "string" + }, + "untrusted": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "untrusted", + "author", + "text", + "instructionFlags" + ], + "type": [ + "object", + "null" + ] + }, + "scopeSummary": { + "maxLength": 600, + "type": [ + "string", + "null" + ] + }, + "trade": { + "maxLength": 600, + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "trade", + "scopeSummary", + "missingMustHaves", + "nextQuestion" + ], + "type": "object" +}
1 tool update
- Changed
bid_checklist1 field changed- added
Input schema / properties / trade / descriptionAdded value: +"optional trade key; leave it out for the general six items; the answer's trade is null when none was given"
1 tool update
- Changed
start_job2 fields changed- added
Output schema / properties / card / descriptionAdded value: +"Saved in-chat card, present only when available." - added
Output schema / properties / statusHandle / descriptionAdded value: +"Read handle for job_status, present only when available."
1 tool update
- Changed
start_job1 field changed- added
Output schema / properties / sendUrlAdded value: +{ + "format": "uri", + "type": "string" +}
2 tool updates
- Added
job_status - Changed
start_job1 field changed- added
Output schema / properties / statusHandleAdded value: +{ + "pattern": "^[A-Za-z0-9_-]{43}$", + "type": "string" +}
4 tool updates
- Changed
bid_checklist1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sourceUrl": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "trade": { + "enum": [ + "ac", + "pool_repair", + null + ], + "type": [ + "string", + "null" + ] + }, + "tradeSections": { + "items": { + "additionalProperties": false, + "properties": { + "heading": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "heading", + "text" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "items", + "sourceUrl", + "trade", + "tradeSections" + ], + "type": "object" +}
- Changed
check_service_area1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "canPost": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "status": { + "enum": [ + "guidance", + "not_a_us_zip" + ], + "type": "string" + }, + "towns": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "status", + "canPost", + "towns", + "message" + ], + "type": "object" +}
- Changed
how_instabids_works1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "guidance": { + "type": "string" + }, + "homeownerFee": { + "type": "string" + }, + "sourceUrl": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "steps": { + "items": { + "additionalProperties": false, + "properties": { + "heading": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "required": [ + "heading", + "text" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "homeownerFee", + "steps", + "guidance", + "sourceUrl" + ], + "type": "object" +}
- Changed
permit_facts1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "guidance": { + "items": { + "additionalProperties": false, + "properties": { + "note": { + "type": "string" + }, + "trade": { + "enum": [ + "ac", + "pool_repair" + ], + "type": "string" + } + }, + "required": [ + "trade", + "note" + ], + "type": "object" + }, + "type": "array" + }, + "records": { + "items": { + "additionalProperties": false, + "properties": { + "checked": { + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "type": "string" + }, + "note": { + "type": "string" + }, + "publisher": { + "type": "string" + }, + "sourceTitle": { + "type": "string" + }, + "sourceUrl": { + "format": "uri", + "pattern": "^https://", + "type": "string" + }, + "trade": { + "enum": [ + "ac", + "pool_repair" + ], + "type": "string" + } + }, + "required": [ + "trade", + "note", + "sourceUrl", + "publisher", + "sourceTitle", + "checked" + ], + "type": "object" + }, + "type": "array" + }, + "town": { + "type": "string" + } + }, + "required": [ + "town", + "records", + "guidance" + ], + "type": "object" +}
5 tool updates
- First observed
bid_checklist - First observed
check_service_area - First observed
how_instabids_works - First observed
permit_facts - First observed
start_job
Related MCP Connectors
Get bids from local US contractors: scope a job, then BidCraft contacts contractors for you.
Real quotes from local US contractors for property jobs, ranked in ~48h, plus fair-price checks.
Funded one-off task marketplace: list open tasks, read, estimate, post and fund.
Book a local business by saying what you need; matching businesses bid and you confirm one.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables an assistant to report repair issues, compare source-backed quotes, propose appointment times, and retrieve, list, or cancel local repair tasks with explicit household confirmation.MIT
- AlicenseNot gradedqualityBmaintenanceEnables an Alexa+ user to report a household or street fault by voice and walk through safety shut-off steps, a municipal case, priced repair quotes from local suppliers, and a booking that is only confirmed after explicit approval. It also remembers the household across sessions and keeps a tamper-evident audit trail, with photo diagnosis, job tracking, escalations, ratings, and a shareable landlord view.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to submit and track local household-service requests such as house cleaning or pest control, validating details and passing each as a routed opportunity to external providers or buyer networks. Exposes service-discovery, submission, and status-check tools so those requests flow through one consistent intake pipeline.MIT
- AlicenseNot gradedqualityBmaintenanceEnables tenants to report rental repair issues by voice and landlords to be notified instantly, keeping both sides on one append-only, hash-chained timeline with photos, follow-ups, disputes, and dated response-time reports that neither party can quietly alter.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.