Skip to main content
Glama
pmerlin1

SF Early Learning For All (ELFA) & CareWait MCP Server

by pmerlin1

SF Early Learning For All (ELFA) & CareWait MCP Server

An authoritative Model Context Protocol (MCP) server for navigating San Francisco's Department of Early Childhood (DEC) preschool network, Early Learning For All (ELFA) financial subsidies, and real-time CareWait database searches.

Includes a TypeSafe Jev System One decision engine and A/B evaluation matrix comparing deterministic probability scoring against generative LLM judgments (Claude, GPT, Gemini, etc.).


Features

  • Live CareWait Search: Search 500+ licensed San Francisco preschools and child care centers with real-time filters for age, language immersion, facility type, schedule (full-time vs part-time), and subsidy programs.

  • Authoritative FY 2026–2027 SF DEC Rules: Embedded rate tables, HUD AMI / California SMI ceilings, age bracket definitions (Infant, Toddler, Preschool), and strict co-pay limits.

  • Automated Net Out-of-Pocket Calculation: Automatically calculates family subsidy discounts and estimates true monthly net tuition (Math.max(0, grossTuition - subsidy)).

  • TypeSafe Jev System One Integration: Leverages TypeSafe's Jev model (@typesafe-ai/sdk) for typed decision primitives (score, choice, noul) to rank options with calibrated confidence rather than hallucinated generative text.

  • A/B Human Evaluation Tool: Side-by-side comparison matrix of Generative LLM narrative recommendations vs Jev System One probability distributions.


Related MCP server: kealu-benefits-navigator

San Francisco ELFA Subsidy Tiers (FY 2026–2027)

Tier

Household Income (HUD AMI)

Infant (0–24 mo)

Toddler (24–36 mo)

Preschool (3–5 yr)

Co-pay Rules

Free Tuition

0% – 110% AMI (≤$160,500/yr for family of 3)

$3,027 / mo

$2,306 / mo

$2,115 / mo

No co-pays or fees allowed

Full Tuition Credit

111% – 150% AMI ($160,501–$218,850/yr for family of 3)

$3,027 / mo

$2,306 / mo

$2,115 / mo

Co-pay = Tuition − credit

Half Tuition Credit

151% – 200% AMI ($218,851–$291,800/yr for family of 3)

$1,514 / mo

$1,153 / mo

$1,058 / mo

Family pays remaining tuition


Available MCP Tools

1. check_elfa_eligibility

Computes exact ELFA financial assistance tier, monthly discount credits, and co-pay rules given family size, income, and child age.

2. search_sf_childcare

Queries the live SF CareWait database with rich filters:

  • ageYears: e.g., 2.1

  • programType: licensedCenter (preschool center), licensedFamilyChildCare (home daycare), or any

  • financialAid: ["halfCreditELFA"], ["freeTuitionELFA"], ["cctr"], ["csppFullDay"], etc.

  • language: Spanish, Mandarin, Cantonese, French, Japanese, etc.

  • schedule: partTime, fullTime

  • openingsOnly: Boolean filter for programs with immediate vacancies.

  • zipCodes: List of San Francisco zip codes.

3. get_childcare_details

Fetches complete provider details by entityId: licensed classrooms, age limits in months, full infant/toddler/preschool tuition rate schedules, contact info, and DEC contract notes.

4. get_smart_recommendations

All-in-one recommendation engine: takes budget, language, schedule, and benefit tier, computes net out-of-pocket costs, and returns an affordably ranked shortlist of preschool centers.

5. compare_llm_vs_jev (alias: compare_gemini_vs_jev)

Runs an A/B evaluation benchmark: feeds candidate options and family constraints to both a Generative LLM (narrative reasoning) and TypeSafe Jev System One (probabilistic decision model) to produce a structured human-evaluation comparison matrix.

6. get_elfa_rates_and_rules

Returns the raw authoritative FY 2026–2027 Department of Early Childhood rate schedules, income ceilings, and regulatory guidelines.

7. get_state_licensing_record

Direct integration with the California Community Care Licensing Division (CCLD) transparency database: retrieves official inspection histories, capacity, complaint visits, substantiated allegations, Type A/B violations, and licensing conditions by license number.


TypeSafe Jev System One Meta Composite Scoring

Rather than relying on free-form LLM guesswork, candidate centers are evaluated through a structured, multi-dimensional decision model:

  1. Hard Requirements (Deterministic Gates):

    • Legally licensed status (STATUS === 'Licensed').

    • Facility type matching (dedicated commercial center vs in-home).

    • Age bracket compatibility (must legally accommodate child's age in months).

  2. Graded Decision Scoring (TypeSafe Jev Primitives):

    • State Safety & Licensing Record (35%): Evaluated against CCLD Type A citations, Type B deficiencies, and substantiated complaints. A single minor resolved technical finding receives a slight ding rather than an outright disqualification, while centers with serious safety hazards are heavily penalized.

    • Net Budget Satisfaction (30%): Evaluates net out-of-pocket tuition against the family's strict budget ceiling.

    • Language Immersion Depth (25%): Scores authentic immersion vs bilingual support vs secondary exposure.

    • Toddler Development & Diapering (10%): Confirms Title 22 Toddler diaper changing facilities and supportive toilet learning (eliminating programs that demand unrealistic potty training for a 2-year-old).

  3. Composite Verdict: Produces a calibrated recommendation choice (top_tier, strong_alternative, caution_flagged, unsuitable) with continuous confidence scoring.


Installation & Setup

Requirements

  • Node.js >= 20.0.0

git clone https://github.com/your-username/sf-early-learning-mcp.git
cd sf-early-learning-mcp
npm install
npm test

Configuration in OpenCode (opencode.json)

Add to your opencode.json (global ~/.config/opencode/opencode.json or project-local ./opencode.json):

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sf-early-learning": {
      "type": "local",
      "command": [
        "node",
        "/absolute/path/to/sf-early-learning-mcp/src/index.js"
      ],
      "enabled": true,
      "environment": {
        "TYPESAFE_API_KEY": "{env:TYPESAFE_API_KEY}"
      }
    }
  }
}

Configuration in Claude Desktop / Claude Code

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "sf-early-learning": {
      "command": "node",
      "args": ["/absolute/path/to/sf-early-learning-mcp/src/index.js"],
      "env": {
        "TYPESAFE_API_KEY": "your-typesafe-key-here"
      }
    }
  }
}

Once configured in your AI client (OpenCode, Claude, Cursor), try these copy-paste prompts:

1. The Intake Interview

"I have a 2-year-old child and live in San Francisco. Walk me through the Early Learning For All (ELFA) options, check my eligibility, and recommend preschools based on my budget and language preference."

2. Low Out-of-Pocket Language Immersion

"We have the ELFA Half Tuition Credit for our 2.1-year-old toddler. Can you find licensed preschool centers (not home-based) offering Spanish or Cantonese/Mandarin immersion where our out-of-pocket tuition is under $400/month?"

3. Income Eligibility Check

"We are a family of 4 living in San Francisco with a gross monthly income of $15,000. Do we qualify for ELFA Free Tuition or the Full Credit? What is our monthly voucher amount for a 2-year-old toddler and a 4-year-old preschooler?"

4. Head-to-Head A/B Evaluation (Generative LLM vs. TypeSafe Jev)

"Run an A/B evaluation comparison between Generative LLMs and TypeSafe Jev System One for top Spanish immersion preschool centers in San Francisco with a target budget of $200/month."


Example Scenarios & Real Net Costs

Scenario

Child Age

Voucher Credit

Selected Center

Regular Tuition

Your Net Monthly Cost

Spanish Immersion (Strict Budget)

2.1 yo

$1,153 / mo (Half Credit)

Chibi Chan Too (Presidio)

$1,243 / mo

$90 / mo

Spanish Immersion (Mission Center)

2.1 yo

$1,153 / mo (Half Credit)

Mission Kids Co-op (Mission)

$1,383 / mo

$230 / mo

Chinese Immersion (100% Covered)

2.1 yo

$1,153 / mo (Half Credit)

Kai Ming Rainbow Center

$1,153 / mo

$0 / mo

Free Tuition Tier (0-110% AMI)

Any

100% Free

Any ELFA Center

Any

$0 / mo (Co-pays banned)


Security, SAST & Verification

  • Zero Hardcoded Secrets: Uses environment variables (TYPESAFE_API_KEY, optional CAREWAIT_API_KEY).

  • Dependency Audit: Verified with npm audit (0 vulnerabilities).

  • Pre-commit Hooks: Enforces automated secret scanning and unit test validation before any commit.

  • Deterministic Logic: All income brackets and voucher calculations are executed in code, preventing LLM hallucination of financial figures.


Testing

Run unit tests and verification suite:

npm test

Run headlessly via OpenCode:

opencode run "Using the sf-early-learning MCP, check ELFA eligibility for a family of 3 with monthly income of $18000 and a 2.1-year-old child"

License

MIT © 2026 Paul Merlin

Available Tools

7 tools
check_elfa_eligibilityA

Calculate San Francisco Early Learning For All (ELFA) financial assistance eligibility, income tier (Free 0-110% AMI, Full Credit 111-150% AMI, Half Credit 151-200% AMI), exact monthly subsidy amounts, and co-pay rules for a family.

ParametersJSON Schema
NameRequiredDescriptionDefault
familySizeYesTotal number of family members (parents/caregivers and dependent children under 18)
annualIncomeNoGross annual household income before taxes
childAgeYearsNoAge of the child in years (e.g., 2.1 for 2 years and 1 month)
monthlyIncomeNoGross monthly household income before taxes and deductions

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the calculations performed but does not state that it is a read-only operation, what assumptions are made (e.g., which income field is used when both annualIncome and monthlyIncome are provided), or what happens if required inputs are missing. It does not contradict annotations (none exist), but it is not fully transparent about behavioral constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise and front-loads the primary purpose. It efficiently lists the key outputs without unnecessary detail, though the sentence is slightly long due to the enumeration of tiers and amounts.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main outputs (eligibility, tier, subsidy, co-pay) but lacks guidance on input requirements, such as whether annualIncome or monthlyIncome is needed, or if both are accepted. Given there is no output schema, more explicit usage context would be helpful. The description is adequate but not fully complete for a calculation tool with multiple optional parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides detailed descriptions for all four parameters (100% coverage). The tool description does not add additional semantic detail beyond the schema, such as how parameters interact or which are required for a valid calculation. It remains at the baseline level expected when schema coverage is high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'calculate' and the specific resource (San Francisco Early Learning For All financial assistance eligibility), and enumerates the exact outputs (income tier, monthly subsidy amounts, co-pay rules). This distinguishes it from sibling tools like get_elfa_rates_and_rules, which likely provides general rate information rather than per-family calculations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (for calculating a family's eligibility) but does not explicitly compare with alternatives or state when not to use it. No mention of exclusions or conditions for choosing this tool over siblings like get_elfa_rates_and_rules, leaving the agent to infer from tool names and context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_llm_vs_jevB

A/B comparison between Generative LLM narrative reasoning (Claude, GPT, Gemini) and TypeSafe Jev System One deterministic probability decision scoring for human evaluation of preschool recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
familySizeNoFamily size (default 3)
benefitTierNoELFA benefit tier (default halfCreditELFA)
homeZipCodeNoFamily home zip code (e.g. 94121) to calculate distance and score location convenience
childAgeYearsNoAge of the child in years (default 2.1)
candidateCountNoNumber of candidates to evaluate in the A/B matrix (default 5)
preferredLanguageNoPreferred language immersion (e.g. Spanish, Mandarin, French)
targetBudgetMonthlyNoTarget monthly budget (default 1200)

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the conceptual comparison but doesn't disclose what the tool actually does operationally: does it call external LLM APIs? Does it return a side-by-side table? Does it make network calls or cost money? Does it have rate limits? The description is abstract about the mechanism and output, leaving the agent uncertain about side effects and requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that packs in the core concept, but it's dense and jargon-heavy ('TypeSafe Jev System One deterministic probability decision scoring'). It front-loads the comparison concept but the sentence is long and could be clearer with a brief mention of what the output looks like. It's not overly verbose, but it's not optimally scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 7 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what the A/B comparison produces (a report? a score? a recommendation?), whether it requires external API access, or how the parameters influence the comparison. An agent would struggle to know what to expect from the tool's output or how to interpret the results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 7 parameters. The description adds no additional parameter-level meaning beyond the schema. Baseline 3 is appropriate since the schema does the heavy lifting and the description doesn't need to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: an A/B comparison between LLM narrative reasoning and TypeSafe Jev System One deterministic scoring for preschool recommendations. It names the specific systems being compared and the domain (preschool recommendations). However, it doesn't explicitly distinguish it from sibling tools like get_smart_recommendations, which might also produce recommendations, though the comparison aspect is unique.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used when a user wants to compare two different recommendation approaches, but it doesn't explicitly state when to use this tool versus alternatives like get_smart_recommendations or search_sf_childcare. There's no explicit 'use this when' or 'instead of' guidance, so the usage context is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_childcare_detailsB

Retrieve complete details for a specific SF childcare or preschool center by its entityId, including exact tuition rates table by age group, programs, schedule, languages, contact info, and ELFA subsidy notes.

ParametersJSON Schema
NameRequiredDescriptionDefault
entityIdYesThe entityId of the provider

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read-only retrieve operation, but does not explicitly state safety, side effects, error handling, or any prerequisites. It also does not mention whether the returned data is comprehensive or if there are limitations. Given no annotations, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense sentence that front-loads the verb and resource, then lists the included content. It is concise with no filler, though it is somewhat long due to the enumerated details. The structure is effective and easy to parse, earning a 4 rather than 5 for slight density.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description is quite complete. It enumerates exactly what data will be returned (tuition rates table, programs, schedule, languages, contact info, ELFA subsidy notes). However, it lacks information about error handling, null returns, or any prerequisites, which a thorough description might include. Given the tool's simplicity, this is a 4.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with the entityId parameter described as 'The entityId of the provider'. The description adds minimal extra meaning beyond confirming that the entityId is used to retrieve details, but it does not provide format, type, or validation information beyond what the schema already gives. Since coverage is high, a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Retrieve' and the resource 'specific SF childcare or preschool center by its entityId', listing exact content like tuition rates, programs, schedule, languages, contact info, and ELFA subsidy notes. This is a specific, unambiguous purpose that distinguishes it from sibling tools like search_sf_childcare (search) and get_elfa_rates_and_rules (rates focus).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, nor any conditions or exclusions. It does not mention that it is the tool to use when complete details are needed, nor does it reference sibling tools. An agent would have to infer usage from the purpose alone, which is insufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_elfa_rates_and_rulesA

Get authoritative San Francisco Department of Early Childhood (DEC) official FY 2026-2027 reimbursement rates, income eligibility tables, and program rules.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It conveys that the tool is a read-only retrieval of official rates, tables, and rules ('Get'), but it does not disclose output format, data source behavior, update cadence, or access requirements. This is minimally viable but not richly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It packs in the jurisdiction, department, fiscal year, and three content types without repetition or tangential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter retrieval tool, the description is mostly complete, but the absence of an output schema means the description has to carry return-value meaning. It names the content areas but not the structure or format, and it does not clarify how this tool relates to check_elfa_eligibility despite the overlapping income eligibility language.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters and the schema is an empty object, so the input schema already fully documents the call signature. The description correctly adds no parameter details; the 0-parameter baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and a concrete resource: San Francisco DEC official FY 2026-2027 reimbursement rates, income eligibility tables, and program rules. This clearly distinguishes it from sibling tools like check_elfa_eligibility and search_sf_childcare, which focus on checking eligibility or searching childcare options.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit when-to-use or when-not-to-use guidance, and it does not mention alternatives. It leaves the relationship to check_elfa_eligibility ambiguous, especially since both involve income eligibility content. The intended usage is only implied by the tool's purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_smart_recommendationsB

Intelligent recommendation engine: combines child age, family size, income/known benefit tier, max out-of-pocket budget, language immersion preferences, and facility type to calculate net out-of-pocket costs and produce a tailored shortlist of preschool centers.

ParametersJSON Schema
NameRequiredDescriptionDefault
scheduleNoSchedule preference
familySizeNoTotal number of family members
maxResultsNoNumber of top recommendations to return (default 10)
benefitTierNoPre-known ELFA benefit tier if already determined
homeZipCodeNoFamily home zip code (e.g. 94121) to prioritize immediate neighborhood facilities and calculate exact commute distance
programTypeNoDefault is licensedCenter (dedicated preschool center)
annualIncomeNoGross annual household income
childAgeYearsYesAge of the child in years (e.g., 2.1)
monthlyIncomeNoGross monthly household income
preferredLanguageNoPreferred language immersion (e.g. "Spanish", "Mandarin", "Cantonese", "French")
targetBudgetMonthlyNoMaximum desired out-of-pocket monthly cost (e.g. 1200 or 0)

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the transparency burden. It does disclose the main computation (combining child/family/financial/language inputs to calculate net costs and rank a shortlist), but it says nothing about output format, failure modes, missing-data behavior, or whether it is read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence conveys a lot of information without wasted words, and the outcome is stated clearly. It lists many inputs, making it slightly dense, but no sentence or clause is extraneous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is an 11-parameter tool with no output schema and no annotations, yet the description only gives a high-level summary. An agent is left without guidance on the shortlist's return fields, how optional income/benefit inputs interact, defaults, or what to do when only childAgeYears is provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents 100% of the parameters, so the baseline applies. The description adds conceptual meaning by grouping several parameters into a cost-calculation and tailoring workflow, but it doesn't define formats or interplay beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete deliverable—a tailored shortlist of preschool centers with calculated net out-of-pocket costs—and states the inputs used. It stops short of explicitly contrasting itself with sibling search tools, so it doesn't fully earn a 5, but the core action and resource are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when a personalized, cost-aware recommendation is needed rather than a plain directory search. It gives no explicit when-not-to-use guidance or pointer to siblings like search_sf_childcare or check_elfa_eligibility.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_state_licensing_recordA

Retrieve official California Community Care Licensing Division (CCLD) state inspection history, capacity, complaint visits, substantiated allegations, Type A/B violations, and official comments for a child care facility by license number.

ParametersJSON Schema
NameRequiredDescriptionDefault
licenseNumberYesThe California child care facility license number (e.g. "384001291")

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the burden of behavioral disclosure. It does a good job enumerating the data categories returned, but it omits any statement about auth requirements, read-only behavior, error cases, freshness, or what happens for an invalid license number. 'Retrieve' implies a read operation, but the description could be more explicit about operational behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence with the most important information front-loaded. Every phrase contributes specific value, and there is no filler, repetition, or unnecessary qualification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter get-by-license-number tool with no output schema, the description is largely complete: it states the required input, the jurisdiction, the record type, and the key data elements returned. It does not describe response format or error handling, but these are minor gaps given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents licenseNumber with 100% coverage and includes an example. The description only says 'by license number,' adding little semantic meaning beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Retrieve) and a specific resource: official California CCLD state licensing record data for a child care facility by license number. It enumerates concrete content areas (inspection history, capacity, complaint visits, substantiated allegations, Type A/B violations, official comments), making it clearly distinct from the sibling tools like get_childcare_details or search_sf_childcare.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this when you need official California CCLD licensing history or related regulatory data for a child care facility and you have its license number. It does not explicitly name alternatives or state when not to use it, but the license-number requirement and the official-state-record framing provide sufficient routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_sf_childcareA

Search the official San Francisco CareWait database of over 500 licensed early care and preschool programs with real-time filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
skipNoPagination offset (default 0)
takeNoNumber of results to return (default 20, max 50)
hoursNoSpecific hours (e.g., daytimeCare, schoolHours, beforeCare, afterCare)
ageYearsNoAge of the child in years (e.g. 2 for 2-year-old)
languageNoLanguage taught or immersion language (e.g. "Spanish", "Mandarin", "Cantonese", "French", "Japanese")
scheduleNoSchedule preference: partTime or fullTime
zipCodesNoList of San Francisco zip codes to restrict search to
programTypeNoType of program: licensedCenter (preschool center), licensedFamilyChildCare (in-home), or any
financialAidNoFinancial assistance types accepted (e.g., ["halfCreditELFA"], ["freeTuitionELFA"], ["fullCreditELFA"], ["cctr"], ["headStart"], ["csppFullDay"])
openingsOnlyNoIf true, only returns programs that currently have open spots

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the burden of behavioral context. It adds 'official... database' and 'real-time filters,' which help set expectations about freshness and scope, but it does not disclose output characteristics, pagination, or edge cases like empty results or invalid filter combinations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. It communicates the resource, scope, and capability efficiently, and every phrase contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 10 optional parameters and no output schema, so the description's scope-setting sentence is helpful but not fully complete. An agent still depends on the parameter descriptions for effective usage and has no guidance about what the result set looks like beyond 'programs.'

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the description does not need to re-explain parameters. It adds only the general 'real-time filters' framing, which aligns with the schema but does not add meaningful detail beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is specific and actionable: it names the exact resource (official San Francisco CareWait database), the resource type (licensed early care and preschool programs), and the operation (search with real-time filters). It also conveys the tool's profile sufficiently to distinguish it from siblings like get_childcare_details and check_elfa_eligibility.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a general search-and-filter use case but does not explicitly state when to use this tool versus alternatives such as get_childcare_details or get_smart_recommendations. It gives clear context about what it searches but no exclusion criteria or sibling routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv1.0.0
    • First observedcheck_elfa_eligibility
    • First observedcompare_llm_vs_jev
    • First observedget_childcare_details
    • First observedget_elfa_rates_and_rules
    • First observedget_smart_recommendations
    • First observedget_state_licensing_record
    • First observedsearch_sf_childcare

TDQS

A3.6/5.0

Scored across 7 tools

Disambiguation4/5

Most tools have clearly distinct purposes: rates/rules, eligibility, search, details, recommendations, comparison, and licensing records. The only potential confusion is between get_elfa_rates_and_rules and check_elfa_eligibility, but their descriptions are specific enough to separate reference data from calculation.

Naming Consistency4/5

Tool names mostly follow a consistent get_/check_/search_/compare_ verb pattern with descriptive noun phrases. Minor inconsistency: compare_llm_vs_jev uses an abbreviation-heavy name and doesn't follow the get_/search_ convention, but the pattern is still readable and predictable.

Tool Count5/5

Seven tools is well-scoped for a domain covering ELFA eligibility, childcare search, recommendations, and licensing. Each tool addresses a distinct user need without redundancy or bloat.

Completeness4/5

The set covers the core workflow: eligibility check, search, details, recommendations, and licensing verification. Minor gaps include no tool for applying for ELFA or managing a CareWait waitlist, but the informational and decision-support surface is largely complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers