Skip to content

Conversation

mattpodwysocki
Copy link
Contributor

Description

This PR implements structured content support across all MCP tools, enabling AI agents to receive both human-readable text responses and machine-readable structured data from tool executions. This enhancement significantly improves the usability of tool outputs for programmatic processing while maintaining backward compatibility.

Key Features Added

🏗️ Core Infrastructure

  • Enhanced Output Schema: Added optional structuredContent field to OutputSchema supporting arbitrary JSON objects
  • Proper TypeScript Types: Replaced any types with well-defined GeoJSON interfaces from RFC 7946 standards
  • Comprehensive GeoJSON Support: Added complete GeoJSON type definitions in src/schemas/geojson.ts including Mapbox-specific properties
  • Improved Authentication: Enhanced BaseTool with proper RequestHandlerExtra typing for auth token handling

🛠️ Tool Enhancements

All tools now return structured content alongside human-readable text:

  • Geocoding Tools (SearchAndGeocodeTool, ReverseGeocodeTool, CategorySearchTool):

    • Return full GeoJSON FeatureCollection as structured content
    • Maintain formatted text for human readability
    • Proper Point geometry type checking for coordinate access
  • Routing Tools (DirectionsTool, MatrixTool, IsochroneTool):

    • Return complete API responses as structured content
    • Enhanced error handling with structured error responses
    • Validation errors now return structured responses instead of throwing exceptions
  • Utility Tools:

    • VersionTool: Returns both formatted text and raw version object
    • StaticMapImageTool: Includes image metadata as structured content
    • CategoryListTool: Returns category data as structured arrays

🧪 Testing & Quality

  • 259 tests passing with full backward compatibility
  • New structured content test suite validating dual output format
  • Updated validation tests for consistent error response handling
  • Type safety improvements eliminating unsafe any usage

Technical Improvements

Type Safety Enhancements

  • Replaced custom interfaces with standardized GeoJSON types
  • Eliminated any types in favor of proper TypeScript interfaces
  • Added ESLint suppressions only where legitimately needed for generic constraints

Error Handling Consistency

  • All validation errors now return structured responses with isError: true
  • Consistent error message formatting across all tools
  • Maintained backward compatibility for existing error handling

API Response Processing

  • Preserved standard Mapbox API response structure
  • Type-safe property access with proper null checking
  • Consistent pattern across all geocoding tools

Breaking Changes

None - This is a fully backward-compatible enhancement. Existing integrations will continue to work unchanged while gaining access to new structured content capabilities.

Benefits for AI Agents

  1. Dual Format Output: Both human-readable text and machine-readable structured data
  2. Type Safety: Strongly typed responses enable better code generation and validation
  3. Consistent Interface: Uniform response structure across all tools
  4. Enhanced Debugging: Structured error responses with detailed context
  5. Future Extensibility: Foundation for advanced tool output processing

Files Changed

  • 22 files modified with comprehensive updates
  • 2,011 lines added, 341 lines removed
  • 163 new lines of GeoJSON type definitions
  • 143 new lines of structured content tests

This enhancement positions the MCP server as a more powerful and developer-friendly tool ecosystem while maintaining the simplicity and reliability that existing users depend on.

  • Closes #[issue-number] (if applicable)

Testing

Ran standard tests such as Reverse GeoCode Tool:
Screenshot 2025-10-07 at 14 10 25

And received structured content
Screenshot 2025-10-07 at 14 10 36

And received unstructured content
Screenshot 2025-10-08 at 10 08 11


Checklist

  • Code has been tested locally
  • Unit tests have been added or updated
  • Documentation has been updated if needed

Additional Notes

@mattpodwysocki mattpodwysocki requested a review from a team as a code owner October 8, 2025 14:08
Copy link
Member

@zmofei zmofei left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update the package version.
Are we consider this is a breaking changes? consider update Major or Minor version

Comment on lines +116 to +117
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
structuredContent: result,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Question] We return both content and structuredContent at the same time, is there are way to only return structuredContent without content
I know the official doc has this

For backwards compatibility, a tool that returns structured content SHOULD also return the serialized JSON in a TextContent block.

But is there a way to detected the cline support structuredContent? and in this case we don't return content?

For example this output is too large

{
  "content": [
    {
      "type": "text",
      "text": "{\n  \"listItems\": [\n    \"services\",\n    \"shopping\",\n    \"food_and_drink\",\n    \"food\",\n    \"health_services\",\n    \"office\",\n    \"restaurant\",\n    \"education\",\n    \"transportation\",\n    \"apartment_or_condo\",\n    \"grocery\",\n    \"place_of_worship\",\n    \"outdoors\",\n    \"clothing_store\",\n    \"lodging\",\n    \"school\",\n    \"financial_services\",\n    \"beauty_store\",\n    \"wholesale_store\",\n    \"supermarket\",\n    \"auto_repair\",\n    \"salon\",\n    \"cafe\",\n    \"bus_stop\",\n    \"government\",\n    \"real_estate_agent\",\n    \"fast_food\",\n    \"medical_practice\",\n    \"park\",\n    \"tourist_attraction\",\n    \"nightlife\",\n    \"sports\",\n    \"hairdresser\",\n    \"temple\",\n    \"doctors_office\",\n    \"bank\",\n    \"bar\",\n    \"church\",\n    \"pharmacy\",\n    \"entertainment\",\n    \"hotel\",\n    \"farm\",\n    \"consulting\",\n    \"lawyer\",\n    \"medical_clinic\",\n    \"bakery\",\n    \"coffee\",\n    \"coffee_shop\",\n    \"dentist\",\n    \"repair_shop\",\n    \"fitness_center\",\n    \"home\",\n    \"factory\",\n    \"furniture_store\",\n    \"photographer\",\n    \"shipping_store\",\n    \"electronics_shop\",\n    \"car_dealership\",\n    \"clothing\",\n    \"hospital\",\n    \"travel_agency\",\n    \"shopping_mall\",\n    \"atm\",\n    \"commercial\",\n    \"advertising_agency\",\n    \"gas_station\",\n    \"insurance_broker\",\n    \"post_office\",\n    \"hospital_unit\",\n    \"alternative_healthcare\",\n    \"it\",\n    \"historic_site\",\n    \"hardware_store\",\n    \"phone_store\",\n    \"parking_lot\",\n    \"dessert_shop\",\n    \"jewelry_store\",\n    \"elementary_school\",\n    \"mosque\",\n    \"monument\",\n    \"river\",\n    \"psychotherapist\",\n    \"convenience_store\",\n    \"market\",\n    \"physiotherapist\",\n    \"lake\",\n    \"car_wash\",\n    \"playground\",\n    \"pet_store\",\n    \"warehouse\",\n    \"shoe_store\",\n    \"tailor\",\n    \"kindergarten\",\n    \"nongovernmental_organization\",\n    \"laundry\",\n    \"field\",\n    \"sports_club\",\n    \"gift_shop\",\n    \"cemetery\",\n    \"butcher_shop\",\n    \"psychological_services\",\n    \"florist\",\n    \"landscaping\",\n    \"garden\",\n    \"care_services\",\n    \"charging_station\",\n    \"bed_and_breakfast\",\n    \"womens_clothing_store\",\n    \"chiropractor\",\n    \"ice_cream\",\n    \"photo_store\",\n    \"pizza_restaurant\",\n    \"spa\",\n    \"car_rental\",\n    \"paper_goods_store\",\n    \"college\",\n    \"copyshop\",\n    \"design_studio\",\n    \"internet_cafe\",\n    \"event_planner\",\n    \"nail_salon\",\n    \"public_transportation_station\",\n    \"social_club\",\n    \"mountain\",\n    \"liquor_store\",\n    \"event_space\",\n    \"art\",\n    \"massage_shop\",\n    \"book_store\",\n    \"community_center\",\n    \"employment_agency\",\n    \"medical_supply_store\",\n    \"taxi\",\n    \"veterinarian\",\n    \"tobacco_shop\",\n    \"childcare\",\n    \"teahouse\",\n    \"university\",\n    \"studio\",\n    \"tax_advisor\",\n    \"mexican_restaurant\",\n    \"museum\",\n    \"medical_laboratory\",\n    \"optician\",\n    \"equipment_rental\",\n    \"assisted_living_facility\",\n    \"driving_school\",\n    \"snack_bar\",\n    \"arts_and_craft_store\",\n    \"indian_restaurant\",\n    \"bicycle_shop\",\n    \"high_school\",\n    \"deli\",\n    \"forest\",\n    \"asian_restaurant\",\n    \"sports_shop\",\n    \"hostel\",\n    \"tattoo_parlour\",\n    \"health_food_store\",\n    \"food_court\",\n    \"counselling\",\n    \"library\",\n    \"fashion_accessory_shop\",\n    \"dance_studio\",\n    \"department_store\",\n    \"boutique\",\n    \"island\",\n    \"burger_restaurant\",\n    \"storage\",\n    \"nightclub\",\n    \"tutor\",\n    \"motorcycle_dealer\",\n    \"diner_restaurant\",\n    \"dry_cleaners\",\n    \"bridge\",\n    \"police_station\",\n    \"news_kiosk\",\n    \"fabric_store\",\n    \"soccer_field\",\n    \"art_gallery\",\n    \"fire_station\",\n    \"video_game_store\",\n    \"theme_park\",\n    \"music_school\",\n    \"yoga_studio\",\n    \"funeral_home\",\n    \"japanese_restaurant\",\n    \"toy_store\",\n    \"indonesian_restaurant\",\n    \"chinese_restaurant\",\n    \"language_school\",\n    \"breakfast_restaurant\",\n    \"seafood_restaurant\",\n    \"furniture_maker\",\n    \"brunch_restaurant\",\n    \"notary\",\n    \"juice_bar\",\n    \"baby_goods_shop\",\n    \"buddhist_temple\",\n    \"fishing_store\",\n    \"government_offices\",\n    \"bus_station\",\n    \"theatre\",\n    \"noodle_restaurant\",\n    \"townhall\",\n    \"university_building\",\n    \"swimming_pool\",\n    \"pub\",\n    \"recording_studio\",\n    \"barbeque_restaurant\",\n    \"charity\",\n    \"conference_center\",\n    \"dormitory\",\n    \"taco_shop\",\n    \"laboratory\",\n    \"italian_restaurant\",\n    \"music_shop\",\n    \"winery\",\n    \"waste_transfer_station\",\n    \"recycling_center\",\n    \"public_artwork\",\n    \"outdoor_sculpture\",\n    \"music_venue\",\n    \"sandwich_shop\",\n    \"stadium\",\n    \"tourist_information\",\n    \"rehabilitation_center\",\n    \"garden_store\",\n    \"mattress_store\",\n    \"american_restaurant\",\n    \"cinema\",\n    \"antique_shop\",\n    \"labor_union\",\n    \"locksmith\",\n    \"nature_reserve\",\n    \"lighting_store\",\n    \"tennis_courts\",\n    \"arts_center\",\n    \"canal\",\n    \"party_store\",\n    \"thrift_shop\",\n    \"radio_studio\",\n    \"psychic\",\n    \"motel\",\n    \"pawnshop\",\n    \"railway_station\",\n    \"vape_shop\",\n    \"watch_store\",\n    \"rest_area\",\n    \"golf_course\",\n    \"bridal_shop\",\n    \"video_store\",\n    \"vacation_rental\",\n    \"thai_restaurant\",\n    \"boat_rental\",\n    \"sushi_restaurant\",\n    \"pilates_studio\",\n    \"campground\",\n    \"recreation_center\",\n    \"brewery\",\n    \"cobbler\",\n    \"kitchen_store\",\n    \"home_repair\",\n    \"basketball_court\",\n    \"buffet_restaurant\",\n    \"martial_arts_studio\",\n    \"shoe_repair\",\n    \"cocktail_bar\",\n    \"leather_goods\",\n    \"coworking_space\",\n    \"airport\",\n    \"bubble_tea\",\n    \"outlet_store\",\n    \"sewing_shop\",\n    \"courthouse\",\n    \"fair_grounds\",\n    \"cannabis_dispensary\",\n    \"beach\",\n    \"tanning_salon\",\n    \"trade_school\",\n    \"concert_hall\",\n    \"gymnastics\",\n    \"discount_store\",\n    \"stable\",\n    \"hobby_shop\",\n    \"currency_exchange\",\n    \"donut_shop\",\n    \"frame_store\",\n    \"herbalist\",\n    \"carpet_store\",\n    \"casino\",\n    \"karaoke_bar\",\n    \"camera_shop\",\n    \"tapas_restaurant\",\n    \"spanish_restaurant\",\n    \"gun_store\",\n    \"marina\",\n    \"steakhouse\",\n    \"wine_bar\",\n    \"waste_disposal\",\n    \"viewpoint\",\n    \"television_studio\",\n    \"tours\",\n    \"animal_shelter\",\n    \"turkish_restaurant\",\n    \"pier\",\n    \"korean_restaurant\",\n    \"billiards\",\n    \"beer_bar\",\n    \"skatepark\",\n    \"baseball_field\",\n    \"vietnamese_restaurant\",\n    \"cheese_shop\",\n    \"french_restaurant\",\n    \"dog_park\",\n    \"photo_lab\",\n    \"picnic_shelter\",\n    \"bookmaker\",\n    \"fireworks_store\",\n    \"military_office\",\n    \"greek_restaurant\",\n    \"fish_and_chips_restaurant\",\n    \"sports_bar\",\n    \"sports_center\",\n    \"sauna\",\n    \"hookah_lounge\",\n    \"vineyard\",\n    \"gastropub\",\n    \"middle_eastern_restaurant\",\n    \"mediterranean_restaurant\",\n    \"african_restaurant\",\n    \"community_college\",\n    \"prison\",\n    \"racetrack\",\n    \"hot_dog_stand\",\n    \"zoo\",\n    \"salad_bar\",\n    \"dam\",\n    \"coffee_roaster\",\n    \"boxing_gym\",\n    \"brazilian_restaurant\",\n    \"climbing\",\n    \"climbing_gym\",\n    \"synagogue\",\n    \"hunting_store\",\n    \"emergency_room\",\n    \"luggage_store\",\n    \"dialysis_center\",\n    \"bowling_alley\",\n    \"waterfall\",\n    \"fishing\",\n    \"aquarium\",\n    \"light_rail_station\",\n    \"bagel_shop\",\n    \"fishmonger\",\n    \"filipino_restaurant\",\n    \"cricket_club\",\n    \"german_restaurant\",\n    \"military_base\",\n    \"motorsports_store\",\n    \"carribean_restaurant\",\n    \"ice_rink\",\n    \"summer_camp\",\n    \"frozen_yogurt_shop\",\n    \"distillery\",\n    \"surfboard_store\",\n    \"exhibit\",\n    \"ski_area\",\n    \"embassy\",\n    \"biergarten\",\n    \"treecare\",\n    \"ramen_restaurant\",\n    \"resort\",\n    \"optometrist\",\n    \"plaza\",\n    \"hunting_area\",\n    \"disc_golf_course\",\n    \"miniature_golf\",\n    \"gay_bar\",\n    \"check_cashing\",\n    \"lounge\",\n    \"water_park\",\n    \"observatory\",\n    \"cable_car\",\n    \"cave\",\n    \"hawaiian_restaurant\",\n    \"town\",\n    \"korean_barbeque_restaurant\",\n    \"portuguese_restaurant\",\n    \"latin_american_restaurant\",\n    \"duty_free_shop\",\n    \"fountain\",\n    \"skydiving_drop_zone\",\n    \"english_restaurant\",\n    \"cuban_restaurant\",\n    \"train\",\n    \"persian_restaurant\",\n    \"rugby_stadium\",\n    \"gluten_free_restaurant\",\n    \"creole_restaurant\",\n    \"trailhead\",\n    \"carpet_cleaner\",\n    \"airport_terminal\",\n    \"tiki_bar\",\n    \"street\",\n    \"intersection\",\n    \"information_technology_company\",\n    \"windmill\",\n    \"bike_rental\",\n    \"food_truck\",\n    \"boat_or_ferry\",\n    \"veterans_service\",\n    \"wings_joint\",\n    \"arcade\",\n    \"outdoors_store\",\n    \"peruvian_restaurant\",\n    \"surf_spot\",\n    \"irish_pub\",\n    \"track\",\n    \"chocolate_shop\",\n    \"soccer_stadium\",\n    \"cruise\",\n    \"theme_park_attraction\",\n    \"mountain_hut\",\n    \"service_area\",\n    \"ski_shop\",\n    \"baseball_stadium\",\n    \"lighthouse\",\n    \"airport_gate\",\n    \"football_stadium\",\n    \"political_party_office\",\n    \"tech_startup\",\n    \"go_kart_racing\",\n    \"laser_tag\",\n    \"basketball_stadium\",\n    \"dive_bar\",\n    \"states_and_municipalities\",\n    \"tunnel\",\n    \"beach_bar\",\n    \"driving_range\",\n    \"well\",\n    \"hockey_stadium\",\n    \"stripclub\",\n    \"boat_launch\",\n    \"scuba_diving_shop\",\n    \"ski_trail\",\n    \"waffle_shop\",\n    \"tennis_stadium\",\n    \"corporate_amenity\",\n    \"meeting_room\",\n    \"racecourse\",\n    \"rafting_spot\",\n    \"speakeasy\",\n    \"tree\",\n    \"university_book_store\",\n    \"university_laboratory\",\n    \"zoo_exhibit\",\n    \"chairlift\",\n    \"champagne_bar\",\n    \"indoor_cycling\",\n    \"turkish_coffeehouse\",\n    \"baggage_claim\",\n    \"neighbourhood\",\n    \"planetarium\",\n    \"sake_bar\",\n    \"village\",\n    \"airport_ticket_counter\",\n    \"beer_festival\",\n    \"bus_line\",\n    \"city\",\n    \"country\",\n    \"county\",\n    \"graffiti\",\n    \"hotel_bar\",\n    \"lgbtq_organization\",\n    \"moving_target\",\n    \"pop_up_shop\",\n    \"railway_platform\",\n    \"road\",\n    \"state\",\n    \"variety_store\",\n    \"whiskey_bar\"\n  ]\n}"
    }
  ],
  "structuredContent": {
    "listItems": [
      "services",
      "shopping",
      "food_and_drink",
      "food",
      "health_services",
      "office",
      "restaurant",
      "education",
      "transportation",
      "apartment_or_condo",
      "grocery",
      "place_of_worship",
      "outdoors",
      "clothing_store",
      "lodging",
      "school",
      "financial_services",
      "beauty_store",
      "wholesale_store",
      "supermarket",
      "auto_repair",
      "salon",
      "cafe",
      "bus_stop",
      "government",
      "real_estate_agent",
      "fast_food",
      "medical_practice",
      "park",
      "tourist_attraction",
      "nightlife",
      "sports",
      "hairdresser",
      "temple",
      "doctors_office",
      "bank",
      "bar",
      "church",
      "pharmacy",
      "entertainment",
      "hotel",
      "farm",
      "consulting",
      "lawyer",
      "medical_clinic",
      "bakery",
      "coffee",
      "coffee_shop",
      "dentist",
      "repair_shop",
      "fitness_center",
      "home",
      "factory",
      "furniture_store",
      "photographer",
      "shipping_store",
      "electronics_shop",
      "car_dealership",
      "clothing",
      "hospital",
      "travel_agency",
      "shopping_mall",
      "atm",
      "commercial",
      "advertising_agency",
      "gas_station",
      "insurance_broker",
      "post_office",
      "hospital_unit",
      "alternative_healthcare",
      "it",
      "historic_site",
      "hardware_store",
      "phone_store",
      "parking_lot",
      "dessert_shop",
      "jewelry_store",
      "elementary_school",
      "mosque",
      "monument",
      "river",
      "psychotherapist",
      "convenience_store",
      "market",
      "physiotherapist",
      "lake",
      "car_wash",
      "playground",
      "pet_store",
      "warehouse",
      "shoe_store",
      "tailor",
      "kindergarten",
      "nongovernmental_organization",
      "laundry",
      "field",
      "sports_club",
      "gift_shop",
      "cemetery",
      "butcher_shop",
      "psychological_services",
      "florist",
      "landscaping",
      "garden",
      "care_services",
      "charging_station",
      "bed_and_breakfast",
      "womens_clothing_store",
      "chiropractor",
      "ice_cream",
      "photo_store",
      "pizza_restaurant",
      "spa",
      "car_rental",
      "paper_goods_store",
      "college",
      "copyshop",
      "design_studio",
      "internet_cafe",
      "event_planner",
      "nail_salon",
      "public_transportation_station",
      "social_club",
      "mountain",
      "liquor_store",
      "event_space",
      "art",
      "massage_shop",
      "book_store",
      "community_center",
      "employment_agency",
      "medical_supply_store",
      "taxi",
      "veterinarian",
      "tobacco_shop",
      "childcare",
      "teahouse",
      "university",
      "studio",
      "tax_advisor",
      "mexican_restaurant",
      "museum",
      "medical_laboratory",
      "optician",
      "equipment_rental",
      "assisted_living_facility",
      "driving_school",
      "snack_bar",
      "arts_and_craft_store",
      "indian_restaurant",
      "bicycle_shop",
      "high_school",
      "deli",
      "forest",
      "asian_restaurant",
      "sports_shop",
      "hostel",
      "tattoo_parlour",
      "health_food_store",
      "food_court",
      "counselling",
      "library",
      "fashion_accessory_shop",
      "dance_studio",
      "department_store",
      "boutique",
      "island",
      "burger_restaurant",
      "storage",
      "nightclub",
      "tutor",
      "motorcycle_dealer",
      "diner_restaurant",
      "dry_cleaners",
      "bridge",
      "police_station",
      "news_kiosk",
      "fabric_store",
      "soccer_field",
      "art_gallery",
      "fire_station",
      "video_game_store",
      "theme_park",
      "music_school",
      "yoga_studio",
      "funeral_home",
      "japanese_restaurant",
      "toy_store",
      "indonesian_restaurant",
      "chinese_restaurant",
      "language_school",
      "breakfast_restaurant",
      "seafood_restaurant",
      "furniture_maker",
      "brunch_restaurant",
      "notary",
      "juice_bar",
      "baby_goods_shop",
      "buddhist_temple",
      "fishing_store",
      "government_offices",
      "bus_station",
      "theatre",
      "noodle_restaurant",
      "townhall",
      "university_building",
      "swimming_pool",
      "pub",
      "recording_studio",
      "barbeque_restaurant",
      "charity",
      "conference_center",
      "dormitory",
      "taco_shop",
      "laboratory",
      "italian_restaurant",
      "music_shop",
      "winery",
      "waste_transfer_station",
      "recycling_center",
      "public_artwork",
      "outdoor_sculpture",
      "music_venue",
      "sandwich_shop",
      "stadium",
      "tourist_information",
      "rehabilitation_center",
      "garden_store",
      "mattress_store",
      "american_restaurant",
      "cinema",
      "antique_shop",
      "labor_union",
      "locksmith",
      "nature_reserve",
      "lighting_store",
      "tennis_courts",
      "arts_center",
      "canal",
      "party_store",
      "thrift_shop",
      "radio_studio",
      "psychic",
      "motel",
      "pawnshop",
      "railway_station",
      "vape_shop",
      "watch_store",
      "rest_area",
      "golf_course",
      "bridal_shop",
      "video_store",
      "vacation_rental",
      "thai_restaurant",
      "boat_rental",
      "sushi_restaurant",
      "pilates_studio",
      "campground",
      "recreation_center",
      "brewery",
      "cobbler",
      "kitchen_store",
      "home_repair",
      "basketball_court",
      "buffet_restaurant",
      "martial_arts_studio",
      "shoe_repair",
      "cocktail_bar",
      "leather_goods",
      "coworking_space",
      "airport",
      "bubble_tea",
      "outlet_store",
      "sewing_shop",
      "courthouse",
      "fair_grounds",
      "cannabis_dispensary",
      "beach",
      "tanning_salon",
      "trade_school",
      "concert_hall",
      "gymnastics",
      "discount_store",
      "stable",
      "hobby_shop",
      "currency_exchange",
      "donut_shop",
      "frame_store",
      "herbalist",
      "carpet_store",
      "casino",
      "karaoke_bar",
      "camera_shop",
      "tapas_restaurant",
      "spanish_restaurant",
      "gun_store",
      "marina",
      "steakhouse",
      "wine_bar",
      "waste_disposal",
      "viewpoint",
      "television_studio",
      "tours",
      "animal_shelter",
      "turkish_restaurant",
      "pier",
      "korean_restaurant",
      "billiards",
      "beer_bar",
      "skatepark",
      "baseball_field",
      "vietnamese_restaurant",
      "cheese_shop",
      "french_restaurant",
      "dog_park",
      "photo_lab",
      "picnic_shelter",
      "bookmaker",
      "fireworks_store",
      "military_office",
      "greek_restaurant",
      "fish_and_chips_restaurant",
      "sports_bar",
      "sports_center",
      "sauna",
      "hookah_lounge",
      "vineyard",
      "gastropub",
      "middle_eastern_restaurant",
      "mediterranean_restaurant",
      "african_restaurant",
      "community_college",
      "prison",
      "racetrack",
      "hot_dog_stand",
      "zoo",
      "salad_bar",
      "dam",
      "coffee_roaster",
      "boxing_gym",
      "brazilian_restaurant",
      "climbing",
      "climbing_gym",
      "synagogue",
      "hunting_store",
      "emergency_room",
      "luggage_store",
      "dialysis_center",
      "bowling_alley",
      "waterfall",
      "fishing",
      "aquarium",
      "light_rail_station",
      "bagel_shop",
      "fishmonger",
      "filipino_restaurant",
      "cricket_club",
      "german_restaurant",
      "military_base",
      "motorsports_store",
      "carribean_restaurant",
      "ice_rink",
      "summer_camp",
      "frozen_yogurt_shop",
      "distillery",
      "surfboard_store",
      "exhibit",
      "ski_area",
      "embassy",
      "biergarten",
      "treecare",
      "ramen_restaurant",
      "resort",
      "optometrist",
      "plaza",
      "hunting_area",
      "disc_golf_course",
      "miniature_golf",
      "gay_bar",
      "check_cashing",
      "lounge",
      "water_park",
      "observatory",
      "cable_car",
      "cave",
      "hawaiian_restaurant",
      "town",
      "korean_barbeque_restaurant",
      "portuguese_restaurant",
      "latin_american_restaurant",
      "duty_free_shop",
      "fountain",
      "skydiving_drop_zone",
      "english_restaurant",
      "cuban_restaurant",
      "train",
      "persian_restaurant",
      "rugby_stadium",
      "gluten_free_restaurant",
      "creole_restaurant",
      "trailhead",
      "carpet_cleaner",
      "airport_terminal",
      "tiki_bar",
      "street",
      "intersection",
      "information_technology_company",
      "windmill",
      "bike_rental",
      "food_truck",
      "boat_or_ferry",
      "veterans_service",
      "wings_joint",
      "arcade",
      "outdoors_store",
      "peruvian_restaurant",
      "surf_spot",
      "irish_pub",
      "track",
      "chocolate_shop",
      "soccer_stadium",
      "cruise",
      "theme_park_attraction",
      "mountain_hut",
      "service_area",
      "ski_shop",
      "baseball_stadium",
      "lighthouse",
      "airport_gate",
      "football_stadium",
      "political_party_office",
      "tech_startup",
      "go_kart_racing",
      "laser_tag",
      "basketball_stadium",
      "dive_bar",
      "states_and_municipalities",
      "tunnel",
      "beach_bar",
      "driving_range",
      "well",
      "hockey_stadium",
      "stripclub",
      "boat_launch",
      "scuba_diving_shop",
      "ski_trail",
      "waffle_shop",
      "tennis_stadium",
      "corporate_amenity",
      "meeting_room",
      "racecourse",
      "rafting_spot",
      "speakeasy",
      "tree",
      "university_book_store",
      "university_laboratory",
      "zoo_exhibit",
      "chairlift",
      "champagne_bar",
      "indoor_cycling",
      "turkish_coffeehouse",
      "baggage_claim",
      "neighbourhood",
      "planetarium",
      "sake_bar",
      "village",
      "airport_ticket_counter",
      "beer_festival",
      "bus_line",
      "city",
      "country",
      "county",
      "graffiti",
      "hotel_bar",
      "lgbtq_organization",
      "moving_target",
      "pop_up_shop",
      "railway_platform",
      "road",
      "state",
      "variety_store",
      "whiskey_bar"
    ]
  },
  "isError": false
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants