Imaginez taper dans Claude AI: " Génère-moi un rapport des jobs QZDASOINIT ".
Vingt secondes plus tard, un tableau complet apparaît: synthèse par job, statuts colorés, détails d’exécution, données en temps réel issues de votre IBM i.
Ça vous paraît impossible ?
Pourtant, c'est exactement ce que nous allons mettre en place avec .NET et NTi data provider.
Cet article fait partie d’une série consacrée à l’utilisation d’un agent IA avec l'IBM i via le Model Context Protocol:
- Créer un serveur MCP en .NET pour connecter l’IBM i (AS400) à une IA (cet article)
- Lecture et écriture SQL sur DB2 for i depuis .NET avec un serveur MCP
- Appeler un programme RPG IBM i depuis .NET avec un agent IA
Cet article couvre :
- La création d'un serveur MCP en .NET 8
- La connexion de ce serveur à un IBM i via NTi
- Son exposition à Claude Desktop en mode sécurisé (stdio)
- L'exécution d'une première requête en temps réel
Qu’est-ce que le Model Context Protocol (MCP) ?
Le Model Context Protocol est un standard ouvert, publié par Anthropic en 2024, qui permet à n'importe quel agent IA de communiquer avec des sources de données externes : bases de données, APIs, ERPs, ou dans ce cas, un IBM i.
Avant ça, l'agent IA était en quelque sorte enfermé dans sa bulle. Il pouvait répondre à des questions générales, rédiger du texte, analyser des documents, mais n'avait aucun moyen d'aller chercher lui-même des données dans un système tiers.
Concrètement, un serveur MCP est créé en .NET et expose des fonctionnalités sous forme de tools. Lorsqu'une question est posée à Claude Desktop, il analyse la demande, identifie le tool approprié, l'appelle avec les bons paramètres, récupère les données depuis l'IBM i, et répond en langage naturel.
Rien à coder côté Claude. Tout se passe côté .NET.

Ce qui est remarquable, c'est la simplicité de mise en œuvre : une application .NET, le package ModelContextProtocol, NTi pour la connexion IBM i, Claude Desktop pour l'agent IA, et le système répond en quelques instants.
Pourquoi connecter l’IBM i à un agent IA ?
Un utilisateur souhaite savoir pourquoi une commande client n'a pas été expédiée ? Au lieu de naviguer entre plusieurs écrans 5250, il pose la question en langage naturel. Claude interroge les tables commandes, statuts et stock, et restitue une synthèse claire.
Un responsable d'exploitation constate un ralentissement ? Il demande à Claude "Quels sont les jobs les plus consommateurs de CPU en ce moment ?". L'agent interroge les vues système QSYS2 et renvoie un tableau.
Un responsable commercial souhaite visualiser l'évolution des ventes du mois en cours ? Il demande "montre-moi les ventes par jour avec une comparaison par rapport au mois précédent". Claude interroge DB2 for i, agrège les données, puis génère un tableau de bord avec graphiques d'évolution et totaux cumulés.
Dans tous ces cas, l'agent IA s'appuie sur les tools exposés via le serveur MCP. Chaque tool encapsule une requête SQL, un appel de programme RPG ou une lecture de vue système. À partir du moment où ces points d'accès sont correctement définis, Claude peut interroger plusieurs sources successivement, exploiter les résultats et produire une synthèse structurée.
Confidentialité et sécurité
Le serveur MCP fonctionne selon deux modes:
- SSE (Server-Sent Events) : le serveur est exposé via HTTP sur le réseau et peut être consommé par des clients autorisés.
- stdio : le serveur s'exécute localement sur la même machine que Claude Desktop, sans exposition réseau.
C'est ce deuxième mode qui est utilisé dans cet article.
Dans les deux cas, les données restent dans votre infrastructure. Le serveur MCP ne transmet rien de lui-même vers l'extérieur. Lorsque Claude appelle un tool, les résultats retournés sont transmis au modèle afin de générer la réponse.
Les accès IBM i sont ceux configurés avec NTi. L'agent IA ne dispose d'aucun droit supplémentaire, il opère strictement avec les autorisations du profil IBM i utilisé pour la connexion.
La confidentialité dépend donc :
- Des données exposées via les tools
- De la configuration réseau du serveur MCP
- Des politiques de traitement des données du fournisseur du modèle utilisé
Prérequis
Comptez une vingtaine de minutes pour tout mettre en place.
Côté développement
- NET 8 SDK ou supérieur
- Visual Studio 2022 ou VS Code avec l'extension C#
Côté IBM i
- Un accès IBM i avec un utilisateur de développement (lecture seule recommandée)
- Le connecteur NTi data provider: Licence d’évaluation gratuite disponible.
Pour tester
- Claude Desktop (gratuit) : l'agent IA qui consommera le serveur MCP.
Étape 1 - Mise en place du projet
Créez le projet depuis le terminal :
dotnet new console -n NTiMcpServer -f net8.0
cd NTiMcpServer
Ajoutez les packages nécessaires :
dotnet add package Aumerial.Data.Nti
dotnet add package ModelContextProtocol --prerelease
dotnet add package Microsoft.Extensions.Hosting
dotnet add package DapperÉtape 2 - Configuration du serveur MCP
Ouvrez Program.cs et remplacez son contenu par le code suivant :
using Aumerial.Data.Nti;
using NTiMcpServer.Tools;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using ModelContextProtocol;
var builder = Host.CreateApplicationBuilder(args);
builder.Logging.AddConsole(o => o.LogToStandardErrorThreshold = LogLevel.Trace);
builder.Services
.AddSingleton(new NTiConnection("server=***;user=***;password=***;"))
.AddMcpServer()
.WithStdioServerTransport()
.WithTools();
await builder.Build().RunAsync();
Remplacez les valeurs de la chaîne de connexion (server, user, password) par vos informations IBM i.
Il est recommandé d’utiliser un profil dédié avec des droits limités pour les tests.
Étape 3 - Premier tool : AdminTools
Créez un dossier Tools dans le projet, puis ajoutez-y un fichier AdminTools.cs :
using Aumerial.Data.Nti;
using Dapper;
using ModelContextProtocol.Server;
using System.ComponentModel;
namespace NTiMcpServer.Tools
{
public class AdminTools
{
private readonly NTiConnection _conn;
public AdminTools(NTiConnection conn)
{
_conn = conn;
}
[McpServerTool]
[Description("Liste les jobs QZDASOINIT actifs sur l'IBM i")]
public IEnumerable GetActiveJobs()
{
return _conn.Query("SELECT * FROM TABLE(QSYS2.ACTIVE_JOB_INFO()) WHERE JOB_NAME LIKE '%QZDASOINIT%'");
}
}
}
Le type dynamic est utilisé car les colonnes exactes retournées par QSYS2.ACTIVE_JOB_INFO ne sont pas connues à l'avance.
L'attribut [McpServerTool] expose la méthode comme un tool utilisable par l'agent IA. Toute méthode annotée ainsi devient accessible via le protocole MCP. Plus la description est claire et précise, plus l'agent sélectionnera correctement le tool.
Étape 4 - Connecter Claude Desktop
Une fois le code en place, compilez et lancez le serveur :
dotnet run
Le serveur démarre et écoute les messages entrants via stdio.
Ouvrez ensuite le fichier de configuration de Claude Desktop. Sur Windows, il se trouve ici :
%AppData%\Claude\claude_desktop_config.json
Pour vérifier que Claude Desktop est correctement installé, plusieurs dossiers et fichiers doivent y être présents. Si le dossier est vide ou inexistant, Claude Desktop n'est pas correctement installé.
Ajoutez la configuration suivante en adaptant le chemin vers le projet :
{
"mcpServers": {
"ntimcpServer": {
"command": "dotnet",
"args": [
"run",
"--project",
"C:\\ABSOLUTE\\PATH\\TO\\PROJECT"
]
}
}
}
Vérifiez l'indentation et la validité du JSON avant de sauvegarder. Une virgule manquante ou une accolade mal fermée empêchera Claude Desktop de démarrer correctement. Le fichier peut être validé sur jsonlint.com.
Sauvegardez le fichier et redémarrez Claude Desktop. Pour vérifier que le serveur est bien détecté, cliquez sur l'icône "+" en bas de la fenêtre de conversation, puis survolez Connecteurs. Le serveur ntimcpserver doit apparaître dans la liste.

Étape 5 - Premier test
Le serveur est connecté et l'IBM i accessible. Ouvrez une nouvelle conversation dans Claude Desktop et posez par exemple :
" Liste moi les jobs actifs sur l'IBM i et affiche le résultat avec le Carbon Design System d'IBM. "
Claude appelle le tool GetActiveJobs, récupère les données depuis l'IBM i, et génère un rendu HTML formaté avec le Carbon Design System.

Une licence d'évaluation de 30 jours est disponible gratuitement, suffisante pour reproduire l'ensemble des exemples présentés dans cette série.
Quentin Destrade