Spaces:
Running
Running
Ali Hmaou
commited on
Commit
·
b33c1fc
1
Parent(s):
17d1159
Version 1.93RC
Browse files- README.md +97 -48
- src/mcp_server/server.py +62 -22
README.md
CHANGED
|
@@ -1,86 +1,135 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
emoji:
|
| 4 |
colorFrom: purple
|
| 5 |
colorTo: pink
|
| 6 |
sdk: gradio
|
| 7 |
-
sdk_version:
|
| 8 |
-
app_file:
|
| 9 |
pinned: false
|
|
|
|
|
|
|
| 10 |
---
|
| 11 |
|
| 12 |
-
# 🏭 Méta-
|
| 13 |
|
| 14 |
-
|
| 15 |
|
| 16 |
-
|
| 17 |
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
|
| 20 |
-
```mermaid
|
| 21 |
-
graph TD
|
| 22 |
-
User[Utilisateur / Agent] -->|1. Décrit l'outil| Meta[🏭 Méta-MCP Server]
|
| 23 |
-
Meta -->|2. Génère le code| LLM[LLM (Qwen/Kimi)]
|
| 24 |
-
Meta -->|3. Valide le code| Logic[Validateur Logique]
|
| 25 |
-
Meta -->|4. Déploie| HF[🤗 Hugging Face Space]
|
| 26 |
-
HF -->|5. Expose| NewMCP[Nouveau Serveur MCP]
|
| 27 |
-
NewMCP -->|6. Utilise| User
|
| 28 |
-
```
|
| 29 |
|
| 30 |
## 🚀 Fonctionnalités Clés
|
| 31 |
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
|
| 38 |
-
## 🛠️
|
| 39 |
|
| 40 |
-
### 1. Installation Locale
|
| 41 |
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
|
| 50 |
### 2. Utilisation avec Claude Desktop
|
| 51 |
|
| 52 |
-
Pour
|
| 53 |
|
| 54 |
```json
|
| 55 |
{
|
| 56 |
"mcpServers": {
|
| 57 |
-
"
|
| 58 |
"command": "npx",
|
| 59 |
"args": [
|
| 60 |
"-y",
|
| 61 |
-
"@modelcontextprotocol/server-sse
|
| 62 |
-
"
|
| 63 |
-
"http://localhost:7860/gradio_api/mcp/?tools=step_2_logic_definition,step_1_initialisation_and_proposal,step_3_deployment,step_0_configuration,expert_step1_propose_implementation,expert_step2_define_logic"
|
| 64 |
]
|
| 65 |
}
|
| 66 |
}
|
| 67 |
}
|
| 68 |
```
|
| 69 |
|
| 70 |
-
> **Note** :
|
|
|
|
|
|
|
| 71 |
|
| 72 |
-
|
| 73 |
|
| 74 |
-
|
| 75 |
-
2. **Onglet Logique** : L'IA propose une implémentation. Vérifiez les `requirements` (ex: `requests`) et le code. Cliquez sur "Valider".
|
| 76 |
-
3. **Onglet Déploiement** : Cliquez sur "Déployer". Récupérez l'URL de votre nouveau serveur MCP.
|
| 77 |
-
4. **Profit** : Ajoutez ce nouveau serveur à Claude et profitez de votre nouvel outil !
|
| 78 |
|
| 79 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
|
| 81 |
-
|
| 82 |
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: MCEPTION - Meta MCP Factory
|
| 3 |
+
emoji: 🏭
|
| 4 |
colorFrom: purple
|
| 5 |
colorTo: pink
|
| 6 |
sdk: gradio
|
| 7 |
+
sdk_version: 5.9.1
|
| 8 |
+
app_file: src/mcp_server/server.py
|
| 9 |
pinned: false
|
| 10 |
+
license: mit
|
| 11 |
+
short_description: Create and deploy MCP servers using natural language.
|
| 12 |
---
|
| 13 |
|
| 14 |
+
# 🏭 MCEPTION : La Méta-Factory de Serveurs MCP
|
| 15 |
|
| 16 |
+
**MCEPTION** est un serveur MCP (Model Context Protocol) propulsé par **Gradio** qui permet de générer, tester et déployer d'autres serveurs MCP à la volée.
|
| 17 |
|
| 18 |
+
C'est un "Serveur MCP créateur de Serveurs MCP". Il permet à des agents IA (comme Claude, ChatGPT ou des agents autonomes `smolagents`) ou à des utilisateurs humains de créer de nouveaux serveurs MCP et outils ("Tools") associés personnalisés et de les déployer instantanément sur Hugging Face Spaces, étendant ainsi les capacités de leurs agents de manière récursive.
|
| 19 |
|
| 20 |
+
## 🌟 Pourquoi MCEPTION ?
|
| 21 |
+
|
| 22 |
+
Avec la généralisation des outils conversationnels et l'avènement annoncé de l'internet génératif, il devient essentiel pour les entreprises et les administrations de maîtriser les informations communiquées au public au travers de ces IA.
|
| 23 |
+
|
| 24 |
+
Le protocole MCP combiné aux capacités de raisonnement des agents LLM offre aussi des possibilités quelques fois très difficiles à imaginer sans les implémenter et les tester. Il peut aussi parfois être décevant et nécessiter de nombreux réglages et ajustements. Si le protocole MCP est simple dans sa conception, il nécessite beaucoup de précaution pour qu'il fonctionne réellement bien.
|
| 25 |
+
|
| 26 |
+
MCEPTION répond à un besoin actuel, celui de fournir aux entreprises et aux administrations des outils, leur permettant de tester l'impact du protocole MCP pour leur activité.
|
| 27 |
+
|
| 28 |
+
Cet outil a ainsi été pensé de manière à profiter de la puissance de la structure agentique qui appelle le MCP (en général au travers de modèles top-tier), combiné aux LLM spécifiques tels que GPT OSS ou Kimi K2 thinking pour un codage réactif en phase de conception des outils.
|
| 29 |
+
|
| 30 |
+
Avec MCEPTION, les organisations peuvent directement essayer le MCP en essayant, par exemple, d'encapsuler des API existantes ou de créer des serveurs autour de fichiers de données, voir d'exposer des règles de gestion directement codées et permettant aux agents de répondre de façon déterministe et maîtrisée sur les sujets qui les concernent.
|
| 31 |
+
|
| 32 |
+
## Un workflow intuitif pour les humains et pour les IA
|
| 33 |
+
|
| 34 |
+
L'outil a été conçu de manière à offrir un workflow de création intuitif que ce soit pour les humains ou pour les agents d'intelligence artificielle. Il permet notamment de tester directement au travers d'une instance smolagents le fonctionnement du serveur généré, de voir les outils s'afficher et de les essayer.
|
| 35 |
+
|
| 36 |
+
L'environnement idéal pour tester les serveurs MCP générés restent [Hugging Chat](https://huggingface.co/chat/) pour les modèles Open source grâce au reload à chaud des serveurs MCP et de leurs outils.
|
| 37 |
+
|
| 38 |
+
Côté outils propriétaires, le client local Claude fonctionne très bien et pour intégrer les les outils d'Claude sont fournis par l'application.
|
| 39 |
+
|
| 40 |
+
## Merci Gradio
|
| 41 |
+
|
| 42 |
+
Ce projet illustre les capacités impressionnantes de Gradio à exposer des services MCP, il s'articule parfaitement avec l'infrastructure Spaces de Hugging Face, qui est très bien complété aujourd'hui par les services d'inférence, au travers de l'API d'inférence et de Hugging Chat.
|
| 43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
|
| 45 |
## 🚀 Fonctionnalités Clés
|
| 46 |
|
| 47 |
+
* **Initialisation en Langage Naturel** : Décrivez simplement l'outil : *"Je veux un outil qui me donne la météo de Paris"* ou *"Crée un convertisseur de devises"*.
|
| 48 |
+
* **Génération de Code Intelligente** : Utilise des LLMs performants (GPT OSS, Kimi K2 Thinking) via les providers d'inférence routés par HuggingFace (Together AI, Hyperbolic) pour écrire le code Python.
|
| 49 |
+
* **Sandbox & Validation** : Vérifiez et modifiez le code proposé avant le déploiement.
|
| 50 |
+
* **Déploiement Automatisé sur HF Spaces** : En un clic (ou un appel d'outil), votre serveur MCP est en ligne, hébergé gratuitement sur Hugging Face Spaces.
|
| 51 |
+
* **Compatible MCP Natif** : Les outils générés sont immédiatement utilisables via le protocole MCP exposé nativement par Gradio 6.
|
| 52 |
|
| 53 |
+
## 🛠️ Architecture
|
| 54 |
|
|
|
|
| 55 |
|
| 56 |
+
|
| 57 |
+
## 📚 Installation & Démarrage
|
| 58 |
+
|
| 59 |
+
### 1. Déploiement Rapide sur Hugging Face Spaces
|
| 60 |
+
|
| 61 |
+
C'est la méthode recommandée pour utiliser MCEPTION sans installation locale.
|
| 62 |
+
|
| 63 |
+
1. **Dupliquer le Space** :
|
| 64 |
+
* Cliquez sur le menu (trois points) en haut à droite de cette page, puis sur **"Duplicate this Space"**.
|
| 65 |
+
* Choisissez un nom pour votre Space et validez.
|
| 66 |
+
|
| 67 |
+
2. **Configuration du Token (Indispensable)** :
|
| 68 |
+
* Une fois le Space dupliqué, allez dans l'onglet **Settings** de votre nouveau Space.
|
| 69 |
+
* Descendez à la section **Variables and secrets**.
|
| 70 |
+
* Cliquez sur **New secret**.
|
| 71 |
+
* **Name** : `HF_TOKEN`
|
| 72 |
+
* **Value** : Votre token Hugging Face (assurez-vous qu'il a les permissions **WRITE**). Vous pouvez en créer un ici : [https://huggingface.co/settings/tokens](https://huggingface.co/settings/tokens).
|
| 73 |
+
|
| 74 |
+
*Le Space redémarrera automatiquement avec vos droits, prêt à créer de nouveaux Spaces pour vous !*
|
| 75 |
|
| 76 |
### 2. Utilisation avec Claude Desktop
|
| 77 |
|
| 78 |
+
Pour transformer votre Claude Desktop en "usine à outils", ajoutez la configuration suivante à votre fichier `claude_desktop_config.json` :
|
| 79 |
|
| 80 |
```json
|
| 81 |
{
|
| 82 |
"mcpServers": {
|
| 83 |
+
"mception": {
|
| 84 |
"command": "npx",
|
| 85 |
"args": [
|
| 86 |
"-y",
|
| 87 |
+
"@modelcontextprotocol/server-sse",
|
| 88 |
+
"http://127.0.0.1:7860/gradio_api/mcp/sse"
|
|
|
|
| 89 |
]
|
| 90 |
}
|
| 91 |
}
|
| 92 |
}
|
| 93 |
```
|
| 94 |
|
| 95 |
+
> **Note** : Si vous utilisez MCEPTION depuis un Space Hugging Face public, remplacez l'URL locale par l'URL de votre Space (ex: `https://alihmaou-metamcp-proto.hf.space/gradio_api/mcp/sse`).
|
| 96 |
+
|
| 97 |
+
## 🤖 Guide pour les Agents (API)
|
| 98 |
|
| 99 |
+
MCEPTION expose une suite d'outils MCP permettant à un agent autonome de gérer tout le cycle de vie de création d'outil.
|
| 100 |
|
| 101 |
+
### Workflow Typique
|
|
|
|
|
|
|
|
|
|
| 102 |
|
| 103 |
+
1. **Configuration** (Optionnel) : `step_0_configuration` pour définir le user HF ou le token si non présent dans l'environnement.
|
| 104 |
+
2. **Conception** : `expert_step1_propose_implementation` ou `step_1_initialisation_and_proposal`. L'agent soumet une description, le serveur renvoie un `draft_id` et une proposition de code.
|
| 105 |
+
3. **Validation** : `expert_step2_define_logic`. L'agent confirme le code et les dépendances.
|
| 106 |
+
4. **Déploiement** : `step_3_deployment`. Le serveur crée le Space Hugging Face.
|
| 107 |
+
5. **Utilisation** : L'agent reçoit la config pour se connecter à ce nouveau serveur.
|
| 108 |
|
| 109 |
+
### Liste des Outils Exposés
|
| 110 |
|
| 111 |
+
| Outil | Description |
|
| 112 |
+
| :--- | :--- |
|
| 113 |
+
| `step_0_configuration` | Configure l'environnement (User HF, Token, Default Space). |
|
| 114 |
+
| `step_1_initialisation_and_proposal` | (UI+API) Initialise un projet et propose une implémentation via LLM. |
|
| 115 |
+
| `step_2_logic_definition` | (UI+API) Valide et enregistre le code Python de l'outil. |
|
| 116 |
+
| `step_3_deployment` | (UI+API) Déploie l'outil sur un Space Hugging Face. |
|
| 117 |
+
| `expert_step1_propose_implementation` | (API Expert) Génère juste le code sans état UI (utile pour itérer). |
|
| 118 |
+
| `expert_step2_define_logic` | (API Expert) Définit la logique avec des entrées JSON complexes. |
|
| 119 |
+
| `util_delete_tool` | Supprime un outil d'un Space existant. |
|
| 120 |
+
| `util_get_tool_code` | Récupère le code source d'un outil existant pour inspection. |
|
| 121 |
+
|
| 122 |
+
## 💡 Exemple de Prompt pour Claude
|
| 123 |
+
|
| 124 |
+
Une fois MCEPTION connecté à Claude, vous pouvez lui dire :
|
| 125 |
+
|
| 126 |
+
> "Crée-moi un outil qui permet de récupérer le prix actuel du Bitcoin en utilisant l'API CoinGecko, et déploie-le sur mon espace Hugging Face."
|
| 127 |
+
|
| 128 |
+
Claude va alors :
|
| 129 |
+
1. Appeler `step_1` pour générer le code Python (`requests.get(...)`).
|
| 130 |
+
2. Vous demander confirmation ou appeler `step_2` pour valider.
|
| 131 |
+
3. Appeler `step_3` pour déployer.
|
| 132 |
+
4. Vous donner la config pour utiliser ce nouvel outil "Bitcoin Price" immédiatement !
|
| 133 |
+
|
| 134 |
+
---
|
| 135 |
+
*Fait avec ❤️, Python, Gradio et beaucoup d'Agents.*
|
src/mcp_server/server.py
CHANGED
|
@@ -275,8 +275,8 @@ def util_get_tool_code(space_name: str, tool_name: str):
|
|
| 275 |
|
| 276 |
# --- Construction de l'interface ---
|
| 277 |
|
| 278 |
-
with gr.Blocks(title="
|
| 279 |
-
gr.Markdown("# 🏭
|
| 280 |
gr.Markdown("Ce serveur permet de créer et déployer d'autres serveurs MCP sur Hugging Face Spaces.")
|
| 281 |
|
| 282 |
with gr.Tab("0. Setup & How-to"):
|
|
@@ -316,27 +316,66 @@ with gr.Blocks(title="MCEPTION") as demo:
|
|
| 316 |
config_status = gr.Markdown("")
|
| 317 |
btn_save_config.click(save_config_ui, inputs=[hf_user_profile, default_mcp_space_name, hf_token_input], outputs=config_status)
|
| 318 |
|
| 319 |
-
gr.Markdown("## Comment utiliser
|
| 320 |
-
|
| 321 |
-
|
| 322 |
-
|
| 323 |
-
|
| 324 |
-
|
| 325 |
-
|
| 326 |
-
|
| 327 |
-
|
| 328 |
-
|
| 329 |
-
|
| 330 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 331 |
|
| 332 |
-
|
| 333 |
-
|
| 334 |
-
|
| 335 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 336 |
|
| 337 |
-
### 4. Test
|
| 338 |
-
* Utilisez l'onglet **4. Playground** pour tester votre nouvel outil après son initialisation (environ 1 minute).
|
| 339 |
-
""")
|
| 340 |
|
| 341 |
with gr.Tab("1. Initialisation"):
|
| 342 |
gr.Markdown("Commencez par initialiser un nouveau projet.")
|
|
@@ -530,7 +569,8 @@ with gr.Blocks(title="MCEPTION") as demo:
|
|
| 530 |
except Exception as e:
|
| 531 |
readme_content = f"Impossible de charger le README.md : {str(e)}"
|
| 532 |
|
| 533 |
-
gr.
|
|
|
|
| 534 |
|
| 535 |
# Câblage différé du déploiement (pour avoir accès à mcp_url_input défini dans le Tab 4)
|
| 536 |
btn_deploy.click(
|
|
|
|
| 275 |
|
| 276 |
# --- Construction de l'interface ---
|
| 277 |
|
| 278 |
+
with gr.Blocks(title="MCePtion") as demo:
|
| 279 |
+
gr.Markdown("# 🏭 MCePtion is the MCP of your MCPs")
|
| 280 |
gr.Markdown("Ce serveur permet de créer et déployer d'autres serveurs MCP sur Hugging Face Spaces.")
|
| 281 |
|
| 282 |
with gr.Tab("0. Setup & How-to"):
|
|
|
|
| 316 |
config_status = gr.Markdown("")
|
| 317 |
btn_save_config.click(save_config_ui, inputs=[hf_user_profile, default_mcp_space_name, hf_token_input], outputs=config_status)
|
| 318 |
|
| 319 |
+
gr.Markdown("## Comment utiliser ce serveur MCePtion ?")
|
| 320 |
+
|
| 321 |
+
with gr.Row():
|
| 322 |
+
with gr.Column("Guide Utilisateur"):
|
| 323 |
+
gr.Markdown("""
|
| 324 |
+
## Guide d'utilisation de l'interface humaine
|
| 325 |
+
|
| 326 |
+
### 1. Création d'un Outil
|
| 327 |
+
* Allez dans l'onglet **1. Initialisation**.
|
| 328 |
+
* Donnez un nom et décrivez ce que vous voulez (ou collez un Swagger).
|
| 329 |
+
* Cliquez sur "Initialiser & Générer".
|
| 330 |
+
|
| 331 |
+
### 2. Validation du Code
|
| 332 |
+
* Allez dans l'onglet **2. Précision de la logique**.
|
| 333 |
+
* Vérifiez le code Python généré et les dépendances.
|
| 334 |
+
* Cliquez sur "Générer le code" pour valider.
|
| 335 |
+
|
| 336 |
+
### 3. Déploiement
|
| 337 |
+
* Allez dans l'onglet **3. Déploiement**.
|
| 338 |
+
* Choisissez "New" pour créer un nouveau Space ou "Existing" pour ajouter à une Toolbox.
|
| 339 |
+
* Cliquez sur "Déployer".
|
| 340 |
+
|
| 341 |
+
### 4. Test
|
| 342 |
+
* Utilisez l'onglet **4. Playground** pour tester votre nouvel outil après son initialisation (environ 1 minute).
|
| 343 |
+
""")
|
| 344 |
|
| 345 |
+
with gr.Column():
|
| 346 |
+
# Calcul dynamique des URLs pour affichage
|
| 347 |
+
_c_space_id = os.environ.get("SPACE_ID", None)
|
| 348 |
+
_c_space_host = os.environ.get("SPACE_HOST", "localhost:7860")
|
| 349 |
+
|
| 350 |
+
if _c_space_id:
|
| 351 |
+
_c_space_url = f"https://huggingface.co/spaces/{_c_space_id}"
|
| 352 |
+
_c_mcp_url = f"https://{_c_space_host}/gradio_api/mcp/"
|
| 353 |
+
_c_server_name = _c_space_id.split("/")[-1] if "/" in _c_space_id else _c_space_id
|
| 354 |
+
else:
|
| 355 |
+
_c_space_url = "http://localhost:7860"
|
| 356 |
+
_c_mcp_url = "http://localhost:7860/gradio_api/mcp/"
|
| 357 |
+
_c_server_name = "metamcp-local"
|
| 358 |
+
|
| 359 |
+
_c_claude_config = {
|
| 360 |
+
"mcpServers": {
|
| 361 |
+
_c_server_name: {
|
| 362 |
+
"command": "npx",
|
| 363 |
+
"args": [
|
| 364 |
+
"mcp-remote",
|
| 365 |
+
_c_mcp_url,
|
| 366 |
+
"--transport",
|
| 367 |
+
"streamable-http"
|
| 368 |
+
]
|
| 369 |
+
}
|
| 370 |
+
}
|
| 371 |
+
}
|
| 372 |
+
_c_claude_config_str = json.dumps(_c_claude_config, indent=2)
|
| 373 |
+
gr.Markdown("""## Paramètres d'intégration MCP""")
|
| 374 |
+
gr.Code(label="URL of this space :", value=_c_space_url, language=None, interactive=False, lines=1)
|
| 375 |
+
gr.Code(label="URL of MCP endpoint :", value=_c_mcp_url, language=None, interactive=False, lines=1)
|
| 376 |
+
gr.Code(label="Claude Desktop Configuration", value=_c_claude_config_str, language="json", interactive=False)
|
| 377 |
+
|
| 378 |
|
|
|
|
|
|
|
|
|
|
| 379 |
|
| 380 |
with gr.Tab("1. Initialisation"):
|
| 381 |
gr.Markdown("Commencez par initialiser un nouveau projet.")
|
|
|
|
| 569 |
except Exception as e:
|
| 570 |
readme_content = f"Impossible de charger le README.md : {str(e)}"
|
| 571 |
|
| 572 |
+
with gr.Column():
|
| 573 |
+
gr.Markdown(readme_content)
|
| 574 |
|
| 575 |
# Câblage différé du déploiement (pour avoir accès à mcp_url_input défini dans le Tab 4)
|
| 576 |
btn_deploy.click(
|