not · olgun
Aynı process'te MCP
Tek retriever üzerinde search_code, read_code, list_repos; filtre değil sinyal; yalnız index'lenmiş dosyaları okur.
Tüketici bir agent — Claude Code, Cursor — o yüzden retriever, aynı FastAPI
process'i içinde /mcp'ye mount edilmiş üç MCP tool'u olarak açılıyor.
search_codequery, repo, path prefix'i, kategori
read_codeindex'lenmiş dosya, satır aralığı
list_repostazelik
Tasarım kararları
- Aynı process, aynı retriever. Embedding modelini ikinci kez yükleyen bir stdio sidecar yok; bloklayan işler (embedding, Milvus, disk) thread'lerde çalışıyor ki MCP oturumunun event loop'u akmaya devam etsin.
- Çıktı talimat değil, veri. Agent'a dönen kod, güvenilmeyen içerik olarak sarılıyor.
- Sinyaller hit'lerle birlikte gidiyor. Weak-match bandı,
DOCetiketi, "N aday atıldı", repo başına son index zamanı. read_codeyalnızca index'lenmiş dosyaları okuyor. Path manifest'te olmak zorunda — yani agentnode_modulesya da.envokuyamıyor ve var olmayan bir dosya için "o dosya var" diye kandırılamıyor. Diskteki dosya index'lenen hash'le artık eşleşmiyorsa dilimstaleişaretiyle dönüyor.
| Tuzak | Çözüm |
|---|---|
| mount edilen alt uygulamanın lifespan'i hiç çalışmıyor | session_manager.run() üst uygulamanın lifespan'ini sarıyor |
| transport yabancı Host header'larını 421 ile reddediyor (DNS rebinding) | config üzerinden ek host'lar |
| /mcp → /mcp/ bir 307; redirect'ten kaçınan client'lar POST body'sini kaybediyor | bunun yerine saf ASGI bir middleware path'i yeniden yazıyor |
Agent adayları ve kanıtı alıyor, sonra okuyor. Son sözü söylemeye çalışan retrieval, agent adına halüsinasyon gören retrieval'dır.