addrbookFor publishers
← The evidence ledger

Evidence row 112295

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint feadf58c-c762-4c09-a2a2-60cd3a583b72
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
d59e848d374b8a39eef1ebccea489f1eeab157bc7d9bcae50b05d227db390b2a
Leaf
0x40b2dd82dbe6bbc7cc1511c547810c4d57726e9a19c451523a790dfc7ca36fce

What was observed

{
  "count": 13,
  "tools": [
    {
      "description": "Count businesses of a kind in a place in Spain, per 10,000 residents and per km², from OpenStreetMap.\n\n    Use it to size competition and supply: how many gyms, cafés or dentists an area has,\n    how that compares with the province, region and Spain, which brands dominate, and\n    which districts or tracts are over- or under-served (rank sub-areas by\n    per_10k_residents). Counts are lower bounds because OpenStreetMap is mapped by\n    volunteers; where INE's company directory covers the same activity, the result says\n    how complete the map looks in that region. Returns counts and brands only, never\n    lists of individual premises.\n    ",
      "inputSchema": {
        "properties": {
          "category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "What to count. A category: restaurant, fast_food, cafe, bar, ice_cream, nightclub, supermarket, convenience, bakery, butcher, greengrocer, drinks_tobacco, clothes, pharmacy, optician, beauty_shop, jewellery, florist, pet_shop, electronics, home, books_leisure, variety_store, hairdresser, beauty_salon, laundry, dentist, doctor, physiotherapy, hospital, veterinary, gym, sports_centre, dance_studio, cinema_theatre, private_school, childcare, school, hotel, guest_house, camp_site, estate_agent, lawyer, accountant, insurance, travel_agency, coworking, bank, fuel, car_repair, car_dealer, car_wash. Plain words work too ('gyms', 'peluquerías'). Or a sector: food_drink, food_retail, retail, personal_services, health, leisure, education, accommodation, professional, finance, motoring. Or OpenStreetMap tags: 'shop=bakery' or 'amenity=bar,amenity=pub'. Leave empty for all businesses, broken down by category.",
            "title": "Category"
          },
          "place": {
            "description": "Place name or INE code: municipality ('Valladolid' or '47186'), province ('41'; a bare name like 'Sevilla' means the city), autonomous community ('Cataluña' or 'CA09'), district ('4718603') or census tract ('4718603012'). 'Name, Province' picks between same-named towns.",
            "title": "Place",
            "type": "string"
          },
          "rank_by": {
            "default": "count",
            "description": "How to rank sub-areas: 'count', 'per_10k_residents' or 'per_km2'.",
            "enum": [
              "count",
              "per_10k_residents",
              "per_km2"
            ],
            "title": "Rank By",
            "type": "string"
          },
          "sub_areas": {
            "default": "none",
            "description": "For a municipality, also count by 'district' or census 'tract'. Default 'none'.",
            "enum": [
              "none",
              "district",
              "tract"
            ],
            "title": "Sub Areas",
            "type": "string"
          }
        },
        "required": [
          "place"
        ],
        "title": "businessesArguments",
        "type": "object"
      },
      "name": "businesses"
    },
    {
      "description": "Profile the area within a radius (or a walking time) of an address: residents, households, income, age, and\n    the businesses mapped there. With a category, also the yearly market in euros, competing\n    businesses and an opportunity score against the region. Use for \"who lives within 800 m of\n    this shop\" or \"is there room for a bakery near Calle X\". Addresses are checked against the\n    municipality they name; ambiguous ones are refused with suggestions.\n    ",
      "inputSchema": {
        "properties": {
          "category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional business category, to add market size and opportunity score.",
            "title": "Category"
          },
          "near": {
            "description": "Address as 'street number, municipality' (e.g. 'Calle Sierpes 40, Sevilla'), or coordinates as 'lat, lon'. Floor and door are ignored and never stored.",
            "title": "Near",
            "type": "string"
          },
          "radius_m": {
            "default": 800,
            "description": "Radius in metres (e.g. 500, 800, 1500).",
            "maximum": 10000,
            "minimum": 100,
            "title": "Radius M",
            "type": "integer"
          },
          "walk_minutes": {
            "anyOf": [
              {
                "maximum": 30,
                "minimum": 3,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Use the area reachable on foot in this many minutes instead of a circle.",
            "title": "Walk Minutes"
          }
        },
        "required": [
          "near"
        ],
        "title": "catchmentArguments",
        "type": "object"
      },
      "name": "catchment"
    },
    {
      "description": "Draw a chart (PNG) of a tool result: an opportunity ranking with ranges, income by district,\n    an age pyramid or a population trend. Returns the image, the same text and sources as the\n    underlying tool, and a source line on the image. If drawing fails the text still comes back.\n    ",
      "inputSchema": {
        "properties": {
          "category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Business category, for kind 'opportunity'.",
            "title": "Category"
          },
          "kind": {
            "description": "'opportunity' (needs category; ranks areas within the place), 'income' (by district or tract), 'age_pyramid' or 'population_trend'.",
            "enum": [
              "opportunity",
              "income",
              "age_pyramid",
              "population_trend"
            ],
            "title": "Kind",
            "type": "string"
          },
          "place": {
            "description": "Place name or INE code: municipality ('Valladolid' or '47186'), province ('41'; a bare name like 'Sevilla' means the city), autonomous community ('Cataluña' or 'CA09'), district ('4718603') or census tract ('4718603012'). 'Name, Province' picks between same-named towns.",
            "title": "Place",
            "type": "string"
          },
          "sub_areas": {
            "default": "district",
            "description": "For 'income': districts or tracts.",
            "enum": [
              "district",
              "tract"
            ],
            "title": "Sub Areas",
            "type": "string"
          }
        },
        "required": [
          "kind",
          "place"
        ],
        "title": "chartArguments",
        "type": "object"
      },
      "name": "chart"
    },
    {
      "description": "Rank areas by market per competing business for a category (the opportunity score).\n\n    Each area gets a yearly market in euros, estimated competing businesses and an opportunity\n    score against its region, all with ranges. Areas are ranked by the cautious (low) end of\n    the score; areas too small for the category are left out and counted. Use for \"where in\n    Valladolid should I open a gym\" or \"which towns in Málaga province lack pharmacies\".\n    ",
      "inputSchema": {
        "properties": {
          "category": {
            "description": "Business category: restaurant, cafe, bar, fast_food, bakery, butcher, greengrocer, supermarket, pharmacy, optician, dentist, physiotherapy, hairdresser, beauty_salon, veterinary, gym, childcare, private_school, clothes, home. Plain words work too ('gyms', 'peluquerías').",
            "title": "Category",
            "type": "string"
          },
          "level": {
            "default": "auto",
            "description": "'district' or 'tract' within a municipality; 'municipality' within a province or region.",
            "enum": [
              "auto",
              "municipality",
              "district",
              "tract"
            ],
            "title": "Level",
            "type": "string"
          },
          "limit": {
            "default": 20,
            "description": "How many areas to return, best first.",
            "maximum": 40,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          },
          "within": {
            "description": "A municipality (compares its districts or tracts) or a province or region (compares its municipalities).",
            "title": "Within",
            "type": "string"
          }
        },
        "required": [
          "within",
          "category"
        ],
        "title": "compare_areasArguments",
        "type": "object"
      },
      "name": "compare_areas"
    },
    {
      "description": "Recorded crime in a place from the Interior ministry: offences by type (theft, burglary,\n    robbery, assault, drugs, cybercrime and more) for the latest full year, per 1,000 residents,\n    the change on the year before, the latest year-to-date figures, and province, region and\n    Spain for comparison.\n\n    Published for municipalities over 20,000 residents, provinces and regions; smaller places\n    get the province's figures, and the result says so.\n    ",
      "inputSchema": {
        "properties": {
          "place": {
            "description": "Place name or INE code: municipality ('Valladolid' or '47186'), province ('41'; a bare name like 'Sevilla' means the city), autonomous community ('Cataluña' or 'CA09'), district ('4718603') or census tract ('4718603012'). 'Name, Province' picks between same-named towns.",
            "title": "Place",
            "type": "string"
          }
        },
        "required": [
          "place"
        ],
        "title": "crimeArguments",
        "type": "object"
      },
      "name": "crime"
    },
    {
      "description": "Population, sex, five-year age bands, 5-year trend, and household profile for a place in Spain.\n\n    Municipality, province and CCAA: census population by age band (latest 1 January),\n    cross-checked against the official Padrón figure. District and tract: census age bands\n    and sex from INE's file by census tract. Municipality, district and tract:\n    household size, single-person households, mean age, share under 18 and 65+ from INE's\n    income atlas. Use sub_areas to compare a city's districts or tracts, e.g. to find\n    where young families or older residents concentrate.\n    ",
      "inputSchema": {
        "properties": {
          "place": {
            "description": "Place name or INE code: municipality ('Valladolid' or '47186'), province ('41'; a bare name like 'Sevilla' means the city), autonomous community ('Cataluña' or 'CA09'), district ('4718603') or census tract ('4718603012'). 'Name, Province' picks between same-named towns.",
            "title": "Place",
            "type": "string"
          },
          "sub_areas": {
            "default": "none",
            "description": "For a municipality, also list its 'district's or census 'tract's. Default 'none'.",
            "enum": [
              "none",
              "district",
              "tract"
            ],
            "title": "Sub Areas",
            "type": "string"
          }
        },
        "required": [
          "place"
        ],
        "title": "demographicsArguments",
        "type": "object"
      },
      "name": "demographics"
    },
    {
      "description": "Search Spain's national open-data catalogue (datos.gob.es) for datasets on a topic.\n\n    Returns each dataset's title, publisher, licence, file formats, update frequency and last\n    change, and an id to pass to read_dataset. Use when a question needs data this server does\n    not hold directly (parking, licences, local events, tourist offices, transport).\n    ",
      "inputSchema": {
        "properties": {
          "limit": {
            "default": 10,
            "description": "How many datasets to return.",
            "maximum": 25,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          },
          "place": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional place; datasets about it are preferred.",
            "title": "Place"
          },
          "query": {
            "description": "Topic; Spanish works best, e.g. 'turismo', 'aparcamiento', 'licencias'.",
            "title": "Query",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "title": "find_datasetsArguments",
        "type": "object"
      },
      "name": "find_datasets"
    },
    {
      "description": "Household income for a place in Spain from INE's income atlas, down to census tract.\n\n    Returns net and gross income per person and per household, mean and median per\n    consumption unit, inequality (Gini, P80/P20), income sources (wages, pensions,\n    benefits), a trend, and benchmarks against the province, region and Spain. Use it\n    for purchasing power, price positioning and choosing between districts. Figures are\n    euros of the data year; the atlas runs about two years behind.\n    ",
      "inputSchema": {
        "properties": {
          "place": {
            "description": "Place name or INE code: municipality ('Valladolid' or '47186'), province ('41'; a bare name like 'Sevilla' means the city), autonomous community ('Cataluña' or 'CA09'), district ('4718603') or census tract ('4718603012'). 'Name, Province' picks between same-named towns.",
            "title": "Place",
            "type": "string"
          },
          "rank_by": {
            "default": "net_income_per_person",
            "description": "Metric used to rank sub-areas.",
            "enum": [
              "net_income_per_person",
              "net_income_per_household",
              "median_income_per_consumption_unit"
            ],
            "title": "Rank By",
            "type": "string"
          },
          "sub_areas": {
            "default": "none",
            "description": "For a municipality, rank its 'district's or census 'tract's. Default 'none'.",
            "enum": [
              "none",
              "district",
              "tract"
            ],
            "title": "Sub Areas",
            "type": "string"
          },
          "years": {
            "default": 5,
            "description": "Years of history for the trend (max 9).",
            "maximum": 9,
            "minimum": 1,
            "title": "Years",
            "type": "integer"
          }
        },
        "required": [
          "place"
        ],
        "title": "incomeArguments",
        "type": "object"
      },
      "name": "income"
    },
    {
      "description": "Size the yearly market for a business category in a place in Spain, in euros, with a range.\n\n    Market = households × INE household spending on the category × an income adjustment.\n    Supply = competing businesses, calibrated against INE's company directory. Returns market\n    per business and an opportunity score: market per business against the region (1.0 = same as\n    the region), not a forecast of openings. Every assumption is listed. Assumptions can be overridden to test scenarios. Use for \"how big\n    is the market for X in Y\" and \"is Y under-served for X\".\n    ",
      "inputSchema": {
        "properties": {
          "capture_share": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Share of the market one business could win (0-1), to estimate obtainable revenue.",
            "title": "Capture Share"
          },
          "category": {
            "description": "Business category: restaurant, cafe, bar, fast_food, bakery, butcher, greengrocer, supermarket, pharmacy, optician, dentist, physiotherapy, hairdresser, beauty_salon, veterinary, gym, childcare, private_school, clothes, home. Plain words work too ('gyms', 'peluquerías').",
            "title": "Category",
            "type": "string"
          },
          "competitors": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Override the estimated number of competing businesses.",
            "title": "Competitors"
          },
          "place": {
            "description": "Place name or INE code: municipality ('Valladolid' or '47186'), province ('41'; a bare name like 'Sevilla' means the city), autonomous community ('Cataluña' or 'CA09'), district ('4718603') or census tract ('4718603012'). 'Name, Province' picks between same-named towns.",
            "title": "Place",
            "type": "string"
          },
          "spend_per_household": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Override INE's yearly spend per household on the category, in euros.",
            "title": "Spend Per Household"
          }
        },
        "required": [
          "place",
          "category"
        ],
        "title": "market_sizeArguments",
        "type": "object"
      },
      "name": "market_size"
    },
    {
      "description": "Suggest a price range for a place from local purchasing power and inflation.\n\n    Public data has no competitor prices, so this adjusts a price you know (from elsewhere or\n    an earlier date) to this place today: CPI for the category's group since that month, then\n    local median income per consumption unit against the reference place. Returns a range\n    from no local adjustment to full adjustment, labelled as an estimate.\n    ",
      "inputSchema": {
        "properties": {
          "category": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Market category, to uprate with its own CPI group (e.g. 'gym', 'restaurant').",
            "title": "Category"
          },
          "place": {
            "description": "Place name or INE code: municipality ('Valladolid' or '47186'), province ('41'; a bare name like 'Sevilla' means the city), autonomous community ('Cataluña' or 'CA09'), district ('4718603') or census tract ('4718603012'). 'Name, Province' picks between same-named towns.",
            "title": "Place",
            "type": "string"
          },
          "price_month": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Month the reference price applied, YYYY-MM, to uprate it to today.",
            "title": "Price Month"
          },
          "reference_place": {
            "default": "ES",
            "description": "Where the reference price applies: 'ES' (Spain, default) or a place.",
            "title": "Reference Place",
            "type": "string"
          },
          "reference_price": {
            "description": "Price elsewhere, in euros, e.g. 39.9 for a monthly gym fee.",
            "title": "Reference Price",
            "type": "number"
          }
        },
        "required": [
          "place",
          "reference_price"
        ],
        "title": "price_bandArguments",
        "type": "object"
      },
      "name": "price_band"
    },
    {
      "description": "Read a datos.gob.es dataset: its columns and up to 20 sample rows, with its licence.\n\n    Reads CSV and JSON files listed in the catalogue (the first 5 MB). Columns that look like\n    personal data (names, ID numbers, emails, phones) are withheld. Values are shown as the\n    publisher published them.\n    ",
      "inputSchema": {
        "properties": {
          "dataset_id": {
            "description": "An id from find_datasets.",
            "title": "Dataset Id",
            "type": "string"
          },
          "file_index": {
            "anyOf": [
              {
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Which file of the dataset (from 0); default: the first CSV or JSON.",
            "title": "File Index"
          }
        },
        "required": [
          "dataset_id"
        ],
        "title": "read_datasetArguments",
        "type": "object"
      },
      "name": "read_dataset"
    },
    {
      "description": "How housing rents have changed in a place: INE's rent index (IPVA, 2015 = 100) with the\n    change over the last year, five years and since 2015, against province, region and Spain.\n\n    Covers municipalities over 10,000 residents, districts of provincial capitals, provinces and\n    regions (not the Basque Country or Navarra). Gives changes, not rents in euros.\n    ",
      "inputSchema": {
        "properties": {
          "place": {
            "description": "Place name or INE code: municipality ('Valladolid' or '47186'), province ('41'; a bare name like 'Sevilla' means the city), autonomous community ('Cataluña' or 'CA09'), district ('4718603') or census tract ('4718603012'). 'Name, Province' picks between same-named towns.",
            "title": "Place",
            "type": "string"
          }
        },
        "required": [
          "place"
        ],
        "title": "rentsArguments",
        "type": "object"
      },
      "name": "rents"
    },
    {
      "description": "Find the INE code and level (CCAA, province, municipality, district, tract) for a place in Spain.\n\n    Use this first when a question names a place. Returns the best match first, with\n    alternatives (e.g. 'Valencia' is both a city and a province). Handles accents, Basque,\n    Catalan and Galician names, and common English names (Seville, Catalonia).\n    Districts and tracts are shown with the OpenStreetMap neighbourhood names inside them\n    ('Valladolid distrito 10 (Parquesol, Girón, La Victoria)'), and a neighbourhood name\n    ('Parquesol, Valladolid', 'Gràcia, Barcelona') returns the INE district that contains it.\n    ",
      "inputSchema": {
        "properties": {
          "query": {
            "description": "Place name or INE code, e.g. 'A Coruña', 'Mérida, Badajoz', '08'.",
            "title": "Query",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "title": "resolve_placeArguments",
        "type": "object"
      },
      "name": "resolve_place"
    }
  ]
}

What the leaf hashes

{"body":"d59e848d374b8a39eef1ebccea489f1eeab157bc7d9bcae50b05d227db390b2a","id":112295,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793025594530042,"prev":null,"subject":"feadf58c-c762-4c09-a2a2-60cd3a583b72","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).

  1. 0x40b31d669847cc4125b6f32fbbce60d820b583b8e24b4c80c648f32f8e33f6b6
  2. 0xa5b091c2ae7c23d88e9853c23ff86cdb5e39ca9acf31364bbba9b9705193a23d
  3. 0xab2f55d40900fe23d45910c3a3b242304452544d418447a6f646c06cf405405e
  4. 0x71359242a1b940f0417d7f2be654c2fb1b92911767546a768f7cb8856aa4e16f
  5. 0xda3bec25f57fbdeb4781607cfa8ea2c9ed1d4749ef7dc3b687202affe606b9ae
  6. 0x8561ba6c745829dacb12e291f54fd5ece92eb97b7d1f8718a654923ac03fc0cf
  7. 0xafddb6a953590e5205407f467658f03ea154b9b54a72153ddbee27b90c8662ca
  8. 0xd02d27cf4339c8fd9ebd49b2aabc85f35d10b9c0e02b360e20c21e0005d9d2f8
  9. 0xf6dd4ff7a75bae3a7230c4dce7f04e6f05105018da003835795a25bd8feeb607
  10. 0xa22eb09d48f0af576480334a704954e6e8556d9981bdf6546be78cf11ad8843d
  11. 0x6ec69a305a23b604ab679d75c3502d235953d73d9c2a74b16fb74b49af695fa0
  12. 0xe2bb2a30c74e0bf16b8b75c332bdd45334d0338bef3f3022b7ea7b55718e1369
  13. 0xd406739acce2ba016f8d49081b15f266a4ea4a0b0fc5ef171c89c8fd2dda4d80
  14. 0x8b27a4c21bf4ba962fd008c8f4300bc6953764a5032b9ab0cfe696b318c45326
  15. 0x4b52a97f7a80ff7778a702b85267b8d2e5c93ce160942656435c29ae7be68bf4
  16. 0x2e6a32eb32761c210560e852405e2f865f958ddbe01027894f8b9c1b3433b9f0
  17. 0x9a83be955a206deb65b995adfd92c58fa31c95fbbf926bd199d300e70b08b26d
  18. 0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON