A Sample Demo Architecture

Context

This page is a documentation sample derived from a live demo session.

It describes a realistic integration pattern for Fred around a postal operations use case. Even if the original demo was custom, the architecture principles are reusable.

Overview

This demo is based on a La Poste agent running in Fred Agentic Backend (custom TrackingAgent or BasicReAct) that orchestrates the conversation, calls business tools through MCP, and can enrich answers with content from Knowledge Flow (private demo documents).

The goal is to demonstrate an agent able to:

  • understand customer requests (tracking, incident, resolution action),
  • gather reliable operational context,
  • propose concrete actions (rerouting, rescheduling, and so on),
  • request human validation (HITL),
  • and return rich responses (text, map, options).

The two MCP servers used in this demo

The demo relies on two complementary MCP servers, each with a clearly separated business role.

1. Parcel Operations & Customer Service MCP

This server covers postal business actions: parcel tracking, pickup-point lookup, rerouting to pickup point, delivery rescheduling, customer notification, compensation estimation, claim creation, and more.

In practice, this is what enables the agent to propose and execute resolution actions for delayed parcels or incidents.

2. Telemetry & Logistics Simulation MCP

This server provides real-time simulated operational context: tracking snapshots, tracking events, hub status, vehicle position, route geometry, locker occupancy, and simulation progress.

In practice, this enables the agent to reason on the current logistics state (hub congestion, waiting vehicle, route progression, and so on) and feed map views in the demo.

Why two MCP servers instead of one?

The split is intentional:

  • one MCP for business capabilities and customer actions,
  • one MCP for operational context and telemetry.

This architecture makes the demo easier to understand and better reflects real environments, where transactional business systems and operational tracking systems are often separated.

Simplified View

%%{init: {"themeVariables": {"fontSize": "16px"}}}%%
flowchart TB

  subgraph UI["πŸ§‘ UI"]
    direction TB
    UChat["Demo chat"]
    UAdmin["Agent Hub
(config + agent graph)"] end subgraph AG["🧠 Fred Agentic Backend"] direction TB Api["API Chat / WebSocket"] Fred["Fred Orchestrator"] Agent["La Poste Agent
(TrackingAgent or BasicReAct)"] end subgraph EXT["Business and Knowledge Services"] direction LR subgraph MCP["πŸ”Œ MCP La Poste"] direction TB MCPTrack["Parcel Tracking and Incidents"] MCPOps["Delivery Actions and Customer Service"] end subgraph KF["πŸ“š Knowledge Flow"] direction TB KFApi["API RAG"] Corpus["Private corpus
(procedures, pricing, scripts)"] end end UChat --> Api UAdmin --> Api Api --> Fred Fred --> Agent Agent --> MCPTrack Agent --> MCPOps Agent --> KFApi KFApi --> Corpus style UI fill:#EAF2FF,stroke:#3B4A6B,stroke-width:1.2px style AG fill:#FFEFE0,stroke:#7A4A21,stroke-width:1.2px style MCP fill:#FFF7E6,stroke:#7A4A21,stroke-width:1.2px style KF fill:#E9FFE9,stroke:#2E6B2E,stroke-width:1.2px

Full Architecture View

%%{init: {"themeVariables": {"fontSize": "15px"}}}%%
flowchart TB

  %% =========================
  %% IAM (top layer)
  %% =========================
  subgraph SEC["πŸ” Identity & Access"]
    KC["Keycloak
(OIDC / JWT / SSO)"] FGA["OpenFGA
(fine-grained authorization / RBAC/ABAC)"] end %% ========================= %% Frontend %% ========================= subgraph UI["πŸ§‘ UI"] Chat["Chat + HITL cards + GeoMap"] Hub["Agent Hub
(edit + graph)"] KfPages["Knowledge Flow UI
(corpus management)"] end %% ========================= %% Agentic Platform %% ========================= subgraph AG["🧠 Agentic Platform (Fred)"] AGApi["API Chat / WS / Agents"] Orch["Fred Orchestrator"] PostalAgent["La Poste Agent
(custom / ReAct)"] Temporal["Temporal
(long-running / async workflows)"] AGPg["PostgreSQL
(sessions, history, config)"] end %% ========================= %% Business services %% ========================= subgraph MCP["πŸ”Œ Business MCP Services"] Mcp1["Parcel Tracking and Incidents"] Mcp2["Delivery Actions / Customer Service"] end subgraph KF["πŸ“š Knowledge Flow"] KFApi["RAG / Ingestion / Search API"] end %% ========================= %% Storage / Data layer %% ========================= subgraph DATA["πŸ’Ύ Data & Storage"] KFPg["PostgreSQL
(metadata)"] Vec["Vector Store
(embeddings / similarity)"] S3["Object Store / S3
(documents)"] end %% ========================= %% Flows %% ========================= %% Auth Chat --> KC Hub --> KC KfPages --> KC KC --> AGApi KC --> KFApi AGApi --> FGA KFApi --> FGA %% Frontend to backend Chat --> AGApi Hub --> AGApi KfPages --> KFApi %% Agentic internals AGApi --> Orch Orch --> PostalAgent AGApi --> AGPg Orch --> Temporal %% Tools / Knowledge PostalAgent --> Mcp1 PostalAgent --> Mcp2 PostalAgent --> KFApi %% Knowledge storage KFApi --> KFPg KFApi --> Vec KFApi --> S3 %% Styles style UI fill:#EAF2FF,stroke:#3B4A6B,stroke-width:1.2px style SEC fill:#F5F5F5,stroke:#666,stroke-width:1.2px style AG fill:#FFEFE0,stroke:#7A4A21,stroke-width:1.2px style MCP fill:#FFF7E6,stroke:#7A4A21,stroke-width:1.2px style KF fill:#E9FFE9,stroke:#2E6B2E,stroke-width:1.2px style DATA fill:#F9F9F9,stroke:#777,stroke-width:1.2px style PostalAgent fill:#FFF2CC,stroke:#6B5A1F,stroke-width:1.4px style Orch fill:#FFD9B3,stroke:#7A4A21,stroke-width:1.4px