Skip to main content
Glama
martinoyovo

ts-travel-mcp-server

by martinoyovo
README.md
# Quick Start Guide

> **New to MCP?** Start here! This guide gets you up and running in minutes.  
> For detailed documentation, see [PROJECT_WALKTHROUGH.md](PROJECT_WALKTHROUGH.md).

## What We're Building

A **complete full-stack travel booking application** with:

### Backend (MCP Server)
- TypeScript MCP server with 8 tools
- Mock flight database with real-time state
- Booking system with state persistence
- Multi-client support (Claude, Codex, Gemini)

### Frontend (Web App)
- Beautiful React UI with modern design
- Flight search interface
- Booking management dashboard
- Email confirmation preview
- Real-time state updates
- Fully responsive design

### Documentation
- Comprehensive guides (see [PROJECT_WALKTHROUGH.md](PROJECT_WALKTHROUGH.md))
- Setup guides for all AI clients
- In-depth code walkthroughs
- Architecture explanations

## Prerequisites

Before you begin, make sure you have:
- **Node.js** (v18 or higher) - [Download](https://nodejs.org/)
- **npm** (comes with Node.js)
- **Git** (optional, for cloning)

**Optional but recommended:**
- An AI client configured (Claude Desktop, Codex CLI, or Gemini CLI)
- Basic familiarity with TypeScript/JavaScript

## ️ Project Structure

```
travel-mcp-server/
│
├── BACKEND MCP SERVER
│   ├── index.ts              # Main MCP server (tool definitions & handlers)
│   ├── database.ts           # Business logic & data management
│   ├── package.json          # Dependencies & scripts
│   ├── tsconfig.json         # TypeScript configuration
│   ├── api-server.js         # Standalone API server (optional)
│   │
│   ├── data/                 # Mock data files
│   │   ├── flights.json      # Flight data
│   │   └── bookings.json     # Booking records
│   │
│   └── dist/                 # Build output (generated by `npm run build`)
│       ├── index.js          # Compiled MCP server (used by AI clients)
│       ├── database.js       # Compiled database functions
│       └── data/             # Copied data files
│           ├── flights.json
│           └── bookings.json
│
└── FRONTEND WEB APP
    ├── src/                  # React application
    │   ├── App.jsx           # Main React component
    │   ├── main.jsx          # React entry point
    │   ├── App.css           # Styles
    │   ├── FlightSearch.jsx  # Search interface
    │   ├── FlightList.jsx    # Flight display
    │   ├── BookingForm.jsx   # Booking form
    │   ├── BookingsList.jsx  # Bookings display
    │   └── MockEmailModal.jsx # Email confirmation modal
    │
    ├── index.html            # HTML entry point
    └── vite.config.js        # Vite build configuration
```

## Getting Started

### Step 1: Install Dependencies

```bash
# Navigate to project directory
cd travel-mcp-server

# Install all dependencies
npm install
```

**What this does:** Installs TypeScript, MCP SDK, React, Vite, and all required packages.

### Step 2: Build the Backend

```bash
# Compile TypeScript to JavaScript
npm run build
```

**What this does:** Compiles `index.ts` and `database.ts` into `dist/index.js` and `dist/database.js` that AI clients will use.

**Expected output:**
```
✓ Built successfully
```

### Step 3: Choose Your Setup Path

You have three options (choose what fits your needs):

#### Quick Start: Web App Only
Perfect for learning and demos - no AI client setup needed!

**Terminal 1: Start API Server**
```bash
npm run api
```

**Terminal 2: Start Web App**
```bash
npm run dev:web
```

Opens at `http://localhost:3000` - you're ready to go!

#### AI Integration: MCP Server Only
Perfect for AI CLI integration:

1. **Configure your AI client** (choose one):
   - **Claude Desktop** → See [PROJECT_WALKTHROUGH.md - Claude Desktop Integration](PROJECT_WALKTHROUGH.md#claude-desktop-integration)
   - **Gemini CLI** → See [PROJECT_WALKTHROUGH.md - Google Gemini Integration](PROJECT_WALKTHROUGH.md#google-gemini-integration)
   - **Codex CLI** → See `temp_docs/CODEX_CONFIG.md`

2. **Test it:**
   - Open your AI client
   - Try: "Search for flights from New York to Los Angeles"

#### Full Stack: Both Web App + MCP Server
Perfect for complete demonstrations:

**Terminal 1: MCP Server**
```bash
npm start
```

**Terminal 2: Web App**
```bash
npm run dev:web
```

**Terminal 3: AI Client**
- Open Claude Desktop, Codex CLI, or Gemini CLI
- Both web UI and AI client see the same data!

> **Tip:** For detailed setup instructions, see [PROJECT_WALKTHROUGH.md - Integrating with AI Clients](PROJECT_WALKTHROUGH.md#integrating-with-ai-clients)

## Understanding the Project

### How It Works

```
┌─────────────┐         stdin          ┌───────────────┐
│ AI Client   │ ─────────────────────> │ MCP Server    │
│ (Claude)    │ <───────────────────── │ (index.js)    │
└─────────────┘         stdout         └───────────────┘
                                              │
                                              ▼
                                        ┌─────────────┐
                                        │ database.js │
                                        │ (functions) │
                                        └─────────────┘
```

**The Flow:**
1. AI client sends request via stdin
2. MCP server processes request
3. Calls business logic functions
4. Returns formatted response via stdout

> **Learn more:** See [PROJECT_WALKTHROUGH.md - MCP with Stdio Implementation](PROJECT_WALKTHROUGH.md#mcp-with-stdio-implementation) for detailed explanation

### Key Concepts

- **MCP Tools**: 8 tools that AI clients can call (search, book, cancel, etc.)
- **State Persistence**: Bookings and seat availability persist across sessions
- **Business Logic**: All logic in `database.ts`, tools in `index.ts`
- **Mock Data**: JSON files in `data/` directory

> **Learn more:** See [PROJECT_WALKTHROUGH.md - Creating MCP Tools](PROJECT_WALKTHROUGH.md#creating-mcp-tools) for how tools work


## Web App Features

### Flight Search
- Search flights by departure/arrival cities
- Quick demo button for NYC → LAX
- Results sorted by price
- Real-time availability

### Flight Display
- Beautiful flight cards with airline branding
- Shows airline, times, duration, stops, price
- Availability indicator (seats remaining)
- Quick "Book Now" button

### Booking System
- Passenger name & email form
- Input validation
- Real-time availability update
- Instant booking confirmation

### Email Confirmations
- Mock email preview modal
- Shows complete booking details
- Professional email template
- Dismissable modal

### Booking Management
- View all bookings in one place
- Cancel anytime
- Seat automatically released on cancel
- Real-time updates across all views

### Beautiful Design
- Modern gradient headers
- Responsive cards
- Smooth animations
- Color-coded status (confirmed/pending/cancelled)
- Mobile-friendly responsive design

## State Persistence Demo

This is the **key teaching moment** - demonstrating real backend state management!

### Try This Flow:

```
1. Search flights
   → FL004 shows 22 seats available

2. Book FL004
   → Backend decreases availability
   → FL004 now has 21 seats

3. Search again
   → FL004 still shows 21 seats
   → Change persisted!

4. Cancel the booking
   → FL004 back to 22 seats
   → Seat released!
```

### What This Demonstrates:

- **Real backend state** - Not just frontend state  
- **Mutations and updates** - Data actually changes  
- **Data consistency** - Same data across all views  
- **Business logic execution** - Rules enforced server-side

> **Learn more:** See [PROJECT_WALKTHROUGH.md - API Functions and Business Logic](PROJECT_WALKTHROUGH.md#api-functions-and-business-logic) to understand how state management works

---

## Next Steps

### Learn More

- **[PROJECT_WALKTHROUGH.md](PROJECT_WALKTHROUGH.md)** - Complete documentation with:
  - How MCP tools are created
  - Business logic implementation
  - Function dependencies
  - Stdio communication details
  - Full AI client integration guides

### Explore the Code

- **`index.ts`** - MCP server and tool definitions
- **`database.ts`** - Business logic and data management
- **`src/`** - React components for the web app

### Troubleshooting

**Web app won't start?**
- Check Node.js version: `node --version` (need v18+)
- Delete `node_modules` and `package-lock.json`, then `npm install`

**MCP server not working?**
- See [PROJECT_WALKTHROUGH.md - Testing the Integration](PROJECT_WALKTHROUGH.md#testing-the-integration)
- Check that `dist/index.js` exists after `npm run build`
- Verify AI client configuration path is absolute

**Need help?**
- Check [PROJECT_WALKTHROUGH.md - Troubleshooting](PROJECT_WALKTHROUGH.md#troubleshooting) section
- Review AI client configuration guides in PROJECT_WALKTHROUGH.md

---

## Quick Reference

| Task | Command |
|------|---------|
| Install dependencies | `npm install` |
| Build backend | `npm run build` |
| Start MCP server | `npm start` |
| Run web app | `npm run dev:web` |
| View docs | Open [PROJECT_WALKTHROUGH.md](PROJECT_WALKTHROUGH.md) |

---

**Ready to dive deeper?** → [PROJECT_WALKTHROUGH.md](PROJECT_WALKTHROUGH.md) has everything you need!

TDQS

A3.5/5.0

Scored across 9 tools

Disambiguation4/5

Most tools target distinct operations (search, book, cancel, remove, email). However, search_flights and get_cheapest_flight overlap heavily since the latter is essentially a sorted subset of the former, and remove_booking vs cancel_booking could be confused without careful reading. Overall the descriptions help clarify boundaries.

Naming Consistency5/5

All tool names use consistent snake_case with a verb_noun pattern (search_flights, book_flight, get_booking_details, cancel_booking, remove_booking, send_confirmation_email). No mixed conventions or vague verbs. Very predictable.

Tool Count5/5

9 tools is well-scoped for a flight booking domain. Each tool serves a clear purpose in the search-book-manage lifecycle, with no redundant or filler tools. Count is neither too thin nor bloated.

Completeness4/5

Core lifecycle is covered: search, cheapest, book, get flight/booking details, list bookings, cancel, remove, and confirm email. Minor gaps include no tool to modify or update an existing booking (e.g. change flight/date) and limited search filtering, but agents can work around these.

Maintenance

ActivityInactive
ResponsivenessNo issues