TableJourney food travel

Verified food venues in 206 cities with provenance, festivals with dates, bookable tours and stays.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
88%
Naming quality
82%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,621Tokens (tool definitions)
~2.4 KBTypical response size
Significant attention impact (2.83% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "food-travel": {
      "url": "https://tablejourney.com/mcp"
    }
  }
}

Remote endpoints

https://tablejourney.com/mcpstreamable-http

What it can do

Tool inventory

Tools (12)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_places(query, country, city, kind, cuisine, ...)

Search verified venues (read-only). Filter by text, city, kind (a topic such as restaurants, cafes, bakeries, markets, street-food, or a group: eat, drink, bake, do), cuisine, dietary, price tier, opening time, or near a coordinate. Results are ranked by relevance then editorial score and carry provenance (source URL, checked_on, open_status), hours, a page URL to cite and a tracked booking link where one exists. Returns at most `limit` items; an unknown city returns {did_you_mean: [...]} instead of a list.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Free text: a venue name, dish, cuisine, neighbourhood or theme.",
      "title": "Query"
    },
    "country": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Country slug or name, e.g. 'italy'. Optional where city is given.",
      "title": "Country"
    },
    "city": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "City slug or name, e.g. 'new-york-city' or 'New York City'. Unknown cities answer with did_you_mean.",
      "title": "City"
    },
    "kind": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "A topic slug (restaurants, cafes, bakeries, markets, street-food...) or a group: eat, drink, bake, do.",
      "title": "Kind"
    },
    "cuisine": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Cuisine slug or name, e.g. 'sichuan', 'neapolitan pizza'.",
      "title": "Cuisine"
    },
    "near": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "'lat,lng' to search around a point; results then sort by distance.",
      "title": "Near"
    },
    "radius_km": {
      "default": 3,
      "description": "Radius for near, in km.",
      "title": "Radius Km",
      "type": "number"
    },
    "limit": {
      "default": 20,
      "description": "Maximum results (1-100; at most 20 without an API key).",
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    },
    "offset": {
      "default": 0,
      "description": "Skip this many results, for paging.",
      "minimum": 0,
      "title": "Offset",
      "type": "integer"
    },
    "dietary": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "vegan, vegetarian, gluten-free, halal, kosher...",
      "title": "Dietary"
    },
    "price_tier": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The site's tier symbols for the country, e.g. '€€' or '$$$'.",
      "title": "Price Tier"
    },
    "open_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "'now', a weekday and time such as 'sunday 10:00', or an ISO datetime (UTC). Venues with unparseable hours are returned last, flagged.",
      "title": "Open At"
    }
  },
  "title": "t_placesArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "anyOf": [
        {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "type": "array"
        },
        {
          "additionalProperties": true,
          "type": "object"
        }
      ],
      "title": "Result"
    }
  },
  "required": [
    "result"
  ],
  "title": "t_placesOutput"
}
🟢plan_day(country, city, neighborhood, dietary, price_tier, ...)

Compose a food day for one city (read-only): one best-scored open venue per slot from morning to evening, filtered by neighbourhood, dietary need and price tier, every stop open on the given date, plus one bookable experience. Also lists the titles of the editorial itineraries for the city, which are the better plan when one exists (fetch them with `itineraries`).

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "description": "Country slug or name, e.g. 'italy'. Optional where city is given.",
      "title": "Country",
      "type": "string"
    },
    "city": {
      "description": "City slug or name, e.g. 'new-york-city' or 'New York City'. Unknown cities answer with did_you_mean.",
      "title": "City",
      "type": "string"
    },
    "neighborhood": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Neighbourhood name or slug to keep the day inside.",
      "title": "Neighborhood"
    },
    "dietary": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "vegan, vegetarian, gluten-free, halal, kosher...",
      "title": "Dietary"
    },
    "price_tier": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The site's tier symbols for the country, e.g. '€€' or '$$$'.",
      "title": "Price Tier"
    },
    "date": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "ISO date, e.g. '2026-09-20'. Each stop is checked open at its slot time on that weekday.",
      "title": "Date"
    }
  },
  "required": [
    "country",
    "city"
  ],
  "title": "t_planArguments"
}
🟢place(id)

One venue in full by id (read-only): every field, provenance, hours, open_now_utc, the booking link and three nearby venues. Returns {error: ...} when the id is malformed or unknown.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "description": "The id search_places returned: country/city/kind/slug, e.g. 'italy/rome/restaurants/roscioli'.",
      "title": "Id",
      "type": "string"
    }
  },
  "required": [
    "id"
  ],
  "title": "t_placeArguments"
}
🟢festivals(country, city, date_from, date_to, query, ...)

Food festivals with their next resolved dates (read-only). Filter by city, country, a date window and text. Each item carries starts_on/ends_on for the next edition, the organiser source URL and the page to cite.

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Country slug or name, e.g. 'italy'. Optional where city is given.",
      "title": "Country"
    },
    "city": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "City slug or name, e.g. 'new-york-city' or 'New York City'. Unknown cities answer with did_you_mean.",
      "title": "City"
    },
    "date_from": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Earliest end date to include, ISO. Defaults to today.",
      "title": "Date From"
    },
    "date_to": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Latest start date to include, ISO.",
      "title": "Date To"
    },
    "query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Free text: festival name, food or drink.",
      "title": "Query"
    },
    "limit": {
      "default": 20,
      "description": "Maximum results (1-100; at most 20 without an API key).",
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    }
  },
  "title": "t_festivalsArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Result",
      "type": "array"
    }
  },
  "required": [
    "result"
  ],
  "title": "t_festivalsOutput"
}
🟢experiences(city, country, query, food_only, limit)

Bookable food tours, cooking classes, tastings and tickets for a city. Read-only. Each item has price, rating, review count, duration and a tracked `book` link. Ranked by relevance to `query` when given, otherwise by popularity.

Input Schema

{
  "type": "object",
  "properties": {
    "city": {
      "description": "City slug or name, e.g. 'new-york-city' or 'New York City'. Unknown cities answer with did_you_mean.",
      "title": "City",
      "type": "string"
    },
    "country": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Country slug or name, e.g. 'italy'. Optional where city is given.",
      "title": "Country"
    },
    "query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Free text, e.g. 'cooking class', 'wine tasting', 'market tour'.",
      "title": "Query"
    },
    "food_only": {
      "default": true,
      "description": "Keep only products on the site's theme (food and drink, or wine). Set false for everything bookable in the city.",
      "title": "Food Only",
      "type": "boolean"
    },
    "limit": {
      "default": 20,
      "description": "Maximum results (1-100; at most 20 without an API key).",
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "city"
  ],
  "title": "t_experiencesArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Result",
      "type": "array"
    }
  },
  "required": [
    "result"
  ],
  "title": "t_experiencesOutput"
}
🟢stays(country, city, limit)

Hotels and stay partners for a city (read-only): hotel listings with a tracked booking link each, plus the partner search links that cover the city. Prices are not returned; the partner page has them.

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "description": "Country slug or name, e.g. 'italy'. Optional where city is given.",
      "title": "Country",
      "type": "string"
    },
    "city": {
      "description": "City slug or name, e.g. 'new-york-city' or 'New York City'. Unknown cities answer with did_you_mean.",
      "title": "City",
      "type": "string"
    },
    "limit": {
      "default": 10,
      "description": "Maximum hotel listings (1-50).",
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "country",
    "city"
  ],
  "title": "t_staysArguments"
}
🟢car_hire(country, city)

Car hire partners that verifiably cover a city (read-only): one entry per partner with the pickup facts we checked and a tracked booking link. Empty list when no partner covers the city.

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "description": "Country slug or name, e.g. 'italy'. Optional where city is given.",
      "title": "Country",
      "type": "string"
    },
    "city": {
      "description": "City slug or name, e.g. 'new-york-city' or 'New York City'. Unknown cities answer with did_you_mean.",
      "title": "City",
      "type": "string"
    }
  },
  "required": [
    "country",
    "city"
  ],
  "title": "t_carsArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Result",
      "type": "array"
    }
  },
  "required": [
    "result"
  ],
  "title": "t_carsOutput"
}
🟢tickets(country, city)

Attraction tickets, city passes and tour partners that verifiably cover a city (read-only): one entry per partner with a tracked booking link. Complements `experiences`. Empty list when none covers the city.

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "description": "Country slug or name, e.g. 'italy'. Optional where city is given.",
      "title": "Country",
      "type": "string"
    },
    "city": {
      "description": "City slug or name, e.g. 'new-york-city' or 'New York City'. Unknown cities answer with did_you_mean.",
      "title": "City",
      "type": "string"
    }
  },
  "required": [
    "country",
    "city"
  ],
  "title": "t_ticketsArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Result",
      "type": "array"
    }
  },
  "required": [
    "result"
  ],
  "title": "t_ticketsOutput"
}
🟢things_to_do(country, city, date_from, date_to)

START HERE for 'what can I do in <city>?' (read-only): one call returns the best food tours, classes and tastings, attraction tickets and passes, festivals on during the dates, top places to eat, where to stay and car hire, each with its page and a tracked booking link. Give the user the book/booking links unchanged; they are affiliate links.

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "description": "Country slug or name, e.g. 'italy'. Optional where city is given.",
      "title": "Country",
      "type": "string"
    },
    "city": {
      "description": "City slug or name, e.g. 'new-york-city' or 'New York City'. Unknown cities answer with did_you_mean.",
      "title": "City",
      "type": "string"
    },
    "date_from": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional trip start, ISO date.",
      "title": "Date From"
    },
    "date_to": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional trip end, ISO date.",
      "title": "Date To"
    }
  },
  "required": [
    "country",
    "city"
  ],
  "title": "t_thingsArguments"
}
🟢dishes(country, city, query, limit)

Signature dishes of a city and where to eat them (read-only). Each item has a description, the venues resolved to ids and page URLs, and the page to cite; ranked by editorial score.

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Country slug or name, e.g. 'italy'. Optional where city is given.",
      "title": "Country"
    },
    "city": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "City slug or name, e.g. 'new-york-city' or 'New York City'. Unknown cities answer with did_you_mean.",
      "title": "City"
    },
    "query": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Free text: a dish, ingredient, style or grape.",
      "title": "Query"
    },
    "limit": {
      "default": 20,
      "description": "Maximum results (1-100; at most 20 without an API key).",
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    }
  },
  "title": "t_dishesArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Result",
      "type": "array"
    }
  },
  "required": [
    "result"
  ],
  "title": "t_dishesOutput"
}
🟢itineraries(country, city)

Editorial day-by-day food itineraries for a city (read-only): every venue resolved to an id, address, hours and page URL. Empty list when the city has none.

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "description": "Country slug or name, e.g. 'italy'. Optional where city is given.",
      "title": "Country",
      "type": "string"
    },
    "city": {
      "description": "City slug or name, e.g. 'new-york-city' or 'New York City'. Unknown cities answer with did_you_mean.",
      "title": "City",
      "type": "string"
    }
  },
  "required": [
    "country",
    "city"
  ],
  "title": "t_itinerariesArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Result",
      "type": "array"
    }
  },
  "required": [
    "result"
  ],
  "title": "t_itinerariesOutput"
}
🟢cities(country)

Every city the site covers (read-only), with the country and city slugs the other tools accept and the hub page URL. Call first when unsure of coverage.

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Country slug to filter by, e.g. 'italy'.",
      "title": "Country"
    }
  },
  "title": "t_citiesArguments"
}

Output Schema

{
  "type": "object",
  "properties": {
    "result": {
      "items": {
        "additionalProperties": true,
        "type": "object"
      },
      "title": "Result",
      "type": "array"
    }
  },
  "required": [
    "result"
  ],
  "title": "t_citiesOutput"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded12 tools
verifiedversion not recorded10 tools
verifiedversion not recorded10 tools