{
  "openapi": "3.1.0",
  "info": {
    "title": "Ediz Yeşilkaya Herkese Açık Kaynak Hizmetleri",
    "version": "1.1.2",
    "description": "Doç. Dr. Ediz Yeşilkaya kişisel sitesindeki sınırlı MCP/A2A kaynak hizmetleri ve SSS list arama adaptörünün HTTP sözleşmesi. SSS yanıtları mevcut kaynak metinleridir; yeni veya kişiye özel tıbbi yanıt, tanı, tedavi, hasta kaydı veya randevu API’si sunulmaz.",
    "contact": {
      "url": "https://www.edizyesilkaya.com.tr/iletisim"
    }
  },
  "servers": [
    {
      "url": "https://www.edizyesilkaya.com.tr"
    }
  ],
  "security": [],
  "paths": {
    "/a2a/": {
      "post": {
        "operationId": "sendSiteTopic",
        "summary": "Konu için site kaynaklarına yönlendir",
        "description": "Sınırlı A2A 1.0 JSON-RPC SendMessage. Parçalar birleştirilip kırpıldıktan sonra konu 1–160 karakter ve kontrol karakterleri içermeyen metin olmalı. Gövde en fazla 32768 bayt. Blog arama URL’si ve varsa llms.txt içeriği döner; makaleler okunmaz, tıbbi cevap üretilmez. Geçmiş ve görev saklanmaz. Streaming/push/uzantılar desteklenmez. Kişisel veya hasta bilgisi göndermeyin. Diğer protokol yöntemleri bu belgede işlev olarak sunulmaz. Sürüm eksikse 0.3 kabul edilip -32009 hatası verilir. Son eğik çizgi korunmalıdır.",
        "parameters": [
          {
            "in": "header",
            "name": "A2A-Version",
            "required": true,
            "schema": {
              "const": "1.0",
              "type": "string"
            },
            "description": "Desteklenen A2A sürümü: 1.0. Başlık eksikse sunucu 0.3 varsayar ve -32009 hatası döndürür."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/A2ASendMessage",
                "type": "object",
                "description": "A2A 1.0 SendMessage isteği. Birleştirilip kırpılan konu 1–160 karakter olmalı; ROLE_USER ve 1–4 düz metin parçası gerekir.",
                "properties": {
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "id": {
                    "type": [
                      "string",
                      "integer"
                    ]
                  },
                  "method": {
                    "const": "SendMessage",
                    "type": "string"
                  },
                  "params": {
                    "type": "object",
                    "properties": {
                      "message": {
                        "type": "object",
                        "properties": {
                          "messageId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 128
                          },
                          "role": {
                            "const": "ROLE_USER",
                            "type": "string"
                          },
                          "contextId": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 128
                          },
                          "parts": {
                            "type": "array",
                            "minItems": 1,
                            "maxItems": 4,
                            "items": {
                              "$ref": "#/components/schemas/TextPart"
                            }
                          }
                        },
                        "required": [
                          "messageId",
                          "role",
                          "parts"
                        ]
                      },
                      "configuration": {
                        "type": "object",
                        "properties": {
                          "acceptedOutputModes": {
                            "type": "array",
                            "items": {
                              "const": "text/plain",
                              "type": "string"
                            }
                          },
                          "returnImmediately": {
                            "type": "boolean"
                          }
                        }
                      }
                    },
                    "required": [
                      "message"
                    ]
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method",
                  "params"
                ]
              },
              "example": {
                "jsonrpc": "2.0",
                "id": 1,
                "method": "SendMessage",
                "params": {
                  "message": {
                    "messageId": "kontrol-1",
                    "role": "ROLE_USER",
                    "parts": [
                      {
                        "text": "boy kısalığı"
                      }
                    ]
                  }
                }
              }
            }
          },
          "description": "JSON-RPC 2.0 istek nesnesi. Parametre ve yöntem çeşitleri ilgili yeniden kullanılabilir giriş şemasında tanımlanmıştır."
        },
        "responses": {
          "200": {
            "description": "JSON-RPC sonucu veya JSON-RPC hata nesnesi. HTTP 200 tek başına işlem başarısı değildir.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/A2ASuccess"
                    },
                    {
                      "$ref": "#/components/schemas/RpcError"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Geçersiz JSON veya istek.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RpcError"
                }
              }
            }
          },
          "403": {
            "description": "İzin verilmeyen Origin başlığı.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RpcError"
                }
              }
            }
          },
          "413": {
            "description": "Gövde sınırı aşıldı.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RpcError"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type application/json olmalı.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RpcError"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/": {
      "post": {
        "operationId": "callPublicMcp",
        "summary": "Herkese açık rehberleri ve arama aracını kullan",
        "description": "Stateless MCP JSON-RPC. Initialize, ping, resources/list, resources/read, tools/list, tools/call ve notifications/* kabul edilir. Önce initialize ve notifications/initialized gönderin. Yalnız mevcut llms.txt ve AGENTS.md dosyaları okunur (her biri en fazla 128 KiB). build_blog_search_url yalnız bağlantı üretir. Gövde sınırı 65536 bayt. SSE ve oturum kimliği yoktur. Kişisel veya hasta bilgisi göndermeyin. Sürüm başlığı yoksa 2025-03-26 kullanılır.",
        "parameters": [
          {
            "in": "header",
            "name": "MCP-Protocol-Version",
            "required": false,
            "schema": {
              "enum": [
                "2025-11-25",
                "2025-06-18",
                "2025-03-26"
              ],
              "type": "string"
            },
            "description": "Initialize yanıtında uzlaşılan sürüm. Başlık eksikse 2025-03-26 kullanılır; desteklenmeyen başlık değeri 400 döndürür."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/McpRequest",
                "type": "object",
                "description": "Desteklenen MCP JSON-RPC isteklerinin birleşimi. Çağrılar id taşır; notifications/* bildirimleri id taşımaz. Initialize ve initialized akışı izlenmelidir.",
                "properties": {
                  "jsonrpc": {
                    "type": "string",
                    "const": "2.0",
                    "description": "JSON-RPC protokol sürümü; daima 2.0."
                  },
                  "id": {
                    "type": [
                      "string",
                      "integer"
                    ],
                    "description": "Çağrının yanıtla eşleşen kimliği. Bildirimlerde bu alan gönderilmez."
                  },
                  "method": {
                    "type": "string",
                    "description": "Çağrılacak MCP yöntemi. Desteklenen yöntem ve parametre eşleşmeleri oneOf altında tanımlıdır."
                  },
                  "params": {
                    "type": "object",
                    "description": "Yönteme ait giriş nesnesi. Alanları ve zorunlulukları ilgili oneOf dalında tanımlıdır."
                  }
                },
                "required": [
                  "jsonrpc",
                  "method"
                ]
              },
              "example": {
                "jsonrpc": "2.0",
                "id": 1,
                "method": "tools/call",
                "params": {
                  "name": "build_blog_search_url",
                  "arguments": {
                    "query": "boy kısalığı"
                  }
                }
              }
            }
          },
          "description": "JSON-RPC 2.0 istek nesnesi. Parametre ve yöntem çeşitleri ilgili yeniden kullanılabilir giriş şemasında tanımlanmıştır."
        },
        "responses": {
          "200": {
            "description": "JSON-RPC sonucu veya JSON-RPC hata nesnesi. HTTP 200 tek başına işlem başarısı değildir.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/RpcSuccess"
                    },
                    {
                      "$ref": "#/components/schemas/RpcError"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Geçersiz JSON veya istek.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RpcError"
                }
              }
            }
          },
          "403": {
            "description": "İzin verilmeyen Origin başlığı.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RpcError"
                }
              }
            }
          },
          "413": {
            "description": "Gövde sınırı aşıldı.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RpcError"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type application/json olmalı.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RpcError"
                }
              }
            }
          },
          "202": {
            "description": "Kimliği olmayan notifications/* isteği kabul edildi; boş gövde."
          },
          "406": {
            "description": "Accept application/json veya */* içermeli.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RpcError"
                }
              }
            }
          }
        }
      }
    },
    "/mcp/status.php": {
      "get": {
        "operationId": "mcpFileStatus",
        "summary": "MCP yerel dosya durumunu kontrol et",
        "description": "Yalnız dosyaların varlığını ve okunabilirliğini kontrol eder; uçtan uca protokol testi değildir.",
        "responses": {
          "200": {
            "description": "Gerekli yerel dosyalar mevcut.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          },
          "503": {
            "description": "En az bir gerekli dosya eksik veya okunamıyor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          }
        }
      }
    },
    "/a2a/status.php": {
      "get": {
        "operationId": "a2aFileStatus",
        "summary": "A2A yerel dosya durumunu kontrol et",
        "description": "Yalnız dosyaların varlığını ve okunabilirliğini kontrol eder; uçtan uca protokol testi değildir.",
        "responses": {
          "200": {
            "description": "Gerekli yerel dosyalar mevcut.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          },
          "503": {
            "description": "En az bir gerekli dosya eksik veya okunamıyor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          }
        }
      }
    },
    "/ask": {
      "get": {
        "operationId": "searchPublishedFaq",
        "summary": "Yayımlanmış SSS sorularında anahtar kelime arar",
        "description": "Sınırlı NLWeb REST list adaptörü. Yalnız sabit SSS indeksini tarar ve kaynak metinlerini döndürür. Yeni cevap üretmez. Eşleşme yoksa results boş dizidir. Streaming, özetleme, konuşma geçmişi ve anlamsal arama yoktur. Sorgular kişisel/hasta bilgisi içermemeli.",
        "parameters": [
          {
            "in": "query",
            "name": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 300
            },
            "description": "SSS sorularında ve yanıtlarında aranacak konu. 1–300 karakter; kontrol karakteri veya kişisel/hasta bilgisi içermemeli."
          },
          {
            "in": "query",
            "name": "streaming",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "false",
                "0"
              ],
              "default": "false"
            },
            "description": "Yalnız false veya 0 desteklenir; SSE akışı yoktur. Başlık değil, URL sorgu parametresidir."
          },
          {
            "in": "query",
            "name": "mode",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "list"
              ],
              "default": "list"
            },
            "description": "Yalnız list desteklenir. Kaynak eşleşmeleri döner; özet veya yeni yanıt üretilmez."
          },
          {
            "in": "query",
            "name": "num_results",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5
            },
            "description": "Döndürülecek en fazla sonuç sayısı; 1–10 tam sayı, varsayılan 5."
          },
          {
            "in": "query",
            "name": "query_id",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[a-zA-Z0-9_-]{1,128}$"
            },
            "description": "İsteğe bağlı izleme kimliği: 1–128 harf, rakam, alt çizgi veya tire. Gönderilmezse sunucu üretir."
          },
          {
            "in": "query",
            "name": "site",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "edizyesilkaya.com.tr",
                "www.edizyesilkaya.com.tr"
              ]
            },
            "description": "İsteğe bağlı site seçimi. Yalnız edizyesilkaya.com.tr veya www.edizyesilkaya.com.tr kabul edilir."
          }
        ],
        "responses": {
          "200": {
            "description": "Eşleşen kaynak soru ve yanıtlar veya boş sonuç.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FAQList"
                }
              }
            }
          },
          "400": {
            "description": "Geçersiz veya desteklenmeyen parametre.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FAQError"
                }
              }
            }
          },
          "414": {
            "description": "Sorgu dizesi 4096 baytı aşıyor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FAQError"
                }
              }
            }
          },
          "503": {
            "description": "Yerel SSS indeksi eksik veya bozuk.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FAQError"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "RpcError": {
        "type": "object",
        "properties": {
          "jsonrpc": {
            "const": "2.0",
            "type": "string"
          },
          "id": {
            "type": [
              "string",
              "integer",
              "null"
            ]
          },
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "integer"
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ]
          }
        },
        "required": [
          "jsonrpc",
          "id",
          "error"
        ],
        "description": "MCP/A2A JSON-RPC hata zarfı. HTTP 200 içinde de dönebilir; error.code ve error.message birlikte kontrol edilmelidir."
      },
      "RpcSuccess": {
        "type": "object",
        "properties": {
          "jsonrpc": {
            "const": "2.0",
            "type": "string"
          },
          "id": {
            "type": [
              "string",
              "integer"
            ]
          },
          "result": {
            "type": "object",
            "description": "İstenen MCP yöntemine ait sonuç nesnesi; aşağıdaki yöntem sonuçlarından biri.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/McpInitializeResult"
              },
              {
                "$ref": "#/components/schemas/McpPingResult"
              },
              {
                "$ref": "#/components/schemas/McpResourceListResult"
              },
              {
                "$ref": "#/components/schemas/McpResourceReadResult"
              },
              {
                "$ref": "#/components/schemas/McpToolListResult"
              },
              {
                "$ref": "#/components/schemas/McpToolCallResult"
              }
            ]
          }
        },
        "required": [
          "jsonrpc",
          "id",
          "result"
        ],
        "description": "Desteklenen MCP yöntemlerinin JSON-RPC başarılı yanıt zarfı. id, istek kimliğiyle aynı olmalıdır."
      },
      "TextPart": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string"
          },
          "mediaType": {
            "const": "text/plain",
            "type": "string"
          }
        },
        "required": [
          "text"
        ],
        "not": {
          "anyOf": [
            {
              "required": [
                "raw"
              ]
            },
            {
              "required": [
                "url"
              ]
            },
            {
              "required": [
                "data"
              ]
            }
          ]
        },
        "description": "A2A düz metin parçası; text kullanılır, raw/url/data türleri desteklenmez."
      },
      "AgentMessage": {
        "type": "object",
        "properties": {
          "messageId": {
            "type": "string"
          },
          "contextId": {
            "type": "string"
          },
          "role": {
            "const": "ROLE_AGENT",
            "type": "string"
          },
          "parts": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/TextPart"
            }
          }
        },
        "required": [
          "messageId",
          "contextId",
          "role",
          "parts"
        ],
        "description": "A2A hizmetinin anında döndürdüğü kaynak yönlendirme mesajı. Görev veya konuşma geçmişi oluşturmaz."
      },
      "A2ASuccess": {
        "type": "object",
        "properties": {
          "jsonrpc": {
            "const": "2.0",
            "type": "string"
          },
          "id": {
            "type": [
              "string",
              "integer"
            ]
          },
          "result": {
            "type": "object",
            "properties": {
              "message": {
                "$ref": "#/components/schemas/AgentMessage"
              }
            },
            "required": [
              "message"
            ]
          }
        },
        "required": [
          "jsonrpc",
          "id",
          "result"
        ],
        "description": "SendMessage çağrısının JSON-RPC yanıtı. result.message blog arama bağlantılarını ve varsa site rehberini içerir."
      },
      "A2ASendMessage": {
        "type": "object",
        "properties": {
          "jsonrpc": {
            "const": "2.0",
            "type": "string"
          },
          "id": {
            "type": [
              "string",
              "integer"
            ]
          },
          "method": {
            "const": "SendMessage",
            "type": "string"
          },
          "params": {
            "type": "object",
            "properties": {
              "message": {
                "type": "object",
                "properties": {
                  "messageId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 128
                  },
                  "role": {
                    "const": "ROLE_USER",
                    "type": "string"
                  },
                  "contextId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 128
                  },
                  "parts": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 4,
                    "items": {
                      "$ref": "#/components/schemas/TextPart"
                    }
                  }
                },
                "required": [
                  "messageId",
                  "role",
                  "parts"
                ]
              },
              "configuration": {
                "type": "object",
                "properties": {
                  "acceptedOutputModes": {
                    "type": "array",
                    "items": {
                      "const": "text/plain",
                      "type": "string"
                    }
                  },
                  "returnImmediately": {
                    "type": "boolean"
                  }
                }
              }
            },
            "required": [
              "message"
            ]
          }
        },
        "required": [
          "jsonrpc",
          "id",
          "method",
          "params"
        ],
        "description": "A2A 1.0 SendMessage isteği. Birleştirilip kırpılan konu 1–160 karakter olmalı; ROLE_USER ve 1–4 düz metin parçası gerekir."
      },
      "Status": {
        "type": "object",
        "properties": {
          "service": {
            "type": "string"
          },
          "status": {
            "enum": [
              "ready",
              "degraded"
            ],
            "type": "string"
          },
          "checks": {
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            },
            "description": "Yerel dosyaların mevcut ve okunabilir olup olmadığını gösteren dosya adları ve boolean sonuçlar."
          },
          "scope": {
            "type": "string"
          }
        },
        "required": [
          "service",
          "status",
          "checks",
          "scope"
        ],
        "description": "MCP/A2A yerel dosya durum yanıtı. ready dosyaların okunabilirliğini belirtir; uçtan uca hizmet testi değildir."
      },
      "McpRequest": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "jsonrpc": {
                "const": "2.0",
                "type": "string"
              },
              "id": {
                "type": [
                  "string",
                  "integer"
                ]
              },
              "method": {
                "const": "initialize",
                "type": "string"
              },
              "params": {
                "type": "object",
                "properties": {
                  "protocolVersion": {
                    "type": "string"
                  },
                  "capabilities": {
                    "type": "object"
                  },
                  "clientInfo": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "version": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "name",
                      "version"
                    ]
                  }
                },
                "required": [
                  "protocolVersion",
                  "capabilities",
                  "clientInfo"
                ]
              }
            },
            "required": [
              "jsonrpc",
              "id",
              "method",
              "params"
            ],
            "description": "MCP initialize isteği. Sunucu JSON-RPC 2.0 nesnesi bekler."
          },
          {
            "type": "object",
            "properties": {
              "jsonrpc": {
                "const": "2.0",
                "type": "string"
              },
              "id": {
                "type": [
                  "string",
                  "integer"
                ]
              },
              "method": {
                "const": "ping",
                "type": "string"
              },
              "params": {
                "type": "object",
                "description": "Bu yöntemde ek parametre gerekmez; gönderilirse nesne olmalıdır."
              }
            },
            "required": [
              "jsonrpc",
              "id",
              "method"
            ],
            "description": "MCP ping isteği. Sunucu JSON-RPC 2.0 nesnesi bekler."
          },
          {
            "type": "object",
            "properties": {
              "jsonrpc": {
                "const": "2.0",
                "type": "string"
              },
              "id": {
                "type": [
                  "string",
                  "integer"
                ]
              },
              "method": {
                "const": "resources/list",
                "type": "string"
              },
              "params": {
                "type": "object",
                "description": "Bu yöntemde ek parametre gerekmez; gönderilirse nesne olmalıdır."
              }
            },
            "required": [
              "jsonrpc",
              "id",
              "method"
            ],
            "description": "MCP resources/list isteği. Sunucu JSON-RPC 2.0 nesnesi bekler."
          },
          {
            "type": "object",
            "properties": {
              "jsonrpc": {
                "const": "2.0",
                "type": "string"
              },
              "id": {
                "type": [
                  "string",
                  "integer"
                ]
              },
              "method": {
                "const": "tools/list",
                "type": "string"
              },
              "params": {
                "type": "object",
                "description": "Bu yöntemde ek parametre gerekmez; gönderilirse nesne olmalıdır."
              }
            },
            "required": [
              "jsonrpc",
              "id",
              "method"
            ],
            "description": "MCP tools/list isteği. Sunucu JSON-RPC 2.0 nesnesi bekler."
          },
          {
            "type": "object",
            "properties": {
              "jsonrpc": {
                "const": "2.0",
                "type": "string"
              },
              "id": {
                "type": [
                  "string",
                  "integer"
                ]
              },
              "method": {
                "const": "resources/read",
                "type": "string"
              },
              "params": {
                "type": "object",
                "properties": {
                  "uri": {
                    "enum": [
                      "https://www.edizyesilkaya.com.tr/llms.txt",
                      "https://www.edizyesilkaya.com.tr/AGENTS.md"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "uri"
                ]
              }
            },
            "required": [
              "jsonrpc",
              "id",
              "method",
              "params"
            ],
            "description": "MCP resources/read isteği. Sunucu JSON-RPC 2.0 nesnesi bekler."
          },
          {
            "type": "object",
            "properties": {
              "jsonrpc": {
                "const": "2.0",
                "type": "string"
              },
              "id": {
                "type": [
                  "string",
                  "integer"
                ]
              },
              "method": {
                "const": "tools/call",
                "type": "string"
              },
              "params": {
                "type": "object",
                "properties": {
                  "name": {
                    "const": "build_blog_search_url",
                    "type": "string"
                  },
                  "arguments": {
                    "type": "object",
                    "properties": {
                      "query": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 160
                      }
                    },
                    "required": [
                      "query"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "name",
                  "arguments"
                ]
              }
            },
            "required": [
              "jsonrpc",
              "id",
              "method",
              "params"
            ],
            "description": "MCP tools/call isteği. Sunucu JSON-RPC 2.0 nesnesi bekler."
          },
          {
            "type": "object",
            "properties": {
              "jsonrpc": {
                "const": "2.0",
                "type": "string"
              },
              "method": {
                "type": "string",
                "pattern": "^notifications/"
              },
              "params": {
                "type": "object"
              }
            },
            "required": [
              "jsonrpc",
              "method"
            ],
            "not": {
              "required": [
                "id"
              ]
            },
            "description": "MCP notifications/* isteği. Sunucu JSON-RPC 2.0 nesnesi bekler."
          }
        ],
        "type": "object",
        "description": "Desteklenen MCP JSON-RPC isteklerinin birleşimi. Çağrılar id taşır; notifications/* bildirimleri id taşımaz. Initialize ve initialized akışı izlenmelidir.",
        "properties": {
          "jsonrpc": {
            "type": "string",
            "const": "2.0",
            "description": "JSON-RPC protokol sürümü; daima 2.0."
          },
          "id": {
            "type": [
              "string",
              "integer"
            ],
            "description": "Çağrının yanıtla eşleşen kimliği. Bildirimlerde bu alan gönderilmez."
          },
          "method": {
            "type": "string",
            "description": "Çağrılacak MCP yöntemi. Desteklenen yöntem ve parametre eşleşmeleri oneOf altında tanımlıdır."
          },
          "params": {
            "type": "object",
            "description": "Yönteme ait giriş nesnesi. Alanları ve zorunlulukları ilgili oneOf dalında tanımlıdır."
          }
        },
        "required": [
          "jsonrpc",
          "method"
        ]
      },
      "FAQList": {
        "type": "object",
        "properties": {
          "query_id": {
            "type": "string"
          },
          "mode": {
            "const": "list",
            "type": "string"
          },
          "retrieval_method": {
            "const": "keyword",
            "type": "string"
          },
          "indexed_at": {
            "type": [
              "string",
              "null"
            ]
          },
          "results": {
            "type": "array",
            "maxItems": 10,
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "const": "https://www.edizyesilkaya.com.tr/sss",
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "site": {
                  "const": "edizyesilkaya.com.tr",
                  "type": "string"
                },
                "score": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100
                },
                "description": {
                  "type": "string"
                },
                "schema_object": {
                  "type": "object",
                  "properties": {
                    "@context": {
                      "const": "https://schema.org",
                      "type": "string"
                    },
                    "@type": {
                      "const": "Question",
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "url": {
                      "const": "https://www.edizyesilkaya.com.tr/sss",
                      "type": "string"
                    },
                    "acceptedAnswer": {
                      "type": "object",
                      "properties": {
                        "@type": {
                          "const": "Answer",
                          "type": "string"
                        },
                        "text": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "@type",
                        "text"
                      ]
                    }
                  },
                  "required": [
                    "@context",
                    "@type",
                    "name",
                    "url",
                    "acceptedAnswer"
                  ]
                }
              },
              "required": [
                "url",
                "name",
                "site",
                "score",
                "description",
                "schema_object"
              ]
            }
          }
        },
        "required": [
          "query_id",
          "results",
          "mode",
          "retrieval_method"
        ],
        "description": "SSS indeksinde anahtar kelime araması sonucu. results yalnız yayımlanmış kaynak metinleri içerir; eşleşme yoksa boş dizidir."
      },
      "McpResource": {
        "type": "object",
        "description": "resources/list sonucunda sunulan, mevcut yerel rehberi tanımlayan kayıt.",
        "properties": {
          "uri": {
            "type": "string",
            "format": "uri",
            "description": "Herkese açık ve izin verilen rehber adresi."
          },
          "name": {
            "type": "string"
          },
          "mimeType": {
            "type": "string"
          }
        },
        "required": [
          "uri",
          "name",
          "mimeType"
        ]
      },
      "McpResourceContent": {
        "type": "object",
        "description": "resources/read sonucunda dönen kaynak adresi, içerik türü ve UTF-8 metin.",
        "properties": {
          "uri": {
            "type": "string",
            "format": "uri"
          },
          "mimeType": {
            "type": "string"
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "uri",
          "mimeType",
          "text"
        ]
      },
      "McpTextContent": {
        "type": "object",
        "description": "MCP aracı tarafından döndürülen metin parçası. Arama aracında text, searchUrl ve description alanlarını taşıyan JSON metnidir.",
        "properties": {
          "type": {
            "type": "string",
            "const": "text"
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "text"
        ]
      },
      "McpTool": {
        "type": "object",
        "description": "tools/list ile keşfedilen blog arama bağlantısı oluşturma aracının tanımı.",
        "properties": {
          "name": {
            "type": "string",
            "const": "build_blog_search_url"
          },
          "description": {
            "type": "string"
          },
          "inputSchema": {
            "type": "object",
            "description": "Aracın query argümanını açıklayan JSON Schema. Query 1–160 karakterdir; ek argüman kabul edilmez.",
            "additionalProperties": true
          },
          "annotations": {
            "type": "object",
            "description": "Salt okunurluk ve yan etki özelliklerini bildiren MCP araç ipuçları.",
            "additionalProperties": {
              "type": "boolean"
            }
          }
        },
        "required": [
          "name",
          "description",
          "inputSchema"
        ]
      },
      "McpInitializeResult": {
        "type": "object",
        "description": "initialize yanıtı: uzlaşılan protokol sürümü, sunucu kimliği, desteklenen yetenekler ve kullanım kapsamı.",
        "properties": {
          "protocolVersion": {
            "type": "string",
            "enum": [
              "2025-11-25",
              "2025-06-18",
              "2025-03-26"
            ]
          },
          "serverInfo": {
            "type": "object",
            "description": "Sunucunun kimliği ve uygulama sürümü.",
            "properties": {
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            },
            "required": [
              "name",
              "version"
            ]
          },
          "capabilities": {
            "type": "object",
            "description": "Kaynak ve araç desteği ile değişiklik bildirimi özellikleri.",
            "properties": {
              "resources": {
                "type": "object",
                "properties": {
                  "subscribe": {
                    "type": "boolean"
                  },
                  "listChanged": {
                    "type": "boolean"
                  }
                }
              },
              "tools": {
                "type": "object",
                "properties": {
                  "listChanged": {
                    "type": "boolean"
                  }
                }
              }
            }
          },
          "instructions": {
            "type": "string"
          }
        },
        "required": [
          "protocolVersion",
          "serverInfo",
          "capabilities"
        ]
      },
      "McpPingResult": {
        "type": "object",
        "description": "ping yönteminin başarılı yanıtındaki boş sonuç nesnesi.",
        "maxProperties": 0
      },
      "McpResourceListResult": {
        "type": "object",
        "description": "resources/list yanıtı. Dosyası mevcut ve okunabilir rehberler listelenir; boş liste geçerlidir.",
        "properties": {
          "resources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/McpResource"
            }
          }
        },
        "required": [
          "resources"
        ]
      },
      "McpResourceReadResult": {
        "type": "object",
        "description": "resources/read yanıtı. İzin verilen rehberin kaynak metnini içerir.",
        "properties": {
          "contents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/McpResourceContent"
            }
          }
        },
        "required": [
          "contents"
        ]
      },
      "McpToolListResult": {
        "type": "object",
        "description": "tools/list yanıtı. Çağrılabilecek araçları ve giriş şemalarını listeler.",
        "properties": {
          "tools": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/McpTool"
            }
          }
        },
        "required": [
          "tools"
        ]
      },
      "McpToolCallResult": {
        "type": "object",
        "description": "tools/call yanıtı. build_blog_search_url yalnız arama URL’si döndürür, yazıları okuyup yanıtlamaz.",
        "properties": {
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/McpTextContent"
            }
          },
          "isError": {
            "type": "boolean",
            "description": "Araç sonucunun hata belirtip belirtmediği. JSON-RPC error alanından ayrıdır."
          }
        },
        "required": [
          "content"
        ]
      },
      "FAQError": {
        "type": "object",
        "description": "SSS arama adaptörünün 400, 414 ve 503 HTTP yanıtlarında kullandığı JSON hata modeli.",
        "properties": {
          "error": {
            "type": "string",
            "description": "Geçersiz parametreyi, desteklenmeyen seçeneği veya indeks sorununu açıklayan hata metni."
          },
          "results": {
            "type": "array",
            "maxItems": 0,
            "items": {
              "type": "object"
            },
            "description": "Hata yanıtında boş sonuç dizisi."
          }
        },
        "required": [
          "error",
          "results"
        ]
      }
    }
  },
  "externalDocs": {
    "description": "A2A kaynak hizmeti kullanım belgesi",
    "url": "https://www.edizyesilkaya.com.tr/a2a/documentation.html"
  }
}
