Skip to main content
Glama
Vapi MCP Server

Vapi MCP Server

Official
by VapiAI

update_tool

Modify an existing Vapi tool by passing its tool ID and updated configuration, including SMS, function, API request, or call transfer settings. Use it to change tool behavior and destinations.

Instructions

Updates an existing Vapi tool

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "toolId": "<toolId>"
    },
    "name": "update_tool"
  }
}

Input Schema

NameRequiredDescriptionDefault
smsNoSMS tool configuration - to send text messages
nameNoName of the function/tool
toolIdYesID of the tool to update
functionNoCustom function tool configuration - for custom server-side functions
apiRequestNoAPI Request tool configuration - for HTTP API integration
descriptionNoDescription of what the function/tool does
transferCallNoTransfer call tool configuration - to transfer calls to destinations
additionalFieldsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed62 schema fields changedv0.1.0
    • changedInput schema / additionalProperties
      Previous value: -falseNew value: +{}
    • addedInput schema / properties / additionalFields
      Added value: +{
      +  "additionalProperties": {},
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • removedInput schema / properties / apiRequest / additionalProperties
      Removed value: -false
    • removedInput schema / properties / apiRequest / properties / backoffPlan / additionalProperties
      Removed value: -false
    • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / baseDelaySeconds / maximum
      Added value: +10
    • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / baseDelaySeconds / minimum
      Added value: +0
    • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / maxRetries / maximum
      Added value: +10
    • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / maxRetries / minimum
      Added value: +0
    • addedInput schema / properties / apiRequest / properties / backoffPlan / properties / type / description
      Added value: +"This is the type of backoff plan to use. Defaults to fixed.\n\n@default fixed"
    • removedInput schema / properties / apiRequest / properties / body / additionalProperties
      Removed value: -false
    • addedInput schema / properties / apiRequest / properties / body / properties / description
      Added value: +{
      +  "description": "This is the description to help the model understand what it needs to output.",
      +  "type": "string"
      +}
    • addedInput schema / properties / apiRequest / properties / body / properties / enum
      Added value: +{
      +  "description": "This array specifies the allowed values that can be used to restrict the output of the model.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / apiRequest / properties / body / properties / format
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / apiRequest / properties / body / properties / items
      Added value: +{}
    • addedInput schema / properties / apiRequest / properties / body / properties / pattern
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / properties / apiRequest / properties / body / properties / properties / $ref
      Removed value: -"#/properties/function/properties/parameters/properties/properties"
    • addedInput schema / properties / apiRequest / properties / body / properties / properties / additionalProperties
      Added value: +{
      +  "allOf": [
      +    {}
      +  ]
      +}
    • addedInput schema / properties / apiRequest / properties / body / properties / properties / description
      Added value: +"This is required if the type is \"object\". This specifies the properties of the object. This is a map of property names to JsonSchema objects."
    • addedInput schema / properties / apiRequest / properties / body / properties / properties / properties
      Added value: +{}
    • addedInput schema / properties / apiRequest / properties / body / properties / properties / type
      Added value: +"object"
    • removedInput schema / properties / apiRequest / properties / body / properties / required / $ref
      Removed value: -"#/properties/function/properties/parameters/properties/required"
    • addedInput schema / properties / apiRequest / properties / body / properties / required / description
      Added value: +"This is a list of properties that are required.\n\nThis only makes sense if the type is \"object\"."
    • addedInput schema / properties / apiRequest / properties / body / properties / required / items
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / apiRequest / properties / body / properties / required / type
      Added value: +"array"
    • addedInput schema / properties / apiRequest / properties / body / properties / title
      Added value: +{
      +  "description": "This is the title of the schema.",
      +  "type": "string"
      +}
    • removedInput schema / properties / apiRequest / properties / body / properties / type / $ref
      Removed value: -"#/properties/function/properties/parameters/properties/type"
    • addedInput schema / properties / apiRequest / properties / body / properties / type / enum
      Added value: +[
      +  "string",
      +  "number",
      +  "integer",
      +  "boolean",
      +  "array",
      +  "object"
      +]
    • addedInput schema / properties / apiRequest / properties / body / properties / type / type
      Added value: +"string"
    • changedInput schema / properties / apiRequest / properties / body / required
      Previous value: -[
      -  "type",
      -  "properties"
      -]New value: +[
      +  "type"
      +]
    • addedInput schema / properties / apiRequest / properties / headers / properties
      Added value: +{}
    • changedInput schema / properties / apiRequest / properties / method / enum
      Previous value: -[
      -  "GET",
      -  "POST"
      -]New value: +[
      +  "POST",
      +  "GET",
      +  "PUT",
      +  "PATCH",
      +  "DELETE"
      +]
    • addedInput schema / properties / apiRequest / properties / timeoutSeconds / maximum
      Added value: +300
    • addedInput schema / properties / apiRequest / properties / timeoutSeconds / minimum
      Added value: +1
    • removedInput schema / properties / function / additionalProperties
      Removed value: -false
    • removedInput schema / properties / function / properties / parameters / additionalProperties
      Removed value: -false
    • removedInput schema / properties / function / properties / parameters / properties / properties / additionalProperties / additionalProperties
      Removed value: -false
    • removedInput schema / properties / function / properties / parameters / properties / properties / additionalProperties / properties
      Removed value: -{
      -  "description": {
      -    "type": "string"
      -  },
      -  "enum": {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "items": {},
      -  "properties": {
      -    "additionalProperties": {},
      -    "type": "object"
      -  },
      -  "required": {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "type": {
      -    "type": "string"
      -  }
      -}
    • removedInput schema / properties / function / properties / parameters / properties / properties / additionalProperties / required
      Removed value: -[
      -  "type"
      -]
    • removedInput schema / properties / function / properties / parameters / properties / properties / additionalProperties / type
      Removed value: -"object"
    • addedInput schema / properties / function / properties / parameters / properties / properties / properties
      Added value: +{}
    • addedInput schema / properties / function / properties / parameters / properties / required / description
      Added value: +"This specifies the properties that are required by the function."
    • addedInput schema / properties / function / properties / parameters / properties / type / description
      Added value: +"This must be set to 'object'. It instructs the model to return a JSON object containing the function call properties."
    • removedInput schema / properties / function / properties / server / additionalProperties
      Removed value: -false
    • addedInput schema / properties / function / properties / server / properties / headers / properties
      Added value: +{}
    • addedInput schema / properties / name / maxLength
      Added value: +64
    • addedInput schema / properties / name / pattern
      Added value: +"^[a-zA-Z0-9_-]{1,64}$"
    • removedInput schema / properties / sms / additionalProperties
      Removed value: -false
    • removedInput schema / properties / sms / properties / metadata / additionalProperties
      Removed value: -false
    • addedInput schema / properties / toolId / format
      Added value: +"uuid"
    • addedInput schema / properties / toolId / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    • removedInput schema / properties / transferCall / additionalProperties
      Removed value: -false
    • changedInput schema / properties / transferCall / properties / destinations / items / additionalProperties
      Previous value: -falseNew value: +{}
    • addedInput schema / properties / transferCall / properties / destinations / items / description
      Added value: +"Transfer destination. Other TransferDestinationNumber fields, such as transferPlan and message, are sent as given (see get_api_schema)."
    • removedInput schema / properties / transferCall / properties / destinations / items / properties / callerId / description
      Removed value: -"Caller ID to use for the transfer"
    • addedInput schema / properties / transferCall / properties / destinations / items / properties / callerId / maxLength
      Added value: +40
    • changedInput schema / properties / transferCall / properties / destinations / items / properties / description / description
      Previous value: -"Description of the transfer destination"New value: +"This is the description of the destination, used by the AI to choose when and how to transfer the call."
    • changedInput schema / properties / transferCall / properties / destinations / items / properties / extension / description
      Previous value: -"Extension number if applicable"New value: +"This is the extension to dial after transferring the call to the `number`."
    • addedInput schema / properties / transferCall / properties / destinations / items / properties / extension / maxLength
      Added value: +10
    • addedInput schema / properties / transferCall / properties / destinations / items / properties / extension / minLength
      Added value: +1
    • changedInput schema / properties / transferCall / properties / destinations / items / properties / number / description
      Previous value: -"Phone number to transfer to (e.g., \"+16054440129\"). It can be any phone number in E.164 format."New value: +"This is the phone number to transfer the call to."
    • addedInput schema / properties / transferCall / properties / destinations / items / properties / number / maxLength
      Added value: +40
    • addedInput schema / properties / transferCall / properties / destinations / items / properties / number / minLength
      Added value: +3
  2. Addedv1.0.0

TDQS

C2.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden and supplies almost nothing. It does not say whether this is a full replace or a partial merge, what happens to omitted fields, whether mutations are reversible, or whether the tool type can be changed after creation — all critical for a mutation tool with no annotation coverage.

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

Conciseness3/5

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

The single sentence is efficient and front-loaded with the verb, so nothing is wasted. But at this length for an 8-parameter polymorphic mutation tool the brevity reads as under-specification rather than concision, leaving the key update semantics unstated.

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?

Given a nested schema with 8 parameters and four mutually plausible tool-type configurations, plus no annotations and no output schema, the description is far too thin to guide a correct call. The rich schema descriptions partially compensate, but the agent still cannot determine partial-vs-full update behavior or success/failure characteristics.

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?

Schema description coverage is 88% and each of the 8 parameters (sms, function, apiRequest, transferCall, toolId, name, description, additionalFields) is documented in the schema itself, so the schema does most of the work. The description adds no meaning beyond that, including no clarification of whether multiple configuration blocks can be passed together, which the schema leaves ambiguous.

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

Purpose3/5

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

The description states a specific verb and resource ("Updates an existing Vapi tool"), so the agent knows this is a mutation on a tool entity. However, it offers no differentiation from sibling tools such as create_tool, get_tool, or list_tools sharing the same resource, and it does not indicate which tool types are modifiable.

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?

There is no guidance on when to use this instead of create_tool or get_tool, no prerequisites (does the tool already have to exist?), and no note that only one of the polymorphic configurations (sms, function, apiRequest, transferCall) should be supplied. Usage is only implied by the word "Updates".

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