İŞKUR Jobs

io.github.mohammad-abbasi-shPublished by GitHub account mohammad-abbasi-shv0.1.0Updated Nov 14, 2026

Unofficial read-only MCP server for İŞKUR — open job listings, details, provinces, announcements.

Overview

AI-generated overview

Unofficial read-only MCP server that lets an assistant search İŞKUR's public Turkish job listings, read job details, list provinces and fetch announcements.

What you can do
  • Search open job listings by keyword, city, date range, work type and education, with paging
  • List jobs posted in the last 24 hours, optionally for one city
  • Read one listing's detail: description, skills, occupation, experience and education levels
  • List the 81 Turkish provinces with code and name
  • Read İŞKUR's official announcements and check whether the job portal is reachable
When to use it
Useful when you want an assistant to look up Turkish public employment listings, compare openings in a given province, or summarize İŞKUR announcements without browsing the site by hand.
Requirements
Runs locally over stdio as a Python package (uvx or pip install, needs uv or Python with mcp<2 and curl-cffi). No account, API key or environment variable is declared. Needs internet access to esube.iskur.gov.tr and www.iskur.gov.tr.
Before you install
Read-only, but it scrapes a third-party government site: searches are slow (about 40 seconds per call) and can be blocked, so results may be incomplete or fail. Employer names are never returned, and detail pages lack deadline and city, which come from search results. It is unofficial and not affiliated with İŞKUR.

Installation

In SourceWeft

  1. Open İŞKUR Jobs in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

iskur-mcp 🇹🇷

mcp-name: io.github.mohammad-abbasi-sh/iskur-mcp

Unofficial read-only MCP server for İŞKUR (iskur.gov.tr) — Türkiye İş Kurumu, the Turkish Employment Agency. Search the public open-job listings from the esube portal (keyword, city, date range, work type, education, pagination), get one job's detail (description, required skills, occupation, experience, education), list the 81 provinces, and read İŞKUR's official announcements.

Built by Mohammad Abbasi as part of the "Turkey MCP factory" (Sepehr-style pipeline). Not affiliated with İŞKUR or Türkiye İş Kurumu.

Note: employer names are hidden behind login on the site and are never returned; the detail page carries no deadline or city — those come from the search results. The search is a WebForms postback and is slow (~40s), so prefer page 1 and narrow filters.

For AI agents

Add to your MCP client config (stdio):

json
{  "mcpServers": {    "iskur": {      "command": "uvx",      "args": ["iskur-mcp==0.1.0"]    }  }}

Or run locally: python -m iskur_mcp.server (needs mcp<2, curl-cffi).

Tools

ToolDescription
iskur_search_jobsSearch open job listings — keyword (e.g. "garson"), city name or code (e.g. "İstanbul" / "34"), date_range ("all" / "last_24h" / "last_week" / "last_15d"), work_type ("all" / "full" / "part"), education ("any" / "illiterate" / "literate" / "primary" / "middle" / "high" / "associate" / "bachelor" / "master" / "phd"), page (15/page, total + page_count returned), limit 1..15
iskur_latest_jobsJobs posted in the last 24 hours, optionally in one city; limit 1..15
iskur_get_jobDetail of one listing — job_no (e.g. "00009899349"): description, skills, occupation, experience, min/max education
iskur_list_citiesThe 81 provinces — code + name (e.g. "34" İstanbul, "6" Ankara)
iskur_list_announcementsİŞKUR's official announcements (duyurular); limit 1..10
iskur_healthCheck whether İŞKUR's job portal is reachable (ok / blocked / error)

Example output (iskur_search_jobs / "garson", İstanbul, 2026-11-13):

json
{"keyword": "garson", "city": "İstanbul", "page": 1, "page_count": 5, "total": 63, "jobs": [{"job_no": "00009899349", "title": "Servis Elemanı (Garson)",  "sector": "Özel", "period": "Daimi", "work_type": "Tam Zamanlı",  "open_positions": 1,  "location": {"city": "İSTANBUL", "district": "SARIYER"},  "deadline": "30.11.2026", "days_left": "17 Gün Kaldı",  "url": "https://esube.iskur.gov.tr/Istihdam/AcikIsIlanDetay.aspx?uiID=00009899349&isyeriTuru=%C3%96zel"}]}

How it works

Job search lives on esube.iskur.gov.tr (/Istihdam/AcikIsIlanAra.aspx, classic ASP.NET WebForms): GET the form for session cookies + the __VIEWSTATE family, then POST with __EVENTTARGET=ctl04$ctlAcikIsPageCommand$CommandItem_Search. Results render in the grid table ctl04_ctlGridAcikIslerListeDetail, 15 rows per page; each row has a PopupJobDetails('<jobno>','Özel','0') title link, spans for sector / period / work type, Label9 (open positions), ctlCalismaYeriDL ("İl Geneli Başvuru (Çalışma Yeri: İSTANBUL / SARIYER)"), ctlSonBasvuruTarihi (deadline) and ctlSonBasvuruDL ("17 Gün Kaldı"); "Toplam Kayıt: 63" is the total and the pager jumps via txtCurrentPage + btnChangeCurrentPage. Job detail is a plain GET (AcikIsIlanDetay.aspx?uiID=...&isyeriTuru=Özel, ~2s, no cookies): ctlGenelSartlar (description), ctlGenelSartlar2 (skills), ctlMeslekLabel (occupation) + experience spans, ctlOgrenimAsgari / ctlOgrenimAzami (education). Announcements are a plain GET of www.iskur.gov.tr/duyurular/ (<li class="clearfix"> with a <div class="date"> and a /duyurular/... link). Transport uses Chrome TLS impersonation (curl-cffi, chrome120 with rotation); the search postback gets a 180s timeout and one retry with a fresh session; requests are spaced ~0.8s apart; everything is read-only.

Install

bash
uvx iskur-mcp==0.1.0   # run directly (needs uv)# orpip install iskur-mcp==0.1.0iskur-mcp    # starts the MCP server on stdio

Tests

bash
python -m venv .venv && .venv/bin/pip install -e ..venv/bin/python -m unittest discover -s tests -v

Offline tests run on recorded fixtures (real pages fetched 2026-11-13); live tests hit esube.iskur.gov.tr and www.iskur.gov.tr (the search postback is slow, ~40s per call — live tests take ~3 minutes). Tests green at build time (see repo for counts) plus an MCP stdio smoke test.

Roadmap

  • Occupation (meslek) autocomplete search (the form's ctlMeslek field)
  • Kamu (public-sector) listings via the sector radio
  • TYP / İŞKUR Gençlik programme listings (IstIupArama / TypArama)

License

MIT — see LICENSE.


Built by Mohammad Abbasi — Almanibama · mabbasi.ir

Source: README.md at commit f5886b1

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.0LatestNov 14, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts