@pipeworx/foursquare
Connect: https://gateway.pipeworx.io/foursquare/mcp · Install: one-click buttons
No MCP client? Skip the connection: POST https://gateway.pipeworx.io/v1/tools/search_packs {"query":"..."} to find a tool below, GET /v1/tools/<name> for its schema, POST the same URL with arguments for the data — see For AI agents.
Tools: 3
Foursquare Places API (2025 places-api.foursquare.com) MCP — keyless POI search with categories, address, contact, and rating-ordered results.
Tools
search_places(query?, near?, latitude?, longitude?, radius_m?, categories?, sort?, limit?)get_place(fsq_id)nearby_places(latitude, longitude, radius_m?, categories?, limit?)
Auth
- Platform key: gateway env
PLATFORM_FOURSQUARE_KEY. - BYO:
?_apiKey=<key>after registering at https://foursquare.com/developers/.
Foursquare’s free allowance is 10,000 Pro calls/month.
Ratings are a Premium field (read this before promising a rating)
Foursquare’s 2025 API splits response fields into Pro (returned by default:
name, categories, address, lat/lon, distance, tel, website, social) and
Premium (rating, price, popularity, hours, description, tips,
photos). Premium fields only come back when named in fields, and any call that
names one bills at the Premium rate — $18.75 per 1,000 calls, no free tier
(foursquare.com/pricing, checked 2026-09-19).
Until that spend is approved for public traffic (fleet #2271), the pack requests
Premium fields only for internal callers (the gateway injects
_internalCaller). Every response carries rating_included, a rating_reason
(included / not_requested / refused_by_vendor) and, when the rating is
absent, a rating_note — so a null rating reads as not requested or withheld
by the vendor, never as unrated. sort:"RATING" is honoured by Foursquare
either way, so the ORDER is by rating even when the number is withheld. To enable
ratings for everyone flip PREMIUM_FIELDS_PUBLIC in src/index.ts.
refused_by_vendor is the state you will see until Premium billing is enabled
on the platform account. Measured 2026-09-19: naming a Premium field on the
unbilled platform key made Foursquare answer HTTP 429 on every call, so a
Premium request the vendor refuses (429/402/403) is re-run once Pro-only and
labelled, rather than failing the call or pretending the null was unrequested.
Once billing is on, the first request succeeds and the retry never happens.
Data source
https://places-api.foursquare.com/places — headers Authorization: Bearer <api_key> and X-Places-Api-Version: 2025-06-17.
Tools
- search_places — Search Foursquare places (keyless — Pipeworx supplies the key). Combine
query(e.g., “coffee”, “hardware store”) with a location anchor — eithernear(“Brooklyn, NY”, “San Francisco, CA”) or `lati - get_place — Full place details by fsq_place_id. Returns name, categories, address, lat/lon, social media, website, tel. hours/rating/price/popularity are Foursquare Premium fields — present only where enabled (se
- nearby_places — Return POIs sorted by distance from a lat/lon without a text query. Requires latitude+longitude; optional radius_m (default 500m) and numeric fsq_category_ids filter. Returns name, categories, address
Tools
get_place— Full place details by fsq_place_id. Returns name, categories, address, lat/lon, social media, website, tel. hours/rating/price/popularity are Foursquare Premium fields — present only where enabled (senearby_places— Return POIs sorted by distance from a lat/lon without a text query. Requires latitude+longitude; optional radius_m (default 500m) and numeric fsq_category_ids filter. Returns name, categories, addresssearch_places— Search Foursquare places (keyless — Pipeworx supplies the key). Combine `query` (e.g., coffee , hardware store ) with a location anchor — either `near` ( Brooklyn, NY , San Francisco, CA ) or `latitud