Istanbul MCP
io.github.Batu1-1an/istanbul-mcpVersion 0.2.6Read-only Istanbul open city data: transport, parking, water, nearby services and datasets.
Status
Responds139 msAnswered our handshake without sign-in.- Last checked
- Nov 14, 2026, 14:36 UTC
- Latency
- 139 ms
- Remotes responding
- 1 of 1
- Sign-in
- No sign-in
- Hosting
- Hosted outside the EU (detected)
- Registry data as of
- Nov 14, 2026, 22:14 UTC
Data from the official MCP Registry, checked by run.zero. How we check
Connect
Streamable HTTP
https://istanbulmcp-production.up.railway.app/mcp/Responds139 msNo sign-in
Claude Code
claude mcp add --transport http istanbul-mcp https://istanbulmcp-production.up.railway.app/mcp/Claude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: istanbul-mcp
Remote MCP server URL: https://istanbulmcp-production.up.railway.app/mcp/Cursor
{
"mcpServers": {
"istanbul-mcp": {
"url": "https://istanbulmcp-production.up.railway.app/mcp/"
}
}
}VS Code
code --add-mcp '{"name":"istanbul-mcp","type":"http","url":"https://istanbulmcp-production.up.railway.app/mcp/"}'Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
21 tools
Read-only | Idempotent | Open world | ||
|---|---|---|---|---|
istanbul_city_services_nearbySummarize 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.
| No | Yes | Yes | Yes |
istanbul_datastore_queryRun 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
| No | Yes | Yes | Yes |
istanbul_event_detailInspect a search event_id or performance_id: sessions, observed offers and provenance.
IDs must come from event search, never a URL. Biletinial detail is refreshed
with bounded caching when configured. Ticketmaster details use the latest
indexed feed; prices and ticket availability remain unknown. Missing or
retired catalogue coverage is not cancellation.
Preserve start_time_basis, source_time_conflict and per-performance warnings;
published HTML session times can resolve inconsistent JSON-LD offsets.
Flexible-entry tickets have start_at=null; use event_date and do not present
source_start_at as an appointment, opening hour or scheduled visit.
Preserve admission_window and excluded_weekdays. entry_date_restricted=true
marks an explicitly prohibited ticket date; it is not a cancellation claim.
catalogue_retired means retained local sessions are inactive; source_unavailable
means active local records exist but their source snapshot is unusable.
not_found without retained history cannot explain whether a deploy reset or
provider change removed an earlier record.
participation_conditions contains bounded source statements from the event's
description/rules/facts, with provenance, observation time, expired/unknown
status and unverified_topics. These are provider claims, not legal rights,
venue-wide accessibility guarantees or personal eligibility confirmations.
offers[].terms distinguishes admission count, price profile and unknown units.
Optional party_size/ticket_profile or mixed party and budget_includes_fees
produce price_quote for each source session without changing its selection or
filtering the series. Party prices remain observed subtotals, not checkout.
Use description or each performance's about.text to explain the event topic
in 1–2 sentences. Missing text does not establish a plot or theme.
A short/truncated description does not replace the extracted source r | No | Yes | Yes | Yes |
istanbul_events_planBuild deterministic one-day event options, with ICS and calendar links.
Each performance includes about.text when published; explain its topic in
1–2 short sentences, preserving uncertainty when a description is unavailable.
min_events (1–max_events) expresses a REQUIRED minimum; for exactly two stops
set min_events=2,max_events=2. required_categories requires one of each named
type, unlike interests (only allowed types). Complete options satisfy both;
partial_options separately list missing_events/missing_categories and do not
generate calendars. fulfillment.status/reason_codes explain complete, partial,
unverified-budget or unmet requests; never present a partial as a full plan.
party_size/ticket_profile or a mixed party map price the whole group at every
stop. max_price_try is the total observed party basket across ALL stops, not
a per-person cap. budget_includes_fees keeps unknown fee totals unverified.
price_quote ticket quantities, total_price_scope and checkout_total_verified
separate observed subtotals from live checkout/seat guarantees.
date: YYYY-MM-DD or today/tomorrow, default today in Europe/Istanbul.
Use selected event_ids (1–20 from search/detail) or district discovery.
A selected performance_id keeps that exact session; an event_id allows its
series sessions. Missing/ambiguous replacements require a new selection.
Selected IDs still respect date and the 18:00–23:59 default window; provide
the session's date and explicit start_time/end_time for daytime selections.
interests accepts up to five search categories. Window is same-day HH:MM.
interests restricts allowed categories; unrelated fallback is never added.
When the user is explicitly participating as an adult, exclude_child_only=true
removes known upper age limits below 18 before the 20-candidate plan budget;
selected child-only sessions are rejected with child_only_age_range. Default
false preserv | No | Yes | Yes | Yes |
istanbul_events_searchSearch indexed Istanbul event sessions; use event_detail for full verification.
Dates: YYYY-MM-DD or today/tomorrow (Europe/Istanbul), default next 7 days,
maximum 31 days. Times: HH:MM within a day.
Started sessions are excluded by default, even for explicit dates. Use
include_past=true for retained active past sessions; this is not an archive
and expired prices stay unknown. result_info.filter_counts explains exclusions.
start_time_basis records the source of the time. source_time_conflict=true
means published Istanbul HTML session times took precedence over conflicting
JSON-LD times; preserve per-event warnings and verify the ticket page.
timing_kind=flexible_entry has event_date but start_at=null: its source_start_at
is catalogue metadata, never a visit or reservation time. Show the date and
ticket link, and verify opening hours/admission conditions. Clock-filtered
searches exclude date-only flexible tickets; excluded_unverified_time counts them.
admission_window holds published opening/last-entry/closing clocks, not an
appointment. Source excluded_weekdays uses Monday=0..Sunday=6; restricted
dates are excluded and counted in excluded_entry_date. Detail retains them
for inspection with entry_date_restricted=true, never an admission guarantee.
Categories: concert, theatre, opera_ballet, standup, family, festival, exhibition, workshop, sport, seminar,
other. District: one of Istanbul's 39 districts. Coordinates must be paired;
Turkish aliases such as tiyatro, konser, çocuk, atölye are accepted.
query searches titles by default; query_scope=all also searches venue names.
Empty/whitespace query means no text filter. match_mode=words (default)
matches complete normalized words, so Sıla does not match Silahşör.
Use match_mode=prefix explicitly for stems/autocomplete; prefix matches
are related title matches, never proof of artist identity.
radius defaults to 5000m, max | No | Yes | Yes | Yes |
istanbul_get_datasetReturn metadata and resources for one IBB dataset. | No | Yes | Yes | Yes |
istanbul_get_resource_schemaReturn DataStore field schema for a resource. | No | Yes | Yes | Yes |
istanbul_gtfs_snapshot_statusInspect 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 | Yes | Yes | Yes |
istanbul_healthReturn Istanbul MCP service readiness. | No | Yes | Yes | Yes |
istanbul_market_scheduleReturn 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.
| No | Yes | Yes | Yes |
istanbul_metro_accessibility_statusReturn 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. | No | Yes | Yes | Yes |
istanbul_mobility_nearbySummarize 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.
| No | Yes | Yes | Yes |
istanbul_nearbyFind 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.
| No | Yes | Yes | Yes |
istanbul_neighborhood_profileReturn a joined neighborhood profile from social, building, and earthquake scenario records. | No | Yes | Yes | Yes |
istanbul_next_departuresSearch 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.
| No | Yes | Yes | Yes |
istanbul_query_resourceQuery 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.
| No | Yes | Yes | Yes |
istanbul_search_datasetsSearch the IBB open data catalog. | No | Yes | Yes | Yes |
istanbul_traffic_statusReturn Istanbul citywide traffic index. | No | Yes | Yes | Yes |
istanbul_transit_lineGet 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.
| No | Yes | Yes | Yes |
istanbul_transport_disruptionsReturn current official disruptions and service announcements across supported transport operators. | No | Yes | Yes | Yes |
istanbul_water_statusGet 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.
| No | Yes | Yes | Yes |
Details
- Registry status
- Active
- Published
- Oct 25, 2026
- Updated
- Oct 25, 2026
- Categories (suggested)
- Data and analyticsSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
- GDPR
- Not declared