EST Call Agent
FastMCP cloud server enabling AI assistants to manage outbound call campaigns, schedule calls, list agents, and access call data via HTTP.
README
EST Call Agent - FastMCP Cloud Server
A URL/HTTP-based MCP (Model Context Protocol) server for the AI Phone Agent Platform. This server can be deployed to Railway, Render, Fly.io, or any cloud platform and allows AI assistants (like Claude in Cursor) to interact with your call campaigns via HTTP instead of stdio.
🌟 Features
- HTTP/URL-based MCP server using FastMCP
- Cloud-ready deployment with Docker support
- Organization-scoped authentication via API keys
- REST API integration - calls python-server-est API instead of direct imports
- No dependencies on main application code - fully independent deployment
🏗️ Architecture
Cursor/Claude Desktop
↓ (HTTP/HTTPS)
FastMCP Server (this project)
↓ (REST API calls)
python-server-est API (Railway)
↓
Twilio + OpenAI
📦 Installation
Local Development
# Clone or navigate to project
cd python-mcp-est
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Copy environment template
cp .env.example .env
# Edit .env with your configuration
nano .env
Environment Variables
Required environment variables (see .env.example):
# Organization Authentication
ORGANIZATION_API_KEY=your_api_key_from_org_settings
ORGANIZATION_ID=your_organization_uuid
# API Configuration
API_BASE_URL=https://python-server-est-production.up.railway.app
# Supabase (for API key validation)
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=your_service_role_key
🚀 Deployment
Railway Deployment
-
Create new Railway project:
railway login railway init -
Set environment variables in Railway dashboard:
ORGANIZATION_API_KEYORGANIZATION_IDAPI_BASE_URLSUPABASE_URLSUPABASE_SERVICE_KEY
-
Deploy:
railway up -
Get your deployment URL:
railway statusExample:
https://python-mcp-est-production.up.railway.app
🔌 Connecting to Cursor/Claude Desktop
Cursor Configuration
Edit your Cursor MCP config file (usually ~/.cursor/mcp.json or workspace .cursor/mcp.json):
{
"mcpServers": {
"est-call-agent": {
"url": "https://your-mcp-server.railway.app/mcp",
"headers": {
"X-API-Key": "your_organization_api_key"
}
}
}
}
Claude Desktop Configuration
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or equivalent:
{
"mcpServers": {
"est-call-agent": {
"url": "https://your-mcp-server.railway.app/mcp",
"headers": {
"X-API-Key": "your_organization_api_key"
}
}
}
}
🛠️ Available Tools
1. start_campaign_call_scheduled
Schedule a single outbound call for a specific client at a given time.
Parameters:
campaign_id(string): Campaign UUIDphone_number(string): Client number in E.164 formatscheduled_time(string): ISO 8601 timestamp (campaign timezone respected)first_name,last_name,company,email,extrainfo(strings, optional): Metadata stored as contact custom data
Returns: Call ID, scheduled timestamps, and subscription usage details from the API.
2. list_voice_agents
Lists all voice agent campaigns for the authenticated organization.
Returns: Array of campaign objects with campaign_id, name, status, campaign_type, created_at, and is_active fields.
3. get_call_data_by_id
Retrieves a single call record from Supabase.
Parameters:
call_id(string): Supabase call identifier
Returns: Full call JSON when found.
4. list_recent_calls
Lists the most recent calls for the organization.
Parameters:
limit(integer, optional): Number of calls to return (default 25, max 200)
Returns: Array of call records ordered by newest first.
5. get_twilio_number
Returns the Twilio phone number configured for the organization.
Returns: twilio_phone_number string.
6. list_inbound_clients
Lists inbound client records.
Parameters:
limit(integer, optional): Number of records to return (default 25, max 200)
Returns: Array of inbound client objects ordered by creation date.
7. get_webhook_url
Returns the webhook URL configured for the organization.
Returns: webhook_url string.
8. get_organisation_members
Returns organization members with their name, email, and last login timestamp.
Returns: Array of member objects: { "full_name", "email", "last_login_at" }.
🧪 Testing
Local Testing (HTTP mode)
# Run server
python cloud_mcp_server.py
# Test with curl
curl http://localhost:8000/mcp
📊 Monitoring
Health Check
The server includes a health check endpoint:
curl https://your-mcp-server.railway.app/health
Logs
View logs in Railway:
railway logs
🔒 Security
- API Key Authentication: All requests require a valid organization API key
- Organization Scoping: All data is automatically filtered to the authenticated organization
- HTTPS Required: Use HTTPS in production (automatically provided by Railway/Render/Fly)
- Environment Variables: Never commit
.envfile or expose secrets
🐛 Troubleshooting
Connection Issues
- Check deployment URL: Ensure the URL in your MCP config matches your deployment
- Verify API key: Check that
ORGANIZATION_API_KEYis set correctly in both server and client - Check logs: Review Railway/Render logs for error messages
API Errors
- Validate API base URL: Ensure
API_BASE_URLpoints to python-server-est - Check organization ID: Verify
ORGANIZATION_IDis correct - Review API timeouts: Increase
API_TIMEOUTif needed
Authentication Failures
- Regenerate API key: Generate a new key in organization settings
- Verify Supabase config: Check
SUPABASE_URLandSUPABASE_SERVICE_KEY - Check database: Verify API key exists in
organization_service_credentialstable
📝 Development
Project Structure
python-mcp-est/
├── cloud_mcp_server.py # FastMCP server implementation
├── mcp_handlers.py # Tool handlers (calls REST API)
├── requirements.txt # Python dependencies
├── Dockerfile # Container definition
├── railway.toml # Railway configuration
├── .env.example # Environment template
└── README.md # This file
Adding New Tools
- Add handler function in
mcp_handlers.py - Add tool definition in
cloud_mcp_server.pyusing@mcp.tool()decorator - Update this README with tool documentation
📄 License
Same as the parent EST Call Agent Platform project.
🆘 Support
For issues or questions:
- Check the logs first
- Review Railway/Render deployment status
- Verify all environment variables are set correctly
- Check python-server-est API is responding
🔗 Related Projects
- python-server-est: Main API server for outbound calls
- phone-agent-platform-EST: Next.js frontend application
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。