Show raw JSON evidence
{
"checks": {
"action_safety_probe": {
"details": {
"auth_present": false,
"confirmation_signals": [
"book_flow_reservation"
],
"safeguard_count": 1,
"summary": {
"bulk_access_tools": 3,
"capability_distribution": {
"exec": 1,
"export": 3,
"filesystem": 1,
"network": 5,
"read": 7,
"write": 2
},
"destructive_tools": 0,
"egress_tools": 1,
"exec_tools": 1,
"high_risk_tools": 1,
"risk_distribution": {
"critical": 0,
"high": 1,
"low": 0,
"medium": 6
},
"secret_tools": 0,
"tool_count": 7
}
},
"latency_ms": null,
"status": "error"
},
"advanced_capabilities_probe": {
"details": {
"capabilities": {
"completions": false,
"elicitation": false,
"prompts": false,
"resource_links": false,
"resources": false,
"roots": false,
"sampling": false,
"structured_outputs": false
},
"enabled": [],
"enabled_count": 0,
"initialize_capability_keys": [
"tools"
]
},
"latency_ms": null,
"status": "missing"
},
"connector_publishability_probe": {
"details": {
"blockers": [
"transport_compliance",
"action_safety"
],
"criteria": {
"action_safety": false,
"auth_flow": true,
"connector_replay": true,
"initialize": true,
"protocol_version": true,
"remote_transport": true,
"request_association": true,
"server_card": true,
"session_resume": true,
"step_up_auth": true,
"tool_surface": true,
"tools_list": true,
"transport_compliance": false
},
"high_risk_tools": 1,
"tool_count": 7,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "warning"
},
"connector_replay_probe": {
"details": {
"reason": "no_historical_snapshot"
},
"latency_ms": null,
"status": "missing"
},
"determinism_probe": {
"details": {
"attempts": 2,
"baseline_signature": "cf7fb79b790c36897b4fb2af8e291ed35ffcc374022733b0b32b8cb17b35d545",
"errors": [],
"matches": 2,
"stable_ratio": 1.0,
"successful": 2
},
"latency_ms": 1247.0,
"status": "ok"
},
"initialize": {
"details": {
"headers": {
"content-type": "application/json",
"set-cookie": "XSRF-TOKEN=eyJpdiI6IkVNRjNUck1oVGtCR3U2d2FRdnVLT0E9PSIsInZhbHVlIjoib3FTWlh0WitwNG9TTktJTEJ2aFRVUUgwODVlQnpkUktRRFg0by9Fb2tlSDhEN09DYVlEM2oyVDErZUtkcmFMRDFJOEVRYzVScWd4K1FrODhTK1V4ZS83Q3FoR2dkSUg1WElTT0U4RGllbkZWemVuc3Y4b05PSERkSmRUalBBVTciLCJtYWMiOiIxNDQwM2E0ZTM5Yjc4NjFkYzFlYjA5OTBlZTM5YWIyYjUxM2E0M2NkYmJmOTA2YzkxYjgzZGYyMTg2MDVmMzQ3IiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:25 GMT; Max-Age=28800; path=/; secure; samesite=lax, posdo_session=eyJpdiI6IjJMTURranIvVWFwN2gvcUtqcUp5Smc9PSIsInZhbHVlIjoiMndzeldYSmtSQmM3ZTBZaGdNTGxRWmRKK2Y2SllxTFNEVDBrOHc4M20ya0taczZXeThBRnM0ejlFL3JnTUdlNjZzTENUTmREWUFUUUNEbDFQRzVraXhnY0d4Q3BoUnByZDhJd0pVa0tCSDA0aGtyalhKMTBSZnBTMkNVUEpxb08iLCJtYWMiOiI3NWVhNDIyZWYyZDdhNjdjN2E2OWI3ZmU2NWE5ZWNlYmY1MmY5MmZkYTY4OWE0N2I2MTM5MjVhNDhlYmE2OWQzIiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:25 GMT; Max-Age=28800; path=/; secure; httponly; samesite=lax",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload, max-age=15768000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "59"
},
"http_status": 200,
"payload": {
"id": 1,
"jsonrpc": "2.0",
"result": {
"capabilities": {
"tools": {}
},
"instructions": "POS.DO discovery server. Search 356K+ restaurants across 50+ countries with reviews, photos, cultural context, and Flow time-based offers. All data is read-only except book_flow_reservation. Phone numbers in book_flow_reservation must be E.164 (e.g. +34911234567).",
"protocolVersion": "2024-11-05",
"serverInfo": {
"name": "pos.do",
"version": "1.0.0"
}
}
},
"url": "https://pos.do/mcp"
},
"latency_ms": 1244.72,
"status": "ok"
},
"interactive_flow_probe": {
"details": {
"oauth_supported": false,
"prompt_available": false,
"risk_hits": [],
"safe_hits": []
},
"latency_ms": null,
"status": "missing"
},
"oauth_authorization_server": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"oauth_protected_resource": {
"details": {
"error": "Client error '404 Not Found' for url 'https://pos.do/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://pos.do/.well-known/oauth-protected-resource"
},
"latency_ms": 1218.81,
"status": "error"
},
"official_registry_probe": {
"details": {
"direct_match": false,
"official_identifiers": [
"finance.orbt/intelligence",
"io.github.GetCacheOverflow/cacheoverflow",
"io.github.dpozimski/linkmeta-mcp",
"io.github.oguzc/playwright-wizard-mcp",
"io.github.kobuta23/cabin-flights",
"io.github.martinfrasch/researchtwin",
"io.github.leshchenko1979/fast-mcp-telegram",
"io.github.NOTTIBOY137/open-registry-poc",
"eu.ansvar/saudi-law-mcp",
"io.github.jackdark425/aigroup-mdtoword-mcp"
],
"official_peer_count": 10,
"registry_source": "github_topic_registry"
},
"latency_ms": null,
"status": "warning"
},
"openid_configuration": {
"details": {
"reason": "no_authorization_server"
},
"latency_ms": null,
"status": "missing"
},
"probe_noise_resilience": {
"details": {
"headers": {
"content-type": "text/plain",
"strict-transport-security": "max-age=15768000; includeSubDomains"
},
"http_status": 200,
"url": "https://pos.do/robots.txt"
},
"latency_ms": 275.16,
"status": "ok"
},
"prompt_get": {
"details": {
"reason": "no_prompt_name"
},
"latency_ms": null,
"status": "missing"
},
"prompts_list": {
"details": {
"headers": {
"content-type": "application/json",
"set-cookie": "XSRF-TOKEN=eyJpdiI6IlJZODNaempqWVk3amVmUGlNSzEvR2c9PSIsInZhbHVlIjoiaFFoOVVaczFMQnRsOHhlTmkxMG1JdkwrT3ZLTzBHVkRJOUllV3hOTkVxdFZUUW1ZMUJkdVA1S2dmcGdJYWxZMzJPRlA0RU1YWW1nVllOb3hxVlAzZUhPNEpieXRIdWJlWjdzTXQwczVKV3FWNkJaakw3bzRldVFxWU1zNnhOZ2UiLCJtYWMiOiJmMDUwZWRiMGM5NGRlY2NmYjMwYmFiZjc0MWNiNzE3NjFmYmQ1NWNkOGMwNjA5MzYyMDZkMDMyMjQ2NzBjZTgyIiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:27 GMT; Max-Age=28800; path=/; secure; samesite=lax, posdo_session=eyJpdiI6IkF0dFptRGNaM0h6aUJkZDh6VDRvdEE9PSIsInZhbHVlIjoiRVRLaDg0M0tEbnFtUlZiaGkzMWs5REUva21EcFdXTld6RnBrYnd4RXJlOGlnSGI2MFg0Y0NiRUYxTHQzemgrbEpPWWloYkVoNVVYQWc2ZFdrSXlzNStCUWtoMUh2aSt3Y3ROVEp3MEl1Qk1obmw2dFJGQ3kvR1I3aDc3Vm1uUmQiLCJtYWMiOiI1Yzc5OTExYzJhMzAyMGJiMTYxNWM2MjRiMDNmOTIwMTgzNTI4YzI4YjI3MjM1MzM4NDQwMzU4YmRkMmJhMzUyIiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:27 GMT; Max-Age=28800; path=/; secure; httponly; samesite=lax",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload, max-age=15768000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "57"
},
"http_status": 200,
"payload": {
"error": {
"code": -32601,
"message": "Method not found: prompts/list"
},
"id": 3,
"jsonrpc": "2.0"
},
"url": "https://pos.do/mcp"
},
"latency_ms": 1216.37,
"status": "error"
},
"protocol_version_probe": {
"details": {
"claimed_version": "2024-11-05",
"lag_days": 385,
"latest_known_version": "2025-11-25",
"releases_behind": 3,
"validator_protocol_version": "2025-03-26"
},
"latency_ms": null,
"status": "warning"
},
"provenance_divergence_probe": {
"details": {
"direct_official_match": false,
"drift_fields": [],
"metadata_document_count": 2,
"registry_homepage": null,
"registry_repository": null,
"registry_title": null,
"registry_version": null,
"server_card_homepage": null,
"server_card_repository": null,
"server_card_title": "pos.do",
"server_card_version": "1.0.0"
},
"latency_ms": null,
"status": "ok"
},
"request_association_probe": {
"details": {
"reason": "no_request_association_capabilities_advertised"
},
"latency_ms": null,
"status": "missing"
},
"resource_read": {
"details": {
"reason": "no_resource_uri"
},
"latency_ms": null,
"status": "missing"
},
"resources_list": {
"details": {
"headers": {
"content-type": "application/json",
"set-cookie": "XSRF-TOKEN=eyJpdiI6InVCdUZnOS82Yng4TzZXTTNodkRNVXc9PSIsInZhbHVlIjoibm1USy9hN25aZW1LMjVLY0h0a2Ezb250d1FOYUJlcUxBWUZObjB4MXUxeEV2QWs4WHJOVklod1Q4a3JsWGhkbHFENjBvSzhkVnh5eFlJUFNoMGtJUTFaMk5mZkhnN0tlZVhlL3g4RkhVc29hZVJBVDJNbkZsVEdTbGdjWU43cjMiLCJtYWMiOiIzYzZkZWQwMjY3OGFlYmRkZjE0MmMyZjMzOTg4NjMyYzE4NzIyNjY3MDFlODI0YmEwZmRhNzhlZGRjZmY5MmQxIiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:29 GMT; Max-Age=28800; path=/; secure; samesite=lax, posdo_session=eyJpdiI6IjZTTkRRME5QYXpoTXV5OE1xc3lIRWc9PSIsInZhbHVlIjoidkRYTHc5cE02Y2ZPVDB3VGFEdTA5elFMR0VHcG5qdkY2RnJ3SHdPK3FMZkVhVDUrNWNhckRCVzRqK0tpcG9pRmZ1RFdjYy90UDJpSVFMNTEzdTA4SkYyemNQTG9Bcm1yTkJ5eGJFYjZtNUg0SjhrSWdVbVlkdUtjMW45WGN2UlAiLCJtYWMiOiJmMzgyOTBlODUwYjkyZGMzN2Y2ZDllMTJiZTZlNzdhY2NlMWUwMjcwNDU4NDkzZDE2OTc3MWJlMGJiOTg3YTk1IiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:29 GMT; Max-Age=28800; path=/; secure; httponly; samesite=lax",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload, max-age=15768000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "56"
},
"http_status": 200,
"payload": {
"error": {
"code": -32601,
"message": "Method not found: resources/list"
},
"id": 5,
"jsonrpc": "2.0"
},
"url": "https://pos.do/mcp"
},
"latency_ms": 1331.18,
"status": "error"
},
"server_card": {
"details": {
"headers": {
"content-type": "application/json",
"set-cookie": "XSRF-TOKEN=eyJpdiI6InBoaGJ0azZobDBKamRqNXNWL290MkE9PSIsInZhbHVlIjoib0hSejdyUzBnb1duWm5nZGNwOVdzUVc2SHFvQzArcEhEQVQ0ZU96WkRNQ29tVE9xZHNvZUVxaEV0R3NRUTREU3Rmb01DUTI2OThqamUrcjdDVzltTEVMakVkbTBDblNqZEJ6NlY2bjlUZzNzZDJpWTBqUUx3QUtKa2ZPRnZISmYiLCJtYWMiOiIzZmVhYzIzOWZmNjMxZmFiYzMwZTk3ZjA4MWZlYWIzNjQ5YjMwN2E0YmM1MDU5ZDBjOWExMWExYmVkM2NlZjcwIiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:22 GMT; Max-Age=28799; path=/; secure; samesite=lax, posdo_session=eyJpdiI6IkZDTUtNdmpPTGVZUmJNdGJUNTFzYUE9PSIsInZhbHVlIjoiSTFMUmVIekpVa2VwTmk3RGM2NGxlbE0yYlpyY3ZHNFgwZzlkZjJCYy82b3Exb09UWlZPOEs3MnhXZVZTRGdVQjl2ZTF1YmtsenJZMTZCbkVKbXFvTFBmQjFVaTdlN0s1eUlHMk12Qi9nR2h6YlBHWWRJbU5TZ3FrcjZsQkFVdXoiLCJtYWMiOiJjMjI0MmY2YzRiNjJkOWZkODU3NWMxZDE2ZmE0M2YxOWU2MTY1NWU2M2Q3MzZjMWQwOWY0ODQ3ZjNmOTcxNDY5IiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:22 GMT; Max-Age=28799; path=/; secure; httponly; samesite=lax",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload, max-age=15768000; includeSubDomains"
},
"http_status": 200,
"payload": {
"authentication": {
"required": false,
"schemes": [
"none"
]
},
"capabilities": {
"logging": false,
"prompts": false,
"resources": false,
"tools": true
},
"data_coverage": {
"countries": [
"US",
"ES",
"IT",
"MX",
"FR",
"CO",
"DE",
"GB",
"DO",
"PR",
"AU",
"CA",
"PT",
"JP",
"BE",
"CH",
"HK",
"VE",
"NZ",
"PY"
],
"has_cultural_context": true,
"has_photos": true,
"has_reservations": true,
"has_reviews": true,
"has_time_based_offers": true,
"languages": [
"es",
"en",
"it",
"fr",
"de",
"pt",
"ca"
],
"total_restaurants": 356780,
"total_reviews": 14232472
},
"description": "Search 356,000+ restaurants across 20 countries with reviews, photos, cultural context, and Flow time-based offers (Tu hora, tu precio).",
"discovery": {
"rest_endpoints_prefix": "https://pos.do/api/webmcp/",
"webmcp_manifest": "https://pos.do/.well-known/webmcp.json"
},
"display_name": "POS.DO Restaurant Discovery",
"generated_at": "2026-05-19T18:50:52+00:00",
"name": "pos.do",
"protocol_version": "2024-11-05",
"provider": {
"contact": "info@pos.do",
"name": "EZZYPUSH SL",
"privacy_policy": "https://pos.do/privacy",
"terms_of_service": "https://pos.do/terms",
"url": "https://pos.do"
},
"rate_limits": {
"requests_per_day": 10000,
"requests_per_minute": 60,
"reservations_per_email_per_day": 5,
"reservations_per_ip_per_minute": 10
},
"tools": [
{
"description": "Search restaurants in a specific city. Filter by cuisine type, price range, and features like outdoor seating, WiFi, delivery. Returns up to 20 results with name, rating, cuisine, price range, address, coordinates, photo, amenities, and current Flow offers.",
"inputSchema": {
"properties": {
"city": {
"description": "City name. Examples: 'Madrid', 'New York', 'Milano', 'Barcelona'.",
"type": "string"
},
"cuisine": {
"description": "Cuisine filter. Examples: 'italian', 'mexican', 'sushi', 'spanish', 'indian'.",
"type": "string"
},
"features": {
"description": "Comma-separated feature filters: terrace, wifi, parking, delivery, accessible.",
"type": "string"
},
"limit": {
"default": 10,
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"price_max": {
"description": "Max price level 1=budget, 4=fine dining.",
"maximum": 4,
"minimum": 1,
"type": "integer"
},
"query": {
"description": "Free-text search: cuisine, occasion, features (e.g. 'romantic italian terrace').",
"type": "string"
}
},
"required": [
"city"
],
"type": "object"
},
"name": "search_restaurants"
},
{
"description": "Get the full profile of a restaurant by URL slug. Returns name, address, coordinates, rating, reviews count, phone, opening hours, photos, services, cuisine type, price level, current Flow offers, and cultural context.",
"inputSchema": {
"properties": {
"slug": {
"description": "Restaurant URL slug. Example: 'anima-e-cuore-osteria-bilbao'.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_restaurant_details"
},
{
"description": "Get paginated reviews for a restaurant. Filter by star rating, sort by date or rating. Returns review text, author, rating, date, photos, language, owner response, and rating distribution.",
"inputSchema": {
"properties": {
"limit": {
"default": 10,
"maximum": 30,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"minimum": 0,
"type": "integer"
},
"rating": {
"description": "Filter by exact star rating.",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
},
"sort": {
"default": "recent",
"enum": [
"recent",
"rating_high",
"rating_low"
],
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_restaurant_reviews"
},
{
"description": "POS.DO Flow time-based offers for a restaurant. Off-peak hours have bigger discounts. Returns time slots with discount percentages and remaining covers. Tagline: 'Tu hora, tu precio'.",
"inputSchema": {
"properties": {
"date": {
"description": "Date YYYY-MM-DD (default: today).",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_flow_offers"
},
{
"description": "Make a reservation at a Flow-discounted time slot. Phone must be E.164 (e.g. +34911234567). To make retries safe, send the same Idempotency-Key HTTP header on retries (any UUID); replays within 24h return the original reservation. Rate limited to 5 reservations per email per day and 10 attempts per IP per minute.",
"inputSchema": {
"properties": {
"guest_email": {
"format": "email",
"type": "string"
},
"guest_name": {
"type": "string"
},
"guest_phone": {
"description": "E.164 format, e.g. +34911234567.",
"pattern": "^\\+[1-9]\\d{7,14}$",
"type": "string"
},
"notes": {
"type": "string"
},
"party_size": {
"default": 2,
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
},
"yield_offer_id": {
"description": "Offer ID returned by get_flow_offers.",
"type": "integer"
}
},
"required": [
"slug",
"yield_offer_id",
"guest_name",
"guest_email",
"guest_phone"
],
"type": "object"
},
"name": "book_flow_reservation"
},
{
"description": "Find restaurants near a famous landmark (monument, museum, park). Returns landmark info from Wikidata + nearby restaurants sorted by walking distance. Examples: 'Sagrada Familia', 'Colosseum', 'Central Park', 'Tour Eiffel'.",
"inputSchema": {
"properties": {
"city": {
"description": "City hint for landmark disambiguation.",
"type": "string"
},
"landmark": {
"description": "Landmark name.",
"type": "string"
},
"limit": {
"default": 10,
"maximum": 15,
"minimum": 1,
"type": "integer"
},
"radius": {
"default": 1000,
"description": "Search radius in meters.",
"maximum": 5000,
"minimum": 200,
"type": "integer"
}
},
"required": [
"landmark"
],
"type": "object"
},
"name": "find_restaurants_near_landmark"
},
{
"description": "Get cultural context around a restaurant: nearby monuments, museums, parks, historical sites with distance and heritage status. Powered by Wikidata.",
"inputSchema": {
"properties": {
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_cultural_context_around_restaurant"
}
],
"tools_count": 7,
"transport": {
"endpoint": "https://pos.do/mcp",
"methods": [
"POST"
],
"type": "streamable_http"
},
"version": "1.0.0"
},
"url": "https://pos.do/.well-known/mcp/server-card.json"
},
"latency_ms": 1698.15,
"status": "ok"
},
"session_resume_probe": {
"details": {
"protocol_version": "2024-11-05",
"reason": "no_session_id",
"resume_expected": true,
"transport": "streamable-http"
},
"latency_ms": null,
"status": "warning"
},
"step_up_auth_probe": {
"details": {
"auth_required_checks": [],
"broad_scopes": [],
"challenge_headers": [],
"minimal_scope_documented": false,
"oauth_present": false,
"scope_specificity_ratio": 0.0,
"step_up_signals": [],
"supported_scopes": []
},
"latency_ms": null,
"status": "missing"
},
"tool_snapshot_probe": {
"details": {
"current_tool_count": 7,
"reason": "no_historical_snapshot"
},
"latency_ms": null,
"status": "missing"
},
"tools_list": {
"details": {
"headers": {
"content-type": "application/json",
"set-cookie": "XSRF-TOKEN=eyJpdiI6ImtJRU9qUFNiSlBFb05acEJDMUFabVE9PSIsInZhbHVlIjoiUkEvYVF0cFBPc0dqZDBiSk5hRlFKdVgxZmRRRTUySThoTjJYVytSY2FTUXFwc0ZPMVpLeW1BcFNSUFdWRmlFckJCVlprWEtpMDNuNDNWWSszNGlERnhvd2Q5My9VclpLMGdoQUtRYzM5RjYxTGlFcm4wU3FHVnRMbS9wQStJUnEiLCJtYWMiOiI3OWE2ZDViY2QwMWQ4ZTY5NzcyYWU0MWEzNzNkZDBiZjYxODIwZTJjYTViMmMzNWFjYmEwMmQ5NDBhOTE5Zjk5IiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:26 GMT; Max-Age=28800; path=/; secure; samesite=lax, posdo_session=eyJpdiI6InJvUWVCSVJoNVVNYTZFUWtsVmkwYnc9PSIsInZhbHVlIjoidEYzdFZsUkVDTk11dWFNa2VVYVlLR2RxZFQwTVFCdTZjeGkxVmM1TlJvYnhwRDZqMWFkV3BRSlcyQzhUMG0rc2V0R05lVDdPdW50YXEzcHczclFJM0FCVm5nN084OWFuT05yVW55R3NTYmtvcW5nVjRuWnZ1Mk83cGp1MC9JZEkiLCJtYWMiOiI5OTlmODg5Zjk0YzAzMDg5NGQwYmI1N2ZhOTZiMmM2MWI1MDMwM2JjMzc3NzlkYTRmNzZiOGEzNDExZTczZWEwIiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:26 GMT; Max-Age=28800; path=/; secure; httponly; samesite=lax",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload, max-age=15768000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "58"
},
"http_status": 200,
"payload": {
"id": 2,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"description": "Search restaurants in a specific city. Filter by cuisine type, price range, and features like outdoor seating, WiFi, delivery. Returns up to 20 results with name, rating, cuisine, price range, address, coordinates, photo, amenities, and current Flow offers.",
"inputSchema": {
"properties": {
"city": {
"description": "City name. Examples: 'Madrid', 'New York', 'Milano', 'Barcelona'.",
"type": "string"
},
"cuisine": {
"description": "Cuisine filter. Examples: 'italian', 'mexican', 'sushi', 'spanish', 'indian'.",
"type": "string"
},
"features": {
"description": "Comma-separated feature filters: terrace, wifi, parking, delivery, accessible.",
"type": "string"
},
"limit": {
"default": 10,
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"price_max": {
"description": "Max price level 1=budget, 4=fine dining.",
"maximum": 4,
"minimum": 1,
"type": "integer"
},
"query": {
"description": "Free-text search: cuisine, occasion, features (e.g. 'romantic italian terrace').",
"type": "string"
}
},
"required": [
"city"
],
"type": "object"
},
"name": "search_restaurants"
},
{
"description": "Get the full profile of a restaurant by URL slug. Returns name, address, coordinates, rating, reviews count, phone, opening hours, photos, services, cuisine type, price level, current Flow offers, and cultural context.",
"inputSchema": {
"properties": {
"slug": {
"description": "Restaurant URL slug. Example: 'anima-e-cuore-osteria-bilbao'.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_restaurant_details"
},
{
"description": "Get paginated reviews for a restaurant. Filter by star rating, sort by date or rating. Returns review text, author, rating, date, photos, language, owner response, and rating distribution.",
"inputSchema": {
"properties": {
"limit": {
"default": 10,
"maximum": 30,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"minimum": 0,
"type": "integer"
},
"rating": {
"description": "Filter by exact star rating.",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
},
"sort": {
"default": "recent",
"enum": [
"recent",
"rating_high",
"rating_low"
],
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_restaurant_reviews"
},
{
"description": "POS.DO Flow time-based offers for a restaurant. Off-peak hours have bigger discounts. Returns time slots with discount percentages and remaining covers. Tagline: 'Tu hora, tu precio'.",
"inputSchema": {
"properties": {
"date": {
"description": "Date YYYY-MM-DD (default: today).",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_flow_offers"
},
{
"description": "Make a reservation at a Flow-discounted time slot. Phone must be E.164 (e.g. +34911234567). To make retries safe, send the same Idempotency-Key HTTP header on retries (any UUID); replays within 24h return the original reservation. Rate limited to 5 reservations per email per day and 10 attempts per IP per minute.",
"inputSchema": {
"properties": {
"guest_email": {
"format": "email",
"type": "string"
},
"guest_name": {
"type": "string"
},
"guest_phone": {
"description": "E.164 format, e.g. +34911234567.",
"pattern": "^\\+[1-9]\\d{7,14}$",
"type": "string"
},
"notes": {
"type": "string"
},
"party_size": {
"default": 2,
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
},
"yield_offer_id": {
"description": "Offer ID returned by get_flow_offers.",
"type": "integer"
}
},
"required": [
"slug",
"yield_offer_id",
"guest_name",
"guest_email",
"guest_phone"
],
"type": "object"
},
"name": "book_flow_reservation"
},
{
"description": "Find restaurants near a famous landmark (monument, museum, park). Returns landmark info from Wikidata + nearby restaurants sorted by walking distance. Examples: 'Sagrada Familia', 'Colosseum', 'Central Park', 'Tour Eiffel'.",
"inputSchema": {
"properties": {
"city": {
"description": "City hint for landmark disambiguation.",
"type": "string"
},
"landmark": {
"description": "Landmark name.",
"type": "string"
},
"limit": {
"default": 10,
"maximum": 15,
"minimum": 1,
"type": "integer"
},
"radius": {
"default": 1000,
"description": "Search radius in meters.",
"maximum": 5000,
"minimum": 200,
"type": "integer"
}
},
"required": [
"landmark"
],
"type": "object"
},
"name": "find_restaurants_near_landmark"
},
{
"description": "Get cultural context around a restaurant: nearby monuments, museums, parks, historical sites with distance and heritage status. Powered by Wikidata.",
"inputSchema": {
"properties": {
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_cultural_context_around_restaurant"
}
]
}
},
"url": "https://pos.do/mcp"
},
"latency_ms": 1269.19,
"status": "ok"
},
"transport_compliance_probe": {
"details": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "application/json",
"set-cookie": "XSRF-TOKEN=eyJpdiI6InJENXU4cmJRN3BEY0N4ZHRPQyt5Nmc9PSIsInZhbHVlIjoiTGp4TlREOUZsWXEzMHIvUk1ueXMrSXF2Z1lycjIwcUtoSDZxOEFVRXN1R2RDREY2YysxeHBUbHBmN0ZMSjVaNVh0ZXN4NlBweEJyVFJ4QjYxS1Q1SVMrdXhQdzVFM2FzelJVL2I4ZWRHQnlOWTZkTWlRTGZRNkowREhBeUVpakYiLCJtYWMiOiIwM2MzYzU1OWVkZmZiMDIxYmI4OWMzMGEyZGU4Mjk5OWZmZjg2ZTc4MGE1YzRjNmI2Nzg1NzZmY2UyZWRiMTk3IiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:33 GMT; Max-Age=28800; path=/; secure; samesite=lax, posdo_session=eyJpdiI6ImEzS2lKL1pDaS9KRTQxQ2x0MHROSFE9PSIsInZhbHVlIjoiNGVGbW02M0luSWNoRjZBdDlwalJMSmxLR25lMUFNdGYwcHc5NkpPcUUyVEN1bDhTd0FnYktmeFljMndBelloMG8wZ2xJbVhaQW1UZTZNVGhxWHZVWGFSNkZ5eEcrcW9ib09vd3NkVTdlQTBIWmNNT3cxQXkxMVRGeGZucUZBWGoiLCJtYWMiOiJkYjNkNzg4ODY0M2ZiMzRjMzg1Yjk1MWM2OTYyMDIwNjI3OWMzOTc1NzBkNzQwYjg5MmM2ZTY3Y2RlNTU2OTRmIiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:33 GMT; Max-Age=28800; path=/; secure; httponly; samesite=lax",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload, max-age=15768000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "53"
},
"bad_protocol_payload": {
"id": 410,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"description": "Search restaurants in a specific city. Filter by cuisine type, price range, and features like outdoor seating, WiFi, delivery. Returns up to 20 results with name, rating, cuisine, price range, address, coordinates, photo, amenities, and current Flow offers.",
"inputSchema": {
"properties": {
"city": {
"description": "City name. Examples: 'Madrid', 'New York', 'Milano', 'Barcelona'.",
"type": "string"
},
"cuisine": {
"description": "Cuisine filter. Examples: 'italian', 'mexican', 'sushi', 'spanish', 'indian'.",
"type": "string"
},
"features": {
"description": "Comma-separated feature filters: terrace, wifi, parking, delivery, accessible.",
"type": "string"
},
"limit": {
"default": 10,
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"price_max": {
"description": "Max price level 1=budget, 4=fine dining.",
"maximum": 4,
"minimum": 1,
"type": "integer"
},
"query": {
"description": "Free-text search: cuisine, occasion, features (e.g. 'romantic italian terrace').",
"type": "string"
}
},
"required": [
"city"
],
"type": "object"
},
"name": "search_restaurants"
},
{
"description": "Get the full profile of a restaurant by URL slug. Returns name, address, coordinates, rating, reviews count, phone, opening hours, photos, services, cuisine type, price level, current Flow offers, and cultural context.",
"inputSchema": {
"properties": {
"slug": {
"description": "Restaurant URL slug. Example: 'anima-e-cuore-osteria-bilbao'.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_restaurant_details"
},
{
"description": "Get paginated reviews for a restaurant. Filter by star rating, sort by date or rating. Returns review text, author, rating, date, photos, language, owner response, and rating distribution.",
"inputSchema": {
"properties": {
"limit": {
"default": 10,
"maximum": 30,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"minimum": 0,
"type": "integer"
},
"rating": {
"description": "Filter by exact star rating.",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
},
"sort": {
"default": "recent",
"enum": [
"recent",
"rating_high",
"rating_low"
],
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_restaurant_reviews"
},
{
"description": "POS.DO Flow time-based offers for a restaurant. Off-peak hours have bigger discounts. Returns time slots with discount percentages and remaining covers. Tagline: 'Tu hora, tu precio'.",
"inputSchema": {
"properties": {
"date": {
"description": "Date YYYY-MM-DD (default: today).",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_flow_offers"
},
{
"description": "Make a reservation at a Flow-discounted time slot. Phone must be E.164 (e.g. +34911234567). To make retries safe, send the same Idempotency-Key HTTP header on retries (any UUID); replays within 24h return the original reservation. Rate limited to 5 reservations per email per day and 10 attempts per IP per minute.",
"inputSchema": {
"properties": {
"guest_email": {
"format": "email",
"type": "string"
},
"guest_name": {
"type": "string"
},
"guest_phone": {
"description": "E.164 format, e.g. +34911234567.",
"pattern": "^\\+[1-9]\\d{7,14}$",
"type": "string"
},
"notes": {
"type": "string"
},
"party_size": {
"default": 2,
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
},
"yield_offer_id": {
"description": "Offer ID returned by get_flow_offers.",
"type": "integer"
}
},
"required": [
"slug",
"yield_offer_id",
"guest_name",
"guest_email",
"guest_phone"
],
"type": "object"
},
"name": "book_flow_reservation"
},
{
"description": "Find restaurants near a famous landmark (monument, museum, park). Returns landmark info from Wikidata + nearby restaurants sorted by walking distance. Examples: 'Sagrada Familia', 'Colosseum', 'Central Park', 'Tour Eiffel'.",
"inputSchema": {
"properties": {
"city": {
"description": "City hint for landmark disambiguation.",
"type": "string"
},
"landmark": {
"description": "Landmark name.",
"type": "string"
},
"limit": {
"default": 10,
"maximum": 15,
"minimum": 1,
"type": "integer"
},
"radius": {
"default": 1000,
"description": "Search radius in meters.",
"maximum": 5000,
"minimum": 200,
"type": "integer"
}
},
"required": [
"landmark"
],
"type": "object"
},
"name": "find_restaurants_near_landmark"
},
{
"description": "Get cultural context around a restaurant: nearby monuments, museums, parks, historical sites with distance and heritage status. Powered by Wikidata.",
"inputSchema": {
"properties": {
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_cultural_context_around_restaurant"
}
]
}
},
"bad_protocol_status_code": 200,
"delete_error": null,
"delete_status_code": null,
"expired_session_error": null,
"expired_session_status_code": null,
"issues": [
"missing_session_id",
"missing_protocol_header",
"bad_protocol_not_rejected"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2024-11-05",
"session_id_present": false,
"transport": "streamable-http"
},
"latency_ms": 1308.98,
"status": "error"
},
"utility_coverage_probe": {
"details": {
"completions": {
"advertised": false,
"live_probe": "not_executed",
"sample_target": null
},
"initialize_capability_keys": [
"tools"
],
"pagination": {
"metadata_signal": false,
"next_cursor_methods": [],
"supported": false
},
"tasks": {
"advertised": false,
"http_status": 200,
"probe_status": "missing"
}
},
"latency_ms": 1210.53,
"status": "missing"
}
},
"failures": {
"oauth_authorization_server": {
"reason": "no_authorization_server"
},
"oauth_protected_resource": {
"error": "Client error '404 Not Found' for url 'https://pos.do/.well-known/oauth-protected-resource'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404",
"url": "https://pos.do/.well-known/oauth-protected-resource"
},
"openid_configuration": {
"reason": "no_authorization_server"
},
"prompts_list": {
"headers": {
"content-type": "application/json",
"set-cookie": "XSRF-TOKEN=eyJpdiI6IlJZODNaempqWVk3amVmUGlNSzEvR2c9PSIsInZhbHVlIjoiaFFoOVVaczFMQnRsOHhlTmkxMG1JdkwrT3ZLTzBHVkRJOUllV3hOTkVxdFZUUW1ZMUJkdVA1S2dmcGdJYWxZMzJPRlA0RU1YWW1nVllOb3hxVlAzZUhPNEpieXRIdWJlWjdzTXQwczVKV3FWNkJaakw3bzRldVFxWU1zNnhOZ2UiLCJtYWMiOiJmMDUwZWRiMGM5NGRlY2NmYjMwYmFiZjc0MWNiNzE3NjFmYmQ1NWNkOGMwNjA5MzYyMDZkMDMyMjQ2NzBjZTgyIiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:27 GMT; Max-Age=28800; path=/; secure; samesite=lax, posdo_session=eyJpdiI6IkF0dFptRGNaM0h6aUJkZDh6VDRvdEE9PSIsInZhbHVlIjoiRVRLaDg0M0tEbnFtUlZiaGkzMWs5REUva21EcFdXTld6RnBrYnd4RXJlOGlnSGI2MFg0Y0NiRUYxTHQzemgrbEpPWWloYkVoNVVYQWc2ZFdrSXlzNStCUWtoMUh2aSt3Y3ROVEp3MEl1Qk1obmw2dFJGQ3kvR1I3aDc3Vm1uUmQiLCJtYWMiOiI1Yzc5OTExYzJhMzAyMGJiMTYxNWM2MjRiMDNmOTIwMTgzNTI4YzI4YjI3MjM1MzM4NDQwMzU4YmRkMmJhMzUyIiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:27 GMT; Max-Age=28800; path=/; secure; httponly; samesite=lax",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload, max-age=15768000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "57"
},
"http_status": 200,
"payload": {
"error": {
"code": -32601,
"message": "Method not found: prompts/list"
},
"id": 3,
"jsonrpc": "2.0"
},
"url": "https://pos.do/mcp"
},
"resources_list": {
"headers": {
"content-type": "application/json",
"set-cookie": "XSRF-TOKEN=eyJpdiI6InVCdUZnOS82Yng4TzZXTTNodkRNVXc9PSIsInZhbHVlIjoibm1USy9hN25aZW1LMjVLY0h0a2Ezb250d1FOYUJlcUxBWUZObjB4MXUxeEV2QWs4WHJOVklod1Q4a3JsWGhkbHFENjBvSzhkVnh5eFlJUFNoMGtJUTFaMk5mZkhnN0tlZVhlL3g4RkhVc29hZVJBVDJNbkZsVEdTbGdjWU43cjMiLCJtYWMiOiIzYzZkZWQwMjY3OGFlYmRkZjE0MmMyZjMzOTg4NjMyYzE4NzIyNjY3MDFlODI0YmEwZmRhNzhlZGRjZmY5MmQxIiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:29 GMT; Max-Age=28800; path=/; secure; samesite=lax, posdo_session=eyJpdiI6IjZTTkRRME5QYXpoTXV5OE1xc3lIRWc9PSIsInZhbHVlIjoidkRYTHc5cE02Y2ZPVDB3VGFEdTA5elFMR0VHcG5qdkY2RnJ3SHdPK3FMZkVhVDUrNWNhckRCVzRqK0tpcG9pRmZ1RFdjYy90UDJpSVFMNTEzdTA4SkYyemNQTG9Bcm1yTkJ5eGJFYjZtNUg0SjhrSWdVbVlkdUtjMW45WGN2UlAiLCJtYWMiOiJmMzgyOTBlODUwYjkyZGMzN2Y2ZDllMTJiZTZlNzdhY2NlMWUwMjcwNDU4NDkzZDE2OTc3MWJlMGJiOTg3YTk1IiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:29 GMT; Max-Age=28800; path=/; secure; httponly; samesite=lax",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload, max-age=15768000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "56"
},
"http_status": 200,
"payload": {
"error": {
"code": -32601,
"message": "Method not found: resources/list"
},
"id": 5,
"jsonrpc": "2.0"
},
"url": "https://pos.do/mcp"
},
"transport_compliance_probe": {
"bad_protocol_error": null,
"bad_protocol_headers": {
"content-type": "application/json",
"set-cookie": "XSRF-TOKEN=eyJpdiI6InJENXU4cmJRN3BEY0N4ZHRPQyt5Nmc9PSIsInZhbHVlIjoiTGp4TlREOUZsWXEzMHIvUk1ueXMrSXF2Z1lycjIwcUtoSDZxOEFVRXN1R2RDREY2YysxeHBUbHBmN0ZMSjVaNVh0ZXN4NlBweEJyVFJ4QjYxS1Q1SVMrdXhQdzVFM2FzelJVL2I4ZWRHQnlOWTZkTWlRTGZRNkowREhBeUVpakYiLCJtYWMiOiIwM2MzYzU1OWVkZmZiMDIxYmI4OWMzMGEyZGU4Mjk5OWZmZjg2ZTc4MGE1YzRjNmI2Nzg1NzZmY2UyZWRiMTk3IiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:33 GMT; Max-Age=28800; path=/; secure; samesite=lax, posdo_session=eyJpdiI6ImEzS2lKL1pDaS9KRTQxQ2x0MHROSFE9PSIsInZhbHVlIjoiNGVGbW02M0luSWNoRjZBdDlwalJMSmxLR25lMUFNdGYwcHc5NkpPcUUyVEN1bDhTd0FnYktmeFljMndBelloMG8wZ2xJbVhaQW1UZTZNVGhxWHZVWGFSNkZ5eEcrcW9ib09vd3NkVTdlQTBIWmNNT3cxQXkxMVRGeGZucUZBWGoiLCJtYWMiOiJkYjNkNzg4ODY0M2ZiMzRjMzg1Yjk1MWM2OTYyMDIwNjI3OWMzOTc1NzBkNzQwYjg5MmM2ZTY3Y2RlNTU2OTRmIiwidGFnIjoiIn0%3D; expires=Wed, 20 May 2026 03:25:33 GMT; Max-Age=28800; path=/; secure; httponly; samesite=lax",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload, max-age=15768000; includeSubDomains",
"x-ratelimit-limit": "60",
"x-ratelimit-remaining": "53"
},
"bad_protocol_payload": {
"id": 410,
"jsonrpc": "2.0",
"result": {
"tools": [
{
"description": "Search restaurants in a specific city. Filter by cuisine type, price range, and features like outdoor seating, WiFi, delivery. Returns up to 20 results with name, rating, cuisine, price range, address, coordinates, photo, amenities, and current Flow offers.",
"inputSchema": {
"properties": {
"city": {
"description": "City name. Examples: 'Madrid', 'New York', 'Milano', 'Barcelona'.",
"type": "string"
},
"cuisine": {
"description": "Cuisine filter. Examples: 'italian', 'mexican', 'sushi', 'spanish', 'indian'.",
"type": "string"
},
"features": {
"description": "Comma-separated feature filters: terrace, wifi, parking, delivery, accessible.",
"type": "string"
},
"limit": {
"default": 10,
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"price_max": {
"description": "Max price level 1=budget, 4=fine dining.",
"maximum": 4,
"minimum": 1,
"type": "integer"
},
"query": {
"description": "Free-text search: cuisine, occasion, features (e.g. 'romantic italian terrace').",
"type": "string"
}
},
"required": [
"city"
],
"type": "object"
},
"name": "search_restaurants"
},
{
"description": "Get the full profile of a restaurant by URL slug. Returns name, address, coordinates, rating, reviews count, phone, opening hours, photos, services, cuisine type, price level, current Flow offers, and cultural context.",
"inputSchema": {
"properties": {
"slug": {
"description": "Restaurant URL slug. Example: 'anima-e-cuore-osteria-bilbao'.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_restaurant_details"
},
{
"description": "Get paginated reviews for a restaurant. Filter by star rating, sort by date or rating. Returns review text, author, rating, date, photos, language, owner response, and rating distribution.",
"inputSchema": {
"properties": {
"limit": {
"default": 10,
"maximum": 30,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"minimum": 0,
"type": "integer"
},
"rating": {
"description": "Filter by exact star rating.",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
},
"sort": {
"default": "recent",
"enum": [
"recent",
"rating_high",
"rating_low"
],
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_restaurant_reviews"
},
{
"description": "POS.DO Flow time-based offers for a restaurant. Off-peak hours have bigger discounts. Returns time slots with discount percentages and remaining covers. Tagline: 'Tu hora, tu precio'.",
"inputSchema": {
"properties": {
"date": {
"description": "Date YYYY-MM-DD (default: today).",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_flow_offers"
},
{
"description": "Make a reservation at a Flow-discounted time slot. Phone must be E.164 (e.g. +34911234567). To make retries safe, send the same Idempotency-Key HTTP header on retries (any UUID); replays within 24h return the original reservation. Rate limited to 5 reservations per email per day and 10 attempts per IP per minute.",
"inputSchema": {
"properties": {
"guest_email": {
"format": "email",
"type": "string"
},
"guest_name": {
"type": "string"
},
"guest_phone": {
"description": "E.164 format, e.g. +34911234567.",
"pattern": "^\\+[1-9]\\d{7,14}$",
"type": "string"
},
"notes": {
"type": "string"
},
"party_size": {
"default": 2,
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
},
"yield_offer_id": {
"description": "Offer ID returned by get_flow_offers.",
"type": "integer"
}
},
"required": [
"slug",
"yield_offer_id",
"guest_name",
"guest_email",
"guest_phone"
],
"type": "object"
},
"name": "book_flow_reservation"
},
{
"description": "Find restaurants near a famous landmark (monument, museum, park). Returns landmark info from Wikidata + nearby restaurants sorted by walking distance. Examples: 'Sagrada Familia', 'Colosseum', 'Central Park', 'Tour Eiffel'.",
"inputSchema": {
"properties": {
"city": {
"description": "City hint for landmark disambiguation.",
"type": "string"
},
"landmark": {
"description": "Landmark name.",
"type": "string"
},
"limit": {
"default": 10,
"maximum": 15,
"minimum": 1,
"type": "integer"
},
"radius": {
"default": 1000,
"description": "Search radius in meters.",
"maximum": 5000,
"minimum": 200,
"type": "integer"
}
},
"required": [
"landmark"
],
"type": "object"
},
"name": "find_restaurants_near_landmark"
},
{
"description": "Get cultural context around a restaurant: nearby monuments, museums, parks, historical sites with distance and heritage status. Powered by Wikidata.",
"inputSchema": {
"properties": {
"slug": {
"description": "Restaurant URL slug.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_cultural_context_around_restaurant"
}
]
}
},
"bad_protocol_status_code": 200,
"delete_error": null,
"delete_status_code": null,
"expired_session_error": null,
"expired_session_status_code": null,
"issues": [
"missing_session_id",
"missing_protocol_header",
"bad_protocol_not_rejected"
],
"last_event_id_visible": false,
"protocol_header_present": false,
"requested_protocol_version": "2024-11-05",
"session_id_present": false,
"transport": "streamable-http"
}
},
"remote_url": "https://pos.do/mcp",
"server_card_payload": null,
"server_identifier": "github-posdo-io/mcp-server"
}