{
    "name": "lodgorithm_tool_registry",
    "version": "1.0",
    "tools": [
        {
            "name": "municipality.search",
            "version": "1.0",
            "description": "Search public market records by location, price, regulation friendliness, demand profile, and saturation.",
            "route": "GET /markets",
            "risk_level": "read_public",
            "required_role": "guest",
            "credit_cost": 0,
            "writes_data": false,
            "publishes_content": false,
            "requires_confirmation": false,
            "input_schema": {
                "q": "string?",
                "state": "string?",
                "price_max": "number?",
                "regulation_min": "integer?"
            },
            "output_schema": {
                "markets": "array<municipality_summary>"
            }
        },
        {
            "name": "municipality.get",
            "version": "1.0",
            "description": "Read one published municipality analysis and its citations.",
            "route": "GET /markets/{slug}",
            "risk_level": "read_public",
            "required_role": "guest",
            "credit_cost": 0,
            "writes_data": false,
            "publishes_content": false,
            "requires_confirmation": false,
            "input_schema": {
                "slug": "string"
            },
            "output_schema": {
                "municipality": "municipality_detail",
                "citations": "array<citation>"
            }
        },
        {
            "name": "municipality.diligence_watchlist",
            "version": "1.0",
            "description": "Return address-level diligence prompts for permits, minimum stays, platform rules, tax, parking, local contacts, HOA, and saturation risk.",
            "route": "GET /markets/{slug}",
            "risk_level": "read_public",
            "required_role": "guest",
            "credit_cost": 0,
            "writes_data": false,
            "publishes_content": false,
            "requires_confirmation": false,
            "input_schema": {
                "slug": "string"
            },
            "output_schema": {
                "watchlist": "array<string>",
                "market_scores": "object"
            }
        },
        {
            "name": "seo.sitemap.get",
            "version": "1.0",
            "description": "Return the public XML sitemap for indexable market and product pages.",
            "route": "GET /sitemap.xml",
            "risk_level": "read_public",
            "required_role": "guest",
            "credit_cost": 0,
            "writes_data": false,
            "publishes_content": false,
            "requires_confirmation": false,
            "input_schema": [],
            "output_schema": {
                "xml": "sitemap"
            }
        },
        {
            "name": "listing.create",
            "version": "1.0",
            "description": "Create a private user-owned listing record from pasted listing details.",
            "route": "POST /listing/analyze",
            "risk_level": "write_user",
            "required_role": "user",
            "credit_cost": 0,
            "writes_data": true,
            "publishes_content": false,
            "requires_confirmation": false,
            "input_schema": {
                "listing_input": "string"
            },
            "output_schema": {
                "listing_id": "integer"
            }
        },
        {
            "name": "listing.analyze",
            "version": "1.0",
            "description": "Generate a balanced STR analysis with strongest point, counterpoint, recommendation, scores, and diligence questions.",
            "route": "POST /listing/analyze",
            "risk_level": "expensive",
            "required_role": "user",
            "credit_cost": 1,
            "writes_data": true,
            "publishes_content": false,
            "requires_confirmation": false,
            "input_schema": {
                "listing_id": "integer",
                "analysis_style": "balanced|blunt|new_investor"
            },
            "output_schema": {
                "recommendation_label": "string",
                "scores": "object",
                "questions": "array<string>"
            }
        },
        {
            "name": "listing.chat.respond",
            "version": "1.0",
            "description": "Respond to a follow-up note about a user-owned listing while preserving the original analysis context.",
            "route": "POST /listings/{slug}/chat",
            "risk_level": "expensive",
            "required_role": "user",
            "credit_cost": 1,
            "writes_data": true,
            "publishes_content": false,
            "requires_confirmation": false,
            "input_schema": {
                "listing_id": "integer",
                "message": "string"
            },
            "output_schema": {
                "assistant_message": "string"
            }
        },
        {
            "name": "listing.public_visibility.set",
            "version": "1.0",
            "description": "Opt a listing analysis into pending-public review for free-tier SEO content.",
            "route": "POST /listings/{slug}/visibility",
            "risk_level": "write_public",
            "required_role": "user",
            "credit_cost": 0,
            "writes_data": true,
            "publishes_content": false,
            "requires_confirmation": true,
            "input_schema": {
                "listing_id": "integer",
                "visibility": "private|pending_public"
            },
            "output_schema": {
                "public_status": "string"
            }
        },
        {
            "name": "upfit.project.create",
            "version": "1.0",
            "description": "Create a user-owned upfit project and initialize its room-by-room checklist.",
            "route": "POST /upfit",
            "risk_level": "write_user",
            "required_role": "user",
            "credit_cost": 0,
            "writes_data": true,
            "publishes_content": false,
            "requires_confirmation": false,
            "input_schema": {
                "title": "string",
                "target_guest": "string",
                "budget_tier": "budget|mid|premium"
            },
            "output_schema": {
                "project_id": "integer"
            }
        },
        {
            "name": "upfit.item.update_status",
            "version": "1.0",
            "description": "Update checklist item statuses: need, already have, skip, or later.",
            "route": "POST /upfit/{id}/items",
            "risk_level": "write_user",
            "required_role": "user",
            "credit_cost": 0,
            "writes_data": true,
            "publishes_content": false,
            "requires_confirmation": false,
            "input_schema": {
                "project_id": "integer",
                "items": "map<catalog_item_id,status>"
            },
            "output_schema": {
                "updated": "integer"
            }
        },
        {
            "name": "upfit.catalog.search",
            "version": "1.0",
            "description": "Search upfit checklist items and recommendation options.",
            "route": "GET /upfit/{id}",
            "risk_level": "read_private",
            "required_role": "user",
            "credit_cost": 0,
            "writes_data": false,
            "publishes_content": false,
            "requires_confirmation": false,
            "input_schema": {
                "project_id": "integer",
                "room": "string?"
            },
            "output_schema": {
                "items": "array<upfit_item>",
                "recommendations": "array<product_recommendation>"
            }
        },
        {
            "name": "municipality.admin.save",
            "version": "1.0",
            "description": "Create or update a market analysis draft or published page after admin review.",
            "route": "POST /admin/markets",
            "risk_level": "admin",
            "required_role": "admin",
            "credit_cost": 0,
            "writes_data": true,
            "publishes_content": true,
            "requires_confirmation": true,
            "input_schema": {
                "name": "string",
                "state": "string",
                "status": "draft|published"
            },
            "output_schema": {
                "municipality_id": "integer"
            }
        },
        {
            "name": "research.municipality.run",
            "version": "1.0",
            "description": "Run multi-phase LLM web research for a market nickname and create a draft municipality page with citations.",
            "route": "POST /admin/markets/research",
            "risk_level": "expensive",
            "required_role": "admin",
            "credit_cost": 4,
            "writes_data": true,
            "publishes_content": false,
            "requires_confirmation": false,
            "input_schema": {
                "market_query": "string"
            },
            "output_schema": {
                "market_id": "integer",
                "phases": "array<phase>",
                "citations": "array<citation>"
            }
        },
        {
            "name": "research.municipality.suggest",
            "version": "1.0",
            "description": "Use the LLM (with web grounding) to propose fresh markets worth researching based on the markets already covered.",
            "route": "POST /admin/research/suggest",
            "risk_level": "expensive",
            "required_role": "admin",
            "credit_cost": 2,
            "writes_data": false,
            "publishes_content": false,
            "requires_confirmation": false,
            "input_schema": {
                "focus": "string?"
            },
            "output_schema": {
                "suggestions": "array<suggestion>",
                "citations": "array<citation>"
            }
        }
    ]
}