Skip to main content

Tool Types

This page documents the interfaces and types used for App tools integration with Mira AI. AI Tool Calls are temporarily unavailable while this feature is under maintenance. This feature will return later in 2026.

ToolSchema

Interface defining the structure of a tool that a App can expose to Mira AI.
interface ToolSchema {
  /** Unique identifier for the tool */
  id: string

  /** Human-readable description of what the tool does */
  description: string

  /** Optional phrases that might trigger this tool (helps Mira recognize when to use it) */
  activationPhrases?: string[]

  /** Definition of parameters this tool accepts */
  parameters?: Record<string, ToolParameterSchema>
}

ToolParameterSchema

Interface defining the structure of parameters that a tool accepts.
interface ToolParameterSchema {
  /** Data type of the parameter */
  type: "string" | "number" | "boolean"

  /** Human-readable description of what the parameter is for */
  description: string

  /** Optional list of allowed values for string parameters */
  enum?: string[]

  /** Whether this parameter is required */
  required?: boolean
}

ToolCall

Interface representing a call to a App tool from Mira AI.
interface ToolCall {
  /** ID of the tool being called */
  toolId: string

  /** Parameter values for this specific call */
  toolParameters: Record<string, string | number | boolean>

  /** When the tool call was made */
  timestamp: Date

  /** ID of the user who triggered the tool call */
  userId: string

  /** The active session for the user who triggered the tool call, if the user is currently running this app */
  activeSession: AppSession | null
}

GIVE_APP_CONTROL_OF_TOOL_RESPONSE

The string GIVE_APP_CONTROL_OF_TOOL_RESPONSE is a special string that can be returned by your app to indicate that Mira should not respond to the user, and your app will respond directly.
import {GIVE_APP_CONTROL_OF_TOOL_RESPONSE} from "@mentra/sdk"

export class TodoAppServer extends AppServer {
  protected async onToolCall(toolCall: ToolCall): Promise<string | undefined> {
    const {toolId, activeSession} = toolCall

    // Handle different tool calls
    switch (toolId) {
      case "get_todos": {
        const todoList = userTodos
          .map(todo => `- ${todo.completed ? "✓" : "○"} ${todo.text}${todo.dueDate ? ` (due ${todo.dueDate})` : ""}`)
          .join("\n")

        if (activeSession) {
          // if the user is currently using the app, display the todo list in the app directly
          activeSession.layouts.showTextWall(todoList)
          return GIVE_APP_CONTROL_OF_TOOL_RESPONSE
        } else {
          // if the user is not currently using the app, return the todo list to Mira for Mira to relay
          return `Your todo list:\n${todoList}`
        }
      }
    }
  }
}

Tool Configuration

Tools are defined in the devloper console. Go to console.mentra.glass/apps and edit your App, then look for the “AI Tools” section. AI Tools Section Each tool definition has:
  • id: Unique identifier for the tool
  • description: Human/AI-readable description of what the tool does
  • activationPhrases: Optional comma-separated list of phrases that might trigger this tool (although Mira may also trigger tools based on the context of the conversation)
  • parameters: Optional list of parameters the tool accepts

Parameter Properties

Each parameter definition has:
  • type: Data type of the parameter - "string", "number", or "boolean"
  • description: Human/AI-readable description of the parameter
  • required: Whether the parameter is required
  • enum: Optional comma-separated list of allowed values for string parameters (if specified, Mira will choose one of these values)