# Moonshot Lab (demo)

> Agent car inventory index. Synthetic demo data, not real inventory, not an offer.

- name: com.moonshotlab1/inventory
- version: 1.0.0-demo
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 69/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.moonshotlab1%2Finventory
- tools: https://api.protogrid.dev/v1/servers/com.moonshotlab1%2Finventory/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "inventory": {
      "type": "http",
      "url": "https://moonshotlab1.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-3d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 69/100 (new)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 64 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: get_trade_in_scenarios (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); list_searchable_fields (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_listing (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 5,513 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history recorded for 2 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 11, about 5,513 tokens to load them all
- tool set hash: 83171ccde3b17f6af53999a0a8596ffb
- tools last changed: 2026-10-18T18:02:44.515Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.moonshotlab1/inventory.svg)](https://protogrid.dev/servers/com.moonshotlab1/inventory)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-18 `get_ontology` changed (description) **meaning changed**
  - before: Schema links, vocabularies, states covered and the value-wrapper format.
  - after: Schema links, schema version, covered states, condition values, search sorts and the value-wrapper format ({v, m, c, src}). For the list of filterable fields and allowed values, use list_searchable_fields.
- 2026-10-18 `get_trade_in_scenarios` changed (description)
  - before: Ready-made demo trade-in scenarios (one per state) that can be passed to estimate_out_the_door.
  - after: Ready-made demo trade-in scenarios (one per state) with trade_value and payoff to pass to estimate_out_the_door or get_payment_estimate.
- 2026-10-18 `get_media` changed (description, inputSchema) **meaning changed**
  - before: Media block for a listing: self-generated placeholder image URLs (photo, video poster, spin), with rights notes.
  - after: Media block for a listing: self-generated SVG placeholder images labeled DEMO (photo, video poster, spin), with rights notes. They are not photos of a real car. No video or 360 viewer exists in the demo.
- 2026-10-18 `get_dealer` changed (description, inputSchema)
  - before: Fictional dealer profile: registry entity, stores (selling locations), group, state rules and a page of inventory.
  - after: Fictional dealer profile: registry entity, stores (selling locations) with fictional addresses and 555 phone numbers, group, state rules and a page of inventory. Not a real business; do not tell anyone to call or visit.
- 2026-10-18 `estimate_out_the_door` changed (description, inputSchema) **meaning changed**
  - before: Itemized out-the-door DEMO ESTIMATE using real public tax and fee rules for the 8 states: every line has a source and confidence, unknowns become ranges, and a trade-in block shows allowance, payoff, equity and the tax credit. Not an offer, not a quote, not penny-accurate, no payments. Inputs are not stored.
  - after: Use this for the buyer's TOTAL price of ONE listing: an itemized out-the-door DEMO ESTIMATE for the buyer's state, county and city, built with real public tax and fee rules for the 8 covered states. Lines include the price, dealer fees, eligible incentives, state and local sales tax, title and registration fees, and a trade-in block (allowance, payoff, equity, tax credit). Every line has a source and confidence; unknowns become ranges. Read estimated_out_the_door with estimate_range and confidence. With a trade-in, estimated_out_the_door is the balance due after the trade (negative equity added); deal.vehicle_out_the_door_before_trade is the car alone. Use get_price_breakdown instead for only the dealer's listed price and fees, and get_payment_estimate to turn this total into a monthly finance payment (this tool returns payments: null). Read warnings, for example when the shopper's state differs from the store's state. Not an offer, not a quote, not penny-accurate. Inputs are not stored.
- 2026-10-18 `get_price_breakdown` changed (description, inputSchema) **meaning changed**
  - before: Price components, dealer fees and fee bundles, all-buyer vs conditional incentives, options and the state's public tax and fee rules with data-flag checks.
  - after: Use this to see what the dealer LISTS for ONE listing, as published: headline price, MSRP (new cars), price_components, dealer fees (doc fee and others) and fee bundles (parts marked part_of_bundle, not double counted), flags such as whether the advertised price already includes fees, options, incentives split into all_buyer (already in the price) and conditional (not in the price), and the state's public tax and fee RULES with data-flag checks. It takes no buyer inputs and computes no tax amounts or total. Use estimate_out_the_door next for the buyer's total with tax, title, registration and fees, and get_payment_estimate for a monthly payment. Pass conditional incentive label_raw values to those tools as eligible_incentive_labels only if the shopper qualifies. A dealer-advertised monthly payment, when present, is a price_components item of type payment_quote: dealer ad text, not a calculation.
- 2026-10-18 `get_listing` changed (description, inputSchema) **meaning changed**
  - before: Full synthetic listing record with per-value provenance (method 'synthetic'). listing_id is dealer_key:VIN or the urn.
  - after: Full synthetic listing record with per-value provenance (method 'synthetic'). listing_id is dealer_key:VIN (as returned by search_inventory) or the urn. The vehicle-to-store link is in listing.selling_location (link_status, selling_location_id, candidates, flags such as group_site_lists_sister_store or multi_store_unstated); the dealer block is the advertising dealer. For price and fees in a compact form, use get_price_breakdown.
- 2026-10-18 `get_payment_estimate` added
  - Use this to answer 'what would my monthly payment be' for ONE listing. It runs the same itemized out-the-door calculation as estimate_out_the_door (always treated as financed) and turns it into a DEMO monthly finance payment: out-the-door total minus down payment and trade equity, amortized at the APR (or a demo APR by credit_tier) over term_months. Returns finance.estimated_monthly_payment rounded to $5, monthly_payment_range, amount_financed_estimate, total_of_payments, finance_charge and every assumption, plus the out-the-door figure it used and any dealer-advertised payment shown separately (not comparable unless the terms match). Use get_price_breakdown instead for the dealer's listed price and fees only, and estimate_out_the_door for the full itemized total without a payment. To find cars by payment across many listings, use search_inventory with payment_max. Not an offer of credit, not a quote, not penny-accurate. Leases are not modeled.
- 2026-10-18 `list_searchable_fields` added
  - Every filterable ontology field (vehicle, listing, store, dealer, price, fee, incentive, media, payment) with its type, range or allowed values, shortcut names, the operators (eq, any_of, contains, range, bool, exists, negate) and example filters for search_inventory. The full compact list is about 30 KB, so narrow it with prefix or query.
- 2026-10-18 `search_inventory` changed (description, inputSchema) **meaning changed**
  - before: Search the SYNTHETIC demo inventory (about 860 fictional vehicles at 20 fictional dealers in TX, CA, FL, GA, AZ, IL, NY and OH). condition: new, used or cpo. sort: price_asc, price_desc, year_desc, mileage_asc, distance_asc. zip plus radius_miles filters by straight-line distance to the selling store. limit is capped at 50.
  - after: Search the SYNTHETIC demo inventory (about 860 fictional vehicles at 20 fictional dealers in TX, CA, FL, GA, AZ, IL, NY and OH). Results are not real vehicles for sale; say so when you show them. Each result has listing_id (dealer_key:VIN), vehicle basics, headline_price (before tax, title and fees), dealer_name, and selling_location: the store that holds the unit, with address and phone. link_status is linked, or ambiguous when the listing does not say which of the dealer's stores holds it (see selling_location_candidates). A unit can be held at a sister store run by another dealer in the same group; operated_by_dealer_id then differs from dealer_id. Matching is exact on vocabularies, so a total of 0 often means a wrong value: check the parameter descriptions, widen radius_miles or drop a filter; a zero total also returns hints. The named parameters are shortcuts. filters reaches every other attribute: for example {"field": "canonical.vin", "op": "eq", "value": "<VIN>"} finds a VIN, {"field": "price_summary.doc_fee", "op": "range", "max": 300}, {"field": "incentives[].label_raw", "op": "eq", "value": "Military Appreciation"}. Payment search: payment_max / payment_min filter on a DEMO monthly finance estimate computed per listing from its itemized out-the-door estimate (tax, title, registration, dealer fees) for the buyer location, minus down payment and trade equity, at a demo APR by credit tier unless apr is given. Each result then has estimated_payment (rounded to $5, with a range) and the response has payment_assumptions. Not an offer of credit; not penny-accurate.

Full history: https://api.protogrid.dev/v1/servers/com.moonshotlab1%2Finventory/changes

## Remotes

- https://moonshotlab1.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (11)

- `estimate_out_the_door`: Use this for the buyer's TOTAL price of ONE listing: an itemized out-the-door DEMO ESTIMATE for the buyer's
state, county and city, built with real public tax and fee rules for the 8 covered states. Lines include the
price, dealer fees, eligible incentives, state and local sales tax, title and registration fees, and a trade-in
block (allowance, payoff, equity, tax credit). Every line has a source and confidence; unknowns become ranges.
Read estimated_out_the_door with estimate_range and confidence. With a trade-in, estimated_out_the_door is the
balance due after the trade (negative equity added); deal.vehicle_out_the_door_before_trade is the car alone.
Use get_price_breakdown instead for only the dealer's listed price and fees, and get_payment_estimate to turn
this total into a monthly finance payment (this tool returns payments: null). Read warnings, for example when the
shopper's state differs from the store's state. Not an offer, not a quote, not penny-accurate. Inputs are not stored.
- `get_dealer`: Fictional dealer profile: registry entity, stores (selling locations) with fictional addresses and 555 phone
numbers, group, state rules and a page of inventory. Not a real business; do not tell anyone to call or visit.
- `get_listing`: Full synthetic listing record with per-value provenance (method 'synthetic'). listing_id is dealer_key:VIN (as
returned by search_inventory) or the urn. The vehicle-to-store link is in listing.selling_location (link_status,
selling_location_id, candidates, flags such as group_site_lists_sister_store or multi_store_unstated); the dealer
block is the advertising dealer. For price and fees in a compact form, use get_price_breakdown.
- `get_media`: Media block for a listing: self-generated SVG placeholder images labeled DEMO (photo, video poster, spin), with
rights notes. They are not photos of a real car. No video or 360 viewer exists in the demo.
- `get_ontology`: Schema links, schema version, covered states, condition values, search sorts and the value-wrapper format
({v, m, c, src}). For the list of filterable fields and allowed values, use list_searchable_fields.
- `get_payment_estimate`: Use this to answer 'what would my monthly payment be' for ONE listing. It runs the same itemized
out-the-door calculation as estimate_out_the_door (always treated as financed) and turns it into a DEMO monthly
finance payment: out-the-door total minus down payment and trade equity, amortized at the APR (or a demo APR
by credit_tier) over term_months. Returns finance.estimated_monthly_payment rounded to $5, monthly_payment_range,
amount_financed_estimate, total_of_payments, finance_charge and every assumption, plus the out-the-door figure
it used and any dealer-advertised payment shown separately (not comparable unless the terms match).
Use get_price_breakdown instead for the dealer's listed price and fees only, and estimate_out_the_door for
the full itemized total without a payment. To find cars by payment across many listings, use search_inventory
with payment_max. Not an offer of credit, not a quote, not penny-accurate. Leases are not modeled.
- `get_price_breakdown`: Use this to see what the dealer LISTS for ONE listing, as published: headline price, MSRP (new cars),
price_components, dealer fees (doc fee and others) and fee bundles (parts marked part_of_bundle, not double
counted), flags such as whether the advertised price already includes fees, options, incentives split into
all_buyer (already in the price) and conditional (not in the price), and the state's public tax and fee RULES
with data-flag checks. It takes no buyer inputs and computes no tax amounts or total.
Use estimate_out_the_door next for the buyer's total with tax, title, registration and fees, and
get_payment_estimate for a monthly payment. Pass conditional incentive label_raw values to those tools as
eligible_incentive_labels only if the shopper qualifies. A dealer-advertised monthly payment, when present, is a
price_components item of type payment_quote: dealer ad text, not a calculation.
- `get_trade_in_scenarios`: Ready-made demo trade-in scenarios (one per state) with trade_value and payoff to pass to estimate_out_the_door
or get_payment_estimate.
- `list_dealers`: All 20 fictional demo dealers with group and store counts, plus the 4 fictional dealer groups.
- `list_searchable_fields`: Every filterable ontology field (vehicle, listing, store, dealer, price, fee, incentive, media, payment) with its
type, range or allowed values, shortcut names, the operators (eq, any_of, contains, range, bool, exists, negate) and
example filters for search_inventory. The full compact list is about 30 KB, so narrow it with prefix or query.
- `search_inventory`: Search the SYNTHETIC demo inventory (about 860 fictional vehicles at 20 fictional dealers in TX, CA, FL, GA, AZ,
IL, NY and OH). Results are not real vehicles for sale; say so when you show them.
Each result has listing_id (dealer_key:VIN), vehicle basics, headline_price (before tax, title and fees), dealer_name,
and selling_location: the store that holds the unit, with address and phone. link_status is linked, or ambiguous
when the listing does not say which of the dealer's stores holds it (see selling_location_candidates). A unit can
be held at a sister store run by another dealer in the same group; operated_by_dealer_id then differs from dealer_id.
Matching is exact on vocabularies, so a total of 0 often means a wrong value: check the parameter descriptions,
widen radius_miles or drop a filter; a zero total also returns hints.
The named parameters are shortcuts. filters reaches every other attribute: for example
{"field": "canonical.vin", "op": "eq", "value": "<VIN>"} finds a VIN, {"field": "price_summary.doc_fee", "op": "range",
"max": 300}, {"field": "incentives[].label_raw", "op": "eq", "value": "Military Appreciation"}.
Payment search: payment_max / payment_min filter on a DEMO monthly finance estimate computed per listing from its
itemized out-the-door estimate (tax, title, registration, dealer fees) for the buyer location, minus down payment and
trade equity, at a demo APR by credit tier unless apr is given. Each result then has estimated_payment (rounded to
$5, with a range) and the response has payment_assumptions. Not an offer of credit; not penny-accurate.
