{"$schema":"https://static.modelcontextprotocol.io/schemas/server-card/2025-06-18.json","name":"wcway","title":"wcway","icon":"https://wcway.com/favicon.svg","icons":[{"src":"https://wcway.com/favicon.svg","mimeType":"image/svg+xml","sizes":["any"]},{"src":"https://wcway.com/icon-512.png","mimeType":"image/png","sizes":["512x512"]}],"description":"Find the nearest public toilet anywhere in the world. Free, no account. Returns distance, walk time, access rule, fee, opening state and wheelchair access.","version":"0.2.0","serverUrl":"https://wcway.com/mcp","url":"https://wcway.com/mcp","endpoint":"https://wcway.com/mcp","protocol":"streamable-http","protocolVersion":"2025-06-18","transport":{"type":"streamable-http","protocol":"streamable-http","url":"https://wcway.com/mcp"},"mcpServers":{"wcway":{"type":"http","transport":"streamable-http","url":"https://wcway.com/mcp"}},"protocolVersions":["2026-07-28","2025-11-25","2025-06-18","2025-03-26","2024-11-05"],"auth":"none","authentication":{"type":"none","description":"Public keyless server. Rate limits apply."},"capabilities":{"tools":{},"prompts":{},"resources":{}},"tools":[{"name":"find_toilets_near","description":"Use this when the user asks for the nearest public toilet, or for toilets near a street, station or town. Returns up to 20 toilets sorted by distance, with walk time, access rule, fee, open now, closing time, wheelchair access and a map link. Do not use it for toilet products or plumbing.","inputSchema":{"type":"object","properties":{"place":{"type":"string","minLength":2,"maxLength":200,"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."},"lat":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude, WGS84. Send with lon, if you already know the coordinates."},"lon":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude, WGS84."},"limit":{"type":"integer","minimum":1,"maximum":20,"default":5},"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."},"free":{"type":"boolean","description":"Only toilets known to be free of charge."},"no_purchase_needed":{"type":"boolean","description":"Only toilets that need no purchase."}},"required":[],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","required":["status","origin","results","attribution","display_note"],"additionalProperties":false,"properties":{"status":{"type":"string","enum":["ok","no_results","needs_location","place_not_found"],"description":"needs_location and place_not_found are not errors. Ask the user the question in ask_user."},"origin":{"anyOf":[{"type":"object","required":["lat","lon","label","source"],"additionalProperties":false,"properties":{"lat":{"type":"number"},"lon":{"type":"number"},"label":{"type":"string","description":"The place and its city. A position without a name shows its coordinates.","examples":["Luisenplatz, Darmstadt"]},"source":{"type":"string","enum":["place","coordinates","host_hint"]}}},{"type":"null"}]},"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"],"additionalProperties":false,"properties":{"id":{"type":"string","examples":["lt_01J9ZQ"]},"name":{"type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"},"access":{"type":"string","enum":["public","permissive","customers","scheme","unknown"],"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."},"access_rule":{"type":"string","enum":["free","fee","customers","key","scheme","unknown"],"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."},"scheme_name":{"type":["string","null"]},"fee":{"type":"object","required":["required","amount","currency"],"additionalProperties":false,"properties":{"required":{"type":["boolean","null"]},"amount":{"type":["number","null"]},"currency":{"type":["string","null"]}}},"opening_hours":{"type":["string","null"],"description":"OpenStreetMap opening_hours syntax."},"open_now":{"description":"Evaluated at the toilet's local time. The value unknown means the source has no usable hours.","anyOf":[{"type":"boolean"},{"const":"unknown"}]},"closes_at":{"type":["string","null"],"description":"Local closing time with UTC offset. Null when unknown or when it never closes."},"wheelchair":{"type":"string","enum":["yes","limited","no","unknown"]},"changing_table":{"type":"string","enum":["yes","no","unknown"]},"gender":{"type":"array","items":{"type":"string","enum":["unisex","female","male"]},"description":"Who the toilet is for. Empty when not known."},"operator":{"type":["string","null"]},"last_confirmed_at":{"type":["string","null"]},"verification_state":{"type":"string","enum":["unverified","source_claimed","community_confirmed","partner_confirmed","disputed"],"description":"disputed: an open user report says the toilet is gone, closed or wrong."},"confirmations":{"type":"integer","minimum":0,"description":"User confirmations in the last 12 months."},"cleanliness":{"anyOf":[{"type":"object","required":["average","count"],"additionalProperties":false,"properties":{"average":{"type":"number","minimum":1,"maximum":5},"count":{"type":"integer","minimum":1}}},{"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."},"confidence":{"type":"string","enum":["high","medium","low"]},"source":{"type":"string"},"partner":{"anyOf":[{"type":"null"},{"type":"object","required":["name","tier","conditions","opening_hours","open_now","closes_at"],"additionalProperties":false,"properties":{"name":{"type":"string","description":"Business name that the partner gave and a moderator approved."},"tier":{"type":"string","enum":["basic","plus"]},"conditions":{"anyOf":[{"type":"string","enum":["everyone","customers"]},{"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."},"open_now":{"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.","anyOf":[{"type":"boolean"},{"const":"unknown"}]},"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."}}}],"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."},"provenance":{"type":"object","required":["source","checked","decided"],"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.","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"],"additionalProperties":false,"properties":{"by":{"type":"string","enum":["votes","moderator"],"description":"votes: most people voted for the shown value. moderator: a moderator locked the value."},"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."},"as_of":{"type":"string","description":"Date of the last count."}}}}}},"url":{"type":"string","format":"uri"},"directions":{"type":"object","required":["google","apple"],"additionalProperties":false,"properties":{"google":{"type":"string","format":"uri"},"apple":{"type":"string","format":"uri"}}},"geo":{"type":"string","description":"geo: URI."},"distance_m":{"type":"integer","minimum":0},"walk_min":{"type":"integer","minimum":1},"bearing":{"type":"integer","minimum":0,"maximum":359,"description":"Degrees from north."}}}},"bbox":{"type":"array","items":{"type":"number"},"minItems":4,"maxItems":4,"description":"west, south, east, north of the origin and the results."},"ask_user":{"type":"string"},"attribution":{"type":"object","required":["text","license","url","license_notice_url"],"additionalProperties":false,"properties":{"text":{"type":"string","examples":["© OpenStreetMap contributors"]},"license":{"type":"string","examples":["ODbL-1.0"]},"url":{"type":"string","format":"uri"},"license_notice_url":{"type":"string","format":"uri","description":"The page that lists every source with its licence and offers the data dumps."}}},"display_note":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["code","message","status","attribution"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"integer"},"invalid_params":{"type":"array","items":{"type":"object","required":["name","reason"],"properties":{"name":{"type":"string"},"reason":{"type":"string"}}}},"retry_after_seconds":{"type":"integer"},"attribution":{"type":"object","required":["text","license","url","license_notice_url"],"additionalProperties":false,"properties":{"text":{"type":"string","examples":["© OpenStreetMap contributors"]},"license":{"type":"string","examples":["ODbL-1.0"]},"url":{"type":"string","format":"uri"},"license_notice_url":{"type":"string","format":"uri","description":"The page that lists every source with its licence and offers the data dumps."}}}}}]},"annotations":{"title":"Find public toilets near a place","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"get_toilet","description":"Use this when the user asks about one toilet from an earlier answer: hours, access rule, fee, last confirmation. Needs the id from find_toilets_near. The provenance field says how many people confirm each fact, or which source it comes from.","inputSchema":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","description":"Toilet id from find_toilets_near."}},"required":["id"],"additionalProperties":false},"outputSchema":{"type":"object","anyOf":[{"type":"object","required":["toilet","attribution","display_note"],"additionalProperties":false,"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"],"additionalProperties":false,"properties":{"id":{"type":"string","examples":["lt_01J9ZQ"]},"name":{"type":["string","null"]},"lat":{"type":"number"},"lon":{"type":"number"},"access":{"type":"string","enum":["public","permissive","customers","scheme","unknown"],"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."},"access_rule":{"type":"string","enum":["free","fee","customers","key","scheme","unknown"],"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."},"scheme_name":{"type":["string","null"]},"fee":{"type":"object","required":["required","amount","currency"],"additionalProperties":false,"properties":{"required":{"type":["boolean","null"]},"amount":{"type":["number","null"]},"currency":{"type":["string","null"]}}},"opening_hours":{"type":["string","null"],"description":"OpenStreetMap opening_hours syntax."},"open_now":{"description":"Evaluated at the toilet's local time. The value unknown means the source has no usable hours.","anyOf":[{"type":"boolean"},{"const":"unknown"}]},"closes_at":{"type":["string","null"],"description":"Local closing time with UTC offset. Null when unknown or when it never closes."},"wheelchair":{"type":"string","enum":["yes","limited","no","unknown"]},"changing_table":{"type":"string","enum":["yes","no","unknown"]},"gender":{"type":"array","items":{"type":"string","enum":["unisex","female","male"]},"description":"Who the toilet is for. Empty when not known."},"operator":{"type":["string","null"]},"last_confirmed_at":{"type":["string","null"]},"verification_state":{"type":"string","enum":["unverified","source_claimed","community_confirmed","partner_confirmed","disputed"],"description":"disputed: an open user report says the toilet is gone, closed or wrong."},"confirmations":{"type":"integer","minimum":0,"description":"User confirmations in the last 12 months."},"cleanliness":{"anyOf":[{"type":"object","required":["average","count"],"additionalProperties":false,"properties":{"average":{"type":"number","minimum":1,"maximum":5},"count":{"type":"integer","minimum":1}}},{"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."},"confidence":{"type":"string","enum":["high","medium","low"]},"source":{"type":"string"},"partner":{"anyOf":[{"type":"null"},{"type":"object","required":["name","tier","conditions","opening_hours","open_now","closes_at"],"additionalProperties":false,"properties":{"name":{"type":"string","description":"Business name that the partner gave and a moderator approved."},"tier":{"type":"string","enum":["basic","plus"]},"conditions":{"anyOf":[{"type":"string","enum":["everyone","customers"]},{"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."},"open_now":{"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.","anyOf":[{"type":"boolean"},{"const":"unknown"}]},"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."}}}],"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."},"provenance":{"type":"object","required":["source","checked","decided"],"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.","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"],"additionalProperties":false,"properties":{"by":{"type":"string","enum":["votes","moderator"],"description":"votes: most people voted for the shown value. moderator: a moderator locked the value."},"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."},"as_of":{"type":"string","description":"Date of the last count."}}}}}},"url":{"type":"string","format":"uri"},"directions":{"type":"object","required":["google","apple"],"additionalProperties":false,"properties":{"google":{"type":"string","format":"uri"},"apple":{"type":"string","format":"uri"}}},"geo":{"type":"string","description":"geo: URI."},"image":{"anyOf":[{"type":"object","required":["url","width","height","credit","licence","licence_url","source_url"],"additionalProperties":false,"properties":{"url":{"type":"string","format":"uri","description":"The picture, served from this site. A client needs no other host."},"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1},"credit":{"type":"string","description":"Name of the author. Show it next to the photo."},"licence":{"type":"string","description":"Short name of the licence, for example CC BY-SA 4.0. Show it next to the photo."},"licence_url":{"type":["string","null"],"format":"uri","description":"Text of the licence. Null for a work in the public domain."},"source_url":{"type":"string","format":"uri","description":"Page of the picture at Wikimedia Commons or Panoramax."}}},{"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."}}},"attribution":{"type":"object","required":["text","license","url","license_notice_url"],"additionalProperties":false,"properties":{"text":{"type":"string","examples":["© OpenStreetMap contributors"]},"license":{"type":"string","examples":["ODbL-1.0"]},"url":{"type":"string","format":"uri"},"license_notice_url":{"type":"string","format":"uri","description":"The page that lists every source with its licence and offers the data dumps."}}},"display_note":{"type":"string"}}},{"type":"object","additionalProperties":false,"required":["code","message","status","attribution"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"integer"},"invalid_params":{"type":"array","items":{"type":"object","required":["name","reason"],"properties":{"name":{"type":"string"},"reason":{"type":"string"}}}},"retry_after_seconds":{"type":"integer"},"attribution":{"type":"object","required":["text","license","url","license_notice_url"],"additionalProperties":false,"properties":{"text":{"type":"string","examples":["© OpenStreetMap contributors"]},"license":{"type":"string","examples":["ODbL-1.0"]},"url":{"type":"string","format":"uri"},"license_notice_url":{"type":"string","format":"uri","description":"The page that lists every source with its licence and offers the data dumps."}}}}}]},"annotations":{"title":"Get one public toilet","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}}],"prompts":[{"name":"nearest_toilet","description":"Find public toilets near a place and say which one to use."}],"documentation":"https://wcway.com/agents.md","openapi":"https://wcway.com/openapi.json","contact":"https://wcway.com/legal-notice"}