Explication

Contenu orienté compréhension pour l’architecture et les concepts de gomcptest

Les documents d’explication discutent et clarifient les concepts pour élargir la compréhension du lecteur sur les sujets. Ils fournissent du contexte et éclairent les idées.

Cette section fournit un contexte plus approfondi sur le fonctionnement de gomcptest, son architecture et les concepts qui le sous-tendent.

1 - Architecture de gomcptest

Plongée profonde dans l’architecture du système et les décisions de conception

Ce document explique l’architecture de gomcptest, les décisions de conception qui la sous-tendent, et comment les différents composants interagissent pour créer un hôte personnalisé pour le Protocole de Contexte de Modèle (MCP).

Vue d’Ensemble

Le projet gomcptest implémente un hôte personnalisé qui fournit une implémentation du Protocole de Contexte de Modèle (MCP). Il est conçu pour permettre les tests et l’expérimentation avec des systèmes d’agents sans nécessiter d’intégration directe avec des plateformes LLM commerciales.

Le système est construit avec ces principes clés à l’esprit :

  • Modularité : Les composants sont conçus pour être interchangeables
  • Compatibilité : L’API imite l’API OpenAI pour une intégration facile
  • Extensibilité : De nouveaux outils peuvent être facilement ajoutés au système
  • Test : L’architecture facilite le test d’applications basées sur des agents

Composants Principaux

Hôte (Serveur OpenAI)

L’hôte est le composant central, situé dans /host/openaiserver. Il présente une interface API compatible OpenAI et se connecte à Vertex AI de Google pour l’inférence de modèle. Cette couche de compatibilité facilite l’intégration avec des outils et bibliothèques existants conçus pour OpenAI.

L’hôte a plusieurs responsabilités clés :

  1. Compatibilité API : Implémentation de l’API de complétion de chat OpenAI
  2. Gestion des Sessions : Maintien de l’historique et du contexte des conversations
  3. Intégration des Modèles : Connexion aux modèles Gemini de Vertex AI
  4. Appel de Fonctions : Orchestration des appels de fonctions/outils basés sur les sorties du modèle
  5. Streaming de Réponses : Support des réponses en streaming vers le client

Contrairement aux implémentations commerciales, cet hôte est conçu pour le développement et les tests locaux, privilégiant la flexibilité et l’observabilité aux fonctionnalités prêtes pour la production comme l’authentification ou la limitation de débit.

Outils MCP

Les outils sont des exécutables autonomes qui implémentent le Protocole de Contexte de Modèle. Chaque outil est conçu pour exécuter une fonction spécifique, comme l’exécution de commandes shell ou la manipulation de fichiers.

Les outils suivent un modèle cohérent :

  • Ils communiquent via l’entrée/sortie standard en utilisant le protocole JSON-RPC MCP
  • Ils exposent un ensemble spécifique de paramètres
  • Ils gèrent leurs propres conditions d’erreur
  • Ils renvoient les résultats dans un format standardisé

Cette approche permet aux outils d’être :

  • Développés indépendamment
  • Testés de manière isolée
  • Utilisés dans différents environnements hôtes
  • Chaînés ensemble dans des flux de travail complexes

CLI

L’interface en ligne de commande fournit une interface utilisateur similaire à des outils comme “Claude Code” ou “OpenAI ChatGPT”. Elle se connecte au serveur compatible OpenAI et offre un moyen d’interagir avec le LLM et les outils via une interface conversationnelle.

Flux de Données

  1. L’utilisateur envoie une requête à l’interface CLI
  2. Le CLI transmet cette requête au serveur compatible OpenAI
  3. Le serveur envoie la requête au modèle Gemini de Vertex AI
  4. Le modèle peut identifier des appels de fonction dans sa réponse
  5. Le serveur exécute ces appels de fonction en invoquant les outils MCP appropriés
  6. Les résultats sont fournis au modèle pour poursuivre sa réponse
  7. La réponse finale est diffusée en streaming vers le CLI et présentée à l’utilisateur

Explications des Décisions de Conception

Pourquoi la Compatibilité avec l’API OpenAI ?

L’API OpenAI est devenue un standard de facto dans l’espace des LLM. En implémentant cette interface, gomcptest peut fonctionner avec une grande variété d’outils, de bibliothèques et d’interfaces existants avec une adaptation minimale.

Pourquoi Google Vertex AI ?

Vertex AI donne accès aux modèles Gemini de Google, qui possèdent de solides capacités d’appel de fonctions. L’implémentation pourrait être étendue pour prendre en charge d’autres fournisseurs de modèles si nécessaire.

Pourquoi des Outils Autonomes ?

En implémentant les outils comme des exécutables autonomes plutôt que des fonctions de bibliothèque, nous obtenons plusieurs avantages :

  • Sécurité par isolation
  • Agnosticisme linguistique (les outils peuvent être écrits dans n’importe quel langage)
  • Capacité à distribuer les outils séparément de l’hôte
  • Tests et développement plus faciles

Pourquoi MCP ?

Le Protocole de Contexte de Modèle fournit une manière standardisée pour les LLM d’interagir avec des outils externes. En adoptant ce protocole, gomcptest assure la compatibilité avec les outils développés pour d’autres hôtes compatibles MCP.

Limitations et Orientations Futures

L’implémentation actuelle présente plusieurs limitations :

  • Une seule session de chat par instance
  • Support limité pour l’authentification et l’autorisation
  • Pas de persistance de l’historique des chats entre les redémarrages
  • Pas de support intégré pour la limitation de débit ou les quotas

Les améliorations futures pourraient inclure :

  • Support pour plusieurs sessions de chat
  • Intégration avec des fournisseurs de modèles supplémentaires
  • Fonctionnalités de sécurité améliorées
  • Gestion des erreurs et journalisation améliorées
  • Optimisations de performance pour les déploiements à grande échelle

Conclusion

L’architecture de gomcptest représente une approche flexible et extensible pour construire des hôtes MCP personnalisés. Elle privilégie la simplicité, la modularité et l’expérience développeur, ce qui en fait une excellente plateforme pour l’expérimentation avec des systèmes d’agents.

En comprenant cette architecture, les développeurs peuvent utiliser efficacement le système, l’étendre avec de nouveaux outils, et potentiellement l’adapter à leurs besoins spécifiques.

2 - Understanding the Model Context Protocol (MCP)

Exploration of what MCP is, how it works, and design decisions behind it

This document explores the Model Context Protocol (MCP), how it works, the design decisions behind it, and how it compares to alternative approaches for LLM tool integration.

What is the Model Context Protocol?

The Model Context Protocol (MCP) is a standardized communication protocol that enables Large Language Models (LLMs) to interact with external tools and capabilities. It defines a structured way for models to request information or take actions in the real world, and for tools to provide responses back to the model.

MCP is designed to solve the problem of extending LLMs beyond their training data by giving them access to:

  • Current information (e.g., via web search)
  • Computational capabilities (e.g., calculators, code execution)
  • External systems (e.g., databases, APIs)
  • User environment (e.g., file system, terminal)

How MCP Works

At its core, MCP is a protocol based on JSON-RPC that enables bidirectional communication between LLMs and tools. The basic workflow is:

  1. The LLM generates a call to a tool with specific parameters
  2. The host intercepts this call and routes it to the appropriate tool
  3. The tool executes the requested action and returns the result
  4. The result is injected into the model’s context
  5. The model continues generating a response incorporating the new information

The protocol specifies:

  • How tools declare their capabilities and parameters
  • How the model requests tool actions
  • How tools return results or errors
  • How multiple tools can be combined

MCP in gomcptest

In gomcptest, MCP is implemented using a set of independent executables that communicate over standard I/O. This approach has several advantages:

  • Language-agnostic: Tools can be written in any programming language
  • Process isolation: Each tool runs in its own process for security and stability
  • Compatibility: The protocol works with various LLM providers
  • Extensibility: New tools can be easily added to the system

Each tool in gomcptest follows a consistent pattern:

  1. It receives a JSON request on stdin
  2. It parses the parameters and performs its action
  3. It formats the result as JSON and returns it on stdout

The Protocol Specification

The core MCP protocol in gomcptest follows this format:

Tool Registration

Tools register themselves with a schema that defines their capabilities:

{
  "name": "ToolName",
  "description": "Description of what the tool does",
  "parameters": {
    "type": "object",
    "properties": {
      "param1": {
        "type": "string",
        "description": "Description of parameter 1"
      },
      "param2": {
        "type": "number",
        "description": "Description of parameter 2"
      }
    },
    "required": ["param1"]
  }
}

Function Call Request

When a model wants to use a tool, it generates a function call like:

{
  "name": "ToolName",
  "params": {
    "param1": "value1",
    "param2": 42
  }
}

Function Call Response

The tool executes the requested action and returns:

{
  "result": "Output of the tool's execution"
}

Or, in case of an error:

{
  "error": {
    "message": "Error message",
    "code": "ERROR_CODE"
  }
}

Design Decisions in MCP

Several key design decisions shape the MCP implementation in gomcptest:

Standard I/O Communication

By using stdin/stdout for communication, tools can be written in any language that can read from stdin and write to stdout. This makes it easy to integrate existing utilities and libraries.

JSON Schema for Tool Definition

Using JSON Schema for tool definitions provides a clear contract between the model and the tools. It enables:

  • Validation of parameters
  • Documentation of capabilities
  • Potential for automatic code generation

Stateless Design

Tools are designed to be stateless, with each invocation being independent. This simplifies the protocol and makes tools easier to reason about and test.

Pass-through Authentication

The protocol doesn’t handle authentication directly; instead, it relies on the host to manage permissions and authentication. This separation of concerns keeps the protocol simple.

Comparison with Alternatives

vs. OpenAI Function Calling

MCP is similar to OpenAI’s function calling feature but with these key differences:

  • MCP is designed to be provider-agnostic
  • MCP tools run as separate processes
  • MCP provides more detailed error handling

vs. LangChain Tools

Compared to LangChain:

  • MCP is a lower-level protocol rather than a framework
  • MCP focuses on interoperability rather than abstraction
  • MCP allows for stronger process isolation

vs. Agent Protocols

Other agent protocols often focus on higher-level concepts like goals and planning, while MCP focuses specifically on the mechanics of tool invocation.

Future Directions

The MCP protocol in gomcptest could evolve in several ways:

  • Enhanced security: More granular permissions and sand-boxing
  • Streaming responses: Support for tools that produce incremental results
  • Bidirectional communication: Supporting tools that can request clarification
  • Tool composition: First-class support for chaining tools together
  • State management: Optional session state for tools that need to maintain context

Conclusion

The Model Context Protocol as implemented in gomcptest represents a pragmatic approach to extending LLM capabilities through external tools. Its simplicity, extensibility, and focus on interoperability make it a solid foundation for building and experimenting with agentic systems.

By understanding the protocol, developers can create new tools that seamlessly integrate with the system, unlocking new capabilities for LLM applications.