IVR Flow Linter

IVR Flow Linter

Validates IVR flow definitions (JSON) to detect errors like unreachable nodes, dead ends, and missing fallbacks, providing scores and fix suggestions. Includes interactive visualization widget for ChatGPT and Claude Desktop integration.

Category
Visit Server

README

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

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured