Skip to main content
Glama
Ichibu013

Agentic Swiggy MCP Server

by Ichibu013
README.md
# Agentic Swiggy MCP Server

![Python](https://img.shields.io/badge/Python-3.10%2B-blue)
![LangChain](https://img.shields.io/badge/LangChain-Integration-green)
![LangGraph](https://img.shields.io/badge/LangGraph-Agents-orange)
![FastMCP](https://img.shields.io/badge/FastMCP-Server-purple)
![ChromaDB](https://img.shields.io/badge/ChromaDB-VectorStore-blueviolet)

A highly modular, non-deterministic agentic Model Context Protocol (MCP) server that mimics a food delivery assistant (like Swiggy). Built with **LangGraph**, **FastMCP**, and **ChromaDB**, this server leverages an intelligent ReAct agent to dynamically route tasks, answer questions, provide recommendations, and safely execute food orders using a **Human-in-the-Loop (HITL)** workflow.

---

## Core Features

*   **Non-Deterministic ReAct Agent**: The agent dynamically decides which tools to use based on the conversational context without hardcoded workflows.
*   **Human-In-The-Loop (HITL)**: Order placements are securely intercepted. The agent pauses execution to ask for human authorization before finalizing any real transactions.
*   **Multi-Format RAG Ingestion**: A decoupled ingestion pipeline that universally parses `.json`, `.csv`, `.md`, `.txt`, and `.pdf` files into a local ChromaDB vector store.
*   **Contextual Recommendations**: Recommends the top 3 food items dynamically evaluated against the user's current geographic location and time of day.
*   **Model Context Protocol (MCP)**: Exposes the agent's capabilities as standardized MCP tools, making them discoverable and usable by modern LLM clients (like Claude Desktop).
*   **100% Local Embeddings**: Built-in support for HuggingFace `sentence-transformers` for cost-free, offline vector embeddings.

---

## Project Structure

```text
swiggy_agent/
├── data/
│   ├── restaurants_menu.json        # Restaurant catalog & timings
│   ├── order_history.json           # Past & active order records
│   ├── food_reviews.csv             # Customer reviews & sentiment
│   └── platform_policies.md         # Packaging & late-night guidelines
├── src/
│   ├── ingestion.py                 # Multi-format universal data ingestor
│   ├── tools/
│   │   ├── __init__.py
│   │   ├── order_tool.py            # Tool 1: Order Food (HITL sensitive)
│   │   ├── recommendation_tool.py   # Tool 2: Geo/Time Recommendations
│   │   ├── history_tool.py          # Tool 3: Order tracking & history
│   │   └── rag_tool.py              # Tool 4: Review retrieval RAG
│   ├── agent.py                     # Non-deterministic LangGraph agent + HITL
│   └── mcp_server.py                # FastMCP Server exposing tools
├── requirements.txt
├── .env                             # Environment variables (API Keys)
└── main.py                          # Entry point for interactive CLI testing
```

---

## Setup & Installation

### 1. Install Dependencies
Ensure you have Python 3.10+ installed. Install the required packages:

```bash
pip install -r requirements.txt
# Alternatively, install manually:
pip install mcp langchain langchain-openai langchain-huggingface langchain-chroma langgraph chromadb sentence-transformers python-dotenv
```

### 2. Configure Environment Variables
Create a `.env` file in the root directory and add your LLM API keys (e.g., Google Gemini, OpenAI, or Groq):

```env
# Example using Google Gemini (Recommended for free tier)
GEMINI_API_KEY=your_api_key_here

# Example using OpenAI (If applicable)
# OPENAI_API_KEY=your_api_key_here
```

### 3. Initialize the Vector Database
Before running the agent, ingest the synthetic data to build the local ChromaDB vector store:

```bash
python src/ingestion.py
```

---

## Usage

### Option 1: Run the Interactive Agent Demo
Test the LangGraph agent and the Human-in-the-Loop order workflow via the terminal:

```bash
python main.py
```
*Try a prompt like: "Hi, I'm USR_500 in Koramangala at 21:00. What's good to eat around here? Check reviews for what people say, and if it's rated well, order 1 portion to 5th Block."*

### Option 2: Start the MCP Server
To expose the tools to an MCP-compatible client (like Claude Desktop or an external app):

```bash
python src/mcp_server.py
```

---

## Tools Reference

| Tool Name | Description | Output |
| :--- | :--- | :--- |
| `order_food` | Places a food order. Triggers a graph interrupt requiring a `"yes"` authorization from the user. | JSON confirmation |
| `get_top_3_food` | Evaluates local restaurants based on `location` and `current_time` to suggest the best options. | JSON array |
| `get_order_status_and_history`| Retrieves active and historical order data for a specific user ID. | JSON dict |
| `query_food_reviews_and_policies`| Performs RAG semantic search over reviews, menus, and platform policies. | Markdown text |

---

## License
MIT License