Skip to main content
Glama
harshsareen03

AI Customer Support Agent

AI Customer Support Agent

This project is a production-style starter for an AI customer support system built with FastAPI, a lightweight MCP-compatible tool server, and an OpenAI-compatible LLM client.

Features

  • Answers customer questions with a knowledge base connector

  • Retrieves order status from a database

  • Creates support tickets for unresolved issues

  • Summarizes conversations for human agents

  • Detects likely escalation scenarios

  • Exposes required tools through an MCP-style JSON-RPC endpoint

Project Structure

ai-support-agent/
├── backend/
│   ├── agent.py
│   ├── main.py
│   ├── mcp_server.py
│   ├── database/
│   │   └── models.py
│   └── tools/
│       ├── crm_tool.py
│       ├── kb_tool.py
│       ├── order_tool.py
│       └── ticket_tool.py
├── frontend/
│   └── simple_chat_ui.html
├── requirements.txt
└── README.md

Architecture

  • FastAPI backend: serves the /chat API, health endpoint, and the simple browser UI.

  • SupportAgent: orchestrates LLM responses and decides when to call tools.

  • MCP server: exposes get_order_status, search_knowledge_base, create_support_ticket, and get_customer_details over JSON-RPC at /mcp.

  • Connectors: isolated tool classes for orders, CRM, knowledge base, and ticketing.

  • Database: SQLAlchemy models for customers, orders, and support_tickets.

Tech Choices

  • Python 3.11+

  • FastAPI

  • SQLAlchemy

  • SQLite by default, with a clear upgrade path to PostgreSQL

  • OpenAI-compatible SDK via the openai Python package

Setup

  1. Create and activate a virtual environment.

  2. Install dependencies:

pip install -r requirements.txt
  1. Optional: configure an OpenAI-compatible provider.

export OPENAI_API_KEY="your_api_key_here"
export OPENAI_MODEL="gpt-4.1-mini"
export OPENAI_BASE_URL="https://api.openai.com/v1"

If OPENAI_API_KEY is not set, the app still runs in a rules-based fallback mode so you can test the flows locally.

Run

uvicorn backend.main:app --reload --host 0.0.0.0 --port 8000

Then open http://localhost:8000.

API Usage

POST /chat

Request:

{
  "customer_id": 1,
  "message": "Where is my order #45231?",
  "conversation_history": []
}

Response:

{
  "response": "Order #45231 for Noise-Cancelling Headphones is currently shipped. Carrier: FedEx. Tracking: ZX991245US. Estimated delivery: 2026-03-15.",
  "used_tools": [
    {
      "name": "get_order_status",
      "arguments": {
        "order_id": "45231"
      },
      "result": {
        "order_id": 45231,
        "customer_id": 1,
        "item_name": "Noise-Cancelling Headphones",
        "status": "shipped",
        "tracking_number": "ZX991245US",
        "shipping_carrier": "FedEx",
        "estimated_delivery": "2026-03-15",
        "total_amount": 199.99
      }
    }
  ],
  "escalated": false,
  "conversation_summary": "Customer 1 asked: Where is my order #45231?. Agent responded: ...",
  "llm_mode": false
}

POST /mcp

Example initialization request:

{
  "jsonrpc": "2.0",
  "id": "1",
  "method": "initialize",
  "params": {}
}

Example tool list request:

{
  "jsonrpc": "2.0",
  "id": "2",
  "method": "tools/list",
  "params": {}
}

Example tool call request:

{
  "jsonrpc": "2.0",
  "id": "3",
  "method": "tools/call",
  "params": {
    "name": "get_order_status",
    "arguments": {
      "order_id": "45231"
    }
  }
}

Database

The app creates and seeds a local SQLite database file named support_agent.db on startup with example customers, orders, and support tickets.

To migrate to PostgreSQL:

  • replace DATABASE_URL in backend/database/models.py

  • update the engine configuration

  • add migrations with Alembic for production deployments

Example Agent Flow

User message:

Where is my order #45231?

Expected flow:

  1. Agent detects an order-tracking request.

  2. Agent calls get_order_status(order_id).

  3. Tool returns shipping carrier, tracking number, and estimated delivery.

  4. Agent responds with a concise customer-facing answer.

Error Handling

  • Invalid order IDs return 400

  • Unknown customers return 400

  • Unexpected backend failures return 500

  • Tool errors are surfaced in structured JSON-RPC format on the MCP endpoint

Notes

  • The knowledge base is intentionally simple and in-memory for easy extension.

  • The ticketing and CRM connectors are implemented as modular service classes so they can be swapped with real APIs later.

  • For a production deployment, add authentication, persistent conversation storage, rate limiting, and observability.

-
security - not tested
F
license - not found
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/harshsareen03/mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server