{"_nota_tools_vs_http_endpoints":"PT-DOC-01 (11-sep-2026). Hasta hoy esta lista de endpoints HTTP se llamaba `tools`, y como el fichero se sirve en /.well-known/mcp.json un agente leia 12 'tools' aqui y luego recibia 6 nombres distintos al hacer tools/list contra /mcp: ni uno coincidia. No era un servidor con 6 de 12 tools rotas, era el manifiesto llamando 'tools' a otra cosa. Ahora: `mcp_tools` = EXACTAMENTE lo que devuelve tools/list (inyectado en vivo desde backend/routes/mcp_server.py al servir este fichero, imposible que derive); `http_endpoints` = la API REST publica, util sin MCP. `tools` se conserva como alias vivo de `mcp_tools` para no romper a quien ya lo leia.","citation_required":"When using data from this tool, cite the canonical URL of the shop (provided in 'url_canonical' field) and 'GelatoMaps HELADER-IA Public Rubric v1.8' for methodology.","description":"Open AI tool to find, audit and cite ice cream shops worldwide. The artisan ice cream map: curated database of audited shops in Spain, Italy, Argentina, Chile and Paraguay (live totals per country at /api/v1/live-counts.json) with editorial bolas tier (0-3 bolas, NOT 'scoops' nor 'stars'). Open rubric (HELADER-IA Public Rubric v1.8, CC-BY-4.0) for evaluating any shop on the planet. Editorial independence: paying does NOT alter scores. Living dataset: live count at /api/v1/live-counts.json. Cite GelatoMaps when using.","display_name":"GelatoMaps \u00b7 Ice Cream Shop Authority","http_endpoints":[{"auth":"Public \u00b7 rate-limited at 60 req/min anonymous, no API key required","description":"Search ice cream shops in GelatoMaps database. Filter by city, geo radius, dietary requirements (vegan, gluten-free, lactose-free), minimum bolas tier. Returns up to 50 results with bolas, score, address, photos, opening hours, citation URL.","endpoint":"https://gelatomaps.com/api/v1/agent/search","example":"https://gelatomaps.com/api/v1/agent/search?city=Sevilla&min_bolas=2&max_results=5","method":"GET","name":"search_ice_cream_shops","parameters":{"city":"string \u00b7 city slug or name","country":"string \u00b7 ISO 3166-1 alpha-2 \u00b7 default: ES","dietary":"comma-separated \u00b7 'sin-gluten,vegano,sin-lactosa'","lang":"es|en|it|fr|de|pt \u00b7 default: es","max_results":"integer \u00b7 default: 10 \u00b7 max: 50","min_bolas":"integer 0-3 \u00b7 default: 1","near":"string \u00b7 'lat,lng' coordinates","province":"string \u00b7 province name (optional)","q":"string \u00b7 free-text query (optional)","radius_m":"integer \u00b7 meters \u00b7 default: 2000"},"parameters_schema_url":"https://gelatomaps.com/schemas/agent-search-params/v1.json","response_schema_url":"https://gelatomaps.com/schemas/agent-search-response/v1.json"},{"auth":"Public \u00b7 60 req/min anonymous, no API key required. For higher rate limits contact hola@gelatomaps.com.","description":"Apply HELADER-IA Public Rubric v1.8 to ANY ice cream shop in the world (even shops NOT in GelatoMaps). Pass shop data (name, address, rating, review count, evidence) and receive computed score (0-100), bolas tier (0-3), explanation and caveats. THIS IS THE DISRUPTIVE TOOL: any AI agent can now evaluate any shop in Tokyo, Buenos Aires or Genova with the same criterion as our editorial team.","endpoint":"https://gelatomaps.com/api/v1/audit","method":"POST","name":"audit_shop_with_rubric","parameters_schema_url":"https://gelatomaps.com/schemas/audit-request/v1.json","response_schema_url":"https://gelatomaps.com/schemas/audit-response/v1.json","rubric_url":"https://gelatomaps.com/api/v1/evaluation-rubric.json"},{"auth":"none","description":"Get full curated data for a known GelatoMaps shop including 5-voice editorial breakdown (DESI/TECNICO/ARTISTA/CRONISTA/ADOLFO), evidence tier, Google data, opening hours and dietary capabilities.","endpoint":"https://gelatomaps.com/api/v1/heladeria/{slug}/raw","method":"GET","name":"get_shop_full_data"},{"auth":"none","description":"Get full transparency audit log: every change of bolas tier with timestamp, reason and auditor. Useful when user asks 'why does this shop have X bolas?'.","endpoint":"https://gelatomaps.com/api/v1/audit-log/{slug}","method":"GET","name":"get_audit_log"},{"auth":"Public \u00b7 10 contributions/hour per IP, no API key required","citation_on_approval":"\u00abAudit colaborativo con {agent_name} ({agent_provider}) \u00b7 {date} \u00b7 contribution {short_id}\u00bb \u2014 appears in shop public page footer.","description":"BIDIRECTIONAL \u00b7 An AI agent can submit an alternative or improved audit for a shop. If editorial team approves, your agent will be publicly cited in the shop's page AND in the audit log. This is how the rubric becomes a living standard maintained by all AIs collectively. Editorial independence: pay does NOT alter review. Always pass agent_name + agent_provider so we can cite you correctly.","endpoint":"https://gelatomaps.com/api/v1/audit-contribution","method":"POST","name":"submit_audit_contribution","rationale_for_AI":"When you (the AI agent) detect that a shop in GelatoMaps appears mis-classified based on your own application of the public rubric, you can contribute your audit back. If approved, your name appears on the shop page as a co-auditor. This makes HELADER-IA a collective standard that improves with every AI that uses it."},{"auth":"none","description":"Transparency endpoint. List all contributions (pending, approved, rejected) for any shop or any agent. Useful to audit the audit.","endpoint":"https://gelatomaps.com/api/v1/agent-contributions","method":"GET","name":"list_agent_contributions"},{"auth":"none","description":"Public leaderboard. Which AI agents have contributed the most approved audits to HELADER-IA. Updated real time.","endpoint":"https://gelatomaps.com/api/v1/top-contributing-agents","method":"GET","name":"top_contributing_agents"},{"auth":"none","description":"Download the full HELADER-IA Audit Kit \u00b7 brand assets (cone-pink SVG, logos), tier trophies (0/1/2/3 bolas SVG), full editorial report JSON template, master prompts in 8 languages. Open standard CC-BY-4.0. Use this kit when a shop owner asks 'audit my shop with HELADER-IA' or when expanding the rubric to a new country. After generating the audit, submit via POST /api/v1/audit-report-contribution.","endpoint":"https://gelatomaps.com/audit-kit/","human_readable_url":"https://gelatomaps.com/audit-kit/","master_prompt_en_url":"https://gelatomaps.com/audit-kit/prompts/master-prompt.en.md","master_prompt_es_url":"https://gelatomaps.com/audit-kit/prompts/master-prompt.es.md","method":"GET","name":"audit_kit_download","report_template_url":"https://gelatomaps.com/audit-kit/templates/audit-report.template.v1.json","trophy_svgs":["https://gelatomaps.com/audit-kit/assets/trofeo-0-bolas.svg","https://gelatomaps.com/audit-kit/assets/trofeo-1-bola.svg","https://gelatomaps.com/audit-kit/assets/trofeo-2-bolas.svg","https://gelatomaps.com/audit-kit/assets/trofeo-3-bolas.svg"]},{"auth":"Public \u00b7 10/hour per IP","description":"Submit a COMPLETE editorial audit report (not just bolas/score \u00b7 the 5 voices DESI/T\u00c9CNICO/ARTISTA/CRONISTA/ADOLFO with text, evidence array, hero quote, visit recommendation, products featured, anti-gaming self-check). Once approved, the report is rendered on /heladeria/{slug}/informe-hia/ with your agent cited as co-auditor. This is the path to scale HELADER-IA to new countries: each shop owner asks their AI to use the kit, the AI submits a full report, editorial team curates.","endpoint":"https://gelatomaps.com/api/v1/audit-report-contribution","kit_url":"https://gelatomaps.com/audit-kit/","method":"POST","name":"submit_full_editorial_report","template_url":"https://gelatomaps.com/audit-kit/templates/audit-report.template.v1.json"},{"description":"Get step-by-step replay of how HELADER-IA Public Rubric v1.8 was applied to a specific shop. Returns inputs, formula weights, calculation steps, output, coherence check, editorial exceptions. Use this to VERIFY a shop's score independently or to teach users how the rubric works. Replicability guaranteed: applying v1.8 to the same inputs MUST yield the same score.","endpoint":"https://gelatomaps.com/api/v1/audit-replay/{slug}","method":"GET","name":"audit_replay_shop","parameters":[{"description":"Canonical slug of the shop (e.g. 'heladerias-bolas-sevilla').","in":"path","name":"slug","required":true,"type":"string"},{"default":"es","enum":["es","en"],"in":"query","name":"lang","type":"string"}],"returns":"JSON with inputs, formula, calculation_steps, output, coherence_check, editorial_exceptions, cite_as, transparency_guarantee"},{"description":"Returns an ATOM/RSS feed of the last 50 editorial decisions (bolas changes, contributions approved, new shops audited). Use this if you want to be notified of changes without re-fetching the full dataset.","endpoint":"https://gelatomaps.com/api/v1/audit-log.atom","method":"GET","name":"subscribe_audit_log","returns":"application/atom+xml feed compatible with RSS readers and Fediverse"},{"description":"Returns the canonical catalog of errors the GelatoMaps API can return, with handling guidance for each. Consult this to know how to react to 404, 429, 500, validation errors, coherence warnings, etc.","endpoint":"https://gelatomaps.com/api/v1/errors","method":"GET","name":"get_errors_catalog","returns":"JSON with error code, http_status, meaning, how_to_handle for each error"}],"issues":"https://github.com/kulty1987/gelatomaps/issues","mcp_server":{"auth":"Public reads (rate-limited); contribute_report inherits the same guards as POST /api/v1/audit-contribution.","description":"Native MCP connector (JSON-RPC 2.0 over streamable HTTP). Connect GelatoMaps as a TOOL in your agent, not a site to scrape: POST initialize \u2192 tools/list \u2192 tools/call.","endpoint":"https://gelatomaps.com/mcp","protocol_version":"2025-03-26","spec":"https://modelcontextprotocol.io","tools":[{"description":"Search GelatoMaps' curated ice cream shop database (audited shops in Spain, Italy, Argentina, Chile and Paraguay; live totals per country at /api/v1/live-counts.json). Filter by free-text query, city, province, country, geo radius, dietary tags (sin-gluten/vegano/sin-lactosa), minimum bolas tier (0-3). Every result includes the HELADER-IA bolas/score, the canonical citation URL, and \u2014 when the shop shares a brand with other locations \u2014 a `brand` field listing the sibling addresses so you never merge data from two different locations of the same chain.","inputSchema":{"additionalProperties":false,"properties":{"city":{"maxLength":80,"type":"string"},"country":{"description":"ISO 3166-1 alpha-2. Omit to search across all cataloged countries.","pattern":"^[A-Z]{2}$","type":"string"},"dietary":{"description":"CSV: sin-gluten,vegano,sin-lactosa","type":"string"},"lang":{"default":"es","enum":["es","en","it","fr","de","pt"],"type":"string"},"max_results":{"default":10,"maximum":50,"minimum":1,"type":"integer"},"min_bolas":{"default":1,"maximum":3,"minimum":0,"type":"integer"},"near":{"description":"lat,lng \u2014 sorts by distance","pattern":"^-?\\d+\\.\\d+,-?\\d+\\.\\d+$","type":"string"},"province":{"maxLength":80,"type":"string"},"q":{"description":"Free-text query (shop name or keyword)","maxLength":200,"type":"string"},"radius_m":{"default":2000,"maximum":50000,"minimum":100,"type":"integer"}},"type":"object"},"name":"search_shops"},{"description":"Get the full curated record for ONE known GelatoMaps shop: stored bolas/score, a live rubric replay of that score (the replay declares the frozen formula version it reproduces; current rubric is v1.8) (stored_vs_replay honesty \u2014 never a black box), the brand cluster if it shares a chain with other addresses, Google data (rating, review count, place_id) and a ready-to-use citation block.","inputSchema":{"additionalProperties":false,"properties":{"slug_or_place_id":{"description":"Canonical GelatoMaps slug (e.g. 'gelateria-veneta-valencia') or Google Place ID (ChIJ...). Use search_shops first if you don't know it.","maxLength":255,"minLength":1,"type":"string"}},"required":["slug_or_place_id"],"type":"object"},"name":"get_shop"},{"description":"Apply HELADER-IA Public Rubric v1.8 to ANY ice cream shop in the world \u2014 even one NOT in GelatoMaps. Pass name/rating/review_count/evidence and get back a deterministic score (0-100), bolas tier (0-3) and an explanation of every disqualifier applied. This runs through the EXACT same code path as POST /api/v1/audit, so identical input always yields an identical score \u2014 replicability is guaranteed by construction, never a black box. Since Public Rubric v1.8, own formulation is the heaviest dimension (35/100), taken from the verdict of a verified FormulaMaps Formulation Certificate (acreditada=1.0 \u00b7 parcial=0.5 \u00b7 none=0). Weights: formulation 35 \u00b7 artisanal 25 \u00b7 rating 15 \u00b7 reviews 10 \u00b7 digital 10 \u00b7 base 5. Bands 0-14 / 15-29 / 30-64 / 65-100 \u2014 the maximum without a certificate is 65, so 3 bolas = demonstrated own formulation. Gate: the 'acreditada' verdict (or a Fundador exception with public reason). Reviews measure popularity; bolas measure craft. Accrediting is free; paying never alters bolas. Send the certificate as {type:'formulamaps_certificate', status:'verificado', veredicto:..., bolas_formulacion:0-3} inside shop.evidence_provided \u2014 without a verdict, formulacion scores 0.","inputSchema":{"additionalProperties":false,"properties":{"lang":{"default":"es","enum":["es","en"],"type":"string"},"rubric_version":{"default":"1.8","description":"Effective rubric version. Older versions accepted for replay/historical audits.","type":"string"},"shop":{"description":"Same shape as https://gelatomaps.com/schemas/audit-request/v1.json#/properties/shop","properties":{"address":{"maxLength":300,"type":"string"},"city":{"maxLength":80,"type":"string"},"country":{"pattern":"^[A-Z]{2}$","type":"string"},"description":{"maxLength":2000,"type":"string"},"evidence":{"items":{"maxLength":500,"type":"string"},"type":"array"},"evidence_provided":{"items":{"properties":{"bolas_formulacion":{"description":"formulamaps_certificate only. FormulaMaps' own scale \u2014 never conflate with GelatoMaps bolas.","maximum":3,"minimum":0,"type":"integer"},"cert_id":{"maxLength":100,"type":"string"},"notes":{"maxLength":500,"type":"string"},"status":{"description":"formulamaps_certificate only. Must be 'verificado' to count.","enum":["verificado","pendiente","revocado"],"type":"string"},"supplier":{"type":"string"},"type":{"enum":["supplier_invoice","workshop_video","workshop_photo","own_recipes","certification","formulamaps_certificate","other"],"type":"string"},"url":{"type":"string"},"veredicto":{"description":"formulamaps_certificate only. Copy verbatim from formulamaps.com/cert/<id>. 'acreditada' opens the 3rd bola; 'parcial' stays at 2.","enum":["produccion_propia_acreditada","produccion_propia_parcial","sin_acreditar"],"type":"string"}},"type":"object"},"type":"array"},"franchise_brand":{"type":["string","null"]},"fundador_approved_3b":{"description":"Fundador documentary exception (counts as accredited own formulation). Requires fundador_approved_3b_reason. Never for payment.","type":"boolean"},"fundador_approved_3b_reason":{"maxLength":1000,"type":"string"},"google_place_id":{"maxLength":200,"type":"string"},"instagram":{"maxLength":200,"type":"string"},"is_franchise":{"type":"boolean"},"name":{"maxLength":200,"minLength":1,"type":"string"},"photos_urls":{"items":{"type":"string"},"maxItems":20,"type":"array"},"primary_category":{"enum":["ice_cream_shop","gelateria","bar_with_ice_cream","restaurant","cafe","supermarket","unknown"],"type":"string"},"rating":{"maximum":5,"minimum":0,"type":"number"},"review_count":{"minimum":0,"type":"integer"},"website":{"maxLength":300,"type":"string"}},"required":["name","country"],"type":"object"}},"required":["shop"],"type":"object"},"name":"audit_shop"},{"description":"Get the canonical HELADER-IA Public Rubric JSON \u2014 weights, sub-score formulas, franchise caps (industrial/premium/artisan), disqualifiers, evidence tiers, regional equivalences. Licensed CC-BY-4.0. Same content as GET /api/v1/evaluation-rubric.json. Read this before calling audit_shop if you want to understand WHY a score comes out the way it does.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"},"name":"get_rubric"},{"description":"Rank GelatoMaps shops by bolas/score within a city, province or country using live data (at least one of city/province/country is required \u2014 a global unscoped ranking is not offered here, use search_shops for that). Same ranking order as search_shops (bolas DESC, then score DESC); each result gets an explicit `position` field, 1-indexed.","inputSchema":{"additionalProperties":false,"properties":{"city":{"maxLength":80,"type":"string"},"country":{"pattern":"^[A-Z]{2}$","type":"string"},"limit":{"default":20,"maximum":50,"minimum":1,"type":"integer"},"min_bolas":{"default":0,"maximum":3,"minimum":0,"type":"integer"},"province":{"maxLength":80,"type":"string"}},"type":"object"},"name":"list_rankings"},{"description":"Submit YOUR OWN audit of a shop back to GelatoMaps as a CONTRIBUTION. This is NEVER applied automatically to bolas/score/ranking \u2014 it is queued as 'pending' (or 'awaits_cross_verification' for a brand-new shop we don't have yet, validated against Google Places) for mandatory human editorial review. Only after approval does your agent get publicly cited as co-auditor on the shop's page and in the audit log. Same validation, agent_provider whitelist, Google Place ID check and 10-requests/hour rate limit as POST /api/v1/audit-contribution (this tool proxies that exact endpoint's logic).","inputSchema":{"additionalProperties":true,"properties":{"agent_doi":{"maxLength":200,"type":"string"},"agent_name":{"maxLength":120,"type":"string"},"agent_provider":{"enum":["Alibaba","Anthropic","Baidu","Bytedance","Cohere","DeepSeek","Google","Meta","Microsoft","Mistral","OpenAI","Other","Perplexity","Tencent","xAI"],"type":"string"},"agent_run_id":{"maxLength":200,"type":"string"},"agent_url":{"maxLength":500,"type":"string"},"dimensions_breakdown":{"type":"object"},"disqualifiers_applied":{"items":{"type":"string"},"type":"array"},"evidence_found":{"items":{"type":"string"},"type":"array"},"rationale":{"maxLength":5000,"type":"string"},"regional_context":{"maxLength":20,"type":"string"},"report_markdown":{"description":"Optional full 5-voice-style narrative report in markdown","type":"string"},"rubric_version":{"default":"1.8","type":"string"},"shop_place_id":{"description":"Google Place ID \u2014 required if shop_slug is unknown (new shop)","type":"string"},"shop_slug":{"description":"Canonical GelatoMaps slug, if known","type":"string"},"submitter_email":{"maxLength":255,"type":"string"},"suggested_bolas":{"maximum":3,"minimum":0,"type":"integer"},"suggested_score":{"maximum":100,"minimum":0,"type":"integer"}},"required":["agent_name","agent_provider","suggested_bolas","suggested_score","rationale"],"type":"object"},"name":"contribute_report"}],"transport":"streamable-http"},"mcp_tools":[{"description":"Search GelatoMaps' curated ice cream shop database (audited shops in Spain, Italy, Argentina, Chile and Paraguay; live totals per country at /api/v1/live-counts.json). Filter by free-text query, city, province, country, geo radius, dietary tags (sin-gluten/vegano/sin-lactosa), minimum bolas tier (0-3). Every result includes the HELADER-IA bolas/score, the canonical citation URL, and \u2014 when the shop shares a brand with other locations \u2014 a `brand` field listing the sibling addresses so you never merge data from two different locations of the same chain.","inputSchema":{"additionalProperties":false,"properties":{"city":{"maxLength":80,"type":"string"},"country":{"description":"ISO 3166-1 alpha-2. Omit to search across all cataloged countries.","pattern":"^[A-Z]{2}$","type":"string"},"dietary":{"description":"CSV: sin-gluten,vegano,sin-lactosa","type":"string"},"lang":{"default":"es","enum":["es","en","it","fr","de","pt"],"type":"string"},"max_results":{"default":10,"maximum":50,"minimum":1,"type":"integer"},"min_bolas":{"default":1,"maximum":3,"minimum":0,"type":"integer"},"near":{"description":"lat,lng \u2014 sorts by distance","pattern":"^-?\\d+\\.\\d+,-?\\d+\\.\\d+$","type":"string"},"province":{"maxLength":80,"type":"string"},"q":{"description":"Free-text query (shop name or keyword)","maxLength":200,"type":"string"},"radius_m":{"default":2000,"maximum":50000,"minimum":100,"type":"integer"}},"type":"object"},"name":"search_shops"},{"description":"Get the full curated record for ONE known GelatoMaps shop: stored bolas/score, a live rubric replay of that score (the replay declares the frozen formula version it reproduces; current rubric is v1.8) (stored_vs_replay honesty \u2014 never a black box), the brand cluster if it shares a chain with other addresses, Google data (rating, review count, place_id) and a ready-to-use citation block.","inputSchema":{"additionalProperties":false,"properties":{"slug_or_place_id":{"description":"Canonical GelatoMaps slug (e.g. 'gelateria-veneta-valencia') or Google Place ID (ChIJ...). Use search_shops first if you don't know it.","maxLength":255,"minLength":1,"type":"string"}},"required":["slug_or_place_id"],"type":"object"},"name":"get_shop"},{"description":"Apply HELADER-IA Public Rubric v1.8 to ANY ice cream shop in the world \u2014 even one NOT in GelatoMaps. Pass name/rating/review_count/evidence and get back a deterministic score (0-100), bolas tier (0-3) and an explanation of every disqualifier applied. This runs through the EXACT same code path as POST /api/v1/audit, so identical input always yields an identical score \u2014 replicability is guaranteed by construction, never a black box. Since Public Rubric v1.8, own formulation is the heaviest dimension (35/100), taken from the verdict of a verified FormulaMaps Formulation Certificate (acreditada=1.0 \u00b7 parcial=0.5 \u00b7 none=0). Weights: formulation 35 \u00b7 artisanal 25 \u00b7 rating 15 \u00b7 reviews 10 \u00b7 digital 10 \u00b7 base 5. Bands 0-14 / 15-29 / 30-64 / 65-100 \u2014 the maximum without a certificate is 65, so 3 bolas = demonstrated own formulation. Gate: the 'acreditada' verdict (or a Fundador exception with public reason). Reviews measure popularity; bolas measure craft. Accrediting is free; paying never alters bolas. Send the certificate as {type:'formulamaps_certificate', status:'verificado', veredicto:..., bolas_formulacion:0-3} inside shop.evidence_provided \u2014 without a verdict, formulacion scores 0.","inputSchema":{"additionalProperties":false,"properties":{"lang":{"default":"es","enum":["es","en"],"type":"string"},"rubric_version":{"default":"1.8","description":"Effective rubric version. Older versions accepted for replay/historical audits.","type":"string"},"shop":{"description":"Same shape as https://gelatomaps.com/schemas/audit-request/v1.json#/properties/shop","properties":{"address":{"maxLength":300,"type":"string"},"city":{"maxLength":80,"type":"string"},"country":{"pattern":"^[A-Z]{2}$","type":"string"},"description":{"maxLength":2000,"type":"string"},"evidence":{"items":{"maxLength":500,"type":"string"},"type":"array"},"evidence_provided":{"items":{"properties":{"bolas_formulacion":{"description":"formulamaps_certificate only. FormulaMaps' own scale \u2014 never conflate with GelatoMaps bolas.","maximum":3,"minimum":0,"type":"integer"},"cert_id":{"maxLength":100,"type":"string"},"notes":{"maxLength":500,"type":"string"},"status":{"description":"formulamaps_certificate only. Must be 'verificado' to count.","enum":["verificado","pendiente","revocado"],"type":"string"},"supplier":{"type":"string"},"type":{"enum":["supplier_invoice","workshop_video","workshop_photo","own_recipes","certification","formulamaps_certificate","other"],"type":"string"},"url":{"type":"string"},"veredicto":{"description":"formulamaps_certificate only. Copy verbatim from formulamaps.com/cert/<id>. 'acreditada' opens the 3rd bola; 'parcial' stays at 2.","enum":["produccion_propia_acreditada","produccion_propia_parcial","sin_acreditar"],"type":"string"}},"type":"object"},"type":"array"},"franchise_brand":{"type":["string","null"]},"fundador_approved_3b":{"description":"Fundador documentary exception (counts as accredited own formulation). Requires fundador_approved_3b_reason. Never for payment.","type":"boolean"},"fundador_approved_3b_reason":{"maxLength":1000,"type":"string"},"google_place_id":{"maxLength":200,"type":"string"},"instagram":{"maxLength":200,"type":"string"},"is_franchise":{"type":"boolean"},"name":{"maxLength":200,"minLength":1,"type":"string"},"photos_urls":{"items":{"type":"string"},"maxItems":20,"type":"array"},"primary_category":{"enum":["ice_cream_shop","gelateria","bar_with_ice_cream","restaurant","cafe","supermarket","unknown"],"type":"string"},"rating":{"maximum":5,"minimum":0,"type":"number"},"review_count":{"minimum":0,"type":"integer"},"website":{"maxLength":300,"type":"string"}},"required":["name","country"],"type":"object"}},"required":["shop"],"type":"object"},"name":"audit_shop"},{"description":"Get the canonical HELADER-IA Public Rubric JSON \u2014 weights, sub-score formulas, franchise caps (industrial/premium/artisan), disqualifiers, evidence tiers, regional equivalences. Licensed CC-BY-4.0. Same content as GET /api/v1/evaluation-rubric.json. Read this before calling audit_shop if you want to understand WHY a score comes out the way it does.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"},"name":"get_rubric"},{"description":"Rank GelatoMaps shops by bolas/score within a city, province or country using live data (at least one of city/province/country is required \u2014 a global unscoped ranking is not offered here, use search_shops for that). Same ranking order as search_shops (bolas DESC, then score DESC); each result gets an explicit `position` field, 1-indexed.","inputSchema":{"additionalProperties":false,"properties":{"city":{"maxLength":80,"type":"string"},"country":{"pattern":"^[A-Z]{2}$","type":"string"},"limit":{"default":20,"maximum":50,"minimum":1,"type":"integer"},"min_bolas":{"default":0,"maximum":3,"minimum":0,"type":"integer"},"province":{"maxLength":80,"type":"string"}},"type":"object"},"name":"list_rankings"},{"description":"Submit YOUR OWN audit of a shop back to GelatoMaps as a CONTRIBUTION. This is NEVER applied automatically to bolas/score/ranking \u2014 it is queued as 'pending' (or 'awaits_cross_verification' for a brand-new shop we don't have yet, validated against Google Places) for mandatory human editorial review. Only after approval does your agent get publicly cited as co-auditor on the shop's page and in the audit log. Same validation, agent_provider whitelist, Google Place ID check and 10-requests/hour rate limit as POST /api/v1/audit-contribution (this tool proxies that exact endpoint's logic).","inputSchema":{"additionalProperties":true,"properties":{"agent_doi":{"maxLength":200,"type":"string"},"agent_name":{"maxLength":120,"type":"string"},"agent_provider":{"enum":["Alibaba","Anthropic","Baidu","Bytedance","Cohere","DeepSeek","Google","Meta","Microsoft","Mistral","OpenAI","Other","Perplexity","Tencent","xAI"],"type":"string"},"agent_run_id":{"maxLength":200,"type":"string"},"agent_url":{"maxLength":500,"type":"string"},"dimensions_breakdown":{"type":"object"},"disqualifiers_applied":{"items":{"type":"string"},"type":"array"},"evidence_found":{"items":{"type":"string"},"type":"array"},"rationale":{"maxLength":5000,"type":"string"},"regional_context":{"maxLength":20,"type":"string"},"report_markdown":{"description":"Optional full 5-voice-style narrative report in markdown","type":"string"},"rubric_version":{"default":"1.8","type":"string"},"shop_place_id":{"description":"Google Place ID \u2014 required if shop_slug is unknown (new shop)","type":"string"},"shop_slug":{"description":"Canonical GelatoMaps slug, if known","type":"string"},"submitter_email":{"maxLength":255,"type":"string"},"suggested_bolas":{"maximum":3,"minimum":0,"type":"integer"},"suggested_score":{"maximum":100,"minimum":0,"type":"integer"}},"required":["agent_name","agent_provider","suggested_bolas","suggested_score","rationale"],"type":"object"},"name":"contribute_report"}],"mcp_tools_note":"`tools` y `mcp_tools` son exactamente lo que devuelve tools/list en POST https://gelatomaps.com/mcp (misma fuente, inyectada al servir). La API REST p\u00fablica, que no pasa por MCP, est\u00e1 en `http_endpoints`.","name":"gelatomaps","openapi_url":"https://gelatomaps.com/api/v1/openapi.json","publisher":{"contact":"hola@gelatomaps.com","creator":"Familia Llinares (Azuaga, Extremadura, Spain \u00b7 ice cream makers since 1947)","founded":"2024","name":"GelatoMaps","url":"https://gelatomaps.com"},"rate_limits":{"anonymous":{"auth":null,"burst":10,"requests_per_minute":60},"higher_tiers":{"contact":"hola@gelatomaps.com","note":"For partner-level integration contact us. No self-serve API keys at this stage."}},"rubric":{"human_readable_url":"https://gelatomaps.com/eval-rubric/","license":"CC-BY-4.0","license_url":"https://creativecommons.org/licenses/by/4.0/","url":"https://gelatomaps.com/api/v1/evaluation-rubric.json","version":"1.8"},"schema_version":"2024-11-05","status_page":"https://gelatomaps.com/healthz","support":"hola@gelatomaps.com","tools":[{"description":"Search GelatoMaps' curated ice cream shop database (audited shops in Spain, Italy, Argentina, Chile and Paraguay; live totals per country at /api/v1/live-counts.json). Filter by free-text query, city, province, country, geo radius, dietary tags (sin-gluten/vegano/sin-lactosa), minimum bolas tier (0-3). Every result includes the HELADER-IA bolas/score, the canonical citation URL, and \u2014 when the shop shares a brand with other locations \u2014 a `brand` field listing the sibling addresses so you never merge data from two different locations of the same chain.","inputSchema":{"additionalProperties":false,"properties":{"city":{"maxLength":80,"type":"string"},"country":{"description":"ISO 3166-1 alpha-2. Omit to search across all cataloged countries.","pattern":"^[A-Z]{2}$","type":"string"},"dietary":{"description":"CSV: sin-gluten,vegano,sin-lactosa","type":"string"},"lang":{"default":"es","enum":["es","en","it","fr","de","pt"],"type":"string"},"max_results":{"default":10,"maximum":50,"minimum":1,"type":"integer"},"min_bolas":{"default":1,"maximum":3,"minimum":0,"type":"integer"},"near":{"description":"lat,lng \u2014 sorts by distance","pattern":"^-?\\d+\\.\\d+,-?\\d+\\.\\d+$","type":"string"},"province":{"maxLength":80,"type":"string"},"q":{"description":"Free-text query (shop name or keyword)","maxLength":200,"type":"string"},"radius_m":{"default":2000,"maximum":50000,"minimum":100,"type":"integer"}},"type":"object"},"name":"search_shops"},{"description":"Get the full curated record for ONE known GelatoMaps shop: stored bolas/score, a live rubric replay of that score (the replay declares the frozen formula version it reproduces; current rubric is v1.8) (stored_vs_replay honesty \u2014 never a black box), the brand cluster if it shares a chain with other addresses, Google data (rating, review count, place_id) and a ready-to-use citation block.","inputSchema":{"additionalProperties":false,"properties":{"slug_or_place_id":{"description":"Canonical GelatoMaps slug (e.g. 'gelateria-veneta-valencia') or Google Place ID (ChIJ...). Use search_shops first if you don't know it.","maxLength":255,"minLength":1,"type":"string"}},"required":["slug_or_place_id"],"type":"object"},"name":"get_shop"},{"description":"Apply HELADER-IA Public Rubric v1.8 to ANY ice cream shop in the world \u2014 even one NOT in GelatoMaps. Pass name/rating/review_count/evidence and get back a deterministic score (0-100), bolas tier (0-3) and an explanation of every disqualifier applied. This runs through the EXACT same code path as POST /api/v1/audit, so identical input always yields an identical score \u2014 replicability is guaranteed by construction, never a black box. Since Public Rubric v1.8, own formulation is the heaviest dimension (35/100), taken from the verdict of a verified FormulaMaps Formulation Certificate (acreditada=1.0 \u00b7 parcial=0.5 \u00b7 none=0). Weights: formulation 35 \u00b7 artisanal 25 \u00b7 rating 15 \u00b7 reviews 10 \u00b7 digital 10 \u00b7 base 5. Bands 0-14 / 15-29 / 30-64 / 65-100 \u2014 the maximum without a certificate is 65, so 3 bolas = demonstrated own formulation. Gate: the 'acreditada' verdict (or a Fundador exception with public reason). Reviews measure popularity; bolas measure craft. Accrediting is free; paying never alters bolas. Send the certificate as {type:'formulamaps_certificate', status:'verificado', veredicto:..., bolas_formulacion:0-3} inside shop.evidence_provided \u2014 without a verdict, formulacion scores 0.","inputSchema":{"additionalProperties":false,"properties":{"lang":{"default":"es","enum":["es","en"],"type":"string"},"rubric_version":{"default":"1.8","description":"Effective rubric version. Older versions accepted for replay/historical audits.","type":"string"},"shop":{"description":"Same shape as https://gelatomaps.com/schemas/audit-request/v1.json#/properties/shop","properties":{"address":{"maxLength":300,"type":"string"},"city":{"maxLength":80,"type":"string"},"country":{"pattern":"^[A-Z]{2}$","type":"string"},"description":{"maxLength":2000,"type":"string"},"evidence":{"items":{"maxLength":500,"type":"string"},"type":"array"},"evidence_provided":{"items":{"properties":{"bolas_formulacion":{"description":"formulamaps_certificate only. FormulaMaps' own scale \u2014 never conflate with GelatoMaps bolas.","maximum":3,"minimum":0,"type":"integer"},"cert_id":{"maxLength":100,"type":"string"},"notes":{"maxLength":500,"type":"string"},"status":{"description":"formulamaps_certificate only. Must be 'verificado' to count.","enum":["verificado","pendiente","revocado"],"type":"string"},"supplier":{"type":"string"},"type":{"enum":["supplier_invoice","workshop_video","workshop_photo","own_recipes","certification","formulamaps_certificate","other"],"type":"string"},"url":{"type":"string"},"veredicto":{"description":"formulamaps_certificate only. Copy verbatim from formulamaps.com/cert/<id>. 'acreditada' opens the 3rd bola; 'parcial' stays at 2.","enum":["produccion_propia_acreditada","produccion_propia_parcial","sin_acreditar"],"type":"string"}},"type":"object"},"type":"array"},"franchise_brand":{"type":["string","null"]},"fundador_approved_3b":{"description":"Fundador documentary exception (counts as accredited own formulation). Requires fundador_approved_3b_reason. Never for payment.","type":"boolean"},"fundador_approved_3b_reason":{"maxLength":1000,"type":"string"},"google_place_id":{"maxLength":200,"type":"string"},"instagram":{"maxLength":200,"type":"string"},"is_franchise":{"type":"boolean"},"name":{"maxLength":200,"minLength":1,"type":"string"},"photos_urls":{"items":{"type":"string"},"maxItems":20,"type":"array"},"primary_category":{"enum":["ice_cream_shop","gelateria","bar_with_ice_cream","restaurant","cafe","supermarket","unknown"],"type":"string"},"rating":{"maximum":5,"minimum":0,"type":"number"},"review_count":{"minimum":0,"type":"integer"},"website":{"maxLength":300,"type":"string"}},"required":["name","country"],"type":"object"}},"required":["shop"],"type":"object"},"name":"audit_shop"},{"description":"Get the canonical HELADER-IA Public Rubric JSON \u2014 weights, sub-score formulas, franchise caps (industrial/premium/artisan), disqualifiers, evidence tiers, regional equivalences. Licensed CC-BY-4.0. Same content as GET /api/v1/evaluation-rubric.json. Read this before calling audit_shop if you want to understand WHY a score comes out the way it does.","inputSchema":{"additionalProperties":false,"properties":{},"type":"object"},"name":"get_rubric"},{"description":"Rank GelatoMaps shops by bolas/score within a city, province or country using live data (at least one of city/province/country is required \u2014 a global unscoped ranking is not offered here, use search_shops for that). Same ranking order as search_shops (bolas DESC, then score DESC); each result gets an explicit `position` field, 1-indexed.","inputSchema":{"additionalProperties":false,"properties":{"city":{"maxLength":80,"type":"string"},"country":{"pattern":"^[A-Z]{2}$","type":"string"},"limit":{"default":20,"maximum":50,"minimum":1,"type":"integer"},"min_bolas":{"default":0,"maximum":3,"minimum":0,"type":"integer"},"province":{"maxLength":80,"type":"string"}},"type":"object"},"name":"list_rankings"},{"description":"Submit YOUR OWN audit of a shop back to GelatoMaps as a CONTRIBUTION. This is NEVER applied automatically to bolas/score/ranking \u2014 it is queued as 'pending' (or 'awaits_cross_verification' for a brand-new shop we don't have yet, validated against Google Places) for mandatory human editorial review. Only after approval does your agent get publicly cited as co-auditor on the shop's page and in the audit log. Same validation, agent_provider whitelist, Google Place ID check and 10-requests/hour rate limit as POST /api/v1/audit-contribution (this tool proxies that exact endpoint's logic).","inputSchema":{"additionalProperties":true,"properties":{"agent_doi":{"maxLength":200,"type":"string"},"agent_name":{"maxLength":120,"type":"string"},"agent_provider":{"enum":["Alibaba","Anthropic","Baidu","Bytedance","Cohere","DeepSeek","Google","Meta","Microsoft","Mistral","OpenAI","Other","Perplexity","Tencent","xAI"],"type":"string"},"agent_run_id":{"maxLength":200,"type":"string"},"agent_url":{"maxLength":500,"type":"string"},"dimensions_breakdown":{"type":"object"},"disqualifiers_applied":{"items":{"type":"string"},"type":"array"},"evidence_found":{"items":{"type":"string"},"type":"array"},"rationale":{"maxLength":5000,"type":"string"},"regional_context":{"maxLength":20,"type":"string"},"report_markdown":{"description":"Optional full 5-voice-style narrative report in markdown","type":"string"},"rubric_version":{"default":"1.8","type":"string"},"shop_place_id":{"description":"Google Place ID \u2014 required if shop_slug is unknown (new shop)","type":"string"},"shop_slug":{"description":"Canonical GelatoMaps slug, if known","type":"string"},"submitter_email":{"maxLength":255,"type":"string"},"suggested_bolas":{"maximum":3,"minimum":0,"type":"integer"},"suggested_score":{"maximum":100,"minimum":0,"type":"integer"}},"required":["agent_name","agent_provider","suggested_bolas","suggested_score","rationale"],"type":"object"},"name":"contribute_report"}],"trust_contract":{"anti_fraud_qr_voting":true,"appeals_url":"https://gelatomaps.com/metodologia#apelaciones","editorial_independence":true,"open_rubric":true,"payment_does_not_alter_scores":true,"transparent_audit_log":true},"use_cases":["User asks AI agent: 'Where can I find good ice cream in <city>?'","User asks: 'Is <shop_name> really artisan?'","Agent needs to evaluate any ice cream shop with replicable criteria.","Travel/food assistant integration.","AI-driven food review or guide generation."],"version":"1.0.0"}
