# Istanbul MCP

> Read-only Istanbul open city data: transport, parking, water, nearby services and datasets.

- name: io.github.Batu1-1an/istanbul-mcp
- version: 0.2.6
- connection class: R0 (autonomous)
- trust: 96/100
- quality: 90/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.Batu1-1an%2Fistanbul-mcp
- tools: https://api.protogrid.dev/v1/servers/io.github.Batu1-1an%2Fistanbul-mcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "istanbul-mcp": {
      "type": "http",
      "url": "https://istanbulmcp-production.up.railway.app/mcp/"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 98
- freshness: 100
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-96% +updated-13d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 90/100 (strong)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 18 of 18 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 3,480 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 8 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 18, about 3,480 tokens to load them all
- tool set hash: ea2ba1e1ee849ef77a4e99781980173a
- tools last changed: 2026-10-25T22:15:48.592Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.Batu1-1an/istanbul-mcp.svg)](https://protogrid.dev/servers/io.github.Batu1-1an/istanbul-mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-25 `istanbul_gtfs_snapshot_status` changed (outputSchema)
- 2026-10-25 `istanbul_next_departures` changed (outputSchema)
- 2026-10-25 `istanbul_market_schedule` changed (outputSchema)
- 2026-10-25 `istanbul_transport_disruptions` changed (outputSchema)
- 2026-10-25 `istanbul_transit_line` changed (outputSchema)
- 2026-10-25 `istanbul_water_status` changed (outputSchema)
- 2026-10-25 `istanbul_traffic_status` changed (outputSchema)
- 2026-10-25 `istanbul_nearby` changed (outputSchema)

Full history: https://api.protogrid.dev/v1/servers/io.github.Batu1-1an%2Fistanbul-mcp/changes

## Remotes

- https://istanbulmcp-production.up.railway.app/mcp/ (streamable-http, auth none, reachable true, uptime30d 0.9591837)

## Packages

_none_

## Tools (18)

- `istanbul_city_services_nearby`: 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.
    
- `istanbul_datastore_query`: 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
    
- `istanbul_get_dataset`: Return metadata and resources for one IBB dataset.
- `istanbul_get_resource_schema`: Return DataStore field schema for a resource.
- `istanbul_gtfs_snapshot_status`: 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.
    
- `istanbul_health`: Return Istanbul MCP service readiness.
- `istanbul_market_schedule`: 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.
    
- `istanbul_metro_accessibility_status`: 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.
- `istanbul_mobility_nearby`: 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.
    
- `istanbul_nearby`: 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.
    
- `istanbul_neighborhood_profile`: Return a joined neighborhood profile from social, building, and earthquake scenario records.
- `istanbul_next_departures`: 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.
    
- `istanbul_query_resource`: 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.
    
- `istanbul_search_datasets`: Search the IBB open data catalog.
- `istanbul_traffic_status`: Return Istanbul citywide traffic index.
- `istanbul_transit_line`: 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.
    
- `istanbul_transport_disruptions`: Return current official disruptions and service announcements across supported transport operators.
- `istanbul_water_status`: 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.
    
