# iFood MCP

> iFood MCP Server. Manage all aspects of your food delivery business—from updating menus and setting store hours to tracking complex orders and assigning drivers. Use your AI client to automate order intake, maintain your catalog, and streamline operations across multiple locations without touching the app. It handles real-time order flow and store logistics.

## Overview
- **Category:** industry-titans
- **Price:** Free
- **Tags:** food-delivery, restaurant-operations, menu-management, order-tracking, real-time-sync

## Description

You gotta manage your whole food delivery setup—from updating menus to tracking orders and assigning drivers—without even touching the iFood app. Your AI client handles all the heavy lifting for your business. You'll use this server to automate order intake, keep your menu fresh, and run operations across multiple spots. 

**Handling Orders and Logistics**

Your agent can get a list of all orders for any store, letting you filter by status like PENDING or ACCEPTED. You can grab full details on a single order, checking customer info, the items, and the total cost. To process an order, you can use `update_order_status` to move it through its whole lifecycle, whether you need to change it from 'Pending' to 'Delivered,' or mark it 'Cancelled.' You can track the whole delivery process by pulling detailed delivery info using `get_logistics`, and if you need to get a driver assigned, you just run `assign_driver` with the order ID and driver ID. 

**Managing Stores and Catalogs**

You can list every store ID, name, and address linked to your iFood merchant account using `get_stores`. Need to know what hours a spot is open? You can check the current schedule with `get_business_hours`, or update the store's operating hours for any day of the week using `update_business_hours`. To see how a specific location is set up, pull its full configuration details with `get_store_details`. When it comes to the menu, your agent can retrieve the entire menu structure using `get_catalog`, or check item availability and prepare for pricing or description updates. You'll use `update_catalog_item` to change a specific menu item's price, set its availability, or swap out its description for a given store.

**Daily Operations**

It's simple. You tell your agent what you want—like, 'Accept all pending orders and check tomorrow's hours.' Your AI client runs the necessary tools, executing the tasks directly against your iFood account. You don't have to manually click through the app. You'll run `get_orders` to pull lists of orders, letting you filter by status, customer info, and timestamps. You can also manage your entire inventory and pricing by using `update_catalog_item` to adjust details, or just run `get_catalog` to review the whole menu.


## Tools

### assign_driver
Assigns a specific delivery driver to an iFood order using both the order ID and the driver ID.

### get_business_hours
Retrieves the current operating schedule for a specified iFood store.

### get_catalog
Retrieves the complete menu structure, allowing you to check item availability or prepare updates to pricing and descriptions.

### get_logistics
Retrieves detailed delivery information and tracks order fulfillment for an iFood order.

### get_order_details
Retrieves all information about a single iFood order, including customer details, items, and total costs.

### get_orders
Lists all orders for an iFood store, allowing filtering by status (PENDING, ACCEPTED, etc.).

### get_store_details
Retrieves detailed configuration information for a specific iFood store location.

### get_stores
Lists all store IDs, names, and addresses associated with the iFood merchant account.

### update_business_hours
Updates the store's operating hours, handling schedules for all seven days of the week.

### update_catalog_item
Modifies a specific menu item's details, such as price, availability, or description, for a given store.

### update_order_status
Changes the operational status of an iFood order, moving it through the fulfillment workflow.

## Prompt Examples

**Prompt:** 
```
Show me all pending orders and accept them automatically
```

**Response:** 
```
I'll check your pending orders and accept them right away.
```

**Prompt:** 
```
Update the price of 'Combo Burger Especial' to R$32.90 and mark it as unavailable until tomorrow
```

**Response:** 
```
I'll update the item price and toggle its availability in your catalog.
```

**Prompt:** 
```
Change my store hours to open at 11am and close at 11pm every day this week
```

**Response:** 
```
I'll update your business hours for the entire week right now.
```

## Capabilities

### Process and update order statuses
Use `update_order_status` to advance an order through its lifecycle, from 'Pending' to 'Delivered', or mark it as 'Cancelled'.

### Manage store inventory and pricing
Use `update_catalog_item` to change prices, set item availability, or modify descriptions for specific menu items.

### Get current and historical order lists
Run `get_orders` to retrieve a list of orders, filtered by status, including customer info, totals, and timestamps.

### Handle delivery coordination
Retrieve delivery data using `get_logistics` and assign a specific driver to an order using `assign_driver`.

### Adjust store operating schedule
Use `update_business_hours` to change the store's open and close times for any day or set holiday closures.

### Review store and menu data
Pull detailed store configuration (`get_store_details`) or the entire menu structure (`get_catalog`) for review.

## Use Cases

### Processing a sudden rush of orders
A manager notices a spike in pending orders. They ask their agent to "Check all pending orders and accept them.". The agent runs `get_orders` (filtering for PENDING), then iterates through the list, calling `update_order_status` for each one, getting the entire batch accepted in seconds.

### Updating pricing across multiple locations
The marketing team needs to raise the price of a signature item. Instead of logging into each store portal, they ask their agent to run `get_stores` to find all IDs, then loop through the IDs, calling `update_catalog_item` to apply the new price everywhere.

### Handling a cancelled or delayed order
An order gets stuck and the customer calls. The manager asks the agent to "Check the order details and mark it as cancelled.". The agent runs `get_order_details` for the specific ID, confirming the contents, and then uses `update_order_status` to change the status to CANCELLED.

### Coordinating delivery staff
The kitchen is ready for an order, but no driver is assigned. The worker asks the agent to "Get logistics info and assign a driver.". The agent calls `get_logistics` to confirm the order status, then calls `assign_driver` with the necessary IDs.

### Preparing for a holiday closure
It's the week before a major holiday. The owner asks the agent to "Set the store hours for the holiday week.". The agent uses `update_business_hours` to set the required schedule across all relevant days.

## Benefits

- Manage order status changes instantly. Use `update_order_status` to move orders from PENDING to DELIVERED without manual clicks.
- Keep your menu accurate 24/7. Change prices or toggle item availability using `update_catalog_item` and `get_catalog`.
- Streamline logistics. Check delivery status with `get_logistics` and assign drivers directly via `assign_driver`.
- Control your schedule. Set and change store operating hours for the entire week using `update_business_hours`.
- Get a full picture of your business. Run `get_stores` first to list all locations, then use `get_orders` or `get_store_details` for specific sites.
- Automate multi-step workflows. Combine calls like `get_orders` followed by `update_order_status` to process entire batches of orders.

## How It Works

The bottom line is, your AI client talks to iFood using structured tools, bypassing the app interface entirely.

1. Connect your iFood merchant account using a JWT token from the iFood Developer Portal.
2. Ask your AI client to perform a task using natural language commands (e.g., 'Update the price for X and check all pending orders').
3. The agent selects the required tool(s) and runs them, reporting the outcome directly to you.

## Frequently Asked Questions

**How do I check the current status of all orders using the get_orders tool?**
The `get_orders` tool lists all orders for your store. You can filter the results by status (PENDING, ACCEPTED, etc.) to see exactly what needs attention.

**Can I use update_catalog_item to change a price and mark it as unavailable?**
Yes. The `update_catalog_item` tool handles both price changes and toggling availability. Just pass the required store ID and item ID along with the new parameters.

**What do I need to know before I use update_order_status?**
You need the specific order ID. This tool moves the order through the fulfillment pipeline (e.g., from PENDING to PREPARING). Always confirm the order details first using `get_order_details`.

**Does get_logistics help me assign a driver?**
No, `get_logistics` retrieves the delivery information for an existing order. You must use the `assign_driver` tool to actually coordinate and assign the driver.

**How do I use get_stores to find the IDs I need for other operations?**
It's the necessary first step. You run `get_stores` to pull a list of store IDs, names, and addresses. You'll need those IDs to correctly target operations like updating the catalog or fetching specific orders.

**What is the correct process for updating store hours using update_business_hours?**
You must pass a JSON object containing the schedule for every day of the week. This object needs day keys (like 'monday') and an array of start/end time objects for those days.

**If I change an order's status with update_order_status, how do I ensure the change is tracked?**
The system updates the order's status and records the change. You can then use `get_orders` or `get_order_details` afterward to verify the new status and confirm the change was applied.

**When should I use get_catalog versus get_order_details?**
Use `get_catalog` when you're looking at the store's menu structure, pricing, or item availability. Use `get_order_details` when you need specific information about a single customer's order, including items and totals.

**Does this work for iFood customers or only merchants?**
This MCP server is designed exclusively for iFood merchants (restaurant owners). It uses the Merchant API to manage orders, catalogs, and operations. Consumer-side features require a different API. If you're a restaurant owner using iFood for delivery, this is for you.

**Can I accept and prepare orders automatically with this MCP?**
Yes! AI agents can update order status through the full workflow: PENDING -> ACCEPTED -> PREPARING -> READY -> DISPATCHED -> DELIVERED. You can build automation rules to accept orders instantly, notify kitchen staff, and track preparation times.

**Does this support multiple restaurant locations?**
Absolutely. The API returns all stores associated with your merchant account. Each tool requires a store_id parameter, so you can manage operations independently across all your restaurant locations. AI agents can list all your stores first to get their IDs.