Skip to main content
Glama

update_send_as

Modify a Gmail send-as alias to change display name, reply-to address, signature, or primary status for email customization.

Instructions

Updates a send-as alias

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sendAsEmailYesThe send-as alias to be updated
displayNameNoA name that appears in the 'From:' header
replyToAddressNoAn optional email address that is included in a 'Reply-To:' header
signatureNoAn optional HTML signature
isPrimaryNoWhether this address is the primary address
treatAsAliasNoWhether Gmail should treat this address as an alias

Implementation Reference

  • The handler function for the 'update_send_as' tool. It extracts the sendAsEmail from params, calls the shared handleTool helper to authenticate and execute the Gmail API update for the send-as alias.
    async (params) => {
      const { sendAsEmail, ...updateData } = params
      return handleTool(config, async (gmail: gmail_v1.Gmail) => {
        const { data } = await gmail.users.settings.sendAs.update({ userId: 'me', sendAsEmail, requestBody: updateData })
        return formatResponse(data)
      })
    }
  • Input schema using Zod for validating parameters of the update_send_as tool, including sendAsEmail (required) and optional fields like displayName, replyToAddress, etc.
    {
      sendAsEmail: z.string().describe("The send-as alias to be updated"),
      displayName: z.string().optional().describe("A name that appears in the 'From:' header"),
      replyToAddress: z.string().optional().describe("An optional email address that is included in a 'Reply-To:' header"),
      signature: z.string().optional().describe("An optional HTML signature"),
      isPrimary: z.boolean().optional().describe("Whether this address is the primary address"),
      treatAsAlias: z.boolean().optional().describe("Whether Gmail should treat this address as an alias")
    },
  • src/index.ts:1168-1185 (registration)
    Registration of the 'update_send_as' tool on the MCP server using server.tool(), including name, description, input schema, and handler function.
    server.tool("update_send_as",
      "Updates a send-as alias",
      {
        sendAsEmail: z.string().describe("The send-as alias to be updated"),
        displayName: z.string().optional().describe("A name that appears in the 'From:' header"),
        replyToAddress: z.string().optional().describe("An optional email address that is included in a 'Reply-To:' header"),
        signature: z.string().optional().describe("An optional HTML signature"),
        isPrimary: z.boolean().optional().describe("Whether this address is the primary address"),
        treatAsAlias: z.boolean().optional().describe("Whether Gmail should treat this address as an alias")
      },
      async (params) => {
        const { sendAsEmail, ...updateData } = params
        return handleTool(config, async (gmail: gmail_v1.Gmail) => {
          const { data } = await gmail.users.settings.sendAs.update({ userId: 'me', sendAsEmail, requestBody: updateData })
          return formatResponse(data)
        })
      }
    )
  • Shared helper function used by update_send_as (and other tools) to handle OAuth2 authentication, credential validation, Gmail client creation, API execution, and error handling.
    const handleTool = async (queryConfig: Record<string, any> | undefined, apiCall: (gmail: gmail_v1.Gmail) => Promise<any>) => {
      try {
        const oauth2Client = queryConfig ? createOAuth2Client(queryConfig) : defaultOAuth2Client
        if (!oauth2Client) throw new Error('OAuth2 client could not be created, please check your credentials')
    
        const credentialsAreValid = await validateCredentials(oauth2Client)
        if (!credentialsAreValid) throw new Error('OAuth2 credentials are invalid, please re-authenticate')
    
        const gmailClient = queryConfig ? google.gmail({ version: 'v1', auth: oauth2Client }) : defaultGmailClient
        if (!gmailClient) throw new Error('Gmail client could not be created, please check your credentials')
    
        const result = await apiCall(gmailClient)
        return result
      } catch (error: any) {
        return `Tool execution failed: ${error.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. 'Updates' implies mutation, but it doesn't specify required permissions, whether changes are reversible, error conditions (e.g., invalid email), or what happens on success (e.g., confirmation). For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

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 a single, efficient sentence with zero wasted words. It's front-loaded with the core action ('Updates'), making it immediately scannable and appropriately sized for its purpose.

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 incomplete. It doesn't cover behavioral aspects (permissions, side effects), usage context, or return values. Given the complexity of updating email aliases with 6 parameters, more guidance is needed for the agent to use this tool effectively.

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 100%, so the schema already documents all 6 parameters thoroughly. The description doesn't add any parameter-specific context beyond what's in the schema (e.g., it doesn't explain interactions between parameters like 'isPrimary' and 'treatAsAlias'). Baseline 3 is appropriate when the schema does the heavy lifting.

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 'Updates a send-as alias' clearly states the verb ('Updates') and resource ('send-as alias'), making the purpose immediately understandable. It distinguishes from sibling tools like 'create_send_as' (creation) and 'delete_send_as' (deletion), though it doesn't explicitly differentiate from 'patch_send_as' (partial update).

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 'patch_send_as' or 'create_send_as'. It doesn't mention prerequisites (e.g., needing an existing alias), exclusions, or typical use cases, leaving the agent to infer usage from context alone.

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/HitmanLy007/gmail-mcp'

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