Read-only Istanbul open city data: transport, parking, water, nearby services and datasets.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Summarize WiFi near a static reference point and district-level libraries/culture. district (all 39 Istanbul districts) is exclusive with place/coordinates; district-only place names also return district address lists, without WiFi or invented distances. Radius applies only to WiFi with a point. For Acıbadem, specify 'Acıbadem, Kadıköy' or 'Acıbadem, Üsküdar'. Not full address geocoding.
Summarize WiFi near a static reference point and district-level libraries/culture. district (all 39 Istanbul districts) is exclusive with place/coordinates; district-only place names also return district address lists, without WiFi or invented distances. Radius applies only to WiFi with a point. For Acıbadem, specify 'Acıbadem, Kadıköy' or 'Acıbadem, Üsküdar'. Not full address geocoding.
| Argument | Type | Description |
|---|---|---|
| lat | any | |
| lon | any | |
| limit | any | |
| place | any | |
| district | any | |
| radius_m | integer |
{
"type": "object",
"title": "istanbul_city_services_nearbyArguments",
"properties": {
"lat": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Lat",
"default": null
},
"lon": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Lon",
"default": null
},
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": null
},
"place": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Place",
"default": null
},
"district": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "District",
"default": null
},
"radius_m": {
"type": "integer",
"title": "Radius M",
"default": 1500
}
}
}Run a bounded SELECT over records from one allowlisted CKAN resource. SQLite dialect: use table records and published column names. GROUP BY and aggregates are supported; no writes, arbitrary functions or application DB. A complete bounded capture is required, never partial counts. The server enforces an outer result limit (default 20, max 100) even if SQL omits LIMIT. Only resources configured in CKAN_SQL_ALLOWED_RESOURCE_IDS are available. Local query syntax and bounds: https://github.com/Batu1-1an/istanbulmcp/blob/main/docs/datastore-sql.md Source API: https://docs.ckan.org/en/latest/maintaining/datastore.html
| Argument | Type | Description |
|---|---|---|
| sql* | string | |
| limit | any | |
| resource_id* | string |
{
"type": "object",
"title": "istanbul_datastore_queryArguments",
"required": [
"resource_id",
"sql"
],
"properties": {
"sql": {
"type": "string",
"title": "Sql"
},
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": null
},
"resource_id": {
"type": "string",
"title": "Resource Id"
}
}
}Return metadata and resources for one IBB dataset.
| Argument | Type | Description |
|---|---|---|
| dataset_id* | string |
{
"type": "object",
"title": "istanbul_get_datasetArguments",
"required": [
"dataset_id"
],
"properties": {
"dataset_id": {
"type": "string",
"title": "Dataset Id"
}
}
}Return DataStore field schema for a resource.
| Argument | Type | Description |
|---|---|---|
| resource_id* | string |
{
"type": "object",
"title": "istanbul_get_resource_schemaArguments",
"required": [
"resource_id"
],
"properties": {
"resource_id": {
"type": "string",
"title": "Resource Id"
}
}
}Inspect local GTFS load age, calendar validity, row counts and skipped rows. No upstream request or refresh is made. A missing or warming snapshot is unavailable, not an empty timetable. Cache age is not feed publication age; a loaded snapshot does not prove live arrivals or transport service.
No arguments.
{
"type": "object",
"title": "istanbul_gtfs_snapshot_statusArguments",
"properties": {}
}Return Istanbul MCP service readiness.
No arguments.
{
"type": "object",
"title": "istanbul_healthArguments",
"properties": {}
}Return the published weekly İBB market schedule, optionally by district/day. day accepts Turkish/English weekdays, today/yesterday/tomorrow, or an ISO date. Results are a static weekly schedule, not proof a market is open today; coordinates are source points and maps_url is a map search link.
| Argument | Type | Description |
|---|---|---|
| day | any | |
| limit | any | |
| district | any |
{
"type": "object",
"title": "istanbul_market_scheduleArguments",
"properties": {
"day": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Day",
"default": null
},
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": null
},
"district": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "District",
"default": null
}
}
}Return official Metro İstanbul equipment/total counts and current equipment fault details, optionally filtered by line, station, or equipment type. This is not an end-to-end accessibility guarantee.
| Argument | Type | Description |
|---|---|---|
| line | any | |
| limit | any | |
| station | any | |
| equipment_type | any |
{
"type": "object",
"title": "istanbul_metro_accessibility_statusArguments",
"properties": {
"line": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Line",
"default": null
},
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": null
},
"station": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Station",
"default": null
},
"equipment_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Equipment Type",
"default": null
}
}
}Summarize mobility near a static place reference or coordinates. district (all 39 Istanbul districts) is exclusive with place/coordinates and returns parking only, without distances. District-only place names do the same. For Acıbadem specify 'Acıbadem, Kadıköy' or 'Acıbadem, Üsküdar'. Not address geocoding.
| Argument | Type | Description |
|---|---|---|
| lat | any | |
| lon | any | |
| limit | any | |
| place | any | |
| district | any | |
| radius_m | integer |
{
"type": "object",
"title": "istanbul_mobility_nearbyArguments",
"properties": {
"lat": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Lat",
"default": null
},
"lon": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Lon",
"default": null
},
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": null
},
"place": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Place",
"default": null
},
"district": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "District",
"default": null
},
"radius_m": {
"type": "integer",
"title": "Radius M",
"default": 1500
}
}
}Find city services by kind and coordinates, or parking/pharmacy by district. bbox and types apply only to city_feature (parking, metro_station, air_quality_station, public_transport_stop, wifi, ev_charging, taxi_stand, market). air_quality includes latest readings; city_feature has station locations only. Static layers return published locations, not live status. District lists have no distances. Pharmacy records include name, district, address, phone, map links, provenance and freshness; maps_search_url is address search, not a verified pin. Pharmacy duty-end times are not guaranteed. Card/social locations are static, not live operating status.
| Argument | Type | Description |
|---|---|---|
| lat | any | |
| lon | any | |
| bbox | any | |
| kind | string | |
| limit | any | |
| types | any | |
| district | any | |
| radius_m | any |
Return a joined neighborhood profile from social, building, and earthquake scenario records.
| Argument | Type | Description |
|---|---|---|
| limit | any | |
| district* | string | |
| neighborhood | any |
{
"type": "object",
"title": "istanbul_neighborhood_profileArguments",
"required": [
"district"
],
"properties": {
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": null
},
"district": {
"type": "string",
"title": "District"
},
"neighborhood": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Neighborhood",
"default": null
}
}
}Search GTFS stop names or return published departures for selected stops. Use stop_query with limit only to discover stop_id candidates by name, including Turkish/ASCII spellings (Kadıköy/kadikoy). This mode returns stops, NOT departures. Same-name stops remain separate; never choose the first automatically. Approximate spelling suggestions are labeled, not matches. Ask the user to select a candidate using name/map, then call with stop_id. stop_code identifies the published stop sign when present. stop_desc and platform_direction_text preserve source text; they are not inferred route directions. Missing metadata stays null; districts are not inferred. at is an ISO datetime with a UTC offset; omitted means now in Europe/Istanbul. The search covers 24 hours. stop_id and coordinates are mutually exclusive. line matches the published route short name. Times are scheduled, never live ETA, delays or proof of service. Outside-calendar queries are unavailable.
| Argument | Type | Description |
|---|---|---|
| at | any | |
| lat | any | |
| lon | any | |
| line | any | |
| limit | any | |
| stop_id | any | |
| radius_m | integer |
Query IBB CKAN DataStore records with guarded filters and limits. API reference: https://docs.ckan.org/en/latest/maintaining/datastore.html Uses datastore_search, not SQL; field names come from the resource schema.
| Argument | Type | Description |
|---|---|---|
| limit | any | |
| filters | any | |
| resource_id* | string |
{
"type": "object",
"title": "istanbul_query_resourceArguments",
"required": [
"resource_id"
],
"properties": {
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": null
},
"filters": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Filters",
"default": null
},
"resource_id": {
"type": "string",
"title": "Resource Id"
}
}
}Search the IBB open data catalog.
| Argument | Type | Description |
|---|---|---|
| limit | any | |
| query* | string | |
| formats | any |
{
"type": "object",
"title": "istanbul_search_datasetsArguments",
"required": [
"query"
],
"properties": {
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": null
},
"query": {
"type": "string",
"title": "Query"
},
"formats": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Formats",
"default": null
}
}
}Return Istanbul citywide traffic index.
No arguments.
{
"type": "object",
"title": "istanbul_traffic_statusArguments",
"properties": {}
}Get IETT line info, ordered stops or planned main-terminal departures. limit applies only to departures. This is not live intermediate-stop ETA. Cross-operator service notices are provided by istanbul_transport_disruptions.
| Argument | Type | Description |
|---|---|---|
| limit | any | |
| action | string | |
| line_code* | string |
{
"type": "object",
"title": "istanbul_transit_lineArguments",
"required": [
"line_code"
],
"properties": {
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": null
},
"action": {
"enum": [
"info",
"stops",
"departures"
],
"type": "string",
"title": "Action",
"default": "info"
},
"line_code": {
"type": "string",
"title": "Line Code"
}
}
}Return current official disruptions and service announcements across supported transport operators.
| Argument | Type | Description |
|---|---|---|
| line | any | |
| mode | any | |
| limit | any | |
| operator | any |
{
"type": "object",
"title": "istanbul_transport_disruptionsArguments",
"properties": {
"line": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Line",
"default": null
},
"mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Mode",
"default": null
},
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": null
},
"operator": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Operator",
"default": null
}
}
}Get ISKI active faults (district or fault_number) or dam occupancy. Dam filters apply only to dams; fault_number is exclusive with district. Nearby faults are provided by istanbul_nearby(kind="water_fault"). Results carry fallback freshness and approximate fault locations; no restoration guarantee.
| Argument | Type | Description |
|---|---|---|
| kind | string | |
| limit | any | |
| dam_name | any | |
| district | any | |
| fault_number | any | |
| min_occupancy | any |
{
"type": "object",
"title": "istanbul_water_statusArguments",
"properties": {
"kind": {
"enum": [
"faults",
"dams"
],
"type": "string",
"title": "Kind",
"default": "faults"
},
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": null
},
"dam_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Dam Name",
"default": null
},
"district": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "District",
"default": null
},
"fault_number": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Fault Number",
"default": null
},
"min_occupancy": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Min Occupancy",
"default": null
}
}
}{
"type": "object",
"title": "istanbul_nearbyArguments",
"properties": {
"lat": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Lat",
"default": null
},
"lon": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Lon",
"default": null
},
"bbox": {
"anyOf": [
{
"type": "array",
"items": {
"type": "number"
}
},
{
"type": "null"
}
],
"title": "Bbox",
"default": null
},
"kind": {
"enum": [
"city_feature",
"parking",
"pharmacy",
"istanbulkart",
"social_facility",
"metro_station",
"air_quality",
"water_fault"
],
"type": "string",
"title": "Kind",
"default": "city_feature"
},
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": null
},
"types": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Types",
"default": null
},
"district": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "District",
"default": null
},
"radius_m": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Radius M",
"default": null
}
}
}| stop_query | any |
{
"type": "object",
"title": "istanbul_next_departuresArguments",
"properties": {
"at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "At",
"default": null
},
"lat": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Lat",
"default": null
},
"lon": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Lon",
"default": null
},
"line": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Line",
"default": null
},
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": null
},
"stop_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Stop Id",
"default": null
},
"radius_m": {
"type": "integer",
"title": "Radius M",
"default": 500
},
"stop_query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Stop Query",
"default": null
}
}
}