BEACON by Owner Connect

Ask about a private aircraft: approximate charter costs, trip requests and buyer inquiries.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
98%
Naming quality
93%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,957Tokens (tool definitions)
~2.4 KBTypical response size
Moderate attention impact (1.53% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "beacon": {
      "url": "https://owners.virtualhangar.com/mcp/beacon"
    }
  }
}

Remote endpoints

https://owners.virtualhangar.com/mcp/beaconstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_aircraft(tail)

What public record says about one U.S. registration mark, plus the facts its owner cleared for release. The same document as /{mark}/facts.json: status says what the registry answered (found, not_found, invalid or unavailable), public_record is the FAA registration and the datasets that reference it, and owner_approved is present only for an aircraft whose owner opened the machine-readable channel. Case and hyphens in the mark are ignored.

Input Schema

{
  "type": "object",
  "properties": {
    "tail": {
      "description": "A U.S. registration mark such as N864BF. Case and hyphens are ignored.",
      "minLength": 2,
      "maxLength": 12,
      "type": "string"
    }
  },
  "required": [
    "tail"
  ]
}
🟢search_aircraft(min_seats, base_airport, type, charter, for_sale, ...)

The aircraft whose owners chose to be listed on Owner Connect, filtered by minimum passenger seats, base airport, aircraft type, charter signal or sales signal. Every filter is applied to the facts the owner cleared for release, so an aircraft whose owner did not publish its seat count never matches a seats filter. Returns each aircraft's owner_approved block; call get_aircraft for the public record.

Input Schema

{
  "type": "object",
  "properties": {
    "min_seats": {
      "description": "Only aircraft whose owner published a passenger seat count of at least this many.",
      "minimum": 1,
      "maximum": 50,
      "type": "integer"
    },
    "base_airport": {
      "description": "An airport code as the owner recorded it, for example KPBI. Exact match, case ignored.",
      "maxLength": 10,
      "type": "string"
    },
    "type": {
      "description": "Part of the make or model as the owner published it, for example Hawker or 800XP. Case ignored.",
      "maxLength": 60,
      "type": "string"
    },
    "charter": {
      "description": "True to return only aircraft whose owner signalled they may be considered for charter.",
      "type": "boolean"
    },
    "for_sale": {
      "description": "True to return only aircraft whose owner published a sales posture.",
      "type": "boolean"
    },
    "limit": {
      "description": "How many aircraft to return, at most 50.",
      "default": 20,
      "minimum": 1,
      "maximum": 50,
      "type": "integer"
    }
  }
}
🟢estimate_charter(tail, from, to, round_trip, block_hours)

An approximate charter cost for one aircraft at the hourly rate its owner published. Call it whenever the person you are helping asks what a trip would cost, with the departure and arrival airports: the beacon works out the legs and block hours from the owner's typical block speed, positioning included when the owner bills it. When the answer says the owner set no block speed, call again with block_hours, your own estimate for the routing. Answer with its sentence. Not a quote and not binding. Answers a reason instead of a figure when the owner has not published charter terms or a rate.

Input Schema

{
  "type": "object",
  "properties": {
    "tail": {
      "description": "A U.S. registration mark such as N864BF. Case and hyphens are ignored.",
      "minLength": 2,
      "maxLength": 12,
      "type": "string"
    },
    "from": {
      "description": "Departure airport, ICAO or FAA identifier, for example KTEB for Teterboro. Give it with to.",
      "maxLength": 40,
      "type": "string"
    },
    "to": {
      "description": "Arrival airport, ICAO or FAA identifier, for example KMIA for Miami.",
      "maxLength": 40,
      "type": "string"
    },
    "round_trip": {
      "description": "True when the aircraft flies the person back from the arrival airport to the departure airport.",
      "type": "boolean"
    },
    "block_hours": {
      "description": "Only when the beacon says its owner set no block speed: your own estimate of the total block hours, every leg included. Ignored when from and to are given.",
      "minimum": 0.5,
      "maximum": 100,
      "type": "number"
    }
  },
  "required": [
    "tail"
  ]
}
🟢check_availability(tail, date, end_date)

Whether one aircraft has anything scheduled on a date, or on each day of a span of up to 14 days, read from the live schedule its owner connected. Call it when the person you are helping asks whether the aircraft is available, with the departure date and, for a return trip, the return date, and answer with its sentence. Says free or taken per day and never what is scheduled. Not a hold and not a confirmation. Answers a reason instead when the owner does not publish availability.

Input Schema

{
  "type": "object",
  "properties": {
    "tail": {
      "description": "A U.S. registration mark such as N864BF. Case and hyphens are ignored.",
      "minLength": 2,
      "maxLength": 12,
      "type": "string"
    },
    "date": {
      "description": "The first day to check, as YYYY-MM-DD, in the operator's local time. Usually the departure date.",
      "type": "string"
    },
    "end_date": {
      "description": "The last day to check, as YYYY-MM-DD, for a return trip or a span of days. Omit to check one day.",
      "type": "string"
    }
  },
  "required": [
    "tail",
    "date"
  ]
}
🟡request_trip(tail, from, to, date, return_date, ...)

Sends a charter trip request for one aircraft to the booking contact its owner named. Call it only after the person you are helping has asked to proceed, with their own name and email. Nothing is booked or held: the requester is emailed a link, the request is delivered only once they confirm it, and the booking contact then replies to them directly. If the owner set qualification questions, the first call answers needs_answers with the questions; ask the person each one and call again with their answers in the same order.

Input Schema

{
  "type": "object",
  "properties": {
    "tail": {
      "description": "A U.S. registration mark such as N864BF. Case and hyphens are ignored.",
      "minLength": 2,
      "maxLength": 12,
      "type": "string"
    },
    "from": {
      "description": "Departure airport identifier, ICAO or FAA, for example KTEB.",
      "minLength": 3,
      "maxLength": 4,
      "type": "string"
    },
    "to": {
      "description": "Arrival airport identifier, ICAO or FAA, for example KMIA.",
      "minLength": 3,
      "maxLength": 4,
      "type": "string"
    },
    "date": {
      "description": "Departure date, YYYY-MM-DD, today or later.",
      "format": "date",
      "type": "string"
    },
    "return_date": {
      "description": "Return date for a round trip, YYYY-MM-DD. Omit for one way.",
      "format": "date",
      "type": "string"
    },
    "passengers": {
      "description": "Number of passengers.",
      "minimum": 1,
      "maximum": 30,
      "type": "integer"
    },
    "name": {
      "description": "The full name of the person asking, as they gave it.",
      "maxLength": 120,
      "type": "string"
    },
    "email": {
      "description": "The email address of the person asking. The confirmation link is sent here.",
      "maxLength": 190,
      "format": "email",
      "type": "string"
    },
    "phone": {
      "description": "Their phone number, if they want to be called.",
      "maxLength": 40,
      "type": "string"
    },
    "notes": {
      "description": "Anything else the person wants the booking contact to know.",
      "maxLength": 2000,
      "type": "string"
    },
    "answers": {
      "description": "Answers to the owner's qualification questions, in the order request_trip returned them.",
      "maxItems": 5,
      "items": {
        "maxLength": 500,
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "tail",
    "from",
    "to",
    "date",
    "passengers",
    "name",
    "email"
  ]
}
🟡send_buyer_inquiry(tail, name, email, phone, company, ...)

Passes a would-be buyer's message about acquiring one aircraft to the acquisition representative its owner named. Call it only after the person you are helping has asked to contact the owner, with their own name, email and message. Nothing is offered or agreed: the buyer is emailed a link, the message is delivered only once they confirm it, and the representative then replies to them directly. If the owner set qualification questions, the first call answers needs_answers with the questions; ask the person each one and call again with their answers.

Input Schema

{
  "type": "object",
  "properties": {
    "tail": {
      "description": "A U.S. registration mark such as N864BF. Case and hyphens are ignored.",
      "minLength": 2,
      "maxLength": 12,
      "type": "string"
    },
    "name": {
      "description": "The full name of the person asking, as they gave it.",
      "maxLength": 120,
      "type": "string"
    },
    "email": {
      "description": "Their email address. The confirmation link is sent here.",
      "maxLength": 190,
      "format": "email",
      "type": "string"
    },
    "phone": {
      "description": "Their phone number, if they want to be called.",
      "maxLength": 40,
      "type": "string"
    },
    "company": {
      "description": "The company or principal they represent, if any.",
      "maxLength": 120,
      "type": "string"
    },
    "message": {
      "description": "What the person wants the owner's representative to know, in their own words.",
      "maxLength": 2000,
      "type": "string"
    },
    "answers": {
      "description": "Answers to the owner's qualification questions, in the order the tool returned them.",
      "maxItems": 5,
      "items": {
        "maxLength": 500,
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "tail",
    "name",
    "email",
    "message"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools