/ Annuaire / Playground / mcpo (MCP-to-OpenAPI)
● Communauté open-webui ⚡ Instantané

mcpo (MCP-to-OpenAPI)

par open-webui · open-webui/mcpo

Enveloppez n'importe quel serveur MCP dans OpenAPI — /docs instantané, schémas requête/réponse, OAuth — pour que tout client HTTP (ou modèle qui ne parle pas MCP) puisse l'appeler.

mcpo est un shim FastAPI minimaliste de l'équipe Open WebUI qui transforme n'importe quel serveur MCP stdio en un service HTTP OpenAPI standard. Vous enveloppez une commande MCP (mcpo -- uvx mcp-server-time) et vous obtenez instantanément /openapi.json, /docs (Swagger), JSON Schema pour chaque outil, et la prise en charge OAuth. Utile quand vous voulez un serveur MCP accessible depuis des clients non-MCP (curl, Postman, function-calling OpenAI, services internes) sans modifier le serveur en amont.

Pourquoi l'utiliser

Fonctionnalités clés

Démo en direct

Aperçu en pratique

mcpo-openapi-mcp.replay ▶ prêt
0/0

Installer

Choisissez votre client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "mcpo-openapi-mcp": {
      "command": "uvx",
      "args": [
        "mcpo",
        "--",
        "uvx",
        "mcp-server-time"
      ]
    }
  }
}

Ouvrez Claude Desktop → Settings → Developer → Edit Config. Redémarrez après avoir enregistré.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "mcpo-openapi-mcp": {
      "command": "uvx",
      "args": [
        "mcpo",
        "--",
        "uvx",
        "mcp-server-time"
      ]
    }
  }
}

Cursor utilise le même schéma mcpServers que Claude Desktop. La config projet l'emporte sur la globale.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "mcpo-openapi-mcp": {
      "command": "uvx",
      "args": [
        "mcpo",
        "--",
        "uvx",
        "mcp-server-time"
      ]
    }
  }
}

Cliquez sur l'icône MCP Servers dans la barre latérale Cline, puis "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "mcpo-openapi-mcp": {
      "command": "uvx",
      "args": [
        "mcpo",
        "--",
        "uvx",
        "mcp-server-time"
      ]
    }
  }
}

Même format que Claude Desktop. Redémarrez Windsurf pour appliquer.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "mcpo-openapi-mcp",
      "command": "uvx",
      "args": [
        "mcpo",
        "--",
        "uvx",
        "mcp-server-time"
      ]
    }
  ]
}

Continue utilise un tableau d'objets serveur plutôt qu'une map.

~/.config/zed/settings.json
{
  "context_servers": {
    "mcpo-openapi-mcp": {
      "command": {
        "path": "uvx",
        "args": [
          "mcpo",
          "--",
          "uvx",
          "mcp-server-time"
        ]
      }
    }
  }
}

Ajoutez dans context_servers. Zed recharge à chaud à la sauvegarde.

claude mcp add mcpo-openapi-mcp -- uvx mcpo -- uvx mcp-server-time

Une seule ligne. Vérifiez avec claude mcp list. Supprimez avec claude mcp remove.

Cas d'usage

Usages concrets : mcpo (MCP-to-OpenAPI)

Comment appeler un serveur MCP depuis curl / Postman / function-calling OpenAI

👤 Développeurs backend dont le runtime ne parle pas (encore) MCP ⏱ ~15 min intermediate

Quand l'utiliser : Vous avez choisi un excellent serveur MCP, mais votre stack de prod est un service Python / API Assistants OpenAI / quelque chose qui veut du HTTP+JSON.

Prérequis
  • Une commande MCP que vous lançeriez normalement — ex. uvx mcp-server-time ou npx -y @modelcontextprotocol/server-fetch
Déroulement
  1. Envelopper
    Run uvx mcpo --port 8000 -- uvx mcp-server-time and confirm /docs is up.✓ Copié
    → L'interface Swagger affiche les outils comme endpoints
  2. Appeler depuis curl
    Show me a working curl that calls the time tool with timezone=America/Los_Angeles.✓ Copié
    → Retourne l'heure actuelle + info tz
  3. Connecter à OpenAI
    Generate a function-calling spec from /openapi.json that I can paste into the OpenAI API.✓ Copié
    → Spec émise ; test d'appel rapide réussit

Résultat : Un serveur MCP qu'un backend non-MCP peut piloter via HTTP.

Pièges
  • Les outils à longue exécution expirent sous les paramètres uvicorn par défaut — Passez --timeout-keep-alive 600 à mcpo, ou mettez-le derrière nginx avec des timeouts correspondants

Faire tourner plusieurs MCP derrière un seul service HTTP

👤 Ingénieurs plateforme consolidant de nombreux MCP ⏱ ~30 min intermediate

Quand l'utiliser : Vous voulez une URL hébergeant les MCP time, fetch et filesystem chacun à leur propre préfixe de chemin.

Déroulement
  1. Les composer
    Write the mcpo config for 3 servers — time at /time, fetch at /fetch, filesystem at /fs.✓ Copié
    → config.yaml avec 3 services ; mcpo les sert
  2. Ajouter OAuth
    Configure JWT auth via the issuer of my Auth0 tenant. Endpoints require a valid token.✓ Copié
    → Les appels sans token retournent 401

Résultat : Un seul point d'entrée HTTP sécurisé hébergeant de nombreux MCP.

Pièges
  • Les outils entrent en conflit quand 2 serveurs exposent le même nom — mcpo utilise des espaces de noms par préfixe ; les conflits d'outils sont résolus par le chemin URL

Utiliser un MCP dans une suite de tests d'intégration HTTP

👤 Équipes QA / SDET ⏱ ~25 min advanced

Quand l'utiliser : Vous voulez affirmer le comportement de votre serveur MCP avec des outils de test HTTP standard.

Déroulement
  1. Démarrer en CI
    Add a GitHub Actions job that runs mcpo wrapping our MCP, then runs Playwright/pytest against it.✓ Copié
    → Fichier de workflow écrit ; passe localement
  2. Assertions sur le schéma
    Snapshot /openapi.json. Fail the build if the schema changes without an explicit change in the source.✓ Copié
    → Garde de diff de schéma dans le CI

Résultat : Pipeline de tests HTTP standard appliqué à un serveur MCP.

Pièges
  • Flaky si le MCP sous-jacent importe des dépendances lourdes au démarrage — Ajoutez une boucle d'attente /healthz avant l'exécution des tests
Combiner avec : github

Combinaisons

Associez-le à d'autres MCPs pour un effet X10

mcpo-openapi-mcp + filesystem

Persister le /openapi.json généré dans votre dépôt pour revue

mcpo-openapi-mcp + github

Ouvrir une PR quand la spec OpenAPI change

Outils

Ce que ce MCP expose

OutilEntréesQuand appelerCoût
GET /docs (navigateur) Explorer visuellement la surface des outils gratuit
GET /openapi.json (aucun) Génération de code / specs function-calling gratuit
POST /<tool> Corps JSON correspondant au schéma d'entrée de l'outil Invoquer un outil MCP enveloppé via HTTP 1 appel MCP sous-jacent

Coût et limites

Coût d'exécution

Quota d'API
Limité par les quotas du MCP enveloppé
Tokens par appel
Ajoute ~50 tokens de surcoût
Monétaire
Gratuit (Apache 2.0)
Astuce
Enveloppez une fois par processus ; ne pas démarrer un nouveau sous-processus par requête

Sécurité

Permissions, secrets, portée

Stockage des identifiants : Transmis au MCP enveloppé via des variables d'environnement ; mcpo ne stocke rien
Sortie de données : Là où le MCP enveloppé aurait envoyé des données

Dépannage

Erreurs courantes et correctifs

404 sur /tool

Le nom de l'outil dans l'URL doit correspondre exactement au nom de l'outil MCP (sensible à la casse)

Vérifier : Vérifiez /docs pour le bon chemin
MCP sous-jacent a planté

mcpo redémarre par défaut mais journalise l'erreur — vérifiez stderr

OAuth 401 avec un token valide

Vérifiez que l'audience et l'émetteur correspondent à votre config ; erreur typique = slash final manquant

Vérifier : Décodez le JWT sur jwt.io et comparez aud/iss

Alternatives

mcpo (MCP-to-OpenAPI) vs autres

AlternativeQuand l'utiliserCompromis
sparfenyuk/mcp-proxyVous avez seulement besoin du pontage de transport stdio↔HTTP, pas de surface OpenAPImcp-proxy est plus bas niveau ; mcpo vous donne /docs et OAuth
Écrire un wrapper FastAPI à la mainVous avez besoin d'une logique métier très spécifique en plusmcpo vous donne 90% gratuitement

Plus

Ressources

📖 Lire le README officiel sur GitHub

🐙 Voir les issues ouvertes

🔍 Parcourir les 400+ serveurs MCP et Skills