OpenAPI 3.1 description of the BMLT (Basic Meeting List Toolbox) Semantic Interface for the JSON data format.
Rendered docs: https://bmlt-enabled.github.io/bmlt-semantic-openapi/
src/Swagger/— PHP 8 attribute classes that are the source of truth for the spec. Useszircote/swagger-php— same pattern asbmlt-server's admin API documentation.bin/generate.php— calls\OpenApi\Generator::scan()directly so we controlerror_reporting(silences zircote/swagger-php's PHP 8.4/8.5 deprecation noise).bmlt-semantic-openapi.json— the OpenAPI 3.1 spec, generated from the PHP classes. Checked in so consumers can fetch it without running PHP.index.html— a Swagger UI loader that renders the spec. This is what GitHub Pages serves.Makefile— entry point for all the build/lint/serve tasks (see below).composer.json— declares thezircote/swagger-phpdependency.redocly.yaml— lint configuration for@redocly/cli.
make help # list all targets
make composer # install PHP dependencies (PROD=1 for --no-dev)
make generate # scan src/ and write bmlt-semantic-openapi.json
make lint # validate the spec with @redocly/cli
make check # generate + lint
make serve # serve Swagger UI locally on PORT (default 8765)
make clean # remove vendor/ and composer.lockAfter editing any PHP attribute, run make generate (or make check) and commit the resulting JSON.
- Covers the JSON data format only (not JSONP, TSML, or CSV).
- All 8 JSON-supporting
switcheroperations:GetSearchResults,GetFormats,GetServiceBodies,GetChanges,GetFieldKeys,GetFieldValues,GetServerInfo,GetCoverageArea. - Includes aggregator-mode parameters (
root_server_ids) since the defaultservers:entry points at https://aggregator.bmltenabled.org/main_server. GetNAWSDumpis intentionally omitted (CSV-only).
The BMLT semantic interface has a few shapes that OpenAPI can't express precisely. These are documented per-operation in the spec, but they're worth knowing up front:
- Single endpoint, switcher-dispatched. Every operation hits
/client_interface/json/with aswitcher=query parameter. OpenAPI keys operations by URL + HTTP method, so this spec uses one path entry per switcher with the query string baked into the path key. Swagger UI, Redoc, and openapi-generator handle this cleanly; strict linters flag it (seeredocly.yaml). - PHP
[]array params. Repeatable array parameters use trailing[]in their names (e.g.weekdays[]=2&weekdays[]=3). The spec exposes both forms — the scalar CSV (weekdays) and the bracketed array (weekdays[]). - Sign-as-operator. Filters such as
formats,services,weekdays,venue_types,meeting_ids,root_server_ids, andformat_idsuse positive values to include and negative values to exclude. JSON Schema can't enforce that distinction; it's documented per parameter. - Switcher × format compatibility matrix. Some switchers are valid only for certain formats (TSML only for
GetSearchResults, CSV only forGetNAWSDump). Not expressible in the schema. - Aggregator-mode constraints. In aggregator mode,
GetSearchResultsrequires at least one filter parameter or the response is an empty array. OpenAPI can't express "one-of-N required". - Empty-array errors. Many endpoints return
[]for invalid input rather than a4xxresponse body.
Generated from the upstream Markdown reference at bmlt-enabled/bmlt-mcp-server.
python3 -m http.server 8000
# then open http://localhost:8000/MIT