İçeriğe geç
mcpd
daemon yok
Kaynak

Kurulum

mcpd, depolaması içine derlenmiş tek bir ikili dosyadır; kurmak, o dosyayı bir yere koyup başlatmak demektir. Aşağıdaki yollardan, işleri zaten nasıl çalıştırdığınıza uyanı seçin.

Docker

Henüz bir sürüm yayımlanmadı.

Bu sitedeki komutların adını verdiği imaj, chart ve paketler planlanan dağıtımdır; hiçbiri yayımlanmadı. Bugün çalışan yol, kaynaktan derlemektir ve Rust ile Node gerekir:

Derleyip çalıştırma

git clone https://github.com/mcpd/mcpd && cd mcpd && make build && ./target/release/mcpd demo

Yayımlanan imaj en kısa yoldur ve belgelerin geri kalanının varsaydığı yoldur.

docker run -p 4317:4317 -v mcpd-data:/data -e MCPD_DATA=/data/mcpd.db ghcr.io/mcpd/mcpd

Volume önemlidir. mcpd, MCPD_DATA ile belirtilen yola bir SQLite veritabanı yazar; volume'suz bir konteyner durduğunda trace'lerinizi de götürür. Yolu açıkça yazmak bir seçeneğe mal olur ve dosyanın nereye gittiği sorusunu ortadan kaldırır.

Her seçeneğin bir ortam değişkeni vardır; komut satırında geçebildiğiniz her şeyi -e ile de verebilirsiniz. Önemli bir kurulumda latest etiketini izlemeyin, bir sürüm etiketi sabitleyin. İmaj linux/amd64 ve linux/arm64 için derlenir; Docker makinenize uyanı çeker.

Docker Compose

Aynı konteyner, yazıya dökülmüş hâli. mcpd uygulamanızın yanında tek bir sunucuda duracaksa kullanılacak biçim budur.

compose.yaml
services:
  mcpd:
    image: ghcr.io/mcpd/mcpd:latest
    restart: unless-stopped
    ports:
      - "4317:4317"
    volumes:
      - mcpd-data:/data
    environment:
      MCPD_DATA: /data/mcpd.db
      MCPD_PROJECT: default
      # Bu porta sizden başkası erişebilir hâle gelmeden önce bunları ayarlayın.
      # MCPD_INGEST_KEYS: key-for-your-agents
      # MCPD_READ_KEYS: key-for-your-team
      # MCPD_RETENTION_DAYS: 30

volumes:
  mcpd-data:

Yoruma alınmış üç anahtar, bu kurulum başkalarının da bulunduğu bir ağa çıkmadan önce doldurulacak olanlardır. Hiçbir anahtar ayarlanmamışken alım da okuma da açıktır; bu, dizüstünüzde doğru, başka her yerde yanlıştır. Neyin neden ayarlanacağını Dağıtım anlatır.

Kubernetes

Her sürüm chart'ı imajla aynı kayıt defterine bir OCI artefaktı olarak iter, bu yüzden önce eklenecek bir depo yoktur. Chart, bir alım anahtarı ve bir okuma anahtarı olmadan kurulmayı reddeder; ikisini önce üretin.

helm install mcpd oci://ghcr.io/mcpd/charts/mcpd -n mcpd --create-namespace --set keys.ingest=$INGEST_KEY --set keys.read=$READ_KEY

mcpd, Kubernetes'in gönderdiği SIGTERM sinyalini karşılar ve düzgünce kapanır. Canlılık için /healthz, hazırlık için /readyz sunar ve ikisi bilerek farklıdır: canlılık depolamaya hiç dokunmaz, böylece yavaş bir veritabanı pod'u bir döngüye sokup yeniden başlatamaz. Değerler, yoklamalar ve Deployment'ın biçimi Docker ve Kubernetes sayfasında.

Bir sürüm ikili dosyası

Her sürüme x86_64 ve arm64 Linux için birer arşiv ile Apple silicon ve Intel macOS için birer arşiv eklenir. Linux arşivleri musl ile derlenmiş statik dosyalardır, bu yüzden eşleştirilecek bir libc yoktur. Yanlarında bir SHA256SUMS dosyası ve bir derleme kaynağı tasdiki (build provenance attestation) gelir. Makinenize uyan arşivi açın ve ./mcpd komutunu çalıştırın; argümansız çalıştırmak daemon'u başlatır.

cargo install mcpd yoktur. crates.io'da yayımlanmış bir şey yoktur ve kayıt defterinden derlenen bir crate arayüzü taşıyamaz: arayüz npm ile oluşturulur ve ikili dosyanın içine derlenir. Bir Rust araç zinciriniz varsa bunun yerine kaynaktan derleyin.

Kaynaktan

Depoyu klonlayın ve dağıtım derlemesini çalıştırın. Tam bağlama zamanı optimizasyonu ve tek bir kod üretim birimi kullanır; derlemesi daha yavaştır ama daha küçük ve daha hızlı ikili dosyayı verir. Doğrudan cargo yerine make üzerinden gidin: arayüz ikili dosyanın içine derlenir ve make dist önce onu derler; taze bir klon üzerinde düz bir cargo build bu adımı yapamaz. Bu adım için makinede Rust araç zincirinin yanı sıra Node ve npm de gerekir.

git clone https://github.com/mcpd/mcpd && cd mcpd && make dist

İkili dosya target/dist/mcpd yoluna yazılır; hızlı yolu seçtiyseniz target/release/mcpd yoluna. mcpd'nin kendi üzerinde çalışırken make build, çalıştırmayı düşündüğünüz her şey için make dist kullanın.

Veri nereye gider

--data, SQLite dosyasının yoludur; varsayılan değeri çalışma dizinindeki ./mcpd.db dosyasıdır. Üst dizinler sizin için oluşturulur.

:memory: vermek her şeyi bellekte tutar ve diske hiçbir şey yazmaz. Bu; bir test takımı için, başkasının makinesindeki bir gösterim için ve prompt'larını geride bırakmak istemediğiniz her çalıştırma için doğru seçimdir. Depo süreçle birlikte kaybolur, amaç da budur.

Geride bir şey bırakmayın

mcpd --data :memory:

mcpd demo, depoyu gerçekçi ve başarısız bir çalıştırmayla doldurur ve sonra sunmaya başlar; böylece arayüzü ilk açtığınızda içinde bir şey olur.

Başlatmadan önce ne yapacağına bakın

mcpd config, bu çağrının çözümlendiği yapılandırmayı yazdırır ve çıkar. Seçenekler, ortam değişkenleri ve varsayılan değerler tek bir listede toplanır; böylece hiçbir şey başlatmadan hangisinin kazandığını görürsünüz.

çözümlenen yapılandırma
$ mcpd configlisten          0.0.0.0:4317storage         sqlite at ./mcpd.dbconfig file     nonelog format      textproject         defaultprojects        noneretention       foreveringest auth     openread auth       openwrite auth      openadmin auth      openexecute auth    openworker auth     opensignup          offruns            sqlite at ./mcpd.runs.dbrun settings    lease_ttl_ms 30000, reclaim_window_ms 30000, stall_window_ms 300000, idempotency_window_ms 86400000, park_ttl_ms 86400000, max_depth 8, max_step_repeats 16identity        offclient ip       peer addresssampling        keep everythingquota           unlimitedredaction       onredact key      built in, which is public; set --redact-keycors            same-origin onlytimeout         30s per requestlimits          32 MiB per request, 10000 signals per batchderived         duration and token metricsaspects         offmonitors        noneobjectives      nonejudge           offforwarding      off

Kurulumu doğrulayın

/healthz, “gerçekten çalışıyor mu” sorusunun yanıtıdır. Depolamadan hiç okumaz; bu yüzden hızlı kalır ve diske değil sürece dair dürüst kalır.

doğrulama
$ curl -s localhost:4317/healthz{"status":"ok","version":"0.1.0","spec_version":"1.0.0","uptime_seconds":8,"storage":"sqlite"}$ curl -s -o /dev/null -w "%{http_code}\n" localhost:4317/readyz200

spec_version, bu derlemenin uyguladığı veri modeli sürümüdür. Bir istemci bunu okuyup anlamadığı bir sunucuyla konuşmayı reddedebilir; bu, alan alan reddedilecek bir yığın göndermekten iyidir.

/readyz öteki yarıdır. Depolamayı yoklar ve depoya erişilemediğinde 503 yanıtı verir; böylece bir yük dengeleyici, okuma isteklerini karşılayamayan bir kopyaya göndermeyi bırakır. Canlılık için /healthz, hazırlık için /readyz kullanın; ikisi için asla aynısını kullanmayın.

Sonra localhost:4317 adresini açın; karşınızda arayüz olacak.

Sırada