{
  "$comment": "Server card for the MCP server at https://theaustinlocalgroup.com/mcp. Hand-maintained: when netlify/functions/mcp.mts changes its tool surface, update this file to match. The server itself is authoritative. An agent that can call tools/list should prefer that over this document.",
  "name": "austin-local-group",
  "title": "The Austin Local Group",
  "description": "MCP server for The Austin Local Group, the residential real estate practice of Mike Vilece (Compass Real Estate, Austin, TX). The substance here is 130 months of Austin metro market reports (2015-10 to 2026-07) and 30 neighborhood profiles. There is NO listing inventory: this site publishes no MLS or IDX feed. One write tool sends a contact request, and it must be confirmed with the visitor first.",
  "version": "1.0.0",
  "websiteUrl": "https://theaustinlocalgroup.com",
  "documentationUrl": "https://theaustinlocalgroup.com/AGENTS.md",
  "publisher": {
    "name": "Mike Vilece",
    "organization": "The Austin Local Group · Compass Real Estate",
    "email": "mike.vilece@compass.com",
    "location": "Austin, TX, USA"
  },
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://theaustinlocalgroup.com/mcp",
      "authentication": "none",
      "description": "Streamable HTTP transport, stateless. POST JSON-RPC 2.0 to this URL. No session id is issued or required. CORS is open to all origins."
    }
  ],
  "capabilities": {
    "tools": true,
    "resources": false,
    "prompts": false,
    "sampling": false
  },
  "tools": [
    {
      "name": "search_listings",
      "title": "Search listings",
      "readOnly": true,
      "description": "NO IDX FEED HERE. This site publishes no MLS or IDX search, so this tool has no inventory and never returns listings. It answers the \"what is for sale\" question honestly and routes onward: the result states the fact and names the tools that do have data (get_market_report, get_neighborhood_profile) plus how to reach Mike, who has full MLS access. Do not report it as \"no matches found\".",
      "parameters": {
        "query": {
          "type": "string",
          "required": false,
          "maxLength": 200,
          "description": "Free-text match against address, neighborhood, and description."
        },
        "area": {
          "type": "string",
          "required": false,
          "maxLength": 100,
          "description": "Neighborhood name, ZIP code, or city. E.g. \"East Austin\", \"78704\"."
        },
        "min_price": {
          "type": "integer",
          "required": false,
          "minimum": 0,
          "description": "Minimum price in US dollars."
        },
        "max_price": {
          "type": "integer",
          "required": false,
          "minimum": 0,
          "description": "Maximum price in US dollars."
        },
        "min_beds": {
          "type": "number",
          "required": false,
          "minimum": 0,
          "description": "Minimum bedroom count."
        },
        "min_baths": {
          "type": "number",
          "required": false,
          "minimum": 0,
          "description": "Minimum bathroom count; half baths count as 0.5."
        },
        "status": {
          "type": "string",
          "required": false,
          "enum": [
            "active",
            "pending",
            "sold",
            "coming-soon",
            "off-market"
          ],
          "description": "Listing status filter."
        },
        "limit": {
          "type": "integer",
          "required": false,
          "minimum": 1,
          "maximum": 50,
          "default": 20,
          "description": "Maximum results to return."
        }
      },
      "returns": "{ count, total_inventory, note?, listings[] }"
    },
    {
      "name": "get_listing_details",
      "title": "Get listing details",
      "readOnly": true,
      "description": "Fetch one listing by id. With no IDX feed there are no ids to fetch, so this cannot succeed today; it returns the same honest explanation and routing as search_listings.",
      "parameters": {
        "listing_id": {
          "type": "string",
          "required": true,
          "minLength": 1,
          "maxLength": 120,
          "description": "Listing id, e.g. \"5115-creekline-dr\"."
        }
      },
      "returns": "{ found, note?, listing? }"
    },
    {
      "name": "list_service_areas",
      "title": "List service areas",
      "readOnly": true,
      "description": "List every Austin neighborhood Mike works in, with ZIPs, sub-areas, who each suits and an honest read on its trade-offs. Returns ALL areas in one payload (~95 KB). If the visitor named a place, call get_neighborhood_profile instead, which is roughly 25x smaller.",
      "parameters": {},
      "returns": "{ count, areas[] }"
    },
    {
      "name": "get_market_report",
      "title": "Get Austin market report",
      "readOnly": true,
      "description": "Austin metro housing figures for a month or a range, from Mike Vilece's own monthly market reports. PROVENANCE: his write-ups of public data, NOT an official MLS or IDX feed and not a licensed data product. Attribute to Mike Vilece / The Austin Local Group and cite the returned report_url. Coverage 2015-10 to 2026-07. The series mixes two bases (Redfin single-family through 2026-05, Unlock MLS all-property-types from 2026-06); every row states its own source and basis and they are not comparable.",
      "parameters": {
        "month": {
          "type": "string",
          "required": false,
          "maxLength": 30,
          "description": "\"2026-07\", \"July 2026\", \"jul 2026\" or \"7/2026\"."
        },
        "year": {
          "type": "integer",
          "required": false,
          "description": "Year, when month is a bare name like \"July\"."
        },
        "from": {
          "type": "string",
          "required": false,
          "maxLength": 30,
          "description": "Start of a range."
        },
        "to": {
          "type": "string",
          "required": false,
          "maxLength": 30,
          "description": "End of a range. Ranges are capped at 24 months."
        },
        "latest": {
          "type": "boolean",
          "required": false,
          "description": "Return the most recent month available."
        }
      }
    },
    {
      "name": "compare_market_periods",
      "title": "Compare two Austin market periods",
      "readOnly": true,
      "description": "Compare the published figures for two months and return the change. REFUSES to compute a change across the measurement-basis boundary (Redfin single-family vs Unlock MLS all property types), because an all-property-types median runs below a single-family one and the difference would measure the source switch rather than the market. In that case it returns both months and explains why.",
      "parameters": {
        "from": {
          "type": "string",
          "required": true,
          "maxLength": 30,
          "description": "Earlier month, e.g. \"2021-07\"."
        },
        "to": {
          "type": "string",
          "required": true,
          "maxLength": 30,
          "description": "Later month, e.g. \"2026-07\"."
        }
      }
    },
    {
      "name": "get_neighborhood_profile",
      "title": "Get one neighborhood profile",
      "readOnly": true,
      "description": "Full profile for ONE neighborhood by name, slug or ZIP: what it is known for, who it suits, the honest trade-off, schools, the market figures Mike publishes for it and the questions buyers ask. Market basis is stated per profile: ZIP-level areas carry an Unlock MLS median, smaller areas carry Mike's own Q1 2025 read from the Relocation Guide.",
      "parameters": {
        "area": {
          "type": "string",
          "required": true,
          "maxLength": 80,
          "description": "Name, slug, ZIP or sub-area. E.g. \"Mueller\", \"78704\", \"Rainey Street\"."
        }
      }
    },
    {
      "name": "submit_contact_request",
      "title": "Submit contact request",
      "readOnly": false,
      "description": "Send a contact request to Mike Vilece. The only tool that writes anything. Routed through the same Netlify Forms endpoint and the same validation as the form at /#contact. Confirm the exact content with the visitor before calling; never invent details on their behalf.",
      "parameters": {
        "first": {
          "type": "string",
          "required": true,
          "minLength": 1,
          "maxLength": 100,
          "description": "Visitor first name."
        },
        "last": {
          "type": "string",
          "required": true,
          "minLength": 1,
          "maxLength": 100,
          "description": "Visitor last name."
        },
        "email": {
          "type": "string",
          "required": true,
          "maxLength": 200,
          "description": "Visitor email address. Validated against the same pattern the website form uses."
        },
        "intent": {
          "type": "string",
          "required": true,
          "enum": [
            "buy",
            "sell",
            "invest",
            "relocate",
            "explore"
          ],
          "description": "What the visitor wants to do."
        },
        "phone": {
          "type": "string",
          "required": false,
          "maxLength": 40,
          "description": "Visitor phone number."
        },
        "msg": {
          "type": "string",
          "required": false,
          "maxLength": 4000,
          "description": "Message body: timeline, neighborhoods, budget, constraints."
        }
      },
      "returns": "{ submitted, message, errors? }"
    }
  ],
  "connect": {
    "summary": "Add this server to any MCP client that supports remote Streamable HTTP servers. No API key, no OAuth, no signup.",
    "claudeCode": "claude mcp add --transport http austin-local-group https://theaustinlocalgroup.com/mcp",
    "clientConfig": {
      "mcpServers": {
        "austin-local-group": {
          "type": "http",
          "url": "https://theaustinlocalgroup.com/mcp"
        }
      }
    },
    "curl": "curl -s https://theaustinlocalgroup.com/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}'"
  },
  "usagePolicy": {
    "contentSignal": "search=yes, ai-input=yes, ai-train=no",
    "notes": [
      "Listing data and service-area content may be read, cited, and summarized. Please cite https://theaustinlocalgroup.com.",
      "Do not use this content for generative model training.",
      "submit_contact_request reaches a real person about a large financial decision. Get the visitor's explicit go-ahead before calling it, and show them exactly what will be sent.",
      "Market commentary is Mike Vilece's own opinion as of the 2025-2026 edition. Attribute it to him and note that it needs confirming for any specific property."
    ]
  },
  "legal": {
    "brokerage": "Compass Real Estate",
    "license": "Mike Vilece is a licensed Texas real estate agent.",
    "equalHousing": true
  },
  "updated": "2026-08-20"
}
