McDonald's API: Search restaurants
Finds McDonald's restaurants within 50 miles of a US city, address or ZIP code, nearest first. Each result includes today's hours, services and directions. Open-now status follows the listed hours.
Unofficial. Not affiliated with or endorsed by McDonald's.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Location, required
location US city, street address, or ZIP code, for example Chicago, IL.
Chicago, IL
- Max Results optional
max_results Maximum restaurants to return, for example 10.
10
Whole number from 1 to 30. Default
10.- Open Now Only optional
open_now_only Only show restaurants open now, for example false.
false
True or false. Default
false.
Input as JSON
{ "location": "Chicago, IL", "max_results": 10, "open_now_only": false}Output
{ "restaurants": [ { "address": "111 W Jackson, Chicago, IL 60604", "latitude": 41.877966, "open_now": false, "page_url": "https://www.mcdonalds.com/us/en-us/location/il/chicago/111-w-jackson/20104.html" , "services": [ "Gift Cards", "Indoor Dining", "Accessible Kiosk" ], "longitude": -87.631736, "phone_number": "(312) 922-1648", "store_number": "20104", "directions_url": "https://www.google.com/maps/dir/?api=1&destination=41.877966%2C-87.631736&travelmode=driving" , "distance_miles": 0.41, "todays_opening_hours": "5:00 AM – 8:00 PM", "todays_drive_thru_hours": "5:00 AM – 10:00 PM" }, { "address": "180 W Adams, Chicago, IL 60603-3602", "latitude": 41.879502, "open_now": false, "page_url": "https://www.mcdonalds.com/us/en-us/location/il/chicago/180-w-adams/4061.html" , "services": [ "Gift Cards", "Indoor Dining", "Accessible Kiosk" ], "longitude": -87.633621, "phone_number": "(312) 580-0773", "store_number": "4061", "directions_url": "https://www.google.com/maps/dir/?api=1&destination=41.879502%2C-87.633621&travelmode=driving" , "distance_miles": 0.55, "todays_opening_hours": "5:00 AM – 4:00 AM (next day)", "todays_drive_thru_hours": "5:00 AM – 4:00 AM (next day)" }, { "address": "203 N Lasalle St, Chicago, IL 60601", "latitude": 41.885816, "open_now": false, "page_url": "https://www.mcdonalds.com/us/en-us/location/il/chicago/203-n-lasalle-st/36148.html" , "services": [ "Gift Cards", "Indoor Dining", "Accessible Kiosk" ], "longitude": -87.631667, "phone_number": "(312) 332-0482", "store_number": "36148", "directions_url": "https://www.google.com/maps/dir/?api=1&destination=41.885816%2C-87.631667&travelmode=driving" , "distance_miles": 0.8, "todays_opening_hours": "5:30 AM – 11:00 PM", "todays_drive_thru_hours": "5:30 AM – 8:00 PM" } ]}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"mcdonalds.com/search_restaurants","input":{"location":"Chicago, IL","max_results":10,"open_now_only":false}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "mcdonalds.com/search_restaurants" , "input": { "location": "Chicago, IL", "max_results": 10, "open_now_only": False }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "mcdonalds.com/search_restaurants" , "input": { "location": "Chicago, IL", "max_results": 10, "open_now_only": false } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run mcdonalds.com/search_restaurants# with {"location":"Chicago, IL","max_results":10,"open_now_only":false}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "location" ], "properties": { "location": { "type": "string", "minLength": 1, "description": "US city, street address, or ZIP code, for example Chicago, IL." }, "max_results": { "type": "integer", "default": 10, "maximum": 30, "minimum": 1, "description": "Maximum restaurants to return, for example 10." }, "open_now_only": { "type": "boolean", "default": false, "description": "Only show restaurants open now, for example false." } }}Output schema
{ "type": "object", "required": [ "restaurants" ], "properties": { "restaurants": { "type": "array", "items": { "type": "object", "properties": { "address": { "type": "string" }, "latitude": { "type": "number" }, "open_now": { "type": "boolean" }, "page_url": { "type": "string" }, "services": { "type": "array", "items": { "type": "string" } }, "longitude": { "type": "number" }, "phone_number": { "type": [ "string", "null" ] }, "store_number": { "type": [ "string", "null" ] }, "directions_url": { "type": "string" }, "distance_miles": { "type": "number" }, "todays_opening_hours": { "type": [ "string", "null" ] }, "todays_drive_thru_hours": { "type": [ "string", "null" ] } } } } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
mcdonalds.com/search_restaurants- Returns
- address, distance, phone, today's hours, drive-thru hours, open now, services, directions URL, page URL, store number, coordinates
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method mcdonalds.com/search_restaurants with the inputs above.
Ask your agent
- Find the nearest McDonald's to 90210 with hours and drive-thru info
- Which McDonald's near Austin, TX is open right now?
- I need a list of 8 McDonald's within 50 miles of Denver, CO including phone numbers
- Show McDonald's locations around the address 425 Market St, San Francisco with their services and directions
- Are there any open McDonald's restaurants near ZIP 60601 at this moment? Show store numbers and coordinates
See more
All McDonald's methodsLooks up a McDonald's menu item by name on the US, UK or Canada site and returns its nutrition, allergens, ingredients and photo link.
mcdonalds.com/get_menu_item_nutritionFinds Starbucks cafés near a city, address or ZIP code, nearest first, with whether each is open now, today's local hours and amenities; optionally only cafés open now.
starbucks.com/search_storesFinds the nearest open Chipotle that takes online orders for a city, address, or ZIP code and returns its address, distance, today's hours and the pickup menu with prices, calories and photos.
chipotle.com/get_menuFinds the AutoZone stores nearest a US ZIP code, city or street address, with contact details, opening hours, whether each is open now, distance and store page links.
autozone.com/search_storesFinds DoorDash restaurants delivering to a street address or ZIP code, optionally for a cuisine or dish, in DoorDash's search order. Fees and times reflect guest offers; the numeric fee is null when DoorDash shows no amount.
doordash.com/search_restaurantsLooks up a public Google Maps place by name and location and returns its profile: address, rating, hours, phone, website and photos.
google.com/get_placeFinds businesses and places near a location on Google Maps, in Google Maps order, with rating, hours, contact details and links when shown.
google.com/search_placesFinds the US Costco warehouses nearest a city, address or ZIP code, with today's and weekly hours, gas station hours, services and posted gas prices.
costco.com/search_warehouses