Collected while building Dhaka Emergency Finder (October 2026). Every point below comes from a live call that is recorded in this repository: benchmark, manual review, agent session, AI log.
/v1 vs /v2), exact category keys, and the x-api-key header from
securitySchemes.{lat, lon} objects. This removes the coordinate-order bug class completely (see
OpenAPI #1 below)."radius" is not allowed and
geometry_scope "steps" requires include_instructions to be true were each fixed by the agent in one retry.traffic=approximated answers the core question of the project in one request.waypoints are lat,lon, while Places filter/bias and
Route Matrix location are lon,lat. This is the most likely bug in AI-generated code.
Suggestion: a one-line “coordinate order” note at the top of each spec’s description, and examples that
use the same point everywhere.full_match. “Gulshan Circle 1, Dhaka” → Gulshan 2 Circle;
“Shapla Chattar, Motijheel, Dhaka” → a place in Khilkhet (about 15 km away); “Bangladesh University of
Engineering and Technology” → “Polygon Technology Ltd.” All three had match_type: full_match, so a
client cannot detect them.
Suggestion: penalise matches on a single generic token (“Technology”, “Old”, “BUET”) for landmark queries.result_type: city,
match_type: match_by_city_or_disrict, confidence 0.5) as the only result. It looks like a normal answer.
Suggestion: document this case prominently in the Forward Geocoding spec (“check rank.match_type before
using the result”).match_by_city_or_disrict (should be “district”). Clients have to match the
misspelling. Fixing it now would need a compatibility alias.R/A (Residential Area) is very common in Dhaka addresses.healthcare.hospital is, by its name, a diagnostic centre or an eye hospital. There is no Places condition
for OpenStreetMap emergency=yes, and emergency.emergency_ward_entrance returned 0 results within 15 km of
central Dhaka. Suggestion: expose emergency=yes/no on hospitals as a condition (for example
emergency_department.yes).Near-duplicate places. “radda” and “RADDA” (about 5 m apart) are both returned for Mirpur 10. Dhaka Medical
College Hospital comes back twice: as a point named “Dhaka Medical College Hospital, Government hospital, Secretariat Rd,
Dhaka” (many Dhaka points have the address appended to the name) and as the campus outline named “ঢাকা মেডিক্যাল কলেজ
হাসপাতাল” with name:en. Both are OpenStreetMap data, but an option to merge near-identical POIs would help
every client. Clients also have to read datasource.raw["name:en"] themselves to show an English name.
ধানমন্ডি and মিরপুর ১০ (with
filter=countrycode:bd, with lang=bn or en, or with no filter) gave 0 results, while /geocode/search with the same text
found Dhanmondi. Only a longer phrase (ধানমন্ডি ২৭) gave one result. The web app works around it by falling back to
search for Bangla input.Key restrictions do not reject requests without the header. A key limited to Origin
^https://abdullah-atif\.github\.io$ and a matching Referer returned 401 for another site’s Origin, but
200 for a plain request that sent neither header (tested with curl). So a browser key copied from a public
page still works from any script or server. Suggestion: an option such as “require a matching Origin or
Referer” for keys meant only for the browser.
Most “hospitals” in Dhaka carry no information about emergency care, and emergency=yes is often wrong.
Of 447 places in healthcare.hospital inside Dhaka city, 40 have an emergency tag, and 4 of the 35
emergency=yes tags sit on a homeo pharmacy, a dental clinic, an outpatient unit and a diagnostic centre. Our
name-based classifier (evaluation) labels 62 of the 447 as not an emergency facility
(dental 10, diagnostic 7, pharmacy 7, chamber 6, outpatient 6, …). Suggestion: a Places condition or category
split for facilities with an emergency department, and moving obvious non-hospitals (healthcare=laboratory,
names with “Diagnostic”/”Pharmacy”) out of healthcare.hospital.
direction=to (reverse)
option. The rest worked very well: 26 isolines answered synchronously in about 2 to 3 s each, range=600,900
returns both areas in one request, and the cost (1 credit per 5 minutes) is easy to plan for.part-of at a point in Dhaka returned
the Dhaka Metropolitan polygon (OSM admin_level 6) with a simplified geometry option, which is exactly what a
coverage grid needs. Small surprise: name stays in Bangla (“ঢাকা মহানগর”) even with lang=en; the English name
is only in name_international.en (“Dhaka Metropolitan”). The docs could say which field lang affects.search_places returns points only (one result had
building: {"type": "mosque"}, but no geometry), so measure_geometry has nothing to measure. An agent cannot
answer “how big is this place?” with MCP alone. The REST Place Details API can.
Suggestion: a get_place_details tool, or an optional include_geometry on search_places.traffic defaults to free_flow on both calculate_route_matrix and calculate_route. The agent passed
approximated to the matrix but forgot it on the route, and got 33 s vs. 120 s for the same trip.
Suggestion: mention in both tool descriptions that the matrix and route calls should share mode and traffic.geometry_scope: "steps" silently depends on include_instructions. The error is clear, but the
dependency could be expressed in the schema description, or include_instructions could default to true
when steps is requested.search_places drops the OSM tags. Its results include datasource.sourcename but not
datasource.raw, so an agent cannot see emergency, healthcare:speciality, opening_hours or name:en/name:bn,
which the REST Places API returns. For emergency questions these tags matter; exposing them (or a few of them)
would let agents do what our CLI does.geocode_address returns rank.match_type and confidence. This is good. The tool description could tell
agents to check them before using the result, because a city-level fallback otherwise looks like a valid
answer (see OpenAPI #3).