SchoolBusTrack MCP by usefulapi

Read pupils, routes, bus positions, trips, boarding lists and incidents in SchoolBusTrack.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
84%
Naming quality
75%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • LOWTool 'schoolbustrack_list_bus_locations' name length outside 3-30 rangein schoolbustrack_list_bus_locations
  • LOWTool 'schoolbustrack_get_bus_location' name length outside 3-30 rangein schoolbustrack_get_bus_location
  • LOWTool 'schoolbustrack_get_trip_manifest' name length outside 3-30 rangein schoolbustrack_get_trip_manifest

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,257Tokens (tool definitions)
~1.4 KBTypical response size
Moderate attention impact (1.76% 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": {
    "schoolbustrack": {
      "url": "https://schoolbustrack.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://schoolbustrack.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (12)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢schoolbustrack_ping

Show which school this key acts for, its name, its scopes and its rate limit. Good first call. SchoolBusTrack API: GET /v1/ping.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢schoolbustrack_list_students(limit, cursor, updatedSince, campusId, classId, ...)

List pupils with their class, campus, route assignment and active flag. Guardian and emergency contact details are never returned. Needs students:read. SchoolBusTrack API: GET /v1/students.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Page size, 1–200 (default 50).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "cursor": {
      "description": "The nextCursor from the previous page.",
      "type": "string"
    },
    "updatedSince": {
      "description": "ISO 8601 instant. Returns records changed at or after it, oldest change first (for syncs).",
      "type": "string"
    },
    "campusId": {
      "description": "Only records of this campus id.",
      "type": "string"
    },
    "classId": {
      "description": "Only pupils in this class id.",
      "type": "string"
    },
    "routeId": {
      "description": "Only pupils assigned to this route id.",
      "type": "string"
    },
    "enrollmentNumber": {
      "description": "Only the pupil with this enrollment number.",
      "type": "string"
    },
    "includeInactive": {
      "description": "Include inactive records (default false).",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢schoolbustrack_get_student(studentId)

Get one pupil by id: class, campus, route assignment and status. Guardian and emergency contact details are never returned. Needs students:read. SchoolBusTrack API: GET /v1/students/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "studentId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "The pupil id (from schoolbustrack_list_students)."
    }
  },
  "required": [
    "studentId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢schoolbustrack_list_routes(limit, cursor, updatedSince, campusId, type, ...)

List bus routes with their type, schedule, stop count, bus and driver. Needs routes:read. SchoolBusTrack API: GET /v1/routes.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Page size, 1–200 (default 50).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "cursor": {
      "description": "The nextCursor from the previous page.",
      "type": "string"
    },
    "updatedSince": {
      "description": "ISO 8601 instant. Returns records changed at or after it, oldest change first (for syncs).",
      "type": "string"
    },
    "campusId": {
      "description": "Only records of this campus id.",
      "type": "string"
    },
    "type": {
      "description": "Only routes of this type.",
      "type": "string",
      "enum": [
        "pickup",
        "dropoff",
        "bidirectional"
      ]
    },
    "code": {
      "description": "Only the route with this code.",
      "type": "string"
    },
    "includeInactive": {
      "description": "Include inactive records (default false).",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢schoolbustrack_get_route(routeId)

Get one route by id, with its ordered stops. Needs routes:read. SchoolBusTrack API: GET /v1/routes/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "routeId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "The route id (from schoolbustrack_list_routes)."
    }
  },
  "required": [
    "routeId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢schoolbustrack_list_buses(limit, cursor, updatedSince, campusId, status, ...)

List buses with registration, seats, status, tracker state and last known location. Needs buses:read. SchoolBusTrack API: GET /v1/buses.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Page size, 1–200 (default 50).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "cursor": {
      "description": "The nextCursor from the previous page.",
      "type": "string"
    },
    "updatedSince": {
      "description": "ISO 8601 instant. Returns records changed at or after it, oldest change first (for syncs).",
      "type": "string"
    },
    "campusId": {
      "description": "Only records of this campus id.",
      "type": "string"
    },
    "status": {
      "description": "Only buses with this status.",
      "type": "string",
      "enum": [
        "active",
        "maintenance",
        "inactive"
      ]
    },
    "registrationNumber": {
      "description": "Only the bus with this registration number.",
      "type": "string"
    },
    "includeInactive": {
      "description": "Include inactive records (default false).",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢schoolbustrack_list_bus_locations

Get the latest position of every bus, with speed, heading and whether the fix is stale. Needs locations:read. SchoolBusTrack API: GET /v1/buses/locations.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢schoolbustrack_get_bus_location(busId)

Get the latest position of one bus by id. Needs locations:read. SchoolBusTrack API: GET /v1/buses/{id}/location.

Input Schema

{
  "type": "object",
  "properties": {
    "busId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "The bus id (from schoolbustrack_list_buses)."
    }
  },
  "required": [
    "busId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢schoolbustrack_list_trips(limit, cursor, updatedSince, date, from, ...)

List scheduled, running and completed trips. Filter by school day or time range, status, route, bus, driver or campus. Needs trips:read. SchoolBusTrack API: GET /v1/trips.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Page size, 1–200 (default 50).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "cursor": {
      "description": "The nextCursor from the previous page.",
      "type": "string"
    },
    "updatedSince": {
      "description": "ISO 8601 instant. Returns records changed at or after it, oldest change first (for syncs).",
      "type": "string"
    },
    "date": {
      "description": "A school-local day: yyyy-mm-dd or today.",
      "type": "string",
      "pattern": "^(today|\\d{4}-\\d{2}-\\d{2})$"
    },
    "from": {
      "description": "ISO 8601 instant, UTC with Z.",
      "type": "string"
    },
    "to": {
      "description": "ISO 8601 instant, UTC with Z.",
      "type": "string"
    },
    "status": {
      "description": "Only trips with this status.",
      "type": "string",
      "enum": [
        "scheduled",
        "in_progress",
        "completed",
        "cancelled"
      ]
    },
    "routeId": {
      "description": "Only trips on this route id.",
      "type": "string"
    },
    "busId": {
      "description": "Only trips of this bus id.",
      "type": "string"
    },
    "driverId": {
      "description": "Only trips of this driver id.",
      "type": "string"
    },
    "campusId": {
      "description": "Only records of this campus id.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢schoolbustrack_get_trip(tripId)

Get one trip by id: status, times, distance, duration, its stops and student count. Needs trips:read. SchoolBusTrack API: GET /v1/trips/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "tripId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "The trip id (from schoolbustrack_list_trips)."
    }
  },
  "required": [
    "tripId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢schoolbustrack_get_trip_manifest(tripId)

Get the boarding list of one trip: each pupil with status and last event, grouped by stop, plus unlisted pupils and counts. Needs trips:read. SchoolBusTrack API: GET /v1/trips/{id}/manifest.

Input Schema

{
  "type": "object",
  "properties": {
    "tripId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "The trip id (from schoolbustrack_list_trips)."
    }
  },
  "required": [
    "tripId"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢schoolbustrack_list_incidents(limit, cursor, updatedSince, status, severity, ...)

List incidents and SOS alerts, newest first, with status, severity, bus, trip and driver. Needs incidents:read. SchoolBusTrack API: GET /v1/incidents.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Page size, 1–200 (default 50).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "cursor": {
      "description": "The nextCursor from the previous page.",
      "type": "string"
    },
    "updatedSince": {
      "description": "ISO 8601 instant. Returns records changed at or after it, oldest change first (for syncs).",
      "type": "string"
    },
    "status": {
      "description": "Only incidents with this status.",
      "type": "string"
    },
    "severity": {
      "description": "Only incidents with this severity.",
      "type": "string"
    },
    "type": {
      "description": "Only incidents of this type.",
      "type": "string"
    },
    "isSos": {
      "description": "true for SOS alerts only, false for the rest.",
      "type": "boolean"
    },
    "busId": {
      "description": "Only incidents on this bus id.",
      "type": "string"
    },
    "tripId": {
      "description": "Only incidents on this trip id.",
      "type": "string"
    },
    "driverId": {
      "description": "Only incidents of this driver id.",
      "type": "string"
    },
    "from": {
      "description": "ISO 8601 instant, UTC with Z.",
      "type": "string"
    },
    "to": {
      "description": "ISO 8601 instant, UTC with Z.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded12 tools