utel-mcp
This server acts as an MCP gateway for LLM agents to interact with the UTEL IP-telephony REST API, with authentication (Bearer token) handled automatically.
Send authenticated HTTP requests via the send_request tool, supporting all major HTTP methods (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS), with custom headers, query parameters, and JSON request bodies. Use it to:
Manage SIP/PS users — create, read, update, or delete telephony users
View call history — retrieve call logs and records
Access statistics — pull usage and performance data
Configure IVR — set up call menus and routing
Manage trunks, groups, and queues — organize SIP trunks, agents, and call queues
Handle voicemail and voice messages
Set time rules and smart redirects — time-based and advanced call routing
Manage webhooks and extension ranges
Access built-in API documentation as MCP resources (e.g., utel://api/reference, utel://api/{topic}) covering topics like call-history, statistics, sip-users, ivr, and voicemail, so agents can discover and look up endpoint details inline.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@utel-mcp fetch call records from the last 24 hours"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
utel-mcp
An MCP server that wraps the UTEL IP-telephony REST API as MCP tools and documentation resources.
Lets LLM agents discover and call UTEL API endpoints with proper auth baked in.
Built with FastMCP (Python).
Prerequisites
Python 3.11+
uv — package manager
Related MCP server: OpenAPI MCP Server
Setup
uv syncConfiguration
The server is configured through environment variables (no .env file is loaded automatically):
Variable | Required | Description |
| Yes | Base URL of the UTEL API instance (e.g. |
| No | Sets an |
| No | Set to |
Usage
uv run utel-mcpThis starts the MCP server on stdio transport — it communicates over standard input/output.
Configure your MCP host (Claude Desktop, OpenCode, etc.) to launch it as a stdio subprocess.
Tools
send_request
Sends an authenticated HTTP request to the UTEL API. The path is joined with UTEL_API_BASE_URL.
Parameters:
Parameter | Type | Default | Description |
| string | — | API path, e.g. |
| string |
| HTTP method ( |
| object |
| Extra headers (merged on top of defaults) |
| object |
| JSON body |
| object |
| Query parameters |
Returns: Status code + response body as a string.
Pre-configured headers on every request: Accept: application/json, Content-Type: application/json, and Authorization: Bearer <token> (if HTTP_BEARER_TOKEN is set).
Resources (Built-in API Documentation)
The server exposes the full UTEL API reference as MCP resources, so agents can look up endpoint details without leaving the conversation:
Resource | Description |
| Index of all available documentation topics |
| Documentation for a specific topic |
| Full comprehensive API reference (all topics) |
| Same as |
Available topics: intro, auth, call-history, statistics, trunks, voice-messages, sip-users, ivr, groups, queues, time-rules, voicemail, smart-redirect, webhooks, extension-ranges.
Source Layout
src/utel_mcp/
├── __init__.py ← MCP server instance, tool/resource registration, entry point
├── config.py ← Environment variable loading
├── utils.py ← Shared helpers (header construction)
├── handlers.py ← Tool and resource implementations
└── docs.py ← Inline API documentation dataAvailable Tools
1 toolsend_requestA
Send a request to the UTEL API. The path is joined with UTEL_API_BASE_URL (env var). Use a leading slash, e.g. /ats/ps-user. The Authorization: Bearer token (HTTP_BEARER_TOKEN) is already included on every request.
Inputs: path (required), method, headers, json_data, +1 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 1 tool
With only one tool, there is no potential for confusion between tools. The single tool has a distinct purpose: sending requests to the UTEL API.
Only one tool exists, so naming consistency is not an issue. The name 'send_request' follows a verb_noun pattern.
A single generic tool for an entire API surface is an extreme mismatch. The tool count is far too low for any non-trivial domain; it forces the agent to manage all API logic internally.
The single tool provides no specialized operations (e.g., CRUD, search), leaving agents to manually construct requests for every action. This is severely incomplete for a typical API interface.
Related MCP Connectors
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server exposing the Backtest360 engine API as tools for AI agents.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol server that enables AI assistants to make HTTP requests (GET, POST, PUT, DELETE) to external APIs through standardized MCP tools.42MIT
- AlicenseNot gradedqualityDmaintenanceA generic MCP server that dynamically converts OpenAPI-defined REST APIs into tools for LLMs like Claude. It supports multiple authentication methods and transport protocols, enabling seamless interaction with any OpenAPI-compliant API.15 npmMIT

VoIPbin MCP Serverofficial
AlicenseBqualityBmaintenanceAn MCP server that enables AI assistants to interact with the VoIPbin CPaaS platform, exposing tools for managing calls, flows, messaging, conferencing, and more.661MIT- FlicenseAqualityDmaintenanceAn MCP server that enables LLMs to make arbitrary HTTP requests (GET, POST, PUT, DELETE, etc.) with custom headers, bodies, and cookies, supporting JSON and error handling.12-