Aller au contenu principal

Model Context Protocol

Serveur MCP du catalogue Grünig-SignTronic

Un serveur Model Context Protocol sans état, sans authentification et en lecture seule qui expose le catalogue de sérigraphie public de Grünig-SignTronic — produits, offres d’emploi, distributeurs, pages légales et actualités — à tout client MCP ou assistant IA, via un seul endpoint standard.

Configuration

Connecter un client

Le serveur parle le Model Context Protocol via Streamable HTTP sur un seul endpoint. Il n’y a ni clé API ni compte — pointez un client vers l’URL et ses tools apparaissent.

Endpoint MCP
https://mcp.grunig-signtronic.com/mcp
Streamable HTTPSans authentificationLecture seule
1Recommandé

Connector Claude.ai

Ajoutez-le comme connector personnalisé dans Claude.

  1. Ouvrez Paramètres → Connectors.
  2. Cliquez sur « Ajouter un connector personnalisé ».
  3. Collez l’endpoint indiqué ci-dessus ; laissez l’authentification vide.
  4. Enregistrez, activez-le dans une conversation, puis posez une question sur le catalogue.

Utilisez l’endpoint MCP indiqué ci-dessus

2

ChatGPT

Ajoutez-le comme connector personnalisé dans ChatGPT (Plus, Pro, Team ou Enterprise).

  1. Ouvrez Paramètres → Connectors.
  2. Cliquez sur « Créer » et choisissez un connector personnalisé (MCP).
  3. Collez l’endpoint indiqué ci-dessus comme URL du serveur ; réglez l’authentification sur « aucune ».
  4. Enregistrez, activez-le dans une conversation, puis posez une question sur le catalogue.

Utilisez l’endpoint MCP indiqué ci-dessus

3

MCP Inspector

Inspectez et appelez les tools directement depuis un terminal.

  1. Exécutez la commande ci-dessous.
  2. Choisissez le transport Streamable HTTP.
  3. Saisissez l’endpoint et cliquez sur « Connect ».
  4. Explorez avec « List Tools » / « Call Tool ».
Exécuter
npx @modelcontextprotocol/inspector

Ou laissez votre assistant s’en charger

Collez ceci dans Claude, ChatGPT ou tout assistant compatible MCP pour ajouter le serveur et l’essayer en une seule étape :

Prompt de configuration
Ajoutez le serveur MCP distant « Grünig-SignTronic Catalog » à l’adresse https://mcp.grunig-signtronic.com/mcp (Model Context Protocol via Streamable HTTP, sans authentification) à mon client MCP, puis listez ses outils et exécutez search_products avec la requête « coating » pour vérifier que tout fonctionne.

Appeler un tool directement (curl)

Chaque requête est un seul POST JSON-RPC. Celui-ci interroge le catalogue de produits :

Rechercher des produits
curl -s https://mcp.grunig-signtronic.com/mcp -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_products","arguments":{"query":"coating","lang":"fr"}}}'

Référence

Tools

Chaque entité suit une structure uniforme list / search + get : les tools list et search renvoient des résumés compacts, les tools get_* renvoient le détail complet. Tous les tools sont en lecture seule, et chaque tool sauf ping prend un lang parmi « en », « de », « fr », « it », « es » ou « pt ». Cette référence est générée à partir des définitions de tools du serveur, elle correspond donc toujours à ce que l’endpoint expose.

ping

Ping

Contrôle de disponibilité — renvoie 'pong' et l’environnement actif. Ne prend aucun argument.

Renvoie : Une courte chaîne de texte, p. ex. pong (production).

Exemple d’appel
Exemple d’appel
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "ping",
    "arguments": {}
  }
}

search_products

Rechercher des produits

Recherche ou liste les produits Grünig-SignTronic actifs dans la langue demandée. Avec « query », la requête est une sous-chaîne insensible à la casse comparée à l’ensemble du texte du produit — nom, description courte et complète, caractéristiques, avantages, applications et spécifications — de sorte que les numéros de modèle et les termes techniques (p. ex. « 1270 », « UV-LED ») correspondent aussi. SANS « query », l’outil liste au lieu de rechercher : « { lang, category } » répond donc à « quels produits appartiennent à cette catégorie » et « { lang } » liste le catalogue. « category » accepte un slug OU un nom de catégorie dans l’une des langues du catalogue (voir list_categories). Renvoie des résumés compacts (slug, nom, description courte, catégorie, URL canonique) ; pour le détail complet, utiliser get_product.

ParamètreTypeOblig.Description
querystring (1–200)optionnelTerme de recherche insensible à la casse. À omettre pour lister au lieu de rechercher.
lang"en" | "de" | "fr" | "it" | "es" | "pt"obligatoireLangue de réponse pour les contenus du catalogue.
limitinteger (1–50)optionnelRésultats max. Par défaut 10.
categorystring (≤100)optionnelSlug de catégorie ou nom de catégorie dans l’une des langues du catalogue (voir list_categories).

Renvoie : { count, results: [{ slug, name, shortDescription, category, url }] }.

Exemple d’appel
Exemple d’appel
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_products",
    "arguments": {
      "lang": "en",
      "category": "screen-preparation"
    }
  }
}

get_product

Récupérer un produit

Renvoie le détail complet d’un seul produit actif dans la langue demandée : descriptions, caractéristiques, avantages, applications, spécifications, documents et slugs des produits associés. Résolution par « slug », « id » ou « name » — « name » est le nom d’affichage (« G-COAT 746 ») ; tous trois sont insensibles à la casse, et « name » correspond aussi comme sous-chaîne. Si rien ne correspond, la réponse porte « suggestions » avec les produits réels les plus proches — relancer la demande avec l’un d’eux plutôt que de deviner.

ParamètreTypeOblig.Description
slugstring (≤200)optionnelSlug du produit. Indiquer slug, id ou name.
idstring (≤100)optionnelid du produit. Indiquer slug, id ou name.
namestring (≤200)optionnelNom d’affichage du produit ; insensible à la casse, sous-chaîne autorisée.
lang"en" | "de" | "fr" | "it" | "es" | "pt"obligatoireLangue de réponse pour les contenus du catalogue.

Renvoie : { found, truncated, product } — truncated: true signifie qu’un champ a atteint la limite de longueur. found: false (plus suggestions) si inconnu ou inactif.

Au moins l’un de slug, id ou name est obligatoire.

Exemple d’appel
Exemple d’appel
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_product",
    "arguments": {
      "name": "G-COAT 746",
      "lang": "en"
    }
  }
}

list_categories

Lister les catégories

Liste toutes les catégories de produits actives dans la langue demandée (slug, nom, description, productCount). « productCount » est le nombre de produits actifs dans la catégorie — cette liste est donc la carte du catalogue : commencer ici, puis passer un slug ou un nom comme « category » à search_products pour lister les produits de la catégorie.

ParamètreTypeOblig.Description
lang"en" | "de" | "fr" | "it" | "es" | "pt"obligatoireLangue de réponse pour les contenus du catalogue.
limitinteger (1–200)optionnelRésultats max. Par défaut 50.

Renvoie : { count, results: [{ slug, name, description, productCount }] }.

Exemple d’appel
Exemple d’appel
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_categories",
    "arguments": {
      "lang": "en"
    }
  }
}

list_jobs

Lister les offres d’emploi

Liste les offres d’emploi ouvertes sous forme de résumés compacts dans la langue demandée. Filtrage optionnel par type de poste. Pour le détail complet, utiliser get_job.

ParamètreTypeOblig.Description
lang"en" | "de" | "fr" | "it" | "es" | "pt"obligatoireLangue de réponse pour les contenus du catalogue.
typestring (≤50)optionnelType de poste pour le filtrage.
limitinteger (1–200)optionnelRésultats max. Par défaut 50.

Renvoie : { count, results: [{ slug, title, type, … }] }.

Exemple d’appel
Exemple d’appel
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_jobs",
    "arguments": {
      "lang": "en"
    }
  }
}

get_job

Récupérer une offre d’emploi

Renvoie le détail complet d’une seule offre d’emploi ouverte dans la langue demandée : description, exigences, avantages et type de poste. Résolution par « slug », « id » ou « name » (le titre de l’annonce) — tous insensibles à la casse, « name » aussi comme sous-chaîne. Un échec porte « suggestions » avec les annonces ouvertes les plus proches de la demande.

ParamètreTypeOblig.Description
slugstring (≤200)optionnelSlug de l’offre. Indiquer slug, id ou name.
idstring (≤100)optionnelid de l’offre. Indiquer slug, id ou name.
namestring (≤200)optionnelTitre de l’annonce ; insensible à la casse, sous-chaîne autorisée.
lang"en" | "de" | "fr" | "it" | "es" | "pt"obligatoireLangue de réponse pour les contenus du catalogue.

Renvoie : { found, truncated, job } — truncated: true signifie qu’un champ a atteint la limite de longueur. found: false (plus suggestions) si inconnu ou clôturé.

Au moins l’un de slug, id ou name est obligatoire.

Exemple d’appel
Exemple d’appel
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_job",
    "arguments": {
      "name": "Automation Engineer",
      "lang": "en"
    }
  }
}

list_distributors

Lister les distributeurs

Liste les distributeurs sous forme de résumés au niveau de l’entreprise dans la langue demandée (nom, adresse, e-mail, site web, coordonnées géographiques). Filtrage optionnel par pays. Les coordonnées de contact au niveau des personnes ne sont PAS incluses ici — utiliser get_distributor.

ParamètreTypeOblig.Description
lang"en" | "de" | "fr" | "it" | "es" | "pt"obligatoireLangue de réponse pour les contenus du catalogue.
countrystring (≤100)optionnelPays pour le filtrage (insensible à la casse).
limitinteger (1–200)optionnelRésultats max. Par défaut 50.

Renvoie : { count, results: [{ companyName, address, email, url, coordinates }] }.

Exemple d’appel
Exemple d’appel
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_distributors",
    "arguments": {
      "lang": "en"
    }
  }
}

get_distributor

Récupérer un distributeur

Renvoie le détail complet d’un seul distributeur dans la langue demandée — y compris la personne de contact nommée (e-mail/téléphone/mobile), qui n’est exposée qu’ici et jamais dans la liste groupée. Résolution par « slug », « id » ou « name » (le nom de l’entreprise) — tous insensibles à la casse, « name » aussi comme sous-chaîne. Un échec porte « suggestions » avec les partenaires les plus proches.

ParamètreTypeOblig.Description
slugstring (≤200)optionnelSlug du distributeur. Indiquer slug, id ou name.
idstring (≤100)optionnelid du distributeur. Indiquer slug, id ou name.
namestring (≤200)optionnelNom de l’entreprise ; insensible à la casse, sous-chaîne autorisée.
lang"en" | "de" | "fr" | "it" | "es" | "pt"obligatoireLangue de réponse pour les contenus du catalogue.

Renvoie : { found, truncated, distributor } incluant un objet contact; truncated: true signifie qu’un champ a atteint la limite de longueur.

Au moins l’un de slug, id ou name est obligatoire.

Exemple d’appel
Exemple d’appel
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_distributor",
    "arguments": {
      "name": "Example Graphics",
      "lang": "en"
    }
  }
}

list_news

Lister les actualités

Liste les actualités les plus récentes dans la langue demandée (titre, extrait, tags, date). Filtrage optionnel par tag. Seuls les extraits sont exposés — jamais le HTML complet de l’article.

ParamètreTypeOblig.Description
lang"en" | "de" | "fr" | "it" | "es" | "pt"obligatoireLangue de réponse pour les contenus du catalogue.
tagstring (≤100)optionnelTag pour le filtrage.
limitinteger (1–50)optionnelRésultats max. Par défaut 10.

Renvoie : { count, results: [{ title, excerpt, tags, publishedAt }] }.

Exemple d’appel
Exemple d’appel
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_news",
    "arguments": {
      "lang": "en"
    }
  }
}

Chaque tool déclare également un outputSchema et renvoie sa charge utile deux fois — comme structuredContent (du vrai JSON, validé à chaque appel) et comme bloc de texte JSON lisible.

Au-delà des tools

Resources & prompts

Le serveur annonce quatre capabilities : tools, resources, prompts et completions. Les resources rendent le même catalogue adressable par URI — un client peut ainsi joindre et relire un document sans choisir un tool. Les prompts sont des modèles prêts à l’emploi qui composent les tools ci-dessus.

Resources

Découvrez-les via resources/list (URI concrètes) et resources/templates/list (motifs). {lang} vaut « en », « de », « fr », « it », « es » ou « pt » — la langue fait partie de l’adresse, car chaque enregistrement du catalogue est localisé. Les resources renvoient l’enregistrement complet, pas les résumés des tools.

URIContenu
catalog://{lang}/products{ count, products } — chaque produit actif, en détail complet
catalog://{lang}/products/{slug}Un produit actif, en détail complet
catalog://{lang}/legal/{page}{ page, urlSlug, lang, summary, body, truncated }
catalog://{lang}/news{ count, news } — actualités publiées, extraits uniquement

Prompts

Chaque prompt compose les tools ci-dessus ; l’argument lang se complète automatiquement, et c’est précisément à cela que sert la capability completions. Aucun prompt ne demande de slug : produits et catégories sont passés en texte libre et le modèle les résout lui-même via search_products. Les arguments optionnels le sont volontairement, pour qu’un formulaire client ne bloque jamais sur une saisie.

PromptArgumentsObjectif
explore_cataloginterest?, lang?Orientation : catégories avec le nombre de produits, puis la suite
category_overviewcategory?, lang?Les produits d’une catégorie — le nom de la catégorie suffit
find_machineapplication, lang?Recommandation d’équipement pour un besoin de production décrit
compare_productsproducts?, criteria?, lang?Comparaison côte à côte sur les champs qui diffèrent
plan_screen_making_linerequirements, lang?Une ligne complète sous forme de flux ordonné, étape par étape
product_documentsproduct, lang?Les fiches techniques et notices publiées pour un produit
find_distributorcountry, lang?Le distributeur couvrant un pays, avec son contact
request_quoteneed, country?, lang?Demande de devis : présélection, partenaire compétent, voie de contact
news_digesttopic?, lang?Les dernières actualités publiées, résumées à partir de leurs extraits
open_positionsinterest?, lang?Les offres d’emploi ouvertes et ce qu’elles impliquent

À propos

À propos de ce serveur

Objectif

Il permet aux clients MCP et aux assistants IA d’interroger le catalogue public Grünig-SignTronic via un seul endpoint standard et bien connu — sans scraping, sans API sur mesure.

Source des données

Tous les contenus proviennent du site web public Grünig-SignTronic et sont servis en lecture seule. Le catalogue est actualisé à chaque publication du site web ; le serveur n’écrit jamais.

Sécurité

L’endpoint est sans authentification, en lecture seule et sans état. Il n’expose aucun secret, aucune écriture et aucune donnée personnelle au-delà de ce qui est déjà public sur le site web.

Transport

Model Context Protocol via Streamable HTTP. Les requêtes sont du simple JSON-RPC en POST ; les réponses sont mises en cache à l’edge lorsque c’est sans risque.