Files
Loki/internal/loki/mcp_catalog.json
T
MichaelandClaude Opus 5 847aad217b MCP : catalogue embarqué de serveurs connus
Ajouter un serveur MCP demandait d'écrire soi-même `npx -y @scope/paquet …`
dans la modale, en devinant le nom du paquet. Le catalogue liste une vingtaine
de serveurs connus, commande déjà renseignée, classés par catégorie.

- internal/loki/mcp_catalog.json est EMBARQUÉ dans le binaire (go:embed), pas
  interrogé sur le réseau : Loki tourne hors ligne, et rien de ce qui s'exécute
  sur la machine ne vient d'un annuaire distant. Pour proposer un serveur de
  plus : éditer le fichier et recompiler.
- Choisir une entrée n'installe rien. Ça préremplit la modale d'ajout existante
  et l'utilisateur relit la commande avant d'enregistrer — un serveur stdio
  exécute un process arbitraire, au même titre que l'outil bash du mode agent.
  Aucune ligne de mcp_client.go n'est touchée : le catalogue s'arrête à
  l'affichage, tout le reste passe par l'API MCP déjà en place.
- Une entrée dont le runtime manque (npx ou uvx absent) le signale dans la
  liste, plutôt que de laisser l'utilisateur découvrir l'échec au démarrage du
  serveur.
- Les entrées qui réclament une clé d'API la rappellent avant l'enregistrement,
  au lieu d'enregistrer un serveur qui ne peut pas se connecter.
- Les entrées Python publiées avant le SDK MCP 2.0 sont épinglées avec
  `uvx --with "mcp<2"` : sans cela elles plantent sur ImportError: McpError.
- Le Dockerfile gagne uv/uvx (~35 Mo). Sans lui, 9 des 21 entrées s'affichent
  sans pouvoir démarrer dans le conteneur.

Intensité du raisonnement (REASONING_EFFORT)

L'interrupteur Raisonnement était binaire. llama-server accepte
`reasoning_effort` dans /v1/chat/completions : `none` coupe le raisonnement,
toute autre valeur est passée au gabarit jinja du modèle.

- Nouvelle clé de preset REASONING_EFFORT — donc réglée par modèle, comme le
  reste du preset. Vide = on n'envoie rien et le gabarit garde son comportement.
- Pas de repli à prévoir : un gabarit qui ne lit pas la valeur l'ignore sans
  erreur. En pratique seuls gpt-oss et apparentés changent de comportement, et
  le sous-titre du réglage le dit — promettre un effet universel serait faux.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 10:06:14 +02:00

263 lines
9.6 KiB
JSON

{
"version": 1,
"note": "Catalogue MCP embarqué (hors ligne, aucun annuaire distant). Éditable à la main : ajoute une entrée pour la proposer dans l'interface, puis relance le build. Le jeton {workspace} est remplacé par le dossier de travail de l'agent. Les entrées « uvx --with mcp<2 … » visent des serveurs publiés avant le SDK MCP 2.0 : sans cet épinglage, ils plantent au démarrage (ImportError McpError).",
"servers": [
{
"id": "filesystem",
"name": "Filesystem",
"category": "Fichiers",
"description": "Lecture, écriture et recherche de fichiers, limitées aux dossiers passés en argument.",
"homepage": "https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem",
"runtime": "node",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "{workspace}"],
"env": {},
"secrets": []
},
{
"id": "git",
"name": "Git",
"category": "Code",
"description": "Historique, diff et statut d'un dépôt Git ; commits et branches.",
"homepage": "https://github.com/modelcontextprotocol/servers/tree/main/src/git",
"runtime": "python",
"command": "uvx",
"args": ["mcp-server-git", "--repository", "{workspace}"],
"env": {},
"secrets": []
},
{
"id": "fetch",
"name": "Fetch",
"category": "Web",
"description": "Télécharge une URL et la convertit en Markdown pour le modèle.",
"homepage": "https://github.com/modelcontextprotocol/servers/tree/main/src/fetch",
"runtime": "python",
"command": "uvx",
"args": ["--with", "mcp<2", "mcp-server-fetch"],
"env": {},
"secrets": []
},
{
"id": "memory",
"name": "Memory",
"category": "Agent",
"description": "Mémoire sous forme de graphe de connaissances (entités, relations, observations).",
"homepage": "https://github.com/modelcontextprotocol/servers/tree/main/src/memory",
"runtime": "node",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"],
"env": { "MEMORY_FILE_PATH": "{workspace}/mcp-memory.json" },
"secrets": []
},
{
"id": "sequential-thinking",
"name": "Sequential Thinking",
"category": "Agent",
"description": "Structure le raisonnement en étapes révisables. Utile aux petits modèles locaux.",
"homepage": "https://github.com/modelcontextprotocol/servers/tree/main/src/sequentialthinking",
"runtime": "node",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"],
"env": {},
"secrets": []
},
{
"id": "time",
"name": "Time",
"category": "Utilitaires",
"description": "Heure courante et conversions de fuseaux horaires.",
"homepage": "https://github.com/modelcontextprotocol/servers/tree/main/src/time",
"runtime": "python",
"command": "uvx",
"args": ["--with", "mcp<2", "mcp-server-time"],
"env": {},
"secrets": []
},
{
"id": "sqlite",
"name": "SQLite",
"category": "Données",
"description": "Interroge et modifie une base SQLite locale.",
"homepage": "https://github.com/modelcontextprotocol/servers-archived/tree/main/src/sqlite",
"runtime": "python",
"command": "uvx",
"args": ["--with", "mcp<2", "mcp-server-sqlite", "--db-path", "{workspace}/agent.db"],
"env": {},
"secrets": []
},
{
"id": "everything",
"name": "Everything (test)",
"category": "Utilitaires",
"description": "Serveur de référence exposant toutes les primitives MCP. Sert à vérifier l'intégration.",
"homepage": "https://github.com/modelcontextprotocol/servers/tree/main/src/everything",
"runtime": "node",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-everything"],
"env": {},
"secrets": []
},
{
"id": "duckduckgo",
"name": "DuckDuckGo",
"category": "Web",
"description": "Recherche web via DuckDuckGo, sans clé d'API.",
"homepage": "https://pypi.org/project/duckduckgo-mcp-server/",
"runtime": "python",
"command": "uvx",
"args": ["duckduckgo-mcp-server"],
"env": {},
"secrets": []
},
{
"id": "playwright",
"name": "Playwright",
"category": "Web",
"description": "Pilote un navigateur (navigation, clics, formulaires) via l'arbre d'accessibilité.",
"homepage": "https://github.com/microsoft/playwright-mcp",
"runtime": "node",
"command": "npx",
"args": ["-y", "@playwright/mcp@latest", "--headless"],
"env": {},
"secrets": []
},
{
"id": "puppeteer",
"name": "Puppeteer",
"category": "Web",
"description": "Automatisation d'un Chrome sans interface (alternative à Playwright).",
"homepage": "https://github.com/modelcontextprotocol/servers-archived/tree/main/src/puppeteer",
"runtime": "node",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-puppeteer"],
"env": {},
"secrets": []
},
{
"id": "context7",
"name": "Context7",
"category": "Code",
"description": "Documentation à jour des bibliothèques, injectée directement dans le contexte.",
"homepage": "https://github.com/upstash/context7",
"runtime": "node",
"command": "npx",
"args": ["-y", "@upstash/context7-mcp"],
"env": {},
"secrets": []
},
{
"id": "github",
"name": "GitHub",
"category": "Code",
"description": "Dépôts, issues et pull requests via l'API GitHub. Nécessite un jeton personnel.",
"homepage": "https://github.com/modelcontextprotocol/servers-archived/tree/main/src/github",
"runtime": "node",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "" },
"secrets": ["GITHUB_PERSONAL_ACCESS_TOKEN"]
},
{
"id": "postgres",
"name": "PostgreSQL",
"category": "Données",
"description": "Requêtes SQL en lecture seule et inspection du schéma d'une base PostgreSQL.",
"homepage": "https://github.com/modelcontextprotocol/servers-archived/tree/main/src/postgres",
"runtime": "node",
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://utilisateur:motdepasse@hote:5432/base"
],
"env": {},
"secrets": []
},
{
"id": "docker",
"name": "Docker",
"category": "Infra",
"description": "Gère conteneurs et stacks compose. Nécessite l'accès au socket Docker.",
"homepage": "https://pypi.org/project/docker-mcp/",
"runtime": "python",
"command": "uvx",
"args": ["--with", "mcp<2", "docker-mcp"],
"env": {},
"secrets": []
},
{
"id": "brave-search",
"name": "Brave Search",
"category": "Web",
"description": "Recherche web et locale via l'API Brave. Nécessite une clé d'API.",
"homepage": "https://github.com/modelcontextprotocol/servers-archived/tree/main/src/brave-search",
"runtime": "node",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-brave-search"],
"env": { "BRAVE_API_KEY": "" },
"secrets": ["BRAVE_API_KEY"]
},
{
"id": "firecrawl",
"name": "Firecrawl",
"category": "Web",
"description": "Scraping et crawl de sites avec extraction structurée. Nécessite une clé d'API.",
"homepage": "https://github.com/firecrawl/firecrawl-mcp-server",
"runtime": "node",
"command": "npx",
"args": ["-y", "firecrawl-mcp"],
"env": { "FIRECRAWL_API_KEY": "" },
"secrets": ["FIRECRAWL_API_KEY"]
},
{
"id": "notion",
"name": "Notion",
"category": "Productivité",
"description": "Lecture et écriture de pages et bases Notion. Nécessite un jeton d'intégration.",
"homepage": "https://github.com/makenotion/notion-mcp-server",
"runtime": "node",
"command": "npx",
"args": ["-y", "@notionhq/notion-mcp-server"],
"env": { "NOTION_TOKEN": "" },
"secrets": ["NOTION_TOKEN"]
},
{
"id": "slack",
"name": "Slack",
"category": "Productivité",
"description": "Lecture des canaux et envoi de messages Slack. Nécessite un jeton de bot.",
"homepage": "https://github.com/modelcontextprotocol/servers-archived/tree/main/src/slack",
"runtime": "node",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-slack"],
"env": { "SLACK_BOT_TOKEN": "", "SLACK_TEAM_ID": "" },
"secrets": ["SLACK_BOT_TOKEN"]
},
{
"id": "google-maps",
"name": "Google Maps",
"category": "Utilitaires",
"description": "Géocodage, itinéraires et recherche de lieux. Nécessite une clé d'API.",
"homepage": "https://github.com/modelcontextprotocol/servers-archived/tree/main/src/google-maps",
"runtime": "node",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-google-maps"],
"env": { "GOOGLE_MAPS_API_KEY": "" },
"secrets": ["GOOGLE_MAPS_API_KEY"]
},
{
"id": "sentry",
"name": "Sentry",
"category": "Infra",
"description": "Récupère les issues et traces d'erreur d'un projet Sentry.",
"homepage": "https://pypi.org/project/mcp-server-sentry/",
"runtime": "python",
"command": "uvx",
"args": ["--with", "mcp<2", "mcp-server-sentry", "--auth-token", "REMPLACE_MOI"],
"env": {},
"secrets": []
}
]
}