← The evidence ledger
Evidence row 1009147
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint b25ac698-3869-43f1-a720-54f5853271f7
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- 6241fe29f6368189481fc9ecc7b321c31f7d9e515a8c0995db2532a69467eb57
- Leaf
- 0x38c1d11e46d1a7ea53927c7557628cc61be7af4a252a1bb5d7cfeb94d850cd55
What was observed
{
"count": 14,
"tools": [
{
"description": "Save a city or country to the member's Nomads.com favorites (the heart on the site). Authenticated as the member, like get_favorites.",
"inputSchema": {
"properties": {
"key": {
"description": "From https://nomads.com/settings. Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
},
"slug": {
"description": "A city slug from search_cities (e.g. lisbon-portugal) or a country slug (e.g. portugal)",
"type": "string"
},
"username": {
"description": "Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "add_favorite"
},
{
"description": "Add a trip to a Nomads.com member's own history: a stay in one place with a start and end date. Authenticated as the member: signed in through the connector (OAuth sign-in or an Authorization header) if set up, otherwise pass the member's username and their personal key from https://nomads.com/settings, plus the place, given EITHER as city_slug (from search_cities/get_city) OR as latitude+longitude (e.g. from a places/geocoding lookup). Coordinates within 5km of a Nomads.com city snap to it, same as the profile page's \"add a trip\" autocomplete; ANY other place also works - pass its city and country names with the coordinates and it is stored as-is, like the site's own trip editor.",
"inputSchema": {
"properties": {
"city": {
"description": "The place name that was geocoded. Required (with country) for places that have no Nomads.com city within 5km",
"type": "string"
},
"city_slug": {
"description": "From search_cities or get_city, e.g. lisbon-portugal. Omit if using latitude/longitude instead",
"type": "string"
},
"country": {
"description": "The place's country name. Required with city for places without a Nomads.com city page",
"type": "string"
},
"date_end": {
"description": "YYYY-MM-DD, after date_start",
"type": "string"
},
"date_start": {
"description": "YYYY-MM-DD",
"type": "string"
},
"key": {
"description": "From https://nomads.com/settings. Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
},
"latitude": {
"description": "Use instead of city_slug when you only have a place name to geocode, not our slug",
"type": "number"
},
"longitude": {
"type": "number"
},
"username": {
"description": "Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
}
},
"required": [
"date_start",
"date_end"
],
"type": "object"
},
"name": "add_trip"
},
{
"description": "Cancel a Nomads.com meetup the member organized. The cancel is posted in the community chat and everyone who RSVP'd gets a notification. It cannot be undone. Call without meetup_id to get the member's upcoming meetups with their ids. Authenticated as the member, like create_meetup. Ask the member to confirm first.",
"inputSchema": {
"properties": {
"key": {
"description": "From https://nomads.com/settings. Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
},
"meetup_id": {
"description": "From create_meetup, list_meetups, or this tool called without it",
"type": "string"
},
"username": {
"description": "Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
}
},
"type": "object"
},
"name": "cancel_meetup"
},
{
"description": "Host a Nomads.com meetup as the member: it is posted in the community chat, members in that city then get notified, and at 2 RSVPs it is also shared in the country channel and on X. Authenticated as the member (signed in through the connector with OAuth or an Authorization header, or username + personal key from https://nomads.com/settings). The member needs a profile photo and Telegram connected. Ask the member to confirm the details before calling this, it is posted publicly.",
"inputSchema": {
"properties": {
"address": {
"description": "Street address only, no links",
"type": "string"
},
"category": {
"description": "The main activity",
"enum": [
"drinks",
"coffee",
"brunch",
"dinner",
"foodtour",
"picnic",
"coworking",
"networking",
"language",
"bookclub",
"party",
"karaoke",
"games",
"movies",
"festival",
"culture",
"daytrip",
"boat",
"beach",
"hiking",
"running",
"cycling",
"surf",
"climbing",
"fitness",
"sports",
"yoga",
"wellness",
"other"
],
"type": "string"
},
"city_slug": {
"description": "From search_cities or get_city, e.g. lisbon-portugal",
"type": "string"
},
"date": {
"description": "YYYY-MM-DD, in the next 3 months",
"type": "string"
},
"description": {
"description": "What you will do. No paid tickets or selling",
"type": "string"
},
"key": {
"description": "From https://nomads.com/settings. Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
},
"recurrence": {
"description": "Optional: repeat every week (same weekday) or every month (same nth weekday)",
"enum": [
"",
"weekly",
"monthly"
],
"type": "string"
},
"time": {
"description": "Local start time as a whole hour, e.g. 19 or 19:00",
"type": "string"
},
"title": {
"description": "Short title, max 60 characters",
"type": "string"
},
"username": {
"description": "Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
},
"venue": {
"description": "Name of the cafe, bar or restaurant",
"type": "string"
}
},
"required": [
"city_slug",
"date",
"time",
"category",
"description",
"venue",
"address"
],
"type": "object"
},
"name": "create_meetup"
},
{
"description": "Change a Nomads.com meetup the member organized: date, time, type, title, description, venue or address. Fields left out keep their current value. The change is posted in the community chat. Once 2+ people RSVP'd, the date and time can no longer change. Call without meetup_id to get the member's upcoming meetups with their ids. Authenticated as the member, like create_meetup. Ask the member to confirm the change first.",
"inputSchema": {
"properties": {
"address": {
"description": "Street address only, no links",
"type": "string"
},
"category": {
"description": "The main activity",
"enum": [
"drinks",
"coffee",
"brunch",
"dinner",
"foodtour",
"picnic",
"coworking",
"networking",
"language",
"bookclub",
"party",
"karaoke",
"games",
"movies",
"festival",
"culture",
"daytrip",
"boat",
"beach",
"hiking",
"running",
"cycling",
"surf",
"climbing",
"fitness",
"sports",
"yoga",
"wellness",
"other"
],
"type": "string"
},
"date": {
"description": "YYYY-MM-DD",
"type": "string"
},
"description": {
"description": "What you will do. No paid tickets or selling",
"type": "string"
},
"key": {
"description": "From https://nomads.com/settings. Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
},
"meetup_id": {
"description": "From create_meetup, list_meetups, or this tool called without it",
"type": "string"
},
"time": {
"description": "Local start time as a whole hour, e.g. 19 or 19:00",
"type": "string"
},
"title": {
"description": "Short title, max 60 characters",
"type": "string"
},
"username": {
"description": "Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
},
"venue": {
"description": "Name of the cafe, bar or restaurant",
"type": "string"
}
},
"type": "object"
},
"name": "edit_meetup"
},
{
"description": "Change the dates and/or the place of one trip in a Nomads.com member's own history, e.g. a stay that got longer or a wrong city. Authenticated as the member (signed in through the connector with OAuth or an Authorization header, or username + personal key from https://nomads.com/settings). Needs the trip_id (from get_trips); pass only what changes, everything else keeps its value. The trip keeps its trip_id, likes and comments. A new place works like add_trip: city_slug, OR latitude+longitude (snaps to a Nomads.com city within 5km, otherwise pass city and country names).",
"inputSchema": {
"properties": {
"city": {
"description": "With latitude/longitude: the place name. Required (with country) for places that have no Nomads.com city within 5km",
"type": "string"
},
"city_slug": {
"description": "New place, from search_cities or get_city. Omit to keep the place",
"type": "string"
},
"country": {
"description": "With city: the place's country name",
"type": "string"
},
"date_end": {
"description": "New end date, YYYY-MM-DD. Omit to keep",
"type": "string"
},
"date_start": {
"description": "New start date, YYYY-MM-DD. Omit to keep",
"type": "string"
},
"key": {
"description": "From https://nomads.com/settings. Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
},
"latitude": {
"description": "New place by coordinates, instead of city_slug",
"type": "number"
},
"longitude": {
"type": "number"
},
"trip_id": {
"description": "From get_trips",
"type": "string"
},
"username": {
"description": "Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
}
},
"required": [
"trip_id"
],
"type": "object"
},
"name": "edit_trip"
},
{
"description": "Get the curated data for one city by its slug (from search_cities), e.g. lisbon-portugal.",
"inputSchema": {
"properties": {
"slug": {
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_city"
},
{
"description": "Get one country by its slug, e.g. portugal or united-kingdom: its Nomads.com page, its short animated thumbnail video (mp4, when there is one) and its top 10 cities by overall score, each with their own animated thumbnail.",
"inputSchema": {
"properties": {
"slug": {
"description": "Lowercase country slug, e.g. portugal, united-kingdom",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_country"
},
{
"description": "Get a Nomads.com member's own favorite cities and countries (the places they hearted: places they want to go or come back to). Authenticated as the member: signed in through the connector (OAuth sign-in or an Authorization header) if set up, otherwise pass the member's username and their personal key from https://nomads.com/settings - this is private data, not for looking up other people.",
"inputSchema": {
"properties": {
"key": {
"description": "From https://nomads.com/settings. Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
},
"username": {
"description": "Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "get_favorites"
},
{
"description": "Get a Nomads.com member's own trip history (past and upcoming stays: city, country, dates), newest first, 200 by default; use from_date/to_date for a period and limit for more. Authenticated as the member: signed in through the connector (OAuth sign-in or an Authorization header) if set up, otherwise pass the member's username and their personal key from https://nomads.com/settings - this is private data, not for looking up other people.",
"inputSchema": {
"properties": {
"from_date": {
"description": "Only trips that end on or after this date, YYYY-MM-DD",
"type": "string"
},
"key": {
"description": "From https://nomads.com/settings. Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
},
"limit": {
"description": "How many trips, newest first: 1 to 1000, default 200",
"type": "integer"
},
"to_date": {
"description": "Only trips that start on or before this date, YYYY-MM-DD",
"type": "string"
},
"username": {
"description": "Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
}
},
"required": [],
"type": "object"
},
"name": "get_trips"
},
{
"description": "Upcoming Nomads.com meetups: where and when nomads meet in person, and how many people are going. Filter by city slug, country or how far ahead to look. Attendance is a count only; who attends is private.",
"inputSchema": {
"properties": {
"city": {
"description": "City slug from search_cities, e.g. lisbon-portugal",
"type": "string"
},
"country": {
"type": "string"
},
"days_ahead": {
"description": "How far ahead to look, 1 to 365, default 90",
"type": "integer"
},
"limit": {
"description": "1 to 100, default 50",
"type": "integer"
}
},
"type": "object"
},
"name": "list_meetups"
},
{
"description": "Remove a city or country from the member's Nomads.com favorites. Authenticated as the member, like get_favorites.",
"inputSchema": {
"properties": {
"key": {
"description": "From https://nomads.com/settings. Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
},
"slug": {
"description": "A city slug (e.g. lisbon-portugal) or a country slug (e.g. portugal)",
"type": "string"
},
"username": {
"description": "Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "remove_favorite"
},
{
"description": "Remove one trip from a Nomads.com member's own history, e.g. a duplicate or a superseded entry. Authenticated as the member (signed in through the connector with OAuth or an Authorization header, or username + personal key from https://nomads.com/settings). Needs the trip_id (returned by get_trips). Only the authenticated member's own trips can be removed.",
"inputSchema": {
"properties": {
"key": {
"description": "From https://nomads.com/settings. Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
},
"trip_id": {
"description": "From get_trips",
"type": "string"
},
"username": {
"description": "Omit when signed in through the connector (OAuth or Authorization header)",
"type": "string"
}
},
"required": [
"trip_id"
],
"type": "object"
},
"name": "remove_trip"
},
{
"description": "Search Nomads.com for the best cities to live and work remotely. Filters: budget, region, country, internet speed, safety, temperature. Returns at most 100 cities sorted by overall score. Each city includes costs, internet, weather, air quality, safety/cleanliness/healthcare/fun and other 0-5 scores, air conditioning (share of households, availability 1-5), tax burden (tax revenue as % of GDP) and an animated thumbnail video.",
"inputSchema": {
"properties": {
"country": {
"type": "string"
},
"limit": {
"description": "1 to 100",
"type": "integer"
},
"max_cost_usd": {
"description": "Max monthly cost for a nomad in USD (responses also carry expat, local, family, rent and coworking costs)",
"type": "integer"
},
"max_temperature_c": {
"type": "number"
},
"min_internet_mbps": {
"type": "number"
},
"min_safety": {
"description": "0 to 5",
"type": "number"
},
"min_temperature_c": {
"type": "number"
},
"region": {
"description": "One of: Europe, Asia, North America, Latin America, Africa, Middle East, Oceania",
"type": "string"
}
},
"type": "object"
},
"name": "search_cities"
}
]
}What the leaf hashes
{"body":"6241fe29f6368189481fc9ecc7b321c31f7d9e515a8c0995db2532a69467eb57","id":1009147,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793265332245407,"prev":null,"subject":"b25ac698-3869-43f1-a720-54f5853271f7","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (242798 rows).
- 0x38c20df7ee58d36c871aa3b3a4b18b297d4320f168b5ea1befb0e19218adf1b6
- 0xb75df5aff1c74f4572c8de0f0e90e169ada16d7689eefb03885f8acc44aa4b28
- 0x08acb7be7ed2310208822d7199914c98c567431ffb39e0c3f5e87c834a2aa975
- 0xff6de2d7a3f40aa7c95fcf80932e1b3c28006e3705f286618b3e90a500bf7d5e
- 0xe8cfd818dd7fae755da7f03a0b45cfbb8f1e8d61ba2aff75edc332c540a9201f
- 0x57b26fddfef470b7117dc7160bccaa4bf36045206027e7c6ddadb69eadd74c97
- 0xe100a789e529c8ec457a5c51f35b8db9038ddcb4f4df67566204c88af975a9f5
- 0x65900a3067cc4e798d271241a83045507eca38201139a106296caa36dca445ab
- 0xa1829b5c21ed2a70b1f18f8276f87d0bfcfad52afbb9f2813cc05e65c912ed3f
- 0xc24400aacbb6093b17f85e6bf3ca3760f72b8250ea60d938aa5798b539086f29
- 0x0a9f6ee1d60e16f1b3ac9c020d7cdfa4bc33c2f0841c932f14e69a27093a7083
- 0x323c003b20088ff5fc994bd02dcef5bb060fb6e3c817a34b4c86849e5240cf52
- 0x4b7bfa7784180e2ff8d66e25e97761344643b8692c744c82acf0f77be5670a82
- 0x14b86aca7e0af6917fa29c5b89b8f3eab1f2340a671c3d06e6ac6a34fd3a07ee
- 0xa03bd318a195be3bd16f335c7e189443bea4f1f439087a7ac19afec9fa97f9be
- 0x1c3764b490d23b94e5ac838c89f8d3850dedb0819196f367da2479c7a88bf2c0
- 0xd76435ead496863d8b0bfab3434f54cd11da3c49d104fc4064b9cb3381567bbd
- 0xd56e61af23709ed9f460471e3c08400c0142ee83e1fd9057e46350d12edf9c07
- Day root
- 0xc050555c6b023f2aefb6536efb9f0760b92c30a0d06c572b7daf63db259ea17c
- Chained
- 0x4cde8bae2042512e1bec11650628f0293556311cc4ea74d99ffddf02b671a7d6
- Published
- On Arc Testnet, block 69753317: 0x9e85c340732f416e431b111fae72f7624870125f7f379af2732eb6c2ba8cf6a1