Developers & AI agents

Every licensed California elder-care home (RCFE), from state records, as a free REST API and a remote MCP server for AI assistants. There is no key and no sign-up. Every fact carries its source and date.

Start in 60 seconds

Base URL https://covelightcare.com. No key, no account, JSON back. Every snippet below was run, as written, before it went on this page; the reference shows each full response.

Call the REST API from a server or a script. It sends no CORS headers, so a web page on another site cannot call it from the browser. The MCP server and the discovery files allow any origin.

List homes in an area

Filter by county, city and state care approvals. Alphabetical, paged. Reference and full response

curl "https://covelightcare.com/api/v1/facilities?county=Los%20Angeles&needs=dementia,wheelchair&limit=2"

One home’s record

Every fact with its source class, date and a stable ref. Reference and full response

curl "https://covelightcare.com/api/v1/facilities/191200037"

A home’s state documents

Inspection and complaint documents, newest first, with the home’s record on the state’s site. Reference and full response

curl "https://covelightcare.com/api/v1/facilities/191200037/reports"

The guides

Covelight’s editorial guides, with their review dates. Reference and full response

curl "https://covelightcare.com/api/v1/guides"

Check up to 100 homes at once

Names or license numbers. A name that fits several licenses returns the candidates, never a guess. Reference and full response

curl -X POST "https://covelightcare.com/api/v1/check" \
  -H "Content-Type: application/json" \
  -H "X-Client-Name: your-product" \
  -d '{"homes":["191200037","Sunrise","Zzqx Nothing"]}'

Budgets per IP: 120 requests a minute on /api/v1/*, 30 on POST /api/v1/check. Details: rate limits.

Connect an AI assistant (MCP)

The server is https://covelightcare.com/mcp: Streamable HTTP, stateless, JSON responses. It needs no key and no OAuth. Its tools: find_homes, area_overview, check_homes, get_home, get_state_documents, compare_homes, homes_near_hospital, explain_care_topic, start_family_request, ask_homes_for_family, search, fetch. One check_homes call checks up to 100 homes.

Server URL
https://covelightcare.com/mcp

Claude (claude.ai and Claude Desktop)

Add to Claude

The button opens Claude’s “Add custom connector” form with the name and URL filled in. Nothing is added until you confirm. By hand:

  1. Open Customize, then Connectors.
  2. Choose +, then Add custom connector.
  3. Paste the server URL and choose Add. Leave the OAuth fields under Advanced settings empty.

Claude Desktop uses the same Connectors setting; a remote server needs no entry in claude_desktop_config.json. On the Free plan you can add one custom connector. On Team and Enterprise, an Owner adds it under Organization settings, Connectors (prefilled admin link); members then choose Connect.

Claude Code

Terminal
claude mcp add --transport http covelight https://covelightcare.com/mcp

Add --scope project to share it through .mcp.json, or --scope user for every project. Use --transport http; this server does not serve the older SSE transport. If you sign in to Claude Code with a claude.ai account, a connector you added on claude.ai is already there.

.mcp.json
{
  "mcpServers": {
    "covelight": {
      "type": "http",
      "url": "https://covelightcare.com/mcp"
    }
  }
}

Cursor

Add to Cursor

Opens Cursor’s install prompt, if Cursor is installed. Or add it to ~/.cursor/mcp.json (every project) or .cursor/mcp.json (one project):

mcp.json
{
  "mcpServers": {
    "covelight": {
      "url": "https://covelightcare.com/mcp"
    }
  }
}

VS Code

Add to VS Code

Opens VS Code’s install prompt, if VS Code is installed. From a terminal:

Terminal
code --add-mcp "{\"name\":\"covelight\",\"type\":\"http\",\"url\":\"https://covelightcare.com/mcp\"}"

Or in .vscode/mcp.json:

.vscode/mcp.json
{
  "servers": {
    "covelight": {
      "type": "http",
      "url": "https://covelightcare.com/mcp"
    }
  }
}

ChatGPT

  1. In ChatGPT on the web, open Plugins, choose the plus button, then Add custom MCP server.
  2. Name it Covelight Care and paste the server URL under Connection.
  3. Choose No authentication, tick “I understand and want to continue”, then choose Create as a plugin.
  4. Install the plugin. In a chat, type @ and choose Covelight Care.

OpenAI’s help lists custom MCP servers for ChatGPT Business, Enterprise and Edu, on the web; in a Business workspace an admin or owner adds them. Developer mode no longer has to be turned on first. We know of no one-click install link for ChatGPT.

Gemini

  1. On a computer, go to gemini.google.com.
  2. Open Settings, then Connected Apps. If it is not there, open Personal Intelligence first.
  3. Under Custom apps, choose Add a custom app.
  4. Paste the server URL and choose Next. This server needs no sign-in, so leave Advanced features closed.
  5. In a chat, on the web or in the Gemini app, type @ and choose it.

For personal Google Accounts only, 18 or over, in the US, in English, with Keep Activity on. Google’s help does not say how it treats a server that needs no sign-in, and we have not yet connected this one there.

Any other MCP client

Point it at the server URL with the Streamable HTTP transport. Most clients read an mcpServers entry like this:

mcpServers
{
  "mcpServers": {
    "covelight": {
      "type": "http",
      "url": "https://covelightcare.com/mcp"
    }
  }
}

Or call it by hand: JSON-RPC with curl.

Where it can’t connect yet

  • Not in any directory yet. Covelight Care — licensed care homes is not listed in Claude’s connector directory or ChatGPT’s plugin directory, so neither host suggests it on its own. You add it by its URL, and Claude labels it “Custom”.
  • ChatGPT plans OpenAI does not list for custom servers. Its help names Business, Enterprise and Edu, and the server is added on the web.
  • Gemini with a work or school account, under 18, or outside the US.
  • Clients that speak only a revision newer than these. The server speaks 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07 — MCP’s 2026-07-28 revision and the 2025 initialize handshake, on the same URL. A request that declares a newer version gets a 400 that names the revision to use instead (example).
  • Clients that need a GET event stream or the old SSE transport. The server is stateless and POST-only; GET answers 405.
  • Hosts that only start local (stdio) servers and cannot reach a remote URL.

The data dictionary

The fields a caller must read correctly. The REST API wraps each fact as { value, source_class, confirmed_on, next_due, ref }; the MCP tools return flat records with an as_of date on each group.

Yes, no, and “not on file”

ValueWhat the record saysWhat to tell a family
"true"The record states it. For a care approval, the license carries it.State it, with its source and date — unless the license is closed (below).
"false"The record states a real negative. For a care approval, the license lacks it.“Not on file” — never “No”.
"not_on_file"The record we hold says nothing either way.“Not on file” — never “No”.

These are strings, not booleans, and a value is never left out to imply a negative. “Not on file” is a statement about the record, not about the home: the home can answer it on the phone. The wire keeps "false" apart for software; in words, both non-true values read “not on file”.

A list the state publishes of who takes part, like the Medi-Cal waiver list, can only say “true” or "not_on_file": being absent from a list is not a verified “no”. On MCP records, a fact under a correction review reads "not_on_file" until the review closes, and the full record names it in clearances.under_review.

Dates and provenance

FieldWhereMeaning
source_classREST factsWho asserted the value: state, operator_attested, machine_extracted, third_party. Map coordinates are machine_extracted; the address is the state’s.
confirmed_onREST factsThe date the source last confirmed the value: the home’s CDSS record snapshot for roster facts, the DHCS list date for the waiver. null means the source gives no date — not that the value is fresh.
next_dueREST factsWhen a published refresh cadence next re-checks the value. null on every fact today: no cadence is published yet.
refREST facts, reportsA stable address for the fact (roster:…, derived:…, doc:…). On complaint reports, doc: carries the state’s control number; inspection and other reports have none, so it carries Covelight’s own key — stable here, but not a state identifier.
attribution.retrieved_onREST envelopeFor one home, its record’s snapshot date. For the batch check, when the CDSS record was last loaded. For lists and document lists, the date of Covelight’s newest successful data run, which can be newer than the CDSS record itself — each fact’s confirmed_on is the record’s own date. For the guides, their review date. attribution.source names the agency (California Department of Social Services, Community Care Licensing Division), or Covelight Care for the guides, which are our own words.
generated_atREST envelopeWhen this response was built — not how old the data is.
as_of, data_datesMCP recordsEach group’s date, and per result state_record_loaded_on (the CDSS load) and medicaid_waiver_list_as_of (the state’s waiver list date; in California, DHCS’s). Dates are ISO; the display text writes them out.
state_record_urlReports, MCP documentsThe home’s record on the state’s licensing site, where the documents the state currently lists can be read. Link this. get_state_documents can also return older documents Covelight transcribed that the state’s listing no longer shows.
document urlReports, MCP documentsnull for every document today. The state publishes no stable address per document (its links are positional, and the feed carries placeholders), so none is given rather than a wrong one. Use state_record_url.

Check the dates rather than polling: a response is only as current as its retrieved_on and confirmed_on say.

License status, including closed licenses

license_status (REST) and license.status (MCP) are the state’s own words, verbatim, with the record’s date. Lists — GET /api/v1/facilities, find_homes and homes_near_hospital — include only licenses whose status is one of LICENSED, LICENSED/PENDING INCREASE, PROBATIONARY LICENSE (any capitalization). Homes on probation are included, and on_probation says so.

A look-up by license or name also finds closed licenses, because a family asking “is this place licensed?” deserves the answer. On MCP records, license.closed (or license_closed) is true for any status containing the word CLOSED. The care approvals and the waiver value stay as the record left them, marked license_closed: true with a dated closed_note: they are history, not current approvals. price is null, and start_family_request refuses the license. The v1 REST record has no closed flag: read license_status.value, and when it contains CLOSED, its clearance and waiver values are what the record held while the license was open — never present them as current.

license_status_live (REST) is the last live check against the state’s site that Covelight Care stored, dated by its own confirmed_on. It can be null. An API call never starts a live check.

Price kinds (MCP)

MCP records carry one monthly starting figure, and price.kind says whose figure it is. Only is_this_homes_own_rate: true makes it a price. Quote price.line, which names the source and date, or the estimate and its range. POST /api/v1/check returns the same records; the other REST endpoints carry no price.

kindWhose figureWhat comes with it
home_listedThe home’s own rate, as its listing on a listing site publishes it.listing: the site, its URL, seen_on and updated_on.
home_confirmedThe home’s own rate, which the listing site says the home confirmed.listing: the site, its URL, seen_on and updated_on.
covelight_estimateCovelight’s estimate, modeled on the listed rates of comparable homes nearby. Not the home’s price.likely_range_usd: the likely low and high.
area_typicalA typical starting rate for the county, or a broader range where listings are thin. Not the home’s price.likely_range_usd: the likely low and high.

find_homes’ max_monthly_budget_usd, in the tool’s own words: “Monthly ceiling in whole dollars, 1000 to 30000. Reads each home’s starting figure — its own listed rate, else Covelight’s estimate or the area’s typical rate; a home with no figure on file stays in. Homes whose own rate fits come first among equally fitting homes. Example: 6000.” price is null when no figure is on file, and always on a closed license.

Medi-Cal Assisted Living Waiver

medicaid_waiver.value (MCP) and alw_participation (REST) are "true" when the home is on the Department of Health Care Services participant list, else "not_on_file" — never "false". The list’s own date is list_as_of (REST: confirmed_on). MCP names the state’s program in medicaid_waiver.program: in California, the Medi-Cal Assisted Living Waiver.

Carry the scope sentence with any “true”. MCP records carry it as medicaid_waiver.scope: “The waiver pays for care services, not room and board.”

Neutral order: there is no ranking parameter

REST lists come alphabetically by name, then license number. MCP lists come by straight-line distance from a point when the call gives one, else alphabetically; check_homes keeps the order you sent; compare_homes puts its columns in alphabetical order. No score, tier, price or payment orders anything.

A sort, order or rank parameter is refused with the reason, never ignored (REST, MCP). Every MCP list result carries the sentence to pass on: “No home pays to appear here. Nothing on this page is ranked by quality, popularity or payment.”

What is never in this data

  • Availability. No field says whether a home has an open bed, under any name. What every MCP list result says instead: “Openings change daily, so Covelight asks the homes you pick and emails you each home’s answer.”
  • Scores, ratings and tiers. None exists to return.
  • Business fields. The record’s columns are named one by one, and every payload is scanned for business and availability keys before it is sent.
  • Personal data. No family, lead or contact data is reachable. A home’s phone is the number on the state licensing record, or the number the home itself gave us, labelled as such (phone_from_home on the REST API).

Markdown pages

Care home pages, and county, city, care-type, Medi-Cal, near-hospital and license-holder pages, each have a short Markdown version: the page’s core facts, in the page’s own words, answer first. Add .md to the page’s URL, or request the page itself with Accept: text/markdown. Every home record from the MCP tools carries its markdown link.

A Markdown version is marked noindex and names the HTML page in a Link: rel="canonical" header. Cite the HTML page, never the .md address. When the page is requested by Accept, the response also varies on Accept.

Request
GET https://covelightcare.com/facility/regency-park-oak-knoll-191200037.md
Response · 200 · text/markdown; charset=utf-8
HTTP response
HTTP 200
content-type: text/markdown; charset=utf-8
cache-control: s-maxage=86400, stale-while-revalidate=31449600
link: <https://covelightcare.com/facility/regency-park-oak-knoll-191200037>; rel="canonical"
x-robots-tag: noindex

# Regency Park Oak Knoll

License #191200037 · Pasadena, Los Angeles County · Licensed for 206 — Large care community · a licensed care home (RCFE)

Address: 255 South Oak Knoll, Pasadena, CA 91101

Phone: (626) 578-1551 (From the state licensing record, October 11, 2026)

Regency Park Oak Knoll is a large care community in Pasadena — a licensed residential care facility for the elderly (RCFE), the licence category behind “assisted living” and “board and care.” It is licensed for 206 residents since 1987. Bedridden care is not on file.

- Care approvals on file: Wheelchair · Dementia · Hospice — State licensing record · October 11, 2026
- Starting rate: $5,950 a month — Listed by the home on Seniorly · September 9, 2026

Full page: <https://covelightcare.com/facility/regency-park-oak-knoll-191200037>
…

Shortened for this page (… marks each cut): body: the first 14 of 95 lines shown.

The family hand-off

Only the family can agree to be contacted. With the link below they agree on covelightcare.com, with their own tap, after reading which homes would hear from them. When they ask you to have Covelight Care ask the homes, use ask_homes_for_family: you show them its words exactly, and they agree with their own tap on the page its link opens.

  1. The assistant calls start_family_request with 1–5 license numbers the family chose, and optionally state. It sends no personal details. The tool screens state for them (names, phone numbers, emails, addresses) and refuses the call when the screen finds one (example), but a screen cannot catch every name: send none.
  2. The tool writes nothing about the family. It returns a signed link, dated to lapse in 7 days, relay_sentence (one sentence to pass on), a longer family_message, each home’s phone (its own number when it gave one, else the state record’s) and questions to ask, and consent.agent_can_consent: false.
  3. The family opens the link. Covelight Care opens its request, “Check availability”, with those homes already chosen. Opening the link tells no home anything. After 7 days the link still opens the homes, and a request the family later sends is no longer attributed to the assistant.
  4. The family can call the homes themselves. If they send the request instead, with their own tap under the sentence of record on that page, Covelight Care asks every home it can reach their questions (by message first, and by phone when a home is silent; it calls at most six homes on one request) and emails the family each answer. A home it cannot ask is named to the family before they tap, and its number is on their request page.
What the tool returns
modecoordination_available
relay_sentenceHere is a free page with the 2 homes you picked, where you can call them yourself or have Covelight Care ask them for you — no home hears from you unless you agree there: https://covelightcare.com/h/a1.tnnelo.example-client.191200037-197602925.0.x~…
what_happens_next
  1. The family opens the link. It shows these homes, each linked to its page with the phone number and state record.
  2. They can call the homes themselves, or have Covelight Care ask the homes for them.
  3. To have them asked, they read the consent sentence and agree with their own click, then give their own contact details. Nothing is sent before that.

The link (hand-off signatures are cut on this page) carries the license numbers, an expiry and the MCP client’s own name from its initialize call, never a person’s name or phone number. Nothing typed in state goes into it. A tampered link opens nothing. The captured call, in full: the tool reference.

When the family asks you to send it

  1. Offer it when they want to know which homes have room, what one would cost for their person, a home to contact them or a tour. Send nothing unless they ask.
  2. Ask for their own first name, email and US mobile number, and, if they said, who the care is for, the timing, where that person is now, the room and how it will be paid.
  3. Call ask_homes_for_family with 1–25 license numbers and without agreement. Nothing is sent. It returns their request, the sentences and the two answers the page will show, exactly as the site shows them, where the link can go (send_link_by, with link_disclosure to show), and an agreement code: the link must be sent within 30 minutes.
  4. Show the family their request, the sentences, the answers and the link line unchanged, and ask whether to text or email the link.
  5. Only after they choose, call again with the same inputs, the agreement and send_link ("text" or "email"). We send a link to their own phone or inbox. You never receive it.
  6. They open it on covelightcare.com and tap their answer there; that tap sends the request. To learn whether they have, call again with the same inputs and the agreement alone.

The request reaches Covelight Care the same way one sent on the site does, and the family gets a receipt by email with the link to their request page. The link works for 24 hours and opens nothing once changed. Nothing goes to a number or an address on our stop list. The mobile is kept only if they answer yes. No code is asked for in the chat. The tool takes no care needs or health details, never signs anyone up for texts, and never returns either link. One email, or one mobile number, can send 2 requests this way in 24 hours. The tool reference.

Terms and attribution

The API and the MCP server are free to use, including commercially, on these conditions:

  1. Attribute. Where you display or pass on this data, credit Covelight Care — CDSS state record with a link to https://covelightcare.com. The facts are California public records; the compilation, refresh and provenance are ours.
  2. Do not misrepresent it. Do not present it as your own original record. Do not show a “not on file” value as a “no”. Do not attach any claim that a home has an opening. Do not imply that any home pays for its place in this data, to appear or to be ordered: none can, because no business field is read and nothing orders a list but name, distance or your own order.
  3. Carry the state’s notices. Parts come from the California Health and Human Services open-data portal: credit the California Health and Human Services Agency, and say that what you show is modified data, not official government data. The official record is the state’s own facility search.

Found an error? Every record carries a corrections link (links.corrections). Hand it to your user: corrections are checked against the state’s records and logged at /corrections. We may slow or block traffic that breaks these terms or strains the service.

Discovery files

AddressWhat it is
/mcp/server-cardThe MCP server card, at the address the server-card draft reserves: name, version, description, icon, and the remote with the protocol versions it speaks.
/.well-known/mcp/server-card.jsonThe same card, where discovery scanners look.
/.well-known/ai-catalog.jsonThe site’s AI catalog: one entry, pointing at the server card.
/.well-known/mcp/server.jsonThe server in the MCP Registry’s server.json format.
/openapi.jsonThe REST contract, OpenAPI 3.1.
/api/v1The REST front door: every endpoint, as JSON.
/llms.txtA plain-text map of the site for language models.

The server-card and catalog formats are an experimental MCP extension. The card, the catalog and server.json each answer with an ETag, allow any origin, and may be cached for an hour.

Support

Email hello@covelightcare.com with the request you sent, the response you got, and when. How the data is built, fact by fact: /methodology. The dataset: /data.

Changelog

The MCP server is at version 1.7.0. Changes are additive; a rename or removal is announced here first, with at least 90 days’ notice (compatibility policy).

  • Additive. Every home record and compact home may carry succession, present only where our record links the license to another from the state’s own words (a change of ownership or location): successor, the newer license, and predecessor, the license this one followed, each with its number, name, kind (change_of_ownership or change_of_location), the evidence it stands on (the state’s report naming the application, or the old license’s closed status), its date, the state’s own words and its page; note is the facility page’s own sentences. The state keeps an old license “Licensed” for weeks after a change of ownership, and the number on file for it is the state’s record for that license. start_family_request, ask_homes_for_family and open_ask_form refuse such a license in the state’s words and name the license to pass instead; find_homes does not list it. Every display that shows such a license labels its number as the state’s record for that license and adds the note; get_request_replies names the newer license for such a home on her request and gives no number or call step for the older one.
  • GET /api/v1/facilities/{license} carries succession where our record links the license to another from the state’s own words: a machine_extracted fact with both licenses, the evidence, its date and the state’s words. POST /api/v1/check carries the MCP 1.7.0 succession on each home. Additive.
  • No input, output schema or tool description changed; some answers did. Prices: the SSI/SSP rate and a charge on top of a rate (a second person, a level of care, a service or another charge over the base) are never a home’s own rate, and neither counts toward Covelight’s estimates or an area’s ranges. A home that lists only such a figure, including one whose own words say it charges only the SSI/SSP rate, gets Covelight’s estimate like any home without its own rate. This applies to price on every home record (find_homes, check_homes, compare_homes, homes_near_hospital, get_home and POST /api/v1/check), get_home’s cost answer, the home page fetch returns, area_overview’s prices and find_homes’ budget. The state’s care approvals: dementia, hospice, non-ambulatory and bedridden are read from the state’s roster text in more of the spellings it uses (such as NON-AMB and BED-RIDDEN); a negated mention (such as “NO NON-AMB”) is never read as an approval; and the number of residents an approval covers is given only when it is the home’s own number, never a room’s or a building’s share. Every tool that returns or filters on the four approvals reads the new values, at covelightcare.com/mcp from the first weekly data refresh after this version is live.
  • Wording only: no input, output or behavior changed. Every tool description, every input and output description and the server instructions now say what a tool does, its effects and its limits, and nothing about when to offer, send or relay it. ask_homes_for_family’s description says what each call does: a call without agreement sends nothing and returns the request and an agreement; a call with the agreement and send_link sends the link to the family’s own phone or inbox, and each such call sends another; a call with the agreement alone reports whether the family has tapped an answer. Nothing reaches a home until the family taps an answer on our page. The server instructions no longer say when to offer ask_homes_for_family; their consent rule says it asks the homes a family chose about room and cost only after the family’s own tap on covelightcare.com. start_family_request’s description says the call contacts no one and its inputs are license numbers only.
  • Answers first. New read-only tool area_overview: what is in a city, county, neighborhood or region (or a whole state), as typed counts each with its source and date: licensed homes by size, the state’s care approvals on file, homes on the waiver list, a range of monthly figures with the homes’ own listed rates and Covelight’s estimates counted separately, the state record’s tallies, and for a county the homes in each city. explain_care_topic answers in 2–4 sentences, each a fact with its source and date (facts), including this year’s SSI/SSP board-and-care standard and the counties with homes on the waiver list from our data; new topics medicare-and-care-homes, veterans-benefits, long-term-care-insurance, residents-rights, complaints-and-ombudsman, what-a-home-may-do, choosing-a-home and respite-care; Spanish questions route to topics; next_step names a tool, the inputs the question already gave (a place, a hospital) and one line to offer it. find_homes: preferred_size and language order the list by fit, never removing a home (homes with every stated preference on file first, then some, then none; a home whose own listed rate fits the budget first within its group; then distance), and each home says why it fits (fits) and which asks are not on file with the question to ask (unknown); filter_counts says what each filter kept, so a short list says which filter did it; a county or region over 50 homes lists its cities; neighborhoods and regions families name (Hollywood, Silver Lake, the San Fernando Valley, the Bay Area, the Inland Empire) resolve and say what they searched; a call with no place is refused with the question to ask; the default page is 10, and detail returns at most 10 homes. check_homes: status close_match with matched_name when one name is clearly closest, candidates closest name first. get_home takes name instead of license_number (several licenses, or only a close one, come back to choose from), and license_meaning says the license’s status in plain words; compare_homes takes homes by name or number. search reads hospitals by name (homes nearest the hospital) and returns our guide and area pages for questions, with typed ids (guide:…, area:…) that fetch reads. Every result carries speech, the answer in about 40 words (null only for the two tools whose words of record must be shown whole). A tool result’s text block is now its display narration; a client on a protocol revision before 2025-06-18 still gets the JSON copy. homes_near_hospital’s default page is 20. Every list display shows five homes in two short lines each, with the source and date once. Also new in 1.6.0, ask_homes_for_family: the family agrees on our page, and no code passes through the assistant. The first call sends nothing and returns their request, the words and the two answers the page will show (the request sentence now says “Covelight will contact”), where the link can go (send_link_by, with link_disclosure to show) and an agreement code. Once they choose, call again with the agreement and send_link "text" or "email": we send a link to their own phone or inbox, never to you, and their tap on that page sends the request. The agreement alone then says whether they have (step "waiting" or "request_sent"). New optional inputs for_whom, room and payment (the site’s own choices; no care needs); mobile is now optional, needed only for a link by text (her yes takes her number on our page); each call with send_link sends another link; up to 25 homes. New outputs each_home_hears, cannot_ask (the homes Covelight cannot ask on a request longer than the six it calls, named before the family taps), send_link_by, link_disclosure and link; the step values are family_must_agree, link_sent, waiting and request_sent. Removed before any listing: code_disclosure, code_sent_to and the step code_sent. send_code, homes_may_call, verification_code and family_agreed are refused since 1.6.0, with what to send instead (no code passes through an assistant); so are find_homes’ unlisted latitude and longitude, whose window was to end 2027-01-12: send the place where the family wants homes. start_family_request: mode is always "coordination_available" and covelight_can_arrange_calls always true (on the page the family can have Covelight contact the homes); both fields are removed after 2027-01-17. The server instructions say when to offer ask_homes_for_family (an open bed, a price for one person, a home to contact the family, a tour); the reading tools’ descriptions state only what they do and their limits, and their list results’ honesty.never_in_this_data is one sentence: “Openings change daily, so Covelight asks the homes you pick and emails you each home’s answer.”
  • POST /api/v1/check returns the MCP 1.6.0 fields, all additive: speech, matched_name on every result and close_match in counts; a result’s status may be close_match (one name clearly closest, to confirm before relying on it). With detail, full records come for the first 10 homes.
  • One contract for every state: no tool name or input names a state, each tool’s title and description name the states we cover (California today), and the data stays California’s. Every tool that takes a place or a home takes an optional state, its two-letter postal code in any case (search reads it from the query); leave it out to search every state we cover. A state, ZIP or license number we do not cover yet is answered as not covered, naming the states we cover: find_homes area.status and homes_near_hospital status "not_covered", explain_care_topic matched_by "not_covered", a refusal elsewhere. License numbers in the schema are any 3–20 letters, digits or hyphens; each state’s own form (California: 6–12 digits) is checked when the call runs. Renamed before any directory listing: medi_cal_alw is now medicaid_waiver (find_homes’ input and filters, every home record and summary), which names the state’s program (and, in the full record, its list); data_dates.alw_list_as_of is medicaid_waiver_list_as_of; explain_care_topic’s guide topics are paying-for-care, assisted-living-vs-nursing-home, medicaid-waiver, board-and-care-vs-assisted-living, check-a-license, hospital-discharge, documents-before-signing, moving-in, ssi-and-care-homes, hospice-in-a-care-home and first-90-days, each answered with the same California guide as before. The old names still work as inputs, unlisted, until 2027-01-17: find_homes accepts medi_cal_alw as medicaid_waiver, and explain_care_topic (and the explain alias) accepts the old topic keys; after that day a call that sends one is refused with what to send. The renamed output fields carry only their new names on MCP, a one-time exception made before any listing. New fields: state on every home, area, candidate, hospital and topic; source (the hospital file) on hospitals. The registry name is com.covelightcare/care-homes, the catalog identifier urn:air:covelightcare.com:mcp:care-homes. Also new in 1.5.0: every home carries its street address, ZIP, the number to give a family (phone: number, source, as_of, the home’s own approved number first, else the state’s), its public location (location: latitude, longitude; never the user’s), and the state’s complaint and substantiated-allegation counts with their date; the compact home also says on_probation (true, false, or null where the record does not say). get_state_documents answers with an index, 5 a page, one entry per document with its id; send document (an id, or a control number) to read one in full, the state’s words verbatim. Hospital candidates say how many licensed homes their page lists and within how many miles (homes_within_radius, radius_miles). get_home dates every source in ISO. ask_homes_for_family is marked destructive: a text or an email cannot be recalled, so hosts ask before each call. search reads a license number written with a prefix or hyphens (#198603566, Lic 197606301, 191-200-037), and a California street, hospital or ZIP never as another state. Each POST to /mcp carries one JSON-RPC request; a browser origin outside the assistants’ own apps and this site is refused; costly calls spend more of the per-minute budget (see Limits).
  • POST /api/v1/check returns the MCP 1.5.0 fields: medicaid_waiver on every home (with program, and in the full record list), data_dates.medicaid_waiver_list_as_of, and state on every home and candidate. Deprecation notice: medi_cal_alw and data_dates.alw_list_as_of are still returned beside them, with the same values, until 2027-01-17, and are marked deprecated in openapi.json; v1 removes no field before then. Read the new names.
  • New tool ask_homes_for_family: when a family asks the assistant to have Covelight Care ask the homes they chose, the assistant can send that request itself, in three calls with the same inputs. The first call sends and texts nothing: it returns the sentences the family agrees to, exactly as the site shows them (the request's sentence says "By replying with either answer"), the two answers they can give, code_disclosure (the line saying we will text a 6-digit code to their US mobile, with the rates and the Terms and Privacy links), and an agreement code that lasts 30 minutes. Show the family all of it unchanged. Only after they say to text the code, call again with the agreement and send_code true: we text the code, never to a number on our STOP list. Only after they reply with one answer and read back the code, call a third time with the agreement, their answer as homes_may_call, the code as verification_code and family_agreed true; an agreement for other homes, other details or other words, or a wrong, expired or overtried code, is refused, on every call after the first. It takes the asking person's first name, email and mobile, and an optional move timing; the mobile is kept only if they answer yes. It takes no care needs, health details or notes, never signs anyone up for texts, and never returns the link to their request page, which goes to them by email. An answer sent less than 10 seconds after the agreement was issued is refused. A repeated final call with one agreement finds the request it made; a third request through an assistant inside 24 hours from one email, or from one mobile number, is refused. The server instructions' consent rule now names this tool. start_family_request's words now say both ways a family agrees; its inputs and outputs are unchanged.
  • Deprecation notice: inputs leave tools/list and are accepted until 2027-01-12, then refused with what to send instead. find_homes: latitude and longitude; send the place where the family wants homes as county, city, zip or hospital. start_family_request: needs, timing, area, family_note and assistant_name. It now takes license_numbers only and ignores those five, so nothing a caller sends beyond license numbers enters the hand-off link, the call questions or our counts; the new field ignored_inputs names any it received, and needs is always [] and timing always null until both go with the inputs. Links minted before 1.3.0 still open. display is now plain text with no Markdown, so it reads the same in a chat window, a text message or a voice reply: a link is a bare address on its own line, compare_homes gives each fact once with every home’s value under it instead of a table, and a state passage sits in quotation marks. Every tool declares securitySchemes [{"type": "noauth"}] at the top of its tools/list entry and in _meta, beside the two status lines ChatGPT shows while it runs (openai/toolInvocation/invoking and invoked). The server instructions now open with the rules that keep an answer true; the list of when to call each tool is gone, because each tool’s description says so. Hospital names resolve the way families and discharge planners say them, in find_homes and homes_near_hospital: "Stanford Hospital" is Stanford Health Care (it was Lucile Packard Children’s), and "UC Davis" is UC Davis Medical Center (it was the rehabilitation hospital). An adult general hospital is chosen over a children’s, rehabilitation or psychiatric hospital the caller did not name; when two hospitals fit, the candidates come closest name first, and the message asks for the full name and city. find_homes names a hospital with its city.
  • POST /api/v1/check: display is now plain text with no Markdown, the same change as MCP 1.3.0. No field changed shape.
  • phone_from_home on /api/v1/facilities and /api/v1/facilities/{license} now carries a home's own number from the moment the home saves it. A home's edits publish on save and we look them over afterwards, so the number no longer waits for our approval first. If we take a number down, the field returns to the home's previous number, or to null when there was none. The number that POST /api/v1/check and the MCP tools give a family with the source "Provided by the home" follows the same rule. No field changed shape.
  • phone on every home record, and in start_family_request, is now the number to give a family, by the facility page's own rule: the home's own number first, when the home has given one and we approved it (source "Provided by the home", dated when the home stated it), otherwise the state licensing record's (source "From the state licensing record", which used to read "CDSS licensing roster"). New field phone.state_number: the state's number when the home's own differs from it, otherwise null.
  • New field phone_from_home on /api/v1/facilities and /api/v1/facilities/{license}: the home's own phone number, as the home gave it and we approved it (source_class operator_attested, ref fact:operator.contact#<id>, confirmed_on the date the home stated it); value null when the home gave none. phone on those two endpoints is unchanged: the state licensing record's number. Where both are on file and differ, phone_from_home is the number to call; the facility page dials it first. POST /api/v1/check returns the same home record as the MCP tools, so its phone changed with MCP 1.2.0: phone.number is the number to give a family (the home's own approved number first), phone.source says whose ("Provided by the home", or "From the state licensing record", which used to read "CDSS licensing roster"), and phone.state_number is new.
  • get_state_documents and get_home list one document for every report the state lists. A complaint whose investigation filed several reports under one control number now shows each report; about 1,800 across California were folded into one of their siblings before. A transcription is matched to its listed report by the state's own document id before date and form, so a report the state's list dates differently from its print no longer appears twice. No field changed.
  • A one-time correction to a report's ref on /api/v1/facilities/{license}/reports: it is now doc: followed by the state's own document id, one per document and stable from one harvest to the next. It used to be the row's key: a complaint's control number, which every report of that complaint shares, or for other reports a key of ours that moved between harvests although it was documented as stable. A ref stored before 2026-09-28 will not match. A complaint's control number now comes from the new field control_number, which is null on reports the state lists without one. The list now includes every report the state lists, so a home's total can rise.
  • start_family_request refuses more names. A name with an apostrophe after its first letter (O’Brien, D’Angelo), typed with a straight or curly apostrophe, is now caught wherever a plain name already was: after “named” or “called”, a title such as Mrs., or a family word. An introduction of a relative’s, friend’s, neighbor’s, patient’s, client’s or resident’s name (“grandma’s name is …”, “my mother-in-law’s name is …”) is caught too, not only a parent’s. The screen still cannot catch every name, so the rule is unchanged: send no personal details.
  • service_designations on /api/v1/facilities and /api/v1/facilities/{license} leaves out a state service code that grants a clearance under a correction review: every code while the dementia clearance is held, and "985 - RCFE / HOSPICE" while the hospice clearance is held. The facility page already left out every code under a dementia hold; it now also leaves out the hospice code under a hospice hold.
  • A clearance under a correction review now reads "not_on_file" on /api/v1/facilities and /api/v1/facilities/{license}, as it already did on the facility page and in the MCP tools, and it no longer matches a needs filter. Both are CDN-cached for five minutes (was an hour), so a review reaches them within minutes.
  • explain is now explain_care_topic. The old name still answers until 2026-12-22, then it is removed. New: search and fetch, the tool pair ChatGPT connectors and deep research call; fetch returns a home’s page as Markdown with its canonical URL. /mcp speaks MCP 2026-07-28 (server/discover, no session) beside the 2025 initialize handshake. Every tool description says when to use it and what it is not for, and every argument names its allowed values with an example. Budget: 60 requests a minute per caller; inside Anthropic’s and OpenAI’s published egress ranges the caller is the session or the ChatGPT user, under a shared per-host ceiling. Over budget, the answer is 429 with Retry-After and a JSON-RPC error. Two names for every home. name is now the name the home goes by: the licensed name without a trailing legal form such as LLC, Inc., Corp. or Ltd. The exception is a fixed list of 22 names that two licences in one city would otherwise share; those keep the form wherever they appear. The new field licensed_name holds the name on the license, verbatim as filed. It appears on home records, summaries, check_homes candidates and get_state_documents. Links are unchanged.
  • licensed_name on /api/v1/facilities records and POST /api/v1/check results: the name on the license, verbatim. It is an additive field; name on /api/v1/facilities keeps the record's own string.
  • This developer portal: a quickstart in curl, JavaScript and Python, per-host MCP setup, a reference generated from openapi.json and the MCP tool registry with real responses, and a data dictionary. Discovery files: the MCP server card at /mcp/server-card and /.well-known/mcp/server-card.json, and /.well-known/ai-catalog.json.
  • First release of the remote MCP server at /mcp: find_homes, check_homes (up to 100 homes a call), get_home, get_state_documents, compare_homes, homes_near_hospital, explain and start_family_request. POST /api/v1/check, the REST twin of check_homes. Markdown versions of pages ({page}.md, or Accept: text/markdown).
  • The v1 read API: GET /api/v1, /api/v1/facilities, /api/v1/facilities/{license}, /api/v1/facilities/{license}/reports and /api/v1/guides, with the OpenAPI 3.1 contract at /openapi.json.