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.

tool'lar
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ı, DOC etiketi, "N aday atıldı", repo başına son index zamanı.
  • read_code yalnızca index'lenmiş dosyaları okuyor. Path manifest'te olmak zorunda — yani agent node_modules ya da .env okuyamı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 dilim stale işaretiyle dönüyor.
TuzakÇözüm
mount edilen alt uygulamanın lifespan'i hiç çalışmıyorsession_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 kaybediyorbunun 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.

#mcp #agent #signals

Bu notu beyaz tahtada gör →