Skip to main content
Glama

check_in

Complete online check-in for Delta flights using confirmation number and passenger last name. Returns boarding pass information after successful check-in, which opens 24 hours before departure.

Instructions

Complete online check-in for an upcoming Delta flight. Check-in opens 24 hours before departure. Returns boarding pass info on success.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
confirmationNumberYesDelta booking confirmation number
lastNameYesPassenger last name (as it appears on the ticket)

Implementation Reference

  • The main checkIn function that executes the tool logic - navigates to Delta's check-in page, fills in confirmation number and last name, submits the form, and returns the check-in result.
    export async function checkIn(params: {
      confirmationNumber: string;
      lastName: string;
    }): Promise<CheckInResult> {
      const { page } = await initBrowser();
    
      await page.goto(`${DELTA_BASE_URL}/us/en/check-in/overview`, {
        waitUntil: "domcontentloaded",
        timeout: DEFAULT_TIMEOUT,
      });
      await randomDelay(1500, 3000);
    
      try {
        // Fill in confirmation number
        await page.fill(
          'input[name*="confirmation"], input[id*="confirmation"], [data-testid*="confirmation"]',
          params.confirmationNumber,
          { timeout: 10000 }
        );
        await randomDelay(300, 600);
    
        // Fill in last name
        await page.fill(
          'input[name*="lastName"], input[name*="last-name"], input[id*="lastName"], [data-testid*="last-name"]',
          params.lastName,
          { timeout: 5000 }
        );
        await randomDelay(300, 600);
    
        // Submit
        await page.click(
          'button:has-text("Check In"), button[type="submit"], [data-testid*="check-in-btn"]',
          { timeout: 5000 }
        );
        await randomDelay(3000, 6000);
    
        // Check for success
        const success = await page.evaluate(() => {
          const body = document.body.innerText;
          return (
            body.includes("Check-in Complete") ||
            body.includes("Boarding Pass") ||
            body.includes("You're checked in")
          );
        });
    
        if (success) {
          return {
            success: true,
            message: "Check-in successful! Use get_boarding_pass to retrieve your boarding pass.",
            confirmationNumber: params.confirmationNumber,
          };
        }
    
        const errorMsg = await page.evaluate(() => {
          const errorEl = document.querySelector(
            '[class*="error"], [role="alert"], [class*="alert"]'
          );
          return errorEl?.textContent?.trim();
        });
    
        return {
          success: false,
          message: errorMsg || "Check-in could not be completed. Please try again or check in at the airport.",
        };
      } catch (error) {
        const msg = error instanceof Error ? error.message : String(error);
        return {
          success: false,
          message: `Check-in failed: ${msg}. Please try check-in at delta.com or at the airport kiosk.`,
        };
      }
    }
  • CheckInResult interface defining the output schema for the check_in tool with success status, message, boarding passes, and confirmation number.
    export interface CheckInResult {
      success: boolean;
      message: string;
      boardingPasses?: BoardingPass[];
      confirmationNumber?: string;
    }
  • src/index.ts:279-296 (registration)
    Tool registration defining 'check_in' with its name, description, and inputSchema specifying confirmationNumber and lastName as required parameters.
    {
      name: "check_in",
      description:
        "Complete online check-in for an upcoming Delta flight. Check-in opens 24 hours before departure. Returns boarding pass info on success.",
      inputSchema: {
        type: "object",
        properties: {
          confirmationNumber: {
            type: "string",
            description: "Delta booking confirmation number",
          },
          lastName: {
            type: "string",
            description: "Passenger last name (as it appears on the ticket)",
          },
        },
        required: ["confirmationNumber", "lastName"],
      },
  • Case handler for 'check_in' tool that extracts confirmationNumber and lastName from args, calls the checkIn function from browser.ts, and returns formatted JSON response.
    case "check_in": {
      const { confirmationNumber, lastName } = args as {
        confirmationNumber: string;
        lastName: string;
      };
    
      const result = await checkIn({ confirmationNumber, lastName });
    
      return {
        content: [
          {
            type: "text",
            text: JSON.stringify(
              {
                success: result.success,
                message: result.message,
                boardingPasses: result.boardingPasses,
                note: result.success
                  ? "Check-in complete. Use get_boarding_pass to retrieve your digital boarding pass."
                  : undefined,
              },
              null,
              2
            ),
          },
        ],
      };
    }
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses key behavioral traits: timing constraint (24-hour window) and success outcome (boarding pass info). However, it lacks details on error conditions, authentication requirements, rate limits, or whether this is a mutating operation (implied but not stated).

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?

Two sentences with zero waste: first states purpose and timing, second states outcome. Front-loaded with essential information, appropriately sized for a simple tool with good schema coverage.

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

Completeness4/5

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

Given 2 parameters with full schema coverage and no output schema, the description provides good context: purpose, timing, and success outcome. However, as a mutation tool with no annotations, it should ideally mention authentication needs or error scenarios for full completeness.

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 fully documents both parameters. The description adds no additional parameter semantics beyond what's in the schema (e.g., no format examples or validation rules). Baseline 3 is appropriate when schema does all the work.

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

Purpose5/5

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

The description clearly states the specific action ('Complete online check-in'), target resource ('for an upcoming Delta flight'), and outcome ('Returns boarding pass info on success'). It distinguishes from siblings like 'get_boarding_pass' (which retrieves without checking in) and 'manage_booking' (broader scope).

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

Usage Guidelines4/5

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

The description provides clear context on when to use ('Check-in opens 24 hours before departure'), which helps timing decisions. However, it doesn't explicitly state when NOT to use this tool versus alternatives like 'get_booking' for pre-check-in info or 'manage_booking' for other modifications.

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/markswendsen-code/mcp-delta'

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