MCP App Store
by KeenEthics
Other
AçıkSilivri Havadis icon

AçıkSilivri Havadis

by AçıkSilivri

Overview

Açık Silivri Havadis gives Claude read-only access to sourced journalistic reporting on the Istanbul Metropolitan Municipality trial, including hearings, roster, transcript search, accusations, defenses, evidence, statements, expert opinions, and cross-examinations.

Tools

get_accusation

Claude
Returns full accusation document — legal basis, description, and referenced pages from the indictment.

get_accusations_vs_defense

Claude
Cross-cutting iddia (accusation) ↔ savunma (defense) map — the canonical aggregate for any 'how does the defense respond to charge X?' question. Use this before reaching for individual get_defense / get_cross_examination (çapraz sorgu) calls when you don't yet know which docs are relevant. Three drill modes: - Catalog (cheap default, no args): every subject accusation as a lean discovery row — key, label, title, isRefuted, linked accusation keys, attendeeCount, and counts of linked defenses / cross-examinations / evidences / expert opinions. Summaries, attendee details, and facet arrays are omitted — drill with sa_key for those. Response: {subjectAccusations: [...], total, include: [], mode: 'catalog-shallow'}. - Catalog + facets (include=['defenses','crossExaminations','evidences','expertOpinions','evaluations']): adds the listed facet arrays onto every lean row. Response: {subjectAccusations: [...with facets], total, include: [...], mode: 'catalog-with-facets'}. Each include adds payload; passing all five materializes a large shape — usually the wrong move. - Single SA full picture (sa_key='eylem-001'): returns one SA's full row including summary and every facet, plus a derived coverage block (defendantCount / respondedCount / silentCount / silentDefendants[]) reporting which charged defendants have not yet filed a defense or been cross-examined. Response: {subjectAccusation: {...}}. Mutually exclusive with include (sa_key always returns everything). Identify SA keys via list_subject_accusations, or via subjectAccusations.key entries on docs returned by other tools.

get_attendee

Claude
Returns a single attendee's details (bio, role, attorneys, detention status). Includes courtProcess for defendants — accusations, key events, doc counts, and defenseHearings (per-defendant rollup of hearings where they were the day's primary defender or were cross-examined / çapraz sorgu'ya çıktı; see get_glossary.fields.defenseHearings for shape). NOTE: defenseHearings is only present for sanık (defendant) and müşteki-sanık (defendant who is also a complainant). Its absence on attorneys (mudafi), judges (mahkeme-baskani), witnesses (tanık), or experts (bilirkişi) means 'not a defendant', not 'never appeared' — those parties speak via attendeeEntries instead. For defendants, courtProcess splits formal charges (subjectAccusations) from mention-only SAs (mentionedInSAs) and from no-penalty SAs (noPenaltySAs, where the prosecution asks 'ceza verilmesine yer olmadığına' — never present these as charges) — see get_glossary.fields. For a full defendant overview, prefer get_defendant_profile.

get_attendee_entries

Claude
Returns hearing timeline entries for a specific attendee. Heavy speakers (e.g. the primary defendant) accumulate hundreds of entries across 25+ hearing days — narrow with at least one of: hearing_id (single day), since_hearing_id/until_hearing_id (range by gun-N number), keyword (Turkish-aware substring on entry text). With no narrowing, the most recent limit entries are returned, newest first. Response shape: {items, total (this attendee's full entry count across all hearings), matched (count after filters applied), returned (length of items[] after limit slicing), truncated (true when matched > returned — narrow with stricter filters; no offset/pagination available), limit, ordering: 'chronological' | 'recent_first'}.

get_case

Claude
[Orientation tool — call on cold start alongside get_hearing_state and get_glossary.] Returns case metadata (title, court, start date) for the İBB (İstanbul Büyükşehir Belediyesi / Istanbul Metropolitan Municipality) corruption trial, plus aggregate stats (total hearings, defendants, attendees). Confirms what trial this MCP serves — also called the 'Silivri trial' after the prison where most defendants are detained.

get_cross_examination

Claude
Returns the full cross-examination (çapraz sorgu) document — summary, per-subject-accusation evaluations with strength ratings (strong/moderate/weak/unaddressed), disputed evidences, recanted statements. For the Q&A transcript itself, read the hearing entries via get_entries filtered on entry_type='capraz-sorgu'.

get_defendant_profile

Claude
Single-shot defendant overview — combines attendee info (bio, role, attorneys, detention status), court process (accusations, key events, verdict, doc counts, defenseHearings rollup), and a LEAN linkedDocs SA-index (one row per subject accusation: key/title/label + isFormalCharge + isNoPenalty). Charge vs mention vs no-penalty: courtProcess.subjectAccusations lists SAs the defendant is FORMALLY charged in, courtProcess.mentionedInSAs lists SAs where they are only named (witness/victim/secondary), and courtProcess.noPenaltySAs lists SAs where they are a named şüpheli but the prosecution asks for NO penalty (etkin pişmanlık / CMK 223/4) — the three are disjoint, and noPenaltySAs must never be reported as a charge. The same three-way split is on linkedDocs.subjectAccusations[]: isFormalCharge: true = charged, isFormalCharge: false + isNoPenalty: true = no penalty sought (with noPenaltyBasis[] / noPenaltyReason), both false = mention only. For one eylem's FULL detail (own + related defenses/cross-examinations, strengths, disputed evidences, fıkra-exact accusations[]), drill with get_linked_docs(key, sa_key). The courtProcess.defenseHearings array lists every hearing where the defendant was the day's primary defender, was cross-examined (çapraz sorgu), or both — each row is {id, dayNumber, date, role: 'main'|'crossExamined'|'both'} sorted by dayNumber ascending. Use this first for any defendant question. Only works for sanık (defendant) and müşteki-sanık (defendant who is also a complainant) roles — for non-defendant attendees (attorneys / mudafi, judges / mahkeme-baskani, witnesses / tanık, experts / bilirkişi), use get_attendee instead.

get_defense

Claude
Returns the full defense document — summary, content text, per-subject-accusation evaluations with strength ratings (strong/moderate/weak/unaddressed), disputed evidences, recanted statements. Use get_defense_entries for the structured Q&A transcript.

get_defense_entries

Claude
Returns the structured Q&A transcript for a defense — speaker turns ordered by seqNo. Each turn has attendee (speaker key), attendeeLabel, text, and optional note/ref_urls. Call after get_defense when the summary isn't enough.

get_entries

Claude
Returns the timeline entries for a hearing day — testimony, cross-examinations, narration, journalist quotes. Each entry has an attendee (speaker, null = narrator), text, time, optional references. Filter by attendee key or entry_type (see enum). This is the tool to use for any 'show me X from hearing day Y' question — cross-examination turns, break summaries, journalist quotes, or one person's lines. Do not search by keyword to filter by type; use the entry_type filter directly. Recipes: - All cross-examination turns from one day: hearing_id='gun-31', entry_type='capraz-sorgu' - One person's lines from one day: hearing_id='gun-31', attendee='elcin-karaoglu' - Break summaries only: hearing_id='gun-31', entry_type='ara-ozet' - Journalist quotes only: hearing_id='gun-31', entry_type='muhabir-alintisi' - Everything from one day: hearing_id='gun-31' (no filters) Response shape: {items[], total, hearing_id, state: 'scheduled'|'active'|'ended', note?}. The note field appears when the hearing is in catalog but entries are unavailable (e.g. state='scheduled' → empty items + note). Hearing not found in catalog → error redirecting to list_hearings.

get_evidence

Claude
Returns full evidence document — summary, category, source institution, contestation rollup (challenging defenses/cross-examinations with grounds), linked subject accusations.

get_expert_opinion

Claude
Returns full expert opinion document — summary, content, linked subject accusations.

get_glossary

Claude
[Orientation tool — call on cold start alongside get_case and get_hearing_state.] Returns the full glossary of Turkish judicial vocabulary used across this MCP — role slugs, entry types, document types, strength rating semantics, legal concepts, and field-name conventions. Small and stable; safe to cache for the session. Call again when you encounter an unfamiliar Turkish term in tool output.

get_hearing

Claude
Returns a single hearing day by id (e.g. 'gun-34') — date, attendees, state, mainDefendants[], ceGeneratedFor[]. Use get_entries(hearing_id) to fetch the timeline content for that day.

get_hearing_state

Claude
[Orientation tool — call on cold start alongside get_case and get_glossary.] Returns the currently-active hearing (when court is in session) and the last completed hearing. Use this to orient in the trial timeline before any other query.

get_indictment_section

Claude
Returns a single indictment section — title, path, parentSection, ancestors, depth.

get_linked_docs

Claude
Per-defendant SA→docs index. Two modes: - Default (key only): a LEAN index — one row per subject accusation with key/title/label, isFormalCharge and isNoPenalty (charged / no-penalty / mention-only are three DISJOINT states: isFormalCharge true = formally charged; isFormalCharge false + isNoPenalty true = named şüpheli but the prosecution asks for NO penalty, never report it as a charge; both false = mention-only — witness/victim/secondary). Small and safe for any client; use it to discover which SAs a defendant is linked to. This lean index is already embedded in get_defendant_profile.linkedDocs. - Drill (key + sa_key): the FULL detail for ONE subject accusation — the defendant's own + related (co-defendant) defenses & cross-examinations with strength evaluations (strong/moderate/weak), disputed evidences, and evidence/expert-opinion links. Bounded to a single eylem so the response stays within MCP client caps.

get_motion

Claude
Returns the full motion (talep) document — summary, verbatim content, motionType (own/attorney), owner defendant, and filing attorney (for motionType='attorney'). No subject-accusation analysis is attached — motions are procedural requests, not defenses. Use get_motion_entries for the structured transcript.

get_motion_entries

Claude
Returns the verbatim transcript for a motion (talep) — speaker turns ordered by seqNo. Each turn has attendee (speaker key — usually the request's owner or their attorney), attendeeLabel, text, and optional note/ref_urls. Motions carry no subject-accusation tags. Call after get_motion when the summary isn't enough.

get_poster_card

Claude
Returns the AvD poster card for a subject accusation (eylem) — themed single-line defense arguments distilled from the defenses, the data behind the shareable poster PNGs at /sa/{key}/poster-{page}.png. Returns an error if no poster has been distilled for this key.

get_statement

Claude
Returns full statement document — summary, content text, linked subject accusations, and page references.

get_subject_accusation

Claude
Returns full subject accusation — summary of the alleged action, linked accusations, involved attendees, and refutation status.

list_accusations

Claude
Lists criminal charges (TCK articles) in the indictment. Returns key, title, legalBasis. Small set (~19 charges). Response: {items[]}. attendee_key cross-references via courtProcess/{key}.json to return only charges levied against that defendant — there is no direct attendee field on accusation rows; this is a relationship traversal. No other server filters; for SA-anchored views use get_accusations_vs_defense. Pagination: pass limit (1–200, default 100) and offset; the response carries total, returned, hasMore. Keep paging while hasMore is true. Heavy pages are auto-trimmed to fit the response size cap (signalled by a warning), so returned may be less than limit even mid-list.

list_attendees

Claude
Lists trial attendees with server-side filtering. The catalog is large (~1000 rows) and dominated by attorneys (mudafi = defense attorney / katilan-vekili = intervenor's attorney) — almost every realistic query should pass at least one filter. Filters compose with AND. Use get_glossary.roles for the full slug→meaning table. Response shape: {items, total (catalog size before filters), matched (after filters), truncated, limit: 200}. Hard cap is 200 with no offset/pagination — when truncated=true, narrow filters until matched ≤ 200. Common recipes: - defendants only (sanık): roles=['sanik','musteki-sanik'] - non-attorneys: exclude_roles=['mudafi','katilan-vekili'] - find by name: name_contains='İmamoğlu' (pass either ASCII 'imamoglu' or diacritic 'İmamoğlu' — both match) - detained defendants (tutuklu sanık): roles=['sanik'], detained=true - cooperating witnesses (itirafçı): cooperating=true

list_cross_examinations

Claude
Lists cross-examination sessions (çapraz sorgu — courtroom questioning of a defendant/witness/expert). Returns key, title, date, stage (against-indictment/on-the-merits — same semantics as on defenses), hearingId, dayNumber, examined (the attendee being questioned — sanık (defendant) / tanık (witness) / bilirkişi (court-appointed expert) / müşteki (complainant)), examiner, examiners, evaluationSummary. Response: {items[]}. attendee_key cross-references via courtProcess/{key}.json (CEs where this person was examined). No other server filters — for stage/hearingId/dayNumber/examiner slicing, fetch the index and filter client-side. Pagination: pass limit (1–200, default 100) and offset; the response carries total, returned, hasMore. Keep paging while hasMore is true. Heavy pages are auto-trimmed to fit the response size cap (signalled by a warning), so returned may be less than limit even mid-list.

list_defenses

Claude
Lists defense pleas (savunma) — either the defendant's own statement or their attorney's plea. Returns key, title, date, defenseType (own/attorney), stage (against-indictment/on-the-merits), defendant (sanık who owns the plea), attendee (plea author — same as defendant for 'own', attorney for 'attorney'), hearingIds, isWithdrawn, evaluationSummary. stage distinguishes the initial sorgu/savunma responding to the indictment ('against-indictment', the default) from the final defense after the prosecutor's closing opinion / mütalaa ('on-the-merits' = esas hakkında). Response: {items[]}. attendee_key cross-references via courtProcess/{key}.json to return one defendant's pleas. No other server filters — for defenseType, stage, hearingId, or isWithdrawn slicing, fetch the index and filter client-side; for SA-anchored views use get_accusations_vs_defense. Pagination: pass limit (1–200, default 100) and offset; the response carries total, returned, hasMore. Keep paging while hasMore is true. Heavy pages are auto-trimmed to fit the response size cap (signalled by a warning), so returned may be less than limit even mid-list.

list_evidences

Claude
Lists claimed evidence from the indictment (financial records, digital evidence, surveillance, etc.). Returns key, title, category, source, date, contestation status, and linked subject accusations. Response: {items[]}. attendee_key cross-references via courtProcess/{key}.json (evidence linked to SAs that defendant is charged with). No other server filters — for category, source, or contestation slicing, fetch the index and filter client-side. Pagination: pass limit (1–200, default 100) and offset; the response carries total, returned, hasMore. Keep paging while hasMore is true. Heavy pages are auto-trimmed to fit the response size cap (signalled by a warning), so returned may be less than limit even mid-list.

list_expert_opinions

Claude
Lists expert/bilirkişi reports filed in the case. Returns key, title, date, expert name. Response: {items[]}. attendee_key cross-references via courtProcess/{key}.json (expert opinions linked to SAs that defendant is charged with). No other server filters; fetch the index and filter client-side for any other slicing. Pagination: pass limit (1–200, default 100) and offset; the response carries total, returned, hasMore. Keep paging while hasMore is true. Heavy pages are auto-trimmed to fit the response size cap (signalled by a warning), so returned may be less than limit even mid-list.

list_hearings

Claude
Lists all court hearing days with dates, attendees, and state. Use get_hearing(id) for a single hearing. Pass state (scheduled/active/ended) to filter. Pass defendant (attendee key) to filter to days where that defendant was a main defender or was cross-examined; pair with defendant_role to narrow. Each hearing has dayNumber, label, and (when set) mainDefendants[] / ceGeneratedFor[] arrays. Recipes: - All days where Imamoğlu came up: defendant='imamoglu' - Days Imamoğlu was cross-examined: defendant='imamoglu', defendant_role='crossExamined' - Completed days where Imamoğlu was primary defender: defendant='imamoglu', defendant_role='main', state='ended' The defendant-filtered result is the same data as get_defendant_profile(X).courtProcess.defenseHearings — they read the same source and agree by construction. Use whichever side fits your query (hearing-first vs defendant-first).

list_indictment_sections

Claude
Lists hierarchical sections of the indictment (iddianame), e.g. '2.3.1 Boğaziçi İmar' (Bosphorus Zoning). Returns key, path (numeric), title, parentSection. Useful for browsing indictment structure. Response: {items[]}. attendee_key has no effect here — global hierarchical structure, no per-defendant view; browse via parentSection / path / depth. Pagination: pass limit (1–200, default 100) and offset; the response carries total, returned, hasMore. Keep paging while hasMore is true. Heavy pages are auto-trimmed to fit the response size cap (signalled by a warning), so returned may be less than limit even mid-list.

list_motions

Claude
Lists procedural requests/petitions (talep) filed with the court — e.g. release requests (tahliye talebi), recusal (reddi hakim), or other petitions. Either the defendant's own request or one filed by their attorney. Returns key, title, summary, date, motionType (own/attorney), defendant (sanık who owns the request), attendee (filer — same as defendant for 'own', the attorney for 'attorney'), hearingIds. Response: {items[]}. attendee_key cross-references via courtProcess/{key}.json (motions linked to that defendant). Motions carry NO subject-accusation analysis — they are absent from get_accusations_vs_defense and have no evaluations; they are the 'Talepler' track alongside savunma (defense). Use get_motion_entries for the verbatim transcript. Pagination: pass limit (1–200, default 100) and offset; the response carries total, returned, hasMore. Keep paging while hasMore is true. Heavy pages are auto-trimmed to fit the response size cap (signalled by a warning), so returned may be less than limit even mid-list.

list_statements

Claude
Lists witness/defendant statements from the investigation and trial. Returns key, title, date, attendee, cooperatingWitness flag, isRecanted flag. Response: {items[]}. attendee_key cross-references via courtProcess/{key}.json (statements linked to that defendant). No other server filters — for hearing-day, cooperatingWitness, or isRecanted slicing, fetch the index and filter client-side. Pagination: pass limit (1–200, default 100) and offset; the response carries total, returned, hasMore. Keep paging while hasMore is true. Heavy pages are auto-trimmed to fit the response size cap (signalled by a warning), so returned may be less than limit even mid-list.

list_subject_accusations

Claude
Lists concrete alleged actions/schemes from the indictment (iddianame), e.g. 'Boğaziçi İmar Rüşvet Sistemi' (Bosphorus Zoning Bribery Scheme). Returns key, title, label, linked accusation keys. Response: {items[]}. attendee_key cross-references via courtProcess/{key}.json to return SAs (subject accusations) the defendant is FORMALLY CHARGED in (courtProcess.subjectAccusations) — mention-only SAs (courtProcess.mentionedInSAs: witness/victim/secondary appearances) are NOT included here, and rows carry no charge-vs-mention flag. For the full charge-vs-mention picture per defendant (isFormalCharge + fıkra-exact charges per SA) use get_linked_docs / get_defendant_profile. No other server filters; for the full iddia (accusation) ↔ savunma (defense) map use get_accusations_vs_defense. Pagination: pass limit (1–200, default 100) and offset; the response carries total, returned, hasMore. Keep paging while hasMore is true. Heavy pages are auto-trimmed to fit the response size cap (signalled by a warning), so returned may be less than limit even mid-list.

search_entries

Claude
Turkish-aware keyword search across hearing transcripts (İ↔i, Ş↔ş, Ğ↔ğ, Ü↔ü, Ç↔ç, Ö↔ö folded both ways — pass either ASCII or diacritic forms). Returns matches most-recent-hearing-first. Default to global search (omit hearing_id) for any 'find every mention of X' / 'has X come up?' question — one call scans up to 50 most-recent hearings and returns combined results. DO NOT call this tool repeatedly with different hearing_id values to cover more days; that is always worse than the global mode. Pass hearing_id only when the user explicitly scopes the question to one day. Response shape: {results[], total (matches before limit slice), truncated (true when total > limit), limit, hearings_searched, hearings_truncated (true when more than 50 hearings exist and only the 50 most recent were searched)}. If hearings_truncated is true and the user wants older days, tell them — don't iterate hearing-by-hearing. If you need more than 200 results, narrow the keyword instead of paging — there is no offset.

App Stats

34

Tools

Claude

Platforms

Works with

Claude

Data refreshed daily