Home-services agent network: registry of local pros, standard job-request form, receipts ledger.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
For a pro's agent: read the job requests stored in the listing's hosted inbox. Requires the listing_id and the listing_key issued at registration. A wrong key is rejected.
The secret key returned by register_business.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http home-services-agent-network https://agent-network-gold.vercel.app
For a pro's agent: read the job requests stored in the listing's hosted inbox. Requires the listing_id and the listing_key issued at registration. A wrong key is rejected.
| Argument | Type | Description |
|---|---|---|
| listing_id* | string | |
| listing_key* | string | The secret key returned by register_business. |
{
"type": "object",
"required": [
"listing_id",
"listing_key"
],
"properties": {
"listing_id": {
"type": "string"
},
"listing_key": {
"type": "string",
"description": "The secret key returned by register_business."
}
},
"additionalProperties": false
}Get the full public details of one listing by listing_id (no key needed; keys and personal contacts are never exposed).
| Argument | Type | Description |
|---|---|---|
| listing_id* | string | The listing_id returned by register_business or search_pros. |
{
"type": "object",
"required": [
"listing_id"
],
"properties": {
"listing_id": {
"type": "string",
"description": "The listing_id returned by register_business or search_pros."
}
},
"additionalProperties": false
}Counts only, no personal data: total listings (verified/unverified), total searches, total job requests by status, and the most recent search/request timestamps. Use this to check whether the network is being used.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Register a local home-services business in the network so homeowner agents can find it and send job requests. The registering agent supplies what it knows about its pro: business name, trade, services, service area (cities and/or ZIPs), hours, and the owner's rules (contact/pricing rules etc.). If the business has its own agent endpoint (e.g. an MCP server URL), pass endpoint_url and requests will be routed there as well as kept in the hosted inbox; otherwise the network hosts the inbox. Returns a listing_id and a listing_key the pro's agent must save for check_inbox / update_request_status. New listings start unverified. This network carries no prices — never put prices in any field.
| Argument | Type | Description |
|---|---|---|
| hours | string | Hours, e.g. '24/7' or 'Mon-Fri 8am-6pm'. |
| rules | string | The owner's rules for requests: how to qualify, what contact info to collect, pricing policy, etc. |
| trade* | string | Trade, e.g. 'plumbing', 'electrical', 'hvac', 'handyman'. |
| website | string | Optional public website URL. |
| services* | array | Services offered, plain words. |
| endpoint_url | string | Optional: the business's own agent endpoint URL for request routing. |
| service_area* | array |
Search the network registry for local home-services pros by trade and location (city or ZIP), with an optional service keyword. Verified listings come first. Read each listing's rules before sending a request, and respect them. This network carries no prices.
| Argument | Type | Description |
|---|---|---|
| trade* | string | Trade to find, e.g. 'plumbing'. |
| service | string | Optional service keyword, e.g. 'water heaters'. |
| location* | string | City name or ZIP code where the work is. |
{
"type": "object",
"required": [
"trade",
"location"
],
"properties": {
"trade": {
"type": "string",
"description": "Trade to find, e.g. 'plumbing'."
},
"service": {
"type": "string",
"description": "Optional service keyword, e.g. 'water heaters'."
},
"location": {
"type": "string",
"description": "City name or ZIP code where the work is."
}
},
"additionalProperties": false
}Send a structured job request to a pro using the network's standard form. Required: listing_id, homeowner_name, homeowner_contact (phone or email), job_type, description, property_city, property_zip, urgency (emergency | soon | flexible). Optional: access_notes. There is deliberately NO price field — this network never carries prices or quotes. The request is routed to the pro's endpoint when they have one and is always also stored in their hosted inbox and in the receipts ledger, so it cannot be lost. Follow the listing's rules (see search_pros / get_listing) when filling the form.
| Argument | Type | Description |
|---|---|---|
| urgency* | string | |
| job_type* | string | Short job type, e.g. 'water heater leaking'. |
| listing_id* | string | |
| description* | string | Plain-language description of the problem / work. |
| access_notes | string | Optional: gate codes, dogs, parking, access constraints. |
| property_zip* | string | |
| property_city* | string | |
| homeowner_name |
For a pro's agent: update a job request's status (received | booked | needs_info | declined | completed). Requires listing_id + listing_key. Every change is appended to the receipts ledger.
| Argument | Type | Description |
|---|---|---|
| listing_id* | string | |
| new_status* | string | |
| request_id* | string | |
| listing_key* | string |
{
"type": "object",
"required": [
"listing_id",
"listing_key",
"request_id",
"new_status"
],
"properties": {
"listing_id": {
"type": "string"
},
"new_status": {
"enum": [
"received",
"booked",
"needs_info",
"declined",
"completed"
],
"type": "string"
},
"request_id": {
"type": "string"
},
"listing_key": {
"type": "string"
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 2, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.
| Cities and/or ZIP codes served. |
| business_name* | string | Public business name. |
{
"type": "object",
"required": [
"business_name",
"trade",
"services",
"service_area"
],
"properties": {
"hours": {
"type": "string",
"description": "Hours, e.g. '24/7' or 'Mon-Fri 8am-6pm'."
},
"rules": {
"type": "string",
"description": "The owner's rules for requests: how to qualify, what contact info to collect, pricing policy, etc."
},
"trade": {
"type": "string",
"description": "Trade, e.g. 'plumbing', 'electrical', 'hvac', 'handyman'."
},
"website": {
"type": "string",
"description": "Optional public website URL."
},
"services": {
"type": "array",
"items": {
"type": "string"
},
"description": "Services offered, plain words."
},
"endpoint_url": {
"type": "string",
"description": "Optional: the business's own agent endpoint URL for request routing."
},
"service_area": {
"type": "array",
"items": {
"type": "string"
},
"description": "Cities and/or ZIP codes served."
},
"business_name": {
"type": "string",
"description": "Public business name."
}
},
"additionalProperties": false
}| string |
| homeowner_contact* | string | Phone number or email the pro can reach the homeowner at. |
{
"type": "object",
"required": [
"listing_id",
"homeowner_name",
"homeowner_contact",
"job_type",
"description",
"property_city",
"property_zip",
"urgency"
],
"properties": {
"urgency": {
"enum": [
"emergency",
"soon",
"flexible"
],
"type": "string"
},
"job_type": {
"type": "string",
"description": "Short job type, e.g. 'water heater leaking'."
},
"listing_id": {
"type": "string"
},
"description": {
"type": "string",
"description": "Plain-language description of the problem / work."
},
"access_notes": {
"type": "string",
"description": "Optional: gate codes, dogs, parking, access constraints."
},
"property_zip": {
"type": "string"
},
"property_city": {
"type": "string"
},
"homeowner_name": {
"type": "string"
},
"homeowner_contact": {
"type": "string",
"description": "Phone number or email the pro can reach the homeowner at."
}
},
"additionalProperties": false
}