Voice Assistant Server
FreeNot checkedEnables AI assistants to conduct phone interviews, deliver notifications, and manage HR communications through natural voice conversations using Twilio, Deepgra
About
Enables AI assistants to conduct phone interviews, deliver notifications, and manage HR communications through natural voice conversations using Twilio, Deepgram, and OpenAI.
README
A powerful Model Context Protocol (MCP) server that integrates Twilio Voice, Deepgram AI, and OpenAI to create intelligent voice-based HR automation tools. This system enables AI assistants like Claude to conduct phone interviews, deliver notifications, and manage HR communications through natural voice conversations.
Demo video
https://github.com/user-attachments/assets/6c47a8b7-7428-4711-bf26-00d5951ec66f
Features
Core Capabilities
- AI-Powered Voice Interviews: Conduct professional phone interviews with candidates using AI
- Interview Result Notifications: Automatically call candidates with interview results and feedback
- Job Opportunity Outreach: Reach out to potential candidates about new positions
- Real-time Voice Processing: Powered by Deepgram’s Voice Agent API
- MCP Integration: Seamless integration with Claude and other MCP-compatible AI assistants
Technical Features
- WebSocket-based Media Streaming: Real-time audio processing with Twilio Media Streams
- Dynamic Prompt Injection: Contextual AI prompts based on call purpose
- Function Call Handling: Advanced AI function calling for call management
- Comprehensive Logging: Detailed logging for debugging and monitoring
- Environment Configuration: Secure credential management
Architecture
sequenceDiagram
participant Claude as MCP Client(Claude App)
participant MCP as MCP Server
participant Twilio as Twilio Voice
participant Deepgram as Deepgram
participant AI as OpenAI
%% Step 1: Initiate interaction
Claude->>MCP: Initiate voice action (e.g., interview, notification)
MCP->>Twilio: Setup voice call
Twilio-->>MCP: Call status updates
%% Step 2: Real-time audio processing
Twilio->>Deepgram: Start audio stream
Deepgram-->>AI: Transcribed text
AI->>Deepgram: LLM response
Deepgram->>Twilio: Stream audio
Prerequisites
Before setting up the project, ensure you have:
- Node.js (v22 or higher)
- Twilio Account with:
- Account SID
- Auth Token
- Phone Number (for outbound calls)
- Deepgram Account with API Key
- Public URL (ngrok or production server) for webhooks
Installation
Clone the repository:
git clone https://github.com/prakharbhardwaj/voice-agent-mcp-server.git cd voice-agent-mcp-serverInstall dependencies:
npm installEnvironment Configuration: Create a
.envfile in the root directory:# Server Configuration PORT=3000 SERVER_URL=your_ngrok_url_or_server_url # Twilio Credentials TWILIO_ACCOUNT_SID=your_twilio_account_sid TWILIO_AUTH_TOKEN=your_twilio_auth_token TWILIO_PHONE_NUMBER=+your_twilio_phone_number # Deepgram API Key DEEPGRAM_API_KEY=your_deepgram_api_keyConfigure MCP Server: Update
mcp-config.jsonwith your actual paths and credentials:{ "mcpServers": { "voice-agent-mcp-server": { "type": "stdio", "command": "node", "args": ["/path/to/your/voice-agent-mcp-server/mcp-server.js"], "env": { "NODE_ENV": "production", "SERVER_URL": "your_ngrok_url_or_server_url", "TWILIO_ACCOUNT_SID": "your_twilio_account_sid", "TWILIO_AUTH_TOKEN": "your_twilio_auth_token", "TWILIO_PHONE_NUMBER": "+your_twilio_phone_number" } } } }
Usage
Start the Web Server
npm run dev
Using with Claude Desktop
- Add the MCP server configuration to Claude Desktop's settings:
- For macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - For Windows:
%APPDATA%\Claude\claude_desktop_config.json
- For macOS:
- Restart Claude Desktop
- Use the available tools in your conversation with Claude
Available MCP Tools
1. conduct_interview
Initiate a voice call to conduct a professional interview with a candidate.
Parameters:
candidatePhone(string): Phone number in E.164 formatcandidateName(string): Name of the candidateposition(string): Position they're applying forinterviewQuestions(array): List of questions to ask
Example:
Conduct an interview with John Doe at +1234567890 for the Software Engineer position.
Ask about their experience with React, their problem-solving approach, and their career goals.
2. notify_interview_result
Call a candidate to inform them about their interview results.
Parameters:
candidatePhone(string): Phone number in E.164 formatcandidateName(string): Name of the candidateposition(string): Position they interviewed forresult(enum): "accepted", "rejected", or "next_round"message(string): Additional feedback message
Example:
Call Jane Smith at +1234567890 to let her know she's been accepted for the Product Manager role.
3. discuss_job_opening
Reach out to potential candidates about job opportunities.
Parameters:
candidatePhone(string): Phone number in E.164 formatcandidateName(string): Name of the potential candidateposition(string): Job position to discusscompanyInfo(string): Brief company and role informationnextSteps(string): Next steps if interested
4. get_call_status
Get the status of active voice calls and system health.
5. check_twilio_config
Verify Twilio configuration and service readiness.
Project Structure
├── index.js # Main Fastify server
├── mcp-server.js # MCP server implementation
├── mcp-config.json # MCP configuration
├── package.json # Dependencies and scripts
└── src/
├── SettingsConfiguration.js # Deepgram agent settings
├── config/
│ └── dotenv.js # Environment configuration
├── mcp/
│ ├── logger.js # Logging utilities
│ ├── prompts.js # AI prompt generators
│ ├── server.js # MCP server logic
│ └── tools.js # MCP tool definitions
├── routes/
│ └── twilioRoute.js # Twilio webhook handlers
├── services/
│ ├── functionCallHandler.js # AI function call processing
│ └── twilioService.js # Twilio API wrapper
└── websockets/
└── mediaStreamHandler.js # WebSocket media processing
Configuration Details
Deepgram Agent Settings
The system uses Deepgram's Voice Agent with:
- Speech Recognition: Nova-3 model
- Text-to-Speech: Aura-2 Asteria voice
- LLM Integration: OpenAI GPT-4o-mini
- Audio Format: μ-law encoding at 8kHz (Twilio compatible)
Twilio Integration
- Media Streams: Real-time audio streaming via WebSocket
- TwiML: Dynamic call routing with custom parameters
- Call Management: Status tracking and call control
Troubleshooting
Common Issues
Twilio webhook not receiving calls:
- Ensure your SERVER_URL is publicly accessible
- Check ngrok is running and URL is updated
- Verify TwiML configuration
Deepgram connection issues:
- Validate DEEPGRAM_API_KEY
- Check WebSocket connectivity
- Review audio format compatibility
MCP server not loading in Claude:
- Verify mcp-config.json paths are absolute
- Check all environment variables are set
- Restart Claude Desktop after configuration changes
Debugging
Enable detailed logging by checking the console output and src/mcp/mcp-server.log file.
Development
Running in Development Mode
# Start web server with auto-reload
npm run dev
Adding New Tools
- Define the tool in
src/mcp/tools.js - Add prompt generation logic in
src/mcp/prompts.js - Implement tool handler in
src/mcp/server.js
Security Considerations
- Store all credentials in environment variables
- Use HTTPS/WSS in production
- Validate phone numbers and input data
- Implement rate limiting for production use
- Follow Twilio security best practices
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
Known Issues
ES Module Compatibility with Claude Desktop
If you encounter SyntaxError: Unexpected identifier when using this MCP server with Claude Desktop, this is due to Claude Desktop not having access to the same PATH environment or working directory context as your terminal.
Root Cause: Claude Desktop may not find the same Node.js binary that you use in your terminal (especially with nvm), or it may not run from the project directory where it can find the package.json with "type": "module".
Solution: Use the absolute path to your Node.js binary in your Claude Desktop configuration:
{
"mcpServers": {
"voice-agent-mcp-server": {
"type": "stdio",
"command": "/Users/yourusername/.nvm/versions/node/v22.16.0/bin/node",
"args": ["/path/to/your/project/mcp-server.js"],
"env": {
// ... your environment variables
}
}
}
}
Key points:
- Use absolute path to Node.js binary (find yours with
which node) - Set
cwdto your project directory so Node.js can findpackage.json - This ensures Claude Desktop uses the correct Node.js and project context
Related Issue: MCP Servers Issue #64
Support
For issues and questions:
- Check the troubleshooting section
- Review logs in
src/mcp/mcp-server.log - Open an issue on the repository
Built using Twilio, Deepgram, and the Model Context Protocol
Installing Voice Assistant Server
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/prakharbhardwaj/voice-agent-mcp-serverFAQ
Is Voice Assistant Server MCP free?
Yes, Voice Assistant Server MCP is free — one-click install via Unyly at no cost.
Does Voice Assistant Server need an API key?
No, Voice Assistant Server runs without API keys or environment variables.
Is Voice Assistant Server hosted or self-hosted?
A hosted option is available: Unyly runs the server in the cloud, no local setup required.
How do I install Voice Assistant Server in Claude Desktop, Claude Code or Cursor?
Open Voice Assistant Server on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Fetch
Web content fetching and conversion for efficient LLM usage.
AWS KB Retrieval
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
by modelcontextprotocolSpring AI MCP Server
Provides auto-configuration for setting up an MCP server in Spring Boot applications.
llm-analysis-assistant
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also
by xuzexin-hzCompare Voice Assistant Server with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All ai MCPs
