Skip to main content
Glama
ahmedvnabil

Open Emirates Intelligence

by ahmedvnabil

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 http

  • From 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 /mcp

Latest release: v0.2.0 — published to npm with provenance via GitHub Actions OIDC (no tokens). npx uaemcp always 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 stdio

Remote (HTTP) — landing page + REST + MCP endpoint

uaemcp http --host 0.0.0.0 --port 8080
  • Landing page: http://localhost:8080/

  • REST API: http://localhost:8080/api/v1/... — full API reference → APIs.md

  • MCP (Streamable): http://localhost:8080/mcp

  • Observability: /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

uae_sources_list

read

List every registered official source

uae_source_get

read

Full metadata for one source

uae_source_health

read

Live, timeout-bounded health probe

uae_source_datasets

read

Discover datasets inside a portal (CKAN/ODS/ArcGIS)

uae_source_records

read

Live, redacted, cited records (per dataset)

uae_search

read

Federated bilingual search across the catalog

uae_source_geo

read

Spatially-filtered records as GeoJSON (maps)

uae_source_aggregate

read

group_by + count/sum/avg/min/max

uae_market_snapshot

read

Counts by emirate / area / product

uae_dashboard_summary

read

Concurrent, cached health across all sources

uae_source_add_metadata

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_url on every egress.

  • stdio-only → real remote MCP at /mcp.

  • dashboard-summary stall → 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/healthz and /readyz do 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 src

License

MIT. Data served is open government data — verify each source's terms before redistribution.

Available Tools

11 tools
uae_dashboard_summaryA

Concurrent, cached health snapshot across all sources (fast, never stalls).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
topicNoindustry

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_source_add_metadataC

[WRITE — requires token] Add a metadata-only source to the local registry.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
notesNo
ownerYes
tokenNo
name_arYes
name_enYes
base_urlYes
categoryNocustom
docs_urlNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
limitNo
queryNo
metricNocount
datasetNo
group_byYes
source_idYes
value_fieldNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
offsetNo
source_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
nearNo
limitNo
queryNo
datasetNo
source_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
source_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
source_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
offsetNo
datasetNo
source_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 5 tool updatesv0.2.2
    • Addeduae_search
    • Addeduae_source_aggregate
    • Addeduae_source_datasets
    • Addeduae_source_geo
    • Changeduae_source_records2 fields changed
      • addedInput schema / properties / dataset
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Dataset"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "title": "Offset",
        +  "type": "integer"
        +}
  2. 7 tool updatesv0.1.0
    • First observeduae_dashboard_summary
    • First observeduae_market_snapshot
    • First observeduae_source_add_metadata
    • First observeduae_source_get
    • First observeduae_source_health
    • First observeduae_source_records
    • First observeduae_sources_list

TDQS

B3.4/5.0

Scored across 11 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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.
    7
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Unifies 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.
    64
    15
    Apache 2.0