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-mcpfetch 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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| method | No | GET | |
| headers | No | ||
| json_data | No | ||
| params | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the Authorization token is automatically included and that the path is joined with a base URL. This is essential behavioral info. However, it does not mention error handling, rate limits, or side effects, but for a generic HTTP request tool, the transparency is above average.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose, and every sentence adds value. There is no redundant or wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (5 params, 1 required, output schema present), the description covers the critical aspects: path format and authentication. It does not explain query parameters or error scenarios, but the output schema satisfies return value details. Overall, it is sufficiently complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only adds meaning for the 'path' parameter (format and base URL) but does not elaborate on method, headers, json_data, or params beyond what the schema provides. The defaults and enums are in the schema, but additional semantics are missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose: 'Send a request to the UTEL API.' It specifies the verb ('send') and the resource ('UTEL API'), avoiding any tautology. The additional details about path joining and token inclusion further clarify the operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. While it gives technical usage instructions (path format, auth inclusion), it does not discuss appropriate contexts, exclusions, or comparisons with other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.1.0- First observed
send_request
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.
Maintenance
Related MCP Connectors
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
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.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
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.8 npmMIT

VoIPbin MCP Serverofficial
AlicenseBqualityCmaintenanceAn MCP server that enables AI assistants to interact with the VoIPbin CPaaS platform, exposing tools for managing calls, flows, messaging, conferencing, and more.521MIT- 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-