Skip to main content
Glama

IVR Flow Linter

Build Status Python Version License

Deterministic IVR Flow Linter via MCP + ChatGPT Skybridge Widget

A Model Context Protocol (MCP) server that validates IVR flows (JSON) providing a score, error detection (unreachable nodes, dead ends), and suggested fixes. Includes a Skybridge-pattern HTML widget for visualizing results directly in ChatGPT.

Demo Video

Widget Screenshot

Features

  • Strict Validations: Unreachable nodes, dead ends, missing fallbacks, undefined variables.

  • Best Practices: Warning on long prompts, multiple questions, and irreversible actions without confirmation.

  • Idempotency: Consistent results via flow hashing.

  • Skybridge Widget: Interactive HTML/JS visualization with zero external dependencies.

  • MCP Compatible: Works with both ChatGPT Actions and Claude Desktop.

Architecture

  • Server: FastAPI with JSON-RPC 2.0 (/mcp)

  • Linter: Pure Python deterministic engine

  • Widget: Inline HTML injection (text/html+skybridge)

Local Development

Prerequisites

  • Python 3.9+

  • git

Setup

# Clone
git clone https://github.com/arebury/ivr-flow-linter.git
cd ivr-flow-linter

# Virtual Environment
python -m venv venv
source venv/bin/activate

# Install
pip install -r requirements.txt

# Run Server
uvicorn src.main:app --host 0.0.0.0 --port 8000 --reload

Visit http://localhost:8000/demo for an interactive simulator.

Validating the Demo

  1. Run server: uvicorn src.main:app --host 0.0.0.0 --port 8000 --reload

  2. Open http://localhost:8000/demo

  3. Select "Invalid: Dead End" from the dropdown.

  4. Click Lint & Render.

  5. Verify:

    • "Parsed Result" tab shows errors.

    • Widget renders the flow with error indicators.

Deployment (Render)

This project includes a render.yaml for 1-click deployment on Render.

  1. Create a new Web Service on Render.

  2. Connect your GitHub repository: https://github.com/arebury/ivr-flow-linter.

  3. Select "Python 3" runtime.

  4. Build Command: pip install -r requirements.txt

  5. Start Command: uvicorn src.main:app --host 0.0.0.0 --port $PORT

Connecting to ChatGPT (Apps SDK / MCP)

This server acts as an MCP Server that exposes the lint_flow tool. The tool returns a Skybridge-compatible widget (text/html+skybridge) for rich visualization.

  1. Deploy the service to a public URL (e.g., https://your-app.onrender.com).

  2. Register the app in the OpenAI Developer Portal (for Apps SDK) using the manifest at /.well-known/ai-plugin.json.

  3. Alternatively, for Custom Actions (GPTs):

    • Import configuration from https://your-app.onrender.com/openapi.yaml.

    • Ensure the model knows how to interpret the ui field in the response (Skybridge pattern).

Connecting to Claude (Desktop)

Add the server to your Claude Desktop configuration (claude_desktop_config.json):

Local:

{
  "mcpServers": {
    "ivr-linter": {
      "command": "uvicorn",
      "args": ["src.main:app", "--port", "8000"],
      "cwd": "/absolute/path/to/ivr-flow-linter"
    }
  }
}

Remote (via Stdio Wrapper - Advanced): (Typically Claude Desktop connects to local processes. For remote MCP, use a local bridge or simple local-proxy).

Examples

See /examples directory for 10 sample flows (5 valid, 5 invalid) including:

  • valid_basic.json: Simple greeting

  • valid_payment.json: Transaction flow

  • invalid_unreachable.json: Disconnected nodes

  • invalid_dead_end.json: Stuck user path

-
security - not tested
A
license - permissive license
-
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/arebury/ivr-flow-linter'

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