Open Emirates Intelligence
The Open Emirates Intelligence server provides secured, source-cited access to official UAE open government data, with built-in PII redaction and SSRF protection.
List all sources (
uae_sources_list): Enumerate every registered official UAE open-data source and its metadata.Get source details (
uae_source_get): Retrieve full metadata for a specific source by ID.Check source health (
uae_source_health): Run a live, timeout-bounded health probe on a source to verify it is reachable.Fetch records (
uae_source_records): Retrieve live records with automatic PII (phone/email) redaction and source citations. Supports optional keyword querying and result limits.Market snapshot (
uae_market_snapshot): Generate aggregated counts by emirate, area, or product for a given topic (default: industry).Dashboard summary (
uae_dashboard_summary): Run concurrent, cached health checks across all registered sources for a fast ecosystem-wide overview.Add custom sources (
uae_source_add_metadata): Register a new metadata-only source into the local registry. Requires a write token; disabled by default if none is set.
Deployment & Access: Supports stdio and HTTP transports. Use the public hosted instance at https://uaemcp.zad.tools or self-host via npm, Docker, or from source. All tools are also mirrored as REST endpoints under /api/v1/ with interactive Swagger documentation.
Provides tools for discovering datasets and fetching records from ArcGIS portals hosting UAE open data.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Open Emirates Intelligenceshow me the latest real estate market snapshot"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
A standalone MCP server that gives any MCP client (Claude Desktop, Claude Code, Cursor) source-cited access to official UAE open data — with direct-contact PII redacted, every server-side fetch SSRF-guarded, and both stdio and HTTP transports in one package.
It is self-contained: no dependency on any private or sibling service. Ships in two
flavors at feature parity — a Python implementation (this directory) and a
TypeScript / npm port (ts/), published as
uaemcp (v0.2.0). Both expose the same
11 MCP tools, resources, and prompts.
Two ways to use it
Open source under the MIT license — use the instance we host, or run your own.
1. Use our hosted instance — zero setup
A public instance is live at https://uaemcp.zad.tools. Point any MCP client at its endpoint — nothing to install:
{
"mcpServers": {
"uae-intelligence": {
"type": "http",
"url": "https://uaemcp.zad.tools/mcp"
}
}
}Or just open the dashboard: https://uaemcp.zad.tools
2. Self-host it — run your own, anywhere
npm, no install:
npx uaemcp(stdio) ·npx uaemcp http(HTTP at/mcp)Docker:
docker build -t uaemcp . && docker run -p 8080:8080 uaemcp uaemcp httpFrom source: clone this repo (Python below, or the TypeScript port in
ts/)
Self-hosting gives you full control: add your own sources, set a write token, and keep every fetch on your own infrastructure.
Related MCP server: io.github.raheb77/saudi-open-data-mcp
Quickstart
Fastest — via npm (no install)
npx uaemcp # stdio MCP server
npx uaemcp http # Streamable-HTTP server at /mcpLatest release: v0.2.0 — published to npm with provenance via GitHub Actions OIDC (no tokens).
npx uaemcpalways fetches it.
Local (stdio) — for an MCP client
The published npm package is the easiest way to run it in a client:
{
"mcpServers": {
"uae-intelligence": { "command": "npx", "args": ["-y", "uaemcp"] }
}
}To run the Python implementation from source instead:
pip install -e .
uaemcp stdioRemote (HTTP) — landing page + REST + MCP endpoint
uaemcp http --host 0.0.0.0 --port 8080Landing page:
http://localhost:8080/REST API:
http://localhost:8080/api/v1/...— full API reference → APIs.mdMCP (Streamable):
http://localhost:8080/mcpObservability:
/health·/ready·/metrics(Prometheus) — plus cheap/healthz,/readyz
Showcase
The hosted dashboard is bilingual (EN / العربية) and styled with the official Dubai Font:
Interactive API docs — Dubai-Font-themed Swagger UI at /docs:
Tools
Tool | Kind | Description |
| read | List every registered official source |
| read | Full metadata for one source |
| read | Live, timeout-bounded health probe |
| read | Discover datasets inside a portal (CKAN/ODS/ArcGIS) |
| read | Live, redacted, cited records (per dataset) |
| read | Federated bilingual search across the catalog |
| read | Spatially-filtered records as GeoJSON (maps) |
| read | group_by + count/sum/avg/min/max |
| read | Counts by emirate / area / product |
| read | Concurrent, cached health across all sources |
| write | Add a metadata source (token required) |
Every data-returning tool wraps results in { ok, data, error, meta } and attaches
source_id, license, citation, fetched_at, and a data_quality
{ confidence, warnings, validation } block. Multi-dataset portals expose their
datasets via uae_source_datasets; pass a returned id as the dataset
argument to uae_source_records.
Source status (honest by design)
32 official sources are registered. Data is never fabricated — each source is typed by what it can actually return:
Live records, no key: MOIAT industrial licenses (
http_json) and Ajman (ods, 211 datasets). Any ArcGIS FeatureServer you wire works too.Key-gated official APIs (
requires_api_key): Dubai Pulse / DLD real-estate transactions, Abu Dhabi Open Data — supply a developer key to enable them.Metadata / discovery-only: everything else — a portal with no reachable machine API returns an actionable error, not empty-looking success.
Usage examples
Ask your MCP client (natural language)
Once connected, just ask — the client picks the right tool:
"List UAE industrial factories licensed in Abu Dhabi." →
uae_source_records"Find official UAE datasets about real estate." →
uae_search"Map licensed factories within 60 km of Abu Dhabi." →
uae_source_geo"Break down industrial licenses by emirate." →
uae_source_aggregate"Which official UAE open-data sources can you access?" →
uae_sources_list"Is the Dubai Land Department data source up right now?" →
uae_source_health
Call a tool over HTTP (Streamable-HTTP MCP)
# initialize → grab the mcp-session-id header, then call tools/list, tools/call
curl -s -X POST https://uaemcp.zad.tools/mcp/ \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"uae_market_snapshot","arguments":{"topic":"industry","limit":50}}}'Or hit the REST mirror directly
# 32 registered sources
curl -s https://uaemcp.zad.tools/api/v1/sources | jq '.meta.total'
# live, PII-redacted records from the MOIAT industrial-licenses API
curl -s 'https://uaemcp.zad.tools/api/v1/sources/moiat_industrial_licenses/records?limit=2'
# discover datasets in a multi-dataset portal (Ajman = OpenDataSoft, 211 datasets)
curl -s 'https://uaemcp.zad.tools/api/v1/sources/ajman_data_portal/datasets?limit=5'
# then fetch live records from one of those datasets
curl -s 'https://uaemcp.zad.tools/api/v1/sources/ajman_data_portal/records?dataset=developed-crossroads&limit=3'
# federated bilingual search (deep = also search live portal datasets)
curl -s 'https://uaemcp.zad.tools/api/v1/search?q=real%20estate&deep=true'
# GeoJSON for map apps — factories within 60 km of Abu Dhabi
curl -s 'https://uaemcp.zad.tools/api/v1/sources/moiat_industrial_licenses/geo?near=24.45,54.37,60'
# aggregate: licensed factories grouped by emirate
curl -s 'https://uaemcp.zad.tools/api/v1/sources/moiat_industrial_licenses/aggregate?group_by=EmirateNameEN'
# export records as csv | geojson | xlsx | json
curl -s -OJ 'https://uaemcp.zad.tools/api/v1/sources/moiat_industrial_licenses/export?format=geojson'Full parameter tables + real response examples for every endpoint are in the API reference (APIs.md).
// sample record (contact fields are redacted by default)
{
"CompanyName": "…",
"EmirateNameEN": "Abu Dhabi",
"AreaNameEN": "Musaffah Industrial",
"ContactPhone": "[redacted-open-data-contact]",
"ContactEmail": "[redacted-open-data-contact]"
}Interactive API docs (Dubai-Font themed Swagger UI): https://uaemcp.zad.tools/docs
Security model
Writes gated. Reads are open; mutating tools require
UAEMCP_WRITE_TOKEN. No token set → writes are disabled entirely (safe default).SSRF guard. Every fetch resolves the host and rejects private, loopback, link-local, and cloud-metadata addresses. See
core/ssrf.py.PII redaction. Phone/email fields are redacted by name and by value pattern before any record leaves the server.
Bounded fetches. Browser-like User-Agent (so bot-mitigated portals don't hang), strict timeouts, capped redirects and response size.
Design notes — what this fixes vs. the prior version
No auth on writes → token-gated writes, disabled by default.
SSRF surface → mandatory
validate_urlon every egress.stdio-only → real remote MCP at
/mcp.dashboard-summarystall → checks run concurrently with a strict per-source timeout and a browser UA, served from cache, with DNS resolved off the event loop so the fan-out truly overlaps. Worst case is the slowest single source, not the sum of all.Cold-start 502 →
/healthzand/readyzdo no upstream work.
Development
pip install -e ".[dev]"
pytest -m "not network" # offline unit tests (ssrf, redaction, dashboard)
pytest # include live-endpoint integration tests
ruff check . && mypy srcLicense
MIT. Data served is open government data — verify each source's terms before redistribution.
Available Tools
11 toolsuae_dashboard_summaryA
Concurrent, cached health snapshot across all sources (fast, never stalls).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses concurrency and caching behavior, adding value, but does not detail what 'health snapshot' entails, potential staleness, or authentication needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundancy, front-loads key attributes (concurrent, cached, fast, never stalls). Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Zero parameters and an output schema exists, so description covers essential context. Could mention what 'health' includes but output schema likely handles that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; baseline score of 4 applies. Description need not add parameter info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides a 'cached health snapshot across all sources' with performance characteristics, distinguishing it from sibling tools like uae_source_health (likely per-source) and uae_market_snapshot (different domain).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a fast, non-blocking overview is needed ('fast, never stalls'), but does not explicitly state when not to use or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uae_market_snapshotC
Build a source-backed market snapshot (counts by emirate/area/product).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | No | industry |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral disclosure burden. It mentions 'source-backed' without explaining what that entails, and omits any information about destructive actions, auth requirements, or rate limits. The description is too vague to inform safe usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant information, but it is so brief that it sacrifices necessary detail. Concise yet inadequate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (reducing need to explain returns), the description fails to clarify the meaning of 'source-backed' or how parameters affect the snapshot. With no required parameters, usage is ambiguous. Sibling tool context is available but not leveraged.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the description adds no meaning beyond the parameter names. The 'limit' and 'topic' parameters have defaults but no explanation of their purpose or allowed values, leaving the agent without enough context to use them correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool builds a market snapshot with counts by emirate/area/product, using a specific verb 'Build' and resource. However, it does not differentiate from sibling tools like uae_dashboard_summary, which might have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. There are siblings like uae_dashboard_summary and uae_sources_list, but the description provides no context for choosing between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uae_searchA
Federated bilingual (ar/en) search across the catalog.
Ranks official sources by relevance. With deep=true it also searches each
portal's live dataset catalogue (OpenDataSoft/CKAN/ArcGIS) so individual
datasets surface — ideal for a dataset-discovery agent.
| Name | Required | Description | Default |
|---|---|---|---|
| deep | No | ||
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses key behaviors: it searches the catalog, ranks results by relevance, and with deep=true searches live portals. It does not mention read-only nature explicitly, but for a search tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences cover purpose, ranking, deep mode, and use case. No redundant information; front-loaded with key functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and presence of an output schema, the description covers main behaviors (bilingual, federation, deep mode). It lacks details on pagination or error handling, but is sufficient for initial understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description bears responsibility for parameter meanings. It explains the deep parameter and implies query accepts Arabic and English, but does not describe limit or further details for query. Partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs federated bilingual search across a catalog, ranks official sources by relevance, and offers a deep mode for dataset discovery. This is specific and distinguishes it from sibling tools which focus on source management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the tool is ideal for dataset-discovery agents and explains the deep mode. While it does not explicitly state when not to use it or mention alternatives, the context implies its primary use case for general search and dataset discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uae_source_add_metadataC
[WRITE — requires token] Add a metadata-only source to the local registry.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| notes | No | ||
| owner | Yes | ||
| token | No | ||
| name_ar | Yes | ||
| name_en | Yes | ||
| base_url | Yes | ||
| category | No | custom | |
| docs_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for behavioral disclosure. It only adds 'WRITE' and token requirement, but omits critical traits like idempotency, error behavior on duplicate IDs, or side effects on the registry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (one sentence with a prefix), which is concise but lacks essential information. It is front-loaded but does not earn its place due to missing details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 9 parameters, no schema descriptions, and no annotations, the description is insufficient. It does not explain return values (despite an output schema existing) nor provide enough context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does not mention any of the 9 parameters (e.g., id, name_en, name_ar, owner, base_url) nor their meaning or constraints. The agent receives no guidance on parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add'), the resource ('metadata-only source'), and the target ('local registry'). It effectively distinguishes from sibling tools like 'uae_source_get' (retrieve) and 'uae_sources_list' (list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes '[WRITE — requires token]' which hints at authentication requirements, but offers no guidance on when to use this tool versus alternatives like 'uae_source_get' or when not to use it. No context for prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uae_source_aggregateB
Group records and reduce with count|sum|avg|min|max.
group_by is a comma-separated list of fields (dotted paths allowed, e.g.
"Products.ProductNameEN"). A generalized form of uae_market_snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | ||
| limit | No | ||
| query | No | ||
| metric | No | count | |
| dataset | No | ||
| group_by | Yes | ||
| source_id | Yes | ||
| value_field | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description explains the basic behavior (grouping and reducing) but does not disclose whether it is read-only, any rate limits, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short (two sentences plus a code example) and front-loaded, efficiently conveying the core functionality without extra words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the tool has 8 parameters and aggregation logic, yet the description only covers group_by and vague aggregation types, leaving significant gaps for proper use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description only explains the group_by parameter format. The other 7 parameters (top, limit, query, metric, dataset, source_id, value_field) are left completely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool groups records and applies aggregation functions (count, sum, avg, min, max). It also distinguishes itself as a generalized form of uae_market_snapshot, providing sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It mentions being a generalized form of uae_market_snapshot, which gives context on when to use it, but does not explicitly state when not to use it or provide alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uae_source_datasetsB
List the datasets inside a multi-dataset portal (CKAN/OpenDataSoft/ArcGIS).
Simple single-dataset sources (like MOIAT) return one entry. Use the returned
id as the dataset argument to uae_source_records.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No | ||
| source_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must bear the full burden. It only says 'list the datasets' without disclosing behavior like pagination, error handling, rate limits, or authentication. The existence of output schema is not detailed. This is insufficient for transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, no fluff, front-loaded with purpose, and includes a practical usage hint. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters and no annotations, the description is too brief. It lacks parameter documentation, behavioral details, and information about the output schema (which exists but is not described). Completeness is low.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description adds no information about any of the four parameters (limit, query, offset, source_id) beyond what the schema provides. It fails to compensate for low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists datasets inside a multi-dataset portal (CKAN/OpenDataSoft/ArcGIS) and distinguishes that simple single-dataset sources return one entry. It also links to the sibling tool uae_source_records, providing clear purpose and differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context on when to use (for multi-dataset portals) and how to use the result (as dataset argument to uae_source_records). However, it does not explicitly state when not to use or provide alternatives, but the context is clear from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uae_source_geoA
Spatially-filtered records as GeoJSON — powers map apps.
bbox = "min_lon,min_lat,max_lon,max_lat"; near = "lat,lon,radius_km".
Works on any source with coordinates (e.g. MOIAT industrial licenses).
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | ||
| near | No | ||
| limit | No | ||
| query | No | ||
| dataset | No | ||
| source_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the tool returns GeoJSON and works on coordinate-bearing sources, but does not address error handling, rate limits, or behavior when sources lack coordinates. This is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences and a line for parameter formats. It is front-loaded with the output format and purpose, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (presumably GeoJSON), the description does not need to explain return values. It mentions the tool works on coordinate-bearing sources and provides parameter formats, but lacks details on error handling or non-spatial source behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only adds meaning for bbox and near parameters (format strings), leaving limit, query, dataset, and source_id undocumented. This is insufficient for 6 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns spatially-filtered records as GeoJSON, identifying the verb ('filtered'), resource ('records'), and output format. It distinguishes itself from siblings like uae_source_records by focusing on spatial queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context that the tool works on any source with coordinates (e.g., MOIAT industrial licenses) and gives format hints for bbox and near parameters. However, it does not explicitly state when not to use it or mention alternatives, so it lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uae_source_getC
Get the full metadata for one source by id.
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only says 'full metadata' without specifying what fields are included, idempotence, rate limits, or error conditions. Minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no waste, but it is under-specified. It could be more informative while remaining concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (which may document return values), the description covers the basic purpose. However, with no annotations and only one parameter, it could include more behavior context or usage hints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. While it mentions 'by id', it does not explain the source_id parameter's format, constraints, or examples beyond the schema's basic title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Get', the resource 'full metadata for one source', and the method 'by id'. It distinguishes from sibling tools like uae_sources_list (which lists sources) and uae_source_add_metadata (which adds metadata).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like uae_sources_list for listing or uae_source_health for checking health. No when-not-to-use or prerequisite information is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uae_source_healthC
Run a live, timeout-bounded health probe for one source.
| Name | Required | Description | Default |
|---|---|---|---|
| source_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions 'live, timeout-bounded' but does not disclose whether the probe is read-only or has side effects, response behavior on success/failure, or any permissions needed. Since no annotations are provided, the description carries full burden and falls short.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, but it could benefit from slightly more detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no annotations), the description still lacks key details like return value or behavior. An output schema exists but is not provided, so the description should compensate for that gap, which it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'source_id' has no schema description (0% coverage). The description does not explain what the source ID represents, how to obtain it, or its format beyond the title 'Source Id'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('run') and the resource ('live, timeout-bounded health probe for one source'), distinguishing it from siblings like uae_source_get or uae_source_records. However, it does not elaborate on what the health probe entails, leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like uae_source_get or uae_dashboard_summary. The description does not specify context, prerequisites, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uae_source_recordsA
Fetch up to limit live, redacted, source-cited records from a source.
For multi-dataset portals pass dataset (an id from uae_source_datasets).
Every response carries provenance + a data-quality block in meta.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No | ||
| dataset | No | ||
| source_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It states records are 'live, redacted' and that responses include 'provenance + a data-quality block in `meta`.' This indicates read-only behavior and some response structure. However, it does not mention authentication, rate limits, error handling, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a distinct purpose: core action, dataset parameter use, and response content note. No redundant or irrelevant information. Front-loaded with the main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters and an output schema, the description covers the essential purpose and the key parameter (dataset). It also notes the presence of provenance and data quality in responses. However, it could elaborate on the query parameter's semantics or pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning. It explains `limit` (default 10) and `dataset` (an id from uae_source_datasets). It also implies `offset` and `query` are available but does not describe them. This adds value over the bare schema, but not all parameters are explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Fetch up to `limit` live, redacted, source-cited records from a source.' This specifies the verb (fetch), resource (source-cited records), and constraints (live, redacted, limit). It also mentions multi-dataset portals. However, it does not explicitly differentiate from sibling tools like uae_search or uae_source_aggregate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on when to use the `dataset` parameter: 'For multi-dataset portals pass `dataset` (an id from `uae_source_datasets`).' This implies that for single-dataset sources, dataset is not needed. However, it does not specify when to use this tool over alternatives like uae_search for cross-source queries or uae_source_get for a single record.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uae_sources_listA
List every registered official UAE open-data source with its metadata.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It discloses the tool returns all sources and metadata, which is sufficient for a read-only list. However, it could mention that no parameters are needed and that it's safe to call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no unnecessary words. It directly states the action and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, has output schema), the description adequately captures the functionality. It could mention that it returns all sources for context, but it does not need to elaborate further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, simplifying the need for additional description. The schema coverage is 100%, so the description adds no further parameter details, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists every registered official UAE open-data source with metadata, using specific verb 'list' and resource. It distinguishes from sibling tools like uae_source_get (which retrieves a single source).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for obtaining an overview of all sources, but does not provide explicit guidance on when to use it versus alternatives like uae_source_get for individual sources. No exclusions or conditions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.2.2- Added
uae_search - Added
uae_source_aggregate - Added
uae_source_datasets - Added
uae_source_geo - Changed
uae_source_records2 fields changed- added
Input schema / properties / datasetAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Dataset" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "title": "Offset", + "type": "integer" +}
7 tool updates
v0.1.0- First observed
uae_dashboard_summary - First observed
uae_market_snapshot - First observed
uae_source_add_metadata - First observed
uae_source_get - First observed
uae_source_health - First observed
uae_source_records - First observed
uae_sources_list
TDQS
Scored across 11 tools
Each tool has a clearly distinct purpose: dashboard summary, market snapshot, search, source management (add, list, get, health), data retrieval (records, datasets, geo), and aggregation. No ambiguity between tools.
Tools consistently use the 'uae_' prefix. Most tools follow a 'uae_source_<action>' pattern, though 'uae_dashboard_summary' and 'uae_market_snapshot' deviate slightly. Overall pattern is predictable.
With 11 tools, the set is well-scoped for an open data intelligence server. Each tool serves a specific function without redundancy, and the count feels appropriate for the complexity of the domain.
The tool set covers core operations: search, catalog browsing, data retrieval, aggregation, and health checks. It lacks update/delete for sources, but for a read-heavy intelligence service, this is a minor gap.
Maintenance
Related MCP Connectors
Agent-native MCP server over 49M+ US public and government records, privacy-first, always current.
This MCP server provides seamless access to Malaysia's government open data, including datasets, w…
Keyless MCP access to official Luxembourg public data: laws, statistics, mobility, and more.
Public Data Ukraine Mcp connects AI agents to real public APIs via MCP. Tools include
Related MCP Servers
- AlicenseAqualityCmaintenanceAn MCP server that provides AI agents with access to Dubai and UAE public data (prayer times, exchange rates, school ratings, etc.) and curated business setup knowledge for entrepreneurs.1004MIT
- AlicenseNot gradedqualityCmaintenanceA governed MCP server for Saudi open data sources (SAMA, stats.gov.sa, Ministry of Finance, data.gov.sa), providing typed contracts, registry-backed metadata, and CLI/API access for dataset search, preview, and controlled export.7Apache 2.0
- AlicenseAqualityFmaintenanceEnables querying British cybersecurity data, including regulations, decisions, and requirements from the NCSC, directly from any MCP-compatible client.81Apache 2.0
- AlicenseAqualityCmaintenanceUnifies 24 Dutch public-sector data sources into a single MCP interface, enabling AI assistants to search, combine, and retrieve structured data with provenance and cross-source linking.6415Apache 2.0