{"openapi":"3.1.0","info":{"title":"Arlite Energy website API","version":"1.0.0","summary":"Read-only JSON API and MCP server for the Arlite Energy website.","description":"Read-only, public JSON API to the Arlite Energy website: business facts, services, pages, support answers and FAQs, in en-AU. The same data is available to AI agents through an MCP server (`POST /mcp`). No authentication. Each client IP may make 120 requests per minute; beyond that the API answers 429 with a `Retry-After` header. Responses carry an `ETag` and `Cache-Control`; send `If-None-Match` to get 304. CORS allows any origin for GET. The API does not quote prices or book work: for a quote, use https://arlite.co/contact/.","contact":{"name":"Arlite Energy","url":"https://arlite.co/","email":"info@arlite.co"}},"servers":[{"url":"https://arlite.co/wp-json/arlite/v1","description":"Arlite Energy website API"}],"security":[],"tags":[{"name":"Discovery","description":"API index."},{"name":"Business","description":"Business facts."},{"name":"Services","description":"Services Arlite offers."},{"name":"Pages","description":"Landing and information pages."},{"name":"Support","description":"Support Centre articles."},{"name":"Search","description":"Site search."},{"name":"FAQ","description":"Frequently asked questions."},{"name":"MCP","description":"Model Context Protocol server."}],"paths":{"/":{"get":{"operationId":"getApiIndex","tags":["Discovery"],"summary":"API index","description":"Endpoint list, MCP URL and limits for this API.","responses":{"200":{"description":"API index.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiIndex"}}}},"304":{"$ref":"#/components/responses/NotModified"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/business":{"get":{"operationId":"getBusiness","tags":["Business"],"summary":"Business facts","description":"Legal name, ABN, address, phone, email, licences, service area, finance line and the top-level services.","responses":{"200":{"description":"Business facts.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Business"}}}},"304":{"$ref":"#/components/responses/NotModified"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/services":{"get":{"operationId":"listServices","tags":["Services"],"summary":"List services","description":"Every published service, nested by parent, each with title, slug, URL and a short description.","responses":{"200":{"description":"List services.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceList"}}}},"304":{"$ref":"#/components/responses/NotModified"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/services/{path}":{"get":{"operationId":"getService","tags":["Services"],"summary":"Get a service","description":"One service with its plain-text body and FAQs. The path is the slug path from the service list, for example `solar-power/solar-batteries`; a unique last segment such as `solar-batteries` also works. The path contains slashes, send them unencoded.","responses":{"200":{"description":"Get a service.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Service"}}}},"304":{"$ref":"#/components/responses/NotModified"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"path","in":"path","required":true,"description":"Slug path of the service, for example `solar-power/solar-batteries`.","schema":{"type":"string","pattern":"^[A-Za-z0-9_\\-/]+$"},"example":"solar-power/solar-batteries"}]}},"/pages":{"get":{"operationId":"listPages","tags":["Pages"],"summary":"List pages","description":"Landing and information pages (For Home, For Work, Finance Options, Contact and others).","responses":{"200":{"description":"List pages.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageList"}}}},"304":{"$ref":"#/components/responses/NotModified"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/pages/{path}":{"get":{"operationId":"getPage","tags":["Pages"],"summary":"Get a page","description":"One page with its plain-text body and FAQs, by slug path.","responses":{"200":{"description":"Get a page.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}}},"304":{"$ref":"#/components/responses/NotModified"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"path","in":"path","required":true,"description":"Slug path of the page, for example `contact`.","schema":{"type":"string","pattern":"^[A-Za-z0-9_\\-/]+$"},"example":"contact"}]}},"/support":{"get":{"operationId":"getSupportIndex","tags":["Support"],"summary":"Support Centre index","description":"Support categories and every support article with description and last-reviewed date.","responses":{"200":{"description":"Support Centre index.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportIndex"}}}},"304":{"$ref":"#/components/responses/NotModified"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/support/categories":{"get":{"operationId":"listSupportCategories","tags":["Support"],"summary":"List support categories","description":"Support categories with article counts.","responses":{"200":{"description":"List support categories.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportCategories"}}}},"304":{"$ref":"#/components/responses/NotModified"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/support/search":{"get":{"operationId":"searchSupport","tags":["Search"],"summary":"Search support articles","description":"Search support articles only. At most 10 results.","responses":{"200":{"description":"Search support articles.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200},"description":"Search words (2 to 200 characters).","example":"solar battery blackout"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10},"description":"Maximum results. Values are clamped to 1 to 10."}]}},"/support/{category}":{"get":{"operationId":"listSupportArticles","tags":["Support"],"summary":"List articles in a category","description":"Support articles in one category.","responses":{"200":{"description":"List articles in a category.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportList"}}}},"304":{"$ref":"#/components/responses/NotModified"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"category","in":"path","required":true,"description":"Support category slug, from the list of categories.","schema":{"type":"string","pattern":"^[a-z0-9\\-]+$"},"example":"solar"}]}},"/support/{category}/{slug}":{"get":{"operationId":"getSupportArticle","tags":["Support"],"summary":"Get a support article","description":"One support article: plain-text answer and FAQ items.","responses":{"200":{"description":"Get a support article.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportArticle"}}}},"304":{"$ref":"#/components/responses/NotModified"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"category","in":"path","required":true,"description":"Support category slug, from the list of categories.","schema":{"type":"string","pattern":"^[a-z0-9\\-]+$"},"example":"solar"},{"name":"slug","in":"path","required":true,"description":"Support article slug.","schema":{"type":"string","pattern":"^[a-z0-9\\-]+$"}}]}},"/search":{"get":{"operationId":"searchSite","tags":["Search"],"summary":"Search the site","description":"Search services, pages and support articles. At most 10 results, each with title, URL, type, slug and a snippet.","responses":{"200":{"description":"Search the site.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200},"description":"Search words (2 to 200 characters).","example":"solar battery blackout"},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"all"},"description":"Limit results to one kind of content: `all`, `service`, `page` or `support`. Any other value is treated as `all`.","example":"support"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10},"description":"Maximum results. Values are clamped to 1 to 10."}]}},"/faq":{"get":{"operationId":"getFaq","tags":["FAQ"],"summary":"List FAQs","description":"Every FAQ question and answer on the site, optionally filtered by topic (every word must match).","responses":{"200":{"description":"List FAQs.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FaqResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"}},"parameters":[{"name":"topic","in":"query","required":false,"schema":{"type":"string","default":""},"description":"Optional filter on question, answer and source title. Every word must match.","example":"battery"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100},"description":"Maximum items. Values are clamped to 1 to 500."}]}},"/mcp/server-card":{"get":{"operationId":"getMcpServerCard","tags":["MCP"],"summary":"MCP Server Card","description":"Discovery metadata for the MCP server (SEP-2127 server card). Also served at /.well-known/mcp/server-card.json on the site root.","responses":{"200":{"description":"MCP Server Card.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerCard"}}}},"304":{"$ref":"#/components/responses/NotModified"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/mcp":{"get":{"operationId":"describeMcpServer","tags":["MCP"],"summary":"Describe the MCP server","description":"A small JSON description of the MCP server. It is not an event stream; the server has no SSE endpoint.","responses":{"200":{"description":"Description of the MCP server.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpDescription"}}}},"403":{"$ref":"#/components/responses/McpForbidden"},"429":{"$ref":"#/components/responses/McpRateLimited"}}},"post":{"operationId":"mcpJsonRpc","tags":["MCP"],"summary":"MCP endpoint (JSON-RPC 2.0)","description":"Model Context Protocol server over Streamable HTTP. Send one JSON-RPC 2.0 message or a batch of up to 20 (body up to 100,000 bytes). The server is stateless: there are no sessions, no SSE stream and no server-initiated requests, and a GET only returns a description. No authentication. Tools (read-only unless noted): `get_business_info`, `list_services`, `get_service`, `search_site`, `list_support_articles`, `get_support_article`, `get_faq`. Supported protocol versions: 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26. Without an `MCP-Protocol-Version` header, 2025-03-26 is assumed. With 2026-07-28 the `Mcp-Method` header must match the request method, and `Mcp-Name` must match the tool name or resource URI for `tools/call` and `resources/read`. A request that is only notifications answers 202 with no body. Responses are never cached.","parameters":[{"name":"MCP-Protocol-Version","in":"header","required":false,"description":"Protocol revision in force for this request.","schema":{"type":"string","enum":["2026-07-28","2025-11-25","2025-06-18","2025-03-26"]}},{"name":"Mcp-Method","in":"header","required":false,"description":"Required with 2026-07-28 for a single request: the JSON-RPC method.","schema":{"type":"string"}},{"name":"Mcp-Name","in":"header","required":false,"description":"Required with 2026-07-28 for `tools/call` (tool name) and `resources/read` (URI).","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Optional and not needed: every tool on this server is read-only, so repeating any request is always safe. The header is accepted and ignored.","schema":{"type":"string","maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/JsonRpcRequest"},{"type":"array","minItems":1,"maxItems":20,"items":{"$ref":"#/components/schemas/JsonRpcRequest"}}]}}}},"responses":{"200":{"description":"JSON-RPC response, or an array of responses for a batch. Tool failures are reported inside `result` with `isError: true`.","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/JsonRpcResponse"},{"type":"array","items":{"$ref":"#/components/schemas/JsonRpcResponse"}}]}}}},"202":{"description":"Only notifications were sent. No body."},"400":{"description":"JSON-RPC error: parse error (-32700), invalid request (-32600), unsupported protocol version (-32602) or header mismatch (-32020).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcError"}}}},"403":{"$ref":"#/components/responses/McpForbidden"},"404":{"description":"With protocol 2026-07-28, an unknown method (-32601).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcError"}}}},"413":{"description":"Request body larger than 100,000 bytes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcError"}}}},"429":{"$ref":"#/components/responses/McpRateLimited"}}}}},"components":{"schemas":{"Error":{"type":"object","description":"WordPress REST error shape with a resolution hint. `data.status` repeats the HTTP status; validation errors add `data.params`. Unknown paths under /api/ and requests with `Accept: application/json` answer 404 in this same shape.","required":["code","message","data"],"properties":{"code":{"type":"string","examples":["not_found","bad_request","rate_limited","rest_missing_callback_param","rest_invalid_param"]},"message":{"type":"string"},"hint":{"type":"string","description":"What to do next, for example which endpoint lists valid slugs."},"documentation":{"type":"string","format":"uri","description":"Where the API is documented (the OpenAPI file)."},"data":{"type":"object","required":["status"],"properties":{"status":{"type":"integer"}},"additionalProperties":true}}},"Phone":{"type":"object","required":["display","e164"],"properties":{"display":{"type":"string"},"e164":{"type":"string","description":"E.164 number, for example +61730629299."}}},"Licence":{"type":"object","required":["name","number"],"properties":{"name":{"type":"string"},"number":{"type":"string"}}},"Address":{"type":"object","required":["street","locality","region","postcode","country","formatted"],"properties":{"street":{"type":"string"},"locality":{"type":"string"},"region":{"type":"string"},"postcode":{"type":"string"},"country":{"type":"string"},"formatted":{"type":"string"}}},"FaqItem":{"type":"object","required":["question","answer"],"properties":{"question":{"type":"string"},"answer":{"type":"string"}}},"ServiceChild":{"type":"object","required":["title","slug","url","description"],"properties":{"title":{"type":"string"},"slug":{"type":"string"},"url":{"type":"string","format":"uri"},"description":{"type":"string"}}},"ServiceNode":{"type":"object","required":["title","slug","url","parent","description","children"],"properties":{"title":{"type":"string"},"slug":{"type":"string","description":"Slug path, for example `solar-power/solar-batteries`."},"url":{"type":"string","format":"uri"},"parent":{"type":["string","null"],"description":"Slug path of the parent service, null for a top-level service."},"description":{"type":"string"},"children":{"type":"array","items":{"$ref":"#/components/schemas/ServiceNode"}}}},"Service":{"type":"object","required":["title","slug","url","parent","description","children","text","faq","last_modified"],"properties":{"title":{"type":"string"},"slug":{"type":"string","description":"Slug path, for example `solar-power/solar-batteries`."},"url":{"type":"string","format":"uri"},"parent":{"type":["string","null"],"description":"Slug path of the parent service, null for a top-level service."},"description":{"type":"string"},"children":{"type":"array","items":{"$ref":"#/components/schemas/ServiceChild"}},"text":{"type":"string","description":"Plain-text body of the page."},"faq":{"type":"array","items":{"$ref":"#/components/schemas/FaqItem"}},"last_modified":{"type":"string","format":"date-time"}}},"ServiceList":{"type":"object","required":["total","services"],"properties":{"total":{"type":"integer"},"services":{"type":"array","items":{"$ref":"#/components/schemas/ServiceNode"}}}},"PageSummary":{"type":"object","required":["title","slug","url","description"],"properties":{"title":{"type":"string"},"slug":{"type":"string"},"url":{"type":"string","format":"uri"},"description":{"type":"string"}}},"PageList":{"type":"object","required":["total","pages"],"properties":{"total":{"type":"integer"},"pages":{"type":"array","items":{"$ref":"#/components/schemas/PageSummary"}}}},"Page":{"type":"object","required":["title","slug","url","description","text","faq","last_modified"],"properties":{"title":{"type":"string"},"slug":{"type":"string"},"url":{"type":"string","format":"uri"},"description":{"type":"string"},"text":{"type":"string","description":"Plain-text body of the page."},"faq":{"type":"array","items":{"$ref":"#/components/schemas/FaqItem"}},"last_modified":{"type":"string","format":"date-time"}}},"SupportCategoryRef":{"type":"object","required":["slug","name"],"properties":{"slug":{"type":"string"},"name":{"type":"string"}}},"SupportCategory":{"type":"object","required":["slug","name","description","url","article_count"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"url":{"type":"string","format":"uri"},"article_count":{"type":"integer"}}},"SupportCategories":{"type":"object","required":["categories"],"properties":{"categories":{"type":"array","items":{"$ref":"#/components/schemas/SupportCategory"}}}},"SupportArticleSummary":{"type":"object","required":["title","slug","category","url","description","last_reviewed"],"properties":{"title":{"type":"string"},"slug":{"type":"string"},"category":{"oneOf":[{"$ref":"#/components/schemas/SupportCategoryRef"},{"type":"null"}]},"url":{"type":"string","format":"uri"},"description":{"type":"string"},"last_reviewed":{"type":["string","null"],"format":"date","description":"Date the article was last reviewed, null if not recorded."}}},"SupportIndex":{"type":"object","required":["categories","articles"],"properties":{"categories":{"type":"array","items":{"$ref":"#/components/schemas/SupportCategory"}},"articles":{"type":"array","items":{"$ref":"#/components/schemas/SupportArticleSummary"}}}},"SupportList":{"type":"object","required":["total","articles"],"properties":{"total":{"type":"integer"},"articles":{"type":"array","items":{"$ref":"#/components/schemas/SupportArticleSummary"}}}},"SupportArticle":{"type":"object","required":["title","slug","category","url","description","last_reviewed","text","faq","last_modified"],"properties":{"title":{"type":"string"},"slug":{"type":"string"},"category":{"oneOf":[{"$ref":"#/components/schemas/SupportCategoryRef"},{"type":"null"}]},"url":{"type":"string","format":"uri"},"description":{"type":"string"},"last_reviewed":{"type":["string","null"],"format":"date","description":"Date the article was last reviewed, null if not recorded."},"text":{"type":"string","description":"Plain-text answer."},"faq":{"type":"array","items":{"$ref":"#/components/schemas/FaqItem"}},"last_modified":{"type":"string","format":"date-time"}}},"SearchResult":{"type":"object","required":["title","url","type","slug","category","snippet"],"properties":{"title":{"type":"string"},"url":{"type":"string","format":"uri"},"type":{"type":"string","enum":["service","page","support"]},"slug":{"type":"string"},"category":{"type":["string","null"],"description":"Support category slug for support articles, otherwise null."},"snippet":{"type":"string"}}},"SearchResponse":{"type":"object","required":["query","type","total","results"],"properties":{"query":{"type":"string"},"type":{"type":"string"},"total":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/SearchResult"}}}},"FaqResponse":{"type":"object","required":["topic","total","items"],"properties":{"topic":{"type":"string"},"total":{"type":"integer","description":"Matches before the limit is applied."},"items":{"type":"array","items":{"type":"object","required":["question","answer","source_title","source_type","source_url"],"properties":{"question":{"type":"string"},"answer":{"type":"string"},"source_title":{"type":"string"},"source_type":{"type":"string","enum":["service","page","support"]},"source_url":{"type":"string","format":"uri"}}}}}},"Business":{"type":"object","required":["name","legal_name","abn","description","phone","email","address","website","contact_url","support_url","licences","licences_statement","service_area","finance","services","callback_available","locale","timezone"],"properties":{"name":{"type":"string"},"legal_name":{"type":"string"},"abn":{"type":"string"},"description":{"type":"string"},"phone":{"$ref":"#/components/schemas/Phone"},"email":{"type":"string","format":"email"},"address":{"$ref":"#/components/schemas/Address"},"website":{"type":"string","format":"uri"},"contact_url":{"type":"string","format":"uri"},"support_url":{"type":"string","format":"uri"},"licences":{"type":"array","items":{"$ref":"#/components/schemas/Licence"}},"licences_statement":{"type":"string"},"service_area":{"type":"string"},"finance":{"type":"string"},"services":{"type":"array","items":{"type":"object","required":["title","slug","url"],"properties":{"title":{"type":"string"},"slug":{"type":"string"},"url":{"type":"string","format":"uri"}}}},"callback_available":{"type":"boolean","description":"True only while callback requests through the API are switched on."},"locale":{"type":"string"},"timezone":{"type":"string"}}},"ApiIndex":{"type":"object","required":["name","description","version","site","endpoints","mcp","limits","notes"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"version":{"type":"string"},"site":{"type":"string","format":"uri"},"endpoints":{"type":"array","items":{"type":"object","required":["method","url","description"],"properties":{"method":{"type":"string"},"url":{"type":"string"},"description":{"type":"string"}}}},"mcp":{"type":"object","required":["url","transport","server_card"],"properties":{"url":{"type":"string","format":"uri"},"transport":{"type":"string"},"server_card":{"type":"string","format":"uri"}}},"limits":{"type":"object","additionalProperties":{"type":"string"}},"notes":{"type":"string"}}},"McpDescription":{"type":"object","required":["name","description","transport","endpoint","method","protocolVersions","tools","resources","server_card","api"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"transport":{"type":"string"},"endpoint":{"type":"string","format":"uri"},"method":{"type":"string"},"protocolVersions":{"type":"array","items":{"type":"string"}},"tools":{"type":"array","items":{"type":"string"}},"resources":{"type":"array","items":{"type":"string"}},"server_card":{"type":"string","format":"uri"},"api":{"type":"string","format":"uri"}}},"ServerCard":{"type":"object","required":["$schema","name","version","description"],"properties":{"$schema":{"type":"string","format":"uri"},"name":{"type":"string"},"version":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"websiteUrl":{"type":"string","format":"uri"},"icons":{"type":"array","items":{"type":"object","required":["src"],"properties":{"src":{"type":"string","format":"uri"},"sizes":{"type":"array","items":{"type":"string"}},"mimeType":{"type":"string"},"theme":{"type":"string","enum":["light","dark"]}}}},"remotes":{"type":"array","items":{"type":"object","required":["type","url"],"properties":{"type":{"type":"string"},"url":{"type":"string","format":"uri"},"supportedProtocolVersions":{"type":"array","items":{"type":"string"}}}}}}},"JsonRpcRequest":{"type":"object","description":"A JSON-RPC 2.0 request. A message without `id` is a notification and gets no reply.","required":["jsonrpc","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer"]},"method":{"type":"string","examples":["initialize","server/discover","ping","tools/list","tools/call","resources/list","resources/templates/list","resources/read","notifications/initialized"]},"params":{"type":"object","additionalProperties":true}}},"JsonRpcSuccess":{"type":"object","required":["jsonrpc","id","result"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer","number"]},"result":{"type":"object","additionalProperties":true}}},"JsonRpcError":{"type":"object","required":["jsonrpc","id","error"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","integer","number","null"]},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":{}}}}},"JsonRpcResponse":{"oneOf":[{"$ref":"#/components/schemas/JsonRpcSuccess"},{"$ref":"#/components/schemas/JsonRpcError"}]}},"headers":{"ETag":{"description":"Validator for If-None-Match.","schema":{"type":"string"}},"CacheControl":{"description":"Caching policy.","schema":{"type":"string"}},"RetryAfter":{"description":"Seconds until the rate limit window resets.","schema":{"type":"integer"}}},"responses":{"NotModified":{"description":"The client already has this version (If-None-Match matched). No body.","headers":{"ETag":{"$ref":"#/components/headers/ETag"}}},"BadRequest":{"description":"Missing or invalid parameter, or a query that is too short.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"missing":{"value":{"code":"rest_missing_callback_param","message":"Missing parameter(s): q","data":{"status":400,"params":["q"]}}}}}}},"NotFound":{"description":"No published item with that path or slug.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"not_found":{"value":{"code":"not_found","message":"No published service with that slug.","data":{"status":404}}}}}}},"RateLimited":{"description":"More than 120 requests per minute from this IP.","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"limited":{"value":{"code":"rate_limited","message":"Too many requests. Please slow down.","data":{"status":429}}}}}}},"McpForbidden":{"description":"Origin not allowed. Returned as a JSON-RPC error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcError"}}}},"McpRateLimited":{"description":"More than 120 requests per minute from this IP. Returned as a JSON-RPC error.","headers":{"Retry-After":{"$ref":"#/components/headers/RetryAfter"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcError"}}}}}},"externalDocs":{"description":"Developer resources with examples","url":"https://arlite.co/developers/"}}