TELECOM AI GATEWAY · LIVE ON AZURE

Let AI work the support desk.
Never trust it with the money.

mcpgateway sits between an AI assistant and your telecom systems. Routine questions are answered in seconds. Anything that costs money waits for a human to say yes.

Abstract telecom network mesh converging on a secure gateway core
8 tools8 ordered checks£5.00 ceilingmoney_moved: false

5 of 6

routine support questions handled without a human

0

pounds an AI agent can move on its own authority

£5.00

hard ceiling on any credit the assistant may request

100%

calls logged, whether they were approved or refused

The business case

Five questions cost you headcount. The sixth is why nothing shipped.

BEFORE

  • Routine lookups at human cost and speed
  • Billing off limits, policy only a sentence in a prompt
  • No record of who asked for what

AFTER

  • Reads answered instantly, scoped to the caller by the API
  • Refunds queued to a supervisor, evidence attached
  • A compromised client reaches nothing beyond its own account
  • Every call provable, reproved by tests on each commit

How it works

One path in, one path out, and a checkpoint in the middle.

Telecom support flow: customer phone and agent console on the left, a shielded mcpgateway checkpoint in the centre, telecom core systems and billing database on the right
CUSTOMER AND AGENTMCPGATEWAY CHECKPOINTTELECOM CORE AND BILLING

01

Customer asks

A question arrives from the app, the web chat or an agent's console.

02

Gateway checks

Eight ordered checks and the guardrail pipeline run before any system is touched.

03

Telecom core answers

The business API returns only the caller's own account, order, bill or outage.

04

Money waits for a human

Anything payable becomes an approval item, evidence attached, nothing moved.

End to end architecture

The tool server decides who may call. The API decides what is true.

  1. 01MCP host
    Cursor · Claude Desktop · CLI

    The assistant connects with the customer's own token, never an administrator key.

    customer bearer token
  2. 02telecom-mcp
    port 8080 · tool gateway

    Eight published tools, eight ordered authorization checks, then the guardrail pipeline. Anything not explicitly permitted is refused.

    deny by default
  3. 03telecom-middleware
    port 9000 · business API

    Owns the commercial rules and is the only component allowed to write. The credential joining the two services carries no permissions on its own.

    powerless service credential
  4. 04MongoDB replica set
    records · outbox · audit chain

    Every outcome, approved or refused, is written once and linked to the previous record, so the history cannot be edited after the fact.

    hash chained
Human approval branch

A refund request never reaches a payment system. It becomes a queue item for a named supervisor with the evidence attached, and the response states plainly that no money has moved. Approvers cannot sign off their own requests.

money_moved: false

EIGHT ORDERED CHECKS, DENY BY DEFAULT

1 tool scope2 token3 tenant4 customer id5 account ownership6 role7 permission8 input schema

First failure ends the call and records which check stopped it.

GUARDRAIL PIPELINE

rate limitargument boundsunicode safetyprompt injection scanbusiness rulesaction budget

Responses are scanned on the way out, so no credentials or card numbers reach the conversation.

The decisions that make it safe

Policy lives in code, not in a prompt

Limits are enforced in the schema, not requested in a prompt. The control holds even if the model is persuaded.

The caller's own identity, end to end

The customer's token reaches the API, so the API scopes what is visible. Someone else's account returns HTTP 403 Forbidden: authenticated, but not permitted. One compromised client exposes one account.

Two services that do not trust each other

The gateway decides who may call; the API alone writes to the database. Breaching the AI layer never touches the record of truth.

Money always stops at a named human

A refund becomes an approval item with evidence attached, and money_moved stays false until a supervisor says yes.

One refund request, in full

I was charged during the outage.

tools/call · request_refund_approval
{
  "cx_id": "CX-1234",
  "invoice_id": "INV-2026-08",
  "amount": "4.50",
  "currency": "GBP",
  "reason": "service_outage",
  "idempotency_key": "cx1234-inv202608-01"
}
response · audited · chained
{
  "approval_request_id": "APR-000123",
  "state": "pending_approval",
  "approver_role": "supervisor_approver",
  "money_moved": false,
  "deduplicated": false
}

money_moved: false is in the contract: the credit is queued for a supervisor, nothing refunded yet. A £50 request would be rejected by the schema, and a repeated request returns the original item rather than a duplicate.

Running today

Deployed on Azure Container Apps, not a slide deck.

AZURE · UAE NORTH · STAGING
Health/healthzReady/readyzMCP/mcp/
mcp/cursor-mcp.staging.json
{
  "mcpServers": {
    "telecom": {
      "url": "https://telecom-mcp-staging
        .calmfield-7654c7b3.uaenorth
        .azurecontainerapps.io/mcp/",
      "headers": {
        "Authorization": "Bearer <token>"
      }
    }
  }
}

Point Cursor or Claude Desktop at the URL and the eight tools appear. Same authorization for every client.

Built to be audited, not demoed.

MCP · FastAPI · Pydantic v2 · MongoDB · Auth0 · hash chained audit · OpenTelemetry · mypy strict, 95% coverage · GitHub Actions to Azure.