Vlada Docs

Start

Tools
58
Served tables
781
Companies
3,837
Instruments
149,487
Refusal codes
15
Doors
2MCP, REST

Three steps

  1. 1
    Get a key
    Free account at /data-access. The MCP connector signs in by OAuth; REST uses the key, shown once.
  2. 2
    Connect an agent
    Claude Code below; Claude, ChatGPT, Cursor, VS Code on Connect. Endpoint https://mcp.vladahealth.com/mcp.
    claude mcp add --transport http --scope user vlada https://mcp.vladahealth.com/mcp
    
    # first question
    Use Vlada. Which ten Minnesota counties have the most Medicare Advantage members who must pick a new plan for 2027? Give me a table with the members in the market, the members who lose their plan and the share, then the source file, the data vintage and the response hash.
  3. 3
    Or call REST
    Every tool is POST https://api.vladahealth.com/v1/tools/<name>; body = the tool's inputs.
    curl -X POST https://api.vladahealth.com/v1/tools/get_stars \
      -H "Authorization: Bearer $VLADA_API_KEY" -H "Content-Type: application/json" \
      -d '{"contract_id":"H5521","year":2026}'

The envelope

FieldTypeHolds
statusenumcomplete · partial · refused · failed · queued
valueobjectrows or the figure, with its unit
sourceobjectdataset, publisher, vintage of the public file
caveatsstring[]what to know before citing
invariants_appliedstring[]the rules the answer honoured
response_hashstringreplayable
refusalobjectcode (one of 15), message, recover_with (the call that answers)

The loop

find_data_sources(query="medicare advantage enrollment by county")   # which table
describe_data_source(source_fqn="<fqn>")                               # grain, traps, required filters
get_enrollment(contract_id="H5521")                                     # a typed tool, or:
query_substrate(sql="SELECT ... FROM <fqn> WHERE state_code='OH' LIMIT 100")   # your own read-only SQL
RuleWhy
Independent calls in paralleleach call pays a fixed 1.5 to 5 s engine cost
Heavy price tools one at a timeone per server; on busy, wait 25 s and retry
Pin a state on hospital tables, a year on annual tablesscan budget; the refusal names the filter
Aggregate in SQL, never pull rows to countrows per call and per month are capped by plan
Identical call within 15 minserved from cache

Held back on purpose

RuleWhat you get instead
One payment basis per medianfee schedule, per diem and percent of charges are segmented, never blended
No figure below the declared floorthe tail is set aside as implausible_tail, with its count
Medicare and commercial never in one numbertwo numbers, each labelled
Insurer-file (TiC) lookups: coming soonrefused NO_COVERAGE; rates by insurer and plan come from hospital files
CMS suppression (* = 10 or fewer)bounds, never a zero
An empty resultreported as an absence with what was searched

Everything served

SectionCountWhat
Data781tables with columns, grain, traps, required filters
Companies3,837one permanent ID each; owners, holdings, over time
Tools58each with a real answer
Recipes110question → tool → arguments
Errors15codes, meaning, way out, HTTP status

This page as markdown: /docs-md/recipes.md · every page in one file: /llms-full.txt