Aller au contenu principal

CRD Tool

La CRD Tool définit un tool MCP individuel que les agents AI peuvent invoquer.

GroupVersionKind​

ChampValeur
Groupgostoa.dev
Versionv1alpha1
KindTool

Exemple Complet​

apiVersion: gostoa.dev/v1alpha1
kind: Tool
metadata:
name: payment-create
namespace: tenant-acme
labels:
app.kubernetes.io/part-of: payment-api
annotations:
gostoa.dev/api-ref: payment-api/v2
spec:
displayName: Créer un Paiement
description: Créer une nouvelle transaction de paiement
endpoint: https://api.<YOUR_DOMAIN>/acme/payment-api/v2/payments
method: POST
version: "2.0.0"
tags:
- payments
- transactions
inputSchema:
type: object
properties:
amount:
type: number
description: Montant du paiement en centimes
currency:
type: string
enum: [EUR, USD, GBP]
default: EUR
recipient:
type: string
description: ID du compte destinataire
required:
- amount
- recipient
authentication:
type: bearer
secretRef:
name: payment-api-token
key: token
rateLimit:
requestsPerMinute: 100
burst: 20
timeout: "30s"
enabled: true
status:
phase: Registered
registeredAt: "2026-02-06T10:00:00Z"
lastSyncedAt: "2026-02-06T12:00:00Z"
invocationCount: 1542
errorCount: 12

Champs Spec​

Champs Obligatoires​

ChampTypeDescription
displayNamestringNom lisible par un humain (1-64 caractères)
descriptionstringDescription du tool pour le contexte AI (1-1024 caractères)

Champs Optionnels​

ChampTypeDéfautDescription
endpointstring-URL de l'endpoint HTTP
methodenumPOSTMéthode HTTP : GET, POST, PUT, PATCH, DELETE
inputSchemaobject{}JSON Schema pour les paramètres du tool
tagsarray[]Tags de catégorisation
versionstring1.0.0Version du tool
timeoutstring30sTimeout de la requête (ex : "30s", "1m")
enabledbooleantrueActiver/désactiver le tool

Configuration de l'Authentification​

spec:
authentication:
type: bearer # none, bearer, basic, apiKey, oauth2
secretRef:
name: api-secret # Nom du secret dans le même namespace
key: token # Clé dans le secret
headerName: Authorization # En-tête personnalisé (défaut : Authorization)

Rate Limiting​

spec:
rateLimit:
requestsPerMinute: 60 # Requêtes par minute (1-10000)
burst: 10 # Tolérance de rafale (1-1000)

Référence API​

Lier le tool à l'API source :

spec:
apiRef:
name: payment-api
version: v2
operationId: createPayment

Champs Status​

ChampTypeDescription
phaseenumPending, Registered, Error, Disabled
registeredAtdatetimeDate d'enregistrement du tool
lastSyncedAtdatetimeHorodatage de la dernière synchronisation
invocationCountintegerTotal des invocations
errorCountintegerTotal des erreurs
lastErrorstringMessage d'erreur le plus récent
conditionsarrayConditions de style Kubernetes

Phases​

PhaseDescription
PendingTool créé, en attente d'enregistrement
RegisteredTool actif et disponible
ErrorÉchec de l'enregistrement
DisabledTool désactivé manuellement

Règles de Validation​

  1. Nom unique par namespace — Les noms de tools doivent être uniques dans un namespace
  2. JSON Schema valide — inputSchema doit être un JSON Schema draft-07 valide
  3. Endpoint valide — Si fourni, doit être une URL HTTP(S) valide
  4. Le secret doit exister — Les secrets référencés doivent exister dans le même namespace

Exemples​

Tool Simple (Sans Auth)​

apiVersion: gostoa.dev/v1alpha1
kind: Tool
metadata:
name: echo
namespace: tenant-demo
spec:
displayName: Echo
description: Retourne le message en entrée
method: GET
inputSchema:
type: object
properties:
message:
type: string

Tool avec OAuth2​

apiVersion: gostoa.dev/v1alpha1
kind: Tool
metadata:
name: salesforce-query
namespace: tenant-enterprise
spec:
displayName: Requête Salesforce
description: Exécuter une requête SOQL sur Salesforce
endpoint: https://login.salesforce.com/services/data/v58.0/query
method: GET
authentication:
type: oauth2
secretRef:
name: salesforce-oauth
key: access_token
inputSchema:
type: object
properties:
q:
type: string
description: Requête SOQL
required:
- q

Tool avec Clé API​

apiVersion: gostoa.dev/v1alpha1
kind: Tool
metadata:
name: openai-completion
namespace: tenant-ai
spec:
displayName: Complétion OpenAI
description: Générer une complétion de texte
endpoint: https://api.openai.com/v1/completions
method: POST
authentication:
type: apiKey
headerName: Authorization
secretRef:
name: openai-key
key: api-key
timeout: "60s"
rateLimit:
requestsPerMinute: 20
burst: 5

Ressources Associées​