ArcGIS Hub Datasets: Search
arcgishubitems/search-datasets
Keyword search over the datasets published on ArcGIS Hub by any organisation (opendata.arcgis.com datasets API, a global index): returns up to 10 matching items per call (default 5) with each one's id, name, description (plain text, the first 500 characters), tags, type, publishing organisation, source, declared licence, last modified time, record count, geometry type, the first 40 field names, the ArcGIS service address and the Hub page address, plus the total number of matches. Page through further matches with page. Use it to find the item id for the get-dataset tool. A search with no match returns totalCount 0 and an empty results list. Dataset metadata as served by Eden Engine; not an official Esri product.
Price
$0.0026 per call
You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $0.50.
Data source
ArcGIS Hub Datasets API (opendata.arcgis.com)
Dataset metadata from the ArcGIS Hub datasets API (opendata.arcgis.com). Credit the publishing organisation named in each item's organization and source fields and honour the licence each item declares. Served by Eden Engine; not an official Esri product.
Use it
Five steps: search, inspect, learn, run, settle. No per-tool setup; your agent reaches this tool through the meta-tools it already has.
Connect once and your AI can find and run this tool, and any other it needs.
// 1. search: find the tool
omnial_search({ query: "what you need" })
// 2. inspect: price and input schema
omnial_inspect({ tool: "arcgishubitems/search-datasets" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "arcgishubitems/search-datasets" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "arcgishubitems/search-datasets", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "arcgishubitems/search-datasets", input: { /* ... */ } })
// 5. settle: the call is charged when it finishes, nothing to doNot connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.
Pricing
Every charge this tool can incur.
| Charge | Price |
|---|---|
Per call | $0.0026 |
- Updated
- Oct 25, 2026
Input and output schemas
Input schema
{
"type": "object",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Search words, for example parks. Matches item names, descriptions and tags. An empty value is refused before the call (the API would answer it with no items)."
},
"page": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Page number, counting from 1, in pages of limit items. Leave out for the first page. A page past the last match returns an empty results list."
},
"limit": {
"type": "integer",
"default": 5,
"maximum": 10,
"minimum": 1,
"description": "How many items to return, 1 to 10. Defaults to 5."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"required": [
"totalCount",
"page",
"pageSize",
"results"
],
"properties": {
"page": {
"type": "integer",
"description": "The page number of this answer, counting from 1."
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"description",
"descriptionTruncated",
"tags",
"type",
"organization",
"source",
"license",
"modified",
"recordCount",
"geometryType",
"fieldNames",
"url",
"landingPage"
],
"properties": {
"id": {
"type": "string",
"description": "The item's id: 32 hexadecimal characters, followed by an underscore and a layer number when the item is one layer of a service; pass it to the get-dataset tool."
},
"url": {
"type": [
"string",
"null"
],
"description": "The address of the item's ArcGIS service or file when it is an https address; null otherwise. The tools never call it."
},
"name": {
"type": [
"string",
"null"
],
"description": "The item's title; null when the publisher set none."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "The publisher's tags, at most the first 30; empty when there are none."
},
"type": {
"type": [
"string",
"null"
],
"description": "The ArcGIS item type, for example Feature Layer, Table or CSV; null when absent."
},
"source": {
"type": [
"string",
"null"
],
"description": "The data source or department the publisher named; null when absent."
},
"license": {
"type": [
"string",
"null"
],
"description": "The licence id the publisher declared on this item, for example CC-BY-4.0, custom or none (none means no licence was declared); null when absent."
},
"modified": {
"type": [
"string",
"null"
],
"description": "When the item was last modified, ISO 8601; null when absent."
},
"fieldNames": {
"type": "array",
"items": {
"type": "string"
},
"description": "The names of the layer's fields, the first 40 in the service's own order; empty when the item has no fields."
},
"description": {
"type": [
"string",
"null"
],
"description": "The publisher's description as plain text, markup removed and cut to the first 500 characters (ending in \"...\" when cut); null when the publisher wrote none."
},
"landingPage": {
"type": [
"string",
"null"
],
"description": "The item's page on ArcGIS Hub (https://hub.arcgis.com/datasets/<id>)."
},
"recordCount": {
"type": [
"integer",
"null"
],
"description": "The number of records in the layer when the service reports it; null when it does not."
},
"geometryType": {
"type": [
"string",
"null"
],
"description": "The layer's geometry type, for example esriGeometryPolygon or esriGeometryPoint; null for tables and files."
},
"organization": {
"type": [
"string",
"null"
],
"description": "The organisation that publishes the item; null when absent."
},
"descriptionTruncated": {
"type": "boolean",
"description": "True when the description was cut to its first 500 characters."
}
},
"additionalProperties": false
},
"description": "One entry per returned item (at most 10); empty when nothing matches."
},
"pageSize": {
"type": "integer",
"description": "How many items this page holds at most (the limit that was sent)."
},
"totalCount": {
"type": "integer",
"description": "How many items match the search in total."
}
},
"description": "The search answer: the total match count, the page, the page size and the items.",
"additionalProperties": false
}