Skip to main content
Glama
ashwani-yadav83602

MCP Customer Support AI

MCP Customer Support AI

Прикладный проект на базе Model Context Protocol (MCP), предназначенный для продакшена, построенный с использованием Node.js, TypeScript, MongoDB и LLM.

Этот проект демонстрирует, как ИИ-приложение может взаимодействовать с внешними системами через инструменты MCP структурированно, безопасно и масштабируемо.

Проект развивается поэтапно: от базового MCP-сервера и инструмента до продакшн-системы ИИ-поддержки клиентов.


🚀 Обзор проекта

Цель проекта — создать ИИ-ассистента поддержки клиентов, который понимает запросы пользователей и использует инструменты MCP для выполнения реальных операций.

Пример

Пользователь может спросить:

«Проверь мой последний заказ и создай обращение в поддержку, если он задерживается.»

ИИ может определить, что ему нужно:

  1. Найти клиента.

  2. Получить заказы клиента.

  3. Определить задержанный заказ.

  4. Создать обращение в поддержку.

ИИ не имеет прямого доступа к базе данных.

Вместо этого он взаимодействует с приложением через инструменты MCP.

                         User
                           │
                           ▼
                      AI / LLM
                           │
                           ▼
                      MCP Client
                           │
                           ▼
                    ┌─────────────┐
                    │ MCP Server  │
                    └──────┬──────┘
                           │
              ┌────────────┼────────────┐
              ▼            ▼            ▼
       Customer Tool   Order Tool   Ticket Tool
              │            │            │
              └────────────┼────────────┘
                           ▼
                       Services
                           │
                           ▼
                        MongoDB

🎯 Цели проекта

Этот проект демонстрирует:

  • разработку MCP-серверов

  • создание MCP-инструментов

  • взаимодействие MCP-клиентов

  • вызов инструментов ИИ

  • архитектуру на TypeScript

  • интеграцию с MongoDB

  • многослойную архитектуру приложений

  • проверку входных данных

  • обработку ошибок

  • аутентификацию и авторизацию

  • логирование и мониторинг

  • журналирование операций (audit logging)

  • продакшн-ориентированную архитектуру MCP

  • рабочие процессы AI-агентов


🛠️ Технологический стек

Related MCP server: Ticket Support MCP Server

Бэкенд

  • Node.js

  • TypeScript

  • MCP SDK

  • Zod

  • MongoDB

  • Mongoose

ИИ

  • интеграция с LLM

  • вызов инструментов

  • рабочий процесс AI-агента

Разработка

  • MCP Inspector

  • Git

  • GitHub

  • npm

Планируемая продакшн-инфраструктура

  • Docker

  • Redis

  • аутентификация

  • ограничение частоты запросов

  • логирование

  • мониторинг

  • CI/CD


📁 Структура проекта

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

🏗️ Этапы разработки

Проект намеренно разбит на этапы, чтобы каждый вводил важное понятие MCP или продакшн-практику.


Этап 1 — Основа MCP-сервера

Цель

Создать базовый MCP-сервер и открыть первый инструмент.

Реализовано

  • проект на Node.js

  • конфигурация TypeScript

  • MCP SDK

  • MCP-сервер

  • транспорт STDIO

  • проверка входных данных через Zod

  • первый MCP-инструмент

  • интеграция с MCP Inspector

Первый инструмент

find_customer

Входные данные:

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

Выходные данные:

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

Архитектура

MCP Inspector
      │
      ▼
MCP Client
      │
      │ STDIO
      ▼
MCP Server
      │
      ▼
find_customer()
      │
      ▼
Dummy Data

Статус

Завершено ✅


Этап 2 — Несколько MCP-инструментов

Цель

Создать несколько инструментов, представляющих реальные операции поддержки клиентов.

Инструменты

find_customer
get_customer_orders
create_support_ticket

Пример

find_customer

find_customer(email)

get_customer_orders

get_customer_orders(customerId)

create_support_ticket

create_support_ticket(
    customerId,
    orderId,
    issue
)

Ожидаемая архитектура

                    MCP Server
                        │
        ┌───────────────┼───────────────┐
        ▼               ▼               ▼
find_customer()   get_orders()   create_ticket()

Статус

Запланировано 🚧


Этап 3 — Интеграция с MongoDB

Цель

Заменить тестовые данные на реальные постоянные.

База данных

MongoDB

Коллекции

customers
orders
support_tickets

Архитектура

MCP Tool
   │
   ▼
Service Layer
   │
   ▼
Mongoose
   │
   ▼
MongoDB

Пример

find_customer()
      │
      ▼
customer.service.ts
      │
      ▼
Customer Model
      │
      ▼
MongoDB

Преимущества

  • Постоянные данные

  • Корректные запросы к базе данных

  • Интердирование

  • Проверка схем

  • Масштабируемый доступ к данным

Планируемый индекс

customers.email

Это позволяет искать клиентов по email эффективно даже при росте данных.

Статус

Запланировано 🚧


Этап 4 — Сервисный слой и чистая архитектура

Цель

Для this отделить MCP-инструменты от бизнес-логики.

Вместо того чтобы размещать логику работы с базой данных прямо внутри MCP-инструмента:

Tool
 ↓
Service
 ↓
Database

Пример

customer.tools.ts
        │
        ▼
customer.service.ts
        │
        ▼
customer.model.ts
        │
        ▼
MongoDB

Зачем?

Зачем это:

  • раздеlimos

  • Тестируемость

  • Многоразовое использование

  • Удобство сопровождения

  • Проще переход на REST/GraphQL/внутренние сервисы

Статус

Запланировано 🚧


Этап 5 — MCP-клиент

Цель

Создать отдельный MCP-клиент, который подключается к MCP-серверу.

┌──────────────┐
│ MCP Client   │
└──────┬───────┘
       │
       ▼
┌──────────────┐
│ MCP Server   │
└──────────────┘

Клиент сможет:

Обнаруживать инструменты

listTools()

Выполнять инструменты

callTool()

Пример:

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

Статус

Запланировано 🚧


Этап 6 — Интеграция с LLM

Цель

Подключить LLM к MCP-клиенту.

Архитектура становится:

User
 │
 ▼
LLM
 │
 ▼
MCP Client
 │
 ▼
MCP Server
 │
 ▼
Tools
 │
 ▼
MongoDB

LLM будет выбирать, какой инструмент вызвать, на основе запроса пользователя.

Пример

Пользователь:

Check my latest order.

AI:

I need the customer's orders.

Инструмент:

get_customer_orders()

Инструмент возвращает данныео заказе.

AI затем формирует ответ на естественном языке.

Статус

Запланировано 🚧


Этап 7 — Рабочий процесс AI-агента

Цель

Позволить LLM выполнять многошаговые сценарии.

Пример запроса:

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

Рабочий процесс AI:

             User Request
                   │
                   ▼
                 LLM
                   │
                   ▼
           find_customer()
                   │
                   ▼
        get_customer_orders()
                   │
                   ▼
           Analyze orders
                   │
                   ▼
        Is order delayed?
              /          \
            Yes           No
             │             │
             ▼             ▼
 create_support_ticket   Response
             │
             ▼
          Response

Это показывает разницу между простым предоставлением инструментов и созданием AI-агента, способного выполнять оркестрацию инструментов.

Статус

Запланировано 🚧


Этап 8 — Аутентификация и авторизация

Цель

Защитить операции MCP.

Аutентификация проверяет:

Кто пользователь?

Авторизация проверяет:

Что пользователю разрешено делать?

Пример прав:

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

Пример:

Customer
 ├── find_customer       ✅
 ├── get_orders          ✅
 ├── create_ticket       ✅
 └── refund_order        ❌

Admin
 ├── find_customer       ✅
 ├── get_orders          ✅
 ├── create_ticket       ✅
 └── refund_order        ✅

Статус

Запланировано 🚧


Этап 9 — Обработка ошибок

Цель

Создать единообразную обработку ошибок во всех инструментах.

Пример:

CustomerNotFoundError
OrderNotFoundError
UnauthorizedError
ValidationError
DatabaseError
ToolExecutionError

Ответ MCP-инструментов будет четко сообщать об ошибках.

Пример:

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

Статус

Запланировано 🚧


Этап 10 — Логирование и наблюдаемость

Цель

Отслеживать операции MCP в продакшне.

Каждое выполнение инструмента должно предоставлять информацию, например:

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

Пример:

INFO Tool Execution

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

Целя мониторинга

  • Задержка инструментов

  • Доля ошибок

  • Задержка базы данных

  • Задержка ответа ИИ

  • Частота использования инструментов

  • Неудачные вызовы инструментов

Статус

Запланировано 🚧


Этап 11 — Ограничение частоты запросов

Цель

Защитить MCP-сервер от избыточных или вредоносных запросов.

Возможная стратегия:

User
 │
 ▼
Rate Limiter
 │
 ├── Allowed ──→ MCP Tool
 │
 └── Blocked ──→ Rate Limit Error

Redis может быть задействован для распределённого ограничения частоты.

Пример:

100 requests / minute / user

Статус

Запланировано 🚧


Этап 12 — Журналирование аудита

Цель

Фиксировать важные действия, выполняемSорые управляются ИИ.

Например:

User:
customer_123

AI requested:
create_support_ticket

Order:
order_123

Action:
Support ticket created

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

Это особенно важно, когда AI-агенты могут выполнять действия, изменяющие бизнес-данные.

Статус

Запланировано 🚧


Этап 13 — Тестирование

Модульные тесты

Проверяют:

  • Сервисы

  • Валидацию

  • Бизнес-логику

  • Обработку ошибок

Интеграционные тесты

Проверяют:

MCP Tool
   ↓
Service
   ↓
MongoDB

MCP-тесты

Проверяют:

MCP Client
   ↓
MCP Server
   ↓
Tool

Пример

find_customer
    ↓
valid email
    ↓
customer returned

и

find_customer
    ↓
invalid email
    ↓
validation error

Статус

Запланировано 🚚


Этап 14 — Контейнеризация

Цель

Упаковать приложение в контейнеры.

Docker
│
├── MCP Server
│
├── MongoDB
│
└── Redis

Пример продакшн-архитектуры:

                 ┌─────────────┐
                 │   AI App    │
                 └──────┬──────┘
                        │
                        ▼
                 ┌─────────────┐
                 │ MCP Server  │
                 └──────┬──────┘
                        │
             ┌──────────┼──────────┐
             ▼          ▼          ▼
          MongoDB     Redis      Logs

Статус

Запланировано 🚧


Этап 15 — CI/CD

Цель

Автоматизировать тестирование и развёртывание.

Конвейер:

Developer
    │
    ▼
Git Push
    │
    ▼
GitHub Actions
    │
    ├── Install dependencies
    ├── Lint
    ├── Type check
    ├── Run tests
    ├── Build
    └── Deploy

Статус

Запланировано 🚧


🔐 Переменные окружения

Никогда не коммитьте .env в GitHub.

Используйте:

.env

для локальной разработки.

Пример:

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

Вместо этого предоставьте:

.env.example

например:

MONGODB_URI=
OPENAI_API_KEY=
JWT_SECRET=

🧪 Разработка

Установите зависимости:

npm install

Запустите сервер разработки:

npm run dev

Сборка:

npm run build

Запуск production-сборки:

npm start

🔍 MCP Inspector

MCP Inspector используется для тестирования MCP-сервера и просмотра доступных инструментов во время разработки.

Пример:

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

Inspector позволяет нам:

  • подключаться к MCP-серверу

  • обнаруживать инструменты

  • просматривать схемы инструментов

  • выполнять инструменты

  • просматривать ответы

  • отлаживать MCP-коммуникацию


🧠 Продемонстрированные концепции MCP

Этот проект демонстрирует следующие концепции MCP:

MCP-сервер

Предоставляет возможности MCP-клиентам.

MCP-клиент

Подключается к MCP-серверам и вызывает их возможности.

Инструменты

Выполнимые операции, предоставляемые ИИ-системам.

Примеры:

find_customer
get_customer_orders
create_support_ticket

Ресурсы

Контекстные данные только для чтения, которые могут быть представлены MCP-клиенту.

Возможные будущие ресурсы:

customer://customer_123
order://order_123

Prompt-шаблоны

Многоразовые шаблоны и сценарии запросов, которые могут быть представлены через MCP.

Возможный пример:

customer_support_resolution

🏆 Архитектура в продакшене

Итоговая архитектура планируется выглядеть так:

                         ┌───────────────┐
                         │     User      │
                         └───────┬───────┘
                                 │
                                 ▼
                         ┌───────────────┐
                         │    LLM / AI   │
                         └───────┬───────┘
                                 │
                                 ▼
                         ┌───────────────┐
                         │  MCP Client   │
                         └───────┬───────┘
                                 │
                                 ▼
                    ┌────────────────────────┐
                    │       MCP Server       │
                    │                        │
                    │ Authentication         │
                    │ Authorization          │
                    │ Validation             │
                    │ Rate Limiting          │
                    │ Logging                │
                    └───────────┬────────────┘
                                │
               ┌────────────────┼────────────────┐
               ▼                ▼                ▼
        Customer Tool      Order Tool       Ticket Tool
               │                │                │
               └────────────────┼────────────────┘
                                ▼
                         Service Layer
                                │
                ┌───────────────┼───────────────┐
                ▼               ▼               ▼
             MongoDB          Redis          Logging

📌 Текущий прогресс

Этап

Функция

Статус

1

MCP Server Foundation

✅ Завершено

2

Multiple MCP Tools

🚧 Запланировано

3

MongoDB Integration

🚧 Запланировано

4

Service Layer

🚧 Запланировано

5

MCP Client

🚧 Запланировано

6

LLM Integration

🚧 Запланировано

7

AI Agent Workflow

🚧 Запланировано

8

Authentication & Authorization

🚧 Запланировано

9

Error Handling

🚧 Запланировано

10

Logging & Observability

🚧 Запланировано

11

Rate Limiting

🚧 Запланировано

12

Audit Logging

🚧 Запланировано

13

Testing

🚧 Запланировано

14

Dockerization

🚧 Запланировано

15

CI/CD

🚧 Запланировано

💡 Пример будущего диалога

После завершения всех этапов система должна поддерживать такие диалоги:

Пользователь

Мой последний заказ ещё не пришёл. Можете проверить его и создать обращение в поддержку?

ИИ

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

Ответ ИИ

Ваш заказ ORD-123 задерживается. Я создал для вас обращение в поддержку TICKET-456.


🎓 Затронуты темы для интервью

Этот проект может быть использован для демонстрации знаний в следующих областях:

  • Model Context Protocol

  • AI-агенты

  • вызов инструментов через LLM

  • вызов функций

  • MCP-серверы

  • MCP-клиенты

  • обнаружение инструментов

  • выполнение инструментов

  • TypeScript

  • Node.js

  • MongoDB

  • Mongoose

  • чистая архитектура

  • архитектура уровня сервисов

  • аутентификация

  • авторизация

  • RBAC

  • ограничение частоты запросов

  • Redis

  • логирование

  • наблюдаемость

  • Docker

  • CI/CD

  • GitHub Actions

  • тестирование

  • масштабируемая бэкенд-архитектура


📈 Будущие улучшения

Возможные улучшения в будущем:

  • несколько MCP-серверов

  • MCP-инструменты для платежей

  • MCP-инструменты для электронной почты

  • интеграция с CRM

  • интеграция со Slack

  • интеграция с GitHub

  • векторная база данных

  • RAG

  • семантический поиск

  • Участие человека в цикле утверждения (human-in-the-loop)

  • политики прав доступа к инструментам

  • трассировка выполнения инструментов

  • распределённое развёртывание MCP

  • развёртывание в Kubernetes


👨💻 Философия разработки

Проект следует следующим принципам:

  • разделение ответственности

  • строгая типизация

  • валидация входных данных

  • безопасное хранение секретов

  • тестируемая бизнес-логика

  • наблюдаемое выполнение инструментов

  • минимальные права на доступ к инструментам

  • масштабируемая архитектура

  • чёткие границы MCP


📜 Лицензия

Этот проект неявно для обучения, экспериментирования и демонстрации концепций MCP/AI-инженерии.

Добавьте соответствующую лицензию с открытым исходным кодом перед публичным распространением.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    F
    maintenance
    Enables retrieval of support tickets and user data from a JSON store or ServiceNow via MCP tools, providing context for AI-powered support responses.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Exposes order status lookup and knowledge base search tools from the Support Agent AI over MCP, enabling MCP clients to handle customer support queries with grounded, citation-backed answers.
    MIT