What this MCP does
Finds nearby public toilets and returns distance, walking time, access, fees, hours, accessibility, and map links.
Tools
Input schema
{'type': 'object', 'required': [], 'properties': {'lat': {'type': 'number', 'maximum': 90, 'minimum': -90, 'description': 'Latitude, WGS84. Send with lon, if you already know the coordinates.'}, 'lon': {'type': 'number', 'maximum': 180, 'minimum': -180, 'description': 'Longitude, WGS84.'}, 'free': {'type': 'boolean', 'description': 'Only toilets known to be free of charge.'}, 'limit': {'type': 'integer', 'default': 5, 'maximum': 20, 'minimum': 1}, 'place': {'type': 'string', 'maxLength': 200, 'minLength': 2, 'description': 'Street, station, landmark or town from the user message, for example Darmstadt Hauptbahnhof.'}, 'country': {'type': 'string', 'pattern': '^[A-Za-z]{2}$', 'description': 'ISO 3166-1 alpha-2 code. Narrows the place lookup.'}, 'open_now': {'type': 'boolean', 'description': 'Drop toilets that are closed now. Toilets with unknown hours stay and show open_now unknown.'}, 'wheelchair': {'type': 'boolean', 'description': 'Only wheelchair-accessible toilets.'}, 'changing_table': {'type': 'boolean', 'description': 'Only toilets with a changing table.'}, 'no_purchase_needed': {'type': 'boolean', 'description': 'Only toilets that need no purchase.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'type': 'object', 'required': ['status', 'origin', 'results', 'attribution', 'display_note'], 'properties': {'bbox': {'type': 'array', 'items': {'type': 'number'}, 'maxItems': 4, 'minItems': 4, 'description': 'west, south, east, north of the origin and the results.'}, 'origin': {'anyOf': [{'type': 'object', 'required': ['lat', 'lon', 'label', 'source'], 'properties': {'lat': {'type': 'number'}, 'lon': {'type': 'number'}, 'label': {'type': 'string', 'examples': ['Luisenplatz, Darmstadt'], 'description': 'The place and its city. A position without a name shows its coordinates.'}, 'source': {'enum': ['place', 'coordinates', 'host_hint'], 'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'status': {'enum': ['ok', 'no_results', 'needs_location', 'place_not_found'], 'type': 'string', 'description': 'needs_location and place_not_found are not errors. Ask the user the question in ask_user.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name', 'lat', 'lon', 'access', 'access_rule', 'scheme_name', 'fee', 'opening_hours', 'open_now', 'closes_at', 'wheelchair', 'changing_table', 'gender', 'operator', 'last_confirmed_at', 'verification_state', 'confirmations', 'cleanliness', 'confidence', 'source', 'partner', 'provenance', 'url', 'directions', 'geo', 'distance_m', 'walk_min', 'bearing'], 'properties': {'id': {'type': 'string', 'examples': ['lt_01J9ZQ']}, 'fee': {'type': 'object', 'required': ['required', 'amount', 'currency'], 'properties': {'amount': {'type': ['number', 'null']}, 'currency': {'type': ['string', 'null']}, 'required': {'type': ['boolean', 'null']}}, 'additionalProperties': False}, 'geo': {'type': 'string', 'description': 'geo: URI.'}, 'lat': {'type': 'number'}, 'lon': {'type': 'number'}, 'url': {'type': 'string', 'format': 'uri'}, 'name': {'type': ['string', 'null']}, 'access': {'enum': ['public', 'permissive', 'customers', 'scheme', 'unknown'], 'type': 'string', 'description': 'Who may use the toilet. public: anyone. permissive: anyone, no purchase needed. customers: customers only. scheme: a public scheme opens a business toilet to everyone.'}, 'gender': {'type': 'array', 'items': {'enum': ['unisex', 'female', 'male'], 'type': 'string'}, 'description': 'Who the toilet is for. Empty when not known.'}, 'source': {'type': 'string'}, 'bearing': {'type': 'integer', 'maximum': 359, 'minimum': 0, 'description': 'Degrees from north.'}, 'partner': {'anyOf': [{'type': 'null'}, {'type': 'object', 'required': ['name', 'tier', 'conditions', 'opening_hours', 'open_now', 'closes_at'], 'properties': {'name': {'type': 'string', 'description': 'Business name that the partner gave and a moderator approved.'}, 'tier': {'enum': ['basic', 'plus'], 'type': 'string'}, 'open_now': {'anyOf': [{'type': 'boolean'}, {'const': 'unknown'}], 'description': "Open state from the hours of the business and its live switch, at the toilet's local time. false: the business closed the toilet for now, or its hours say closed. unknown: the business gave no usable hours."}, 'closes_at': {'type': ['string', 'null'], 'description': 'Local closing time with UTC offset, from the hours of the business. Null when unknown or when it never closes.'}, 'conditions': {'anyOf': [{'enum': ['everyone', 'customers'], 'type': 'string'}, {'type': 'null'}], 'description': 'What the business says about who may use the toilet. everyone: free for everyone. customers: customers only. Null when the business said nothing. It is the word of the business, not a checked fact.'}, 'opening_hours': {'type': ['string', 'null'], 'description': 'Opening hours that the business entered, in OpenStreetMap opening_hours syntax. Null when it entered none.'}}, 'additionalProperties': False}], 'description': "Set when the business behind the toilet pays for a Verified Partner listing. It buys visibility and a label. It never changes the order of the results. Show it as a label only. Conditions, opening_hours and open_now are statements of the business. The toilet's own fields (access, opening_hours, open_now) stay as they are."}, 'open_now': {'anyOf': [{'type': 'boolean'}, {'const': 'unknown'}], 'description': "Evaluated at the toilet's local time. The value unknown means the source has no usable hours."}, 'operator': {'type': ['string', 'null']}, 'walk_min': {'type': 'integer', 'minimum': 1}, 'closes_at': {'type': ['string', 'null'], 'description': 'Local closing time with UTC offset. Null when unknown or when it never closes.'}, 'confidence': {'enum': ['high', 'medium', 'low'], 'type': 'string'}, 'directions': {'type': 'object', 'required': ['google', 'apple'], 'properties': {'apple': {'type': 'string', 'format': 'uri'}, 'google': {'type': 'string', 'format': 'uri'}}, 'additionalProperties': False}, 'distance_m': {'type': 'integer', 'minimum': 0}, 'provenance': {'type': 'object', 'required': ['source', 'checked', 'decided'], 'properties': {'source': {'type': 'string', 'description': 'Source of the toilet record, for example osm.'}, 'checked': {'type': ['string', 'null'], 'description': 'Month of the last check in the source, for example 2025-06.'}, 'decided': {'type': 'object', 'description': 'Facts that people or a moderator decided. The keys are access, fee, fee_amount, wheelchair, changing_table, gender, opening_hours, name, operator and existence.', 'propertyNames': {'enum': ['access', 'fee', 'fee_amount', 'wheelchair', 'changing_table', 'gender', 'opening_hours', 'name', 'operator', 'existence']}, 'additionalProperties': {'type': 'object', 'required': ['by', 'votes_for', 'votes_total', 'as_of'], 'properties': {'by': {'enum': ['votes', 'moderator'], 'type': 'string', 'description': 'votes: most people voted for the shown value. moderator: a moderator locked the value.'}, 'as_of': {'type': 'string', 'description': 'Date of the last count.'}, 'votes_for': {'type': ['integer', 'null'], 'minimum': 0, 'description': 'People who voted for the shown value. The source value counts as one vote. Null for a moderator.'}, 'votes_total': {'type': ['integer', 'null'], 'minimum': 0, 'description': 'All votes in the last 24 months, including the source value.'}}, 'additionalProperties': False}}}, 'description': 'Where the facts come from. People can correct every fact. A value that most people vote for replaces the source value. Every fact comes from the source, unless decided lists it.', 'additionalProperties': False}, 'wheelchair': {'enum': ['yes', 'limited', 'no', 'unknown'], 'type': 'string'}, 'access_rule': {'enum': ['free', 'fee', 'customers', 'key', 'scheme', 'unknown'], 'type': 'string', 'description': 'free and fee: public toilet. customers: purchase or customer status needed. key: key needed. scheme: a public scheme opens a business toilet to everyone. unknown: fee not known.'}, 'cleanliness': {'anyOf': [{'type': 'object', 'required': ['average', 'count'], 'properties': {'count': {'type': 'integer', 'minimum': 1}, 'average': {'type': 'number', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'User ratings from 1 (dirty) to 5 (spotless). Each person has one rating, and the latest counts. Null when nobody rated it.'}, 'scheme_name': {'type': ['string', 'null']}, 'confirmations': {'type': 'integer', 'minimum': 0, 'description': 'User confirmations in the last 12 months.'}, 'opening_hours': {'type': ['string', 'null'], 'description': 'OpenStreetMap opening_hours syntax.'}, 'changing_table': {'enum': ['yes', 'no', 'unknown'], 'type': 'string'}, 'last_confirmed_at': {'type': ['string', 'null']}, 'verification_state': {'enum': ['unverified', 'source_claimed', 'community_confirmed', 'partner_confirmed', 'disputed'], 'type': 'string', 'description': 'disputed: an open user report says the toilet is gone, closed or wrong.'}}, 'additionalProperties': False}}, 'ask_user': {'type': 'string'}, 'attribution': {'type': 'object', 'required': ['text', 'license', 'url', 'license_notice_url'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'text': {'type': 'string', 'examples': ['© OpenStreetMap contributors']}, 'license': {'type': 'string', 'examples': ['ODbL-1.0']}, 'license_notice_url': {'type': 'string', 'format': 'uri', 'description': 'The page that lists every source with its licence and offers the data dumps.'}}, 'additionalProperties': False}, 'display_note': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['code', 'message', 'status', 'attribution'], 'properties': {'code': {'type': 'string'}, 'status': {'type': 'integer'}, 'message': {'type': 'string'}, 'attribution': {'type': 'object', 'required': ['text', 'license', 'url', 'license_notice_url'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'text': {'type': 'string', 'examples': ['© OpenStreetMap contributors']}, 'license': {'type': 'string', 'examples': ['ODbL-1.0']}, 'license_notice_url': {'type': 'string', 'format': 'uri', 'description': 'The page that lists every source with its licence and offers the data dumps.'}}, 'additionalProperties': False}, 'invalid_params': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'reason'], 'properties': {'name': {'type': 'string'}, 'reason': {'type': 'string'}}}}, 'retry_after_seconds': {'type': 'integer'}}, 'additionalProperties': False}]}
Input schema
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{1,64}$', 'description': 'Toilet id from find_toilets_near.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'anyOf': [{'type': 'object', 'required': ['toilet', 'attribution', 'display_note'], 'properties': {'toilet': {'type': 'object', 'required': ['id', 'name', 'lat', 'lon', 'access', 'access_rule', 'scheme_name', 'fee', 'opening_hours', 'open_now', 'closes_at', 'wheelchair', 'changing_table', 'gender', 'operator', 'last_confirmed_at', 'verification_state', 'confirmations', 'cleanliness', 'confidence', 'source', 'partner', 'provenance', 'url', 'directions', 'geo', 'image'], 'properties': {'id': {'type': 'string', 'examples': ['lt_01J9ZQ']}, 'fee': {'type': 'object', 'required': ['required', 'amount', 'currency'], 'properties': {'amount': {'type': ['number', 'null']}, 'currency': {'type': ['string', 'null']}, 'required': {'type': ['boolean', 'null']}}, 'additionalProperties': False}, 'geo': {'type': 'string', 'description': 'geo: URI.'}, 'lat': {'type': 'number'}, 'lon': {'type': 'number'}, 'url': {'type': 'string', 'format': 'uri'}, 'name': {'type': ['string', 'null']}, 'image': {'anyOf': [{'type': 'object', 'required': ['url', 'width', 'height', 'credit', 'licence', 'licence_url', 'source_url'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'The picture, served from this site. A client needs no other host.'}, 'width': {'type': 'integer', 'minimum': 1}, 'credit': {'type': 'string', 'description': 'Name of the author. Show it next to the photo.'}, 'height': {'type': 'integer', 'minimum': 1}, 'licence': {'type': 'string', 'description': 'Short name of the licence, for example CC BY-SA 4.0. Show it next to the photo.'}, 'source_url': {'type': 'string', 'format': 'uri', 'description': 'Page of the picture at Wikimedia Commons or Panoramax.'}, 'licence_url': {'type': ['string', 'null'], 'format': 'uri', 'description': 'Text of the licence. Null for a work in the public domain.'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'A photo of the toilet. OpenStreetMap links it from Wikimedia Commons or Panoramax. It is set only when the licence is free (CC0, public domain, CC BY, CC BY-SA, Etalab Open Licence) and the author is known. Else it is null. Show credit and licence next to the photo.'}, 'access': {'enum': ['public', 'permissive', 'customers', 'scheme', 'unknown'], 'type': 'string', 'description': 'Who may use the toilet. public: anyone. permissive: anyone, no purchase needed. customers: customers only. scheme: a public scheme opens a business toilet to everyone.'}, 'gender': {'type': 'array', 'items': {'enum': ['unisex', 'female', 'male'], 'type': 'string'}, 'description': 'Who the toilet is for. Empty when not known.'}, 'source': {'type': 'string'}, 'partner': {'anyOf': [{'type': 'null'}, {'type': 'object', 'required': ['name', 'tier', 'conditions', 'opening_hours', 'open_now', 'closes_at'], 'properties': {'name': {'type': 'string', 'description': 'Business name that the partner gave and a moderator approved.'}, 'tier': {'enum': ['basic', 'plus'], 'type': 'string'}, 'open_now': {'anyOf': [{'type': 'boolean'}, {'const': 'unknown'}], 'description': "Open state from the hours of the business and its live switch, at the toilet's local time. false: the business closed the toilet for now, or its hours say closed. unknown: the business gave no usable hours."}, 'closes_at': {'type': ['string', 'null'], 'description': 'Local closing time with UTC offset, from the hours of the business. Null when unknown or when it never closes.'}, 'conditions': {'anyOf': [{'enum': ['everyone', 'customers'], 'type': 'string'}, {'type': 'null'}], 'description': 'What the business says about who may use the toilet. everyone: free for everyone. customers: customers only. Null when the business said nothing. It is the word of the business, not a checked fact.'}, 'opening_hours': {'type': ['string', 'null'], 'description': 'Opening hours that the business entered, in OpenStreetMap opening_hours syntax. Null when it entered none.'}}, 'additionalProperties': False}], 'description': "Set when the business behind the toilet pays for a Verified Partner listing. It buys visibility and a label. It never changes the order of the results. Show it as a label only. Conditions, opening_hours and open_now are statements of the business. The toilet's own fields (access, opening_hours, open_now) stay as they are."}, 'open_now': {'anyOf': [{'type': 'boolean'}, {'const': 'unknown'}], 'description': "Evaluated at the toilet's local time. The value unknown means the source has no usable hours."}, 'operator': {'type': ['string', 'null']}, 'closes_at': {'type': ['string', 'null'], 'description': 'Local closing time with UTC offset. Null when unknown or when it never closes.'}, 'confidence': {'enum': ['high', 'medium', 'low'], 'type': 'string'}, 'directions': {'type': 'object', 'required': ['google', 'apple'], 'properties': {'apple': {'type': 'string', 'format': 'uri'}, 'google': {'type': 'string', 'format': 'uri'}}, 'additionalProperties': False}, 'provenance': {'type': 'object', 'required': ['source', 'checked', 'decided'], 'properties': {'source': {'type': 'string', 'description': 'Source of the toilet record, for example osm.'}, 'checked': {'type': ['string', 'null'], 'description': 'Month of the last check in the source, for example 2025-06.'}, 'decided': {'type': 'object', 'description': 'Facts that people or a moderator decided. The keys are access, fee, fee_amount, wheelchair, changing_table, gender, opening_hours, name, operator and existence.', 'propertyNames': {'enum': ['access', 'fee', 'fee_amount', 'wheelchair', 'changing_table', 'gender', 'opening_hours', 'name', 'operator', 'existence']}, 'additionalProperties': {'type': 'object', 'required': ['by', 'votes_for', 'votes_total', 'as_of'], 'properties': {'by': {'enum': ['votes', 'moderator'], 'type': 'string', 'description': 'votes: most people voted for the shown value. moderator: a moderator locked the value.'}, 'as_of': {'type': 'string', 'description': 'Date of the last count.'}, 'votes_for': {'type': ['integer', 'null'], 'minimum': 0, 'description': 'People who voted for the shown value. The source value counts as one vote. Null for a moderator.'}, 'votes_total': {'type': ['integer', 'null'], 'minimum': 0, 'description': 'All votes in the last 24 months, including the source value.'}}, 'additionalProperties': False}}}, 'description': 'Where the facts come from. People can correct every fact. A value that most people vote for replaces the source value. Every fact comes from the source, unless decided lists it.', 'additionalProperties': False}, 'wheelchair': {'enum': ['yes', 'limited', 'no', 'unknown'], 'type': 'string'}, 'access_rule': {'enum': ['free', 'fee', 'customers', 'key', 'scheme', 'unknown'], 'type': 'string', 'description': 'free and fee: public toilet. customers: purchase or customer status needed. key: key needed. scheme: a public scheme opens a business toilet to everyone. unknown: fee not known.'}, 'cleanliness': {'anyOf': [{'type': 'object', 'required': ['average', 'count'], 'properties': {'count': {'type': 'integer', 'minimum': 1}, 'average': {'type': 'number', 'maximum': 5, 'minimum': 1}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'User ratings from 1 (dirty) to 5 (spotless). Each person has one rating, and the latest counts. Null when nobody rated it.'}, 'scheme_name': {'type': ['string', 'null']}, 'confirmations': {'type': 'integer', 'minimum': 0, 'description': 'User confirmations in the last 12 months.'}, 'opening_hours': {'type': ['string', 'null'], 'description': 'OpenStreetMap opening_hours syntax.'}, 'changing_table': {'enum': ['yes', 'no', 'unknown'], 'type': 'string'}, 'last_confirmed_at': {'type': ['string', 'null']}, 'verification_state': {'enum': ['unverified', 'source_claimed', 'community_confirmed', 'partner_confirmed', 'disputed'], 'type': 'string', 'description': 'disputed: an open user report says the toilet is gone, closed or wrong.'}}, 'additionalProperties': False}, 'attribution': {'type': 'object', 'required': ['text', 'license', 'url', 'license_notice_url'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'text': {'type': 'string', 'examples': ['© OpenStreetMap contributors']}, 'license': {'type': 'string', 'examples': ['ODbL-1.0']}, 'license_notice_url': {'type': 'string', 'format': 'uri', 'description': 'The page that lists every source with its licence and offers the data dumps.'}}, 'additionalProperties': False}, 'display_note': {'type': 'string'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['code', 'message', 'status', 'attribution'], 'properties': {'code': {'type': 'string'}, 'status': {'type': 'integer'}, 'message': {'type': 'string'}, 'attribution': {'type': 'object', 'required': ['text', 'license', 'url', 'license_notice_url'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'text': {'type': 'string', 'examples': ['© OpenStreetMap contributors']}, 'license': {'type': 'string', 'examples': ['ODbL-1.0']}, 'license_notice_url': {'type': 'string', 'format': 'uri', 'description': 'The page that lists every source with its licence and offers the data dumps.'}}, 'additionalProperties': False}, 'invalid_params': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'reason'], 'properties': {'name': {'type': 'string'}, 'reason': {'type': 'string'}}}}, 'retry_after_seconds': {'type': 'integer'}}, 'additionalProperties': False}]}
Recent tool changes
Similar MCP servers
SupplyGraph.AI Data
Provides China-focused location, surrounding-area, company, industry-chain, property, population, retail, and regional business i…
Microburbs Australian Property Data
Provides Australian property, suburb, valuation, sales, rental, zoning, school, risk, geospatial, and census statistics.
gisgp
Provides GIS geocoding, routing, spatial transformations, ArcGIS layer inspection and export, and location due diligence for haza…
ikeytz Einsatzgebiet-Karten
Provides public map and service-area data, geographic search, proximity calculations, area boundaries, business contact details, …
Namaste America
Helps users find Indian-American restaurants, temples, events, businesses, professionals, services, movies, offers, and community…
MolTravel
Searches and provides details for flights, hotels, rental cars, ferries, airports, travel experiences, destinations, country info…
MapMap
Provides mapping tools for routing, truck and ADR routing, geocoding, distance matrices, and isochrones.
EasyTerritory MCP
Builds, balances, analyzes, and edits sales or service territories, with geocoding, routing, scheduling, map visualization, and G…