MCP server providing geospatial tools for Points of Interest (POIs) in Sri Lanka, including spatial search, semantic search, administrative area lookup, and business density analysis
This is a well-structured geo-spatial tool suite with consistent naming, clear descriptions, and complete input schemas across all 12 tools. All tools follow verb_noun naming convention (find_, get_, search_, list_, validate_), each parameter has both type and description, and coordinate bounds are consistently documented (5.85 - 9.9 lat, 79.5 - 81.9 lng). Output schemas are not explicitly visible in the source, which prevents this from reaching 80+. Error handling guidance is absent, tools don't document recovery paths or retryable vs. fatal failures. The server demonstrates strong adherence to Arcade pattern:tool and pattern:constrained-input (radius limits, coordinate bounds, result limits all explicitly declared), but lacks pattern:recovery-guide and pattern:error-classification documentation.
Find agricultural landuse zones near a point.
Find commercial businesses (shops, offices, etc.) near a point.
Find Points of Interest near a coordinate within Sri Lanka.
Find universities and colleges near a point.
Reverse-geocode coordinates to Sri Lanka administrative area.
Get business breakdown by category for a radius around a point.
Output schemas not documented in visible source code. Tool descriptions state what is returned (e.g., 'Points of Interest', 'full details') but JSON Schema output structure is not declared. LLMs cannot plan downstream calls or extract specific fields without knowing the response structure.
No error handling guidance. Tool descriptions do not indicate which errors are retryable, what actions the LLM should take on failure, or what invalid inputs will produce. Example: 'poi_id' in get_poi_details accepts format like 'n12345678' but no error message tells the LLM what happens if the ID doesn't exist.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 65 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Return pre-computed category statistics.
Get full details for a single Point of Interest by its OSM-prefixed ID.
List all category/subcategory combinations with POI counts.
Calculate straight-line distance and bearing between two POIs.
Hybrid semantic + spatial search for POIs using vector embeddings.
Check if coordinates fall within Sri Lanka's bounding box. Use this before any spatial query to avoid out-of-bounds errors.
Missing dependency hints. search_pois uses 'lat', 'lng' as optional spatial filters but does not document whether both must be provided together. find_nearby and similar tools require coordinates; search_pois makes them optional. Tool descriptions should clarify when coordinates are required vs. optional and guide the LLM on which tool to use for each intent.
Pagination not explicit for list-returning tools. find_nearby, search_pois, find_universities, find_agricultural_zones, and find_businesses_near all have 'limit' params but descriptions do not state whether results are sorted, whether ordering is deterministic, or whether repeated calls with same limit will always return the same items. For tools returning 'max 100' items, LLMs cannot reliably paginate.
Description length for some tools is at lower bound. get_coverage_stats ('Return pre-computed category statistics.'), list_categories ('List all category/subcategory combinations with POI counts.'), and get_administrative_area ('Reverse-geocode coordinates to Sri Lanka administrative area.') are under 80 characters and lack context about when to call them vs. alternative tools or what structure they return.