Documentation
gomcptest est une preuve de concept (POC) démontrant comment implémenter un Protocole de Contexte de Modèle (MCP) avec un hôte personnalisé pour expérimenter avec des systèmes d’agents.
Documentation gomcptest
Bienvenue dans la documentation de gomcptest. Ce projet est une preuve de concept (POC) démontrant comment implémenter un Protocole de Contexte de Modèle (MCP) avec un hôte personnalisé pour expérimenter avec des systèmes d’agents.
Structure de la Documentation
Notre documentation suit le Framework de Documentation Divio, qui organise le contenu en quatre types distincts : tutoriels, guides pratiques, référence et explication. Cette approche garantit que différents besoins d’apprentissage sont satisfaits avec le format de contenu approprié.
Tutoriels : Contenu orienté apprentissage
Les tutoriels sont des leçons qui vous guident pas à pas à travers une série d’étapes pour réaliser un projet. Ils se concentrent sur l’apprentissage par la pratique et aident les débutants à se familiariser avec le système.
Guides Pratiques : Contenu orienté problème
Les guides pratiques sont des recettes qui vous guident à travers les étapes impliquées dans la résolution de problèmes clés et de cas d’utilisation. Ils sont pragmatiques et orientés vers des objectifs.
Les guides de référence sont des descriptions techniques des mécanismes et de leur fonctionnement. Ils décrivent en détail comment les choses fonctionnent et sont précis et complets.
Référence | Description |
---|
Référence des Outils | Référence complète de tous les outils compatibles MCP disponibles, leurs paramètres, formats de réponse et gestion des erreurs. |
Référence du Serveur Compatible OpenAI | Documentation technique de l’architecture du serveur, des points d’accès API, des options de configuration et des détails d’intégration avec Vertex AI. |
Référence cliGCP | Référence détaillée de la structure de commande cliGCP, des composants, des paramètres, des modèles d’interaction et des états internes. |
Explication : Contenu orienté compréhension
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.
Explication | Description |
---|
Architecture de gomcptest | Plongée profonde dans l’architecture du système, les décisions de conception et comment les différents composants interagissent pour créer un hôte MCP personnalisé. |
Comprendre le Protocole de Contexte de Modèle (MCP) | Exploration de ce qu’est le MCP, comment il fonctionne, les décisions de conception qui le sous-tendent et comment il se compare aux approches alternatives pour l’intégration d’outils LLM. |
Composants du Projet
gomcptest se compose de plusieurs composants clés qui fonctionnent ensemble :
Composants Hôtes
- Serveur compatible OpenAI (
host/openaiserver
) : Un serveur qui implémente l’interface API OpenAI et se connecte à Vertex AI de Google pour l’inférence de modèle. - cliGCP (
host/cliGCP
) : Une interface en ligne de commande similaire à Claude Code ou ChatGPT qui interagit avec les modèles Gemini et les outils MCP.
Outils
Le répertoire tools
contient divers outils compatibles MCP :
- Bash : Exécute des commandes bash dans une session shell persistante
- Edit : Modifie le contenu d’un fichier en remplaçant un texte spécifié
- GlobTool : Trouve des fichiers correspondant à des modèles glob
- GrepTool : Recherche dans le contenu des fichiers à l’aide d’expressions régulières
- LS : Liste les fichiers et répertoires
- Replace : Remplace complètement le contenu d’un fichier
- View : Lit le contenu des fichiers
- dispatch_agent : Lance un nouvel agent avec accès à des outils spécifiques
1 - Tutoriels
Guides étape par étape pour commencer avec gomcptest
Les tutoriels sont des guides d’apprentissage qui vous guident à travers une série d’étapes pour compléter un projet. Ils se concentrent sur l’apprentissage par la pratique et aident les débutants à se familiariser avec le système.
Ces tutoriels vous aideront à vous familiariser avec gomcptest et ses composants.
1.1 - Démarrage avec gomcptest
Démarrez rapidement avec gomcptest grâce à ce guide pour débutants
Ce tutoriel vous guidera à travers la configuration du système gomcptest et la mise en place de l’authentification Google Cloud pour le projet.
Prérequis
- Go >= 1.21 installé sur votre système
- Compte Google Cloud avec accès à l’API Vertex AI
- Google Cloud CLI installé
- Familiarité de base avec le terminal/ligne de commande
Configuration de l’Authentification Google Cloud
Avant d’utiliser gomcptest avec les services de Google Cloud Platform comme Vertex AI, vous devez configurer votre authentification.
1. Initialiser le CLI Google Cloud
Si vous n’avez pas encore configuré le CLI Google Cloud, exécutez :
Cette commande interactive vous guidera à travers :
- La connexion à votre compte Google
- La sélection d’un projet Google Cloud
- La définition des configurations par défaut
2. Se connecter à Google Cloud
Authentifiez votre CLI gcloud avec votre compte Google :
Cela ouvrira une fenêtre de navigateur où vous pourrez vous connecter à votre compte Google.
Les Identifiants par Défaut de l’Application sont utilisés par les bibliothèques clientes pour trouver automatiquement les identifiants lors de la connexion aux services Google Cloud :
gcloud auth application-default login
Cette commande va :
- Ouvrir une fenêtre de navigateur pour l’authentification
- Stocker vos identifiants localement (généralement dans
~/.config/gcloud/application_default_credentials.json
) - Configurer votre environnement pour utiliser ces identifiants lors de l’accès aux API Google Cloud
Ces identifiants seront utilisés par gomcptest lors de l’interaction avec les services Google Cloud.
Configuration du Projet
Cloner le dépôt :
git clone https://github.com/owulveryck/gomcptest.git
cd gomcptest
Construire les Outils : Compiler tous les outils compatibles MCP
Choisir l’Interface :
Prochaines Étapes
Après avoir terminé la configuration de base :
- Explorez les différents outils dans le répertoire
tools
- Essayez de créer des tâches d’agent avec gomcptest
- Consultez les guides pratiques pour des cas d’utilisation spécifiques
1.2 - Building Your First OpenAI-Compatible Server
Set up and run an OpenAI-compatible server with MCP tool support
This tutorial will guide you step-by-step through running and configuring the OpenAI-compatible server in gomcptest. By the end, you’ll have a working server that can communicate with LLM models and execute MCP tools.
Prerequisites
- Go >= 1.21 installed
- Access to Google Cloud Platform with Vertex AI API enabled
- GCP authentication set up via
gcloud auth login
- Basic familiarity with terminal commands
- The gomcptest repository cloned and tools built (see the Getting Started guide)
Step 1: Set Up Environment Variables
The OpenAI server requires several environment variables. Create a .envrc file in the host/openaiserver directory:
cd host/openaiserver
touch .envrc
Add the following content to the .envrc file, adjusting the values according to your setup:
# Server configuration
PORT=8080
LOG_LEVEL=INFO
IMAGE_DIR=/tmp/images
# GCP configuration
GCP_PROJECT=your-gcp-project-id
GCP_REGION=us-central1
GEMINI_MODELS=gemini-2.0-flash
IMAGEN_MODELS=imagen-3.0-generate-002
Ensure the image directory exists:
Load the environment variables:
Step 2: Start the OpenAI Server
Now you can start the OpenAI-compatible server:
cd host/openaiserver
go run . -mcpservers "../bin/GlobTool;../bin/GrepTool;../bin/LS;../bin/View;../bin/Bash;../bin/Replace"
You should see output indicating that the server has started and registered the MCP tools.
Step 3: Test the Server with a Simple Request
Open a new terminal window and use curl to test the server:
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-2.0-flash",
"messages": [
{
"role": "user",
"content": "Hello, what can you do?"
}
]
}'
You should receive a response from the model explaining its capabilities.
Step 4: Test Function Calling
Now let’s test function calling by asking the model to list files in a directory:
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-2.0-flash",
"messages": [
{
"role": "user",
"content": "List the files in the current directory"
}
]
}'
The model should respond by calling the LS tool and returning the results.
What You’ve Learned
In this tutorial, you’ve:
- Set up the environment for the OpenAI-compatible server
- Built and registered MCP tools
- Started the server
- Tested basic chat completion
- Demonstrated function calling capabilities
Next Steps
Now that you have a working OpenAI-compatible server, you can:
- Explore the API by sending different types of requests
- Add custom tools to expand the server’s capabilities
- Connect a client like the cliGCP to interact with the server
- Experiment with different Gemini models
Check out the How to Configure the OpenAI Server guide for more advanced configuration options.
1.3 - Utiliser l'Interface en Ligne de Commande cliGCP
Configurer et utiliser l’interface en ligne de commande cliGCP pour interagir avec les LLMs et les outils MCP
Ce tutoriel vous guide à travers la configuration et l’utilisation de l’interface en ligne de commande cliGCP pour interagir avec les LLMs et les outils MCP. À la fin, vous serez capable d’exécuter le CLI et d’effectuer des tâches de base avec celui-ci.
Prérequis
Avant de commencer, assurez-vous que vous avez :
- Go 1.21 ou plus récent installé
- Un compte Google Cloud Platform avec l’API Vertex AI activée
- L’authentification Google Cloud configurée (voir le tutoriel de démarrage)
- Une installation gomcptest fonctionnelle avec les outils construits
Configuration de l’Environnement
Définir les variables d’environnement :
# Votre ID de projet GCP
export GCP_PROJECT=votre-projet-id
# Région Vertex AI (par défaut: us-central1)
export GCP_REGION=us-central1
# Modèles Gemini à utiliser
export GEMINI_MODELS=gemini-1.5-pro,gemini-2.0-flash
# Répertoire pour stocker les images temporaires
export IMAGE_DIR=/tmp/images
Créer le répertoire d’images :
Compilation et Exécution de cliGCP
Compiler cliGCP :
cd /chemin/vers/gomcptest
go build -o bin/cliGCP ./host/cliGCP
Exécuter cliGCP avec les outils de base :
cd /chemin/vers/gomcptest
bin/cliGCP -mcpservers "bin/GlobTool;bin/GrepTool;bin/LS;bin/View;bin/Bash"
Vous devriez voir une interface de chat interactive s’ouvrir, où vous pouvez interagir avec le modèle LLM.
Utilisation de cliGCP
Commandes de Base
Dans l’interface cliGCP, vous pouvez :
- Écrire des messages textuels pour interagir avec le LLM
- Utiliser
/help
pour afficher les commandes disponibles - Utiliser
/exit
ou Ctrl+C pour quitter la session
Exemples d’Interactions
Essayez ces exemples pour tester les capacités de base du système :
Requête simple :
Peux-tu m'expliquer le Protocole de Contexte de Modèle en termes simples ?
Utilisation de l’outil Bash :
Affiche les 5 derniers fichiers modifiés dans le répertoire courant.
Recherche de fichiers :
Trouve tous les fichiers Go dans ce projet.
Lecture et Explication de Code :
Explique ce que fait le fichier main.go dans le répertoire cliGCP.
Utilisation d’Outils Avancés
Dispatch Agent
Pour utiliser l’outil dispatch_agent, qui permet de déléguer des tâches complexes :
bin/cliGCP -mcpservers "bin/GlobTool;bin/GrepTool;bin/LS;bin/View;bin/dispatch_agent -glob-path bin/GlobTool -grep-path bin/GrepTool -ls-path bin/LS -view-path bin/View;bin/Bash"
Maintenant, vous pouvez demander des choses comme :
Trouve tous les fichiers Go qui importent le paquet "context" et résume leur but.
Modification de Fichiers
Pour permettre la modification de fichiers, incluez les outils Edit et Replace :
bin/cliGCP -mcpservers "bin/GlobTool;bin/GrepTool;bin/LS;bin/View;bin/Bash;bin/Edit;bin/Replace"
Vous pouvez maintenant demander :
Crée un nouveau fichier README.md avec une description de base du projet.
Personnalisation de l’Expérience
Pour une expérience plus personnalisée, vous pouvez définir une instruction système spécifique :
export SYSTEM_INSTRUCTION="Tu es un assistant en programmation Go expert qui aide à analyser et améliorer le code."
bin/cliGCP -mcpservers "bin/GlobTool;bin/GrepTool;bin/LS;bin/View;bin/Bash"
Résolution des Problèmes Courants
Erreurs d’Authentification
Si vous rencontrez des erreurs d’authentification :
- Vérifiez que vous avez exécuté
gcloud auth application-default login
- Assurez-vous que votre compte a accès au projet GCP et à l’API Vertex AI
- Vérifiez que la variable d’environnement
GCP_PROJECT
est correctement définie
Erreurs d’Outil
Si les outils ne sont pas trouvés ou ne fonctionnent pas :
- Vérifiez les chemins des outils dans la commande
-mcpservers
- Assurez-vous que tous les outils ont été compilés avec
make tools
- Vérifiez les permissions d’exécution sur les fichiers d’outils
Prochaines Étapes
Maintenant que vous avez configuré et utilisé l’interface cliGCP, vous pouvez :
2 - Guides Pratiques
Guides pratiques pour résoudre des problèmes spécifiques avec gomcptest
Les guides pratiques sont des recettes orientées problème qui vous guident à travers les étapes impliquées dans la résolution de problèmes clés et de cas d’utilisation. Ils sont pragmatiques et orientés vers des objectifs.
Ces guides vous aideront à résoudre des tâches spécifiques et à personnaliser gomcptest pour vos besoins.
2.1 - How to Create a Custom MCP Tool
Build your own Model Context Protocol (MCP) compatible tools
This guide shows you how to create a new custom tool that’s compatible with the Model Context Protocol (MCP) in gomcptest.
Prerequisites
- A working installation of gomcptest
- Go programming knowledge
- Understanding of the MCP protocol basics
mkdir -p tools/YourToolName/cmd
2. Create the README.md file
Create a README.md
in the tool directory with documentation:
touch tools/YourToolName/README.md
Include the following sections:
- Tool description
- Parameters
- Usage notes
- Example
3. Create the main.go file
Create a main.go
file in the cmd directory:
touch tools/YourToolName/cmd/main.go
Here’s a template to start with:
package main
import (
"encoding/json"
"fmt"
"log"
"os"
"github.com/mark3labs/mcp-go"
)
// Define your tool's parameters structure
type Params struct {
// Add your parameters here
// Example:
InputParam string `json:"input_param"`
}
func main() {
server := mcp.NewServer()
// Register your tool function
server.RegisterFunction("YourToolName", func(params json.RawMessage) (any, error) {
var p Params
if err := json.Unmarshal(params, &p); err != nil {
return nil, fmt.Errorf("failed to parse parameters: %w", err)
}
// Implement your tool's logic here
result := doSomethingWithParams(p)
return result, nil
})
if err := server.Run(os.Stdin, os.Stdout); err != nil {
log.Fatalf("Server error: %v", err)
}
}
func doSomethingWithParams(p Params) interface{} {
// Your tool's core functionality
// ...
// Return the result
return map[string]interface{}{
"result": "Your processed result",
}
}
Open the Makefile in the root directory and add your tool:
YourToolName:
go build -o bin/YourToolName tools/YourToolName/cmd/main.go
Also add it to the all
target.
Test the tool directly:
echo '{"name":"YourToolName","params":{"input_param":"test"}}' | ./bin/YourToolName
8. Use with the CLI
Add your tool to the CLI command:
./bin/cliGCP -mcpservers "./GlobTool;./GrepTool;./LS;./View;./YourToolName;./dispatch_agent;./Bash;./Replace"
- Focus on a single, well-defined purpose
- Provide clear error messages
- Include meaningful response formatting
- Implement proper parameter validation
- Handle edge cases gracefully
- Consider adding unit tests in a _test.go file
2.2 - How to Configure the OpenAI-Compatible Server
Customize the OpenAI-compatible server for different use cases
This guide shows you how to configure and customize the OpenAI-compatible server in gomcptest for different use cases.
Prerequisites
- A working installation of gomcptest
- Basic familiarity with the OpenAI server from the tutorial
- Understanding of environment variables and configuration
Environment Variables Configuration
Basic Server Configuration
The OpenAI server can be configured using the following environment variables:
# Server port (default: 8080)
export PORT=8080
# Log level: DEBUG, INFO, WARN, ERROR (default: INFO)
export LOG_LEVEL=INFO
# Directory to store images (required)
export IMAGE_DIR=/path/to/image/directory
GCP Configuration
Configure the Google Cloud Platform integration:
# GCP Project ID (required)
export GCP_PROJECT=your-gcp-project-id
# GCP Region (default: us-central1)
export GCP_REGION=us-central1
# Comma-separated list of Gemini models (default: gemini-1.5-pro,gemini-2.0-flash)
export GEMINI_MODELS=gemini-1.5-pro,gemini-2.0-flash
# Comma-separated list of Imagen models (optional)
export IMAGEN_MODELS=imagen-3.0-generate-002
Setting Up a Production Environment
For a production environment, create a proper systemd service file:
sudo nano /etc/systemd/system/gomcptest-openai.service
Add the following content:
[Unit]
Description=gomcptest OpenAI Server
After=network.target
[Service]
User=yourusername
WorkingDirectory=/path/to/gomcptest/host/openaiserver
ExecStart=/path/to/gomcptest/host/openaiserver/openaiserver -mcpservers "/path/to/gomcptest/bin/GlobTool;/path/to/gomcptest/bin/GrepTool;/path/to/gomcptest/bin/LS;/path/to/gomcptest/bin/View;/path/to/gomcptest/bin/Bash;/path/to/gomcptest/bin/Replace"
Environment=PORT=8080
Environment=LOG_LEVEL=INFO
Environment=IMAGE_DIR=/path/to/image/directory
Environment=GCP_PROJECT=your-gcp-project-id
Environment=GCP_REGION=us-central1
Environment=GEMINI_MODELS=gemini-1.5-pro,gemini-2.0-flash
Restart=on-failure
[Install]
WantedBy=multi-user.target
Then enable and start the service:
sudo systemctl enable gomcptest-openai
sudo systemctl start gomcptest-openai
To add custom MCP tools to the server, include them in the -mcpservers
parameter when starting the server:
go run . -mcpservers "../bin/GlobTool;../bin/GrepTool;../bin/LS;../bin/View;../bin/YourCustomTool;../bin/Bash;../bin/Replace"
Some tools require additional parameters. You can specify these after the tool path:
go run . -mcpservers "../bin/GlobTool;../bin/dispatch_agent -glob-path ../bin/GlobTool -grep-path ../bin/GrepTool -ls-path ../bin/LS -view-path ../bin/View"
API Usage Configuration
Enabling CORS
For web applications, you may need to enable CORS. Add a middleware to the main.go file:
package main
import (
"net/http"
// other imports
)
// CORS middleware
func corsMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
if r.Method == "OPTIONS" {
w.WriteHeader(http.StatusOK)
return
}
next.ServeHTTP(w, r)
})
}
func main() {
// existing code...
http.Handle("/", corsMiddleware(openAIHandler))
// existing code...
}
Setting Rate Limits
Add a simple rate limiting middleware:
package main
import (
"net/http"
"sync"
"time"
// other imports
)
type RateLimiter struct {
requests map[string][]time.Time
maxRequests int
timeWindow time.Duration
mu sync.Mutex
}
func NewRateLimiter(maxRequests int, timeWindow time.Duration) *RateLimiter {
return &RateLimiter{
requests: make(map[string][]time.Time),
maxRequests: maxRequests,
timeWindow: timeWindow,
}
}
func (rl *RateLimiter) Middleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ip := r.RemoteAddr
rl.mu.Lock()
// Clean up old requests
now := time.Now()
if reqs, exists := rl.requests[ip]; exists {
var validReqs []time.Time
for _, req := range reqs {
if now.Sub(req) <= rl.timeWindow {
validReqs = append(validReqs, req)
}
}
rl.requests[ip] = validReqs
}
// Check if rate limit is exceeded
if len(rl.requests[ip]) >= rl.maxRequests {
rl.mu.Unlock()
http.Error(w, "Rate limit exceeded", http.StatusTooManyRequests)
return
}
// Add current request
rl.requests[ip] = append(rl.requests[ip], now)
rl.mu.Unlock()
next.ServeHTTP(w, r)
})
}
func main() {
// existing code...
rateLimiter := NewRateLimiter(10, time.Minute) // 10 requests per minute
http.Handle("/", rateLimiter.Middleware(corsMiddleware(openAIHandler)))
// existing code...
}
Adjusting Memory Usage
For high-load scenarios, adjust Go’s garbage collector:
export GOGC=100 # Default is 100, lower values lead to more frequent GC
Increasing Concurrency
If handling many concurrent requests, adjust the server’s concurrency limits:
package main
import (
"net/http"
// other imports
)
func main() {
// existing code...
server := &http.Server{
Addr: ":" + strconv.Itoa(cfg.Port),
Handler: openAIHandler,
ReadTimeout: 30 * time.Second,
WriteTimeout: 120 * time.Second,
IdleTimeout: 120 * time.Second,
MaxHeaderBytes: 1 << 20,
}
err = server.ListenAndServe()
// existing code...
}
Troubleshooting Common Issues
Debugging Connection Problems
If you’re experiencing connection issues, set the log level to DEBUG:
Common Error Messages
- Failed to create MCP client: Ensure the tool path is correct and the tool is executable
- Failed to load GCP config: Check your GCP environment variables
- Error in LLM request: Verify your GCP credentials and project access
To verify tools are registered correctly, look for log messages like:
INFO server0 Registering command=../bin/GlobTool
INFO server1 Registering command=../bin/GrepTool
2.3 - Comment Configurer l'Interface en Ligne de Commande cliGCP
Personnaliser l’outil cliGCP avec des variables d’environnement et des options de ligne de commande
Ce guide vous montre comment configurer et personnaliser l’interface en ligne de commande cliGCP pour divers cas d’utilisation.
Prérequis
- Une installation fonctionnelle de gomcptest
- Une familiarité de base avec l’outil cliGCP à partir du tutoriel
- Compréhension des variables d’environnement et de la configuration
Arguments de Ligne de Commande
L’outil cliGCP accepte les arguments de ligne de commande suivants :
# Spécifier les serveurs MCP à utiliser (requis)
-mcpservers "outil1;outil2;outil3"
# Exemple avec des arguments d'outil
./cliGCP -mcpservers "./GlobTool;./GrepTool;./dispatch_agent -glob-path ./GlobTool -grep-path ./GrepTool -ls-path ./LS -view-path ./View;./Bash"
Configuration des Variables d’Environnement
Configuration GCP
Configurez l’intégration avec Google Cloud Platform avec ces variables d’environnement :
# ID du projet GCP (requis)
export GCP_PROJECT=votre-id-de-projet-gcp
# Région GCP (par défaut : us-central1)
export GCP_REGION=us-central1
# Liste de modèles Gemini séparés par des virgules (requis)
export GEMINI_MODELS=gemini-1.5-pro,gemini-2.0-flash
# Répertoire pour stocker les images (requis pour la génération d'images)
export IMAGE_DIR=/chemin/vers/repertoire/images
Configuration Avancée
Vous pouvez personnaliser le comportement de l’outil cliGCP avec ces variables d’environnement supplémentaires :
# Définir une instruction système personnalisée pour le modèle
export SYSTEM_INSTRUCTION="Vous êtes un assistant utile spécialisé dans la programmation Go."
# Ajuster la température du modèle (0.0-1.0, la valeur par défaut est 0.2)
# Les valeurs plus basses rendent la sortie plus déterministe, les valeurs plus élevées plus créatives
export MODEL_TEMPERATURE=0.3
# Définir une limite maximale de tokens pour les réponses
export MAX_OUTPUT_TOKENS=2048
Création d’Alias Shell
Pour simplifier l’utilisation, créez des alias shell dans votre .bashrc
ou .zshrc
:
# Ajouter à ~/.bashrc ou ~/.zshrc
alias gpt='cd /chemin/vers/gomcptest/bin && ./cliGCP -mcpservers "./GlobTool;./GrepTool;./LS;./View;./Bash;./Replace"'
# Créer des alias spécialisés pour différentes tâches
alias assistant-code='cd /chemin/vers/gomcptest/bin && GCP_PROJECT=votre-projet GEMINI_MODELS=gemini-2.0-flash ./cliGCP -mcpservers "./GlobTool;./GrepTool;./LS;./View;./Bash;./Replace"'
alias scanner-securite='cd /chemin/vers/gomcptest/bin && SYSTEM_INSTRUCTION="Vous êtes un expert en sécurité concentré sur la recherche de vulnérabilités dans le code" ./cliGCP -mcpservers "./GlobTool;./GrepTool;./LS;./View;./Bash"'
Personnalisation de l’Instruction Système
Pour modifier l’instruction système par défaut, éditez le fichier agent.go
:
// Dans host/cliGCP/cmd/agent.go
genaimodels[model].SystemInstruction = &genai.Content{
Role: "user",
Parts: []genai.Part{
genai.Text("Vous êtes un agent utile avec accès à des outils. " +
"Votre travail est d'aider l'utilisateur en effectuant des tâches à l'aide de ces outils. " +
"Vous ne devez pas inventer d'informations. " +
"Si vous ne savez pas quelque chose, dites-le et expliquez ce que vous auriez besoin de savoir pour aider. " +
"Si aucune indication, utilisez le répertoire de travail actuel qui est " + cwd),
},
}
Création de Configurations Spécifiques aux Tâches
Pour différents cas d’utilisation, vous pouvez créer des scripts de configuration spécialisés :
Assistant de Revue de Code
Créez un fichier appelé reviseur-code.sh
:
#!/bin/bash
export GCP_PROJECT=votre-id-de-projet-gcp
export GCP_REGION=us-central1
export GEMINI_MODELS=gemini-2.0-flash
export IMAGE_DIR=/tmp/images
export SYSTEM_INSTRUCTION="Vous êtes un expert en revue de code. Analysez le code pour détecter les bugs, les problèmes de sécurité et les domaines à améliorer. Concentrez-vous sur la fourniture de commentaires constructifs et d'explications détaillées."
cd /chemin/vers/gomcptest/bin
./cliGCP -mcpservers "./GlobTool;./GrepTool;./LS;./View;./Bash"
Rendez-le exécutable :
chmod +x reviseur-code.sh
Générateur de Documentation
Créez un fichier appelé generateur-doc.sh
:
#!/bin/bash
export GCP_PROJECT=votre-id-de-projet-gcp
export GCP_REGION=us-central1
export GEMINI_MODELS=gemini-2.0-flash
export IMAGE_DIR=/tmp/images
export SYSTEM_INSTRUCTION="Vous êtes un spécialiste de la documentation. Votre tâche est d'aider à créer une documentation claire et complète pour le code. Analysez la structure du code et créez une documentation appropriée en suivant les meilleures pratiques."
cd /chemin/vers/gomcptest/bin
./cliGCP -mcpservers "./GlobTool;./GrepTool;./LS;./View;./Bash;./Replace"
Configurations Avancées d’Outils
Configuration de dispatch_agent
Lorsque vous utilisez l’outil dispatch_agent, vous pouvez configurer son comportement avec des arguments supplémentaires :
./cliGCP -mcpservers "./GlobTool;./GrepTool;./LS;./View;./dispatch_agent -glob-path ./GlobTool -grep-path ./GrepTool -ls-path ./LS -view-path ./View -timeout 30s;./Bash;./Replace"
Création de Combinaisons d’Outils
Vous pouvez créer des combinaisons d’outils spécialisées pour différentes tâches :
# Ensemble d'outils pour le développement web
./cliGCP -mcpservers "./GlobTool -include '*.{html,css,js}';./GrepTool;./LS;./View;./Bash;./Replace"
# Ensemble d'outils pour le développement Go
./cliGCP -mcpservers "./GlobTool -include '*.go';./GrepTool;./LS;./View;./Bash;./Replace"
Résolution des Problèmes Courants
Problèmes de Connexion au Modèle
Si vous rencontrez des difficultés pour vous connecter au modèle Gemini :
- Vérifiez vos identifiants GCP :
gcloud auth application-default print-access-token
- Vérifiez que l’API Vertex AI est activée :
gcloud services list --enabled | grep aiplatform
- Vérifiez que votre projet a accès aux modèles que vous demandez
Échecs d’Exécution d’Outils
Si les outils échouent à s’exécuter :
- Assurez-vous que les chemins des outils sont corrects
- Vérifiez que les outils sont exécutables
- Vérifiez les problèmes de permission dans les répertoires auxquels vous accédez
Pour de meilleures performances :
- Utilisez des modèles d’outils plus spécifiques pour réduire la portée de la recherche
- Envisagez de créer des agents spécialisés pour différentes tâches
- Définissez une température plus basse pour des réponses plus déterministes
2.4 - Comment Utiliser le Serveur OpenAI avec big-AGI
Configurer le serveur compatible OpenAI de gomcptest comme backend pour big-AGI
Ce guide vous montre comment configurer le serveur compatible OpenAI de gomcptest pour fonctionner avec big-AGI, un client web open-source populaire pour les assistants IA.
Prérequis
- Une installation fonctionnelle de gomcptest
- Le serveur compatible OpenAI en cours d’exécution (voir le tutoriel du serveur OpenAI)
- Node.js (version 18.17.0 ou plus récente)
- Git
Pourquoi Utiliser big-AGI avec gomcptest ?
big-AGI fournit une interface web soignée et riche en fonctionnalités pour interagir avec des modèles d’IA. En le connectant au serveur compatible OpenAI de gomcptest, vous obtenez :
- Une interface web professionnelle pour vos interactions avec l’IA
- Support pour les outils/appels de fonction
- Gestion de l’historique des conversations
- Gestion des personas
- Capacités de génération d’images
- Support pour plusieurs utilisateurs
Configuration de big-AGI
Cloner le dépôt big-AGI :
git clone https://github.com/enricoros/big-agi.git
cd big-agi
Installer les dépendances :
Créer un fichier .env.local
pour la configuration :
cp .env.example .env.local
Éditer le fichier .env.local
pour configurer la connexion à votre serveur gomcptest :
# Configuration big-AGI
# URL de votre serveur compatible OpenAI gomcptest
OPENAI_API_HOST=http://localhost:8080
# Il peut s'agir de n'importe quelle chaîne car le serveur gomcptest n'utilise pas de clés API
OPENAI_API_KEY=gomcptest-local-server
# Définissez cette valeur sur true pour activer le fournisseur personnalisé
OPENAI_API_ENABLE_CUSTOM_PROVIDER=true
Démarrer big-AGI :
Ouvrez votre navigateur et accédez à http://localhost:3000
pour accéder à l’interface big-AGI.
Configuration de big-AGI pour Utiliser Vos Modèles
Le serveur compatible OpenAI de gomcptest expose les modèles Google Cloud via une API compatible OpenAI. Dans big-AGI, vous devrez configurer les modèles :
- Ouvrez big-AGI dans votre navigateur
- Cliquez sur l’icône Paramètres (engrenage) en haut à droite
- Allez dans l’onglet Modèles
- Sous “Modèles OpenAI” :
- Cliquez sur “Ajouter des modèles”
- Ajoutez vos modèles par ID (par exemple,
gemini-1.5-pro
, gemini-2.0-flash
) - Définissez la longueur de contexte de manière appropriée (8K-32K selon le modèle)
- Définissez la capacité d’appel de fonction sur
true
pour les modèles qui la prennent en charge
Activation de l’Appel de Fonction avec des Outils
Pour utiliser les outils MCP via l’interface d’appel de fonction de big-AGI :
- Dans big-AGI, cliquez sur l’icône Paramètres
- Allez dans l’onglet Avancé
- Activez “Appel de fonction” dans la section “Fonctionnalités expérimentales”
- Dans une nouvelle conversation, cliquez sur l’onglet “Fonctions” (icône de plugin) dans l’interface de chat
- Les outils disponibles de votre serveur gomcptest devraient être listés
Configuration CORS pour big-AGI
Si vous exécutez big-AGI sur un domaine ou un port différent de celui de votre serveur gomcptest, vous devrez activer CORS côté serveur. Modifiez la configuration du serveur OpenAI :
Créez ou modifiez un middleware CORS pour le serveur OpenAI :
// Middleware CORS avec autorisation d'origine spécifique
func corsMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Autoriser les requêtes provenant de l'origine big-AGI
w.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000")
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
if r.Method == "OPTIONS" {
w.WriteHeader(http.StatusOK)
return
}
next.ServeHTTP(w, r)
})
}
Appliquez ce middleware à vos routes de serveur
Résolution des Problèmes Courants
Modèle Non Trouvé
Si big-AGI signale que les modèles ne peuvent pas être trouvés :
- Vérifiez que votre serveur gomcptest est en cours d’exécution et accessible
- Vérifiez les journaux du serveur pour vous assurer que les modèles sont correctement enregistrés
- Assurez-vous que les ID de modèle dans big-AGI correspondent exactement à ceux fournis par votre serveur gomcptest
L’Appel de Fonction Ne Fonctionne Pas
Si les outils ne fonctionnent pas correctement :
- Assurez-vous que les outils sont correctement enregistrés dans votre serveur gomcptest
- Vérifiez que l’appel de fonction est activé dans les paramètres de big-AGI
- Vérifiez que le modèle que vous utilisez prend en charge l’appel de fonction
Problèmes de Connexion
Si big-AGI ne peut pas se connecter à votre serveur :
- Vérifiez la valeur
OPENAI_API_HOST
dans votre fichier .env.local
- Recherchez des problèmes CORS dans la console de développement de votre navigateur
- Assurez-vous que votre serveur est en cours d’exécution et accessible depuis le navigateur
Déploiement en Production
Pour une utilisation en production, considérez :
Sécurisation de votre API :
- Ajoutez une authentification appropriée à votre serveur OpenAI gomcptest
- Mettez à jour la
OPENAI_API_KEY
dans big-AGI en conséquence
Déploiement de big-AGI :
Mise en place de HTTPS :
- Pour la production, big-AGI et votre serveur gomcptest devraient utiliser HTTPS
- Envisagez d’utiliser un proxy inverse comme Nginx avec des certificats Let’s Encrypt
Exemple : Interface de Chat Basique
Une fois que tout est configuré, vous pouvez utiliser l’interface de big-AGI pour interagir avec vos modèles d’IA :
- Commencez une nouvelle conversation
- Sélectionnez votre modèle dans le menu déroulant des modèles (par exemple,
gemini-1.5-pro
) - Activez l’appel de fonction si vous souhaitez utiliser des outils
- Commencez à discuter avec votre assistant IA, propulsé par gomcptest
L’interface big-AGI offre une expérience beaucoup plus riche qu’une interface en ligne de commande, avec des fonctionnalités comme l’historique des conversations, le rendu markdown, la mise en évidence du code, et plus encore.
3 - Référence
Documentation technique de référence pour les composants et outils de gomcptest
Les guides de référence sont des descriptions techniques des mécanismes et de leur fonctionnement. Ils décrivent en détail comment les choses fonctionnent et sont précis et complets.
Cette section fournit une documentation technique détaillée sur les composants, les API, les paramètres et les outils de gomcptest.
3.1 - Tools Reference
Comprehensive reference of all available MCP-compatible tools
This reference guide documents all available MCP-compatible tools in the gomcptest project, their parameters, and response formats.
Bash
Executes bash commands in a persistent shell session.
Parameters
Parameter | Type | Required | Description |
---|
command | string | Yes | The command to execute |
timeout | number | No | Timeout in milliseconds (max 600000) |
Response
The tool returns the command output as a string.
Banned Commands
For security reasons, the following commands are banned:
alias
, curl
, curlie
, wget
, axel
, aria2c
, nc
, telnet
, lynx
, w3m
, links
, httpie
, xh
, http-prompt
, chrome
, firefox
, safari
Edit
Modifies file content by replacing specified text.
Parameters
Parameter | Type | Required | Description |
---|
file_path | string | Yes | Absolute path to the file to modify |
old_string | string | Yes | Text to replace |
new_string | string | Yes | Replacement text |
Response
Confirmation message with the updated content.
Finds files matching glob patterns with metadata.
Parameters
Parameter | Type | Required | Description |
---|
pattern | string | Yes | Glob pattern to match files against |
path | string | No | Directory to search in (default: current directory) |
exclude | string | No | Glob pattern to exclude from results |
limit | number | No | Maximum number of results to return |
absolute | boolean | No | Return absolute paths instead of relative |
Response
A list of matching files with metadata including path, size, modification time, and permissions.
Searches file contents using regular expressions.
Parameters
Parameter | Type | Required | Description |
---|
pattern | string | Yes | Regular expression pattern to search for |
path | string | No | Directory to search in (default: current directory) |
include | string | No | File pattern to include in the search |
Response
A list of matches with file paths, line numbers, and matched content.
LS
Lists files and directories in a given path.
Parameters
Parameter | Type | Required | Description |
---|
path | string | Yes | Absolute path to the directory to list |
ignore | array | No | List of glob patterns to ignore |
Response
A list of files and directories with metadata.
Replace
Completely replaces a file’s contents.
Parameters
Parameter | Type | Required | Description |
---|
file_path | string | Yes | Absolute path to the file to write |
content | string | Yes | Content to write to the file |
Response
Confirmation message with the content written.
View
Reads file contents with optional line range.
Parameters
Parameter | Type | Required | Description |
---|
file_path | string | Yes | Absolute path to the file to read |
offset | number | No | Line number to start reading from |
limit | number | No | Number of lines to read |
Response
The file content with line numbers in cat -n format.
dispatch_agent
Launches a new agent with access to specific tools.
Parameters
Parameter | Type | Required | Description |
---|
prompt | string | Yes | The task for the agent to perform |
Response
The result of the agent’s task execution.
Most tools return JSON responses with the following structure:
{
"result": "...", // String result or
"results": [...], // Array of results
"error": "..." // Error message if applicable
}
Error Handling
All tools follow a consistent error reporting format:
{
"error": "Error message",
"code": "ERROR_CODE"
}
Common error codes include:
INVALID_PARAMS
: Parameters are missing or invalidEXECUTION_ERROR
: Error executing the requested operationPERMISSION_DENIED
: Permission issuesTIMEOUT
: Operation timed out
3.2 - OpenAI-Compatible Server Reference
Technical documentation of the server’s architecture, API endpoints, and configuration
This reference guide provides detailed technical documentation on the OpenAI-compatible server’s architecture, API endpoints, configuration options, and integration details with Vertex AI.
Overview
The OpenAI-compatible server is a core component of the gomcptest system. It implements an API surface compatible with the OpenAI Chat Completions API while connecting to Google’s Vertex AI for model inference. The server acts as a bridge between clients (like the cliGCP tool) and the underlying LLM models, handling session management, function calling, and tool execution.
API Endpoints
POST /v1/chat/completions
The primary endpoint that mimics the OpenAI Chat Completions API.
Request
{
"model": "gemini-pro",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello, world!"}
],
"stream": true,
"max_tokens": 1024,
"temperature": 0.7,
"functions": [
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
}
},
"required": ["location"]
}
}
]
}
Response (non-streamed)
{
"id": "chatcmpl-123456789",
"object": "chat.completion",
"created": 1677858242,
"model": "gemini-pro",
"choices": [
{
"message": {
"role": "assistant",
"content": "Hello! How can I help you today?"
},
"finish_reason": "stop",
"index": 0
}
],
"usage": {
"prompt_tokens": 13,
"completion_tokens": 7,
"total_tokens": 20
}
}
Response (streamed)
When stream
is set to true
, the server returns a stream of SSE (Server-Sent Events) with partial responses:
data: {"id":"chatcmpl-123456789","object":"chat.completion.chunk","created":1677858242,"model":"gemini-pro","choices":[{"delta":{"role":"assistant"},"index":0,"finish_reason":null}]}
data: {"id":"chatcmpl-123456789","object":"chat.completion.chunk","created":1677858242,"model":"gemini-pro","choices":[{"delta":{"content":"Hello"},"index":0,"finish_reason":null}]}
data: {"id":"chatcmpl-123456789","object":"chat.completion.chunk","created":1677858242,"model":"gemini-pro","choices":[{"delta":{"content":"!"},"index":0,"finish_reason":null}]}
data: {"id":"chatcmpl-123456789","object":"chat.completion.chunk","created":1677858242,"model":"gemini-pro","choices":[{"delta":{"content":" How"},"index":0,"finish_reason":null}]}
data: {"id":"chatcmpl-123456789","object":"chat.completion.chunk","created":1677858242,"model":"gemini-pro","choices":[{"delta":{},"index":0,"finish_reason":"stop"}]}
data: [DONE]
Supported Features
Models
The server supports the following Vertex AI models:
gemini-pro
gemini-pro-vision
Parameters
Parameter | Type | Default | Description |
---|
model | string | gemini-pro | The model to use for generating completions |
messages | array | Required | An array of messages in the conversation |
stream | boolean | false | Whether to stream the response or not |
max_tokens | integer | 1024 | Maximum number of tokens to generate |
temperature | number | 0.7 | Sampling temperature (0-1) |
functions | array | [] | Function definitions the model can call |
function_call | string or object | auto | Controls function calling behavior |
Function Calling
The server supports function calling similar to the OpenAI API. When the model identifies that a function should be called, the server:
- Parses the function call parameters
- Locates the appropriate MCP tool
- Executes the tool with the provided parameters
- Returns the result to the model for further processing
Architecture
The server consists of these key components:
HTTP Server
A standard Go HTTP server that handles incoming requests and routes them to the appropriate handlers.
Session Manager
Maintains chat history and context for ongoing conversations. Ensures that the model has necessary context when generating responses.
Vertex AI Client
Communicates with Google’s Vertex AI API to:
- Send prompt templates to the model
- Receive completions from the model
- Stream partial responses back to the client
Manages the available MCP tools and handles:
- Tool registration and discovery
- Parameter validation
- Tool execution
- Response processing
Response Streamer
Handles streaming responses to clients in SSE format, ensuring low latency and progressive rendering.
Configuration
The server can be configured using environment variables:
Variable | Description | Default |
---|
GOOGLE_APPLICATION_CREDENTIALS | Path to Google Cloud credentials file | - |
GOOGLE_CLOUD_PROJECT | Google Cloud project ID | - |
GOOGLE_CLOUD_LOCATION | Google Cloud region | us-central1 |
PORT | HTTP server port | 8080 |
MCP_TOOLS_PATH | Path to MCP tools | ./tools |
DEFAULT_MODEL | Default model to use | gemini-pro |
MAX_HISTORY_TOKENS | Maximum tokens to keep in history | 4000 |
REQUEST_TIMEOUT | Request timeout in seconds | 300 |
Error Handling
The server implements consistent error handling with HTTP status codes:
Status Code | Description |
---|
400 | Bad Request - Invalid parameters or request format |
401 | Unauthorized - Missing or invalid authentication |
404 | Not Found - Model or endpoint not found |
429 | Too Many Requests - Rate limit exceeded |
500 | Internal Server Error - Server-side error |
503 | Service Unavailable - Vertex AI service unavailable |
Error responses follow this format:
{
"error": {
"message": "Detailed error message",
"type": "error_type",
"param": "parameter_name",
"code": "error_code"
}
}
Security Considerations
The server does not implement authentication or authorization by default. In production deployments, consider:
- Running behind a reverse proxy with authentication
- Using API keys or OAuth2
- Implementing rate limiting
- Setting up proper firewall rules
Examples
Basic Usage
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/credentials.json"
export GOOGLE_CLOUD_PROJECT="your-project-id"
./bin/openaiserver
export MCP_TOOLS_PATH="/path/to/tools"
./bin/openaiserver
Client Connection
curl -X POST http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-pro",
"messages": [{"role": "user", "content": "Hello, world!"}]
}'
Limitations
- Single chat session support only
- No persistent storage of conversations
- Limited authentication options
- Basic rate limiting
- Limited model parameter controls
Advanced Usage
Tools are automatically registered when the server starts. To register custom tools:
- Place executable files in the
MCP_TOOLS_PATH
directory - Ensure they follow the MCP protocol
- Restart the server
Streaming with Function Calls
When using function calling with streaming, the stream will pause during tool execution and resume with the tool results included in the context.
3.3 - cliGCP Reference
Detailed reference of the cliGCP command-line interface
This reference guide provides detailed documentation of the cliGCP command structure, components, parameters, interaction patterns, and internal states.
Overview
The cliGCP (Command Line Interface for Google Cloud Platform) is a command-line tool that provides a chat interface similar to tools like “Claude Code” or “ChatGPT”. It connects to an OpenAI-compatible server and allows users to interact with LLMs and MCP tools through a conversational interface.
Command Structure
Basic Usage
Flags
Flag | Description | Default |
---|
-mcpservers | Comma-separated list of MCP tool paths | "" |
-server | URL of the OpenAI-compatible server | “http://localhost:8080” |
-model | LLM model to use | “gemini-pro” |
-prompt | Initial system prompt | “You are a helpful assistant.” |
-temp | Temperature setting for model responses | 0.7 |
-maxtokens | Maximum number of tokens in responses | 1024 |
-history | File path to store/load chat history | "" |
-verbose | Enable verbose logging | false |
Example
./bin/cliGCP -mcpservers "./bin/Bash;./bin/View;./bin/GlobTool;./bin/GrepTool;./bin/LS;./bin/Edit;./bin/Replace;./bin/dispatch_agent" -server "http://localhost:8080" -model "gemini-pro" -prompt "You are a helpful command-line assistant."
Components
Chat Interface
The chat interface provides:
- Text-based input for user messages
- Markdown rendering of AI responses
- Real-time streaming of responses
- Input history and navigation
- Multi-line input support
The tool manager:
- Loads and initializes MCP tools
- Registers tools with the OpenAI-compatible server
- Routes function calls to appropriate tools
- Processes tool results
Session Manager
The session manager:
- Maintains chat history within the session
- Handles context windowing for long conversations
- Optionally persists conversations to disk
- Provides conversation resume functionality
Interaction Patterns
Basic Chat
The most common interaction pattern is a simple turn-based chat:
- User enters a message
- Model generates and streams a response
- Chat history is updated
- User enters the next message
Function Calling
When the model determines a function should be called:
- User enters a message requesting an action (e.g., “List files in /tmp”)
- Model analyzes the request and generates a function call
- cliGCP intercepts the function call and routes it to the appropriate tool
- Tool executes and returns results
- Results are injected back into the model’s context
- Model continues generating a response that incorporates the tool results
- The complete response is shown to the user
Multi-turn Function Calling
For complex tasks, the model may make multiple function calls:
- User requests a complex task (e.g., “Find all Python files containing ’error’”)
- Model makes a function call to list directories
- Tool returns directory listing
- Model makes additional function calls to search file contents
- Each tool result is returned to the model
- Model synthesizes the information and responds to the user
Technical Details
Messages between cliGCP and the server follow the OpenAI Chat API format:
{
"role": "user"|"assistant"|"system",
"content": "Message text"
}
Function calls use this format:
{
"role": "assistant",
"content": null,
"function_call": {
"name": "function_name",
"arguments": "{\"arg1\":\"value1\",\"arg2\":\"value2\"}"
}
}
Tools are registered with the server using JSONSchema:
{
"name": "tool_name",
"description": "Tool description",
"parameters": {
"type": "object",
"properties": {
"param1": {
"type": "string",
"description": "Parameter description"
}
},
"required": ["param1"]
}
}
Error Handling
The CLI implements robust error handling for:
- Connection issues with the server
- Tool execution failures
- Model errors
- Input validation
Error messages are displayed to the user with context and possible solutions.
Configuration
Environment Variables
Variable | Description | Default |
---|
OPENAI_API_URL | URL of the OpenAI-compatible server | http://localhost:8080 |
OPENAI_API_KEY | API key for authentication (if required) | "" |
MCP_TOOLS_PATH | Path to MCP tools (overridden by -mcpservers) | “./tools” |
DEFAULT_MODEL | Default model to use | “gemini-pro” |
SYSTEM_PROMPT | Default system prompt | “You are a helpful assistant.” |
Configuration File
You can create a ~/.cligcp.json
configuration file with these settings:
{
"server": "http://localhost:8080",
"model": "gemini-pro",
"prompt": "You are a helpful assistant.",
"temperature": 0.7,
"max_tokens": 1024,
"tools": [
"./bin/Bash",
"./bin/View",
"./bin/GlobTool"
]
}
Advanced Usage
Persistent History
To save and load chat history:
./bin/cliGCP -history ./chat_history.json
Custom System Prompt
To set a specific system prompt:
./bin/cliGCP -prompt "You are a Linux command-line expert that helps users with shell commands and filesystem operations."
Combining with Shell Scripts
You can use cliGCP in shell scripts by piping input and capturing output:
echo "Explain how to find large files in Linux" | ./bin/cliGCP -noninteractive
Limitations
- Single conversation per instance
- Limited rendering capabilities for complex markdown
- No built-in authentication management
- Limited offline functionality
- No multi-modal input support (e.g., images)
Troubleshooting
Common Issues
Issue | Possible Solution |
---|
Connection refused | Ensure the OpenAI server is running |
Tool not found | Check tool paths and permissions |
Out of memory | Reduce history size or split conversation |
Slow responses | Check network connection and server load |
Diagnostic Mode
Run with the -verbose
flag to enable detailed logging:
This will show all API requests, responses, and tool interactions, which can be helpful for debugging.
4 - 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.
4.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.
4.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.