tutoriels

Créer un serveur MCP en .NET pour connecter l'IBM i (AS400) à une IA

ParQuentin DESTRADE

image d’illustration de l’article

Contenu détaillé de l’article:Créer un serveur MCP en .NET pour connecter l'IBM i (AS400) à une IA

Connecter votre IBM i à un agent IA compatible Model Context Protocol (Claude Desktop)

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.

Dans cet article, nous allons voir comment:

  • Créer un serveur MCP en .NET 8
  • Connecter ce serveur à un IBM i via NTi
  • L’exposer à Claude Desktop en mode sécurisé (stdio)
  • Exécuter une première requête en temps réel

Dans les prochains épisodes, nous irons plus loin: appel de programmes RPG, exécution de commandes CL, et SQL en lecture/écriture.

Mais commençons par le commencement: installer et configurer un serveur MCP pour IBM i.

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 notre 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, vous créez un serveur MCP depuis .NET, qui expose des fonctionnalités sous forme de tools. Lorsque vous posez une question à Claude Desktop, il analyse votre demande, identifie le tool approprié, l’appelle avec les bons paramètres, récupère les données depuis l’IBM i, et vous répond en langage naturel.
Vous ne codez rien côté Claude. Tout se passe côté .NET.

Schéma d'architecture d'un serveur MCP .NET en mode stdio sur IBM i

Ce qui est bluffant, 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 votre système répond à Claude 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, status et stock, pour restituer 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 IA 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 moins 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, totaux cumulés etc…

Dans tous ces cas, l’agent IA s’appuie sur les tools que vous avez exposés via votre 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 retournés et produire une synthèse visuelle et structurée.

Confidentialité et sécurité

Le serveur MCP fonctionne selon deux modes:

  • SSE (Server-Sent Events): le serveur est exposé via HTTP sur votre 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 que nous allons utiliser 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 que vous utilisez 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 que vous choisissez d’exposer via vos tools,
  • De la configuration réseau de votre serveur MCP
  • Des politiques de traitement des données du fournisseur du modèle utilisé.

Prérequis

Avant de commencer, voici ce dont vous avez besoin. 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 votre serveur MCP, téléchargeable ici.

Étape 1: Mise en place du projet

Ouvrez un terminal et placez-vous dans votre dossier de projets.
Créez le projet et ouvrez le dans Visual Studio:

dotnet new console -n NTiMcpServer -f net8.0
cd NTiMcpServer
start devenv NTiMcpServer.csproj 

Ajoutez ensuite les packages suivants

dotnet add package Aumerial.Data.Nti 
dotnet add package ModelContextProtocol --prerelease
dotnet add package Microsoft.Extensions.Hosting
dotnet add package Dapper

Étape 2: Configuration de 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 votre projet, puis ajoutez-y un fichier AdminTools.cs

using Aumerial.Data.Nti;
using Dapper;
using ModelContextProtocol.Server;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;

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%'");
        }
    }
}

On indique le type dynamic car on ne connait pas à l’avance les colonnes exactes retournées par QSYS2.ACTIVE_JOB_INFO.

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, plus l'agent sélectionnera correctement la tool.

Étape 4: Lancer le serveur et connecter Claude Desktop

Une fois le code en place, compilez et lancez le serveur depuis le terminal:

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é, vous devez y trouver plusieurs dossiers et fichiers. Si le dossier est vide ou inexistant, Claude Desktop n'est pas correctement installé.

Ajoutez-y la configuration suivante en adaptant le chemin vers votre projet :

{
  "mcpServers": {
    "ntimcpServer": {
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "C:\\ABSOLUTE\\PATH\\TO\\PROJECT"
      ]
    }
  }
}

⚠️ Faites attention à l'indentation et à la validité du JSON. Une virgule manquante ou un accolade mal fermée empêchera Claude Desktop de démarrer correctement. Vous pouvez valider votre fichier sur jsonlint avant de sauvegarder.

Sauvegardez le fichier et redémarrez Claude Desktop.
Pour vérifier que votre serveur est bien detecté, cliquez sur l’icône “+” en bas de la fenêtre de conversation, puis survolez connecteurs.
Vous devriez voir ntimcpserver apparaître dans la liste.

Interface Claude Desktop montrant l’activation du serveur MCP ntimcpserver dans le menu Connecteurs

Étape 5: Premier test

Votre serveur est connecté, et votre IBM i accessible. Il est temps de tester.
Ouvrez une nouvelle conversation dans Claude Desktop et demandez lui par exemple:

" Liste moi les jobs actifs sur l'IBM i et affiche le résultat avec le Carbon Design System d'IBM. "

Claude va appeler la tool GetActiveJobs , récupérer les données depuis l’IBM i, et générer un rendu HTML formaté avec le Carbon Design System (le système de design officiel d'IBM, reconnaissable entre mille).

Monitoring des jobs QZDASOINIT sur IBM i

Pour aller plus loin

Le serveur MCP est en place, la connexion à l’IBM i fonctionne, et vous avez vu ce qu’un agent IA peut produire à partir d’une simple question en langage naturel. La suite de la série ira plus loin dans les interactions possibles entre un agent IA et un IBM i:

  • Exécuter des requêtes SQL en lecture/écriture sur DB2 for i
  • Appeler un programme RPG depuis un agent IA
  • Exécuter des commandes CL en langage naturel

Tous les exemples de cette série reposent sur NTi data provider, le connecteur de référence .NET / IBM i.
C’est lui qui permet la connexion DB2 for i, l’appel de programmes RPG et l’exécution de commandes CL depuis une application .NET.

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


Quentin Destrade