chewy · smoky · ₹400 rainy-day biryani lunch for eight
Moodish

Your food concierge

Say the mood.
We’ll find the meal.

No filters to fight. Moodish asks only what matters, then plans from what is actually available.

G Continue with Google S Continue with Swiggy

Swiggy sign-in connects your saved address and live availability when MCP access is enabled.

Moodish Enterprise Private response

You’re invited to a team meal

Tell Moodish what works for you.

Loading the lunch brief…

Food mode

Finalists are ready

Only aggregate dietary coverage is shown publicly. Individual restrictions stay private.
Moodish
Connecting

Plan

Your meal memory

0
No confirmed meal plans yet.
You approve every cartPlanning cannot place an order. Cart changes always need your review.
Developer lens
The recommendation trace will appear here.

Moodish concierge

What would hit the spot?

Dish, texture, weather, energy—say as much or as little as you know.

Hey, I’m Moodish.

Tell me what you feel like eating. Try “chewy smoky chaap” or give me everything at once: “spicy Chinese, non-veg, under ₹450.”

I’m checking the time of day so I can make the first question useful.

How adventurous?

Moodish defaults discovery to balanced and suggests sensible add-ons. You can override either in your message.

Your plan

Here’s what fits.

Searching availability around your selected address

🛒
Review Food cartNothing changes until you approve this preview.

        

Moodish Enterprise

Lunch operations, without the spreadsheet.

A manager sets the policy. Employees respond privately. Moodish builds one efficient, approval-ready plan.

Enterprise controls · private by default
1
Manager sets policyHeadcount, budget per person, delivery need, and decision method.
2
Employees answer privatelyA web link or workplace app collects cravings, diet rules, and allergies.
3
Moodish consolidatesOne restaurant first; a split is disclosed only when hard constraints require it.
4
Creator confirms the cartThe manager approves a plan; the Swiggy-connected creator confirms the final mutation.
01

Define lunch policy

Set the headcount, budget, and how the final decision is made.

02

Invite employees privately

Launch a lunch to create the private response link.

Incoming preferencesVisible only to the host and assigned managers
03

Approve the enterprise plan

Coverage, budget, quantities, and trade-offs are visible before any cart change.

Optional Instamart round

Drinks for everyone?

Moodish suggests one team-wide drink only when it fits the remaining group budget. This stays a separate Instamart fulfilment.

Workplace app adapters

Deploy where employees already work.

Each adapter starts the same private enterprise workflow. Public channels see progress and aggregate coverage—never individual dietary or allergy details.

Moodish for Slack/moodish starts the lunch; teammates open a private form.Adapter ready · app credentials required
Moodish for Microsoft TeamsAn adaptive card launches collection and reports safe progress.Adapter ready · app registration required
Moodish for DiscordA command starts collection; private responses feed the same dashboard.Adapter ready · bot credentials required
How do I test Moodish in Slack?
  1. Create an app at api.slack.com/apps and choose “From scratch.”
  2. Add a slash command named /moodish. Set its Request URL to https://moodish.onrender.com/api/platforms/slack/events.
  3. Copy the app’s Signing Secret to Render as SLACK_SIGNING_SECRET.
  4. For the manager dashboard, add the redirect URL https://moodish.onrender.com/api/platforms/slack/oauth/callback, then set SLACK_CLIENT_ID and SLACK_CLIENT_SECRET on Render.
  5. Install the app to your workspace, redeploy Moodish, then type /moodish easy team lunch in a test channel.

The channel receives safe progress plus a private preference link. The manager button uses Slack identity to protect approval access.

Product + engineering reference

From a mood to a guarded cart.

This page documents what Moodish does today, which calls are conditional, and which capabilities are deliberately not implemented.

AI semantic intentDeterministic rankingFood cart needs confirmationCheckout disabled
On this page System User flows AI boundary Swiggy calls Ranking + memory Not implemented
01

System boundary

The web experience, workplace adapters and Moodish MCP share one agent service. Fixture and live data are normalized before the same ranking engine.

Moodish system overview diagram
Download editable Excalidraw source
Product surfaces

Solo chat, enterprise dashboard, private participant link, Slack/Teams/Discord adapters and Moodish MCP tools.

Agent core

Conversation state, intent extraction, hard constraints, ranking, recommendation trace and confirmation gates.

Persistence

PostgreSQL when DATABASE_URL is configured; process-memory fallback for local fixture runs. Stores profiles, confirmed plans and group sessions.

02

User journeys

Solo asks only for missing hard fields. Enterprise gathers sensitive constraints privately and exposes aggregate coverage to the manager.

Solo and enterprise Moodish user journey diagram
Download editable Excalidraw source
solomood → clarify diet/budget → discover → rank → select → optional Instamart preview → explicit Food cart confirmation enterprisepolicy → private preferences → lock → rank → manager/vote/automatic → creator confirms Food cart
03

AI boundary

The language model extracts structured craving semantics, recognises edits to an active plan, and writes friendly copy. It does not select Swiggy tools, apply dietary filters, mutate carts or set ranking scores.

Diagram showing AI semantic interpretation and the deterministic Moodish safety boundary
Download editable Excalidraw source
Output guard

AI intent is schema-constrained and then validated; a deterministic extractor remains available during provider failure. If the AI summary contradicts ranking, Moodish replaces it. Current request, dietary rules and availability always outrank model phrasing, profile history or discovery preference.

04

Swiggy OAuth + MCP calls

These names and argument shapes are taken from the current gateway implementation. Every applicable discovery and cart call carries the selected addressId.

Detailed Swiggy OAuth and MCP call lifecycle diagram
Download editable Excalidraw source
WhenServer / toolArguments sentEffect
First Swiggy connectPOST /auth/registerredirect URIs, client metadataDynamic Client Registration
OTP consentGET /auth/authorizeclient_id, redirect, state, PKCE challengeUser authorization
CallbackPOST /auth/tokenauthorization code, verifier, redirectEncrypted access-token session
Start planningfood · get_addresses{}Read saved delivery addresses
Explicit dishfood · search_menu{ addressId, query, vegFilter }Exact dish search; may run again for a labelled alternative
Vague mood / cuisinefood · search_restaurants{ addressId, query }Restaurant discovery; a broad empty query is a last candidate-pool fallback
Candidate hydrationfood · get_restaurant_menu{ restaurantId, addressId }Read menu and current availability
Optional pairingsim · search_products{ addressId, query }Read Instamart products; no cart write
After explicit approvalfood · update_food_cart{ restaurantId, addressId, items: [{ itemId, quantity }] }Mutates Food cart only
POST https://mcp.swiggy.com/food
Authorization: Bearer <encrypted-session-token>

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "search_menu",
    "arguments": { "addressId": "...", "query": "chaap", "vegFilter": 1 }
  }
}

Transport retries rate limits, 5xx responses and transient upstream failures up to four attempts. Expired or invalid OAuth sessions require reconnection.

05

Ranking, pairings and memory

Recommendation quality is ordered by hard constraints first. Profile history is deliberately weak context.

  1. Hard filtersavailability, veg/non-veg, dietary rules and allergies
  2. Cravingexact dish, texture, flavour, preparation and cuisine relevance
  3. Commercial fitmaximum budget as a ceiling, then distance/delivery suitability and rating
  4. Tie-breakcomfort, balanced or explore—never allowed to override a dish match
Pairings

Context rules create search queries such as Chinese → chilled drink, biryani → raita and spicy food → cooling drink. Results must be available and fit remaining budget.

Meal memory

Stores confirmed Food items plus selected Instamart preview items and totals. It is not proof that a Swiggy order was placed or delivered.

Separation

Food and Instamart remain different fulfilment flows. Today only the Food cart has a mutation tool in Moodish.

06

Deliberately not claimed

A capability is not presented as live until its schema and authenticated staging journey pass.

  • Swiggy checkout or order placement
  • Swiggy completed order-history ingestion
  • Instamart cart mutation
  • Full pagination traversal
  • Variant and restaurant add-on resolution
  • Payment selection or delivery scheduling