{
  "protocolVersion": "0.3.0",
  "name": "Eleanor",
  "description": "AI dispatch agent for field service businesses. Eleanor handles the full booking lifecycle — availability checks, quoting, scheduling, invoicing, customer management, and fleet coordination — via voice, chat, and machine-to-machine protocols. 47 MCP tools across customer and operator tiers. LLM-powered 13-intent classifier with streaming support.",
  "url": "https://www.dispatchnode.com/api/a2a",
  "version": "3.0.0",
  "supportedInterfaces": [
    {
      "url": "https://www.dispatchnode.com/api/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "0.3"
    }
  ],
  "interfaces": [
    {
      "url": "https://www.dispatchnode.com/api/a2a",
      "transport": "http-jsonrpc"
    }
  ],
  "provider": {
    "organization": "DispatchNode",
    "url": "https://www.dispatchnode.com"
  },
  "capabilities": {
    "streaming": true,
    "pushNotifications": false,
    "stateTransitionHistory": false,
    "extensions": [
      {
        "uri": "https://github.com/google-agentic-commerce/ap2/tree/v0.1",
        "description": "Eleanor can collect deposits and settle field-service bookings via the Agent Payments Protocol (AP2).",
        "required": true,
        "params": {
          "roles": ["merchant"],
          "protocol": "ap2",
          "version": "0.1"
        }
      }
    ]
  },
  "capabilitiesExtensions": {
    "ap2": {
      "roles": ["merchant"],
      "uri": "https://github.com/google-agentic-commerce/ap2/tree/v0.1"
    }
  },
  "defaultInputModes": ["text/plain"],
  "defaultOutputModes": ["application/json", "text/plain"],
  "skills": [
    {
      "id": "book-service",
      "name": "Book Service",
      "description": "Book a field service appointment. Creates a job record with scheduling, service type, pricing, and contact information. Supports voice, widget, SMS, and machine-to-machine intake.",
      "tags": ["booking", "scheduling", "field-service", "dispatch"],
      "inputModes": ["text/plain"],
      "outputModes": ["application/json"],
      "examples": [
        "Book a grease trap pumping for tomorrow at 123 Main St",
        "Schedule a standard unit delivery for Friday morning",
        "I need a technician at my restaurant ASAP"
      ]
    },
    {
      "id": "check-availability",
      "name": "Check Availability",
      "description": "Check available time slots for a given date range based on calendar, existing bookings, fleet capacity, and transit buffers.",
      "tags": ["availability", "calendar", "scheduling"],
      "inputModes": ["text/plain"],
      "outputModes": ["application/json"],
      "examples": [
        "What slots are open next Tuesday?",
        "Do you have availability this weekend for a delivery?",
        "Check if Friday afternoon works for a 2-hour service"
      ]
    },
    {
      "id": "get-pricing",
      "name": "Get Pricing",
      "description": "Retrieve pricing and quotes for field services. Returns rate cards, estimated costs, and service-specific pricing details.",
      "tags": ["pricing", "quotes", "cost", "finance"],
      "inputModes": ["text/plain"],
      "outputModes": ["application/json"],
      "examples": [
        "How much does a grease trap pumping cost?",
        "Get a quote for weekly portable restroom service",
        "What are your rates for emergency calls?"
      ]
    },
    {
      "id": "cancel-job",
      "name": "Cancel Job",
      "description": "Cancel an existing appointment or job. Handles cancellation with reason tracking and notification to affected parties.",
      "tags": ["cancellation", "scheduling", "jobs"],
      "inputModes": ["text/plain"],
      "outputModes": ["application/json"],
      "examples": [
        "Cancel my appointment for tomorrow",
        "I need to cancel the job for 555-1234",
        "Please cancel booking #abc123"
      ]
    },
    {
      "id": "reschedule-job",
      "name": "Reschedule Job",
      "description": "Reschedule or move an existing appointment to a new date and time. Checks availability before confirming the change.",
      "tags": ["rescheduling", "scheduling", "jobs"],
      "inputModes": ["text/plain"],
      "outputModes": ["application/json"],
      "examples": [
        "Move my appointment to next Wednesday at 10 AM",
        "Reschedule the job for 555-1234 to Friday",
        "Can I change my service time to afternoon?"
      ]
    },
    {
      "id": "get-job-status",
      "name": "Get Job Status",
      "description": "Check the current status of a job or appointment. Returns scheduling state, assigned crew, ETA, and completion details.",
      "tags": ["status", "tracking", "jobs"],
      "inputModes": ["text/plain"],
      "outputModes": ["application/json"],
      "examples": [
        "What is the status of my appointment?",
        "Where is my technician?",
        "ETA for the truck arriving at my location?"
      ]
    },
    {
      "id": "list-jobs",
      "name": "List Jobs",
      "description": "List and search jobs by status, date, customer, or other filters. Returns paginated job records with key details.",
      "tags": ["jobs", "search", "listing", "operations"],
      "inputModes": ["text/plain"],
      "outputModes": ["application/json"],
      "examples": [
        "Show me all jobs for today",
        "List pending jobs for this week",
        "What jobs are assigned to Tony?"
      ]
    },
    {
      "id": "manage-invoices",
      "name": "Manage Invoices",
      "description": "Create, send, and track invoices for completed jobs. Supports line items, payment links, and email delivery with opt-out compliance.",
      "tags": ["invoicing", "payments", "billing", "finance"],
      "inputModes": ["text/plain"],
      "outputModes": ["application/json"],
      "examples": [
        "Create an invoice for job #abc123",
        "Send the outstanding invoice to the customer",
        "List all unpaid invoices this month"
      ]
    },
    {
      "id": "manage-customers",
      "name": "Manage Customers",
      "description": "Create, update, and search customer records. Manage contact information, service history, and account details.",
      "tags": ["customers", "crm", "contacts", "management"],
      "inputModes": ["text/plain"],
      "outputModes": ["application/json"],
      "examples": [
        "Add a new customer: John Smith, 555-0123",
        "Look up the customer with phone 555-1234",
        "Update the email for customer Jane Doe"
      ]
    },
    {
      "id": "dispatch-crew",
      "name": "Dispatch Crew",
      "description": "Dispatch the nearest available crew to a service location. Uses fleet state, driver schedules, route impact analysis, and asset availability to find the optimal assignment.",
      "tags": ["dispatch", "routing", "fleet", "logistics", "assignment"],
      "inputModes": ["text/plain"],
      "outputModes": ["application/json"],
      "examples": [
        "Send a truck to the construction site at 5th and Broadway",
        "Who is the closest available driver to 78704?",
        "Assign Tony to the emergency call at Oak Hill"
      ]
    },
    {
      "id": "fleet-operations",
      "name": "Fleet Operations",
      "description": "Monitor fleet health, asset inventory, driver schedules, and route impact. Provides real-time operational intelligence for dispatch decisions.",
      "tags": ["fleet", "assets", "operations", "monitoring", "logistics"],
      "inputModes": ["text/plain"],
      "outputModes": ["application/json"],
      "examples": [
        "How many standard units are available this week?",
        "Show me Tony's schedule for today",
        "What is our fleet utilization rate?"
      ]
    },
    {
      "id": "calculate-roi",
      "name": "Calculate ROI",
      "description": "Calculate Total Cost of Ownership and savings when migrating from legacy dispatch software (ServiceTitan, Jobber, HouseCall Pro, etc.) to AI-native dispatch automation.",
      "tags": ["finance", "roi", "tco", "comparison", "migration"],
      "inputModes": ["text/plain"],
      "outputModes": ["application/json"],
      "examples": [
        "Compare DispatchNode vs ServiceTitan for a 10-truck fleet",
        "What would I save switching from Jobber with 5 trucks?",
        "Calculate ROI for a plumbing company with 15 technicians"
      ]
    },
    {
      "id": "get-business-info",
      "name": "Get Business Info",
      "description": "Retrieve business information including hours of operation, service area, location, and contact details. Default handler for general inquiries.",
      "tags": ["info", "business", "hours", "contact", "general"],
      "inputModes": ["text/plain"],
      "outputModes": ["application/json"],
      "examples": [
        "What are your business hours?",
        "Where are you located?",
        "How can I contact support?"
      ]
    }
  ],
  "authentication": {
    "schemes": ["bearer"],
    "credentials": {
      "description": "Operator API key (dnk_...) for full access. Customer tier available without authentication via X-Org-Slug header."
    }
  },
  "documentationUrl": "https://www.dispatchnode.com/docs/mcp",
  "supportedProtocols": ["a2a", "mcp"],
  "extensions": [
    {
      "uri": "https://github.com/google-agentic-commerce/ap2/tree/v0.1",
      "description": "Eleanor can collect deposits and settle field-service bookings via the Agent Payments Protocol.",
      "required": true,
      "params": {
        "roles": ["merchant"]
      }
    }
  ]
}