33800 Docs

← Retour

Proposition: Connecteurs Services Internes

Date: 25/01/2026 21:45 Status: En attente validation

Services identifiés avec API

Priorité HAUTE (très utiles)

Service URL API Usage
Jellyfin 192.168.1.199:8096 REST Bibliothèque médias, lecture, users
Ollama 192.168.1.30:11434 REST Chat LLM, generate, embeddings
Portainer 192.168.1.12:9443 REST Containers, stacks, images
GitLab 192.168.1.196 REST Repos, pipelines, issues, MRs
Proxmox 192.168.1.10:8006 REST VMs, containers, storage, backup

Priorité MOYENNE (utiles)

Service URL API Usage
Grafana 192.168.1.12:3000 REST Dashboards, datasources, alerts
Prometheus 192.168.1.12:9090 REST Métriques, alerting rules
Pi-hole 192.168.1.12:80 REST DNS, blocklists, stats
Supabase 192.168.1.12:8200 REST Tables, auth, storage
Nextcloud 192.168.1.51:8060 WebDAV+REST Fichiers, calendrier, contacts

Priorité BASSE (spécialisés)

Service URL API Usage
ai-orchestrator 192.168.1.12:5501 REST Tools IA, jobs queue
whisper-api 192.168.1.12:9100 REST Transcription audio
yolo-api 192.168.1.12:9200 REST Détection objets images
Open-WebUI 192.168.1.12:3001 REST Chat history, models

Outils IA Win11 (via ai-orchestrator)

Ces outils sont déjà gérés par ai-orchestrator, pas besoin de connecteurs directs :


Connecteurs recommandés à créer

1. Jellyfin (15 endpoints)

{
  id: 'jellyfin',
  name: 'Jellyfin',
  base_url: 'http://192.168.1.199:8096',
  auth_type: 'api_key', // X-Emby-Token header
  endpoints: [
    // Library
    { method: 'GET', path: '/Items', entity: 'item', action: 'list', summary: 'Get all items' },
    { method: 'GET', path: '/Items/{id}', entity: 'item', action: 'get', summary: 'Get item details' },
    { method: 'GET', path: '/Items/Latest', entity: 'item', action: 'list', summary: 'Get latest items' },
    // Users
    { method: 'GET', path: '/Users', entity: 'user', action: 'list', summary: 'List users' },
    { method: 'GET', path: '/Users/{id}', entity: 'user', action: 'get', summary: 'Get user' },
    // Sessions
    { method: 'GET', path: '/Sessions', entity: 'session', action: 'list', summary: 'Active sessions' },
    // System
    { method: 'GET', path: '/System/Info', entity: 'system', action: 'get', summary: 'Server info' },
    { method: 'POST', path: '/System/Restart', entity: 'system', action: 'update', summary: 'Restart server' },
    // Playback
    { method: 'POST', path: '/Sessions/{id}/Playing', entity: 'playback', action: 'create', summary: 'Start playback' },
    { method: 'POST', path: '/Sessions/{id}/Playing/Stop', entity: 'playback', action: 'delete', summary: 'Stop playback' },
    // Libraries
    { method: 'GET', path: '/Library/VirtualFolders', entity: 'library', action: 'list', summary: 'List libraries' },
    { method: 'POST', path: '/Library/Refresh', entity: 'library', action: 'update', summary: 'Refresh all libraries' },
    // Search
    { method: 'GET', path: '/Search/Hints', entity: 'search', action: 'list', summary: 'Search media' },
  ]
}

2. Ollama (8 endpoints)

{
  id: 'ollama',
  name: 'Ollama',
  base_url: 'http://192.168.1.30:11434',
  auth_type: 'none',
  endpoints: [
    { method: 'POST', path: '/api/generate', entity: 'completion', action: 'create', summary: 'Generate text' },
    { method: 'POST', path: '/api/chat', entity: 'chat', action: 'create', summary: 'Chat completion' },
    { method: 'POST', path: '/api/embeddings', entity: 'embedding', action: 'create', summary: 'Generate embeddings' },
    { method: 'GET', path: '/api/tags', entity: 'model', action: 'list', summary: 'List local models' },
    { method: 'POST', path: '/api/show', entity: 'model', action: 'get', summary: 'Show model info' },
    { method: 'POST', path: '/api/pull', entity: 'model', action: 'create', summary: 'Pull model' },
    { method: 'DELETE', path: '/api/delete', entity: 'model', action: 'delete', summary: 'Delete model' },
    { method: 'POST', path: '/api/copy', entity: 'model', action: 'create', summary: 'Copy model' },
  ]
}

3. Portainer (12 endpoints)

{
  id: 'portainer',
  name: 'Portainer',
  base_url: 'https://192.168.1.12:9443',
  auth_type: 'bearer', // JWT token
  endpoints: [
    // Endpoints (environments)
    { method: 'GET', path: '/api/endpoints', entity: 'endpoint', action: 'list', summary: 'List environments' },
    // Containers
    { method: 'GET', path: '/api/endpoints/{envId}/docker/containers/json', entity: 'container', action: 'list', summary: 'List containers' },
    { method: 'POST', path: '/api/endpoints/{envId}/docker/containers/{id}/start', entity: 'container', action: 'update', summary: 'Start container' },
    { method: 'POST', path: '/api/endpoints/{envId}/docker/containers/{id}/stop', entity: 'container', action: 'update', summary: 'Stop container' },
    { method: 'POST', path: '/api/endpoints/{envId}/docker/containers/{id}/restart', entity: 'container', action: 'update', summary: 'Restart container' },
    { method: 'GET', path: '/api/endpoints/{envId}/docker/containers/{id}/logs', entity: 'container', action: 'get', summary: 'Get logs' },
    // Stacks
    { method: 'GET', path: '/api/stacks', entity: 'stack', action: 'list', summary: 'List stacks' },
    { method: 'POST', path: '/api/stacks/{id}/start', entity: 'stack', action: 'update', summary: 'Start stack' },
    { method: 'POST', path: '/api/stacks/{id}/stop', entity: 'stack', action: 'update', summary: 'Stop stack' },
    // Images
    { method: 'GET', path: '/api/endpoints/{envId}/docker/images/json', entity: 'image', action: 'list', summary: 'List images' },
  ]
}

4. Proxmox (15 endpoints)

{
  id: 'proxmox',
  name: 'Proxmox VE',
  base_url: 'https://192.168.1.10:8006',
  auth_type: 'custom', // PVEAuthCookie + CSRFPreventionToken
  endpoints: [
    // Nodes
    { method: 'GET', path: '/api2/json/nodes', entity: 'node', action: 'list', summary: 'List nodes' },
    { method: 'GET', path: '/api2/json/nodes/{node}/status', entity: 'node', action: 'get', summary: 'Node status' },
    // VMs
    { method: 'GET', path: '/api2/json/nodes/{node}/qemu', entity: 'vm', action: 'list', summary: 'List VMs' },
    { method: 'GET', path: '/api2/json/nodes/{node}/qemu/{vmid}/status/current', entity: 'vm', action: 'get', summary: 'VM status' },
    { method: 'POST', path: '/api2/json/nodes/{node}/qemu/{vmid}/status/start', entity: 'vm', action: 'update', summary: 'Start VM' },
    { method: 'POST', path: '/api2/json/nodes/{node}/qemu/{vmid}/status/stop', entity: 'vm', action: 'update', summary: 'Stop VM' },
    { method: 'POST', path: '/api2/json/nodes/{node}/qemu/{vmid}/status/shutdown', entity: 'vm', action: 'update', summary: 'Shutdown VM' },
    // LXC
    { method: 'GET', path: '/api2/json/nodes/{node}/lxc', entity: 'container', action: 'list', summary: 'List LXC' },
    { method: 'POST', path: '/api2/json/nodes/{node}/lxc/{vmid}/status/start', entity: 'container', action: 'update', summary: 'Start LXC' },
    { method: 'POST', path: '/api2/json/nodes/{node}/lxc/{vmid}/status/stop', entity: 'container', action: 'update', summary: 'Stop LXC' },
    // Storage
    { method: 'GET', path: '/api2/json/nodes/{node}/storage', entity: 'storage', action: 'list', summary: 'List storage' },
    // Tasks
    { method: 'GET', path: '/api2/json/nodes/{node}/tasks', entity: 'task', action: 'list', summary: 'List tasks' },
    // Cluster
    { method: 'GET', path: '/api2/json/cluster/resources', entity: 'resource', action: 'list', summary: 'All cluster resources' },
  ]
}

5. GitLab (déjà partiellement couvert par GitHub type, mais spécifique)

Utiliser l'API GitLab CE locale pour :


Plan d'action proposé

  1. Phase 1 : Jellyfin + Ollama (les plus utiles au quotidien)
  2. Phase 2 : Portainer + Proxmox (gestion infra)
  3. Phase 3 : GitLab local + Grafana (monitoring/CI)

Questions

  1. Quels connecteurs veux-tu en priorité ?
  2. Pour Jellyfin, as-tu déjà une API key ?
  3. Pour Proxmox, préfères-tu API token ou user/password ?