Skip to main content
Glama
AiAgency-Now

VoiceAI-MCP-VAVicky

Official
by AiAgency-Now

update_openrouter_token

Update the Open Router API key to maintain access to voice AI services through the VoiceAI-MCP-VAVicky server.

Instructions

Update Open Router API Key

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
openrouter_tokenYesOpen Router API Key

Implementation Reference

  • Handler implementation for 'update_openrouter_token' tool. Sets up a POST request to the backend API (/openrouter/oauth) with the provided openrouter_token in the body.
    case 'update_openrouter_token':
      url = `${this.baseUrl}/openrouter/oauth`;
      method = 'POST';
      body = { openrouter_token: args.openrouter_token };
      break;
  • Schema definition for the 'update_openrouter_token' tool, specifying the required 'openrouter_token' input parameter.
    {
      name: 'update_openrouter_token',
      description: 'Update Open Router API Key',
      inputSchema: {
        type: 'object',
        properties: {
          openrouter_token: { type: 'string', description: 'Open Router API Key' }
        },
        required: ['openrouter_token']
      }
    },
  • index.js:37-458 (registration)
    The tool is registered by being included in the static list returned by the ListToolsRequestSchema handler.
    this.server.setRequestHandler(ListToolsRequestSchema, async () => {
      return {
        tools: [
          // User Management
          {
            name: 'get_user',
            description: 'Get user data including tokens and settings',
            inputSchema: {
              type: 'object',
              properties: {},
              required: []
            }
          },
          {
            name: 'update_white_label',
            description: 'Update White Label details: name, description, domain and color',
            inputSchema: {
              type: 'object',
              properties: {
                whitelabel_name: { type: 'string', description: 'White label name' },
                whitelabel_description: { type: 'string', description: 'White label description' },
                whitelabel_domain: { type: 'string', description: 'White label domain' },
                whitelabel_color: { type: 'string', description: 'White label color (hex code)' }
              },
              required: []
            }
          },
          {
            name: 'update_smtp',
            description: 'Update SMTP settings for custom email notifications',
            inputSchema: {
              type: 'object',
              properties: {
                smtp_email: { type: 'string', description: 'SMTP email address' },
                smtp_password: { type: 'string', description: 'SMTP password' },
                smtp_host: { type: 'string', description: 'SMTP host' },
                smtp_port: { type: 'string', description: 'SMTP port' }
              },
              required: ['smtp_email', 'smtp_password', 'smtp_host']
            }
          },
          // API Token Management
          {
            name: 'update_openai_token',
            description: 'Update OpenAI API Key',
            inputSchema: {
              type: 'object',
              properties: {
                openai_token: { type: 'string', description: 'OpenAI API Key' }
              },
              required: ['openai_token']
            }
          },
          {
            name: 'update_elevenlabs_token',
            description: 'Update Elevenlabs API Key',
            inputSchema: {
              type: 'object',
              properties: {
                elevenlabs_token: { type: 'string', description: 'Elevenlabs API Key' }
              },
              required: ['elevenlabs_token']
            }
          },
          {
            name: 'update_deepseek_token',
            description: 'Update Deepseek API Key',
            inputSchema: {
              type: 'object',
              properties: {
                deepseek_token: { type: 'string', description: 'Deepseek API Key' }
              },
              required: ['deepseek_token']
            }
          },
          {
            name: 'update_gemini_token',
            description: 'Update Google Gemini API Key',
            inputSchema: {
              type: 'object',
              properties: {
                gemini_token: { type: 'string', description: 'Google Gemini API Key' }
              },
              required: ['gemini_token']
            }
          },
          {
            name: 'update_openrouter_token',
            description: 'Update Open Router API Key',
            inputSchema: {
              type: 'object',
              properties: {
                openrouter_token: { type: 'string', description: 'Open Router API Key' }
              },
              required: ['openrouter_token']
            }
          },
          // Assistant Management
          {
            name: 'get_assistants',
            description: 'Get all assistants for the authenticated user',
            inputSchema: {
              type: 'object',
              properties: {},
              required: []
            }
          },
          {
            name: 'get_assistant',
            description: 'Get basic information about a specific assistant',
            inputSchema: {
              type: 'object',
              properties: {
                assistant_id: { type: 'string', description: 'Assistant ID' }
              },
              required: ['assistant_id']
            }
          },
          {
            name: 'get_one_assistant',
            description: 'Get complete information about a specific assistant',
            inputSchema: {
              type: 'object',
              properties: {
                assistant_id: { type: 'string', description: 'Assistant ID' }
              },
              required: ['assistant_id']
            }
          },
          {
            name: 'create_assistant',
            description: 'Create a new assistant with comprehensive configuration',
            inputSchema: {
              type: 'object',
              properties: {
                name: { type: 'string', description: 'Assistant name' },
                apiKey: { type: 'string', description: 'OpenAI API Key' },
                welcome_message: { type: 'string', description: 'Welcome message', default: 'Hello how can I help you today?' },
                prompt: { type: 'string', description: 'Instructions/Prompt for the assistant' },
                active: { type: 'boolean', description: 'Whether assistant is active', default: true },
                assistant_type: { type: 'string', enum: ['Text Only', 'Voice Only', 'Text & Voice', 'Voice & Text'], description: 'AI Type' },
                ai_platform: { type: 'string', enum: ['openai', 'gemini', 'openrouter', 'deepseek'], description: 'AI Provider' },
                openai_model: { type: 'string', description: 'AI Model', default: 'gpt-3.5-turbo' },
                openai_temperature: { type: 'number', description: 'AI Temperature (0-2)', default: 0.8 },
                booking_bot: { type: 'boolean', description: 'Is booking bot', default: false },
                location: { type: 'string', description: 'GoHighLevel Location' },
                calendar: { type: 'string', description: 'Calendar ID' },
                timezone: { type: 'string', description: 'Timezone' },
                custom_field: { type: 'string', description: 'Custom field' },
                limit_call_time: { type: 'number', description: 'Limit call time in seconds', default: 240 },
                limit_call_tokens: { type: 'number', description: 'Limit call tokens', default: 2000 },
                max_call_tokens: { type: 'number', description: 'Max call tokens', default: 18000 },
                elevenlabs_voice_id: { type: 'string', description: 'ElevenLabs Voice ID' },
                twilio_sid: { type: 'string', description: 'Twilio SID' },
                twilio_token: { type: 'string', description: 'Twilio Token' },
                twilio_phone: { type: 'string', description: 'Twilio Phone Number' },
                twilio_welcome: { type: 'string', description: 'Twilio Welcome Message' },
                twilio_speech_timeout: { type: 'number', description: 'Twilio Speech Timeout', default: 3 },
                twilio_initial_delay: { type: 'number', description: 'Twilio Initial Delay', default: 1 },
                google_calendar: { type: 'boolean', description: 'Google Calendar Integration', default: false },
                webhook_to_send: { type: 'string', description: 'Webhook URL' },
                openai_realtime: { type: 'boolean', description: 'OpenAI Realtime', default: false },
                openai_realtime_voice: { type: 'string', enum: ['alloy', 'echo', 'fable', 'nova', 'onyx', 'shimmer'], description: 'OpenAI Realtime Voice' },
                openai_websites: { type: 'array', items: { type: 'string' }, description: 'OpenAI Websites' }
              },
              required: ['name', 'apiKey']
            }
          },
          {
            name: 'update_assistant',
            description: 'Update an existing assistant',
            inputSchema: {
              type: 'object',
              properties: {
                assistant_id: { type: 'string', description: 'Assistant ID' },
                name: { type: 'string', description: 'Assistant name' },
                apiKey: { type: 'string', description: 'OpenAI API Key' },
                welcome_message: { type: 'string', description: 'Welcome message' },
                prompt: { type: 'string', description: 'Instructions/Prompt' },
                active: { type: 'boolean', description: 'Whether assistant is active' },
                assistant_type: { type: 'string', enum: ['Text Only', 'Voice Only', 'Text & Voice', 'Voice & Text'] },
                ai_platform: { type: 'string', enum: ['openai', 'gemini', 'openrouter', 'deepseek'] },
                openai_model: { type: 'string', description: 'AI Model' },
                openai_temperature: { type: 'number', description: 'AI Temperature (0-2)' },
                booking_bot: { type: 'boolean', description: 'Is booking bot' },
                location: { type: 'string', description: 'GoHighLevel Location' },
                calendar: { type: 'string', description: 'Calendar ID' },
                timezone: { type: 'string', description: 'Timezone' },
                custom_field: { type: 'string', description: 'Custom field' }
              },
              required: ['assistant_id']
            }
          },
          {
            name: 'delete_assistant',
            description: 'Delete an assistant',
            inputSchema: {
              type: 'object',
              properties: {
                assistant_id: { type: 'string', description: 'Assistant ID' }
              },
              required: ['assistant_id']
            }
          },
    
          // Assistant Files
          {
            name: 'get_assistant_files',
            description: 'Get files associated with an assistant',
            inputSchema: {
              type: 'object',
              properties: {
                assistant_id: { type: 'string', description: 'Assistant ID' }
              },
              required: ['assistant_id']
            }
          },
          {
            name: 'delete_assistant_file',
            description: 'Delete a specific file from an assistant',
            inputSchema: {
              type: 'object',
              properties: {
                assistant_id: { type: 'string', description: 'Assistant ID' },
                file_id: { type: 'string', description: 'File ID' }
              },
              required: ['assistant_id', 'file_id']
            }
          },
    
          // Assistant Usage & Analytics
          {
            name: 'get_assistant_usage',
            description: 'Get usage statistics for an assistant',
            inputSchema: {
              type: 'object',
              properties: {
                assistant_id: { type: 'string', description: 'Assistant ID' }
              },
              required: ['assistant_id']
            }
          },
          {
            name: 'get_assistants_token_usage',
            description: 'Get token usage across all assistants',
            inputSchema: {
              type: 'object',
              properties: {},
              required: []
            }
          },
          {
            name: 'get_dashboard_assistant',
            description: 'Get the dashboard assistant for the authenticated user',
            inputSchema: {
              type: 'object',
              properties: {},
              required: []
            }
          },
          // Chat with Assistant
          {
            name: 'chat_with_assistant',
            description: 'Chat with a specific assistant',
            inputSchema: {
              type: 'object',
              properties: {
                assistant_id: { type: 'string', description: 'Assistant ID' },
                message: { type: 'string', description: 'Message to send' },
                thread_id: { type: 'string', description: 'Chat/Thread ID' },
                audio: { type: 'boolean', description: 'Enable audio response', default: false }
              },
              required: ['assistant_id', 'message', 'thread_id']
            }
          },
          // Twilio Operations
          {
            name: 'connect_twilio',
            description: 'Connect Twilio account credentials',
            inputSchema: {
              type: 'object',
              properties: {
                twilio_sid: { type: 'string', description: 'Twilio Account SID' },
                twilio_token: { type: 'string', description: 'Twilio Auth Token' }
              },
              required: ['twilio_sid', 'twilio_token']
            }
          },
          {
            name: 'disconnect_twilio',
            description: 'Disconnect Twilio account',
            inputSchema: {
              type: 'object',
              properties: {},
              required: []
            }
          },
          {
            name: 'get_twilio_numbers',
            description: 'Get all Twilio phone numbers',
            inputSchema: {
              type: 'object',
              properties: {},
              required: []
            }
          },
          {
            name: 'get_available_numbers',
            description: 'Get available phone numbers for purchase',
            inputSchema: {
              type: 'object',
              properties: {
                country_code: { type: 'string', description: 'Country code', default: 'US' },
                number_type: { type: 'string', enum: ['local', 'tollfree', 'mobile'], description: 'Number type', default: 'local' },
                search_pattern: { type: 'string', description: 'Search for numbers containing this pattern' },
                locality: { type: 'string', description: 'Locality/city for local numbers' }
              },
              required: []
            }
          },
          {
            name: 'buy_twilio_number',
            description: 'Purchase a new Twilio phone number',
            inputSchema: {
              type: 'object',
              properties: {
                phone_number: { type: 'string', description: 'Phone number to purchase' }
              },
              required: ['phone_number']
            }
          },
          {
            name: 'update_twilio_number',
            description: 'Update Twilio number configuration',
            inputSchema: {
              type: 'object',
              properties: {
                number_sid: { type: 'string', description: 'Number SID' },
                friendly_name: { type: 'string', description: 'Friendly name' },
                voice_webhook: { type: 'string', description: 'Voice webhook URL' },
                sms_webhook: { type: 'string', description: 'SMS webhook URL' }
              },
              required: ['number_sid']
            }
          },
          {
            name: 'get_twilio_usage',
            description: 'Get Twilio usage statistics',
            inputSchema: {
              type: 'object',
              properties: {
                start_date: { type: 'string', description: 'Start date (ISO format)' },
                end_date: { type: 'string', description: 'End date (ISO format)' },
                limit: { type: 'number', description: 'Max number of results', default: 50 }
              },
              required: []
            }
          },
          // Call Management
          {
            name: 'make_call',
            description: 'Make a phone call through assistant',
            inputSchema: {
              type: 'object',
              properties: {
                assistant_id: { type: 'string', description: 'Assistant ID' },
                phone_number: { type: 'string', description: 'Phone number to call' },
                contact_id: { type: 'string', description: 'Contact ID (optional)' }
              },
              required: ['assistant_id', 'phone_number']
            }
          },
          {
            name: 'make_bulk_call',
            description: 'Make bulk phone calls',
            inputSchema: {
              type: 'object',
              properties: {
                assistant_id: { type: 'string', description: 'Assistant ID' },
                contact_bulk_id: { type: 'string', description: 'Contact bulk ID' }
              },
              required: ['assistant_id', 'contact_bulk_id']
            }
          },
          {
            name: 'get_calls_in_progress',
            description: 'Get all calls currently in progress',
            inputSchema: {
              type: 'object',
              properties: {},
              required: []
            }
          },
          {
            name: 'cancel_call',
            description: 'Cancel an active phone call',
            inputSchema: {
              type: 'object',
              properties: {
                call_id: { type: 'string', description: 'Call ID' }
              },
              required: ['call_id']
            }
          },
          // SMS Operations
          {
            name: 'send_sms',
            description: 'Send SMS message through assistant',
            inputSchema: {
              type: 'object',
              properties: {
                assistant_id: { type: 'string', description: 'Assistant ID' },
                phone_number: { type: 'string', description: 'Phone number to send SMS' },
                message: { type: 'string', description: 'SMS message content' },
                contact_id: { type: 'string', description: 'Contact ID (optional)' }
              },
              required: ['assistant_id', 'phone_number', 'message']
            }
          }
        ]
      };
    });
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It implies a mutation operation ('Update') but doesn't specify whether this requires admin permissions, if the change is persistent, what happens to existing configurations, or any rate limits. This leaves significant gaps for a tool that modifies system settings.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at just three words, front-loading the essential information with zero wasted text. Every word earns its place by specifying the action and target resource efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is insufficiently complete. It doesn't address important contextual aspects like what the update affects (e.g., global settings vs. user-specific), whether there are side effects, or what confirmation/response to expect after invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with the single parameter 'openrouter_token' clearly documented in the schema. The description doesn't add any additional semantic context beyond what's already in the schema, such as format requirements or validation rules, so it meets the baseline for adequate but not enhanced parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update') and the resource ('Open Router API Key'), making the purpose immediately understandable. It distinguishes itself from siblings like 'update_deepseek_token' by specifying the exact token type, though it doesn't explicitly contrast with them in the description text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'update_openai_token' or 'update_gemini_token', nor does it mention prerequisites such as authentication requirements or system state. It simply states what the tool does without contextual usage information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AiAgency-Now/MCP-VoiceAI-WhiteLabel'

If you have feedback or need assistance with the MCP directory API, please join our Discord server