Data.gov.il MCP Server
The Data.gov.il MCP Server provides structured access to Israeli government open data via the CKAN API, enabling you to discover, explore, and query official datasets.
Dataset Discovery & Details
Search datasets by keywords (Hebrew/English), sorted by relevance, popularity, date, or last update
Retrieve full metadata for specific datasets, including tags, resources, and publisher info
List all datasets from a local catalog snapshot with fuzzy matching and typo tolerance
Resource & Record Querying
List all files/datastores within a dataset and identify active queryable datastores
Query records with full-text search, field filtering, sorting, pagination, distinct value extraction, and total count reporting
Organizations & Tags
List all government organizations with Hebrew titles and dataset counts
Get detailed metadata for specific organizations
Browse ranked tags by topic (transport, environment, health, education, economy, etc.)
Fuzzy-search tags with related tag suggestions
Static Resources
Access curated resources: organization lists, ranked tags, featured datasets, catalog statistics, and a usage guide
Domain-Specific Prompts
Predefined prompts for food/nutrition, environmental sustainability, and real estate market analysis
Optional Features
Interactive parameter for broad searches with client clarification
MCP Sampling for AI-generated human-readable dataset summaries
Flexible deployment via stdio, Streamable HTTP, or Docker, with support for API key, OAuth 2.1 JWT/JWKS, or no authentication
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., "@Data.gov.il MCP ServerFind datasets related to public transportation in Tel Aviv"
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.
data-gov-il-mcp
Production-grade Model Context Protocol (MCP) server for Israeli Government Open Data from data.gov.il.
This server gives MCP-compatible clients structured access to Israeli government datasets, resources, tags, organizations, and tabular records through the official CKAN API. It is written in TypeScript, validates inputs and outputs with Zod, returns JSON-first tool responses, and supports both local stdio and remote Streamable HTTP transports.
Highlights
Area | Status |
MCP tools | 9 tools by default, 10 with optional Sampling enabled |
MCP resources | 5 static resources + 1 dataset resource template |
MCP prompts | 3 domain prompts with argument completions |
Discovery | In-memory catalog snapshot with Hebrew normalization, fuzzy matching, tag ranking, and co-occurrence |
Transports |
|
Auth |
|
HTTP hardening | Helmet, CORS, rate limiting, request IDs, Host/Origin validation |
Responses |
|
Runtime config | Environment-driven, validated at startup with Zod |
Related MCP server: CKAN MCP Server
Quick Start
Claude Desktop / Local Stdio
Use the published package directly:
{
"mcpServers": {
"data-gov-il": {
"command": "npx",
"args": ["-y", "data-gov-il-mcp"]
}
}
}Streamable HTTP
npm install -g data-gov-il-mcp
data-gov-il-mcp-httpThen configure your MCP client:
{
"mcpServers": {
"data-gov-il": {
"url": "http://localhost:3664/mcp"
}
}
}Docker
docker run -p 3664:3664 ghcr.io/davidosherproceed/data-gov-il-mcp:latestFor local development:
npm install
npm run build
npm run start:stdio
# or
npm run start:httpCatalog Discovery Layer
The server ships with a committed catalog snapshot at src/data/catalog/catalog.snapshot.json. The snapshot is generated from data.gov.il and bundled into the build. At startup, it is validated and indexed in memory.
The discovery layer powers:
find_datasetscatalog-first search with live CKAN fallback.list_all_datasetsinstant local enumeration with optional organization filter.list_organizationsinstant local organization list with dataset counts.list_available_tagsandsearch_tagsfrom real CKAN tag/facet data.Dynamic completions for
datagov://dataset/{id}.datagov://tagsanddatagov://catalog/statsresources.
It includes:
Hebrew normalization, including nikud removal and final-letter normalization.
Tokenization and trigram indexes for fuzzy matches and typo tolerance.
Dataset, tag, and organization maps.
Tag-to-dataset and organization-to-dataset indexes.
Tag co-occurrence for related tag suggestions.
Weighted ranking across exact, token, tag, organization, and fuzzy signals.
Refresh the snapshot:
npm run catalog:refresh
npm run buildA scheduled GitHub Actions workflow (.github/workflows/catalog-refresh.yml) refreshes the snapshot and opens a PR when catalog data changes.
More detail: docs/catalog-discovery-layer.md.
Tools
All successful tool responses return:
structuredContent: the typed JSON object.content[0].text: the same object serialized as JSON for text-only clients.
Default Tools
Tool | Purpose |
| Primary dataset discovery tool. Uses the local catalog first, then live CKAN fallback when needed. |
| Full CKAN metadata for a dataset, including tags and resources. |
| Instant catalog-backed dataset summaries, optionally filtered by organization. |
| Lists files/datastores inside a dataset and identifies |
| Queries CKAN datastore records with full-text search, filters, fields, sorting, pagination, and distinct values. |
| Catalog-backed organizations with Hebrew titles and dataset counts. |
| Live CKAN organization metadata. |
| Ranked catalog tags with dataset counts and related tags. |
| Fuzzy tag search with related tag suggestions. |
Optional Tools
Tool | Enabled By | Purpose |
|
| Requests MCP Sampling from compatible clients to produce a human-readable dataset summary. Falls back to metadata when Sampling is unavailable. |
Elicitation in find_datasets
find_datasets can optionally expose an interactive parameter:
{
"query": "תחבורה",
"interactive": true
}This is only registered when:
MCP_ENABLE_ELICITATION=trueWhen enabled, compatible clients may show a clarification form for broad searches. For example, the server can ask the user to narrow many matching datasets by publisher organization. If the client does not support Elicitation, the user declines, or the request times out, the tool falls back to normal search results.
This is disabled by default because MCP client support varies.
Resources
URI | Type | Description |
| Static JSON | Organization list from CKAN, cached. |
| Static JSON | Ranked tags from the committed catalog snapshot. |
| Static JSON | Curated high-value datasets with ready-to-use |
| Static text | Usage guide for tools, resources, and recommended workflows. |
| Static JSON | Snapshot metadata: generated time, dataset count, tag count, organization count, top organizations. |
| Template JSON | Full dataset metadata by dataset slug or ID. Includes dynamic completions and a catalog-backed resource list. |
The server also implements resource subscriptions in a minimal standards-compliant way:
Advertises
resources.subscribe.Handles
resources/subscribeandresources/unsubscribe.Sends
notifications/resources/updatedonly for resources a client subscribed to.Does not poll CKAN in real time.
Prompts
Prompt | Argument | Purpose |
|
| Food prices, nutrition, kosher, safety, import/export. |
|
| Air quality, green buildings, waste, water, contaminated sites. |
|
| Housing, urban renewal, subsidized housing, city/property analysis. |
Prompt arguments use MCP completions. Domain focus suggestions are curated, and organization completions are catalog-backed.
Optional MCP Client Features
These features are off by default. Enable them only when your target MCP client supports them and you want the server to expose them.
Variable | Default | Effect |
|
| Adds |
|
| Registers |
Client support differs:
Cursor supports Elicitation, but does not currently expose Sampling.
Claude Code supports Elicitation in recent versions.
Claude Desktop supports many MCP features, but Elicitation support is not reliable/available.
Sampling availability varies; the server always falls back safely.
Configuration
Copy .env.example to .env:
cp .env.example .envCore
Variable | Default | Description |
|
| Default transport when using the generic entry point. Dedicated binaries are also available. |
|
| HTTP port. |
|
| HTTP bind host. |
|
| Allowed CORS origins. Avoid wildcard in production browser deployments. |
|
|
|
|
|
|
CKAN
Variable | Default | Description |
|
| CKAN action API base URL. |
|
| Default CKAN request timeout. |
|
| Timeout for heavier datastore/search requests. |
|
| Default cache TTL. |
|
| Max entries per in-memory cache. |
HTTP Hardening
Variable | Default | Description |
|
| Trust reverse proxy headers. Set when behind nginx/Caddy/ALB. |
|
| Rate limit window. Set |
|
| Requests per IP per window. Set |
| empty | Host allowlist for DNS rebinding protection. Defaults to loopback/local hosts when unset. |
| empty | Browser Origin allowlist. Falls back to |
Authentication
Variable | Default | Description |
|
|
|
| empty | Comma-separated bearer tokens for |
| unset | Expected JWT issuer for |
| unset | Expected JWT audience for |
| unset | JWKS URL for JWT verification. |
| unset | Canonical MCP resource URL for OAuth protected resource metadata. Usually includes |
Service Identity
Variable | Default | Description |
| package/server default | MCP server name override. |
| package version | MCP server version override. |
| built-in description | MCP server semantic description override. |
Recommended Workflows
Find and Query a Dataset
Use
find_datasetswith natural Hebrew or English terms.Use
get_dataset_infoorlist_resourcesfor a chosen dataset.Pick a resource with
datastore_active=true.Use
search_recordswithlimit=5first to inspect fields.Add
filters,fields,sort,distinct, or pagination as needed.
Example flow:
find_datasets({ "query": "מחיר למשתכן" })
get_dataset_info({ "dataset": "mechir-lamishtaken" })
search_records({
"resource_id": "7c8255d0-49ef-49db-8904-4cf917586031",
"limit": 5,
"include_total": true
})Discover Tags
search_tags({ "keyword": "דיור", "limit": 5 })
find_datasets({ "query": "תחבורה", "tags": "תחבורה ציבורית" })Use Interactive Discovery
Requires:
MCP_ENABLE_ELICITATION=trueThen an agent may call:
find_datasets({ "query": "תחבורה", "interactive": true })Compatible clients may show a form asking the user to narrow results.
Use Client-Side Summaries
Requires:
MCP_ENABLE_SAMPLING=trueThen:
summarize_dataset({ "dataset": "mechir-lamishtaken", "language": "he" })If Sampling is unavailable, the tool returns the dataset metadata and sampling.used=false.
Development
npm install
# Type-check
npm run typecheck
# Lint
npm run lint
# Test
npm test
# Build
npm run build
# Refresh local catalog snapshot
npm run catalog:refreshRun locally:
# stdio
npm run build
npm run start:stdio
# HTTP
npm run build
npm run start:httpEnable optional features locally:
MCP_ENABLE_ELICITATION=true MCP_ENABLE_SAMPLING=true npm run start:httpOn PowerShell:
$env:MCP_ENABLE_ELICITATION="true"
$env:MCP_ENABLE_SAMPLING="true"
npm run start:httpProject Structure
src/
auth/ Authentication providers and Express middleware
bin/ stdio and HTTP entry points
cache/ In-memory TTL/LRU cache
catalog/ Snapshot validation, indexing, fuzzy search, CatalogService
ckan/ Typed CKAN API client and CKAN response types
config/ Zod env config, constants, server identity
core/ Dependency container, MCP server factory, lifecycle
data/catalog/ Committed catalog snapshot artifact
formatting/ JSON response builders and guidance text
observability/ Pino logger
prompts/ MCP prompt definitions, templates, registration
resources/ MCP resources, templates, subscriptions
services/ Domain services for CKAN data access
tools/ MCP tool definitions and Zod schemas
transports/ stdio and Streamable HTTP transports
tests/
fixtures/ Test fixtures
unit/ Unit tests
scripts/
refresh-catalog.ts
docs/
catalog-discovery-layer.md
MIGRATION.mdDocker
docker build -t data-gov-il-mcp .
docker run -p 3664:3664 data-gov-il-mcpWith optional features:
docker run -p 3664:3664 \
-e MCP_ENABLE_ELICITATION=true \
-e MCP_ENABLE_SAMPLING=true \
data-gov-il-mcpQuality
The project is expected to pass:
npm run typecheck
npm run lint
npm test
npm run buildCurrent implementation includes unit coverage for environment parsing, auth providers, CKAN errors, cache, formatting, catalog text normalization/fuzzy/index/search logic, snapshot validation, services, resources, subscriptions, and HTTP Host/Origin guard.
License
Available Tools
9 toolsfind_datasetsD
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort results by: 'newest' (creation date), 'relevance' (best match), 'popular' (most viewed), 'updated' (recently modified) | |
| query | Yes | Search terms (Hebrew/English). Use topic names from list_available_tags(). Examples: 'תקציב', 'תחבורה', 'סביבה', 'budget', 'transportation' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dataset_infoD
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset ID or name to get detailed information about. Examples: 'branches', 'jerusalem-municipality-budget', 'mechir-lamishtaken' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_organization_infoD
| Name | Required | Description | Default |
|---|---|---|---|
| organization | Yes | Organization name or ID. Examples: 'ministry-of-health', 'tel-aviv-yafo', 'cbs'. Use list_organizations to see all available organizations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_datasetsD
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_available_tagsD
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format: 'overview' (all categories), 'detailed' (specific category), 'suggestions' (themed recommendations) | overview |
| category | No | Filter by specific category. Examples: 'transportation', 'environment', 'government' | |
| show_counts | No | Show dataset counts for each topic |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_organizationsD
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_resourcesD
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset ID or name (e.g., 'branches', 'jerusalem-municipality-budget') | |
| include_tracking | No | Include version tracking and update history |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recordsD
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text search across all fields. Supports Hebrew/English, partial matches, and multiple words. Examples: 'תל אביב', 'בנק לאומי', 'emergency' | |
| sort | No | Sort results by one or more fields. Format: ["field_name asc/desc"]. Examples: ["Name asc"], ["Date desc", "Amount desc"] | |
| limit | No | Number of results to return (1-1000). Use 5-10 for quick exploration, 20-50 for analysis, 100-1000 for comprehensive data extraction | |
| fields | No | Return only specific fields to reduce response size and improve performance. Examples: ["Name", "City"], ["Amount", "Date", "Type"] | |
| offset | No | Skip first N results for pagination. Use with limit for paging: page 1: offset=0, page 2: offset=limit, page 3: offset=limit*2 | |
| filters | No | Exact field matches as JSON object. Supports single values, arrays, and operators. Examples: {"City": "תל אביב"}, {"City": ["תל אביב", "חיפה"]}, {"Amount": {"$gte": 1000}} | |
| distinct | No | Return unique values for a specific field only (no full records). Useful for getting all possible values. Examples: 'City', 'Type', 'Status' | |
| resource_id | Yes | Resource UUID from list_resources. Get this ID from datastore_active=true resources. Example: '2202bada-4baf-45f5-aa61-8c5bad9646d3' for bank branches | |
| include_total | No | Include total count of matching records in response. Essential for pagination planning and showing 'X of Y results' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tagsD
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | Search keyword in Hebrew or English. Examples: 'בנק', 'transport', 'סביבה' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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?
Tool has no description.
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.
9 tool updates
v2.1.0- First observed
find_datasets - First observed
get_dataset_info - First observed
get_organization_info - First observed
list_all_datasets - First observed
list_available_tags - First observed
list_organizations - First observed
list_resources - First observed
search_records - First observed
search_tags
TDQS
Scored across 9 tools
Tool names suggest distinct purposes for most, but 'find_datasets' and 'list_all_datasets' could be interpreted as overlapping (search vs. list all). Without descriptions, agents might misselect.
All names follow a consistent verb_noun pattern with underscores, using verbs like find, get, list, search. No mixing of conventions.
9 tools is appropriate for a data portal server, covering datasets, organizations, tags, resources, and records. Not excessive or insufficient.
The set covers discovery and metadata retrieval well but lacks tools for data download or CRUD operations. Given a read-only catalog, minor gaps exist.
Maintenance
Related MCP Connectors
data.gov.il MCP — Israel national open-data portal (CKAN API).
Public Data Ukraine Mcp connects AI agents to real public APIs via MCP. Tools include
Israel Government Procurement MCP — public tenders & exemption contracts (keyless).
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides access to Israel's national open data portal (data.gov.il) via CKAN API, enabling listing of publishing organizations and thematic groups.8 npmMIT
- AlicenseAqualityAmaintenanceEnables AI assistants to search, explore, and query any CKAN open data portal through natural language, making public datasets accessible without requiring knowledge of the portal's API.201,372 npm57MIT
- AlicenseAqualityCmaintenanceEnables AI agents to search and analyze Ukraine's national open-data portal (data.gov.ua) using natural language, with tools for finding datasets, inspecting metadata, and retrieving actual data.6MIT

mcp-data-lvofficial
AlicenseNot gradedqualityCmaintenanceEnables AI agents to search, retrieve metadata, and query tabular resources from Latvia's Open Data portal (data.gov.lv) via CKAN.5 npmMIT