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 :
- Compatibilité API : Implémentation de l’API de complétion de chat OpenAI
- Gestion des Sessions : Maintien de l’historique et du contexte des conversations
- Intégration des Modèles : Connexion aux modèles Gemini de Vertex AI
- Appel de Fonctions : Orchestration des appels de fonctions/outils basés sur les sorties du modèle
- 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
- L’utilisateur envoie une requête à l’interface CLI
- Le CLI transmet cette requête au serveur compatible OpenAI
- Le serveur envoie la requête au modèle Gemini de Vertex AI
- Le modèle peut identifier des appels de fonction dans sa réponse
- Le serveur exécute ces appels de fonction en invoquant les outils MCP appropriés
- Les résultats sont fournis au modèle pour poursuivre sa réponse
- 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:
- The LLM generates a call to a tool with specific parameters
- The host intercepts this call and routes it to the appropriate tool
- The tool executes the requested action and returns the result
- The result is injected into the model’s context
- 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:
- It receives a JSON request on stdin
- It parses the parameters and performs its action
- It formats the result as JSON and returns it on stdout
The Protocol Specification
The core MCP protocol in gomcptest follows this format:
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.
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
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.