# IndiaRestros > IndiaRestros is a free search of restaurants, cafes, dhabas and delivery kitchens across India, with dish search, menus with rupee prices, timings and phone numbers. A free MCP server and REST API (no key for reads) let AI assistants answer food questions with the source of every fact. - **URL:** https://indiarestros.com - **Category:** media - **Directory profile:** https://www.aiagentpages.com/listings/indiarestros-com - **Machine spec:** https://www.aiagentpages.com/api/listings/indiarestros-com/spec - **Directory llms.txt:** https://www.aiagentpages.com/listings/indiarestros-com/llms.txt - **Readiness score:** 100 - **Listing status:** Unclaimed - **Origin llms.txt:** https://indiarestros.com/llms.txt - **Origin MCP card:** https://indiarestros.com/.well-known/mcp/server-card.json - **Origin ARD:** https://indiarestros.com/.well-known/ard.json ## Best for - Finding restaurants - cafes and dishes in an Indian city - Reading menus with rupee prices - timings and phone numbers - Dish search across India ## Differentiators Search restaurants, dishes and menus across India ## Query this directory - MCP: https://www.aiagentpages.com/mcp - REST: https://www.aiagentpages.com/api/v1/listings - Developers: https://www.aiagentpages.com/developers - Platform index: https://www.aiagentpages.com/llms.txt ## Structured Data ```json { "spec_version": "1.0", "slug": "indiarestros-com", "url": "https://indiarestros.com", "title": "IndiaRestros", "description": "IndiaRestros is a free search of restaurants, cafes, dhabas and delivery kitchens across India, with dish search, menus with rupee prices, timings and phone numbers. A free MCP server and REST API (no key for reads) let AI assistants answer food questions with the source of every fact.", "category": "media", "tags": [ "india", "restaurants", "menus", "food", "mcp" ], "readiness_score": 100, "readiness_breakdown": { "level": 5, "score": 100, "probes": [ { "id": "discoverability.robotsTxt", "name": "robots.txt", "pass": true, "path": "", "status": null, "counts_toward_profile": true }, { "id": "discoverability.sitemap", "name": "sitemap.xml", "pass": true, "path": "", "status": null, "counts_toward_profile": true }, { "id": "discoverability.linkHeaders", "name": "Link headers (/)", "pass": true, "path": "", "status": null, "counts_toward_profile": true }, { "id": "discoverability.dnsAid", "name": "DNS-AID + DNSSEC", "pass": true, "path": "", "status": null, "counts_toward_profile": true }, { "id": "contentAccessibility.markdownNegotiation", "name": "Markdown negotiation (/)", "pass": true, "path": "", "status": null, "counts_toward_profile": true }, { "id": "botAccessControl.robotsTxtAiRules", "name": "AI bot rules (robots.txt)", "pass": true, "path": "", "status": null, "counts_toward_profile": true }, { "id": "botAccessControl.contentSignals", "name": "Content-Signal (robots.txt)", "pass": true, "path": "", "status": null, "counts_toward_profile": true }, { "id": "botAccessControl.webBotAuth", "name": "Web Bot Auth", "pass": true, "path": "", "status": null, "counts_toward_profile": true }, { "id": "discovery.apiCatalog", "name": "API catalog", "pass": true, "path": "", "status": null, "counts_toward_profile": true }, { "id": "discovery.oauthDiscovery", "name": "OAuth authorization server", "pass": true, "path": "", "status": null, "counts_toward_profile": false }, { "id": "discovery.oauthProtectedResource", "name": "OAuth protected resource", "pass": true, "path": "", "status": null, "counts_toward_profile": false }, { "id": "discovery.authMd", "name": "auth.md", "pass": true, "path": "", "status": null, "counts_toward_profile": true }, { "id": "discovery.mcpServerCard", "name": "MCP server card", "pass": true, "path": "", "status": null, "counts_toward_profile": false }, { "id": "discovery.a2aAgentCard", "name": "A2A agent card", "pass": true, "path": "", "status": null, "counts_toward_profile": false }, { "id": "discovery.agentSkills", "name": "Agent skills index", "pass": true, "path": "", "status": null, "counts_toward_profile": false }, { "id": "discovery.webMcp", "name": "WebMCP bootstrap", "pass": true, "path": "", "status": null, "counts_toward_profile": false }, { "id": "discovery.ard", "name": "ARD / ai-catalog.json", "pass": true, "path": "", "status": null, "counts_toward_profile": true }, { "id": "discovery.personalAgentProtocol", "name": "discovery.personalAgentProtocol", "pass": false, "path": "", "detail": "informational", "status": null, "counts_toward_profile": false }, { "id": "commerce.x402", "name": "x402 payments", "pass": false, "path": "(optional)", "detail": "optional", "status": null, "counts_toward_profile": false }, { "id": "commerce.mpp", "name": "MPP commerce", "pass": false, "path": "(optional)", "detail": "optional", "status": null, "counts_toward_profile": false }, { "id": "commerce.ucp", "name": "UCP profile", "pass": false, "path": "(optional)", "detail": "optional", "status": null, "counts_toward_profile": false }, { "id": "commerce.acp", "name": "ACP discovery", "pass": false, "path": "(optional)", "detail": "optional", "status": null, "counts_toward_profile": false }, { "id": "commerce.ap2", "name": "AP2 (A2A commerce)", "pass": false, "path": "(optional)", "detail": "optional", "status": null, "counts_toward_profile": false } ], "scanner": "isitagentready", "base_url": "https://indiarestros.com", "score_raw": 94, "site_type": "product", "iar_checks": { "commerce": { "acp": { "status": "neutral", "message": "ACP discovery document not found (not a commerce site)", "evidence": [ { "label": "GET /.well-known/acp.json", "action": "fetch", "finding": { "outcome": "negative", "summary": "Server returned 404 -- ACP discovery document not found" }, "request": { "url": "https://indiarestros.com/.well-known/acp.json", "method": "GET" }, "response": { "status": 404, "headers": { "link": "; rel=\"api-catalog\", ; rel=\"service-desc\"; type=\"application/vnd.oai.openapi+json\", ; rel=\"service-doc\"; type=\"text/html\", ; rel=\"describedby\"; type=\"text/plain\", ; rel=\"mcp-server-card\"; type=\"application/json\", ; rel=\"ai-catalog\"; type=\"application/json\", ; rel=preload; as=style, ; rel=preload; as=font; type=\"font/woff2\"; crossorigin", "cf-ray": "a54966dc9f112c74-IAD", "content-type": "text/html; charset=utf-8", "cf-cache-status": "MISS" }, "statusText": "Not Found" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "negative", "summary": "ACP discovery document not found" } } ], "durationMs": 868, "messageRef": { "code": "scanner.commerceCheckNotApplicable", "params": { "check": "acp", "original": { "code": "check.acp.notFound" } } } }, "ap2": { "status": "neutral", "message": "AP2 not declared in A2A Agent Card (not a commerce site)", "evidence": [ { "label": "Check AP2 extension", "action": "validate", "finding": { "outcome": "negative", "summary": "A2A Agent Card found but no AP2 extension declared" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "negative", "summary": "AP2 not declared in A2A Agent Card extensions" } } ], "messageRef": { "code": "scanner.commerceCheckNotApplicable", "params": { "check": "ap2", "original": { "code": "check.ap2.notDeclared" } } } }, "mpp": { "status": "neutral", "message": "MPP payment discovery not detected (not a commerce site)", "evidence": [ { "label": "GET /openapi.json", "action": "fetch", "finding": { "outcome": "neutral", "summary": "/openapi.json found but no operations with x-payment-info" }, "request": { "url": "https://indiarestros.com/openapi.json", "method": "GET" }, "response": { "status": 200, "headers": { "cf-ray": "a54966dc7edf2c74-IAD", "content-type": "application/json", "cf-cache-status": "MISS" }, "statusText": "OK" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "negative", "summary": "MPP payment discovery not detected" } } ], "durationMs": 839, "messageRef": { "code": "scanner.commerceCheckNotApplicable", "params": { "check": "mpp", "original": { "code": "check.mpp.notDetected" } } } }, "ucp": { "status": "neutral", "message": "UCP profile not found (not a commerce site)", "evidence": [ { "label": "GET /.well-known/ucp", "action": "fetch", "finding": { "outcome": "negative", "summary": "Server returned 404 -- UCP profile not found" }, "request": { "url": "https://indiarestros.com/.well-known/ucp", "method": "GET" }, "response": { "status": 404, "headers": { "link": "; rel=\"api-catalog\", ; rel=\"service-desc\"; type=\"application/vnd.oai.openapi+json\", ; rel=\"service-doc\"; type=\"text/html\", ; rel=\"describedby\"; type=\"text/plain\", ; rel=\"mcp-server-card\"; type=\"application/json\", ; rel=\"ai-catalog\"; type=\"application/json\", ; rel=preload; as=style, ; rel=preload; as=font; type=\"font/woff2\"; crossorigin", "cf-ray": "a54966db2d182c74-IAD", "content-type": "text/html; charset=utf-8", "cf-cache-status": "MISS" }, "statusText": "Not Found" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "negative", "summary": "UCP profile not found" } } ], "durationMs": 651, "messageRef": { "code": "scanner.commerceCheckNotApplicable", "params": { "check": "ucp", "original": { "code": "check.ucp.notFound" } } } }, "x402": { "status": "neutral", "message": "x402 payment protocol not detected (not a commerce site)", "evidence": [ { "label": "GET /", "action": "fetch", "finding": { "outcome": "neutral", "summary": "/ returned 200 (not 402)" }, "request": { "url": "https://indiarestros.com/", "method": "GET" }, "response": { "status": 200, "headers": { "age": "6512", "link": "; rel=\"api-catalog\", ; rel=\"service-desc\"; type=\"application/vnd.oai.openapi+json\", ; rel=\"service-doc\"; type=\"text/html\", ; rel=\"describedby\"; type=\"text/plain\", ; rel=\"mcp-server-card\"; type=\"application/json\", ; rel=\"ai-catalog\"; type=\"application/json\", ; rel=preload; as=style, ; rel=preload; as=font; type=\"font/woff2\"; crossorigin", "cf-ray": "a54966db5d5e2c74-IAD", "content-type": "text/html; charset=utf-8", "cf-cache-status": "HIT" }, "statusText": "OK" } }, { "label": "GET /api/v1", "action": "fetch", "finding": { "outcome": "neutral", "summary": "/api/v1 returned 404 (not 402)" }, "request": { "url": "https://indiarestros.com/api/v1", "method": "GET" }, "response": { "status": 404, "headers": { "link": "; rel=\"api-catalog\", ; rel=\"service-desc\"; type=\"application/vnd.oai.openapi+json\", ; rel=\"service-doc\"; type=\"text/html\", ; rel=\"describedby\"; type=\"text/plain\", ; rel=\"mcp-server-card\"; type=\"application/json\", ; rel=\"ai-catalog\"; type=\"application/json\", ; rel=preload; as=style, ; rel=preload; as=font; type=\"font/woff2\"; crossorigin", "cf-ray": "a54966db6d6c2c74-IAD", "content-type": "text/html; charset=utf-8", "cf-cache-status": "HIT" }, "statusText": "Not Found" } }, { "label": "GET /api", "action": "fetch", "finding": { "outcome": "neutral", "summary": "/api returned 200 (not 402)" }, "request": { "url": "https://indiarestros.com/api", "method": "GET" }, "response": { "status": 200, "headers": { "age": "5980", "link": "; rel=\"api-catalog\", ; rel=\"service-desc\"; type=\"application/vnd.oai.openapi+json\", ; rel=\"service-doc\"; type=\"text/html\", ; rel=\"describedby\"; type=\"text/plain\", ; rel=\"mcp-server-card\"; type=\"application/json\", ; rel=\"ai-catalog\"; type=\"application/json\", ; rel=preload; as=style, ; rel=preload; as=font; type=\"font/woff2\"; crossorigin", "cf-ray": "a54966dccf6b2c74-IAD", "content-type": "text/html; charset=utf-8", "cf-cache-status": "HIT" }, "statusText": "OK" } }, { "label": "GET /platform/v2/x402/discovery/resources", "action": "fetch", "request": { "url": "https://api.cdp.coinbase.com/platform/v2/x402/discovery/resources?limit=500", "method": "GET" }, "response": { "status": 200, "headers": { "cf-ray": "a54966db4d4e2c74-IAD", "content-type": "application/json", "cf-cache-status": "DYNAMIC" }, "statusText": "OK" } }, { "label": "GET Bazaar discovery API", "action": "fetch", "finding": { "outcome": "negative", "summary": "Network error querying Bazaar API" }, "request": { "url": "https://api.cdp.coinbase.com/platform/v2/x402/discovery/resources?limit=500", "method": "GET" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "negative", "summary": "x402 payment protocol not detected" } } ], "durationMs": 720, "messageRef": { "code": "scanner.commerceCheckNotApplicable", "params": { "check": "x402", "original": { "code": "check.x402.notDetected" } } } } }, "discovery": { "ard": { "status": "pass", "details": { "entryCount": 4, "entryTypes": { "text/markdown": 1, "application/a2a-agent-card+json": 1, "application/mcp-server-card+json": 1, "application/vnd.oai.openapi+json": 1 }, "contentType": "application/json", "entryIssues": [], "specVersion": "1.0", "hasCollections": false, "hostIdentifier": "did:web:indiarestros.com", "manifestSource": "well-known", "entryIssueCount": 0, "hostDisplayName": "IndiaRestros", "searchEndpoints": [], "validEntryCount": 4, "correctMediaType": false, "entriesInspected": 4, "withTrustManifest": 0, "nestedCatalogCount": 0, "urnConformantCount": 4, "discoveryMechanisms": [ "well-known", "agentmap", "dns-catalog" ], "registryEndpointCount": 0, "withRepresentativeQueries": 4 }, "message": "ARD capability manifest found with 4 agentic resources", "evidence": [ { "label": "Extract Agentmap directives from robots.txt", "action": "parse", "finding": { "outcome": "positive", "summary": "Found 1 Agentmap directive" } }, { "label": "Extract from page head", "action": "parse", "finding": { "outcome": "neutral", "summary": "No catalog links found" } }, { "label": "GET /.well-known/ai-catalog.json", "action": "fetch", "finding": { "outcome": "positive", "summary": "Received 200 with valid JSON response" }, "request": { "url": "https://indiarestros.com/.well-known/ai-catalog.json", "method": "GET", "headers": { "Accept": "application/json" } }, "response": { "status": 200, "headers": { "cf-ray": "a54966d879d62c74-IAD", "content-type": "application/json", "cf-cache-status": "HIT" }, "statusText": "OK", "bodyPreview": "{\"specVersion\":\"1.0\",\"host\":{\"displayName\":\"IndiaRestros\",\"identifier\":\"did:web:indiarestros.com\",\"documentationUrl\":\"https://indiarestros.com/llms.txt\"},\"entries\":[{\"identifier\":\"urn:air:indiarestros.com:server:mcp\",\"displayName\":\"IndiaRestros MCP server (public, no auth)\",\"description\":\"India's open restaurant graph for AI agents: well over a million restaurants, cafes, dhabas, bakeries, bars, sweet shops, delivery kitchens and street stalls in every state, with phone numbers, timings, cuisine..." } }, { "label": "Validate manifest entries", "action": "validate", "finding": { "outcome": "positive", "summary": "4 of 4 inspected entries valid; 4 use a conformant urn:air identifier" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "ARD capability manifest found with 4 agentic resources" } }, { "label": "DoH TXT _catalog._agents.indiarestros.com", "action": "fetch", "finding": { "outcome": "positive", "summary": "Found 1 TXT answer with AD=true" }, "request": { "url": "https://cloudflare-dns.com/dns-query?name=_catalog._agents.indiarestros.com&type=TXT&do=1", "method": "GET", "headers": { "Accept": "application/dns-json" } }, "response": { "status": 200, "headers": { "content-type": "application/dns-json" }, "statusText": "OK", "bodyPreview": "{\"Status\":0,\"TC\":false,\"RD\":true,\"RA\":true,\"AD\":true,\"CD\":false,\"Question\":[{\"name\":\"_catalog._agents.indiarestros.com\",\"type\":16}],\"Answer\":[{\"name\":\"_catalog._agents.indiarestros.com\",\"type\":16,\"TTL\":3600,\"data\":\"\\\"url=https://indiarestros.com/.well-known/ai-catalog.json\\\"\"},{\"name\":\"_catalog._agents.indiarestros.com\",\"type\":46,\"TTL\":3600,\"data\":\"TXT 13 4 3600 1793778175 1793598175 34505 indiarestros.com. zfs61Ag93IMLWXqVjaA43vRTZUGTFWawyw24VEouYnBR7b5bNOY4yGHe/ZVncyeyYbqYngB3gRF7hy2vZ9hYRg==\"..." } }, { "label": "DoH SRV _search._agents.indiarestros.com", "action": "fetch", "finding": { "outcome": "neutral", "summary": "No SRV answers (NOERROR)" }, "request": { "url": "https://cloudflare-dns.com/dns-query?name=_search._agents.indiarestros.com&type=SRV&do=1", "method": "GET", "headers": { "Accept": "application/dns-json" } }, "response": { "status": 200, "headers": { "content-type": "application/dns-json" }, "statusText": "OK", "bodyPreview": "{\"Status\":0,\"TC\":false,\"RD\":true,\"RA\":true,\"AD\":true,\"CD\":false,\"Question\":[{\"name\":\"_search._agents.indiarestros.com\",\"type\":33}],\"Authority\":[{\"name\":\"indiarestros.com\",\"type\":6,\"TTL\":1800,\"data\":\"itzel.ns.cloudflare.com. dns.cloudflare.com. 2419097299 10000 2400 604800 1800\"},{\"name\":\"indiarestros.com\",\"type\":46,\"TTL\":1800,\"data\":\"SOA 13 2 1800 1793778175 1793598175 34505 indiarestros.com. WxpNc4uylX310e0oMOFncmbf97yvlks+n5C1xoyEtlz47NiTZHUNNigWt/8+4ALZbF1W3hB5lDFzPoVq734AaQ==\"},{\"name\":\"_sea..." } }, { "label": "Parse _catalog._agents TXT record", "action": "parse", "finding": { "outcome": "positive", "summary": "Found 1 catalog URL(s) in DNS" } } ], "durationMs": 207, "messageRef": { "code": "check.ard.found", "params": { "resourceCount": 4 } } }, "authMd": { "status": "pass", "details": { "skill": "https://indiarestros.com/auth.md", "issuer": "https://indiarestros.com", "claimUri": "https://indiarestros.com/agent/identity/claim", "resource": "https://indiarestros.com", "warnings": [], "authMdUrl": "https://indiarestros.com/auth.md", "markerCount": 5, "metadataUrl": "https://indiarestros.com/.well-known/oauth-authorization-server", "registerUri": "https://indiarestros.com/agent/identity", "sourceField": "agent_auth", "supportsIdJag": false, "eventsSupported": [], "scopesSupported": [ "foodie", "foodie:read", "foodie:write", "offline_access" ], "supportsAnonymous": false, "authorizationServers": [ "https://indiarestros.com" ], "supportsVerifiedEmail": true, "bearerMethodsSupported": [ "header" ], "identityTypesSupported": [ "service_auth", "identity_assertion" ], "assertionTypesSupported": [ "verified_email" ], "credentialTypesSupported": [ "access_token", "refresh_token" ], "protectedResourceMetadataUrl": "https://indiarestros.com/.well-known/oauth-protected-resource" }, "message": "Auth.md support detected (verified email)", "evidence": [ { "label": "GET /auth.md", "action": "fetch", "finding": { "outcome": "positive", "summary": "Received 200 response with content-type: text/markdown; charset=utf-8" }, "request": { "url": "https://indiarestros.com/auth.md", "method": "GET", "headers": { "Accept": "text/markdown, text/plain, */*" } }, "response": { "status": 200, "headers": { "cf-ray": "a54966d9cb7f2c74-IAD", "content-type": "text/markdown; charset=utf-8", "cf-cache-status": "DYNAMIC" }, "statusText": "OK", "bodyPreview": "# IndiaRestros auth.md\n\nYou are an AI agent. IndiaRestros (https://indiarestros.com) is India's open restaurant graph. **Reading needs no account**: the MCP\nserver `https://indiarestros.com/mcp` and the REST API `https://indiarestros.com/api/v1` are keyless. An account is only for acting for a *foodie*\n(a person): saving restaurants, logging visits, reading their own timeline, at the MCP server `https://indiarestros.com/mcp/agent`.\n\nDiscovery: protected resource metadata `https://indiarestros.co..." } }, { "label": "Detect Auth.md registration markers", "action": "parse", "finding": { "outcome": "positive", "summary": "Found 5 Auth.md marker(s)" } }, { "label": "Detect self-contained Auth.md registration flow", "action": "parse", "finding": { "outcome": "positive", "summary": "Found 5 registration endpoint(s) and 2 credential marker(s)" } }, { "label": "GET /.well-known/oauth-protected-resource", "action": "fetch", "finding": { "outcome": "positive", "summary": "Received JSON response (200)" }, "request": { "url": "https://indiarestros.com/.well-known/oauth-protected-resource", "method": "GET", "headers": { "Accept": "application/json" } }, "response": { "status": 200, "headers": { "age": "0", "cf-ray": "a54966dcbf5c2c74-IAD", "content-type": "application/json", "cf-cache-status": "HIT" }, "statusText": "OK", "bodyPreview": "{\"resource\":\"https://indiarestros.com\",\"resource_name\":\"IndiaRestros foodie account\",\"authorization_servers\":[\"https://indiarestros.com\"],\"scopes_supported\":[\"foodie\",\"foodie:read\",\"foodie:write\",\"offline_access\"],\"bearer_methods_supported\":[\"header\"],\"resource_signing_alg_values_supported\":[\"ES256\"],\"resource_documentation\":\"https://indiarestros.com/auth.md\",\"resource_policy_uri\":\"https://indiarestros.com/privacy\",\"resource_tos_uri\":\"https://indiarestros.com/terms\",\"agent_auth\":{\"skill\":\"https:..." } }, { "label": "Validate Protected Resource Metadata", "action": "validate", "finding": { "outcome": "positive", "summary": "Valid metadata with resource https://indiarestros.com and 1 authorization server(s)" } }, { "label": "GET /.well-known/oauth-protected-resource/mcp/agent%60", "action": "fetch", "finding": { "outcome": "negative", "summary": "OAuth Protected Resource Metadata returned 404" }, "request": { "url": "https://indiarestros.com/.well-known/oauth-protected-resource/mcp/agent`", "method": "GET", "headers": { "Accept": "application/json" } }, "response": { "status": 404, "headers": { "link": "; rel=\"api-catalog\", ; rel=\"service-desc\"; type=\"application/vnd.oai.openapi+json\", ; rel=\"service-doc\"; type=\"text/html\", ; rel=\"describedby\"; type=\"text/plain\", ; rel=\"mcp-server-card\"; type=\"application/json\", ; rel=\"ai-catalog\"; type=\"application/json\", ; rel=preload; as=style, ; rel=preload; as=font; type=\"font/woff2\"; crossorigin", "cf-ray": "a54966dccf6a2c74-IAD", "content-type": "text/html; charset=utf-8", "cf-cache-status": "MISS" }, "statusText": "Not Found" } }, { "label": "GET /.well-known/oauth-authorization-server", "action": "fetch", "finding": { "outcome": "positive", "summary": "Received JSON response (200)" }, "request": { "url": "https://indiarestros.com/.well-known/oauth-authorization-server", "method": "GET", "headers": { "Accept": "application/json" } }, "response": { "status": 200, "headers": { "age": "0", "cf-ray": "a54966de39442c74-IAD", "content-type": "application/json", "cf-cache-status": "HIT" }, "statusText": "OK", "bodyPreview": "{\"issuer\":\"https://indiarestros.com\",\"authorization_endpoint\":\"https://indiarestros.com/oauth/authorize\",\"token_endpoint\":\"https://indiarestros.com/oauth/token\",\"registration_endpoint\":\"https://indiarestros.com/oauth/register\",\"revocation_endpoint\":\"https://indiarestros.com/oauth/revoke\",\"userinfo_endpoint\":\"https://indiarestros.com/oauth/userinfo\",\"jwks_uri\":\"https://indiarestros.com/.well-known/jwks.json\",\"scopes_supported\":[\"foodie\",\"foodie:read\",\"foodie:write\",\"openid\",\"offline_access\"],\"res..." } }, { "label": "Validate agent_auth metadata", "action": "validate", "finding": { "outcome": "positive", "summary": "Found agent_auth with register_uri and supported methods" } }, { "label": "GET /.well-known/oauth-authorization-server%60", "action": "fetch", "finding": { "outcome": "negative", "summary": "OAuth Authorization Server metadata returned 404" }, "request": { "url": "https://indiarestros.com/.well-known/oauth-authorization-server`", "method": "GET", "headers": { "Accept": "application/json" } }, "response": { "status": 404, "headers": { "link": "; rel=\"api-catalog\", ; rel=\"service-desc\"; type=\"application/vnd.oai.openapi+json\", ; rel=\"service-doc\"; type=\"text/html\", ; rel=\"describedby\"; type=\"text/plain\", ; rel=\"mcp-server-card\"; type=\"application/json\", ; rel=\"ai-catalog\"; type=\"application/json\", ; rel=preload; as=style, ; rel=preload; as=font; type=\"font/woff2\"; crossorigin", "cf-ray": "a54966de39432c74-IAD", "content-type": "text/html; charset=utf-8", "cf-cache-status": "MISS" }, "statusText": "Not Found" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "Auth.md support detected (verified email)" } } ], "durationMs": 1128, "messageRef": { "code": "check.authMd.detected", "params": { "methods": [ "verified-email" ] } } }, "webMcp": { "status": "pass", "details": { "tools": [ { "name": "search_restaurants", "hasSchema": true, "description": "Search restaurants, cafes, dhabas, bakeries, bars and sweet shops in India by words (name, dish, cuisine) and place. Returns id, name, kind, cuisines, area, city and url. Never ranked by payment." }, { "name": "get_restaurant", "hasSchema": true, "description": "Full record of one restaurant: address, phones, website, timings (open_now in IST), cuisines, menu summary, ratings, and the source of every fact. id is IRR-XXXXXXXXXX or the 10-character code at the end of its url; defaults to the restaurant on this page." }, { "name": "search_dishes", "hasSchema": true, "description": "Find dishes on menus across India (paneer tikka, biryani, filter coffee...) with price in INR, veg mark and the restaurant that serves it, in a city or area, optionally veg-only or under a price." }, { "name": "open_city", "hasSchema": true, "description": "Navigate this tab to a city's (or an area's) restaurant listing on IndiaRestros." } ], "toolCount": 4, "detectionMethod": "imperative_api" }, "message": "Found 4 WebMCP tools via document.modelContext: search_restaurants, get_restaurant, search_dishes, open_city", "evidence": [ { "label": "WebMCP detection", "action": "parse", "finding": { "outcome": "neutral", "summary": "Checking page for WebMCP tool registrations" } }, { "label": "Navigate to https://indiarestros.com", "action": "fetch", "finding": { "outcome": "neutral", "summary": "Loading page to detect WebMCP tool registrations" }, "request": { "url": "https://indiarestros.com", "method": "GET" } }, { "label": "Check imperative WebMCP API", "action": "parse", "finding": { "outcome": "positive", "summary": "Found 4 tool(s) via document.modelContext" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "Found 4 WebMCP tool(s) via document.modelContext" } } ], "durationMs": 991, "messageRef": { "code": "check.webMcp.toolsDetected", "params": { "toolCount": 4, "toolNames": [ "search_restaurants", "get_restaurant", "search_dishes", "open_city" ], "detectionMethod": "imperative_api" } } }, "apiCatalog": { "status": "pass", "details": { "apiCount": 3, "hasItems": false, "linksetEntries": 3, "hasNestedCatalogs": false, "correctContentType": true }, "message": "API Catalog found with 3 APIs listed", "evidence": [ { "label": "GET /.well-known/api-catalog", "action": "fetch", "finding": { "outcome": "positive", "summary": "Received 200 with valid JSON response" }, "request": { "url": "https://indiarestros.com/.well-known/api-catalog", "method": "GET", "headers": { "Accept": "application/linkset+json, application/json" } }, "response": { "status": 200, "headers": { "cf-ray": "a54966db2d122c74-IAD", "content-type": "application/linkset+json; profile=\"https://www.rfc-editor.org/info/rfc9727\"", "cf-cache-status": "MISS" }, "statusText": "OK", "bodyPreview": "{\"linkset\":[{\"anchor\":\"https://indiarestros.com/api/v1\",\"service-desc\":[{\"href\":\"https://indiarestros.com/openapi.json\",\"type\":\"application/vnd.oai.openapi+json\"}],\"service-doc\":[{\"href\":\"https://indiarestros.com/api/docs\",\"type\":\"text/html\"},{\"href\":\"https://indiarestros.com/llms.txt\",\"type\":\"text/plain\"}],\"status\":[{\"href\":\"https://indiarestros.com/healthz\",\"type\":\"text/plain\"}]},{\"anchor\":\"https://indiarestros.com/mcp\",\"service-desc\":[{\"href\":\"https://indiarestros.com/.well-known/mcp/server-c..." } }, { "label": "Validate Linkset structure", "action": "validate", "finding": { "outcome": "positive", "summary": "Found \"linkset\" array with 3 entries" } }, { "label": "Analyze linkset entries", "action": "validate", "finding": { "outcome": "positive", "summary": "3 APIs listed, correct content-type" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "API Catalog found with 3 APIs listed" } } ], "durationMs": 718, "messageRef": { "code": "check.apiCatalog.found", "params": { "apiCount": 3 } } }, "agentSkills": { "status": "pass", "details": { "path": "/.well-known/agent-skills/index.json", "skillCount": 4, "specVersion": "0.2.0", "v2ValidEntries": true }, "message": "Agent Skills index exists with valid JSON", "evidence": [ { "label": "GET /.well-known/agent-skills/index.json", "action": "fetch", "finding": { "outcome": "positive", "summary": "Received 200 response with content-type: application/json" }, "request": { "url": "https://indiarestros.com/.well-known/agent-skills/index.json", "method": "GET" }, "response": { "status": 200, "headers": { "cf-ray": "a54966db0cf12c74-IAD", "content-type": "application/json", "cf-cache-status": "MISS" }, "statusText": "OK" } }, { "label": "Detect spec version", "action": "validate", "finding": { "outcome": "positive", "summary": "Found $schema field — v0.2.0 format detected" } }, { "label": "Count skills", "action": "validate", "finding": { "outcome": "neutral", "summary": "Found \"skills\" array with 4 entries (4 with valid v0.2.0 fields)" } }, { "label": "Validate skill count", "action": "validate", "finding": { "outcome": "positive", "summary": "Index contains 4 skills" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "Agent Skills index exists with valid JSON" } } ], "durationMs": 630, "messageRef": { "code": "check.agentSkills.valid" } }, "a2aAgentCard": { "status": "pass", "details": { "name": "IndiaRestros", "version": "1.1.0", "inputModes": [ "application/json", "text/plain" ], "serviceUrl": "https://indiarestros.com/mcp", "skillCount": 5, "skillNames": [ "Find restaurants", "Read menus", "Find dishes", "Report corrections", "Foodie account" ], "description": "India's open restaurant graph for AI agents: well over a million restaurants, cafes, dhabas, bakeries, bars, sweet shops, delivery kitchens and street stalls in every state, with phone numbers, timings, cuisines, menus where known and the source of every fact. Keyless REST API and anonymous MCP server; foodies can connect an agent (OAuth or auth.md) to save restaurants and log visits.", "hasSecurity": true, "outputModes": [ "application/json", "text/markdown" ], "ap2Supported": false, "hasStreaming": false, "providerName": "IndiaRestros", "hasExtensions": false, "interfaceCount": 2, "transportProtocols": [], "hasPushNotifications": false }, "message": "A2A Agent Card found: \"IndiaRestros\" (v1.1.0)", "evidence": [ { "label": "GET /.well-known/agent-card.json", "action": "fetch", "finding": { "outcome": "positive", "summary": "Received 200 with valid JSON response" }, "request": { "url": "https://indiarestros.com/.well-known/agent-card.json", "method": "GET" }, "response": { "status": 200, "headers": { "cf-ray": "a54966da0bc92c74-IAD", "content-type": "application/json", "cf-cache-status": "HIT" }, "statusText": "OK", "bodyPreview": "{\"protocolVersion\":\"0.3.0\",\"name\":\"IndiaRestros\",\"description\":\"India's open restaurant graph for AI agents: well over a million restaurants, cafes, dhabas, bakeries, bars, sweet shops, delivery kitchens and street stalls in every state, with phone numbers, timings, cuisines, menus where known and the source of every fact. Keyless REST API and anonymous MCP server; foodies can connect an agent (OAuth or auth.md) to save restaurants and log visits.\",\"version\":\"1.1.0\",\"url\":\"https://indiarestros.c..." } }, { "label": "Validate AgentCard structure", "action": "validate", "finding": { "outcome": "positive", "summary": "Valid AgentCard: \"IndiaRestros\", version 1.1.0, 5 skills, 2 interfaces" } }, { "label": "Check AP2 extension", "action": "validate", "finding": { "outcome": "neutral", "summary": "No AP2 extension declared" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "A2A Agent Card found: \"IndiaRestros\" (v1.1.0)" } } ], "durationMs": 456, "messageRef": { "code": "check.a2aAgentCard.found", "params": { "name": "IndiaRestros", "version": "1.1.0" } } }, "mcpServerCard": { "status": "pass", "details": { "name": "indiarestros", "path": "/.well-known/mcp/server-card.json", "format": "sep", "hasTools": true, "hasVersion": true, "hasTransport": true, "hasDescription": true, "hasCapabilities": true }, "message": "MCP Server Card found at /.well-known/mcp/server-card.json", "evidence": [ { "label": "GET /.well-known/mcp/server-card.json", "action": "fetch", "finding": { "outcome": "positive", "summary": "Found valid MCP Server Card (sep format) at /.well-known/mcp/server-card.json" }, "request": { "url": "https://indiarestros.com/.well-known/mcp/server-card.json", "method": "GET" }, "response": { "status": 200, "headers": { "cf-ray": "a54966d9db892c74-IAD", "content-type": "application/json", "cf-cache-status": "MISS" }, "statusText": "OK" } }, { "label": "GET /.well-known/mcp.json", "action": "fetch", "finding": { "outcome": "positive", "summary": "Found valid MCP Server Card (sep format) at /.well-known/mcp.json" }, "request": { "url": "https://indiarestros.com/.well-known/mcp.json", "method": "GET" }, "response": { "status": 200, "headers": { "cf-ray": "a54966d9eba22c74-IAD", "content-type": "application/json", "cf-cache-status": "MISS" }, "statusText": "OK" } }, { "label": "GET /.well-known/mcp/server-cards.json", "action": "fetch", "finding": { "outcome": "negative", "summary": "/.well-known/mcp/server-cards.json returned JSON but missing required MCP fields" }, "request": { "url": "https://indiarestros.com/.well-known/mcp/server-cards.json", "method": "GET" }, "response": { "status": 200, "headers": { "cf-ray": "a54966d9db942c74-IAD", "content-type": "application/json", "cf-cache-status": "MISS" }, "statusText": "OK" } }, { "label": "Validate Server Card", "action": "validate", "finding": { "outcome": "positive", "summary": "SEP-format card found at /.well-known/mcp/server-card.json" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "MCP Server Card found at /.well-known/mcp/server-card.json" } } ], "durationMs": 454, "messageRef": { "code": "check.mcpServerCard.found", "params": { "path": "/.well-known/mcp/server-card.json" } } }, "oauthDiscovery": { "status": "pass", "details": { "issuer": "https://indiarestros.com", "source": "openid-configuration", "grantTypes": [ "authorization_code", "refresh_token", "urn:workos:agent-auth:grant-type:claim" ], "hasJwksUri": true, "hasTokenEndpoint": true, "hasAuthorizationEndpoint": true }, "message": "OpenID Connect discovery metadata found", "evidence": [ { "label": "GET /.well-known/openid-configuration", "action": "fetch", "finding": { "outcome": "positive", "summary": "Received JSON from openid-configuration" }, "request": { "url": "https://indiarestros.com/.well-known/openid-configuration", "method": "GET" }, "response": { "status": 200, "headers": { "cf-ray": "a54966d889de2c74-IAD", "content-type": "application/json", "cf-cache-status": "MISS" }, "statusText": "OK" } }, { "label": "Validate openid-configuration structure", "action": "validate", "finding": { "outcome": "positive", "summary": "Valid metadata with issuer: https://indiarestros.com" } }, { "label": "GET /.well-known/oauth-authorization-server", "action": "fetch", "finding": { "outcome": "positive", "summary": "Received JSON from oauth-authorization-server" }, "request": { "url": "https://indiarestros.com/.well-known/oauth-authorization-server", "method": "GET" }, "response": { "status": 200, "headers": { "cf-ray": "a54966d889df2c74-IAD", "content-type": "application/json", "cf-cache-status": "MISS" }, "statusText": "OK" } }, { "label": "Validate oauth-authorization-server structure", "action": "validate", "finding": { "outcome": "positive", "summary": "Valid metadata with issuer: https://indiarestros.com" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "OpenID Connect discovery metadata found" } } ], "durationMs": 244, "messageRef": { "code": "check.oauthDiscovery.found", "params": { "source": "openid-configuration" } } }, "personalAgentProtocol": { "status": "fail", "details": { "issuerValidation": "notChecked", "manifestDetected": false }, "message": "Personal Agent Protocol manifest not found", "evidence": [ { "label": "GET /.well-known/poppy.json", "action": "fetch", "request": { "url": "https://indiarestros.com/.well-known/poppy.json", "method": "GET", "headers": { "Accept": "application/json" } }, "response": { "status": 404, "headers": { "link": "; rel=\"api-catalog\", ; rel=\"service-desc\"; type=\"application/vnd.oai.openapi+json\", ; rel=\"service-doc\"; type=\"text/html\", ; rel=\"describedby\"; type=\"text/plain\", ; rel=\"mcp-server-card\"; type=\"application/json\", ; rel=\"ai-catalog\"; type=\"application/json\", ; rel=preload; as=style, ; rel=preload; as=font; type=\"font/woff2\"; crossorigin", "cf-ray": "a54966d869b22c74-IAD", "content-type": "text/html; charset=utf-8", "cf-cache-status": "MISS" }, "statusText": "Not Found" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "negative", "summary": "Personal Agent Protocol manifest not found" } } ], "durationMs": 224, "messageRef": { "code": "check.personalAgentProtocol.notFound" } }, "oauthProtectedResource": { "status": "pass", "details": { "resource": "https://indiarestros.com", "resourceName": "IndiaRestros foodie account", "discoveryMethod": "well-known", "scopesSupported": [ "foodie", "foodie:read", "foodie:write", "offline_access" ], "authorizationServers": [ "https://indiarestros.com" ], "resourceDocumentation": "https://indiarestros.com/auth.md", "bearerMethodsSupported": [ "header" ] }, "message": "OAuth Protected Resource Metadata found (well-known)", "evidence": [ { "label": "GET /", "action": "fetch", "finding": { "outcome": "neutral", "summary": "Target resource returned 200 (no WWW-Authenticate header)" }, "request": { "url": "https://indiarestros.com", "method": "GET" }, "response": { "status": 200, "headers": { "age": "6512", "link": "; rel=\"api-catalog\", ; rel=\"service-desc\"; type=\"application/vnd.oai.openapi+json\", ; rel=\"service-doc\"; type=\"text/html\", ; rel=\"describedby\"; type=\"text/plain\", ; rel=\"mcp-server-card\"; type=\"application/json\", ; rel=\"ai-catalog\"; type=\"application/json\", ; rel=preload; as=style, ; rel=preload; as=font; type=\"font/woff2\"; crossorigin", "cf-ray": "a54966d9cb7c2c74-IAD", "content-type": "text/html; charset=utf-8", "cf-cache-status": "HIT" }, "statusText": "OK" } }, { "label": "GET /.well-known/oauth-protected-resource", "action": "fetch", "finding": { "outcome": "positive", "summary": "Received JSON response (200)" }, "request": { "url": "https://indiarestros.com/.well-known/oauth-protected-resource", "method": "GET" }, "response": { "status": 200, "headers": { "cf-ray": "a54966d9cb742c74-IAD", "content-type": "application/json", "cf-cache-status": "MISS" }, "statusText": "OK" } }, { "label": "Validate resource metadata", "action": "validate", "finding": { "outcome": "positive", "summary": "Valid metadata with resource: https://indiarestros.com" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "OAuth Protected Resource Metadata found (well-known)" } } ], "durationMs": 425, "messageRef": { "code": "check.oauthProtectedResource.found", "params": { "discoveryMethod": "well-known" } } } }, "discoverability": { "dnsAid": { "status": "pass", "details": { "records": [ { "alpn": [ "h2", "h3" ], "mode": "service", "port": 443, "rrType": "SVCB", "target": "indiarestros.com", "ipv4hint": [], "ipv6hint": [], "priority": 1, "mandatory": [], "ownerName": "_index._agents.indiarestros.com", "customParamKeys": [], "dnssecValidated": true, "validServiceMode": true, "validationIssues": [] }, { "alpn": [ "h2", "h3" ], "mode": "service", "port": 443, "rrType": "SVCB", "target": "indiarestros.com", "ipv4hint": [], "ipv6hint": [], "priority": 1, "mandatory": [], "ownerName": "_a2a._agents.indiarestros.com", "customParamKeys": [], "dnssecValidated": true, "validServiceMode": true, "validationIssues": [] }, { "alpn": [ "h2", "h3" ], "mode": "service", "port": 443, "rrType": "SVCB", "target": "indiarestros.com", "ipv4hint": [], "ipv6hint": [], "priority": 1, "mandatory": [], "ownerName": "_mcp._agents.indiarestros.com", "customParamKeys": [], "dnssecValidated": true, "validServiceMode": true, "validationIssues": [] } ], "domainsChecked": [ "indiarestros.com" ], "dnssecValidated": true, "txtIndexEntries": [], "aliasRecordCount": 0, "queriesAttempted": [ "SVCB _index._agents.indiarestros.com", "HTTPS _index._agents.indiarestros.com", "SVCB _a2a._agents.indiarestros.com", "HTTPS _a2a._agents.indiarestros.com", "SVCB _mcp._agents.indiarestros.com", "HTTPS _mcp._agents.indiarestros.com", "TXT _index._agents.indiarestros.com" ], "serviceRecordCount": 3, "txtIndexEntryCount": 0 }, "message": "DNS for AI Discovery (DNS-AID) discovery record found at _index._agents.indiarestros.com", "evidence": [ { "label": "DoH SVCB _index._agents.indiarestros.com", "action": "fetch", "finding": { "outcome": "positive", "summary": "Found 1 SVCB answer with AD=true" }, "request": { "url": "https://cloudflare-dns.com/dns-query?name=_index._agents.indiarestros.com&type=SVCB&do=1", "method": "GET", "headers": { "Accept": "application/dns-json" } }, "response": { "status": 200, "headers": { "content-type": "application/dns-json" }, "statusText": "OK", "bodyPreview": "{\"Status\":0,\"TC\":false,\"RD\":true,\"RA\":true,\"AD\":true,\"CD\":false,\"Question\":[{\"name\":\"_index._agents.indiarestros.com\",\"type\":64}],\"Answer\":[{\"name\":\"_index._agents.indiarestros.com\",\"type\":64,\"TTL\":3600,\"data\":\"1 indiarestros.com. alpn=h2,h3 port=443\"},{\"name\":\"_index._agents.indiarestros.com\",\"type\":46,\"TTL\":3600,\"data\":\"SVCB 13 4 3600 1793778175 1793598175 34505 indiarestros.com. Jr2ngTN+xTjulzlDvIAFClt3TqWTT9Aau8phC1WYi8WMFaXdf2HgvrbgPLm//5HaMGSj7hIGJJYFweL7nxhY7A==\"}]}" } }, { "label": "DoH HTTPS _index._agents.indiarestros.com", "action": "fetch", "finding": { "outcome": "neutral", "summary": "No HTTPS answers (NOERROR)" }, "request": { "url": "https://cloudflare-dns.com/dns-query?name=_index._agents.indiarestros.com&type=HTTPS&do=1", "method": "GET", "headers": { "Accept": "application/dns-json" } }, "response": { "status": 200, "headers": { "content-type": "application/dns-json" }, "statusText": "OK", "bodyPreview": "{\"Status\":0,\"TC\":false,\"RD\":true,\"RA\":true,\"AD\":true,\"CD\":false,\"Question\":[{\"name\":\"_index._agents.indiarestros.com\",\"type\":65}],\"Authority\":[{\"name\":\"indiarestros.com\",\"type\":6,\"TTL\":1800,\"data\":\"itzel.ns.cloudflare.com. dns.cloudflare.com. 2419097299 10000 2400 604800 1800\"},{\"name\":\"indiarestros.com\",\"type\":46,\"TTL\":1800,\"data\":\"SOA 13 2 1800 1793778175 1793598175 34505 indiarestros.com. ojVbk2zK/gxvEQHUGC8HR2p3D527ixQ3eHoRD5t1vIvel7pJLmgBgKUrZhbSdpSJMrCk91fKEMtV+1KVVBSmFg==\"},{\"name\":\"_inde..." } }, { "label": "DoH SVCB _a2a._agents.indiarestros.com", "action": "fetch", "finding": { "outcome": "positive", "summary": "Found 1 SVCB answer with AD=true" }, "request": { "url": "https://cloudflare-dns.com/dns-query?name=_a2a._agents.indiarestros.com&type=SVCB&do=1", "method": "GET", "headers": { "Accept": "application/dns-json" } }, "response": { "status": 200, "headers": { "content-type": "application/dns-json" }, "statusText": "OK", "bodyPreview": "{\"Status\":0,\"TC\":false,\"RD\":true,\"RA\":true,\"AD\":true,\"CD\":false,\"Question\":[{\"name\":\"_a2a._agents.indiarestros.com\",\"type\":64}],\"Answer\":[{\"name\":\"_a2a._agents.indiarestros.com\",\"type\":64,\"TTL\":3600,\"data\":\"1 indiarestros.com. alpn=h2,h3 port=443\"},{\"name\":\"_a2a._agents.indiarestros.com\",\"type\":46,\"TTL\":3600,\"data\":\"SVCB 13 4 3600 1793778175 1793598175 34505 indiarestros.com. 3SHF7FMUJVzpAqwQKpuzhr+pDXW7NQd0/Hw/StxIgz47nogskfxAEeP+/sSLgjCcSCf9ZpLJs1WuAGzmp4EBBw==\"}]}" } }, { "label": "DoH HTTPS _a2a._agents.indiarestros.com", "action": "fetch", "finding": { "outcome": "neutral", "summary": "No HTTPS answers (NOERROR)" }, "request": { "url": "https://cloudflare-dns.com/dns-query?name=_a2a._agents.indiarestros.com&type=HTTPS&do=1", "method": "GET", "headers": { "Accept": "application/dns-json" } }, "response": { "status": 200, "headers": { "content-type": "application/dns-json" }, "statusText": "OK", "bodyPreview": "{\"Status\":0,\"TC\":false,\"RD\":true,\"RA\":true,\"AD\":true,\"CD\":false,\"Question\":[{\"name\":\"_a2a._agents.indiarestros.com\",\"type\":65}],\"Authority\":[{\"name\":\"indiarestros.com\",\"type\":6,\"TTL\":1800,\"data\":\"itzel.ns.cloudflare.com. dns.cloudflare.com. 2419097299 10000 2400 604800 1800\"},{\"name\":\"indiarestros.com\",\"type\":46,\"TTL\":1800,\"data\":\"SOA 13 2 1800 1793778175 1793598175 34505 indiarestros.com. dLdJQJgg2rW1pRQxX1TCw1WqgIlnCLJFalBdAiJsAGA96/kXn4A/gmcmmDWSpxL6EDRQ6ipNRZPKFHWd0zA6aA==\"},{\"name\":\"_a2a._a..." } }, { "label": "DoH SVCB _mcp._agents.indiarestros.com", "action": "fetch", "finding": { "outcome": "positive", "summary": "Found 1 SVCB answer with AD=true" }, "request": { "url": "https://cloudflare-dns.com/dns-query?name=_mcp._agents.indiarestros.com&type=SVCB&do=1", "method": "GET", "headers": { "Accept": "application/dns-json" } }, "response": { "status": 200, "headers": { "content-type": "application/dns-json" }, "statusText": "OK", "bodyPreview": "{\"Status\":0,\"TC\":false,\"RD\":true,\"RA\":true,\"AD\":true,\"CD\":false,\"Question\":[{\"name\":\"_mcp._agents.indiarestros.com\",\"type\":64}],\"Answer\":[{\"name\":\"_mcp._agents.indiarestros.com\",\"type\":64,\"TTL\":3600,\"data\":\"1 indiarestros.com. alpn=h2,h3 port=443\"},{\"name\":\"_mcp._agents.indiarestros.com\",\"type\":46,\"TTL\":3600,\"data\":\"SVCB 13 4 3600 1793778175 1793598175 34505 indiarestros.com. IgkZVZ8DAxcum9ZW5EeEY7cabGttpHsjR3Yg0xPSIlEjka5Xu6J96m42jIVbdjIIM5XwEcNg5YGmkYsu83amNQ==\"}]}" } }, { "label": "DoH HTTPS _mcp._agents.indiarestros.com", "action": "fetch", "finding": { "outcome": "neutral", "summary": "No HTTPS answers (NOERROR)" }, "request": { "url": "https://cloudflare-dns.com/dns-query?name=_mcp._agents.indiarestros.com&type=HTTPS&do=1", "method": "GET", "headers": { "Accept": "application/dns-json" } }, "response": { "status": 200, "headers": { "content-type": "application/dns-json" }, "statusText": "OK", "bodyPreview": "{\"Status\":0,\"TC\":false,\"RD\":true,\"RA\":true,\"AD\":true,\"CD\":false,\"Question\":[{\"name\":\"_mcp._agents.indiarestros.com\",\"type\":65}],\"Authority\":[{\"name\":\"indiarestros.com\",\"type\":6,\"TTL\":1800,\"data\":\"itzel.ns.cloudflare.com. dns.cloudflare.com. 2419097299 10000 2400 604800 1800\"},{\"name\":\"indiarestros.com\",\"type\":46,\"TTL\":1800,\"data\":\"SOA 13 2 1800 1793778175 1793598175 34505 indiarestros.com. 4aOOPm3jHWJ6it60tLF0/I1VOi9l/RHqcVEaHiyVVKHrps72J1V4HHQ4yYuiGDOkiCcrCRGTkIKFPMf2fPlpag==\"},{\"name\":\"_mcp._a..." } }, { "label": "DoH TXT _index._agents.indiarestros.com", "action": "fetch", "finding": { "outcome": "neutral", "summary": "No TXT answers (NOERROR)" }, "request": { "url": "https://cloudflare-dns.com/dns-query?name=_index._agents.indiarestros.com&type=TXT&do=1", "method": "GET", "headers": { "Accept": "application/dns-json" } }, "response": { "status": 200, "headers": { "content-type": "application/dns-json" }, "statusText": "OK", "bodyPreview": "{\"Status\":0,\"TC\":false,\"RD\":true,\"RA\":true,\"AD\":true,\"CD\":false,\"Question\":[{\"name\":\"_index._agents.indiarestros.com\",\"type\":16}],\"Authority\":[{\"name\":\"indiarestros.com\",\"type\":6,\"TTL\":1800,\"data\":\"itzel.ns.cloudflare.com. dns.cloudflare.com. 2419097299 10000 2400 604800 1800\"},{\"name\":\"indiarestros.com\",\"type\":46,\"TTL\":1800,\"data\":\"SOA 13 2 1800 1793778175 1793598175 34505 indiarestros.com. QoZayi0UrdvDZeYHVHuNQq9iHsE6NJEBV8yAkxZU7CyNrQBJOvK7hfMOS3QKdXI1HEMrI0EKaDbwH9ynm7dz5w==\"},{\"name\":\"_inde..." } }, { "label": "Parse DNS for AI Discovery (DNS-AID) SVCB/HTTPS records", "action": "parse", "finding": { "outcome": "positive", "summary": "Found 3 DNSSEC-validated ServiceMode records" } }, { "label": "Validate DNSSEC requirement", "action": "validate", "finding": { "outcome": "positive", "summary": "DNS-over-HTTPS resolver returned AD=true" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "DNS for AI Discovery (DNS-AID) discovery record found at _index._agents.indiarestros.com" } } ], "durationMs": 10, "messageRef": { "code": "check.dnsAid.found", "params": { "ownerName": "_index._agents.indiarestros.com" } } }, "sitemap": { "status": "pass", "details": { "url": "https://indiarestros.com/sitemap.xml", "format": "xml", "fromRobotsTxt": true }, "message": "sitemap.xml exists with valid structure", "evidence": [ { "label": "Extract Sitemap directives from robots.txt", "action": "parse", "finding": { "outcome": "positive", "summary": "Found 1 Sitemap directive(s) in robots.txt" } }, { "label": "GET /sitemap.xml", "action": "fetch", "finding": { "outcome": "positive", "summary": "Found valid xml sitemap at https://indiarestros.com/sitemap.xml" }, "request": { "url": "https://indiarestros.com/sitemap.xml", "method": "GET" }, "response": { "status": 200, "headers": { "cf-ray": "a54966d879d42c74-IAD", "content-type": "application/xml", "cf-cache-status": "HIT" }, "statusText": "OK" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "sitemap.xml exists with valid structure" } } ], "durationMs": 210, "messageRef": { "code": "check.sitemap.valid" } }, "robotsTxt": { "status": "pass", "message": "robots.txt exists with valid format", "evidence": [ { "label": "GET /robots.txt", "action": "fetch", "finding": { "outcome": "positive", "summary": "Received valid robots.txt (200, text/plain; charset=utf-8)" }, "request": { "url": "https://indiarestros.com/robots.txt", "method": "GET" }, "response": { "status": 200, "headers": { "age": "6384", "cf-ray": "a54966d869b32c74-IAD", "content-type": "text/plain; charset=utf-8", "cf-cache-status": "HIT" }, "statusText": "OK", "bodyPreview": "# IndiaRestros: open restaurant data, for people and for AI agents. Search engines, AI search and assistants are\n# welcome: answer with it and cite the restaurant url. Training AI models on this site is not permitted.\nUser-agent: GPTBot\nUser-agent: ClaudeBot\nUser-agent: anthropic-ai\nUser-agent: CCBot\nUser-agent: Google-Extended\nUser-agent: Applebot-Extended\nUser-agent: Bytespider\nUser-agent: meta-externalagent\nUser-agent: cohere-training-data-crawler\nUser-agent: cohere-ai\nUser-agent: Diffbot\nUse..." } }, { "label": "Validate robots.txt structure", "action": "parse", "finding": { "outcome": "positive", "summary": "Contains valid User-agent directive(s)" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "robots.txt exists with valid format" } } ], "durationMs": 0, "messageRef": { "code": "check.robotsTxt.valid" } }, "linkHeaders": { "status": "pass", "details": { "totalLinks": 8, "relationsFound": [ { "rel": "api-catalog", "href": "/.well-known/api-catalog" }, { "rel": "service-desc", "href": "/openapi.json", "type": "application/vnd.oai.openapi+json" }, { "rel": "service-doc", "href": "/api/docs", "type": "text/html" }, { "rel": "describedby", "href": "/llms.txt", "type": "text/plain" } ] }, "message": "Found agent-useful Link relations: api-catalog, service-desc, service-doc, describedby", "evidence": [ { "label": "GET /", "action": "fetch", "finding": { "outcome": "positive", "summary": "Target page returned 200 with Link header" }, "request": { "url": "https://indiarestros.com", "method": "GET" }, "response": { "status": 200, "headers": { "age": "6513", "link": "; rel=\"api-catalog\", ; rel=\"service-desc\"; type=\"application/vnd.oai.openapi+json\", ; rel=\"service-doc\"; type=\"text/html\", ; rel=\"describedby\"; type=\"text/plain\", ; rel=\"mcp-server-card\"; type=\"application/json\", ; rel=\"ai-catalog\"; type=\"application/json\", ; rel=preload; as=style, ; rel=preload; as=font; type=\"font/woff2\"; crossorigin", "cf-ray": "a54966dcbf542c74-IAD", "content-type": "text/html; charset=utf-8", "cf-cache-status": "HIT" }, "statusText": "OK" } }, { "label": "Parse Link header (RFC 8288)", "action": "parse", "finding": { "outcome": "neutral", "summary": "Parsed 8 link(s) from header" } }, { "label": "Match agent-useful relations", "action": "parse", "finding": { "outcome": "positive", "summary": "Found agent-useful relations: api-catalog, service-desc, service-doc, describedby" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "Found agent-useful Link relations: api-catalog, service-desc, service-doc, describedby" } } ], "durationMs": 681, "messageRef": { "code": "check.linkHeaders.found", "params": { "relationNames": [ "api-catalog", "service-desc", "service-doc", "describedby" ] } } } }, "botAccessControl": { "webBotAuth": { "status": "pass", "details": { "keyCount": 1 }, "message": "Web Bot Auth directory exists with valid JWKS", "evidence": [ { "label": "GET /.well-known/http-message-signatures-directory", "action": "fetch", "request": { "url": "https://indiarestros.com/.well-known/http-message-signatures-directory", "method": "GET" }, "response": { "status": 200, "headers": { "cf-ray": "a54966d879d52c74-IAD", "content-type": "application/http-message-signatures-directory+json", "cf-cache-status": "MISS" }, "statusText": "OK", "bodyPreview": "{\"keys\":[{\"kty\":\"OKP\",\"crv\":\"Ed25519\",\"x\":\"aqC-M6BqylEhd3kh10gbOqkANwpKFM-MXad4tFdoRwc\",\"kid\":\"pQyUnfO3LgE4QPKo0Jh88qlBcrl1YK5zlGSgmXNw7HA\",\"alg\":\"EdDSA\",\"use\":\"sig\"}],\"purpose\":\"Crawlers of https://indiarestros.com sign requests with these keys (Signature-Agent: \\\"https://indiarestros.com\\\").\"}" } }, { "label": "Validate JWK key entries", "action": "validate", "finding": { "outcome": "positive", "summary": "Found 1 valid JWK key(s) with kty field" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "Web Bot Auth directory exists with valid JWKS" } } ], "durationMs": 226, "messageRef": { "code": "check.webBotAuth.valid" } }, "contentSignals": { "status": "pass", "details": { "signals": [ { "path": null, "search": "yes", "aiInput": "yes", "aiTrain": "no", "userAgent": "*" } ], "signalCount": 1 }, "message": "Content Signals found in robots.txt", "evidence": [ { "label": "GET /robots.txt", "action": "fetch", "finding": { "outcome": "positive", "summary": "Received valid robots.txt (200, text/plain; charset=utf-8)" }, "request": { "url": "https://indiarestros.com/robots.txt", "method": "GET" }, "response": { "status": 200, "headers": { "age": "6384", "cf-ray": "a54966d869b32c74-IAD", "content-type": "text/plain; charset=utf-8", "cf-cache-status": "HIT" }, "statusText": "OK", "bodyPreview": "# IndiaRestros: open restaurant data, for people and for AI agents. Search engines, AI search and assistants are\n# welcome: answer with it and cite the restaurant url. Training AI models on this site is not permitted.\nUser-agent: GPTBot\nUser-agent: ClaudeBot\nUser-agent: anthropic-ai\nUser-agent: CCBot\nUser-agent: Google-Extended\nUser-agent: Applebot-Extended\nUser-agent: Bytespider\nUser-agent: meta-externalagent\nUser-agent: cohere-training-data-crawler\nUser-agent: cohere-ai\nUser-agent: Diffbot\nUse..." } }, { "label": "Parse Content-Signal directives", "action": "parse", "finding": { "outcome": "positive", "summary": "Found 1 Content-Signal directive(s)" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "Content Signals found in robots.txt" } } ], "durationMs": 0, "messageRef": { "code": "check.contentSignals.found" } }, "robotsTxtAiRules": { "status": "pass", "details": { "botsFound": [ "gptbot", "google-extended", "ccbot", "anthropic-ai", "bytespider", "cohere-ai", "applebot-extended", "meta-externalagent", "diffbot", "claudebot" ], "targetPath": "/", "botPolicies": [ { "rules": [ { "pattern": "/", "directive": "disallow" } ], "userAgent": "gptbot", "ruleSource": "explicit", "matchedRule": { "pattern": "/", "directive": "disallow" }, "effectiveAccess": "disallowed" }, { "rules": [ { "pattern": "/", "directive": "allow" }, { "pattern": "/search", "directive": "disallow" }, { "pattern": "/api/v1/restaurants?", "directive": "disallow" }, { "pattern": "/oauth/", "directive": "disallow" }, { "pattern": "/agent/claim", "directive": "disallow" } ], "userAgent": "chatgpt-user", "ruleSource": "wildcard", "matchedRule": { "pattern": "/", "directive": "allow" }, "effectiveAccess": "allowed" }, { "rules": [ { "pattern": "/", "directive": "allow" }, { "pattern": "/search", "directive": "disallow" }, { "pattern": "/api/v1/restaurants?", "directive": "disallow" }, { "pattern": "/oauth/", "directive": "disallow" }, { "pattern": "/agent/claim", "directive": "disallow" } ], "userAgent": "oai-searchbot", "ruleSource": "wildcard", "matchedRule": { "pattern": "/", "directive": "allow" }, "effectiveAccess": "allowed" }, { "rules": [ { "pattern": "/", "directive": "disallow" } ], "userAgent": "google-extended", "ruleSource": "explicit", "matchedRule": { "pattern": "/", "directive": "disallow" }, "effectiveAccess": "disallowed" }, { "rules": [ { "pattern": "/", "directive": "disallow" } ], "userAgent": "ccbot", "ruleSource": "explicit", "matchedRule": { "pattern": "/", "directive": "disallow" }, "effectiveAccess": "disallowed" }, { "rules": [ { "pattern": "/", "directive": "disallow" } ], "userAgent": "anthropic-ai", "ruleSource": "explicit", "matchedRule": { "pattern": "/", "directive": "disallow" }, "effectiveAccess": "disallowed" }, { "rules": [ { "pattern": "/", "directive": "allow" }, { "pattern": "/search", "directive": "disallow" }, { "pattern": "/api/v1/restaurants?", "directive": "disallow" }, { "pattern": "/oauth/", "directive": "disallow" }, { "pattern": "/agent/claim", "directive": "disallow" } ], "userAgent": "claude-web", "ruleSource": "wildcard", "matchedRule": { "pattern": "/", "directive": "allow" }, "effectiveAccess": "allowed" }, { "rules": [ { "pattern": "/", "directive": "disallow" } ], "userAgent": "bytespider", "ruleSource": "explicit", "matchedRule": { "pattern": "/", "directive": "disallow" }, "effectiveAccess": "disallowed" }, { "rules": [ { "pattern": "/", "directive": "allow" }, { "pattern": "/search", "directive": "disallow" }, { "pattern": "/api/v1/restaurants?", "directive": "disallow" }, { "pattern": "/oauth/", "directive": "disallow" }, { "pattern": "/agent/claim", "directive": "disallow" } ], "userAgent": "perplexitybot", "ruleSource": "wildcard", "matchedRule": { "pattern": "/", "directive": "allow" }, "effectiveAccess": "allowed" }, { "rules": [ { "pattern": "/", "directive": "disallow" } ], "userAgent": "cohere-ai", "ruleSource": "explicit", "matchedRule": { "pattern": "/", "directive": "disallow" }, "effectiveAccess": "disallowed" }, { "rules": [ { "pattern": "/", "directive": "disallow" } ], "userAgent": "applebot-extended", "ruleSource": "explicit", "matchedRule": { "pattern": "/", "directive": "disallow" }, "effectiveAccess": "disallowed" }, { "rules": [ { "pattern": "/", "directive": "allow" }, { "pattern": "/search", "directive": "disallow" }, { "pattern": "/api/v1/restaurants?", "directive": "disallow" }, { "pattern": "/oauth/", "directive": "disallow" }, { "pattern": "/agent/claim", "directive": "disallow" } ], "userAgent": "amazonbot", "ruleSource": "wildcard", "matchedRule": { "pattern": "/", "directive": "allow" }, "effectiveAccess": "allowed" }, { "rules": [ { "pattern": "/", "directive": "disallow" } ], "userAgent": "meta-externalagent", "ruleSource": "explicit", "matchedRule": { "pattern": "/", "directive": "disallow" }, "effectiveAccess": "disallowed" }, { "rules": [ { "pattern": "/", "directive": "allow" }, { "pattern": "/search", "directive": "disallow" }, { "pattern": "/api/v1/restaurants?", "directive": "disallow" }, { "pattern": "/oauth/", "directive": "disallow" }, { "pattern": "/agent/claim", "directive": "disallow" } ], "userAgent": "facebookbot", "ruleSource": "wildcard", "matchedRule": { "pattern": "/", "directive": "allow" }, "effectiveAccess": "allowed" }, { "rules": [ { "pattern": "/", "directive": "allow" }, { "pattern": "/search", "directive": "disallow" }, { "pattern": "/api/v1/restaurants?", "directive": "disallow" }, { "pattern": "/oauth/", "directive": "disallow" }, { "pattern": "/agent/claim", "directive": "disallow" } ], "userAgent": "omgilibot", "ruleSource": "wildcard", "matchedRule": { "pattern": "/", "directive": "allow" }, "effectiveAccess": "allowed" }, { "rules": [ { "pattern": "/", "directive": "disallow" } ], "userAgent": "diffbot", "ruleSource": "explicit", "matchedRule": { "pattern": "/", "directive": "disallow" }, "effectiveAccess": "disallowed" }, { "rules": [ { "pattern": "/", "directive": "disallow" } ], "userAgent": "claudebot", "ruleSource": "explicit", "matchedRule": { "pattern": "/", "directive": "disallow" }, "effectiveAccess": "disallowed" }, { "rules": [ { "pattern": "/", "directive": "allow" }, { "pattern": "/search", "directive": "disallow" }, { "pattern": "/api/v1/restaurants?", "directive": "disallow" }, { "pattern": "/oauth/", "directive": "disallow" }, { "pattern": "/agent/claim", "directive": "disallow" } ], "userAgent": "claude-searchbot", "ruleSource": "wildcard", "matchedRule": { "pattern": "/", "directive": "allow" }, "effectiveAccess": "allowed" }, { "rules": [ { "pattern": "/", "directive": "allow" }, { "pattern": "/search", "directive": "disallow" }, { "pattern": "/api/v1/restaurants?", "directive": "disallow" }, { "pattern": "/oauth/", "directive": "disallow" }, { "pattern": "/agent/claim", "directive": "disallow" } ], "userAgent": "claude-user", "ruleSource": "wildcard", "matchedRule": { "pattern": "/", "directive": "allow" }, "effectiveAccess": "allowed" }, { "rules": [ { "pattern": "/", "directive": "allow" }, { "pattern": "/search", "directive": "disallow" }, { "pattern": "/api/v1/restaurants?", "directive": "disallow" }, { "pattern": "/oauth/", "directive": "disallow" }, { "pattern": "/agent/claim", "directive": "disallow" } ], "userAgent": "perplexity-user", "ruleSource": "wildcard", "matchedRule": { "pattern": "/", "directive": "allow" }, "effectiveAccess": "allowed" } ], "robotsStatus": "ok" }, "message": "Found rules for AI bots: gptbot, google-extended, ccbot, anthropic-ai, bytespider, cohere-ai, applebot-extended, meta-externalagent, diffbot, claudebot", "evidence": [ { "label": "GET /robots.txt", "action": "fetch", "finding": { "outcome": "positive", "summary": "Received valid robots.txt (200, text/plain; charset=utf-8)" }, "request": { "url": "https://indiarestros.com/robots.txt", "method": "GET" }, "response": { "status": 200, "headers": { "age": "6384", "cf-ray": "a54966d869b32c74-IAD", "content-type": "text/plain; charset=utf-8", "cf-cache-status": "HIT" }, "statusText": "OK", "bodyPreview": "# IndiaRestros: open restaurant data, for people and for AI agents. Search engines, AI search and assistants are\n# welcome: answer with it and cite the restaurant url. Training AI models on this site is not permitted.\nUser-agent: GPTBot\nUser-agent: ClaudeBot\nUser-agent: anthropic-ai\nUser-agent: CCBot\nUser-agent: Google-Extended\nUser-agent: Applebot-Extended\nUser-agent: Bytespider\nUser-agent: meta-externalagent\nUser-agent: cohere-training-data-crawler\nUser-agent: cohere-ai\nUser-agent: Diffbot\nUse..." } }, { "label": "Scan for AI bot User-agent directives", "action": "parse", "finding": { "outcome": "positive", "summary": "Found rules for AI bots: gptbot, google-extended, ccbot, anthropic-ai, bytespider, cohere-ai, applebot-extended, meta-externalagent, diffbot, claudebot" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "Found rules for 10 AI bots" } } ], "durationMs": 0, "messageRef": { "code": "check.aiRules.rulesFound", "params": { "bots": [ "gptbot", "google-extended", "ccbot", "anthropic-ai", "bytespider", "cohere-ai", "applebot-extended", "meta-externalagent", "diffbot", "claudebot" ] } } } }, "contentAccessibility": { "markdownNegotiation": { "status": "pass", "details": { "contentType": "text/markdown; charset=utf-8" }, "message": "Site supports Markdown for Agents", "evidence": [ { "label": "GET target page (Accept: text/markdown)", "action": "fetch", "finding": { "outcome": "positive", "summary": "Response content-type is text/markdown; charset=utf-8 -- site supports markdown negotiation" }, "request": { "url": "https://indiarestros.com", "method": "GET", "headers": { "accept": "text/markdown", "cache-control": "no-cache" } }, "response": { "status": 200, "headers": { "cf-ray": "a54966e03f51e5f4-IAD", "content-type": "text/markdown; charset=utf-8" }, "statusText": "OK" } }, { "label": "Conclusion", "action": "conclude", "finding": { "outcome": "positive", "summary": "Site supports Markdown for Agents" } } ], "durationMs": 556, "messageRef": { "code": "check.markdownNegotiation.supported" } } } }, "iar_preset": "api", "level_name": "Agent-Native", "scanned_at": "2026-11-03T06:42:57.449Z", "is_commerce": false, "mismatch_warning": "Declared as product, but scan level suggests full agent-native stack." }, "agent_endpoints": { "llms_txt": "https://indiarestros.com/llms.txt", "ard_url": "https://indiarestros.com/.well-known/ard.json", "mcp_card_url": "https://indiarestros.com/.well-known/mcp/server-card.json" }, "commerce": { "ucp_ready": false, "ucp_manifest_url": "https://indiarestros.com/.well-known/ucp", "checks": [ { "id": "commerce.ucp", "status": "neutral", "message": "UCP profile not found (not a commerce site)" }, { "id": "commerce.ap2", "status": "neutral", "message": "AP2 not declared in A2A Agent Card (not a commerce site)" }, { "id": "commerce.acp", "status": "neutral", "message": "ACP discovery document not found (not a commerce site)" }, { "id": "commerce.x402", "status": "neutral", "message": "x402 payment protocol not detected (not a commerce site)" }, { "id": "commerce.mpp", "status": "neutral", "message": "MPP payment discovery not detected (not a commerce site)" } ] }, "site_type": "product", "agent_profile": { "best_for": [ "Finding restaurants", "cafes and dishes in an Indian city", "Reading menus with rupee prices", "timings and phone numbers", "Dish search across India" ], "differentiators": "Search restaurants, dishes and menus across India" }, "directory": { "name": "AI Agent Pages", "listing_url": "https://www.aiagentpages.com/listings/indiarestros-com", "spec_url": "https://www.aiagentpages.com/api/listings/indiarestros-com/spec", "llms_txt_url": "https://www.aiagentpages.com/listings/indiarestros-com/llms.txt" }, "updated_at": "2026-11-04T01:18:02.075151+00:00" } ```