Harness

resmi

Harness platform verilerine, boru hatları, depolar, günlükler ve yapıt kayıtları dahil olmak üzere erişin ve bunlarla etkileşim kurun.

Harness MCP ile neler yapabilirsiniz?

  • Harness kaynaklarını listele — Yapay zekanızdan harness_list kullanarak organizasyonları, projeleri, pipeline'ları veya diğer kaynakları listelemesini isteyin.
  • Kaynak ayrıntılarını al — harness_get ile pipeline veya servis gibi herhangi bir Harness kaynağının tam ayrıntılarını edinin.
  • Yeni kaynaklar oluştur — Yapay zekanıza harness_create ile pipeline, servis veya diğer varlıkları oluşturmasını talimat verin.
  • Projeler arası keşif — Tüm projelerde başarısız yürütmeler veya kaynaklar için sorun; aracı, hesap hiyerarşisinde dinamik olarak gezinir.
  • Çok kullanıcılı kimlik doğrulama — Paylaşılan dağıtımlarda, her oturum x-harness-api-key başlığı aracılığıyla kendi Harness API anahtarıyla kimlik doğrulayabilir.

Dokümantasyon

Harness MCP Sunucusu 2.0

MCP Toplist

Yapay zeka ajanlarına Harness.io platformuna 11 birleştirilmiş araç ve 255 kaynak türü üzerinden tam erişim sağlayan bir MCP (Model Context Protocol) sunucusu.

Bu MCP Sunucusunu Neden Kullanmalısınız?

Çoğu MCP sunucusu, API uç noktası başına bir araç eşler. Harness kadar geniş bir platform için bu, 240+ araç anlamına gelir — ve araç sayısı arttıkça LLM'ler araç seçiminde daha da kötüleşir. Bağlam pencereleri şemalarla dolar ve her yeni uç nokta yeni kod anlamına gelir.

Bu sunucu farklı şekilde inşa edilmiştir:

  • 11 araç, 255 kaynak türü. Kayıt tabanlı bir dağıtım sistemi, harness_list, harness_get, harness_create vb. öğelerini herhangi bir Harness kaynağına yönlendirir — pipeline'lar, hizmetler, ortamlar, organizasyonlar, projeler, özellik bayrakları, maliyet verileri ve daha fazlası. LLM, yüzlerce yerine 11 araçtan seçim yapar.
  • Tam platform kapsamı. CI/CD, GitOps, Özellik Bayrakları, Bulut Maliyet Yönetimi, Güvenlik Testi, Kaos Mühendisliği, Veritabanı DevOps'u, Dahili Geliştirici Portalı, Yazılım Tedarik Zinciri, Altyapı Olarak Kod Yönetimi, Sürüm Yönetimi, Yönetişim, Hizmet Geçersiz Kılmaları, Bilgi Grafiği ve daha fazlasını kapsayan 41 varsayılan araç seti. Gerektiğinde isteğe bağlı Ansible ve gözlemlenebilirlik değerlendirme kapsamı mevcuttur.
  • Kutudan çıktığı gibi çok projeli iş akışları. Ajanlar organizasyonları ve projeleri dinamik olarak keşfeder — sabit kodlanmış ortam değişkenlerine gerek yoktur. "Tüm projelerde başarısız yürütmeleri göster" diye sorun ve ajan tüm hesap hiyerarşisinde gezinebilir.
  • 35 prompt şablonu. Yaygın iş akışları için önceden oluşturulmuş prompt'lar: uçtan uca uygulama derleme ve dağıtma, başarısız pipeline'ları hata ayıklama, DORA metriklerini inceleme, güvenlik açıklarını triyajlama, bulut maliyetlerini optimize etme, erişim kontrolünü denetleme, özellik bayrağı dağıtımlarını planlama, çekme isteklerini inceleme, bekleyen pipeline'ları onaylama ve daha fazlası.
  • Her yerde çalışır. Yerel istemciler için Stdio taşıma (Claude Desktop, Cursor, Devin Desktop), uzak/paylaşılan dağıtımlar için HTTP taşıma, Docker ve Kubernetes hazır.
  • Sıfır yapılandırma ile başlangıç. Sadece bir Harness API anahtarı sağlayın. Hesap Kimliği, PAT ve SAT belirteçlerinden otomatik olarak çıkarılır, organizasyon/proje varsayılanları isteğe bağlıdır ve araç seti filtreleme, yalnızca ihtiyacınız olanı açığa çıkarmanızı sağlar.
  • Tasarım gereği genişletilebilir. Yeni bir Harness kaynağı eklemek, bildirimsel bir veri dosyası eklemek anlamına gelir — yeni araç kaydı, şema değişikliği veya prompt güncellemesi gerekmez.

Ön Koşullar

Sunucuyu kurmadan veya çalıştırmadan önce bir Harness API anahtarına ihtiyacınız var:

  1. Harness hesabınıza giriş yapın
  2. Profilim → API Anahtarları → + Yeni API Anahtarı bölümüne gidin
  3. API anahtarının altında yeni bir Belirteç oluşturun — bu, <prefix>.<accountId>.<tokenId>.<secret> biçiminde bir PAT veya SAT üretir
  4. Belirteci güvenli bir yere kaydedin — sonraki adımda buna ihtiyacınız olacak

Ayrıntılı talimatlar için Harness API Hızlı Başlangıç bölümüne bakın.

Hızlı Başlangıç

Seçenek 0: Barındırılan Harness MCP

Harness hesabınızda barındırılan MCP hizmeti etkinse, uzak MCP sunucularını destekleyen istemciler, sunucuyu yerel olarak çalıştırmak yerine doğrudan yönetilen uç noktaya bağlanabilir.

Önemli: Barındırılan MCP hizmeti, HARNESS_API_KEY değil Harness Platform OAuth kullanır. Ayrıca, uç nokta kullanılmadan önce Harness Destek tarafından hesap başına etkinleştirilmesi/yapılandırılması gerekir.

Yapılandırma örnekleri için Barındırılan Harness MCP bölümüne bakın.

Seçenek 1: npx (Önerilen)

Kurulum gerekmez — sadece çalıştırın:

HARNESS_API_KEY=pat.xxx.xxx.xxx npx harness-mcp-v2@latest

Veya API anahtarını yapay zeka istemcinizde yapılandırın (aşağıdaki İstemci Yapılandırması bölümüne bakın).

# Stdio transport (default — for Claude Desktop, Cursor, Devin Desktop, etc.)
HARNESS_API_KEY=pat.xxx npx harness-mcp-v2

# HTTP transport (for remote/shared deployments)
HARNESS_API_KEY=pat.xxx npx harness-mcp-v2 http --port 8080

Not: Hesap kimliği, PAT ve SAT belirteçlerinden (pat.<accountId>... veya sat.<accountId>...) otomatik olarak çıkarılır, bu nedenle HARNESS_ACCOUNT_ID yalnızca gömülü hesap bölümü olmayan API anahtarları için gereklidir.

Seçenek 2: Global Kurulum

npm install -g harness-mcp-v2

# Then run directly
harness-mcp-v2

Seçenek 3: Kaynaktan Derleme

Geliştirme veya özelleştirme için:

git clone https://github.com/harness/mcp-server.git
cd mcp-server
pnpm install
pnpm build

# Run
pnpm start              # Stdio transport
pnpm start:http         # HTTP transport
pnpm inspect            # Test with MCP Inspector

Anthropic MCP Dizin paketi

MCPB paket bildirimi [mcp-directory/](mcp-directory/) içinde, 512×512 paket simgesi ise depo kökünde [icon.png](icon.png) konumunda izlenir. Paketlenmiş arşiv, kök düzeyinde manifest.json, icon.png, server/, package.json, npm-shrinkwrap.json ve üretim node_modules/ içerir.

Arşivi küçük tutmak için MCPB paketlerini bir hazırlık dizininden derleyin:

pnpm prepare:mcpb

Hazırlık dizini, npm'in düz düzeni kullanılarak npm-shrinkwrap.json konumundan üretim bağımlılıklarıyla birlikte dist/mcpb/ konumuna yazılır. Sabitlenmiş resmi MCPB CLI bunu doğrular ve dist/harness-mcp-server-<version>.mcpb oluşturur.

v*.*.* ile eşleşen sürüm etiketleri, bu paketi otomatik olarak ilgili GitHub Sürümüne yayınlar. npm'i yeniden yayınlamadan mevcut bir sürümü geriye doldurmak için, Release iş akışını release_tag girdisiyle (örneğin, v3.2.20) manuel olarak çalıştırın. İş akışı, yalnızca sürümlü MCPB varlığını değiştirmeden önce tam olarak o etiketi kontrol eder ve derler.

CLI Kullanımı

harness-mcp-v2 [stdio|http] [--port <number>]

Options:
  --port <number>  Port for HTTP transport (default: 3000, or PORT env var)
  --help           Show help message and exit
  --version        Print version and exit

Belirtilmezse taşıma varsayılan olarak stdio olur. Uzak/paylaşılan dağıtımlar için http kullanın.

HTTP Taşıma

HTTP modunda çalışırken sunucu şunları sunar:

Uç NoktaYöntemAçıklama
/mcpPOSTMCP JSON-RPC uç noktası (başlatma + oturum istekleri)
/mcpGETSunucu tarafından başlatılan mesajlar için SSE akışı (ilerleme, bilgi toplama)
/mcpDELETEEtkin bir MCP oturumunu sonlandır
/mcpOPTIONSCORS ön kontrolü
/healthGETSağlık kontrolü — { "status": "ok", "sessions": <count> } döndürür
/.well-known/oauth-protected-resourceGETHARNESS_MCP_MODE=oauth olduğunda RFC 9728 meta verileri
/.well-known/oauth-protected-resource/mcpGETVarsayılan /mcp kaynağı için yola duyarlı RFC 9728 meta verileri

HTTP taşıma oturum tabanlı modda çalışır. initialize üzerinde yeni bir MCP oturumu oluşturulur, sunucu bir mcp-session-id başlığı döndürür ve bu oturum için sonraki istekler aynı başlığı içermelidir.

HTTP modunda operasyonel kısıtlamalar:

  • Paylaşılan veya uzaktan erişilebilir tek kullanıcılı ve çok kullanıcılı dağıtımlar için HARNESS_MCP_AUTH_TOKEN ayarlayın. Ayarlandığında, /mcp adresine yapılan her POST, GET ve DELETE isteği Authorization: Bearer <token> içermelidir.
  • OAuth modu, HARNESS_MCP_AUTH_TOKEN yerine HarnessID erişim belirteçlerini kabul eder ve kimlik doğrulamasız devre dışı bırakma olmadan döngü dışı adrese bağlanabilir.
  • Döngü dışı tek kullanıcılı ve çok kullanıcılı bağlantılar varsayılan olarak HARNESS_MCP_AUTH_TOKEN gerektirir. Yine de döngü dışı bir arayüzde kimlik doğrulamasız çalıştırmak için HARNESS_MCP_ALLOW_UNAUTHENTICATED_HTTP=true açıkça ayarlayın.
  • POST /mcp, mcp-session-id olmadan bir initialize isteği olmalıdır.
  • Mevcut oturumlar için POST /mcp, GET /mcp ve DELETE /mcp, mcp-session-id başlığını gerektirir.
  • GET /mcp, SSE bildirimleri için kullanılır (ilerleme güncellemeleri ve bilgi toplama istemleri).
  • Boşta kalan oturumlar, hiçbir istek veya SSE akışı etkin olmadığında MCP_SESSION_TTL_MS milisaniye sonra sonlandırılır (varsayılan 1800000 veya 30 dakika).
  • GET /health tek MCP olmayan uç noktadır.
  • İstek gövdesi boyutu HARNESS_MAX_BODY_SIZE_MB tarafından sınırlandırılır (varsayılan 10 MB).
  • Bu HTTP oturumu için V0 veya V1 pipeline kaynaklarını seçmek üzere initialize isteğinde x-harness-pipeline-version: 0 veya 1 ayarlayın.
  • Daha sıkı bir oturum başına otomatik onay eşiği seçmek için initialize isteğinde x-harness-auto-approve-risk: none|low_write|medium_write|high_write|all ayarlayın. Sunucu bu değeri dağıtım düzeyindeki HARNESS_AUTO_APPROVE_RISK ile sınırlar, böylece bir oturum yapılandırılmış onay tavanını azaltabilir ancak genişletemez.

HarnessID OAuth Modu

Uzak MCP istemcilerinin HarnessID'yi keşfetmesine ve PKCE ile OAuth 2.1 Yetkilendirme Kodu akışını tamamlamasına izin vermek için HARNESS_MCP_MODE=oauth ayarlayın. OAuth modu yalnızca HTTP taşıma ile kullanılabilir. Üretim HarnessID, MCP kaynağı ve API yönlendirme varsayılanları yerleşiktir:

HARNESS_MCP_MODE=oauth

Bu, varsayılan olarak veren https://id.harness.io/idp/realms/HarnessIDP, kaynak https://mcp.harness.io/mcp, OAuth istemcisi mcp-client ve Harness API tabanı https://mcp.harness.io/cli olarak ayarlanır. Bunları yalnızca QA, yerel geliştirme veya başka bir Harness ortamı için geçersiz kılın.

HARNESS_API_KEY bu modda ayarlanmamalıdır. HARNESS_MCP_OAUTH_JWKS_URI varsayılan olarak <issuer>/protocol/openid-connect/certs olur ve HARNESS_ACCOUNT_ID gereksizdir çünkü hesap belirteçten gelir.

Sunucu, RFC 9728 korumalı kaynak meta verilerini yayınlar ve bir istemci kimlik doğrulaması yapmadığında şu yanıtı döndürür:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://mcp.harness.io/.well-known/oauth-protected-resource/mcp"

HarnessID erişim belirtecinin RS256 imzasını, iss, son kullanma tarihini ve sub değerini yapılandırılmış JWKS uç noktasını kullanarak doğrular ve belirtecin azp talebi aracılığıyla HARNESS_MCP_OAUTH_CLIENT_ID adresine verildiğini kontrol eder. HARNESS_MCP_OAUTH_RESOURCE, keşif ve zorluklar için kullanılan RFC 9728 korumalı kaynak tanımlayıcısıdır. Geçerli HarnessID erişim belirteçleri, MCP URL'si yerine aud: account kullanır, bu nedenle kaynak aud ile karşılaştırılmaz.

Hesap kimliği, belirtecin HARNESS_MCP_OAUTH_ACCOUNT_CLAIM talebinden (varsayılan olarak account_id) gelir ve bu, HarnessID organization kapsamı tarafından doldurulur. Her oturum, arayanın erişim belirtecini saklar ve bunu Authorization: Bearer olarak Harness API'sine iletir, böylece Harness RBAC ve denetim kayıtları paylaşılan bir PAT yerine oturum açmış kullanıcıyı yansıtır. Oturum, oluşturulduğu sub ve hesaba bağlıdır: daha sonraki bir istek yenilenmiş bir belirteç taşıyabilir, ancak farklı bir kullanıcı veya hesap için olan reddedilir.

İstemcilerin normalde yalnızca MCP kaynak URL'sine ihtiyacı vardır:

{
  "mcpServers": {
    "harness": {
      "url": "https://mcp.harness.io/mcp"
    }
  }
}

İstemci, korumalı kaynak meta verilerini okur, HARNESS_MCP_OAUTH_ISSUER keşfeder ve ardından bu yetkilendirme sunucusunun RFC 8414 meta verilerini kullanır. İstemci dinamik istemci kaydını desteklemiyorsa, önceden kayıtlı mcp-client istemci kimliğini kullanın.

QA Keycloak kontrol listesi ve doğrulama komutları için Kendi kendine barındırılan MCP sunucusu için HarnessID OAuth bölümüne bakın.

Çok Kullanıcılı Mod

Her istemcinin farklı bir Harness kullanıcısı olarak kimlik doğruladığı paylaşılan HTTP dağıtımları için HARNESS_MCP_MODE=multi-user ayarlayın. Bu modda:

  • HARNESS_API_KEY, sunucu yapılandırmasında ayarlanmamalıdır — sunucu hiçbir Harness kimlik bilgisi tutmaz.
  • Her oturum, initialize isteğinde x-harness-api-key sağlamalıdır. x-harness-account-id, yalnızca API anahtarı bir hesap bölümü gömmediğinde gereklidir.
  • Oturumlar ayrıca bu oturum için varsayılan kapsamı ayarlamak üzere x-harness-org ve x-harness-project başlıkları sağlayabilir.
  • Harness API anahtarı, bu oturum için her Harness API çağrısına akar, böylece Harness'teki denetim izi gerçek kullanıcıyı yansıtır.
  • HARNESS_MCP_AUTH_TOKEN bağımsızdır ve yine de ek bir taşıma katmanı kapısı olarak kullanılabilir.
# Health check
curl http://localhost:3000/health

# MCP initialize request (capture mcp-session-id response header)
# In multi-user mode, x-harness-api-key is required on initialize.
# x-harness-account-id is needed only for API keys without an embedded account segment.
curl -i -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer $HARNESS_MCP_AUTH_TOKEN" \
  -H "x-harness-api-key: $HARNESS_API_KEY" \
  -H "x-harness-account-id: $HARNESS_ACCOUNT_ID" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

# Subsequent MCP request (use returned session ID)
curl -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer $HARNESS_MCP_AUTH_TOKEN" \
  -H "mcp-session-id: <session-id>" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'

# Terminate session
curl -X DELETE http://localhost:3000/mcp \
  -H "Authorization: Bearer $HARNESS_MCP_AUTH_TOKEN" \
  -H "mcp-session-id: <session-id>"

HARNESS_MCP_ALLOWED_HOSTS, DNS yeniden bağlama koruması için Host başlığı doğrulamasını kontrol eder ve CORS, tarayıcı kaynaklarını sınırlar. Hiçbiri kimlik doğrulama değildir; erişim kontrolü için HARNESS_MCP_AUTH_TOKEN veya kimliği doğrulanmış bir ağ geçidi/ters proxy kullanın.

İstemci Yapılandırması

Not: HARNESS_ORG ve HARNESS_PROJECT isteğe bağlıdır. Araç çağrısı başına belirtilmediğinde kullanılan organizasyon kimliğini ve proje kimliğini ayarlarlar. Ajanlar, harness_list(resource_type="organization") ve harness_list(resource_type="project") kullanarak organizasyonları ve projeleri dinamik olarak keşfedebilir. Eski adlar HARNESS_DEFAULT_ORG_ID ve HARNESS_DEFAULT_PROJECT_ID geriye dönük uyumluluk için hâlâ kabul edilir.

Barındırılan Harness MCP

Harness ayrıca, yönetilen hizmetin etkin olduğu hesaplar için barındırılan bir MCP uç noktasını destekler. Bu, npx harness-mcp-v2 çalıştırmak veya HTTP taşımayı kendi kendine barındırmak yerine paylaşılan bir uzak MCP uç noktası istediğinizde kullanışlıdır.

Önemli: Barındırılan MCP kimlik doğrulaması Harness Platform OAuth kullanır. İstemci yapılandırmasında HARNESS_API_KEY kullanmaz. Barındırılan MCP kullanılabilirliği Harness hesabı başına yapılandırılır; bu nedenle kullanmadan önce ayarı etkinleştirmek/yapılandırmak için Harness Support ile çalışmanız gerekecektir.

Barındırılan uç nokta https://mcp.harness.io/mcp yönetilen bir hizmettir. Claude, Cursor veya Cowork'daki istemci tarafı MCP yapılandırması, hangi Harness ortamına yönlendirileceğini geçersiz kılamaz. Harness0 veya başka bir özel Harness SaaS ortamı için, bu ortam için barındırılan MCP'yi etkinleştirmek/yapılandırmak üzere Harness Support'tan istekte bulunun veya yerel/kendi kendine barındırılan sunucuyu çalıştırıp HARNESS_BASE_URL değerini hedef Harness ana bilgisayarına ayarlayın.

Barındırılan MCP örneği:

{
  "mcpServers": {
    "harness-prod1-mcp": {
      "url": "https://mcp.harness.io/mcp",
      "auth": {
        "CLIENT_ID": "mcp-client"
      }
    }
  }
}

Hem barındırılan hem de yerel girişlerin bulunduğu örnek:

{
  "mcpServers": {
    "harness-hosted": {
      "url": "https://mcp.harness.io/mcp",
      "auth": {
        "CLIENT_ID": "mcp-client"
      }
    },
    "harness-local": {
      "command": "/absolute/path/to/npx",
      "args": ["-y", "harness-mcp-v2@latest"],
      "env": {
        "HARNESS_API_KEY": "pat.xxx.xxx.xxx",
        "PATH": "/directory/containing/node:/usr/local/bin:/usr/bin:/bin"
      }
    }
  }
}

npx ENOENT veya node: No such file or directory Sorun Giderme

Bu, bir Harness kimlik doğrulama hatası değil, bir istemci işlem başlatma hatasıdır. MCP sunucusu henüz başlamadı, bu nedenle HARNESS_API_KEY değiştirmek spawn npx ENOENT etkilemeyecektir.

GUI uygulamaları (Cursor, Claude Desktop, Devin Desktop, VS Code) kabuğunuzun PATH her zaman devralmaz, bu nedenle bir yapılandırma yeniden yüklemesinden sonra npx veya node bulmakta başarısız olabilirler. Bunu mutlak yollar kullanarak ve env bloğunda PATH açıkça ayarlayarak düzeltin:

{
  "mcpServers": {
    "harness": {
      "command": "/absolute/path/to/npx",
      "args": ["-y", "harness-mcp-v2"],
      "env": {
        "HARNESS_API_KEY": "pat.xxx.xxx.xxx",
        "PATH": "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin"
      }
    }
  }
}

Yollarınızı bir terminalde which npx ve which node ile bulun, ardından node içeren dizinin yukarıdaki PATH değerine dahil edildiğinden emin olun. Yaygın konumlar:

  • Homebrew (macOS): /opt/homebrew/bin/npx
  • nvm: ~/.nvm/versions/node/v20.x.x/bin/npx (tam yolu bulmak için nvm which current çalıştırın)
  • Sistem Node: /usr/local/bin/npx

Claude Desktop (claude_desktop_config.json)

npx (sıfır kurulum)

{
  "mcpServers": {
    "harness": {
      "command": "/absolute/path/to/npx",
      "args": ["-y", "harness-mcp-v2@latest"],
      "env": {
        "HARNESS_API_KEY": "pat.xxx.xxx.xxx",
        "PATH": "/directory/containing/node:/usr/local/bin:/usr/bin:/bin"
      }
    }
  }
}

node (yerel kurulum)

npm install -g harness-mcp-v2
{
  "mcpServers": {
    "harness": {
      "command": "/absolute/path/to/harness-mcp-v2",
      "env": {
        "HARNESS_API_KEY": "pat.xxx.xxx.xxx",
        "PATH": "/directory/containing/node:/usr/local/bin:/usr/bin:/bin"
      }
    }
  }
}

Claude Code (claude mcp add aracılığıyla)

npx (sıfır kurulum)

claude mcp add harness -- npx harness-mcp-v2

node (yerel kurulum)

npm install -g harness-mcp-v2
claude mcp add harness -- harness-mcp-v2

Ardından ortamınızda veya .env dosyasında HARNESS_API_KEY ayarlayın.

Cursor (.cursor/mcp.json)

npx (sıfır kurulum, yerel Cursor yapılandırmaları için önerilir)

{
  "mcpServers": {
    "harness": {
      "command": "/absolute/path/to/npx",
      "args": ["-y", "harness-mcp-v2@latest"],
      "env": {
        "HARNESS_API_KEY": "pat.xxx.xxx.xxx",
        "PATH": "/directory/containing/node:/usr/local/bin:/usr/bin:/bin"
      }
    }
  }
}

Bir terminalde which npx çalıştırın ve command için bu tam yolu kullanın; which node dizinini PATH başına ekleyin.

node (yerel kurulum)

npm install -g harness-mcp-v2
{
  "mcpServers": {
    "harness": {
      "command": "/absolute/path/to/harness-mcp-v2",
      "env": {
        "HARNESS_API_KEY": "pat.xxx.xxx.xxx",
        "PATH": "/directory/containing/node:/usr/local/bin:/usr/bin:/bin"
      }
    }
  }
}

npm install -g harness-mcp-v2 sonrasında which harness-mcp-v2 çalıştırın ve command için bu tam yolu kullanın; which node dizinini PATH başına ekleyin.

Devin Desktop (~/.windsurf/mcp.json)

npx (sıfır kurulum)

{
  "mcpServers": {
    "harness": {
      "command": "/absolute/path/to/npx",
      "args": ["-y", "harness-mcp-v2@latest"],
      "env": {
        "HARNESS_API_KEY": "pat.xxx.xxx.xxx",
        "PATH": "/directory/containing/node:/usr/local/bin:/usr/bin:/bin"
      }
    }
  }
}

node (yerel kurulum)

npm install -g harness-mcp-v2
{
  "mcpServers": {
    "harness": {
      "command": "/absolute/path/to/harness-mcp-v2",
      "env": {
        "HARNESS_API_KEY": "pat.xxx.xxx.xxx",
        "PATH": "/directory/containing/node:/usr/local/bin:/usr/bin:/bin"
      }
    }
  }
}

Kaynaktan yerel bir derleme mi kullanıyorsunuz?

Komutu, derlenmiş index.js yolunuzla değiştirin:

{
  "command": "node",
  "args": ["/absolute/path/to/harness-mcp-v2/build/index.js", "stdio"]
}

MCP Gateway

Harness MCP sunucusu, MCP Gateway'ler ile tamamen uyumludur — birden fazla MCP sunucusu genelinde merkezi kimlik doğrulama, yönetişim, araç yönlendirme ve gözlemlenebilirlik sağlayan ters proxy'ler. Sunucu, hem stdio hem de HTTP taşımalarıyla standart MCP protokolünü uyguladığından, kod değişikliği olmadan MCP uyumlu herhangi bir gateway'in arkasında çalışır.

Neden bir gateway kullanmalısınız?

  • Merkezi kimlik bilgisi yönetimi — aracı yapılandırmalarında API anahtarı yok
  • Ekipler arasındaki tüm araç çağrıları için yönetişim ve denetim günlüğü
  • N MCP sunucusuna N bağlantı yerine aracılar için tek uç nokta
  • Erişim kontrolü — hangi ekiplerin hangi araçları kullanabileceğini kısıtlama

Docker MCP Gateway

Sunucuyu Docker MCP Gateway yapılandırmanıza kaydedin:

{
  "mcpServers": {
    "harness": {
      "command": "npx",
      "args": ["harness-mcp-v2"],
      "env": {
        "HARNESS_API_KEY": "pat.xxx.xxx.xxx"
      }
    }
  }
}

Portkey

Kurumsal yönetişim, maliyet takibi ve çoklu-LLM yönlendirme için Harness MCP sunucusunu Portkey MCP Gateway ekleyin:

{
  "mcpServers": {
    "harness": {
      "command": "npx",
      "args": ["harness-mcp-v2"],
      "env": {
        "HARNESS_API_KEY": "pat.xxx.xxx.xxx"
      }
    }
  }
}

LiteLLM

LiteLLM proxy yapılandırmanıza ekleyin:

mcp_servers:
  - name: harness
    command: npx
    args:
      - harness-mcp-v2
    env:
      HARNESS_API_KEY: "pat.xxx.xxx.xxx"

Envoy AI Gateway

Sunucu, HTTP taşıması üzerinden Envoy AI Gateway'in MCP desteğiyle çalışır:

# Start the server in HTTP mode
HARNESS_API_KEY=pat.xxx.xxx.xxx npx harness-mcp-v2 http --port 8080

Ardından Envoy'u bir yukarı akış MCP arka ucu olarak http://localhost:8080/mcp yönlendirecek şekilde yapılandırın.

Kong

Harness MCP sunucusunu mevcut Kong gateway altyapınız üzerinden sunmak için Kong'un AI MCP Proxy eklentisini kullanın.

Diğer Gateway'ler

MCP spesifikasyonunu destekleyen herhangi bir gateway (Microsoft MCP Gateway, IBM ContextForge, Cloudflare Workers, vb.) bu sunucuyu proxy olarak kullanabilir. stdio tabanlı gateway'ler için varsayılan taşımayı kullanın. HTTP tabanlı gateway'ler için sunucuyu http taşımasıyla başlatın ve gateway'i /mcp uç noktasına yönlendirin.

Docker

Sunucuyu bir Docker kapsayıcısı olarak derleyin ve çalıştırın:

# Build the image
pnpm docker:build

# Run with your .env file
pnpm docker:run

# Or run directly with env vars
docker run --rm -p 3000:3000 \
  -e HARNESS_API_KEY=pat.xxx.xxx.xxx \
  -e HARNESS_ACCOUNT_ID=your-account-id \
  harness-mcp-server

Kapsayıcı varsayılan olarak 3000 portunda HTTP modunda, yerleşik bir sağlık kontrolüyle çalışır.

Kubernetes

Sağlanan manifestleri kullanarak bir Kubernetes kümesine dağıtın:

# 1. Edit the Secret with your real credentials
#    k8s/secret.yaml — replace HARNESS_API_KEY and HARNESS_ACCOUNT_ID

# 2. Apply all manifests
kubectl apply -f k8s/

# 3. Verify the deployment
kubectl -n harness-mcp get pods

# 4. Port-forward for local testing
kubectl -n harness-mcp port-forward svc/harness-mcp-server 3000:80
curl http://localhost:3000/health

Dağıtım, hazırlık/canlılık probları, kaynak limitleri ve root olmayan güvenlik bağlamıyla 2 replika çalıştırır. Service, 80 portunu dahili olarak sunar (kapsayıcı portu 3000'i hedefler).

Yapılandırma

Sunucu, proje kökünde bir .env dosyası varsa, otomatik olarak ortam değişkenlerini yükler. .env.example dosyasını .env kopyalayın ve değerlerinizi doldurun. Ortam değişkenleri ayrıca kabuğunuz veya MCP istemci yapılandırması aracılığıyla da ayarlanabilir.

DeğişkenZorunluVarsayılanAçıklama
HARNESS_MCP_MODEHayırsingle-userDağıtım modu: single-user (paylaşılan API anahtarı), multi-user (oturum başına API anahtarlarıyla HTTP) veya oauth (HarnessID erişim tokeni doğrulamasıyla HTTP)
HARNESS_API_KEYEvet*--Harness kişisel erişim tokeni veya hizmet hesabı tokeni. single-user modunda gereklidir. multi-user veya oauth modunda AYARLANMAMALIDIR; bu modlarda her oturum kendi kimlik bilgisini getirir
HARNESS_ACCOUNT_IDHayır(PAT/SAT'ten)Harness hesap tanımlayıcısı. Tek kullanıcılı modda PAT/SAT tokenlerinden otomatik çıkarılır; çok kullanıcılı oturumlar, API anahtarı bir tane gömmediğinde x-harness-account-id aracılığıyla kendi hesap tanımlayıcısını sağlayabilir
HARNESS_BASE_URLHayırhttps://app.harness.io (OAuth modunda https://mcp.harness.io/cli)Harness API/UI temel URL'si. OAuth modu varsayılan olarak barındırılan MCP /cli proxy'si üzerinden yönlendirir; diğer modlar doğrudan Harness SaaS API'sini kullanır
HARNESS_MCP_OAUTH_ISSUERHayırhttps://id.harness.io/idp/realms/HarnessIDPHarnessID veren, erişim tokeninin iss talebiyle tam olarak eşleştirilir
HARNESS_MCP_OAUTH_RESOURCEHayırhttps://mcp.harness.io/mcpRFC 9728 kaynak tanımlayıcısı olarak yayınlanan genel kanonik MCP URL'si
HARNESS_MCP_OAUTH_JWKS_URIHayır<issuer>/protocol/openid-connect/certsRS256 erişim tokeni imzalarını doğrulamak için kullanılan HarnessID JWKS uç noktası
HARNESS_MCP_OAUTH_CLIENT_IDHayırmcp-clientErişim tokeninin verilmesi gereken HarnessID istemcisi, tokenin azp talebine karşı kontrol edilir
HARNESS_MCP_OAUTH_ACCOUNT_CLAIMHayıraccount_idHarness hesap kimliğini taşıyan erişim tokeni talebi, HarnessID organization kapsamı tarafından doldurulur
HARNESS_MCP_OAUTH_SCOPESHayıropenid profile email organizationRFC 9728 korumalı kaynak meta verilerinde tanıtılan boşlukla ayrılmış kapsamlar
HARNESS_FME_API_KEYHayır--Yalnızca eski (workspace_id) modunda fme_ kaynakları için kullanılan isteğe bağlı tek kullanıcılı/kendi kendine barındırılan FME/Split Yönetici kimlik bilgisi. Eski FME, OAuth modunda kullanılamaz; bu nedenle HarnessID tokenleri asla api.split.io'ye gönderilmez; bunun yerine Harness yerel org_id+project_id kapsamını kullanın. multi-user veya oauth modunda ayarlanmamalıdır
HARNESS_FME_BASE_URLHayırhttps://api.split.ioYalnızca eski (workspace_id) modunda fme_ kaynakları tarafından kullanılan Split/FME Yönetici API temel URL'si. HTTP URL'leri yerel geliştirme için HARNESS_ALLOW_HTTP=true gerektirir. Harness yerel (org_id+project_id) modu bunu yok sayar ve standart HARNESS_API_KEY/HARNESS_BASE_URL kullanır
HARNESS_ORGHayır--Organizasyon kimliği. Araç çağrısı başına org_id belirtilmediğinde kullanılır. Atlanırsa, org_id açıkça sağlanmalıdır. Ajanlar ayrıca harness_list(resource_type="organization") aracılığıyla organizasyonları dinamik olarak keşfedebilir
HARNESS_PROJECTHayır--Proje kimliği. Araç çağrısı başına project_id belirtilmediğinde kullanılır. Ajanlar ayrıca harness_list(resource_type="project") aracılığıyla projeleri dinamik olarak keşfedebilir
HARNESS_API_TIMEOUT_MSHayır30000HTTP istek zaman aşımı milisaniye cinsinden
HARNESS_MAX_RETRIESHayır3Geçici hatalar için yeniden deneme sayısı (429, 5xx)
HARNESS_MAX_BODY_SIZE_MBHayır10http taşıması için maksimum HTTP istek gövdesi boyutu MB cinsinden
HARNESS_RATE_LIMIT_RPSHayır10Harness API'lerine istemci tarafı istek sınırlaması (saniye başına istek)
LOG_LEVELHayırinfoGünlük ayrıntı düzeyi: debug, info, warn, error
HARNESS_TOOLSETSHayır(varsayılanlar)Virgülle ayrılmış araç seti listesi. Boş, varsayılan araç setlerini yükler. Opt-in araç setlerini açıkça dahil etmek için +name ve varsayılanları kaldırmak için -name destekler (bkz. Araç Seti Filtreleme)
HARNESS_READ_ONLYHayırfalseTüm değiştirici işlemleri engelle (oluştur, güncelle, sil, çalıştır). Yalnızca listele ve getir izinlidir. Paylaşılan/demo ortamları için kullanışlıdır
HARNESS_AUTO_APPROVE_RISKHayırnoneOtonom iş akışları için riske dayalı otomatik onay eşiği. Bu eşiğin altındaki veya eşit işlemler onay olmadan ilerler. Değerler: none, low_write, medium_write, high_write, all. Bkz. Elicitation
HARNESS_SKIP_ELICITATIONHayırfalseKullanımdan kaldırıldı — bunun yerine HARNESS_AUTO_APPROVE_RISK=all kullanın. Geriye dönük uyumluluk için korunur
HARNESS_ALLOW_HTTPHayırfalseHTTPS olmayan HARNESS_BASE_URL'e izin ver. Varsayılan olarak sunucu güvenlik için HTTPS uygular. Yalnızca TLS olmayan bir Harness örneğine karşı yerel geliştirme için true olarak ayarlayın
HARNESS_PIPELINE_VERSIONHayır0(Alfa) Pipeline YAML sürümü. 0, pipeline kaynak türünü yükler ve pipeline_v1'i hariç tutar; 1, pipeline_v1'ü yükler ve pipeline'ü hariç tutar. HTTP oturumları bunu başlatma sırasında x-harness-pipeline-version: 0 veya 1 ile geçersiz kılabilir
HARNESS_MCP_ALLOWED_HOSTSHayır--HTTP taşıma Host başlığı doğrulaması tarafından izin verilen virgülle ayrılmış ana bilgisayar adları. mcp.harness.io yerel ana bilgisayar bağlamaları için varsayılan olarak izinlidir; proxy/özel alan adlarını buraya ekleyin
HARNESS_MCP_AUTH_TOKENHayır--Ayarlanırsa /mcp HTTP yollarında gerekli statik Bearer tokeni. Döngüsel olmayan tek kullanıcılı ve çok kullanıcılı bağlamalar için varsayılan olarak gereklidir. oauth modunda ayarlanmamalıdır
HARNESS_MCP_ALLOW_UNAUTHENTICATED_HTTPHayırfalseDöngüsel olmayan bağlamalarda kimlik doğrulamasız HTTP taşımasına açıkça izin ver. Yalnızca başka bir kimlik doğrulamalı kontrolün arkasında kullanın
HARNESS_MCP_TRUST_PROXYHayır0İstemci IP çözümlemesi için güvenilecek ters proxy / yük dengeleyici atlama sayısı (Express trust proxy). Sunucunun önündeki proxy sayısına ayarlayın, böylece IP başına hız sınırlaması gerçek istemciye değil proxy soket eşine göre anahtarlanır
HARNESS_MCP_LOG_FILEHayır~/.claude/harness-mcp.logstderr artık mevcut olmadığında stdio bağlantı kesilmesi/çökme teşhisi için kullanılan dosya
HARNESS_LOG_UNSAFE_BODIESHayırfalseGünlüklere ham istek/yanıt gövdelerini dahil et. Gövdeler sırlar içerebileceğinden varsayılan olarak kapalıdır; yalnızca yerel hata ayıklama için etkinleştirin
HARNESS_AUDIT_FILEHayır--Denetim olaylarını kalıcı yerel toplama için yeni satırla ayrılmış bir JSON dosyasına ekle
HARNESS_AUDIT_WEBHOOK_URLHayır--Toplu denetim olaylarını alan HTTPS uç noktası. HTTP URL'leri yerel geliştirme için HARNESS_ALLOW_HTTP=true gerektirir
HARNESS_AUDIT_WEBHOOK_TOKENHayır--Denetim web kancasına gönderilen isteğe bağlı taşıyıcı tokeni
HARNESS_AUDIT_WEBHOOK_BATCH_SIZEHayır10Web kancası boşaltmadan önce toplanacak denetim olayı sayısı
HARNESS_AUDIT_WEBHOOK_FLUSH_MSHayır5000Webhook flush öncesinde denetim olaylarının tutulabileceği maksimum süre
OTEL_EXPORTER_OTLP_ENDPOINTHayır--İsteğe bağlı OpenTelemetry paketleri kurulduğunda OpenTelemetry denetim span'lerini etkinleştirir
HARNESS_SEARCH_PROVIDERHayırlocalAnlamsal arama arka ucu: local (süreç içi ONNX embeddings, varsayılan), remote (HTTP üzerinden harici arama servisi, çok kullanıcılı mod için gereklidir) veya none (anlamsal aramayı devre dışı bırakır, yalnızca anahtar kelime scatter-gather'a geri döner). Hava boşluklu ortamlarda veya başlangıçta model yüklemenin istenmediği durumlarda none kullanın
HARNESS_SEARCH_SERVICE_URLHayır--HARNESS_SEARCH_PROVIDER=remote olduğunda uzak arama servisinin temel URL'si (örn. http://search-svc:8080). remote sağlayıcısını kullanırken gereklidir
HARNESS_SEARCH_SERVICE_HEADERSHayır--Uzak arama servisine gönderilen her istekle birlikte gönderilen başlıkların JSON nesnesi. Her türlü kimlik doğrulama düzenini destekler: {"Authorization":"Bearer tok"}, {"x-api-key":"key"} veya birden fazla dahili servisler arası başlık
HARNESS_HF_CACHE_DIRHayır/tmp/hf-cachelocal arama sağlayıcısı tarafından kullanılan @huggingface/transformers model önbelleği için dizin. Docker imajı, çalışma zamanı indirmelerini önlemek için modeli /app/.cache/hf içine önceden yükler. Üretim dağıtımlarında kalıcı bir birim yoluna ayarlayın
HARNESS_DIAGNOSE_LOG_FETCH_CONCURRENCYHayır3Başarısız adımlar için günlükleri getirirken harness_diagnose tarafından başlatılan maksimum eşzamanlı log-blob indirme sayısı. Yalnızca tanılama gecikmesi log-getirme duvar saati süresi tarafından domine ediliyorsa ve pod'un bellek alanı varsa artırın

Anlamsal Arama

harness_search, scatter-gather API çağrılarını Harness'e dağıtmadan önce daraltmak için anlamsal yönlendirme kullanır. Üç arama sağlayıcısı mevcuttur:

SağlayıcıNe zaman kullanılır
local (varsayılan)Tek kullanıcılı stdio modu. all-MiniLM-L6-v2'ü @huggingface/transformers aracılığıyla süreç içinde çalıştırır. İlk kullanımda ~23 MB model indirir; sonraki başlatmalar önbelleği kullanır.
remoteÇok kullanıcılı HTTP modu (Harness tarafından barındırılır). Gömmeyi ve almayı harici bir arama hizmetine devreder. Kiracı izolasyonu tenant_id aracılığıyla zorunlu kılınır — statik bilgi/dokümanlar global kullanır, hesap başına varlık verileri hesap kimliğini kullanır.
noneAnlamsal aramayı tamamen devre dışı bırakır; tüm kaynak türlerinde anahtar kelime scatter-gather'a geri döner.

Uzak sağlayıcı yapılandırması:

HARNESS_SEARCH_PROVIDER=remote
HARNESS_SEARCH_SERVICE_URL=http://search-svc:8080

# Auth — any scheme via HARNESS_SEARCH_SERVICE_HEADERS (JSON object):
HARNESS_SEARCH_SERVICE_HEADERS='{"Authorization":"Bearer <token>"}'   # standard bearer
HARNESS_SEARCH_SERVICE_HEADERS='{"x-api-key":"<key>"}'               # API key header
HARNESS_SEARCH_SERVICE_HEADERS='{"x-harness-token":"<svc-token>"}'   # internal service-to-service
# Multiple headers (e.g. service mesh + tenant routing):
HARNESS_SEARCH_SERVICE_HEADERS='{"x-harness-token":"<tok>","x-tenant":"<id>"}'
# No auth (service mesh / mTLS handles it):
# omit HARNESS_SEARCH_SERVICE_HEADERS entirely

Uzak sağlayıcıyı yerel olarak test etme dahil edilen stub hizmetiyle (harici bağımlılık yok):

# 1. Create a venv and install FastAPI
python3 -m venv .venv-stub
.venv-stub/bin/pip install fastapi uvicorn

# 2. Start the stub (in-memory, cosine similarity, corpus + tenant filtering)
.venv-stub/bin/uvicorn stub-search-service:app --port 8082

# 3. Build the MCP server
pnpm build

# 4. Run the integration smoke test
node test-remote-provider.mjs
# Expected output:
#   available: true
#   indexed 2 docs
#   entity search results: pipeline:ts-test score=... corpus=entities
#   knowledge search results: schema:trigger score=...
#   all-corpus search results: (merged, sorted by score)
#   isolation check (other-acct, should be empty): PASS

# 5. Tear down
kill $(lsof -ti :8082)

Stub (stub-search-service.py), üretim arama hizmetiyle aynı /v1/health, /v1/ingest ve /v1/search sözleşmesini uygular. Basit bir karakter torbası gömmesi kullanır, bu nedenle model indirme gerekmez — sonuçlar anlamsal olarak makuldür ancak üretim kalitesinde değildir.

HTTPS Zorunluluğu

HARNESS_BASE_URL varsayılan olarak HTTPS kullanmalıdır. HTTPS olmayan bir URL ayarlarsanız (örn. http://localhost:8080), sunucu şu hatayla başlamayı reddeder:

HARNESS_BASE_URL must use HTTPS (got "http://..."). If you need HTTP for local development, set HARNESS_ALLOW_HTTP=true.

Denetim Günlüğü

Kayıt defteri tarafından dağıtılan tüm Harness API işlemleri (list, get, create, update, delete ve execute), denetim havuzları yapılandırıldığında yapılandırılmış denetim olayları yayar. Değiştiren olaylar, bir onay bağlamı mevcut olduğunda sorgulama veya otomatik onay tarafından kullanılan onay yolunu içerir; okuma olayları şu anda onay meta verilerini atlar. Kayıt defterini atlayan yerel meta veri ve şema keşif araçları, örneğin harness_describe ve harness_schema, bu denetim akışının parçası değildir. Varsayılan olarak bir stderr havuzu kayıtlıdır ancak normal günlükçüden geçer ve LOG_LEVEL'e uyar; kalıcı denetim toplama için dosya veya webhook havuzları yapılandırın:

  • HARNESS_AUDIT_FILE, yerel toplama için satır sonuyla ayrılmış JSON olayları ekler.
  • HARNESS_AUDIT_WEBHOOK_URL, { "events": [...] } gruplarını bir HTTPS webhook'una gönderir, isteğe bağlı olarak HARNESS_AUDIT_WEBHOOK_TOKEN ile. Başarısız gruplar sınırlı kapasiteyle yeniden kuyruğa alınır ve araç yürütmeyi engellemek yerine bir uyarıyla sonunda atılır.
  • OTEL_EXPORTER_OTLP_ENDPOINT, isteğe bağlı OpenTelemetry eş bağımlılıkları yüklendiğinde denetim aralıklarını etkinleştirir. Havuz, kayıtlı bir izleyici sağlayıcısı olduğunda onu yeniden kullanır, aksi takdirde bağımsız bir OTLP dışa aktarıcı başlatır.

Her olay, araç adını, kaynak türünü, işlemi, tanımlayıcıları, zaman damgasını, riski, sonucu, HTTP yöntemini/yolunu, süreyi ve uygulanabilir olduğunda onay yöntemini içerir. Denetim havuzları en iyi çaba telemetrisidir; teslimat sorunları günlüğe kaydedilir ve alttaki Harness API işlemini asla yeniden oynatmaz veya değiştirmez. OTel kurulum ayrıntıları ve aralık öznitelikleri için bkz. specs/005-otel-audit-sink.md.

Araçlar Referansı

Sunucu 11 MCP aracı sunar. Çoğu API aracı, isteğe bağlı geçersiz kılmalar olarak org_id ve project_id kabul eder — atlanırsa, HARNESS_ORG ve HARNESS_PROJECT'e geri dönerler. harness_describe yalnızca yerel meta veridir ve org/proje kapsamını kullanmaz.

URL desteği: API odaklı araçların çoğu bir url parametresi kabul eder — bir Harness UI URL'si yapıştırın ve sunucu org, proje, kaynak türü, kaynak kimliği, boru hattı kimliği ve yürütme kimliğini otomatik olarak çıkarır. harness_describe, url kabul etmez.

Kapsam desteği: Hesap/org/proje varyantlarına sahip kaynak türleri, harness_describe içinde supportedScopes sunar. Belirli bir düzeye ihtiyacınız olduğunda resource_scope iletin:

  • resource_scope: "account" yalnızca accountIdentifier gönderir.
  • resource_scope: "org", accountIdentifier ve orgIdentifier gönderir.
  • resource_scope: "project", hesap, org ve proje tanımlayıcılarını gönderir.

Mevcut çok kapsamlı kaynaklar connector, service, environment, infrastructure, secret, file_store, template, policy ve policy_set içerir. resource_scope atlanırsa, kayıt defteri kaynağın varsayılan kapsamını ve yapılandırılmış varsayılanları kullanır; isteğe bağlı kapsam olarak işaretlenen kaynaklar, açıkça iletilmedikçe org/projeyi atlayabilir. Harness URL'leri, yol hesap düzeyinde veya proje düzeyinde bağlam içerdiğinde kapsamı otomatik olarak da ayarlayabilir.

Yapılandırılmış çıktı: Her araç bir MCP outputSchema bildirir. harness_list, liste benzeri Harness yanıtlarını nesne biçimli yapılandırılmış içeriğe normalleştirir, böylece katı istemciler bunu doğrulayabilir: üst düzey diziler { "items": [...], "total": <count>, "page": <page> } olur ve content, data, body, objects veya features gibi yaygın sarmalayıcı anahtarlar, gerektiğinde items'e yükseltilir. Metin yanıtı, tüm istemcilere döndürülen kompakt JSON yükünü hâlâ içerir.

AraçAçıklama
harness_describeKullanılabilir kaynak türlerini, işlemleri ve alanları keşfedin. API çağrısı yok — yerel kayıt meta verilerini döndürür.
harness_schemaKaynak oluşturma/güncelleme için tam YAML/JSON Şema tanımlarını ve örnekleri getirin. Pipeline/şablon şemaları paketlenmiştir; bağlayıcı, ortam, hizmet, sır ve altyapı şemaları, paketlenmiş anlık görüntülerden veya NG /yaml-schema'den getirilen kapsam farkında varlık şemalarıdır; release_process ve release_activity şemaları RMG /api/yamlSchema'den canlı olarak getirilir. path aracılığıyla derinlemesine incelemeyi destekler.
harness_listBelirli bir türdeki kaynakları filtreleme, arama ve sayfalama ile listeler.
harness_getTanımlayıcısına göre tek bir kaynağı alır.
harness_createYeni bir kaynak oluşturur. Satır içi ve uzak (Git destekli) pipeline'ları destekler. elicitation aracılığıyla kullanıcı onayı ister.
harness_updateMevcut bir kaynağı günceller. Satır içi ve uzak (Git destekli) pipeline'ları destekler. elicitation aracılığıyla kullanıcı onayı ister.
harness_deleteBir kaynağı siler. elicitation aracılığıyla kullanıcı onayı ister. Yıkıcıdır.
harness_executeBir kaynak üzerinde işlem yürütür (pipeline çalıştır/tekrar dene, Git'ten pipeline içe aktar, özellik bayrağını değiştir, uygulamayı senkronize et). elicitation aracılığıyla kullanıcı onayı ister. Pipeline çalıştırmaları için aşağıdaki çalışma zamanı girdi iş akışını kullanın (branch/tag/pr_number/commit_sha kısayol genişletmeyi destekler).
harness_searchTek bir sorguyla Harness kaynak türleri arasında arama yapar. Anlamsal yönlendirme kullanır (yerel all-MiniLM-L6-v2 ONNX embeddings, 384-boyutlu) — başlangıçta dizine eklenen knowledge külliyatından ilgili kaynak türlerini tahmin eder; genellikle dağıtık toplamadan önce ~163 türden 1–8'e daraltır. Anlamsal güven düşük olduğunda tam anahtar kelime dağıtık toplamaya geri döner. Yanıt, yönlendirme tetiklendiğinde semantic_routed ve types_skipped içerir. Yeni kaynak türlerini nasıl keşfedilebilir yapacağınız için docs/search-guidelines.md bölümüne bakın.
harness_diagnosepipeline, connector, delegate ve gitops_application kaynaklarını teşhis edin (takma adlar: execution -> pipeline, gitops_app -> gitops_application). Pipeline'lar için aşama/adım zamanlaması ve hata ayrıntılarını döndürür; bağlayıcılar/delegate'ler/GitOps uygulamaları için hedefli sağlık ve sorun giderme sinyalleri döndürür.
harness_statusGerçek zamanlı proje sağlık panosu alın — son yürütmeler, hata oranları ve derin bağlantılar.

Şema Arama İş Akışı

YAML destekli kaynakları oluşturmadan veya güncellemeden önce harness_schema kullanın; böylece aracılar düz metinden tahmin etmek yerine tam alan adlarını ve kısıtlamaları kopyalayabilir.

  • Paketlenmiş şemalar pipeline, template, trigger, pipeline_v1, template_v1, inputSet_v1, overlayInputSet_v1 ve agent-pipeline içerir.
  • Varlık şemaları connector, environment, service, secret ve infrastructure içerir. Kapsam farkındadırlar (account, org veya project) ve seçilen kapsam gerektirdiğinde org_id/project_id gerektirirler.
  • Sürüm Yönetimi tanımları (release_process, release_activity) RMG /api/yamlSchema'den canlı JSON Şema getirir (paketlenmemiş). Organizasyon veya proje kapsamına alırken scope, org_id ve project_id geçirin.
  • Satıcı varlık anlık görüntüleri, çalışma zamanı hesabıyla eşleştiklerinde önce kullanılır; aksi takdirde araç Harness NG /yaml-schema API'sine geri döner ve sonucu önbelleğe alır.
  • Alan/bölüm özeti için path atlayın, ardından iç içe bir tanımı incelemek için nokta ile ayrılmış bir path geçirin.

Örnekler:

{ "resource_type": "pipeline", "path": "pipeline.stages" }
{
  "resource_type": "connector",
  "scope": "project",
  "org_id": "default",
  "project_id": "payments"
}

Bakım sahipleri, Harness varlık YAML şemaları değiştiğinde satıcı varlık anlık görüntülerini pnpm sync-entity-schemas ile yenileyebilir.

Araç Örnekleri

Hangi kaynakların mevcut olduğunu keşfedin:

{ "resource_type": "pipeline" }

Hesaptaki organizasyonları listeleyin:

{ "resource_type": "organization" }

Bir organizasyondaki projeleri listeleyin:

{ "resource_type": "project", "org_id": "default" }

Bir projedeki pipeline'ları listeleyin:

{ "resource_type": "pipeline", "search_term": "deploy", "size": 10 }

Belirli bir hizmeti alın:

{ "resource_type": "service", "resource_id": "my-service-id" }

Bir pipeline çalıştırın:

{
  "resource_type": "pipeline",
  "action": "run",
  "resource_id": "my-pipeline",
  "inputs": { "tag": "v1.2.3" },
  "wait": true
}

Bir özellik bayrağını değiştirin:

{
  "resource_type": "feature_flag",
  "action": "toggle",
  "resource_id": "new_checkout_flow",
  "enable": true,
  "environment": "production"
}

Tüm kaynak türlerinde arama yapın:

{ "query": "payment-service" }

Bir yürütmeyi kimliğe göre teşhis edin (özet modu — varsayılan):

{ "execution_id": "abc123XYZ" }

Bir Harness URL'sinden teşhis edin:

{ "url": "https://app.harness.io/ng/account/.../pipelines/myPipeline/executions/abc123XYZ/pipeline" }

Bağlayıcı bağlantısını teşhis edin:

{ "resource_type": "connector", "resource_id": "my_github_connector" }

Delegate sağlığını teşhis edin:

{ "resource_type": "delegate", "resource_id": "delegate-us-east-1" }

Bir GitOps uygulamasını teşhis edin (seçeneklerle):

{
  "resource_type": "gitops_application",
  "resource_id": "checkout-app",
  "options": { "agent_id": "gitops-agent-1" }
}

Bir pipeline için en son yürütme raporunu alın:

{ "pipeline_id": "my-pipeline" }

YAML ve başarısız adım günlükleriyle tam teşhis modu:

{ "execution_id": "abc123XYZ", "summary": false }

Günlükler etkinleştirilmiş özet modu (ikisinin en iyisi):

{ "execution_id": "abc123XYZ", "include_logs": true }

Proje sağlık durumunu alın:

{ "org_id": "default", "project_id": "my-project", "limit": 5 }

Geçiş türüne göre filtrelenmiş veritabanı şemalarını listeleyin:

{ "resource_type": "database_schema", "migration_type": "Liquibase" }

Bir şema için veritabanı örneklerini listeleyin:

{ "resource_type": "database_instance", "dbschema_id": "my_schema" }

Bir şema ve örnek için çözümlenmiş LLM yazma pipeline'ını alın:

{ "resource_type": "database_llm_authoring_pipeline", "resource_id": "my_schema", "dbinstance_id": "prod_db" }

Bir şema örneği için anlık görüntü nesne adlarını (örn. tablolar) listeleyin:

{
  "resource_type": "database_snapshot_object",
  "dbschema_id": "my_schema",
  "dbinstance_id": "prod_db",
  "object_type": "Table"
}

Belirli adlandırılmış nesneler için tam anlık görüntü meta verilerini alın:

{
  "resource_type": "database_snapshot_object",
  "resource_id": "prod_db",
  "params": {
    "dbschema_id": "my_schema",
    "object_type": "Table",
    "object_names": ["users", "orders"]
  }
}

Pipeline Çalıştırma İş Akışı (Önerilen)

v0 pipeline'ları için, yürütme zamanı girdi hatalarını azaltmak için bu sırayı kullanın:

  1. Gerekli çalışma zamanı girdilerini keşfedin
  • harness_get(resource_type="runtime_input_template", resource_id="<pipeline_id>")
  • Döndürülen şablon, değer gerektiren <+input> yer tutucularını gösterir.
  1. Girdi stratejisini seçin
  • Basit değişkenler: düz anahtar-değer inputs geçirin (örneğin {"branch":"main","env":"prod"}).

  • Karmaşık/yapısal girdiler: input_set_ids kullanın (CI kod tabanı/derleme blokları ve iç içe şablon girdileri en iyi bu şekilde işlenir).

  • CI kod tabanı kısayol anahtarları (yalnızca pipeline çalıştırma):

    Kısayol anahtarıGenişletilmiş yapı
    branchbuild.type=branch, build.spec.branch=<value>
    tagbuild.type=tag, build.spec.tag=<value>
    pr_numberbuild.type=PR, build.spec.number=<value>
    commit_shabuild.type=commitSha, build.spec.commitSha=<value>
  • Kısıtlama: inputs.build zaten mevcut olduğunda kısayol genişletme atlanır (açık build kazanır).

  1. Çalıştırmayı yürütün
  • harness_execute(resource_type="pipeline", action="run", resource_id="<pipeline_id>", ...)

  • YAML'si varsayılan olmayan bir daldan yüklenmesi gereken Git destekli pipeline'lar için params.pipeline_branch geçirin (Harness'e branch olarak gönderilir). Bu açık tanım seçici, params.branch takma adına göre önceliklidir. inputs.branch bağımsız olarak CI kod tabanı dalını seçer:

    {
      "resource_type": "pipeline",
      "action": "run",
      "resource_id": "deploy_app",
      "params": { "pipeline_branch": "feature/new-stage" },
      "inputs": { "branch": "main" },
      "wait": true
    }
    
  1. İsteğe bağlı: her ikisini birleştirin
  • Temel şekil için input_set_ids ve basit geçersiz kılmalar için inputs kullanın.

v1 pipeline'ları için:

  1. harness_get(resource_type="runtime_input_template_v1", resource_id="<pipeline_id>") getirin. Git destekli pipeline'lar için branch_name, connector_ref ve repo_name değerlerini params aracılığıyla geçirin.
  2. Döndürülen her inputs[].details.name değerini harness_execute.inputs içinde üst düzey anahtar olarak kullanın.
  3. harness_execute(resource_type="pipeline_v1", action="run", resource_id="<pipeline_id>", inputs={...}) çalıştırın. Sunucu bu değerleri bir inputs: YAML kökü altında sarar ve API'nin inputs_yaml gövdesini gönderir. Gerekli alanlar çözümlenemezse, araç beklenen anahtarlar ve önerilen girdi kümeleriyle birlikte bir ön uçuş hatası döndürür. Mevcut kısayol eşlemelerini harness_describe(resource_type="pipeline") (executeActions.run.inputShorthands) ile inceleyebilirsiniz.

Dinamik Pipeline Yürütme

Bir aracı veya harici sistem, çalışma zamanında tam v0 pipeline YAML'ını ürettiğinde ve bunu mevcut bir Harness pipeline kabuğuna karşı çalıştırması gerektiğinde pipeline_dynamic_execution.run kullanın. Bu, normal pipeline.run işleminin yerine geçmez: kaydedilmiş v0 pipeline zaten mevcut olmalı, hesap düzeyinde ve pipeline düzeyinde Allow Dynamic Execution etkinleştirilmiş olmalı ve çağıranın pipeline üzerinde Düzenleme ve Yürütme izinlerine sahip olması gerekir.

{
  "resource_type": "pipeline_dynamic_execution",
  "action": "run",
  "resource_id": "deploy_app",
  "body": {
    "yaml": "pipeline:\n  identifier: deploy_app\n  name: Deploy App\n  stages: []"
  },
  "params": {
    "module_type": "CD",
    "notes": "agent-generated dynamic run",
    "notify_only_user": true
  }
}

Kısıtlamalar:

  • body, bir yaml alanına sahip bir nesne olmalıdır. Ham dize gövdeleri, genel harness_execute şeması tarafından reddedilir.
  • body.yaml bir YAML dizesi veya bir JSON pipeline nesnesi olabilir; istekten önce JSON, YAML'a serileştirilir.
  • Çalışma zamanı <+input> yer tutucuları bu API tarafından çözümlenmez. Tamamen çözümlenmiş YAML gönderin.
  • Girdi kümeleri, seçici aşama yürütme, yeniden deneme ve tetikleyiciler dinamik yürütme uç noktası tarafından desteklenmez.
  • Eylem high_write şeklindedir ve normal onay/otomatik onay yolunu kullanır. Yanıt, API zarfını { "execution_id": "...", "status": "..." } projeksiyonuna yansıtır ve kapsam verileri mevcut olduğunda bir openInHarness yürütme bağlantısı içerir.

Harness çalıştırmayı etkin değil olarak reddederse, hem hesap düzeyindeki Allow Dynamic Execution ayarını hem de Pipeline -> Advanced Options -> Dynamic Execution Settings altındaki pipeline düzeyindeki anahtarı kontrol edin.

Yürütme Girdi Analizi

Bir çalıştırmadan sonra belirli bir yürütmeyi üreten birleştirilmiş girdi YAML'ını incelemek için execution_inputs kullanın. Bu, bir hata girdi kümesi birleştirmeye, Git destekli girdi kümesi dallarına veya yürütme sayfasından yeniden oluşturulması zor olan tetikleyici/çalışma zamanı değerlerine bağlı olduğunda kullanışlıdır.

{
  "resource_type": "execution_inputs",
  "resource_id": "PLAN_EXECUTION_ID",
  "params": {
    "resolve_expressions": true,
    "resolve_expressions_type": "RESOLVE_ALL_EXPRESSIONS"
  }
}

Get yanıtı şunlara yansıtılır:

  • executionId - resource_id kaynaklı plan yürütme kimliği.
  • inputSetYaml - çalıştırma için kullanılan birleştirilmiş çalışma zamanı girdi YAML'ı veya null.
  • inputSetTemplateYaml - yürütme sırasındaki girdi şablonu veya null.
  • resolvedYaml - resolve_expressions=true olduğunda ifade çözümlenmiş YAML, aksi takdirde genellikle null.
  • inputSetDetails - katkıda bulunan kayıtlı girdi kümeleri { identifier, name } çiftleri olarak.
  • inputSetBranchName - Git destekli girdi kümeleri için kaynak dal veya null.

execution_inputs yalnızca get amaçlıdır ve okuma riski taşır. resolve_expressions atlanırsa, sunucu API sorgu parametrelerini atlar ve Harness varsayılan UNKNOWN çözümleme modunu kullanır.

Pipeline Yürütme Bekleme Modu

pipeline.run, pipeline.retry ve pipeline_v1.run için, sunucunun yürütme terminal durumuna ulaşana kadar yoklamasını sağlamak üzere wait: true değerini iletin. Bu, istemcinin veya LLM'nin bir yoklama döngüsü çalıştırmasını istemek yerine bir pipeline başlatma ve durum kontrolünü tek bir araç çağrısında tutar.

{
  "resource_type": "pipeline",
  "action": "run",
  "resource_id": "deploy_app",
  "inputs": { "branch": "main" },
  "wait": true,
  "wait_timeout_seconds": 900,
  "wait_poll_interval_seconds": 5
}

Bekleme modu davranışı:

  • Varsayılan zaman aşımı 600 saniyedir; izin verilen aralık 10 saniye ile 7200 saniye arasındadır.
  • İlk yoklama aralığı varsayılan olarak 3 saniyedir, 1,5 kat geri çekilir ve 30 saniyede sınırlanır.
  • Başarı veya hata durumunda, yanıt execution_id, execution_status, execution_terminal, execution_elapsed_ms ve execution_poll_count gibi alanları içerir.
  • Zaman aşımı tetiklenirse, orijinal tetikleyici yine de başarılı olmuştur; yanıt, son gözlemlenen durumla birlikte execution_timed_out: true ve _wait.hint içerir.
  • Tetikleyici başarılı olduktan sonra yoklama başarısız olursa, yanıt _wait.error ve bir yeniden kontrol ipucu içerir. İlk yürütmenin çalışmadığını onaylamadığınız sürece pipeline'ı körü körüne yeniden çalıştırmayın.
  • Başarısız terminal durumları, harness_diagnose(resource_type="execution", options={execution_id: "..."}) işaret eden _diagnose_hint içerir.

AI DevOps Agent'ten bir pipeline oluşturmasını isteyin:

{
  "prompt": "Create a pipeline that builds a Go app with Docker and deploys to Kubernetes",
  "action": "CREATE_PIPELINE"
}

Doğal dil ile bir hizmeti güncelleyin:

{
  "prompt": "Add a sidecar container for logging",
  "action": "UPDATE_SERVICE",
  "conversation_id": "prev-conversation-id",
  "context": [{ "type": "yaml", "payload": "<existing service YAML>" }]
}

Pipeline Depolama Modları

Harness pipeline'ları üç şekilde saklanabilir:

ModAçıklamaNe zaman kullanılır
Satır İçiPipeline YAML'ı Harness'te saklanırVarsayılan. En basit kurulum, Git gerektirmez.
Uzak (Harici Git)Pipeline YAML'ı GitHub, GitLab, Bitbucket vb. içinde saklanır.Harici bir sağlayıcıyla Git destekli pipeline-as-code kullanan ekipler.
Uzak (Harness Code)Pipeline YAML'ı bir Harness Code deposunda saklanırHarness'in yerleşik Git barındırmasını kullanan ekipler.

Satır içi bir pipeline oluşturun (varsayılan):

// harness_create
{
  "resource_type": "pipeline",
  "body": {
    "yamlPipeline": "pipeline:\n  name: My Pipeline\n  identifier: my_pipeline\n  stages:\n    - stage:\n        name: Build\n        type: CI\n        spec:\n          execution:\n            steps:\n              - step:\n                  type: Run\n                  name: Echo\n                  spec:\n                    command: echo hello"
  }
}

Uzak bir pipeline oluşturun (Harici Git — örn. GitHub):

// harness_create
{
  "resource_type": "pipeline",
  "body": {
    "yamlPipeline": "pipeline:\n  name: Deploy Service\n  identifier: deploy_service\n  stages: []"
  },
  "params": {
    "store_type": "REMOTE",
    "connector_ref": "my_github_connector",
    "repo_name": "my-repo",
    "branch": "main",
    "file_path": ".harness/deploy-service.yaml",
    "commit_msg": "Add deploy pipeline via MCP"
  }
}

Uzak bir pipeline oluşturun (Harness Code — bağlayıcı gerekmez):

// harness_create
{
  "resource_type": "pipeline",
  "body": {
    "yamlPipeline": "pipeline:\n  name: Build App\n  identifier: build_app\n  stages: []"
  },
  "params": {
    "store_type": "REMOTE",
    "is_harness_code_repo": true,
    "repo_name": "product-management",
    "branch": "main",
    "file_path": ".harness/build-app.yaml",
    "commit_msg": "Add build pipeline via MCP"
  }
}

Uzak bir pipeline'ı güncelleyin:

// harness_update
{
  "resource_type": "pipeline",
  "resource_id": "deploy_service",
  "body": {
    "yamlPipeline": "pipeline:\n  name: Deploy Service\n  identifier: deploy_service\n  stages:\n    - stage:\n        name: Deploy\n        type: Deployment"
  },
  "params": {
    "store_type": "REMOTE",
    "connector_ref": "my_github_connector",
    "repo_name": "my-repo",
    "branch": "main",
    "file_path": ".harness/deploy-service.yaml",
    "commit_msg": "Update deploy pipeline via MCP",
    "last_object_id": "abc123",
    "last_commit_id": "def456"
  }
}

Harici bir Git deposundan bir pipeline içe aktarın:

// harness_execute
{
  "resource_type": "pipeline",
  "action": "import",
  "params": {
    "connector_ref": "my_github_connector",
    "repo_name": "my-repo",
    "branch": "main",
    "file_path": ".harness/existing-pipeline.yaml"
  },
  "body": {
    "pipeline_name": "Existing Pipeline",
    "pipeline_description": "Imported from GitHub"
  }
}

Bir Harness Code deposundan bir pipeline içe aktarın:

// harness_execute
{
  "resource_type": "pipeline",
  "action": "import",
  "params": {
    "is_harness_code_repo": true,
    "repo_name": "product-management",
    "branch": "main",
    "file_path": ".harness/existing-pipeline.yaml"
  },
  "body": {
    "pipeline_name": "Existing Pipeline"
  }
}

Bir bağlayıcı oluşturun:

{
  "resource_type": "connector",
  "body": { "connector": { "name": "My Docker Hub", "identifier": "my_docker", "type": "DockerRegistry" } }
}

Bir tetikleyiciyi silin:

{
  "resource_type": "trigger",
  "resource_id": "nightly-trigger",
  "pipeline_id": "my-pipeline"
}

Bir pipeline için girdi kümelerini listeleyin:

{
  "resource_type": "input_set",
  "pipeline_id": "my-pipeline"
}

Belirli bir girdi kümesini alın:

{
  "resource_type": "input_set",
  "resource_id": "prod-inputs",
  "pipeline_id": "my-pipeline"
}

Bir girdi kümesi oluşturun:

{
  "resource_type": "input_set",
  "pipeline_id": "my-pipeline",
  "body": "inputSet:\n  name: Production Inputs\n  identifier: prod_inputs\n  pipeline:\n    identifier: my-pipeline\n    variables:\n      - name: env\n        type: String\n        value: production"
}

Bir girdi kümesini güncelleyin:

{
  "resource_type": "input_set",
  "resource_id": "prod_inputs",
  "pipeline_id": "my-pipeline",
  "body": "inputSet:\n  name: Production Inputs\n  identifier: prod_inputs\n  pipeline:\n    identifier: my-pipeline\n    variables:\n      - name: env\n        type: String\n        value: production\n      - name: replicas\n        type: String\n        value: \"3\""
}

Bir girdi kümesini silin:

{
  "resource_type": "input_set",
  "resource_id": "prod_inputs",
  "pipeline_id": "my-pipeline"
}

Kaynak Türleri

41 araç setinde düzenlenmiş 255 kaynak türü. Her kaynak türü, bir CRUD işlemleri alt kümesini ve isteğe bağlı yürütme eylemlerini destekler.

Platform

Kaynak TürüListeleGetOluşturGüncelleSilYürütme Eylemleri
organizationxxxxx
projectxxxxx

Pipeline'lar

Kaynak TürüListeleGetOluşturGüncelleSilYürütme Eylemleri
pipelinexxxxxrun, retry
pipeline_v1 (Alfa)xxxxxrun
pipeline_dynamic_executionrun
executionxxinterrupt
execution_inputsx
triggerxxxxx
pipeline_summaryx
input_setxxxxx
runtime_input_templatex
runtime_input_template_v1x
pipeline_resolved_yamlx
approval_instancexapprove, reject

Her iki pipeline YAML kaynak türü de pipelines araç seti etkinleştirildiğinde kullanılabilir. HARNESS_PIPELINE_VERSION ve HTTP x-harness-pipeline-version başlatma başlığı varsayılan sürüm tercihini seçer; diğer sürümü gizlemezler.

AI Aracıları

Kaynak TürüListeleGetOluşturGüncelleSilYürütme Eylemleri
agentxxxxx
agent_runx

Hizmetler

Kaynak TürüListeleGetOluşturGüncelleSilYürütme Eylemleri
servicexxxxx

Ortamlar

Kaynak TürüListeleGetOluşturGüncelleSilYürütme Eylemleri
environmentxxxxxmove_configs

Bağlayıcılar

Kaynak TürüListeleGetOluşturGüncelleSilYürütme Eylemleri
connectorxxxxxtest_connection
connector_cataloguex

Altyapı

Kaynak TürüListeleGetOluşturGüncelleSilYürütme Eylemleri
infrastructurexxxxxmove_configs

Sırlar

Kaynak TürüListeleGetOluşturGüncelleSilYürütme Eylemleri
secretxx

Yürütme Günlükleri

Kaynak TürüListeleGetOluşturGüncelleSilYürütme Eylemleri
execution_logx

Denetim İzleri

Kaynak TürüListeleGetOluşturGüncelleSilYürütme Eylemleri
audit_eventxx

Delegeler

Kaynak TürüListeleGetOluşturGüncelleSilYürütme Eylemleri
delegatexx
delegate_tokenxxxxrevoke, get_delegates

Kod Depoları

Kaynak TürüListeleGetOluşturGüncelleSilYürütme Eylemleri
repositoryxxxx
branchxxxx
commitxxxdiff, diff_stats
file_contentxxblame
tagxxx
repo_rulexx
space_rulexx

commit oluşturma, kopyalama yapmadan Harness Code API aracılığıyla doğrudan bir veya daha fazla dosya eylemi işler. body.title, body.branch ve body.actions değerlerini iletin; her eylem CREATE, UPDATE, DELETE veya MOVE şeklindedir ve UPDATE geçerli blob SHA'sını gerektirir.

file_content listesi, bir referanstaki her yolu döndürür; get, dosya veya dizin içeriğini döndürür (depo kökü için path değerini atlayın veya boş iletin; iç içe yollar eğik çizgileri korur). Depo varsayılan dalını kullanmak için git_ref değerini atlayın — main değerini tahmin etmeyin.

Yapıt Kayıt Defterleri

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
registryxx
artifactx
artifact_versionx
artifact_filex

Dosya Deposu

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
file_storexxxxxlist_children

file_store, genel araçlar aracılığıyla Harness Dosya Deposu dosyalarını ve klasörlerini yönetir. Hesap, organizasyon ve proje kapsamını destekler; sunucunun kapsamı ve kimlikleri türetebilmesi için resource_scope="account"|"org"|"project" değerini iletin veya bir Harness Dosya Deposu URL'sini yapıştırın.

Yaygın çağrılar:

# List the account-level File Store.
harness_list(resource_type="file_store", resource_scope="account")

# Create a folder at the current scope root.
harness_create(resource_type="file_store", body={
  name: "scripts",
  type: "FOLDER",
  parent_identifier: "Root"
})

# Upload a UTF-8 script file. Use content_base64 instead for binary data.
harness_create(resource_type="file_store", body={
  name: "deploy.sh",
  type: "FILE",
  parent_identifier: "Root",
  content: "#!/usr/bin/env bash\n./deploy",
  mime_type: "text/x-shellscript",
  file_usage: "SCRIPT"
})

# Rename metadata without replacing file content.
harness_update(resource_type="file_store", resource_id="deploy_script", body={
  name: "deploy-prod.sh",
  type: "FILE",
  parent_identifier: "Root"
})

# List first-level children of a folder. This is a read-risk execute action.
harness_execute(resource_type="file_store", action="list_children",
  resource_id="scripts_folder", params={folder_name: "scripts"})

Çok parçalı gövde kısıtlamaları:

  • Oluştur/güncelle JSON body kabul eder, ardından /ng/api/file-store için multipart/form-data biçimine dönüştürür.
  • name, type (FILE veya FOLDER) ve parent_identifier gereklidir; seçilen kapsamın kökü için yalnızca "Root" değişmez değerini kullanın.
  • FILE oluşturma, content (UTF-8 dizesi) veya content_base64 (geçerli boş olmayan base64) öğelerinden tam olarak birini gerektirir. FILE güncelleme, yalnızca meta veri güncellemeleri için içeriği atlayabilir veya içeriği değiştirmek için tam olarak bir içerik alanı sağlayabilir.
  • FOLDER oluşturma/güncelleme, content ve content_base64 öğelerini atlamalıdır.
  • İsteğe bağlı file_usage, MANIFEST_FILE, CONFIG veya SCRIPT olmalıdır; description, mime_type, path ve tags gibi isteğe bağlı skaler meta veriler dizeler olmalıdır.
  • Yükleme içeriği 100 MB ile sınırlıdır. Onay istemleri, talep öncesinde content, content_base64 ve contentBase64 önizlemelerini gizler.

list_children kısa gösterimi (resource_id artı params.folder_name veya params.file_store_id/params.folder_identifier artı params.folder_name) veya identifier, name ve type: "FOLDER" içeren tam bir FileStoreNode body kabul eder. Tam gövdeler Harness camelCase parentIdentifier kullanır; kısa gösterim params.parent_identifier kullanabilir.

Şablonlar

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
templatexxxxx

Şablon işlemleri Harness Şablon hizmet yollarını (/template/api/templates...) kullanır. Oluşturma ve güncelleme, body.template_yaml veya body.yaml içinde tam şablon YAML dizesini gerektirir; version_label, güncelleme/silme için belirli bir sürümü hedeflerken, version_label olmadan silme tüm sürümleri siler.

Panolar

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
dashboardxx
dashboard_datax

Veritabanı DevOps

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
database_schemaxxxxx
database_instancexxxxx
database_snapshot_objectxx
database_llm_authoring_pipelinex

Altyapı Olarak Kod Yönetimi (IaCM)

IaCM kaynakları varsayılan olarak etkindir ve çoğunlukla proje kapsamlıdır. Çalışma alanı tanımlayıcılarını bulmak için iacm_workspace ile başlayın, ardından çalışma alanı kaynakları, maliyetler ve etkinlik farkları için bu workspace_id değerini kullanın. Hesap, organizasyon veya proje kapsamında yeniden kullanılabilir değişken setleri için iacm_variable_set kullanın. Sağlayıcı kayıt defteri hesap kapsamlıdır.

iacm_module, hesap, organizasyon ve proje kapsamını kapsar. Varsayılan olarak hesap kayıt defterini kullanır; her işlem (listele, getir, oluştur, güncelle) aynı scope_org / scope_project sorgu parametrelerini gönderir; böylece oluşturduğunuz bir modül, oluşturduğunuz kapsamda keşfedilebilir. Kapsamı resource_scope="account" | "org" | "project" artı org_id/project_id ile seçin. Kapsam belirleme isteğe bağlıdır: resource_scope atlandığında, org_id/project_id yalnızca açıkça iletirseniz uygulanır — yapılandırılmış HARNESS_ORG/HARNESS_PROJECT varsayılanları uygulanmaz; bu nedenle ortam proje yapılandırması, bir hesap modülünü sessizce bir proje altında kaydedemez. Bir modül gövdesinin kendi org/project alanları Git bağlayıcısını bulur ve bu görünürlük kapsamıyla ilgisizdir.

iacm_workspace oluşturma/güncelleme yalnızca { policy_evaluation } döndürür — çalışma alanını getirmek için harness_get ile devam edin. iacm_variable_set ve iacm_module oluşturma/güncelleme kaynağın kendisini döndürür. iacm_provider oluşturma yalnızca { id } döndürür — harness_get ile devam edin; güncelleme yalnızca sürüm odaklıdır (POST/PUT /providers/{id}/version) — meta veri PUT'u yoktur. Sürüm yazmaları boş bir gövde döndürebilir; HarnessClient bunu { status: "SUCCESS", message: "No content" } olarak normalleştirir.

Değişken seti güncellemesi, tam değiştirme koleksiyonlarıyla HTTP PUT'tur — önce her zaman harness_get yapın, ardından tam istenen gövdeyi PUT ile gönderin (terraform_variables / environment_variables güncellemede gereklidir; bağlayıcıları ve değişken dosyalarını temizlemek için atlayın/boşaltın). Modül güncellemesi de PUT'tur — isteğe bağlı alanlar için get-then-put tercih edin. Yazmalar medium_write ve onay gerektirir (elicitation veya confirm: true).

Değişken seti ve sağlayıcı kayıt defteri RBAC (iac_variableset_*, iac_providerregistry_*) şu anda Harness'te Deneyseldir — iac-server zorunlu kılmayı etkinleştirene kadar erişim kontrolleri her zaman izin verir. Modül kayıt defteri RBAC (iac_registry_view / iac_registry_edit) Aktif ve zorunlu kılınabilir. MCP, çağıranın PAT/SAT değerini her zaman değiştirmeden iletir.

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
iacm_workspacexxxx
iacm_variable_setxxxx
iacm_resourcex
iacm_modulexxxx
iacm_providerxxxx
iacm_workspace_costsx
iacm_activity_resource_changex

Tipik iş akışı:

  1. Çalışma alanını bulmak için harness_list(resource_type="iacm_workspace", org_id="...", project_id="...").
  2. Sıfırdan veya bir şablondan (associated_template) oluşturmak veya mevcut bir çalışma alanını güncellemek için iacm_workspace üzerinde harness_create / harness_update — yanıt yalnızca { policy_evaluation } içerir.
  3. Oluşturulan/güncellenen çalışma alanını getirmek için harness_get(resource_type="iacm_workspace", workspace_id="...").
  4. Yeniden kullanılabilir Terraform/env değişken setleri için iacm_variable_set üzerinde harness_list / harness_create / harness_update (isteğe bağlı olarak resource_scope ile) — yanıt VariableSet kaynağıdır.
  5. Modül kayıt defteri için iacm_module üzerinde harness_list / harness_create / harness_update (name + system gereklidir; organizasyon veya proje kapsamlı bir modül için org_id/project_id ile resource_scope ekleyin) — yanıt modül kaynağıdır.
  6. Hesap sağlayıcı kayıt defteri için iacm_provider üzerinde harness_list / harness_create / harness_update (oluşturma için body.type gereklidir; oluşturma yalnızca { id } döndürür — ardından harness_get; güncelleme yalnızca sürümler oluşturur/günceller) — sürüm güncellemesi boş başarı döndürebilir.
  7. Terraform kaynaklarını, çıktılarını ve veri kaynaklarını incelemek için harness_list(resource_type="iacm_resource", org_id="...", project_id="...", workspace_id="...").
  8. Yürütme başına maliyet girişlerini gözden geçirmek için harness_list(resource_type="iacm_workspace_costs", org_id="...", project_id="...", workspace_id="...").
  9. Bir plan, uygulama veya yok etme etkinliği için önceki/sonraki kaynak farklarını incelemek üzere harness_list(resource_type="iacm_activity_resource_change", org_id="...", project_id="...", activity_id="...", workspace_id="...").

IaCM liste yanıtları, page_count değerini yalnızca geçerli sayfa için sayı olarak gösterir (sayfalanmayan iacm_variable_set hariç). has_more doğru olduğunda, sonraki 1 tabanlı sayfayı istemeye devam edin ve toplam gerekiyorsa sayfa sayılarını toplayın.

Dahili Geliştirici Portalı (IDP)

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
idp_entityxx
scorecardxx
scorecard_checkxx
scorecard_statsx
scorecard_check_statsx
idp_scorexx
idp_workflowxexecute
idp_tech_docx

Çekme İstekleri

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
pull_requestxxxxclose, merge
pr_reviewerxxsubmit_review
pr_commentxxx
pr_checkx
pr_activityx

Açık bir kapatma işlemi için harness_execute(resource_type="pull_request", action="close", ...) kullanın. harness_update ayrıca body.state (open veya closed) kabul eder ve durum değişikliklerini özel Harness Code PR durum uç noktasına yönlendirir; başlık/açıklama düzenlemelerini ayrı bir güncelleme çağrısında gönderin.

PR yorumlarını okumak için harness_list(resource_type="pr_activity", filters={type: ["comment", "code-comment"]}, ...) kullanın. Yorum yazma işlemleri için pr_comment kullanın.

Sürüm Yönetimi

Sürüm Yönetimi (RMG) kaynakları varsayılan olarak etkindir. Tanım kaynakları (release_process, release_activity), body.yaml ile listele/getir/oluştur/güncelle/sil destekler; oluşturma/güncelleme öncesinde harness_schema(resource_type="release_process"|"release_activity") çağırın. Yürütme kaynakları çalışan sürümleri izler — çoğu liste işlemi release_id gerektirir (harness_list resource_type=release'ten UUID veya identifier-1.0.0-abc gibi UI URL slug'ı). harness_list içine bir RMG sürüm URL'si yapıştırarak release_id otomatik doldurun.

RMG çağrıları, Harness-Account başlığı aracılığıyla hesap kapsamıyla ${HARNESS_BASE_URL}/gateway/rmg kullanır. Organizasyon/proje kapsamı, org_id/project_id sağlandığında başlık tabanlı kapsam kullanır. release_execution_phase yalnızca listeleme amaçlıdır — faz giriş/çıkış kaynaklarında harness_get çağrılırken her faz öğesinin identifier alanını params.phase_identifier olarak kullanın (release_execution_phase üzerinde harness_get çağırmayın). Sürüm listesi status filtrelemesi yalnızca geçerli sayfada istemci tarafında uygulanır; sonuçlar birden fazla sayfaya yayılabileceğinde aynı filtrelerle sayfalamaya devam edin.

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Çalıştır
release_processxxxxx
release_activityxxxxx
releasexx
release_execution_phasex
release_execution_taskx
release_execution_activityx
release_inputx
release_execution_phase_inputx
release_execution_phase_outputx
release_execution_activity_inputx
release_execution_activity_outputx

Tipik iş akışı:

  1. Orkestrasyon süreç tanımlarını keşfetmek için harness_list(resource_type="release_process", org_id="...", project_id="...") kullanın.
  2. Oluşturma/güncelleme öncesinde harness_schema(resource_type="release_process") (veya release_activity) kullanın; ardından body.yaml ile harness_create / harness_update çağrısı yapın.
  3. Aktif veya yakın tarihli sürümleri bulmak için harness_list(resource_type="release", org_id="...", project_id="...") kullanın (varsayılan 30 günlük geriye dönük bakış; isteğe bağlı filters.status, filters.search_term, filters.days_back).
  4. Sürüm ayrıntıları için harness_get(resource_type="release", release_id="...") kullanın.
  5. Aşama durumu için harness_list(resource_type="release_execution_phase", filters={ release_id: "..." }) kullanın; release_execution_task ve release_execution_activity için aynı release_id geçerlidir.
  6. release_input, release_execution_phase_input, release_execution_phase_output, release_execution_activity_output veya release_execution_activity_input üzerinde, her kaynakta belgelendiği şekilde release_id artı params.phase_identifier / params.activity_identifier / activity_execution_id kullanarak harness_get çağrısı yapın.

Vibe

Varsayılan olarak etkin olan vibe araç seti, ${HARNESS_BASE_URL}/vibe/v1 altındaki Vibe Orchestrator BFF sözleşmesini kapsar. Mevcut Harness bağlantısını ve hesap başlığını kullanır; istek gövdelerine hesap/kuruluş/proje sorgu parametreleri veya kapsam alanları eklemez. Ekip, Vibe akışını Harness API anahtarı kimlik doğrulaması (PAT/SAT) kullanarak doğruladı; bu nedenle varsayılan oturumlar için herhangi bir devre dışı bırakma ayarı gerekmez. Düzenlenmiş OpenAPI belgeleri, taşıyıcı/oturum kimlik doğrulamasını belgeler; sunucunun OAuth modu, mevcut oturumun taşıyıcı belirtecini iletir. Otomatik regresyonlar her iki başlık yolunu da doğrular; ağ geçidi kimlik doğrulaması, hedef ortamın yapılandırmasına tabidir.

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Çalıştır
vibe_projectxprepare, deploy
vibe_app_lifecyclexevents

API iki alım yolunu destekler. Bu API'ye özgü istek şekillerini koruyun:

Kodlama ajanına sunulan kaynakAPI akışı
GitHub deposu bağlantısı/bağlayıcısıresource_type="vibe_project" ve body.mode ile birlikte moda özgü alanlar ve harness_create kullanın. Sözleşme, github_link ve github_connector adlarını belirtir ancak URL, dal veya bağlayıcı alan şekillerini tanımlamaz; bu alanlar, bir eşleme icat edilmeden arka uca iletilir.
ZIP dosyasıUygulama adı ve dosya meta verileriyle prepare çağrısı yapın, baytları döndürülen imzalı hedefe yükleyin, ardından deploy çağrısı yapın.
Yerel kaynak diziniKodlama ajanı, amaçlanan çalışma alanı kaynağını yerel olarak bir ZIP'e arşivler ve ardından ZIP akışını izler. Yerel bir yol veya konuşma bağlamı, API tarafından desteklenen bir kaynak yüklemesi değildir.

Bir dizini paketlerken, oluşturmak için gereken kaynağı, bildirimleri, kilit dosyalarını, yapılandırmayı ve amaçlanan kaydedilmemiş düzenlemeleri ekleyin. Kimlik bilgilerini, .git öğesini, yüklü bağımlılıkları ve oluşturulan yapıtları hariç tutun. Paketleme ve imzalı yükleme, dosyaların erişilebilir olduğu yerde gerçekleşir; barındırılan bir MCP sunucusu, kodlama ajanının yerel dizinini okuyamaz.

Mevcut bir ZIP için yüklemeyi hazırlayın:

{
  "resource_type": "vibe_project",
  "action": "prepare",
  "body": {
    "name": "demo-app",
    "file": {
      "path": "app.zip",
      "size_bytes": 12345,
      "content_type": "application/zip"
    }
  }
}

Bunu harness_execute öğesine iletin. Boyut, gerçek ZIP'i tanımlamalıdır; size_bytes, content_type ve md5 isteğe bağlıdır ve null olabilir. Ek hazırlık alanları, OpenAPI tarafından izin verildiği şekilde arka uç doğrulaması için korunur. Hazırlık, her dosyanın uploadUrl, method, headers ve expiresAt değerleri dahil olmak üzere projectId, sourceId ve upload döndürür. Dosya baytlarını doğrudan bu imzalı URL, yöntem ve başlıkları kullanarak yükleyin; URL'yi tam olarak koruyun ve depolama isteğine Harness kimlik bilgileri eklemeyin. Hazırlama eylemi yerel dosyaları okumaz veya yüklemez.

Başarılı bir yüklemeden sonra açıkça dağıtın:

{
  "resource_type": "vibe_project",
  "action": "deploy",
  "resource_id": "<projectId returned by prepare>"
}

JSON içe aktarmaları için döndürülen id değerini bunun yerine kullanın. Dağıtım ayrıca body: {"project_id": "<Vibe app id>"} veya params.app_id kabul eder; API tel alanı, hazırlık camelCase projectId döndürse bile snake_case project_id biçimindedir. Genel aracın üst düzey project_id alanı bir Harness kapsam tanımlayıcısıdır ve asla Vibe uygulama kimliği olarak kullanılmaz. İçe aktarma ve hazırlama, uygulamayı/kaynağı oluşturur; hiçbiri dağıtımı başlatmaz. Yazma işlemleri otomatik olarak yeniden denenmez ve dağıtım, mevcut yüksek riskli onay politikasını kullanır.

İlerlemeyi harness_get(resource_type="vibe_app_lifecycle", resource_id="<Vibe app id>") ile okuyun. Uygulama URL'lerini, yürütme aşamalarını, alt adımları, hataları, günlük satırlarını ve derleme analizörü ayrıntılarını korur. events eylem eylemi, resource_id veya params.app_id kabul eder ve SSE uç noktasını sonlu bir toplu iş olarak tüketir: bağlantıdan sonra en fazla 20 JSON olayı veya beş saniye, 1 MiB yanıt sınırıyla. Bu sınırlar Vibe uç noktasına aittir. Bağlantının HARNESS_API_TIMEOUT_MS öğesi ayrıca bağlantı ve akış tüketimini birlikte sınırlar; süre sonu bir zaman aşımı hatası döndürür. Tamamlanan bir toplu iş, events ve stop_reason (end, event_limit veya duration_limit) döndürür ve akışı kapatır. Ne ilk bağlantı hataları ne de kesilen akışlar yeniden denenir. Olaylar, belgelenmiş bir yürütme imleci olmayan geçici farklardır; yetkili bir anlık görüntü için yaşam döngüsü getirme işlemini kullanın. Her iki yaşam döngüsü okuması da salt okunur modda kullanılabilir.

Özellik Bayrakları

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Çalıştır
fme_workspacex
fme_environmentxxxxx
fme_feature_flagxxxxxkill, restore, reallocate, archive, unarchive
fme_feature_flag_definitionxxxxxkill, restore, reallocate
fme_rollout_statusx
fme_rule_based_segmentxxxx
fme_rule_based_segment_definitionxxenable, disable, change_request
fme_traffic_typex
fme_identityxx
fme_standard_segmentxx
fme_segment_keysxx
fme_segmentxxxxx
fme_segment_definitionxxxxxlist_keys, add_keys, remove_keys
fme_metricxxxxx
fme_event_typexx

FME (Split.io) kaynakları — fme_* kaynakları çift modlu kapsamlamayı destekler: eski çağrılar workspace_id iletir ve Split.io API'sine (api.split.io) isabet eder; daha yeni çağrılar org_id+project_id birlikte iletir ve Harness yerel uç noktalarına (standart HARNESS_API_KEY/HARNESS_BASE_URL, diğer tüm harness_* kaynaklarıyla aynı kimlik doğrulama) isabet eder. Aynı çağrıda hem workspace_id hem de org_id/project_id iletmek veya org_id ile yalnızca project_id karıştırmak bir hatadır — çağrı başına bir mod seçin. Kaynak yalnızca Harness yerel olarak işaretlenmediği sürece, aşağıdaki her işlem eski modda değişmeden kullanılabilir. Harness yerel mod kapsamı şu anda daha dardır:

  • fme_workspace — Harness'e özgü bir karşılığı yoktur; yalnızca eski sistemde mevcuttur (workspace_id değerlerini keşfetmek için kullanılır).

  • fme_environment — çift modlu list (workspace_id veya org_id+project_id). get/create/update/delete yalnızca Harness'e özgüdür (/fme/api/v4/environments) — MCP'nin bu işlemler için hiçbir zaman bir workspace_id sözleşmesi olmamıştır. Yerel liste, isteğe bağlı offset/limit kullanır (maks. 100; harness_list size, limit ile eşlenir); zarf {data, limit, offset, totalCount}, items/total konumuna yükseltilir. Yerel oluşturma/güncelleme isProduction kullanır (production takma ad olarak kabul edilir). Yerel güncelleme JSON Merge Patch'tir; name ve isProduction temizlenemez. Ad maks. 15 karakterdir.

  • fme_feature_flag — çift modlu, her iki dal da tamamen bağlı. Harness'e özgü (org_id+project_id): list/get/create/delete, /fme/api/v4/feature-flags adresini çağırır (create için gövde: name, trafficType, isteğe bağlı description/tags/owners, CreateFeatureFlagRequest başına); update, /fme/api/v4/feature-flags/{name} adresine bir merge-patch gönderir; archive/unarchive, /fme/api/v4/feature-flags/{name}/archive|unarchive adresini çağırır (yalnızca isteğe bağlı comment — title yok, ArchiveUnarchiveRequest başına); kill/restore/reallocate, /fme/api/v4/feature-flag-definitions/{name}/kill|restore|reallocate adresini environment_id sorgu parametresiyle çağırır (isteğe bağlı comment/title, FeatureFlagDefinitionActionRequest başına).

  • fme_feature_flag_definition — get/create/update çift modlu kalır (workspace_id veya org_id+project_id). list/delete/kill/restore/reallocate yalnızca Harness'e özgüdür (org_id+project_id) — MCP'nin bu işlemler için hiçbir zaman bir workspace_id sözleşmesi olmamıştır. Yerel liste feature_flag_name gerektirir ve offset/limit kullanır (varsayılan 100, maks. 100); environment_id almaz. Silme ve çalıştırma environment_id gerektirir. Kill/restore/reallocate, fme_feature_flag ile aynı eylemlerdir. Get/create/update gövdesi eski sistemle eşleşir (treatments, defaultTreatment, defaultRule, isteğe bağlı rules/baselineTreatment/trafficAllocation/comment), ayrıca Harness'e özgü modda isteğe bağlı title eklenir. Yerel güncelleme JSON Merge Patch'tir.

  • fme_rollout_status — çift modlu list. org_id+project_id (tercihen) veya kullanımdan kaldırılmış workspace_id iletin. Yerel sayfalama offset/limit kullanır (maks. 100; harness_list size, limit ile eşlenir); sonuçlar items/total konumuna yükseltilir. Her öğenin id, name ve isteğe bağlı description alanı vardır.

  • fme_rule_based_segment — (Kullanımdan kaldırıldı — fme_segment bölümüne bakın.) Harness'e özgü mod her işlemde reddedilir (list/get/create/delete) — bunun yerine fme_segment kullanın; bu kaynak yalnızca eski workspace_id sözleşmesini destekler.

  • fme_rule_based_segment_definition — (Kullanımdan kaldırıldı — fme_segment_definition bölümüne bakın.) Harness'e özgü mod her işlemde/eylemde reddedilir (list/update/enable/disable/change_request) — bunun yerine fme_segment_definition kullanın (orada enable/disable/change_request karşılığı yoktur); bu kaynak yalnızca eski workspace_id/environment_id sözleşmesini destekler.

  • fme_traffic_type — çift modlu list. org_id+project_id (tercihen) veya kullanımdan kaldırılmış workspace_id iletin. Yerel sayfalama offset/limit kullanır (maks. 100; harness_list size, limit ile eşlenir); sonuçlar items/total konumuna yükseltilir. Her öğenin id ve name alanı vardır (displayAttributeId yoktur).

  • fme_identity — create/update, org_id+project_id birlikte iletilirse henüz uygulanmamıştır; aksi takdirde normal bir eski sistem çağrısı olarak ilerler.

  • fme_standard_segment — kullanımdan kaldırıldı. Eski workspace_id hâlâ Split v2'yi çağırır. Harness'e özgü reddedilir — fme_segment kullanın.

  • fme_segment_keys — list/update eski sistemde kalır (workspace_id / environment_id+segment_name). Harness'e özgü (org_id+project_id) reddedilir — fme_segment_definition çalıştırma list_keys/add_keys/remove_keys kullanın.

  • fme_segment — Yalnızca yerel (org_id+project_id). CRUD. list/get/update/delete, segment_type gerektirir: STANDARD | LARGE | RULE_BASED. Oluşturma gövdesi: name, trafficType, segmentType; isteğe bağlı description, tags, owners.

  • fme_segment_definition — Yalnızca yerel. CRUD artı çalıştırma list_keys/add_keys/remove_keys. Güncelleme yalnızca açıklama içindir. Anahtarlar mevcutken silme hasDependents ile başarısız olur.

  • fme_metric — Yalnızca Harness'e özgü (eski workspace_id desteği yoktur). list/get/create/update/delete, /fme/api/v4/metrics adresine bağlıdır (list'in harness_list size, limit ile eşlenir). create, arka uç CreateMetricRequest onu isteğe bağlı tutsa bile spread gerektirir (varsayılan PER) — bu, MCP tarafına özgü daha katı bir sözleşmedir, çünkü atlanması bir RATE metriğinin anlamını sessizce değiştirir. update JSON Merge Patch'tir; name/trafficType değişmezdir ve kabul edilmez. delete kalıcı bir sert silmedir (arşivleme/geri yükleme yoktur) — destructive olarak sınıflandırılır.

  • fme_event_type — Yalnızca Harness'e özgü (eski workspace_id desteği yoktur). Salt okunur: list/get, /fme/api/v4/event-types adresine bağlıdır; id olay adıdır. Yalnızca son 30 gün içinde olayı olan olay türleri görünür; get, istek yapan çalışma alanının trafik türü kapsamı dışındaki bir olay türü veya 30 günden uzun süredir boşta olan bir olay türü için 404 döndürür. Liste filtreleri: name (alt dize), traffic_type (kimliğe veya ada göre), offset/limit (harness_list size, limit ile eşlenir). fme_metric'ün baseEventTypes/filterEventType veya event_type_ids filtresinde bir kimliğe başvurmadan önce gerçek olay türü kimliklerini keşfetmek için bunu kullanın, kimlik tahmin etmek yerine.

Tek kullanıcılı/kendi kendine barındırılan modda, eski sistem kimlik doğrulaması HARNESS_FME_API_KEY kaynağından bir Bearer belirteci kullanır ve yer tutucu olmayan bir HARNESS_API_KEY'e geri döner. HARNESS_FME_API_KEY, eski bir Split yönetici anahtarı veya FME yetkili bir Harness PAT/SAT olabilir, ancak multi-user modunda reddedilir, böylece paylaşılan dağıtımlar her oturum kullanıcısının kimlik bilgisini geçersiz kılamaz. Harness platform API'leri için barındırılan OAuth/hizmet yönlendirme kimlik bilgileri, doğrudan Split.io isteklerinin kimliğini doğrulamaz. fme_feature_flag, eski sistem modunda tam yaşam döngüsü yönetimini destekler: oluşturma (traffic_type_id gerektirir), listeleme, getirme, meta verileri güncelleme, silme ve kill/restore/reallocate/archive/unarchive çalıştırma eylemleri. Trafik türü kimliklerini keşfetmek için fme_traffic_type, kimlik öznitelikleri oluşturmak/güncellemek için fme_identity ve standart segmentleri incelemek ve üye anahtarları eklemek için fme_standard_segment / fme_segment_keys kullanın. fme_rule_based_segment, hedefleme segmentleri için CRUD sağlarken, fme_rule_based_segment_definition, etkinleştirme/devre dışı bırakma ve değişiklik isteği onay akışlarıyla ortama özgü segment kurallarını yönetir.

GitOps

Kaynak TürüListeleGetOluşturGüncelleSilÇalıştırma Eylemleri
gitops_agentxx
gitops_argo_projectx
gitops_app_project_mappingxxxximport
gitops_autocreate_logx
gitops_applicationxxsync
gitops_clusterxx
gitops_repositoryxx
gitops_applicationsetxx
gitops_repo_credentialxx
gitops_app_eventx
gitops_pod_logx
gitops_managed_resourcex
gitops_resource_actionx
gitops_dashboardx
gitops_app_resource_treex
gitops_cluster_linkxxx

Kaos Mühendisliği

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
chaos_experimentxxxxrun, stop
chaos_experiment_runx
chaos_experiment_variablex
chaos_component_variablex
chaos_input_setxxxxx
chaos_experiment_templatexxxcreate_from_template, list_revisions, get_variables, get_yaml, compare_revisions
chaos_probexxxxenable, verify, get_manifest
chaos_probe_in_runx
chaos_probe_templatexxxget_variables
chaos_infrastructurex
chaos_k8s_infrastructurexxxcheck_health
chaos_enabled_infrastructurex
chaos_environmentx
chaos_hubxxxxx
chaos_hub_faultx
chaos_faultxxxget_variables, get_yaml
chaos_fault_templatexxxlist_revisions, get_variables, get_yaml, compare_revisions
chaos_fault_experiment_runx
chaos_actionxxxxget_manifest
chaos_action_templatexxxlist_revisions, get_variables, compare_revisions
chaos_loadtestxxxxxrun, stop
chaos_servicexxxxxlist_experiment_runs, list_load_tests
chaos_application_mapxx
discovered_agentx
discovered_namespacex
discovered_servicex
discovered_network_mapx
chaos_guard_conditionxxx
chaos_guard_rulexxxenable
chaos_recommendationxx
chaos_riskxx
chaos_dr_testxx
scanned_riskxxoccurrences, summary_by_service
chaos_risk_rulexx
chaos_risk_scanxxxxxretry, abort, report, report_download, heatmap

Bulut Maliyet Yönetimi (CCM)

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
cost_perspectivexxxxx
cost_breakdownx
cost_timeseriesx
cost_summaryxx
cost_recommendationxxupdate_state, override_savings, create_jira_ticket, create_snow_ticket
cost_anomalyx
cost_anomaly_summaryx
cost_categoryxx
cost_account_overviewx
cost_filter_valuex
cost_recommendation_statsx
cost_recommendation_detailx
cost_commitmentx
ai_budgetxxxxx
ai_budget_overviewx
ai_budget_consumptionx
ai_budget_override_requestxxxapprove, reject

Yazılım Mühendisliği Analizleri (SEI)

SEI kaynakları, token verimliliği için birleştirilmiştir. DORA, ekip/kuruluş ağacı ayrıntıları ve yapay zeka içgörüleri için metric veya aspect parametrelerini kullanın.

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
sei_metricx
sei_productivity_metricx
sei_dora_metricxmetric değerini iletin: deployment_frequency, change_failure_rate, mttr, lead_time veya *_drilldown
sei_teamxx
sei_team_detailxaspect değerini iletin: integrations, developers, integration_filters
sei_org_treexx
sei_org_tree_detailxxaspect değerini iletin: efficiency_profile, productivity_profile, business_alignment_profile, integrations, teams
sei_business_alignmentxxGetirme için aspect değerini iletin: feature_metrics, feature_summary, drilldown
sei_ai_usagexxaspect değerini iletin: metrics, breakdown, summary, top_languages
sei_ai_adoptionxxaspect değerini iletin: metrics, breakdown, summary
sei_ai_impactxaspect değerini iletin: pr_velocity, rework
sei_ai_raw_metricx

Yazılım Tedarik Zinciri Güvencesi (SCS)

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
scs_artifact_sourcex
artifact_securityxx
scs_artifact_componentx
scs_artifact_remediationx
scs_chain_of_custodyx
scs_compliance_resultx
code_repo_securityxx
scs_sbomx

Kanıt Kasası

Kanıt Kasası, in-toto tasdiklerini (SDLC kanıtları) saklar. Listeleme, resource_scope aracılığıyla hesap/organizasyon/proje kapsamını destekler. Tekil serbest metin filtreleri (yalnızca pipeline, yalnızca artifact, gitoid) search_term kullanır; ek bir Ad kısıtı filters.subject_name kullanır; konu içerik özeti filters.subject_digest kullanır. Getir, gitoid_sha256 ile arama yapar ve org_id/project_id (liste satırından) gerektirir. İndirme (harness_execute eylemi download) zaman sınırlı bir download_url döndürür — bu bağlantıyı her zaman kullanıcıya gösterin. SCS_EVIDENCE_VAULT özellik bayrağını gerektirir.

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
attestationxxdownload

Güvenlik Testi Orkestrasyonu (STO)

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
security_issuex
security_issue_filterx
security_exemptionxxapprove, reject
remediation_diffx

security_exemption oluşturma bir high_write işlemidir. Sunucu, requester_id değerini kimliği doğrulanmış PAT'ten türetir, exemptFutureOccurrences=true değerini ayarlar ve sağlanmadığında duration_days değerini 30 olarak varsayılan yapar. Muafiyetleri listelerken küçük bir açık sayfa boyutu iletin (örneğin filters: { "status": "Pending", "size": 5 }) ve her yanıtta döndürülen _nextPageHint değerini takip edin.

Güvenlik muafiyeti yürütme iş akışı:

  • harness_list ile resource_type="security_exemption" ve Pending, Approved, Rejected, Expired veya Canceled gibi açık bir status kullanın.
  • harness_execute ile action="approve" ve gerekli bir body.scope kullanın: CURRENT, ACCOUNT, ORG veya PROJECT. CURRENT, muafiyetin mevcut kapsamında onaylar; diğer kapsamlar dahili olarak STO teşvik uç noktasını kullanır. Sunucu, atlandığında body.approver_id değerini kimliği doğrulanmış kullanıcıdan otomatik doldurur; body.comment isteğe bağlıdır.
  • Bir muafiyeti reddetmek için action="reject" kullanın. body.approver_id de atlandığında otomatik doldurulur.
  • Ayrı bir promote yürütme eylemi yoktur. İstenen sonuç hesap, organizasyon veya proje kapsamında onay olduğunda, CURRENT olmayan bir body.scope ile action="approve" kullanın.

Erişim Kontrolü

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
userxx
user_groupxxxxx
service_accountxxxx
rolexxxx
role_assignmentxx
resource_groupxxxx
permissionx

Yönetişim

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
policyxxxxx
policy_setxxxxx
policy_evaluationxx

Dağıtım Dondurma

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
freeze_windowxxxxxtoggle_status
global_freezexmanage

Hizmet Geçersiz Kılmaları

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
service_overridexxxxx

Ayarlar

Kaynak TürüListeleGetirOluşturGüncelleSilEylemleri Yürüt
settingx

MCP İstemleri

DevOps

PromptDescriptionParameters
build-deploy-appUçtan uca CI/CD iş akışı: bir git deposunu tarayın, CI pipeline'ı oluşturun (Docker imajı derleyin ve push edin), K8s manifestlerini keşfedin veya oluşturun, CD pipeline'ı oluşturun ve dağıtın — CI hatalarında otomatik yeniden deneme (en fazla 5 deneme) ve CD hatalarında (kullanıcı izniyle en fazla 3 deneme) ile birlikte. Yeniden denemeler tükendiğinde, manuel inceleme için oluşturulan tüm kaynaklara Harness UI derin bağlantıları sağlar.repoUrl (gerekli), imageName (gerekli), projectId (isteğe bağlı), namespace (isteğe bağlı)
debug-pipeline-failureBaşarısız bir yürütmeyi analiz edin: bir yürütme kimliği, pipeline kimliği veya Harness URL'si kabul eder. harness_diagnose aracılığıyla aşama/adım dökümü, hata ayrıntıları, delegate bilgisi ve başarısız adım günlüklerini alır, ardından kök neden analizi ve önerilen düzeltmeleri sağlar. Zincirlenmiş pipeline hatalarını otomatik olarak takip eder.executionId (isteğe bağlı), projectId (isteğe bağlı)
pipeline_summarizerBir pipeline yürütmesinden TÜM adım günlüklerini getirin ve özetleyin. Her adımın günlüğünü almak için harness_diagnose ile include_logs: true, include_all_step_logs: true kullanır, ardından Adım Adı, Durum, Süre ve Ne Oldu (günlük tabanlı özet) içeren bir tablo sunar. Hiçbir adımı atlamaz.executionId (isteğe bağlı), projectId (isteğe bağlı)
create-pipelineDoğal dil gereksinimlerinden yeni bir pipeline YAML'ı oluşturun, bağlam için mevcut kaynakları inceleyerekdescription (gerekli), projectId (isteğe bağlı)
create-agentEtkileşimli olarak bir Harness AI ajanı oluşturun — mevcut ajanları kontrol edin (güncellerken mevcut agent.uses ile eski agent.step.group.steps spec formatını algılayarak), gereksinimleri toplayın, uygun formatta ajan spec'ini oluşturun, kullanıcıyla onaylayın, ardından harness_create/harness_update aracılığıyla oluşturun veya güncelleyinagent_name (gerekli), task_description (gerekli), org_id (isteğe bağlı), project_id (isteğe bağlı)
onboard-serviceOrtamlar ve bir dağıtım pipeline'ı ile yeni bir hizmetin onboarding sürecini adım adım yürütünserviceName (gerekli), projectId (isteğe bağlı)
dora-metrics-reviewElite/Yüksek/Orta/Düşük sınıflandırması ve iyileştirme önerileriyle DORA metriklerini (dağıtım sıklığı, değişiklik başarısızlık oranı, MTTR, teslim süresi) inceleyinteamRefId (isteğe bağlı), dateStart (isteğe bağlı), dateEnd (isteğe bağlı)
setup-gitops-applicationBir GitOps uygulamasının onboarding sürecinde rehberlik edin — ajanı, kümei, depoyu doğrulayın ve uygulamayı oluşturunagentId (gerekli), projectId (isteğe bağlı)
chaos-resilience-testHata enjeksiyonu, problar ve beklenen sonuçlarla hizmet dayanıklılığını test etmek için bir kaos deneyi tasarlayınserviceName (gerekli), projectId (isteğe bağlı)
feature-flag-rolloutGüvenlik kapılarıyla ortamlar arasında aşamalı bir özellik bayrağı (feature flag) dağıtımı planlayın ve yürütünflagIdentifier (gerekli), projectId (isteğe bağlı)
migrate-pipeline-to-templateMevcut bir pipeline'ı analiz edin ve bundan yeniden kullanılabilir aşama/adım şablonları çıkarınpipelineId (gerekli), projectId (isteğe bağlı)
delegate-health-checkDelegate bağlantısını, sağlığını, token durumunu kontrol edin ve altyapı sorunlarını giderinprojectId (isteğe bağlı)
developer-portal-scorecardHizmetler için IDP skor kartlarını inceleyin ve geliştirici deneyimini iyileştirmek için boşlukları belirleyinprojectId (isteğe bağlı)
pending-approvalsOnay bekleyen pipeline yürütmelerini bulun, ayrıntıları gösterin ve onaylama veya reddetme seçeneği sununprojectId (isteğe bağlı), orgId (isteğe bağlı), pipelineId (isteğe bağlı)

FinOps

PromptDescriptionParameters
optimize-costsBulut maliyet verilerini analiz edin, potansiyel tasarruflara göre önceliklendirilmiş önerileri ve anormallikleri yüzeye çıkarınprojectId (isteğe bağlı)
cloud-cost-breakdownTrend analizi ve anormallik tespiti ile hizmet, ortam veya küme bazında bulut maliyetlerine derinlemesine ininperspectiveId (isteğe bağlı), projectId (isteğe bağlı)
commitment-utilization-reviewAyrılmış örnek ve tasarruf planı kullanımını analiz ederek israfı bulun ve taahhütleri optimize edinprojectId (isteğe bağlı)
cost-anomaly-investigationMaliyet anormalliklerini araştırın — kök nedeni, etkilenen kaynakları ve düzeltmeyi belirleyinprojectId (isteğe bağlı)
rightsizing-recommendationsDoğru boyutlandırma (rightsizing) önerilerini inceleyin ve önceliklendirin, isteğe bağlı olarak Jira veya ServiceNow biletleri oluşturunprojectId (isteğe bağlı), minSavings (isteğe bağlı)

DevSecOps

PromptDescriptionParameters
security-reviewHarness kaynaklarındaki güvenlik sorunlarını inceleyin ve önem derecesine göre düzeltme önerileri sununprojectId (isteğe bağlı), severity (isteğe bağlı, varsayılan: critical,high)
vulnerability-triagePipeline'lar ve yapıtlar genelinde güvenlik açıklarını triyajlayın, önem derecesine ve istismar edilebilirliğe göre önceliklendirinprojectId (isteğe bağlı), severity (isteğe bağlı)
sbom-compliance-checkYapıtlar için SBOM ve uyumluluk duruşunu denetleyin — lisans riskleri, politika ihlalleri, bileşen güvenlik açıklarıartifactId (isteğe bağlı), projectId (isteğe bağlı)
supply-chain-auditUçtan uca yazılım tedarik zinciri güvenlik denetimi — kaynak, emanet zinciri, politika uyumluluğuprojectId (isteğe bağlı)
security-exemption-reviewBekleyen güvenlik muafiyetlerini inceleyin ve toplu onaylama veya reddetme kararları verinprojectId (isteğe bağlı)
bulk-exemption-createAçık kapsam ve süre rehberliğiyle birden fazla STO sorunu için gerekçeli güvenlik muafiyetleri oluşturunprojectId (gerekli), exemption_type (gerekli), reason (gerekli), sorun filtreleri (isteğe bağlı)
access-control-auditEn az ayrıcalık ilkesini uygulamak için kullanıcı izinlerini, aşırı yetkili hesapları ve rol atamalarını denetleyinprojectId (isteğe bağlı), orgId (isteğe bağlı)

Harness Code

PromptAçıklamaParametreler
code-reviewBir pull request'i inceleyin — hatalar, güvenlik, performans ve stil hakkında yapılandırılmış geri bildirim sağlamak için diff, commit'ler, kontroller ve yorumları analiz edinrepoId (gerekli), prNumber (gerekli), projectId (isteğe bağlı)
pr-summaryBir dalın commit geçmişinden ve diff'inden otomatik olarak bir PR başlığı ve açıklaması oluşturunrepoId (gerekli), sourceBranch (gerekli), targetBranch (isteğe bağlı, varsayılan: main), projectId (isteğe bağlı)
branch-cleanupBir depodaki dalları analiz edin ve silinmesi gereken bayat veya birleştirilmiş dalları önerinrepoId (gerekli), projectId (isteğe bağlı)

MCP Kaynakları

Kaynak URI'siAçıklamaMIME Türü
pipeline:///{pipelineId}Pipeline YAML tanımıapplication/x-yaml
pipeline:///{orgId}/{projectId}/{pipelineId}Pipeline YAML (açık kapsamla)application/x-yaml
executions:///recentSon 10 pipeline yürütme özetiapplication/json
schema:///pipelineHarness pipeline JSON Şemasıapplication/schema+json
schema:///templateHarness şablon JSON Şemasıapplication/schema+json
schema:///triggerHarness tetikleyici JSON Şemasıapplication/schema+json
schema:///pipeline_v1 (Alpha)Harness V1 pipeline JSON Şeması (basitleştirilmiş aşama/adım formatı)application/schema+json
schema:///agent-pipelineHarness AI ajanı pipeline JSON Şemasıapplication/schema+json
agent-docs:///legacy-formatEski ajan spesifikasyon formatı referansı (agent.step.group.steps / PLUGIN_TASK), mevcut eski formatlı bir ajanı güncellerken create-agent prompt'u tarafından okunurtext/markdown

Araç Seti Filtreleme

Varsayılan olarak, 45 araç setinden 41'i etkindir. Dört araç seti isteğe bağlıdır ve varsayılanlardan hariç tutulmuştur:

  • ansible — Harness Ansible (envanterler, playbook'lar, ana bilgisayarlar, etkinlik). Proje kapsamlı olduğu ve birçok kullanıcının ihtiyaç duymadığı kavramlar eklediği için isteğe bağlıdır.
  • autonomous_work — Geliştirme Harness'i (özerk çalışma). İsteğe bağlıdır; kapsam için araç seti açıklamasına bakın.
  • observability-evaluations — Zamanlanmış üretim telemetri değerlendirme kuralları. Dağıtılmış puanlama kontrol düzlemine bağlı olduğu için isteğe bağlıdır.
  • registries-v3 — Harness Artifact Registry v3 (paketler, sürümler, dosyalar, meta veriler, taramalar, güvenlik duvarı istisnaları). v3 yazma işlemleri yayınlanana kadar isteğe bağlıdır, böylece ajanların v1 kayıt defterleri/artifacts ile v3 paketleri/sürümleri arasında ayrım yapması gerekmez.

+ önekiyle araç setleri ekleme

Tüm varsayılanların yanında isteğe bağlı araç setlerini açıkça dahil etmek için + önekini kullanın:

# Explicitly include Ansible alongside all defaults
HARNESS_TOOLSETS=+ansible

Varsayılan araç setlerini kaldırma

İhtiyacınız olmayan araç setlerini hariç tutmak için - önekini kullanın:

# Remove chaos and ccm from defaults
HARNESS_TOOLSETS=-chaos,-ccm

+ ve - birleştirme

# Add Ansible, remove chaos
HARNESS_TOOLSETS=+ansible,-chaos

Açık izin listesi

Açık bir virgülle ayrılmış liste (önek olmadan) varsayılanları tamamen değiştirir. Yalnızca listelenen araç setleri etkindir:

# Only expose pipelines, services, and connectors
HARNESS_TOOLSETS=pipelines,services,connectors

Mevcut araç seti adları:

Araç SetiKaynak Türleri
platformorganization, project
pipelinespipeline, pipeline_v1, pipeline_dynamic_execution, execution, execution_inputs, trigger, pipeline_summary, input_set, approval_instance
agentsagent, agent_run
servicesservice
environmentsenvironment
connectorsconnector, connector_catalogue
infrastructureinfrastructure
secretssecret
logsexecution_log
auditaudit_event
delegatesdelegate, delegate_token
repositoriesrepository, branch, commit, file_content, tag, repo_rule, space_rule
registriesregistry, artifact, artifact_version, artifact_file
file_storefile_store
templatestemplate
dashboardsdashboard, dashboard_data
idpidp_entity, scorecard, scorecard_check, scorecard_stats, scorecard_check_stats, idp_score, idp_workflow, idp_tech_doc
pull-requestspull_request, pr_reviewer, pr_comment, pr_check, pr_activity
feature-flagsfme_workspace, fme_environment, fme_feature_flag, fme_feature_flag_definition, fme_rollout_status, fme_rule_based_segment, fme_rule_based_segment_definition, fme_traffic_type, fme_identity, fme_standard_segment, fme_segment_keys, fme_segment, fme_segment_definition, fme_metric, fme_event_type
gitopsgitops_agent, gitops_argo_project, gitops_app_project_mapping, gitops_autocreate_log, gitops_application, gitops_cluster, gitops_repository, gitops_applicationset, gitops_repo_credential, gitops_app_event, gitops_pod_log, gitops_managed_resource, gitops_resource_action, gitops_dashboard, gitops_app_resource_tree, gitops_cluster_link
chaoschaos_experiment, chaos_experiment_run, chaos_experiment_variable, chaos_component_variable, chaos_input_set, chaos_experiment_template, chaos_probe, chaos_probe_in_run, chaos_probe_template, chaos_infrastructure, chaos_k8s_infrastructure, chaos_enabled_infrastructure, chaos_environment, chaos_hub, chaos_hub_fault, chaos_fault, chaos_fault_template, chaos_fault_experiment_run, chaos_action, chaos_action_template, chaos_loadtest, chaos_service, chaos_application_map, discovered_agent, discovered_namespace, discovered_service, discovered_network_map, chaos_guard_condition, chaos_guard_rule, chaos_recommendation, chaos_risk, chaos_dr_test, scanned_risk, chaos_risk_rule, chaos_risk_scan
ccmcost_perspective, cost_breakdown, cost_timeseries, cost_summary, cost_recommendation, cost_anomaly, cost_anomaly_summary, cost_category, cost_account_overview, cost_filter_value, cost_recommendation_stats, cost_recommendation_detail, cost_commitment
seisei_metric, sei_productivity_metric, sei_dora_metric, sei_team, sei_team_detail, sei_org_tree, sei_org_tree_detail, sei_business_alignment, sei_ai_usage, sei_ai_adoption, sei_ai_impact, sei_ai_raw_metric
scsscs_artifact_source, artifact_security, scs_artifact_component, scs_artifact_remediation, scs_chain_of_custody, scs_compliance_result, code_repo_security, scs_sbom
evidence-vaultattestation
stosecurity_issue, security_issue_filter, security_exemption, remediation_diff
dbopsdatabase_schema, database_instance, database_snapshot_object, database_llm_authoring_pipeline
autonomous_work (isteğe bağlı)work_item, work_item_resume, work_item_approve, work_timeline, work_budget, work_phase, work_phase_artifact, work_artifact, budget, budget_grant, budget_usage, work_class, work_trigger, capability, risk_evaluator, team, member, member_template, software_component, content_source_connector
access_controluser, user_group, service_account, role, role_assignment, resource_group, permission
governancepolicy, policy_set, policy_evaluation
freezefreeze_window, global_freeze
overridesservice_override
settingssetting
knowledge-graphkg_queryable_type_summary, kg_grammar, hql_query
semantic-layerkg_type, kg_related_type
ai-evalseval_dataset, eval_dataset_item, evaluation, eval_run, eval_run_item, eval_run_by_eval, eval_metric, eval_metric_set, eval_metric_set_entry, eval_suite, eval_suite_evaluation, eval_suite_run, eval_target, eval_annotation, eval_analytics, eval_git_settings, eval_registry_item, eval_git_registration, online_eval
observability-evaluations (opt-in)observability_evaluation_rule
iacmiacm_workspace, iacm_variable_set, iacm_resource, iacm_module, iacm_provider, iacm_workspace_costs, iacm_activity_resource_change
ansible (opt-in)ansible_inventory, ansible_playbook, ansible_host, ansible_host_activity, ansible_activity
registries-v3 (opt-in)package_v3, version_v3, file_v3, registry_metadata_v3, package_metadata_v3, version_metadata_v3, file_metadata_v3, metadata_key_v3, metadata_value_v3, artifact_scan_v3, bulk_scan_evaluation_v3, firewall_exception_v3, firewall_exception_version_v3
release-managementrelease_process, release_activity, release, release_execution_phase, release_execution_task, release_execution_activity, release_input, release_execution_phase_input, release_execution_phase_output, release_execution_activity_input, release_execution_activity_output
vibevibe_project, vibe_app_lifecycle

Mimari

                 +------------------+
                 |   AI Agent       |
                 |  (Claude, etc.)  |
                 +--------+---------+
                          |  MCP (stdio or HTTP)
                 +--------v---------+
                |    MCP Server     |
                | 11 Generic Tools  |
                 +--------+---------+
                          |
                 +--------v---------+
                |    Registry       |  <-- Declarative resource definitions
                | 45 Toolsets (41 default) |
                |  255 Resource Types|
                 +--------+---------+
                          |
                 +--------v---------+
                 |  HarnessClient    |  <-- Auth, retry, rate limiting
                 +--------+---------+
                          |  HTTPS
                 +--------v---------+
                 |  Harness REST API |
                 +-------------------+

Nasıl Çalışır

  1. Araçlar genel fiillerdir: harness_list, harness_get, vb. Doğru API uç noktasına yönlendiren bir resource_type parametresi kabul ederler.
  2. Kayıt Defteri, her resource_type değerini bir ResourceDefinition ile eşler — HTTP yöntemini, URL yolunu, yol/sorgu parametresi eşlemelerini ve yanıt çıkarma mantığını belirten bildirimsel bir veri yapısıdır.
  3. Dağıtım, kaynak tanımını çözer, HTTP isteğini oluşturur (yol değiştirme, sorgu parametreleri, resource_scope farkındalıklı hesap/kuruluş/proje ekleme), Harness API'sini HarnessClient üzerinden çağırır ve ilgili yanıt verilerini çıkarır.
  4. Araç seti filtreleme (HARNESS_TOOLSETS), başlangıçta kayıt defterine hangi kaynak tanımlarının yükleneceğini kontrol eder.
  5. Yapılandırılmış çıktı, MCP outputSchema ile bildirilir; harness_list, dizileri ve yaygın liste sarmalayıcılarını katı istemciler için nesne biçimli structuredContent değerlerine dönüştürür.
  6. Derin bağlantılar, yanıtlara otomatik olarak eklenir ve her kaynak için doğrudan Harness UI URL'leri sağlar.
  7. Kompakt mod, liste sonuçlarından ayrıntılı meta verileri kaldırır ve yalnızca eyleme dönüştürülebilir alanları (kimlik, durum, tür, zaman damgaları, derin bağlantılar) tutarak belirteç kullanımını en aza indirir.

Yeni Bir Kaynak Türü Ekleme

src/registry/toolsets/ içinde yeni bir dosya oluşturun veya mevcut bir araç setine bir kaynak ekleyin:

// src/registry/toolsets/my-module.ts
import type { ToolsetDefinition } from "../types.js";

export const myModuleToolset: ToolsetDefinition = {
  name: "my-module",
  displayName: "My Module",
  description: "Description of the module",
  resources: [
    {
      resourceType: "my_resource",
      displayName: "My Resource",
      description: "What this resource represents",
      toolset: "my-module",
      scope: "project",                    // "project" | "org" | "account"
      identifierFields: ["resource_id"],
      listFilterFields: ["search_term"],
      operations: {
        list: {
          method: "GET",
          path: "/my-module/api/resources",
          queryParams: { search_term: "search", page: "page", size: "size" },
          responseExtractor: (raw) => raw,
          description: "List resources",
        },
        get: {
          method: "GET",
          path: "/my-module/api/resources/{resourceId}",
          pathParams: { resource_id: "resourceId" },
          responseExtractor: (raw) => raw,
          description: "Get resource details",
        },
      },
    },
  ],
};

Ardından src/registry/index.ts içine aktarın ve ALL_TOOLSETS dizisine ekleyin. Herhangi bir araç dosyasında değişiklik yapmanıza gerek yoktur.

Geliştirme

# Build
pnpm build

# Watch mode
pnpm dev

# Type check
pnpm typecheck

# Run tests
pnpm test

# Watch tests
pnpm test:watch

# Interactive MCP Inspector
pnpm inspect

# Refresh generated README counts from the built registry
pnpm docs:generate

# Verify README counts and clone instructions are current
pnpm docs:check

# Sync and verify JSON Schemas used by harness_schema
pnpm sync-schemas
pnpm check-schema-coverage

Proje Yapısı

src/
  index.ts                          # Entrypoint, transport setup
  config.ts                         # Env var validation (Zod)
  client/
    harness-client.ts               # HTTP client (auth, retry, rate limiting)
    types.ts                        # Shared API types
  registry/
    index.ts                        # Registry class + dispatch logic
    types.ts                        # ResourceDefinition, ToolsetDefinition, etc.
    toolsets/                        # One file per toolset (declarative data)
      platform.ts
      pipelines.ts
      services.ts
      ccm.ts
      access-control.ts
      ...
  tools/                            # 11 generic MCP tools
    harness-list.ts
    harness-get.ts
    harness-create.ts
    harness-update.ts
    harness-delete.ts
    harness-execute.ts
    harness-search.ts
    harness-diagnose.ts
    harness-describe.ts
    harness-status.ts
    harness-schema.ts

  resources/                        # MCP resource providers
    pipeline-yaml.ts
    execution-summary.ts
  prompts/                          # MCP prompt templates
    build-deploy-app.ts             # DevOps: end-to-end build & deploy workflow
    debug-pipeline.ts               # DevOps: debug failed executions
    create-pipeline.ts              # DevOps: generate pipeline from requirements
    onboard-service.ts              # DevOps: onboard new service
    dora-metrics.ts                 # DevOps: DORA metrics review
    setup-gitops.ts                 # DevOps: GitOps application setup
    chaos-resilience.ts             # DevOps: chaos experiment design
    feature-flag-rollout.ts         # DevOps: progressive flag rollout
    migrate-to-template.ts          # DevOps: extract templates from pipeline
    delegate-health.ts              # DevOps: delegate health check
    developer-scorecard.ts          # DevOps: IDP scorecard review
    optimize-costs.ts               # FinOps: cost optimization
    cloud-cost-breakdown.ts         # FinOps: cost deep-dive
    commitment-utilization.ts       # FinOps: RI/savings plan analysis
    cost-anomaly.ts                 # FinOps: anomaly investigation
    rightsizing.ts                  # FinOps: rightsizing recommendations
    security-review.ts              # DevSecOps: security issue review
    vulnerability-triage.ts         # DevSecOps: vulnerability triage
    sbom-compliance.ts              # DevSecOps: SBOM compliance audit
    supply-chain-audit.ts           # DevSecOps: supply chain audit
    exemption-review.ts             # DevSecOps: exemption approval
    access-control-audit.ts         # DevSecOps: access control audit
    code-review.ts                  # Harness Code: PR code review
    pr-summary.ts                   # Harness Code: auto-generate PR summary
    branch-cleanup.ts               # Harness Code: stale branch cleanup
    pending-approvals.ts            # Approvals: find and act on pending approvals
  utils/
    cli.ts                          # CLI arg parsing (transport, port)
    errors.ts                       # Error normalization
    logger.ts                       # stderr-only logger
    progress.ts                     # MCP progress & logging notifications
    rate-limiter.ts                 # Client-side rate limiting
    deep-links.ts                   # Harness UI deep link builder
    response-formatter.ts           # Consistent MCP response formatting
    compact.ts                      # Compact list output for token efficiency
tests/
  config.test.ts                    # Config schema validation tests
  utils/
    response-formatter.test.ts
    deep-links.test.ts
    errors.test.ts
  registry/
    registry.test.ts                # Registry loading, filtering, dispatch tests

Bilgi Toplama (Elicitation)

Yazma araçları (harness_create, harness_update, harness_delete, harness_execute), eylemin riski gerektirdiğinde kullanıcıdan onay istemek için MCP elicitation kullanır — yalnızca medium_write, high_write ve destructive işlemleri. Düşük riskli oluşturma / güncelleme / okuma işlemleri (örn. pipeline.create, pipeline.update, hql_query.run) soru sormadan sessizce ilerler. Bir istem görüntülendiğinde, kullanıcı ne olacağını görür ve kabul eder veya reddeder; gerçekten değişiklik yapan veya çalıştıran işlemler için gerçek bir insan onayı sağlar.

Nasıl çalışır:

  1. LLM, medium_write+ riski olan bir yazma aracını çağırır (örn. harness_delete, harness_execute pipeline.run). Düşük riskli oluşturma / güncelleme / okuma işlemleri istem göstermez.
  2. Sunucu, istemciye işlemin bir özeti ve confirm onay kutusu (varsayılan olarak işaretli) ile bir elicitation isteği gönderir.
  3. Kullanıcı ayrıntıları görür ve Kabul Et (confirm işaretliyken) veya Reddet / İptal Et düğmesine tıklar.
  4. confirm: true ile kabul edilirse işlem devam eder. confirm işaretsizken kabul edilirse, reddedilirse veya iptal edilirse işlem engellenir ve LLM bilgilendirilir (açık bir ret yetkilidir ve araç çağrısındaki confirm: true tarafından atlanmaz).

İstemci desteği:

İstemciElicitation Desteği
CursorEvet
VS Code (Copilot)Evet
Claude DesktopHenüz değil
Devin DesktopHenüz değil
MCP InspectorEvet

İstemci desteği eksik olduğunda elicitation davranışı işlem riskine göre değişir:

Risk Seviyesiİstemci elicitation'ı destekliyorconfirm: true iletildiDavranış
read, low_writeherhangiherhangiSessizce ilerle — istem görüntülenmez (confirm bu risk seviyesinde etkisizdir)
medium_write, high_write, destructiveEvetherhangiKullanıcıya sor. Yalnızca kullanıcı confirm: true ile kabul ederse ilerle (şemanın varsayılanı). Açık bir ret, iptal veya confirm: false ile kabul (kullanıcı kutuyu işaretlemedi) yetkilidir ve araç çağrısındaki confirm: true tarafından atlanmaz. confirm alanını içermeyen bir kabul, istemcinin kullanılabilir bir istem gösteremediği şeklinde değerlendirilir — confirm: true ile yeniden deneyerek kurtarılabilir
medium_write, high_write, destructiveHayırHayırENGELLE (confirm: true ile yeniden deneme ipucu içeren hata döndür)
medium_write, high_write, destructiveHayırEvetİlerle (etkileşimli olmayan otomasyon için açık katılım)
herhangi (HARNESS_AUTO_APPROVE_RISK veya altı)herhangiherhangiSormadan otomatik onayla

elicitInput çalışma zamanında başarısız olursa (taşıma hatası, desteklenmeyen yöntem) bir medium_write+ işlemi için, çağıran confirm: true iletmedikçe çağrı engellenir. İstemci bir istem gösteremediğinde veya bozuk bir kabul döndürdüğünde ({action: "accept"} onay alanı olmadan) confirm: true bir geri dönüş olarak onurlandırılır, ancak elicitation el sıkışmasını tamamlayan bir istemciden gelen açık bir reddi/iptali geçersiz kılmaz.

Otonom Mod

Otonom mod, sunucunun onay istemeden tüm işlemleri — yazma ve yıkıcı eylemler dahil — gerçekleştirmesi anlamına gelir. Şu şekilde etkinleştirin:

HARNESS_AUTO_APPROVE_RISK=all

Bu, dağıtım düzeyindeki tavan değerdir: ayarlandığında, bireysel oturumlar bunun üzerine çıkamaz (ancak x-harness-auto-approve-risk başlığı aracılığıyla oturum başına daha sıkı bir eşik seçebilirler).

Veya MCP istemci yapılandırmanızda:

{
  "mcpServers": {
    "harness": {
      "command": "npx",
      "args": ["harness-mcp-v2"],
      "env": {
        "HARNESS_API_KEY": "pat.xxx.xxx.xxx",
        "HARNESS_AUTO_APPROVE_RISK": "all"
      }
    }
  }
}

Kısmi otonomi: Ayrıca yalnızca belirli bir risk seviyesine kadar otomatik onay verebilir, daha yüksek riskli işlemler için yine de sorabilirsiniz:

# Auto-approve reads and low-risk writes; prompt for medium_write, high_write, destructive
HARNESS_AUTO_APPROVE_RISK=low_write

# Auto-approve up to high-risk writes; only prompt for destructive operations
HARNESS_AUTO_APPROVE_RISK=high_write
DeğerOtomatik onaylanan
none (varsayılan)Hiçbir şey — otomatik onay eşiği yok
low_writeOkumalar + düşük riskli yazmalar
medium_writeOkumalar + düşük + orta riskli yazmalar
high_writeOkumalar + düşük + orta + yüksek riskli yazmalar
allYıkıcı işlemler dahil her şey

Otonom mod uyarısı: HARNESS_AUTO_APPROVE_RISK=all, harness_delete dahil tüm işlemler için onayı atlar. Dikkatli kullanın ve hangi kaynak türlerinin kullanılabilir olduğunu kısıtlamak için HARNESS_TOOLSETS ile birlikte kullanmayı düşünün.

Geçiş notu: HARNESS_SKIP_ELICITATION=true hâlâ desteklenmektedir ve HARNESS_AUTO_APPROVE_RISK=all ile eşlenir. stderr'e bir kullanımdan kaldırma uyarısı kaydedilir. Her ikisi de ayarlanırsa, HARNESS_AUTO_APPROVE_RISK önceliklidir.

Güvenlik

  • Sırlar asla ifşa edilmez. secret kaynak türü yalnızca meta verileri döndürür (ad, tür, kapsam) — sır değerleri hiçbir yanıta dahil edilmez.
  • Onay gerektiren işlemler, mevcut olduğunda elicitation kullanır. Bir yazma veya çalıştırma eylemi medium_write, high_write veya destructive riskine sahip olduğunda, harness_create, harness_update, harness_delete ve harness_execute devam etmeden önce MCP elicitation'ı dener (bkz. Elicitation). Düşük riskli eylemler (read, low_write — örn. pipeline.create, pipeline.update, hql_query.run) soru sormadan sessizce ilerler.
  • Orta risk ve üzeri kapalı kalır. medium_write, high_write veya destructive işlemleri için onay alınamazsa, körlemesine yürütmek yerine engellenirler. Otonom iş akışları için HARNESS_AUTO_APPROVE_RISK ile geçersiz kılın.
  • CORS yalnızca aynı kaynakla sınırlıdır. HTTP taşıması yalnızca aynı kaynaklı isteklere izin verir; yerel ana bilgisayardaki MCP sunucusunu hedefleyen kötü niyetli web sitelerinden gelen CSRF saldırılarını önler.
  • HTTP hız sınırlama. HTTP taşıması, istek taşkınlarını önlemek için IP başına dakikada 60 istek uygular.
  • API hız sınırlama. Harness API istemcisi, üst akış hız sınırlarına takılmamak için saniyede 10 istek sınırı uygular.
  • Sayfalama sınırları zorunludur. Liste sorguları, bellek tükenmesini önlemek için toplam 10.000 öğe ve sayfa başına 100 öğe ile sınırlandırılmıştır.
  • Geri çekilmeli yeniden denemeler. Geçici hatalar (HTTP 429, 5xx), üstel geri çekilme ve jitter ile yeniden denenir.
  • Yerel ana bilgisayar bağlama. HTTP taşıması varsayılan olarak 127.0.0.1 adresine bağlanır — ağdan erişilemez.
  • stdout günlüğü yok. Tüm günlükler, stdio JSON-RPC taşımasını bozmamak için stderr'e gider.

Tamamlayıcı Beceriler

Harness MCP sunucusu, Harness Skills ile iyi çalışır — yaygın Harness iş akışları için tasarlanmış hazır Claude Code becerileri (eğik çizgi komutları) koleksiyonu. Özel istemler yazmadan /deploy, /rollback, /triage ve daha fazlası gibi üst düzey otomasyon elde etmek için bu MCP sunucusunun yanına kurun.

Sorun Giderme ve Yaygın Tuzaklar

BelirtiOlası NedenNe Yapılmalı
HARNESS_ACCOUNT_ID is required when the API key does not include an account ID segment...API anahtarı desteklenen bir hesap kapsamlı formatta değil (pat.<accountId>... veya sat.<accountId>...), bu yüzden hesap kimliği çıkarılamıyorHARNESS_ACCOUNT_ID değerini açıkça ayarlayın
Başlangıçta Unknown transport: "..."Desteklenmeyen CLI taşıma (transport) argümanıYalnızca stdio veya http kullanın
Başlangıçta Invalid HARNESS_TOOLSETS: ...Bir veya daha fazla araç seti adı tanınmıyorYalnızca Araç Seti Filtreleme bölümündeki adları kullanın (birebir eşleşme)
HTTP mcp-session-id header is required...Oturum başlığı olmadan oturum isteği gönderildiÖnce initialize gönderin, ardından POST/GET/DELETE /mcp üzerinde mcp-session-id değerini ekleyin
HTTP Session not found...Oturum, MCP_SESSION_TTL_MS boşta kalma milisaniyesinden sonra süresi doldu veya zaten kapatıldıYeni bir oturum oluşturmak için initialize komutunu yeniden çalıştırın, ardından yeni başlıkla tekrar deneyin
/mcp üzerinde HTTP 405 Method Not AllowedMCP uç noktası için desteklenmeyen yöntemYalnızca POST, GET, DELETE veya OPTIONS kullanın
HTTP Invalid requestGeçersiz JSON gövdesi veya istek gövdesi HARNESS_MAX_BODY_SIZE_MB sınırını aştıJSON yük boyutunu/şeklini doğrulayın; gerekirse HARNESS_MAX_BODY_SIZE_MB değerini artırın
Araçlardan Unknown resource_type "..."Kaynak türü yanlış yazılmış veya HARNESS_TOOLSETS ile filtrelenmişGeçerli türleri keşfetmek için harness_describe çağrısını yapın (isteğe bağlı search_term ile)
Missing required field "... for path parameter ..."Proje/org kapsamlı bir çağrıda tanımlayıcılar eksikHARNESS_ORG/HARNESS_PROJECT ayarlayın veya her araç çağrısında org_id/project_id değerlerini iletin
resource_scope "org" requires org_id... veya resource_scope "project" requires project_id...Çok kapsamlı bir kaynak, yeterli tanımlayıcı olmadan org/proje kapsamına zorlandıEksik org_id/project_id değerlerini iletin, HARNESS_ORG/HARNESS_PROJECT yapılandırın veya desteklendiğinde resource_scope: "account" kullanın
Read-only mode is enabled ... operations are not allowedHARNESS_READ_ONLY=true oluşturma/güncelleme/silme/çalıştırma işlemlerini engelliyorYazma işlemleri amaçlanıyorsa HARNESS_READ_ONLY=false ayarlayın
Pipeline çalıştırması, çözümlenmemiş zorunlu girdilerle ön kontrol aşamasında başarısız oluyorSağlanan inputs zorunlu çalışma zamanı yer tutucularını kapsamadıruntime_input_template değerini getirin, eksik basit anahtarları sağlayın veya yapısal girdiler için input_set_ids kullanın
Pipeline CI kısayolu (branch, tag, pr_number, commit_sha) uygulanmadıinputs.build zaten sağlandı, bu yüzden kısayol genişletmesi bilinçli olarak atlandıKısayol genişletmesini kullanmak için inputs.build değerini kaldırın veya tam açık build yapısını koruyun
Pipeline çalıştırması yanlış YAML revizyonunu yüklediPipeline tanımı Git'te saklanıyor ve çalıştırma istenen pipeline dalını belirtmedirun eyleminde params.pipeline_branch değerini iletin; bu, Harness branch değerine karşılık gelir
wait: true _wait.error döndürdüPipeline tetikleyicisi başarılı oldu, ancak sunucu tarafı yoklama başarısız olduYeniden çalıştırmaya karar vermeden önce harness_get(resource_type="execution", ...) ile execution_id değerini yeniden kontrol edin
wait: true execution_timed_out: true döndürdüYürütme, wait_timeout_seconds süresinden önce terminal durumuna ulaşmadıDurumu yeniden kontrol etmek için döndürülen execution_id değerini kullanın; harness_diagnose çalıştırmadan önce terminal durumunu bekleyin
Yürütme günlükleri boş veya blob indirmeleri 403 döndürüyorHarness tarafından barındırılan günlük blob URL'leri, özellikle dahili veya kendi kendine yönetilen ana bilgisayarlar için yapılandırılmış Harness istemci/auth yolunu gerektirirHARNESS_BASE_URL değerini hedef Harness ana bilgisayarına yönlendirin ve MCP istemcisini atlamak yerine harness_get(resource_type="execution_log", ...) veya harness_diagnose(..., include_logs=true) kullanın
Operation declined by user / Operation cancelled by userKullanıcı, bilgi toplama onay iletişim kutusunu reddetti veya iptal etti — yetkiliKullanıcıyla işlem ayrıntılarını doğrulayın; confirm: true açık bir reddi atlamaz. Kullanıcı istemi kabul etmelidir
Operation blocked: the client could not surface a usable confirmation promptİstemci bilgi toplama desteğinden yoksun, elicitInput başarısız oldu veya bozuk bir kabul döndürdüEtkileşimli olmayan otomasyon için confirm: true ile yeniden deneyin veya bilgi toplamayı destekleyen bir istemci kullanın
Şablon oluşturma/güncelleme için body.template_yaml (or body.yaml) is requiredŞablon API'leri tam YAML yükü beklerbody içinde tam template_yaml dizesini sağlayın; silme işlemleri için bir sürümü silmek üzere version_label iletin (tüm sürümleri silmek için atlayın)
Başlangıçta HARNESS_BASE_URL must use HTTPSHARNESS_BASE_URL bir HTTP URL'sine ayarlıHTTPS kullanın veya yerel geliştirme için HARNESS_ALLOW_HTTP=true ayarlayın

Lisans

MIT