A hosted MCP server that gives an assistant curated editorial New York restaurant recommendations: search, details, comparisons, guides and ratings.
What you can do
Search restaurants by free text, cuisine, neighbourhood, occasion or price, optionally near a point, and list top-rated places with filters for cuisine, neighbourhood and price tier. Retrieve one restaurant's full profile: rating, price tier, address, reservation link, booking intel, review summary, tags and the guides it appears in. Compare two to five named restaurants head-to-head on rating, price, tags and review summary. Find curated editorial guides by theme, with ranked entries and blurbs, and rank restaurants by how many guides feature them. Find restaurants similar to a named one by shared cuisine, occasion and neighbourhood tags, price proximity and guide co-occurrence. Record 1–5,
When to use it
Useful when someone wants New York dining recommendations in a conversational assistant: describing a craving or occasion, choosing between named places, asking for editorial best-of lists or safest bets, or looking for alternatives to a favourite. It is a hosted, no-install option for clients that support remote MCP servers.
Requirements
A remote Streamable HTTP endpoint; no authentication, installation or API key is declared. The README lists the hosted URL and setup snippets for Cursor, Claude Code, Claude app and other MCP clients. Network access to the hosted service is required.
Before you install
The submit_feedback tool writes a new feedback entry on every call, so comments and ratings are stored server-side; avoid including personal or sensitive details. Recommendations come from third-party editorial sources and may be incomplete or out of date. The README notes the MVP city is New York.
Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Use with an agent
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.tireniajilore%2Fnycfoodie/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.
The data layer for restaurant taste: structured, editorial restaurant recommendations served to AI agents over MCP. Not another review scraper — curated guides and reviews normalised into one schema, queryable by tools.
MVP city: New York. The city is a parameter everywhere; nothing NYC-specific is hardcoded.
db/ — SQLite storage (better-sqlite3) with numbered SQL migrations written in Postgres-compatible DDL. The migration runner is dialect-agnostic by convention, so a Postgres adapter can replace better-sqlite3 later without touching the migrations.
crawler/ — source adapters (starting with The Infatuation) that normalise into the db schema. Endpoint/field mapping: docs/infatuation-data-surface.md (step 2).
mcp/ — stdio MCP server (@modelcontextprotocol/sdk) exposing search, detail, comparison and guide tools.
Quickstart
bash
npm installnpm run typechecknpm run buildnode db/dist/migrate.js ./nycfoodie.db # creates/opens the SQLite db, applies migrationsnode mcp/dist/index.js # starts the MCP server on stdio
Search restaurants by free text, cuisine, neighbourhood, occasion or price, optionally near a point. Use when the user describes what they want (e.g. 'Italian date night in the West Village', 'ramen near me') rather than naming a specific restaurant. Free text matches names, tags, review prose and guide blurbs (e.g. 'cacio e pepe'). Returns compact matches with Infatuation rating (0–10), price tier, address_line and tags. Cards carry guide_appearance_count (a number); get_restaurant's guide_appearances is the full entry list. Known-closed venues are excluded by default. Coverage for city='new-york' is the five boroughs plus the immediate metro (within 30 km of Manhattan). With no query or filters, returns the highest-rated venues.
Parameterslatlngcityrequiredsortlimitquerycuisineoccasionradius_kmmin_ratingprice_tierneighborhood+1 more
get_restaurant
Get the full picture for one restaurant in one call: Infatuation rating (0–10), price tier, address, reservation link, booking intel, review summary, tags and every guide it appears in. Use when the user names a specific restaurant. editorial_blurbs carries verbatim Eater guide excerpts (guide title, URL, position, blurb, captured_at) for any venue with Eater guide entries — Eater-only venues have no rating or price, only this prose plus tags. Full review prose is opt-in via include_prose (default: headline and summary only). review.headline is the source's actual headline when one exists, otherwise null — use review.summary for the descriptive text. match_type is 'exact' when the id or name matched verbatim, 'fuzzy' when it was resolved from a partial/typo'd name — never present a fuzzy match as the venue the user named without saying so. booking is null when the source has no booking intel (not the same as walk-in-only); a reservation link alone never implies a booking policy. data_as_of is the dataset vintage and crawled_at is when this venue was last crawled — caveat fast-decaying claims (closures especially) when these are old.
Parametersidcityrequirednameinclude_prose
compare_restaurants
Compare 2–5 named restaurants head-to-head as structured data (rating, price, tags, review summary). Use when the user asks to choose between specific places, e.g. 'should I go to X or Y?' or to compare four options on a budget.
Parametersidscityrequiredrestaurants
find_guides
Find curated editorial guides (ranked lists) matching a theme, e.g. 'best ramen'. Returns each guide with its ranked entries, blurbs and linked restaurants. Use when the user wants the editorial lists themselves rather than individual restaurant picks. Set include_entries=false to list guide titles and metadata without pulling every entry blurb.
Parameterscityrequiredlimitqueryinclude_entries
find_similar
Find restaurants similar to a named one, scored by shared cuisine, occasion and neighbourhood tags, price-tier proximity and guide co-occurrence. Use for 'like X' or 'alternatives to X' requests.
Parametersidcityrequirednamelimit
guide_consensus
Rank restaurants by how many distinct guides feature them, optionally filtered by theme. Use for 'where can't I go wrong' or safest-bet picks. Differs from find_guides: this returns ranked restaurants, not the guides themselves. Each row carries guide_appearance_count (a number); get_restaurant's guide_appearances is the full entry list.
Parameterscityrequiredlimittheme
top_rated
List the highest-rated restaurants (Infatuation 0–10 scale), with optional cuisine, neighbourhood and price filters. Use for 'best in the city' requests. Differs from search_restaurants: no free-text query, strictly rating-ordered.
Record feedback on a tool result: a 1–5 rating, a comment, or both (at least one is required). Use after showing the user a recommendation to log what was good or wrong. Each call stores a new feedback entry; it changes nothing the user sees.
Parameterstoolratingcomment
Version history
1
v1.0.0LatestSep 20, 2026
Score
90%
90% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Reached in the last 30 daysRequired25 pts
Auth declaredRequired10 pts
Tools listedRequired15 pts
DescriptionRequired15 pts
Logo10 pts
Documentation15 pts
License10 pts
Declare a license in the repository or the registry entry.
npm installnpm run typechecknpm run buildnode db/dist/migrate.js ./nycfoodie.db # creates/opens the SQLite db, applies migrationsnode mcp/dist/index.js # starts the MCP server on stdio