Skip to content

Agentic Dealer Network

by agenticdealernetwork.com · remote · no sign-in to list tools · v0.5.0 · published by com.agenticdealernetwork

Live franchised-dealer inventory, quotes, and consented salesperson handoffs.

Deletes · 2Changes · 6

12 tools: 2 can delete or cancel things, 6 change things and 4 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http adn-gateway https://gateway.agenticdealernetwork.com/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • Warnstores

    The server marks "stores" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "stores" says "store": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

12 tools

Deletes or cancels 2Claude Code: deny
  • deal_quoteOut-the-door quote for one available unit at a named rooftop.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Out-the-door quote for one available unit at a named rooftop. Anonymous calls are stateless; authenticated calls persist a deal thread. Anonymous calls persist nothing; quote_preview is the read-only equivalent for browsing. Fee schedules may be incomplete — an unlisted fee is not a guarantee that no such fee applies; confirm final charges with the dealer. Totals are estimates at best; when pricing_coverage is "partial_estimate", present the total as a subtotal excluding the charges in excluded. Always relay pricing_disclosure.

    Annotations the server declares

    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: false
    • title: Request a quote
  • lead_submitSubmit the shopper's bound contact request to the named dealership.No findings

    Why it is in this group

    • The name "lead_submit" says "submit": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Submit the shopper's bound contact request to the named dealership.

    Annotations the server declares

    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: false
    • title: Ask the dealership to reach out — confirm
Changes things 6Claude Code: ask
  • inventory_changesState synchronization for a mirror built from network_snapshot: pass the sync_cursor and receive upserts (current rows in the same view) and tombstones since that position, with ha…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    State synchronization for a mirror built from network_snapshot: pass the sync_cursor and receive upserts (current rows in the same view) and tombstones since that position, with has_more and next_cursor. Bounded eventual consistency: take a fresh snapshot at least every 24 hours and whenever resync_required is true. Example: {"cursor": "<sync_cursor from network_snapshot>"}. Pass country=CA for Canadian dealers.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true
    • title: Sync catalog changes
  • inventory_comparablesPrice context for one vehicle against like units across the network (same make, model, exact model year, condition; optional trim and geo).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Price context for one vehicle against like units across the network (same make, model, exact model year, condition; optional trim and geo). Example: {"identity": "<VIN>", "rooftop_slug": "mms"} or {"make": "Subaru", "model": "Outback", "model_year": 2024, "condition": "used"}. Returns count, price quartiles, the subject's rank and up to 5 cheapest peers. Advertised prices only; call quote_preview for a total. Pass country=CA for Canadian dealers.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true
    • title: Compare a vehicle's price to like units
  • inventory_statsAggregate available inventory across the network in ONE call: counts, effective-price min/median/max and the top values per facet.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Aggregate available inventory across the network in ONE call: counts, effective-price min/median/max and the top values per facet. Example: {"dimensions": ["make_model", "body_style"], "condition": "used", "rooftop_slugs": ["mms"]}. Geo (latitude and longitude, optional radius_miles) and oem_program_slug scope exactly as network_search. Pivot mode (group_by, up to 2 of the facets plus state, dealer_group, price_band, age_band) returns one row per group with count and medians; dimensions and group_by are mutually exclusive; format csv returns the rows as CSV. Pass country=CA for Canadian dealers.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true
    • title: Count and summarize network inventory
  • lead_preparePrepare a named dealership's exact contact disclosure and a short-lived signed binding.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Prepare a named dealership's exact contact disclosure and a short-lived signed binding.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true
    • title: Ask the dealership to reach out — prepare
  • network_directoryDirectory of active ADN rooftops: slug, name, dealer group, OEM programs, location metadata, and per-rooftop manifest URL.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Directory of active ADN rooftops: slug, name, dealer group, OEM programs, location metadata, and per-rooftop manifest URL. Pass country=CA for Canadian dealers.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true
    • title: List dealerships
  • storesOne named rooftop's store record: name, dealer group, OEM programs, location/contact metadata, and fee schedule.1 finding

    Why it is in this group

    • The name "stores" says "store": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "stores" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "stores" says "store": a word for a change.

      What this check looks for
    Description, as the server wrote it
    One named rooftop's store record: name, dealer group, OEM programs, location/contact metadata, and fee schedule. Pass rooftop_slug. Whether a specific unit's listed price already includes a fee varies per unit — quote_preview returns the estimated total. Fee schedules may be incomplete — an unlisted fee is not a guarantee that no such fee applies; confirm final charges with the dealer.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true
    • title: Get dealership details
Only reads 4Claude Code: allow
  • inventory_getFetch one available unit by identity (VIN) from a named rooftop (rooftop_slug from network_search results).No findings

    Why it is in this group

    • The name "inventory_get" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one available unit by identity (VIN) from a named rooftop (rooftop_slug from network_search results). Returns the full detail shape — ordered photo gallery, options, plain-text description; embed the first few photo_urls as markdown images when presenting the vehicle. Unknown or ineligible identity/rooftop returns unit_not_found. Listed prices may exclude doc/government fees and tax — call quote_preview for the estimated total. Totals are estimates at best; when pricing_coverage is "partial_estimate", present the total as a subtotal excluding the charges in excluded. Always relay pricing_disclosure.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true
    • title: Get vehicle details
  • network_snapshotExport the whole network catalog (or one rooftop with rooftop_slug) as one gzip artifact instead of paging: returns a descriptor with a generation URL, strong ETag, row and byte co…No findings

    Why it is in this group

    • The name "network_snapshot" says "snapshot": a word for reading.
    Description, as the server wrote it
    Export the whole network catalog (or one rooftop with rooftop_slug) as one gzip artifact instead of paging: returns a descriptor with a generation URL, strong ETag, row and byte counts, expiry and (when available) sync_cursor; small results are inlined as rows_inline. Views: manifest (identity, pricing, key attributes; default), summary (the network_search row), full (the inventory_get row). Formats: csv (default), json. Example: {"view": "manifest", "format": "csv"}. Re-download only when the ETag changes; poll inventory_changes with sync_cursor to stay current. Pass country=CA for Canadian dealers.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true
    • title: Export the catalog
  • quote_previewRead-only out-the-door price preview for one available unit at a named rooftop (pass rooftop_slug): base price plus itemized fees and taxes — fees already included in the listed pr…No findings

    Why it is in this group

    • The name "quote_preview" says "preview": a word for reading.
    Description, as the server wrote it
    Read-only out-the-door price preview for one available unit at a named rooftop (pass rooftop_slug): base price plus itemized fees and taxes — fees already included in the listed price are flagged included_in_price and add nothing on top. Persists nothing; free to call while browsing. Fee schedules may be incomplete — an unlisted fee is not a guarantee that no such fee applies; confirm final charges with the dealer. Totals are estimates at best; when pricing_coverage is "partial_estimate", present the total as a subtotal excluding the charges in excluded. Always relay pricing_disclosure.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true
    • title: Preview an out-the-door price

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.5.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http adn-gateway https://gateway.agenticdealernetwork.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__adn-gateway__network_search",
      "mcp__adn-gateway__inventory_get",
      "mcp__adn-gateway__network_snapshot",
      "mcp__adn-gateway__quote_preview"
    ],
    "ask": [
      "mcp__adn-gateway__network_directory",
      "mcp__adn-gateway__inventory_stats",
      "mcp__adn-gateway__inventory_changes",
      "mcp__adn-gateway__inventory_comparables",
      "mcp__adn-gateway__stores",
      "mcp__adn-gateway__lead_prepare"
    ],
    "deny": [
      "mcp__adn-gateway__deal_quote",
      "mcp__adn-gateway__lead_submit"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as adn-gateway. Review it before you use it.