Skip to main content
Glama
ashwani-yadav83602

MCP Customer Support AI

README.md
# MCP Customer Support AI

A production-oriented **Model Context Protocol (MCP)** project built with **Node.js, TypeScript, MongoDB, and an LLM**.

This project demonstrates how an AI application can interact with external systems through MCP tools in a structured, secure, and scalable way.

The project is being developed incrementally, from a basic MCP server and tool to a production-style AI-powered customer support system.

---

## ๐Ÿš€ Project Overview

The goal of this project is to build an AI-powered customer support assistant that can understand user requests and use MCP tools to perform real-world operations.

### Example

A user can ask:

> "Check my latest order and create a support ticket if it is delayed."

The AI can determine that it needs to:

1. Find the customer.
2. Retrieve the customer's orders.
3. Identify the delayed order.
4. Create a support ticket.

The AI does not directly access the database.

Instead, it interacts with the application through MCP tools.

```text
                         User
                           โ”‚
                           โ–ผ
                      AI / LLM
                           โ”‚
                           โ–ผ
                      MCP Client
                           โ”‚
                           โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚ MCP Server  โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                           โ”‚
              โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
              โ–ผ            โ–ผ            โ–ผ
       Customer Tool   Order Tool   Ticket Tool
              โ”‚            โ”‚            โ”‚
              โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                           โ–ผ
                       Services
                           โ”‚
                           โ–ผ
                        MongoDB
```

---

# ๐ŸŽฏ Project Objectives

This project demonstrates:

* MCP server development
* MCP tool creation
* MCP client communication
* AI tool calling
* TypeScript architecture
* MongoDB integration
* Service-layer architecture
* Input validation
* Error handling
* Authentication and authorization
* Logging and monitoring
* Audit logging
* Production-oriented MCP architecture
* AI agent workflows

---

# ๐Ÿ› ๏ธ Tech Stack

## Backend

* Node.js
* TypeScript
* MCP SDK
* Zod
* MongoDB
* Mongoose

## AI

* LLM integration
* Tool calling
* AI Agent workflow

## Development

* MCP Inspector
* Git
* GitHub
* npm

## Planned Production Infrastructure

* Docker
* Redis
* Authentication
* Rate limiting
* Logging
* Monitoring
* CI/CD

---

# ๐Ÿ“ Project Structure

```text
mcp-customer-support/
โ”‚
โ”œโ”€โ”€ src/
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ index.ts
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ tools/
โ”‚   โ”‚   โ”œโ”€โ”€ customer.tools.ts
โ”‚   โ”‚   โ”œโ”€โ”€ order.tools.ts
โ”‚   โ”‚   โ””โ”€โ”€ ticket.tools.ts
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ services/
โ”‚   โ”‚   โ”œโ”€โ”€ customer.service.ts
โ”‚   โ”‚   โ”œโ”€โ”€ order.service.ts
โ”‚   โ”‚   โ””โ”€โ”€ ticket.service.ts
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ models/
โ”‚   โ”‚   โ”œโ”€โ”€ customer.model.ts
โ”‚   โ”‚   โ”œโ”€โ”€ order.model.ts
โ”‚   โ”‚   โ””โ”€โ”€ ticket.model.ts
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ db/
โ”‚   โ”‚   โ””โ”€โ”€ database.ts
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ middleware/
โ”‚   โ”‚   โ””โ”€โ”€ auth.ts
โ”‚   โ”‚
โ”‚   โ””โ”€โ”€ utils/
โ”‚       โ”œโ”€โ”€ logger.ts
โ”‚       โ””โ”€โ”€ errors.ts
โ”‚
โ”œโ”€โ”€ tests/
โ”‚
โ”œโ”€โ”€ .env.example
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ package.json
โ”œโ”€โ”€ package-lock.json
โ”œโ”€โ”€ tsconfig.json
โ””โ”€โ”€ README.md
```

---

# ๐Ÿ—๏ธ Development Phases

The project is intentionally divided into phases so each phase introduces an important MCP or production concept.

---

# Phase 1 โ€” MCP Server Foundation

### Objective

Create a basic MCP server and expose the first tool.

### Implemented

* Node.js project
* TypeScript configuration
* MCP SDK
* MCP server
* STDIO transport
* Zod input validation
* First MCP tool
* MCP Inspector integration

### First Tool

```text
find_customer
```

Input:

```json
{
  "email": "ashwani@example.com"
}
```

Output:

```json
{
  "id": "customer_123",
  "name": "Ashwani Yadav",
  "email": "ashwani@example.com"
}
```

### Architecture

```text
MCP Inspector
      โ”‚
      โ–ผ
MCP Client
      โ”‚
      โ”‚ STDIO
      โ–ผ
MCP Server
      โ”‚
      โ–ผ
find_customer()
      โ”‚
      โ–ผ
Dummy Data
```

### Status

**Completed โœ…**

---

# Phase 2 โ€” Multiple MCP Tools

### Objective

Create multiple tools representing real customer-support operations.

### Tools

```text
find_customer
get_customer_orders
create_support_ticket
```

### Example

#### find_customer

```text
find_customer(email)
```

#### get_customer_orders

```text
get_customer_orders(customerId)
```

#### create_support_ticket

```text
create_support_ticket(
    customerId,
    orderId,
    issue
)
```

### Expected Architecture

```text
                    MCP Server
                        โ”‚
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ–ผ               โ–ผ               โ–ผ
find_customer()   get_orders()   create_ticket()
```

### Status

**Planned ๐Ÿšง**

---

# Phase 3 โ€” MongoDB Integration

### Objective

Replace dummy data with real persistent data.

### Database

MongoDB

### Collections

```text
customers
orders
support_tickets
```

### Architecture

```text
MCP Tool
   โ”‚
   โ–ผ
Service Layer
   โ”‚
   โ–ผ
Mongoose
   โ”‚
   โ–ผ
MongoDB
```

### Example

```text
find_customer()
      โ”‚
      โ–ผ
customer.service.ts
      โ”‚
      โ–ผ
Customer Model
      โ”‚
      โ–ผ
MongoDB
```

### Benefits

* Persistent data
* Proper database queries
* Indexing
* Schema validation
* Scalable data access

### Planned Index

```text
customers.email
```

This allows customer lookup by email to remain efficient as the dataset grows.

### Status

**Planned ๐Ÿšง**

---

# Phase 4 โ€” Service Layer & Clean Architecture

### Objective

Keep MCP tools separate from business logic.

Instead of putting database logic directly inside the MCP tool:

```text
Tool
 โ†“
Service
 โ†“
Database
```

### Example

```text
customer.tools.ts
        โ”‚
        โ–ผ
customer.service.ts
        โ”‚
        โ–ผ
customer.model.ts
        โ”‚
        โ–ผ
MongoDB
```

### Why?

This gives us:

* Separation of concerns
* Testability
* Reusability
* Maintainability
* Easier migration to REST/GraphQL/internal services

### Status

**Planned ๐Ÿšง**

---

# Phase 5 โ€” MCP Client

### Objective

Build a dedicated MCP client that connects to the MCP server.

```text
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ MCP Client   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       โ”‚
       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ MCP Server   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```

The client will be able to:

### Discover tools

```text
listTools()
```

### Execute tools

```text
callTool()
```

For example:

```text
callTool(
    "find_customer",
    {
        email: "ashwani@example.com"
    }
)
```

### Status

**Planned ๐Ÿšง**

---

# Phase 6 โ€” LLM Integration

### Objective

Connect an LLM to the MCP client.

The architecture becomes:

```text
User
 โ”‚
 โ–ผ
LLM
 โ”‚
 โ–ผ
MCP Client
 โ”‚
 โ–ผ
MCP Server
 โ”‚
 โ–ผ
Tools
 โ”‚
 โ–ผ
MongoDB
```

The LLM will decide which tool should be called based on the user's request.

### Example

User:

```text
Check my latest order.
```

AI:

```text
I need the customer's orders.
```

Tool:

```text
get_customer_orders()
```

The tool returns the order data.

The AI then generates a natural-language response.

### Status

**Planned ๐Ÿšง**

---

# Phase 7 โ€” AI Agent Workflow

### Objective

Allow the LLM to perform multi-step workflows.

Example request:

```text
Check my latest order and create a support
ticket if it is delayed.
```

The AI workflow:

```text
             User Request
                   โ”‚
                   โ–ผ
                 LLM
                   โ”‚
                   โ–ผ
           find_customer()
                   โ”‚
                   โ–ผ
        get_customer_orders()
                   โ”‚
                   โ–ผ
           Analyze orders
                   โ”‚
                   โ–ผ
        Is order delayed?
              /          \
            Yes           No
             โ”‚             โ”‚
             โ–ผ             โ–ผ
 create_support_ticket   Response
             โ”‚
             โ–ผ
          Response
```

This demonstrates the difference between simply exposing tools and building an **AI agent capable of tool orchestration**.

### Status

**Planned ๐Ÿšง**

---

# Phase 8 โ€” Authentication & Authorization

### Objective

Secure MCP operations.

Authentication verifies:

> Who is the user?

Authorization verifies:

> What is the user allowed to do?

Example permissions:

```text
customer.read
order.read
ticket.create
ticket.update
admin.refund
```

Example:

```text
Customer
 โ”œโ”€โ”€ find_customer       โœ…
 โ”œโ”€โ”€ get_orders          โœ…
 โ”œโ”€โ”€ create_ticket       โœ…
 โ””โ”€โ”€ refund_order        โŒ

Admin
 โ”œโ”€โ”€ find_customer       โœ…
 โ”œโ”€โ”€ get_orders          โœ…
 โ”œโ”€โ”€ create_ticket       โœ…
 โ””โ”€โ”€ refund_order        โœ…
```

### Status

**Planned ๐Ÿšง**

---

# Phase 9 โ€” Error Handling

### Objective

Create consistent error handling across tools.

Example:

```text
CustomerNotFoundError
OrderNotFoundError
UnauthorizedError
ValidationError
DatabaseError
ToolExecutionError
```

MCP tool responses will clearly communicate failures.

Example:

```json
{
  "isError": true,
  "message": "Customer not found"
}
```

### Status

**Planned ๐Ÿšง**

---

# Phase 10 โ€” Logging & Observability

### Objective

Track MCP operations in production.

Each tool execution should provide information such as:

```text
Request ID
User ID
Tool name
Arguments
Execution time
Status
Error
Timestamp
```

Example:

```text
INFO Tool Execution

tool: get_customer_orders
customerId: customer_123
duration: 85ms
status: success
```

### Monitoring Goals

* Tool latency
* Error rate
* Database latency
* AI response latency
* Tool usage frequency
* Failed tool calls

### Status

**Planned ๐Ÿšง**

---

# Phase 11 โ€” Rate Limiting

### Objective

Protect the MCP server from excessive or abusive requests.

Potential strategy:

```text
User
 โ”‚
 โ–ผ
Rate Limiter
 โ”‚
 โ”œโ”€โ”€ Allowed โ”€โ”€โ†’ MCP Tool
 โ”‚
 โ””โ”€โ”€ Blocked โ”€โ”€โ†’ Rate Limit Error
```

Redis can be introduced for distributed rate limiting.

Example:

```text
100 requests / minute / user
```

### Status

**Planned ๐Ÿšง**

---

# Phase 12 โ€” Audit Logging

### Objective

Record sensitive AI-driven operations.

For example:

```text
User:
customer_123

AI requested:
create_support_ticket

Order:
order_123

Action:
Support ticket created

Timestamp:
2026-08-23T10:30:00Z
```

This is particularly important when AI agents can perform actions that modify business data.

### Status

**Planned ๐Ÿšง**

---

# Phase 13 โ€” Testing

### Unit Tests

Test:

* Services
* Validation
* Business logic
* Error handling

### Integration Tests

Test:

```text
MCP Tool
   โ†“
Service
   โ†“
MongoDB
```

### MCP Tests

Test:

```text
MCP Client
   โ†“
MCP Server
   โ†“
Tool
```

### Example

```text
find_customer
    โ†“
valid email
    โ†“
customer returned
```

and:

```text
find_customer
    โ†“
invalid email
    โ†“
validation error
```

### Status

**Planned ๐Ÿšง**

---

# Phase 14 โ€” Dockerization

### Objective

Containerize the application.

```text
Docker
โ”‚
โ”œโ”€โ”€ MCP Server
โ”‚
โ”œโ”€โ”€ MongoDB
โ”‚
โ””โ”€โ”€ Redis
```

Example production architecture:

```text
                 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                 โ”‚   AI App    โ”‚
                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                        โ”‚
                        โ–ผ
                 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                 โ”‚ MCP Server  โ”‚
                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                        โ”‚
             โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
             โ–ผ          โ–ผ          โ–ผ
          MongoDB     Redis      Logs
```

### Status

**Planned ๐Ÿšง**

---

# Phase 15 โ€” CI/CD

### Objective

Automate testing and deployment.

Pipeline:

```text
Developer
    โ”‚
    โ–ผ
Git Push
    โ”‚
    โ–ผ
GitHub Actions
    โ”‚
    โ”œโ”€โ”€ Install dependencies
    โ”œโ”€โ”€ Lint
    โ”œโ”€โ”€ Type check
    โ”œโ”€โ”€ Run tests
    โ”œโ”€โ”€ Build
    โ””โ”€โ”€ Deploy
```

### Status

**Planned ๐Ÿšง**

---

# ๐Ÿ” Environment Variables

Never commit `.env` to GitHub.

Use:

```text
.env
```

for local development.

Example:

```env
MONGODB_URI=mongodb://localhost:27017/mcp-support
OPENAI_API_KEY=your_api_key
JWT_SECRET=your_secret
```

Provide:

```text
.env.example
```

instead:

```env
MONGODB_URI=
OPENAI_API_KEY=
JWT_SECRET=
```

---

# ๐Ÿงช Development

Install dependencies:

```bash
npm install
```

Run development server:

```bash
npm run dev
```

Build:

```bash
npm run build
```

Run production build:

```bash
npm start
```

---

# ๐Ÿ” MCP Inspector

The MCP Inspector is used to test the MCP server and inspect available tools during development.

Example:

```bash
npx @modelcontextprotocol/inspector npx tsx src/index.ts
```

The Inspector allows us to:

* Connect to the MCP server
* Discover tools
* Inspect tool schemas
* Execute tools
* Inspect responses
* Debug MCP communication

---

# ๐Ÿง  MCP Concepts Demonstrated

This project demonstrates the following MCP concepts:

### MCP Server

Provides capabilities to MCP clients.

### MCP Client

Connects to MCP servers and invokes their capabilities.

### Tools

Executable operations exposed to AI systems.

Examples:

```text
find_customer
get_customer_orders
create_support_ticket
```

### Resources

Read-only contextual data that can be exposed to an MCP client.

Potential future resources:

```text
customer://customer_123
order://order_123
```

### Prompts

Reusable prompt templates/workflows that can be exposed through MCP.

Potential example:

```text
customer_support_resolution
```

---

# ๐Ÿ† Production Architecture

The final architecture is planned to look like:

```text
                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚     User      โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                 โ”‚
                                 โ–ผ
                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚    LLM / AI   โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                 โ”‚
                                 โ–ผ
                         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                         โ”‚  MCP Client   โ”‚
                         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                 โ”‚
                                 โ–ผ
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚       MCP Server       โ”‚
                    โ”‚                        โ”‚
                    โ”‚ Authentication         โ”‚
                    โ”‚ Authorization          โ”‚
                    โ”‚ Validation             โ”‚
                    โ”‚ Rate Limiting          โ”‚
                    โ”‚ Logging                โ”‚
                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                โ”‚
               โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
               โ–ผ                โ–ผ                โ–ผ
        Customer Tool      Order Tool       Ticket Tool
               โ”‚                โ”‚                โ”‚
               โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                โ–ผ
                         Service Layer
                                โ”‚
                โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                โ–ผ               โ–ผ               โ–ผ
             MongoDB          Redis          Logging
```

---

# ๐Ÿ“Œ Current Progress

| Phase | Feature                        | Status      |
| ----- | ------------------------------ | ----------- |
| 1     | MCP Server Foundation          | โœ… Completed |
| 2     | Multiple MCP Tools             | ๐Ÿšง Planned  |
| 3     | MongoDB Integration            | ๐Ÿšง Planned  |
| 4     | Service Layer                  | ๐Ÿšง Planned  |
| 5     | MCP Client                     | ๐Ÿšง Planned  |
| 6     | LLM Integration                | ๐Ÿšง Planned  |
| 7     | AI Agent Workflow              | ๐Ÿšง Planned  |
| 8     | Authentication & Authorization | ๐Ÿšง Planned  |
| 9     | Error Handling                 | ๐Ÿšง Planned  |
| 10    | Logging & Observability        | ๐Ÿšง Planned  |
| 11    | Rate Limiting                  | ๐Ÿšง Planned  |
| 12    | Audit Logging                  | ๐Ÿšง Planned  |
| 13    | Testing                        | ๐Ÿšง Planned  |
| 14    | Dockerization                  | ๐Ÿšง Planned  |
| 15    | CI/CD                          | ๐Ÿšง Planned  |

---

# ๐Ÿ’ก Example Future Conversation

Once all phases are complete, the system should support conversations such as:

**User**

> My latest order hasn't arrived. Can you check it and create a support ticket?

**AI**

```text
1. Find customer
2. Retrieve orders
3. Identify delayed order
4. Create support ticket
5. Return ticket information
```

**AI Response**

> Your order `ORD-123` is delayed. I've created support ticket `TICKET-456` for you.

---

# ๐ŸŽ“ Interview Topics Covered

This project can be used to demonstrate knowledge of:

* Model Context Protocol
* AI agents
* LLM tool calling
* Function calling
* MCP servers
* MCP clients
* Tool discovery
* Tool execution
* TypeScript
* Node.js
* MongoDB
* Mongoose
* Clean architecture
* Service-layer architecture
* Authentication
* Authorization
* RBAC
* Rate limiting
* Redis
* Logging
* Observability
* Docker
* CI/CD
* GitHub Actions
* Testing
* Scalable backend architecture

---

# ๐Ÿ“ˆ Future Improvements

Potential future enhancements include:

* Multiple MCP servers
* Payment MCP tools
* Email MCP tools
* CRM integration
* Slack integration
* GitHub integration
* Vector database
* RAG
* Semantic search
* Human-in-the-loop approval
* Tool permission policies
* Tool execution tracing
* Distributed MCP deployment
* Kubernetes deployment

---

# ๐Ÿ‘จโ€๐Ÿ’ป Development Philosophy

The project follows these principles:

* Separation of concerns
* Strong typing
* Input validation
* Secure secret management
* Testable business logic
* Observable tool execution
* Least-privilege tool access
* Scalable architecture
* Clear MCP boundaries

---

# ๐Ÿ“œ License

This project is intended for learning, experimentation, and demonstrating MCP/AI engineering concepts.

Add an appropriate open-source license before distributing it publicly.

Maintenance

ActivityMaintained
ResponsivenessNo issues