Créer un Serveur MCP Cursor avec Google Gemini 2.5 et les Vector Stores d’OpenAI

Créer un Serveur MCP Cursor avec Google Gemini 2.5 et les Vector Stores d’OpenAI

Dans cet article, je vais vous montrer comment utiliser le dernier modèle de Google Gemini 2.5, la fonctionnalité vector store d’OpenAI et la bibliothèque Python Pi Airbyte pour créer un serveur MCP dans Cursor. Ce serveur sera capable de générer l’intégralité de votre pipeline d’intégration de données sans que vous ayez à écrire une seule ligne de code. Entrons directement dans le vif du sujet.

Préparation du contexte pour notre serveur MCP

Pour commencer, nous voulons que notre serveur MCP connaisse autant que possible les pratiques de codage Pi Airbyte et, surtout, le catalogue de connecteurs Airbyte. Je vais copier le texte des ressources et les enregistrer dans des fichiers de mon projet.

Cette étape est importante car elle fournit le contexte nécessaire. Je vais récupérer plusieurs éléments que j’ai déjà sauvegardés localement. L’un des éléments essentiels est de donner à Gemini autant de contexte que possible sur Pi Airbyte. Pour cela, je vais copier toute la documentation, la sauvegarder sous forme de fichier texte et la stocker dans le vector store.

Je vais également faire la même chose avec le fichier de secrets, car les secrets sont un élément crucial pour que Pi Airbyte comprenne le catalogue des connecteurs. Par exemple, si je me connecte à Postgres ou Snowflake, je dois fournir certaines informations pour l’authentification et la connexion. Les secrets sont la méthode que nous utilisons dans Pi Airbyte.

J’ajouterai également quelques guides de démarrage rapide et de la documentation, notamment une application exemple très simple. Je vais sauvegarder toutes ces informations dans un fichier texte, puis les charger dans le vector store.

Création du Vector Store dans OpenAI

J’ai déjà sauvegardé ces fichiers et je vais maintenant passer à OpenAI. OpenAI a lancé il y a quelques semaines cette excellente fonctionnalité de vector stores qui est très rapide, légère et facile à utiliser. Vous pouvez voir sur le côté droit que j’en ai déjà créé un, mais si je crée un nouveau vector store, vous verrez à quel point c’est rapide.

Je vais l’appeler « Pairbyte 2 ». L’ID est un élément important auquel nous reviendrons plus tard – vous en aurez besoin dans votre application, mais pas tout de suite. Ensuite, je vais ajouter tous les fichiers que j’ai sauvegardés précédemment.

En particulier, je vais sur mon bureau pour récupérer ma documentation, puis je les ajoute ici. Vous verrez que cela s’exécute en arrière-plan très rapidement, télécharge les fichiers et crée les embeddings pour moi. J’utiliserai cela pour que Gemini effectue la recherche par embeddings plus tard lorsque je créerai mon serveur MCP.

Préparation du catalogue de connecteurs

Avant cela, il est essentiel que notre serveur MCP connaisse tous les connecteurs disponibles dans Airbyte. Nous les conservons tous dans un registre de connecteurs. Vous pouvez voir qu’il y a une multitude de sources et de destinations, plus de 500 actuellement et ce nombre ne cesse de croître. Nous voulons que notre serveur MCP connaisse tous ces connecteurs.

Le problème est que ce format n’est pas vraiment adapté pour être interrogé par un LLM. C’est pourquoi je peux utiliser ce vector store pour créer une documentation prête pour les LLM.

J’ai déjà fait cela avec ces fichiers texte et pages HTML. Dans ce cas, je veux procéder un peu différemment. Je vais donc passer à Gemini et utiliser un prompt qui dit : « Crée une version LLM-friendly de ma page, liste simplement les noms des connecteurs source et destination exactement comme je les référence dans Airbyte, mets-les dans un fichier JSON combiné qui configure également les détails de destination pour eux, donne-moi l’option d’exporter l’ensemble de données complet ».

Ce que je vais obtenir, c’est un fichier JSON que je vais mettre dans mon vector store. Je lance la requête et lui donne quelques minutes pour créer le fichier.

J’en ai déjà créé un pour gagner du temps. Revenons à mon stockage et ajoutons-le. Voici mon catalogue de connecteurs, vous pouvez voir rapidement à quoi il ressemble, et je vais l’ajouter ici.

Maintenant, j’ai tout ce dont mon modèle et mon MCP ont besoin pour connaître les meilleures pratiques de création d’applications Airbyte. C’est très important : ajouter ces éléments dans un vector store me permet d’utiliser Gemini, mais d’utiliser ce contexte lorsque je crée réellement mon code.

Préparation du contexte pour la création du serveur MCP

Maintenant, je veux ajouter un contexte différent pour que Gemini sache comment créer le serveur MCP de la manière que je souhaite, et en particulier comment le créer en fonction du protocole MCP et comment utiliser les API OpenAI dont j’ai besoin pour cette recherche vectorielle.

Je vais suivre un processus très similaire à celui que j’ai utilisé précédemment : créer des fichiers texte et les ajouter à un prompt. L’une des choses dont j’ai besoin est évidemment le SDK Python du protocole MCP. Je peux copier-coller cela comme je l’ai fait auparavant et le sauvegarder dans un fichier texte.

Je veux également l’implémenter dans Cursor, donc je vais copier-coller la documentation de Cursor sur ce qui est nécessaire. Il est important de noter que lorsque vous copiez-collez ces informations, vous devez sélectionner le langage qui vous intéresse pour que le contexte et le prompt sachent exactement ce que vous voulez. Dans mon cas, je veux utiliser Python, ce qui est parfait pour moi.

Du côté d’OpenAI, il y a quelques choses que je veux pouvoir faire. Je veux rechercher dans ce vector store, donc j’utilise l’API de recherche de fichiers ici. Je vais copier-coller tout cela dans un fichier texte également. Je veux aussi utiliser les API de génération de texte et de prompting qui sont fournies. Je veux les utiliser car elles seront importantes lorsque je créerai l’application Pi Airbyte. Elle doit fonctionner et agir comme un bot, prendre mes prompts et mes entrées pour créer les pipelines basés sur les sources et les destinations.

Création du prompt pour Gemini

Une fois que j’ai tout cela, je peux revenir à Gemini et j’ai créé un prompt qui dit : « Crée un serveur MCP Cursor qui fournit des instructions étape par étape et une implémentation de code qui utilise Airbyte pour créer des flux sources et des destinations ». Il est important que j’ai demandé au prompt d’inclure des instructions sur la façon de créer les flux et d’écrire vers la destination, car je veux créer et configurer cela.

J’ai fourni quelques détails d’implémentation spécifiques ici. En particulier, je veux utiliser UV pour un environnement virtuel (vous pourriez préférer pip ou autre chose, j’aime UV). Je veux utiliser le serveur MCP officiel et je veux utiliser les docs et les instructions étape par étape, et bien sûr utiliser Pi Airbyte.

L’astuce ici est que je dois télécharger les fichiers et le contexte avec lesquels je travaille. Tout comme nous l’avons fait précédemment dans le vector store, rappelez-vous que le vector store est l’endroit où ce serveur MCP va interroger pour prendre mes prompts sur le pipeline que je veux. Dans ce cas, je crée le serveur MCP, donc je n’ai pas de vector store. Ce que je veux pouvoir faire, c’est mettre à jour toute la documentation que j’avais auparavant.

C’est une étape vraiment importante lorsque vous créez des prompts de bonne qualité. Il ne peut pas toujours rechercher sur Internet pour trouver les bonnes informations que vous voulez, il est donc préférable de lui donner toutes ces informations spécifiques. Je vais ajouter mon catalogue comme avant, pas que j’en aie trop besoin dans ce cas, mais j’aimerais l’ajouter quand même, et surtout les docs du serveur MCP que nous venons de parcourir, les docs MCP Cursor et OpenAI.

L’une des grandes choses que j’ai découvertes avec Gemini 2.5, c’est que c’est un modèle de raisonnement incroyable. Si vous pensez à notre cas d’utilisation, non seulement je crée ce serveur MCP, ce qui est assez facile pour Gemini, mais il a aussi besoin du raisonnement pour comprendre le prompt que je vais lui donner pour créer ces pipelines sous forme de code avec Airbyte.

Exécution de Gemini et résultat

Je peux lancer et démarrer ce processus, et il commencera. J’ai lancé et commencé à exécuter cela, et cela va prendre un peu de temps. Si vous voulez voir ce qu’il fait, vous pouvez développer les informations et regarder tout ce qui se passe.

Gemini a terminé en 35 secondes. Il a créé, comme je l’ai demandé, des instructions sur tout ce qu’il faut faire. Je peux suivre ces instructions, copier et coller dans mon code dans mon terminal en utilisant OpenAI.

En particulier, nous avons déjà fait cela, donc nous n’en avons pas besoin dans le code, mais il nous dit comment ajouter les fichiers au vector store, ce que nous avons déjà fait. Nous aurions pu le faire par code, mais nous l’avons fait via le navigateur.

Enfin, nous devons nous assurer qu’à ce stade, nous ajoutons notre ID de vector store dans un fichier d’environnement, puis l’étape finale, qui est le code du serveur MCP qui va créer le serveur lui-même. Si nous faisons défiler tout en bas, la dernière chose dont nous avons besoin devrait être des informations sur la façon de créer un fichier JSON MCP pour Cursor.

Configuration du projet dans Cursor

Pour gagner du temps, j’ai suivi les instructions fournies par Gemini pour créer un projet pour mon serveur MCP directement dans Cursor. Vous verrez quelques éléments ici : j’utilise UV pour l’environnement virtuel comme je l’ai mentionné auparavant, vous voyez nos docs et tout ce que nous avons importé auparavant, ils sont simplement dans mon projet pour me faciliter la tâche.

Vous n’en avez pas besoin pour le serveur MCP à ce stade car il a déjà été généré, mais les deux choses importantes que vous devez faire pour vous conformer au protocole MCP pour Cursor sont de mettre les choses dans un répertoire « tools ». Dans ce cas, j’y ai mis ce catalogue JSON, qui est le registre de tous les connecteurs Airbyte.

Par exemple, si je regarde Postgres, il sait que j’ai besoin de ces paramètres de configuration : un hôte, un port, une base de données, un nom d’utilisateur et un mot de passe. C’est vraiment la puissance d’Airbyte et de Pi Airbyte : vous pouvez profiter de ce registre complet pour créer n’importe lequel de ces connecteurs pour vous avec du code. Et vous verrez qu’en utilisant MCP, vous n’écrirez même pas une seule ligne de code vous-même.

Implémentation du serveur MCP

Notre implémentation du serveur MCP est assez simple. Vous voyez que je crée en utilisant Fast MCP, ce que j’ai demandé à Gemini de générer pour moi. Je vais également utiliser OpenAI comme je l’ai mentionné auparavant, en utilisant mon ID de vector store qui provient de la variable d’environnement dans le fichier d’environnement, et je vais l’utiliser pour interroger le vector store.

Je peux ainsi faire une recherche de fichiers, et cette recherche de fichiers, rappelez-vous, c’est là que j’obtiens le contexte pour savoir comment créer une bonne application Pi Airbyte selon les meilleures pratiques.

Certaines des autres logiques ici sont qu’il doit obtenir toutes les informations sur les connecteurs que j’ai mentionnées auparavant. Je vais passer sur beaucoup d’autres choses, mais en particulier, dans mon serveur MCP, j’utilise l’API de chat completions d’OpenAI pour modifier mon prompt que je fournis dans Cursor et le MCP afin de déterminer comment créer ce pipeline sous forme de code pour moi. Le reste concerne les détails d’implémentation, donc je ne les aborderai pas ici. Vous pouvez les consulter dans le repo GitHub par vous-même.

Ce qui est important, c’est que notre Gemini a également créé une configuration de serveur MCP pour moi. Je lui ai dit que j’utilise UV pour l’exécuter et je peux l’exécuter en utilisant ce fichier également.

Configuration du serveur MCP dans Cursor

L’une des choses que j’aime toujours faire est de démarrer mon environnement ici. Pour que cela apparaisse et fonctionne dans Cursor, c’est très facile, vous pouvez simplement aller dans Paramètres > MCP et vous verrez que le mien est déjà reconnu car il est dans mon application ici.

Parfois, lorsque vous devez l’ajouter pour la première fois, c’est une bonne idée de l’actualiser pour vous assurer que tout va bien. Là où il est indiqué « client closed », c’est normal, mon serveur ne fonctionne pas pour le moment. Lorsque Cursor entend ou interprète une demande pour ce serveur, ce que je vous montrerai comment faire dans une minute, il exécutera cette commande UV run, la lancera et l’exécutera.

Tout cela fonctionne localement, évidemment. Si je voulais un serveur MCP global, je pourrais cliquer sur « ajouter un serveur MCP global » ici et l’ajouter. Cela pourrait évidemment se trouver dans le cloud, mais dans mon exemple, local est suffisant.

Utilisation du serveur MCP pour créer un pipeline

Une fois que nous avons toutes ces informations, nous sommes prêts à commencer. Typiquement, je n’exécuterais pas ma génération de pipeline dans le même projet que mon MCP, mais pour cet exemple, c’est bien.

Je vais créer un nouveau contexte ici et disons que je veux utiliser le serveur MCP Pyabine pour créer un pipeline de Postgres vers Snowflake. Vous remarquerez que cet agent apparaît maintenant, indiquant qu’il sait que j’ai des agents dans ce serveur MCP fonctionnant dans mon contexte.

Tout ce que j’ai à faire maintenant est d’appuyer sur Envoyer. Il va déterminer exactement ce dont il a besoin, trouver le serveur MCP, examiner le catalogue pour savoir exactement ce qui est nécessaire pour créer la source vers la destination en fonction du prompt que j’ai fourni.

Le serveur MCP démarre pour la première fois car il fonctionne localement ici, c’est là qu’il utilise cette commande UV pour l’exécuter. Dans une minute environ, cela apparaîtra. Ajoutons-le au terminal pour voir ce qui se passe.

Il a créé toutes ces informations pour moi, il sait qu’il a besoin de la source et de la destination pour Postgres et la destination Snowflake ici. Tout semble bon, je vais lui dire de générer le code et, juste comme ça, il va créer tout le pipeline pour moi sans écrire une seule ligne de code.

Examen de l’implémentation

Examinons cette implémentation elle-même. Je vais accepter ce fichier et terminer l’édition. Vous verrez ici que tout mon code est créé, mes exigences sont créées, je sais que j’ai une source pour Postgres, j’ai une source ou une destination pour Snowflake, il va chercher dans ce fichier EMV toutes les configurations et il va créer tout le pipeline pour vous.

À ce stade, vous pouvez l’utiliser dans un dataframe, vous pouvez l’utiliser dans vos applications, tout ce que vous voulez. Dans mon fichier d’environnement, vous verrez que c’est là que j’ai mon vector store que nous avons utilisé auparavant. Vous auriez votre clé API Open ici, et voici les ajouts basés sur ce que je viens de demander à mon serveur MCP et à mon prompt de faire.

Conclusion

Et voilà ! En environ 5 minutes, nous avons créé un serveur MCP complet qui utilise Google Gemini pour générer le serveur lui-même, puis utilise la recherche de fichiers du vector store d’OpenAI et les API de prompting et de complétion de chat pour comprendre les prompts que j’ai fournis afin de créer n’importe quel type de pipeline de données soutenu par Pi Airbyte et le catalogue de connecteurs Airbyte.

C’est vraiment incroyable car, tout d’un coup, je n’ai pas eu à créer le moindre morceau de code d’intégration ou de logique d’intégration. J’ai simplement laissé mon serveur MCP le créer pour moi, et je peux simplement créer n’importe quel prompt et il fera la même chose pour moi également, quelle que soit la source ou la destination parmi les plus de 500 fournies par Airbyte.

Les serveurs MCP sont un véritable changement de donne pour les développeurs, et cela vous montre comment utiliser Pi Airbyte pour créer des pipelines sous forme de code sans écrire une seule ligne de code.