Skip to main content
Glama
HaswanthKurevella

Coffee Shop MCP

README.md

# ☕ Coffee Shop MCP

A hands-on **Model Context Protocol (MCP)** project. An LLM (VS Code Copilot in Agent
mode) takes your coffee order and "makes" it by coordinating a **Barista** server and
four **machine** servers.

Built with the official MCP Python SDK's `FastMCP`.

---

## How it works

The LLM is the **orchestrator**. Servers are **dumb specialists** — none of them talk to
each other. The Barista returns a *recipe*, and the LLM walks that recipe across the
machines.

```mermaid
flowchart TD
    User([You]) --> LLM[VS Code Copilot<br/>orchestrator]
    LLM --> Barista[Barista server<br/>menu · orders · recipes]
    LLM --> Grinder[Grinder]
    LLM --> Brew[Brew unit]
    LLM --> Steamer[Steamer]
    LLM --> Dispenser[Dispenser]
```

---

## Order flow

```mermaid
sequenceDiagram
    participant U as You
    participant L as Copilot (LLM)
    participant B as Barista
    participant M as Machines

    U->>L: What's on the menu?
    L->>B: get_menu()
    B-->>L: 4 drinks
    U->>L: Large latte, extra shot
    L->>B: place_order(...)
    B-->>L: order id + recipe
    L->>M: grind → brew → steam → dispense
    L->>B: mark_order_ready()
    L-->>U: Your latte is ready ☕
```

---

## Menu

| Drink | Milk? | Notes |
|-----------|:----:|-------|
| Espresso | No | Base shot |
| Americano | No | Espresso + hot water |
| Latte | Yes | Steamed milk, light foam |
| Cappuccino | Yes | Steamed milk, thick foam |

## Machines

| Component | Job | Used by |
|-----------|-----|---------|
| Grinder | Beans → grounds | All |
| Brew unit | Pull the shot (+ Americano water) | All |
| Steamer | Texture milk | Latte, Cappuccino |
| Dispenser | Assemble the cup | All |

> Espresso skips the Steamer. Latte vs Cappuccino differ only in foam thickness.

---

## Project layout

```
coffee-shop-mcp/
├── .vscode/mcp.json
└── src/coffee_shop_mcp/
    ├── server.py       # Barista
    ├── grinder.py
    ├── brew_unit.py
    ├── steamer.py
    └── dispenser.py
```

---

## Setup

```powershell
uv venv
uv add "mcp[cli]"
```

Test one server in the browser Inspector:

```powershell
uv run mcp dev src/coffee_shop_mcp/server.py
```

---

## Run in VS Code

`.vscode/mcp.json`:

```json
{
  "servers": {
    "coffee-shop": { "type": "stdio", "command": "uv",
      "args": ["run", "python", "src/coffee_shop_mcp/server.py"] },
    "grinder":     { "type": "stdio", "command": "uv",
      "args": ["run", "python", "src/coffee_shop_mcp/grinder.py"] },
    "brew-unit":   { "type": "stdio", "command": "uv",
      "args": ["run", "python", "src/coffee_shop_mcp/brew_unit.py"] },
    "steamer":     { "type": "stdio", "command": "uv",
      "args": ["run", "python", "src/coffee_shop_mcp/steamer.py"] },
    "dispenser":   { "type": "stdio", "command": "uv",
      "args": ["run", "python", "src/coffee_shop_mcp/dispenser.py"] }
  }
}
```

1. Open the folder in VS Code, click **Start** on each server in `mcp.json`.
2. Open Copilot Chat → **Agent** mode.
3. Say: *"What's on the menu? Then make me a large latte and run it on the machines."*

---

## Notes

- **In-memory only** — orders reset when the server restarts.
- **Simulated hardware** — machines return text results, nothing physical happens.
- Idle servers get stopped/restarted by VS Code automatically — that's normal.

*A learning project. ☕*

TDQS

A4.5/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct aspect of the coffee ordering workflow: menu, customization, placing, status, step updates, readiness, and health check. There is no overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscores (e.g., get_menu, place_order). 'ping' is a standard exception for health checks and does not disrupt the pattern.

Tool Count5/5

With 7 tools, the set is well-scoped for a coffee shop ordering system. Each tool serves a clear need without redundancy or missing critical functionality.

Completeness4/5

The tool set covers the full order lifecycle: menu browsing, customization, placing, status tracking, step updates, and marking ready. Minor gaps like cancellation or order listing are absent but not essential for the core workflow.

Maintenance

ActivityStale
ResponsivenessNo issues