{"openapi":"3.1.2","info":{"title":"Mountain Man Plumbing — Agent-Net","version":"0.7.6","description":"Public content and optional business tools. Hosting access restrictions still apply."},"servers":[{"url":"https://mtnmanplumbing.com"}],"paths":{"/":{"get":{"summary":"Read a public page or site resource","parameters":[{"name":"agentnet","in":"query","required":true,"schema":{"type":"string","enum":["md","json","index","images","docs","guide","openapi","view","search","manifest","ard","catalog","card","llms","skill","task","actions"]}},{"name":"agentnet_display","in":"query","description":"Explicit browser-readable HTML for page/catalog/schema reads; raw preserves the native Markdown or JSON. Task pages default to html; discovery files always return their native format.","schema":{"type":"string","enum":["raw","html"],"default":"raw"}},{"name":"agentnet_limit","in":"query","description":"Image catalog page size; browser default 12, raw default 50.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"agentnet_after","in":"query","description":"Image cursor returned as next_after; keep query and limit unchanged.","schema":{"type":"integer","minimum":0}},{"name":"agentnet_detail","in":"query","description":"For agentnet=docs or guide: quickstart is the compact entry; full includes transport examples and complete reference.","schema":{"type":"string","enum":["quickstart","full"],"default":"quickstart"}},{"name":"q","in":"query","description":"Search pages requires 2–120 characters. Image keywords are optional (0–120); match alt, caption, URL and source title.","schema":{"type":"string","maxLength":120}},{"name":"agentnet_tool","in":"query","description":"For task only: an enabled operation; GET never submits.","schema":{"type":"string","examples":["get_booking_services","get_availability","request_booking","submit_contact"]}},{"name":"service_id","in":"query","description":"Exact ID returned by the installed booking adapter.","schema":{"type":"string","maxLength":80}},{"name":"zip","in":"query","schema":{"type":"string","pattern":"^[0-9]{5}$"}},{"name":"date","in":"query","schema":{"type":"string","format":"date"}},{"name":"query","in":"query","description":"Task service search, when declared by its schema.","schema":{"type":"string","maxLength":120}},{"name":"agentnet_page","in":"query","description":"Search and index window: pages 1–100. Images require next_after beyond legacy page 5.","schema":{"type":"integer","minimum":1,"maximum":100,"default":1}},{"name":"page_id","in":"query","schema":{"type":"integer","minimum":1},"description":"WordPress plain-permalink page ID."}],"responses":{"200":{"description":"Selected representation; page JSON contains markdown, outline, images, warnings and canonical_url.","content":{"text/markdown":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"object"}},"text/html":{"schema":{"type":"string"}}}},"400":{"description":"Invalid format or parameter"},"404":{"description":"No public document"},"409":{"description":"Signed-out public context required"},"503":{"description":"Conversion unavailable"},"429":{"description":"Request budget exceeded; honor Retry-After."}}},"post":{"summary":"Call MCP or direct business tools","parameters":[{"name":"agentnet","in":"query","required":true,"schema":{"type":"string","enum":["mcp","actions"]}},{"name":"Mcp-Protocol-Version","in":"header","description":"MCP only. For modern requests this must match params._meta protocolVersion; omit for actions.","schema":{"type":"string","enum":["2026-07-28","2025-11-25","2025-06-18","2025-03-26"]}},{"name":"Mcp-Method","in":"header","description":"Required for modern MCP: exact JSON-RPC method.","schema":{"type":"string"}},{"name":"Mcp-Name","in":"header","description":"Required for modern MCP tools/call: exact params.name.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer"]},"method":{"type":"string"},"params":{"type":"object"}}},{"oneOf":[{"type":"object","required":["name","arguments"],"additionalProperties":false,"properties":{"name":{"const":"get_booking_services"},"arguments":{"type":"object","properties":{"query":{"type":"string","minLength":0,"maxLength":120}},"required":[],"additionalProperties":false}}},{"type":"object","required":["name","arguments"],"additionalProperties":false,"properties":{"name":{"const":"get_availability"},"arguments":{"type":"object","properties":{"service_id":{"type":"string","minLength":1,"maxLength":80},"zip":{"type":"string","minLength":5,"maxLength":5},"date":{"type":"string","minLength":0,"maxLength":10}},"required":["service_id","zip"],"additionalProperties":false}}},{"type":"object","required":["name","arguments"],"additionalProperties":false,"properties":{"name":{"const":"request_booking"},"arguments":{"type":"object","properties":{"request_id":{"type":"string","minLength":16,"maxLength":96},"name":{"type":"string","minLength":2,"maxLength":120},"phone":{"type":"string","minLength":0,"maxLength":24},"email":{"type":"string","minLength":0,"maxLength":254},"message":{"type":"string","minLength":2,"maxLength":4000},"user_confirmed":{"type":"boolean","const":true},"offer_token":{"type":"string","minLength":20,"maxLength":4096},"street":{"type":"string","minLength":3,"maxLength":200},"city":{"type":"string","minLength":2,"maxLength":100},"state":{"type":"string","minLength":2,"maxLength":2},"zip":{"type":"string","minLength":5,"maxLength":5},"fee_agreed":{"type":"boolean"}},"required":["request_id","name","phone","message","user_confirmed","offer_token","street","city","state","zip","fee_agreed"],"additionalProperties":false}}},{"type":"object","required":["name","arguments"],"additionalProperties":false,"properties":{"name":{"const":"submit_contact"},"arguments":{"type":"object","properties":{"request_id":{"type":"string","minLength":16,"maxLength":96},"name":{"type":"string","minLength":2,"maxLength":120},"phone":{"type":"string","minLength":0,"maxLength":24},"email":{"type":"string","minLength":0,"maxLength":254},"message":{"type":"string","minLength":2,"maxLength":4000},"user_confirmed":{"type":"boolean","const":true}},"required":["request_id","name","message","user_confirmed"],"additionalProperties":false}}}]}]}}}},"responses":{"200":{"description":"MCP JSON-RPC result or tool error","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Legacy notification accepted"},"400":{"description":"Malformed JSON-RPC or protocol/header mismatch"},"429":{"description":"Tool read limit exceeded"}},"description":"For MCP, send Accept: application/json, text/event-stream and Content-Type: application/json. Modern requests also require matching Mcp-* headers and params._meta protocolVersion/clientCapabilities. For actions, POST name/arguments as application/json. Public writes use the normal CRM intake; HTTP 429 includes Retry-After. WordPress-authenticated action sessions are refused."}},"/{pagePath}":{"get":{"summary":"Read a public page or site resource","parameters":[{"name":"pagePath","in":"path","required":true,"description":"Public WordPress path, including nested segments. For plain permalinks, use / with page_id.","schema":{"type":"string"}},{"name":"agentnet","in":"query","required":true,"schema":{"type":"string","enum":["md","json","index","images","docs","guide","openapi","view","search","manifest","ard","catalog","card","llms","skill","task"]}},{"name":"agentnet_display","in":"query","description":"Explicit browser-readable HTML for page/catalog/schema reads; raw preserves the native Markdown or JSON. Task pages default to html; discovery files always return their native format.","schema":{"type":"string","enum":["raw","html"],"default":"raw"}},{"name":"agentnet_limit","in":"query","description":"Image catalog page size; browser default 12, raw default 50.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"agentnet_after","in":"query","description":"Image cursor returned as next_after; keep query and limit unchanged.","schema":{"type":"integer","minimum":0}},{"name":"agentnet_detail","in":"query","description":"For agentnet=docs or guide: quickstart is the compact entry; full includes transport examples and complete reference.","schema":{"type":"string","enum":["quickstart","full"],"default":"quickstart"}},{"name":"q","in":"query","description":"Search pages requires 2–120 characters. Image keywords are optional (0–120); match alt, caption, URL and source title.","schema":{"type":"string","maxLength":120}},{"name":"agentnet_tool","in":"query","description":"For task only: an enabled operation; GET never submits.","schema":{"type":"string","examples":["get_booking_services","get_availability","request_booking","submit_contact"]}},{"name":"service_id","in":"query","description":"Exact ID returned by the installed booking adapter.","schema":{"type":"string","maxLength":80}},{"name":"zip","in":"query","schema":{"type":"string","pattern":"^[0-9]{5}$"}},{"name":"date","in":"query","schema":{"type":"string","format":"date"}},{"name":"query","in":"query","description":"Task service search, when declared by its schema.","schema":{"type":"string","maxLength":120}},{"name":"agentnet_page","in":"query","description":"Search and index window: pages 1–100. Images require next_after beyond legacy page 5.","schema":{"type":"integer","minimum":1,"maximum":100,"default":1}}],"responses":{"200":{"description":"Selected representation; page JSON contains markdown, outline, images, warnings and canonical_url.","content":{"text/markdown":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"object"}},"text/html":{"schema":{"type":"string"}}}},"400":{"description":"Invalid format or parameter"},"404":{"description":"No public document"},"409":{"description":"Signed-out public context required"},"503":{"description":"Conversion unavailable"},"429":{"description":"Request budget exceeded; honor Retry-After."}}}}},"externalDocs":{"description":"API and MCP guide","url":"https://mtnmanplumbing.com/?agentnet=docs"},"x-agentnet-business-tools":[{"name":"get_booking_services","description":"Get published booking services, service-area ZIPs and current fee disclosure. Use the returned service_id for availability.","inputSchema":{"type":"object","properties":{"query":{"type":"string","minLength":0,"maxLength":120}},"required":[],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_availability","description":"Get live available windows for a returned service_id and customer ZIP. Offers expire after ten minutes; availability is not a reservation.","inputSchema":{"type":"object","properties":{"service_id":{"type":"string","minLength":1,"maxLength":80},"zip":{"type":"string","minLength":5,"maxLength":5},"date":{"type":"string","minLength":0,"maxLength":10}},"required":["service_id","zip"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"request_booking","description":"Submit the customer-approved service request through the normal CRM booking form. Requires a live offer_token, complete contact/address details and agreement to the disclosed fee. Creates a request for office confirmation, not a guaranteed appointment. Reuse request_id on retries.","inputSchema":{"type":"object","properties":{"request_id":{"type":"string","minLength":16,"maxLength":96},"name":{"type":"string","minLength":2,"maxLength":120},"phone":{"type":"string","minLength":0,"maxLength":24},"email":{"type":"string","minLength":0,"maxLength":254},"message":{"type":"string","minLength":2,"maxLength":4000},"user_confirmed":{"type":"boolean","const":true},"offer_token":{"type":"string","minLength":20,"maxLength":4096},"street":{"type":"string","minLength":3,"maxLength":200},"city":{"type":"string","minLength":2,"maxLength":100},"state":{"type":"string","minLength":2,"maxLength":2},"zip":{"type":"string","minLength":5,"maxLength":5},"fee_agreed":{"type":"boolean"}},"required":["request_id","name","phone","message","user_confirmed","offer_token","street","city","state","zip","fee_agreed"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"submit_contact","description":"Send a customer-approved message to the business through its normal CRM contact form. Provide a valid phone or email. Reuse request_id on retries.","inputSchema":{"type":"object","properties":{"request_id":{"type":"string","minLength":16,"maxLength":96},"name":{"type":"string","minLength":2,"maxLength":120},"phone":{"type":"string","minLength":0,"maxLength":24},"email":{"type":"string","minLength":0,"maxLength":254},"message":{"type":"string","minLength":2,"maxLength":4000},"user_confirmed":{"type":"boolean","const":true}},"required":["request_id","name","message","user_confirmed"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}}]}