mb-mastering
Studio de mastering MB Mastering (Paris) : services, tarifs, infos studio, FAQ et demande de devis.
使うべきか
品質と安全性
検出事項(5)
- HIGH
- LOWget_pricing 内
- LOWget_faq 内
- LOWqonto_get 内
- INFOqonto_create_quote 内
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"mb-mastering": {
"url": "https://mcp.mathieuberthet.com/"
}
}
}リモートエンドポイント
https://mcp.mathieuberthet.com/streamable-httpできること
ツール一覧
ツール(20)
🟢search(query)
Recherche dans les contenus de MB Mastering (services de mastering, tarifs, studio, FAQ) et renvoie une liste de résultats avec id, titre, extrait et URL. / Searches MB Mastering content (mastering services, rates, studio info, FAQ) and returns matching results.
入力スキーマ
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Termes de recherche / search query."
}
},
"required": [
"query"
],
"additionalProperties": false
}🟢fetch(id)
Récupère le contenu complet d'un document MB Mastering à partir de son id (obtenu via search). / Fetches the full content of a document by id (from search results).
入力スキーマ
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Identifiant du document renvoyé par search."
}
},
"required": [
"id"
],
"additionalProperties": false
}🟢get_services
Liste les services de mastering de MB Mastering (mastering stéréo, stems, à distance, gravure vinyle, numérisation, formation) avec leurs tarifs et descriptions.
入力スキーマ
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢get_pricing
Donne les tarifs de mastering de MB Mastering, ainsi que les délais, la politique de révisions et les modalités de paiement.
入力スキーマ
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢get_studio_info
Informations sur le studio MB Mastering : fondateur, expérience, adresse à Paris, équipement analogique, liens et réseaux.
入力スキーマ
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢get_faq
Réponses aux questions fréquentes sur le mastering chez MB Mastering : prix, délais, révisions, travail à distance, gravure vinyle, localisation.
入力スキーマ
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟡send_quote_request(requester_name, requester_email, titles, service, genre, ...)
Envoie une demande de devis de mastering à MB Mastering par email. À utiliser quand l'utilisateur souhaite être recontacté. Requiert au minimum le nombre de titres et l'email du demandeur.
入力スキーマ
{
"type": "object",
"properties": {
"requester_name": {
"type": "string",
"description": "Nom du demandeur ou du projet/artiste."
},
"requester_email": {
"type": "string",
"description": "Email du demandeur (pour la réponse)."
},
"titles": {
"type": "integer",
"description": "Nombre de titres à masteriser.",
"minimum": 1
},
"service": {
"type": "string",
"description": "Service souhaité (mastering stéréo, stems, à distance, gravure vinyle…)."
},
"genre": {
"type": "string",
"description": "Genre musical."
},
"format": {
"type": "string",
"description": "Support final visé (streaming, vinyle, CD…)."
},
"deadline": {
"type": "string",
"description": "Échéance éventuelle."
},
"notes": {
"type": "string",
"description": "Précisions libres sur le projet."
}
},
"required": [
"requester_email",
"titles"
],
"additionalProperties": false
}🟡prepare_quote_email(document_type, document_number, client_email, client_name, subject, ...)
RÉSERVÉ AU STUDIO (token d'administration requis). Prépare un brouillon — ou envoie — l'email d'un devis ou d'une facture PDF à un client, depuis [email protected]. Par défaut (mode « draft »), l'email est déposé dans les Brouillons du webmail OVH pour relecture avant envoi ; en mode « send », il est envoyé immédiatement puis archivé dans Envoyés. Le PDF est récupéré par le serveur directement dans Qonto (qonto_type + qonto_number) — ou fourni en base64 pour un document externe.
入力スキーマ
{
"type": "object",
"properties": {
"document_type": {
"type": "string",
"enum": [
"devis",
"facture"
],
"description": "Type de document joint."
},
"document_number": {
"type": "string",
"description": "Numéro du document, ex. 202608-2."
},
"client_email": {
"type": "string",
"description": "Adresse email du client destinataire."
},
"client_name": {
"type": "string",
"description": "Nom du client (salutation et en-tête To)."
},
"subject": {
"type": "string",
"description": "Sujet de l'email. Défaut : « MB Mastering — Devis/Facture n° … »."
},
"body_message": {
"type": "string",
"description": "Paragraphe personnalisé inséré dans le corps par défaut."
},
"mode": {
"type": "string",
"enum": [
"draft",
"send"
],
"description": "draft (défaut) : brouillon dans le webmail OVH. send : envoi immédiat."
},
"language": {
"type": "string",
"enum": [
"fr",
"en",
"raw"
],
"description": "Langue du wrapper email : 'fr' (défaut, template français avec « Bonjour » + « Bien cordialement, Mathieu Berthet »), 'en' (template anglais avec « Hi » + « Best regards, Jean-Claude assistant to Mathieu Berthet »), ou 'raw' (aucun wrapper — le body_message est envoyé tel quel, pour un contrôle total). Utiliser 'en' pour clients anglophones (SlapFunk, Scott Anderson, etc.) — ne JAMAIS envoyer un body EN avec language 'fr'."
},
"qonto_type": {
"type": "string",
"enum": [
"quote",
"invoice"
],
"description": "RECOMMANDÉ : le serveur va chercher le PDF dans Qonto lui-même (aucun base64 à transporter). quote = devis, invoice = facture."
},
"qonto_number": {
"type": "string",
"description": "Numéro Qonto du document (D-2026-003, F-2026-001). Défaut : document_number."
},
"qonto_id": {
"type": "string",
"description": "Id Qonto du document (alternative à qonto_number)."
},
"pdf_base64": {
"type": "string",
"description": "PDF externe encodé en base64 — seulement si le document n'est pas dans Qonto."
},
"pdf_filename": {
"type": "string",
"description": "Nom du fichier joint. Défaut : Devis-<n>.pdf / Facture-<n>.pdf."
},
"cc": {
"type": [
"string",
"array"
],
"description": "Adresses en copie (string CSV ou array)."
},
"in_reply_to": {
"type": "string",
"description": "Message-ID du mail auquel on répond (avec ou sans chevrons), pour threading IMAP/Gmail."
},
"references": {
"type": "string",
"description": "Chaîne References (Message-IDs séparés par espaces). Auto = in_reply_to si absent."
},
"auth_token": {
"type": "string",
"description": "Token d'administration (si le client MCP ne permet pas le header Authorization)."
}
},
"required": [
"document_type",
"document_number",
"client_email"
],
"additionalProperties": false
}🟡qonto_create_invoice(client_id, client_name, client_email, create_client_if_missing, client_kind, ...)
RÉSERVÉ AU STUDIO (token). Crée une facture client Qonto (brouillon/proforma par défaut, ou 'unpaid' = officielle) et renvoie numéro, total, lien de paiement Mollie. Client cherché par id, email puis nom ; création possible avec create_client_if_missing=true + adresse. Anti-doublon : refuse un document identique le même jour (sauf force=true) ; request_id rend l'appel rejouable sans doublon. Aucun PDF dans la réponse : utiliser prepare_quote_email (qonto_type/qonto_number) pour l'envoyer, qonto_get pour l'URL PDF.
入力スキーマ
{
"type": "object",
"properties": {
"client_id": {
"type": "string",
"description": "Id Qonto du client (prioritaire sur email/nom)."
},
"client_name": {
"type": "string",
"description": "Nom du client (label, studio, artiste ou 'Prénom Nom'). Recherche exacte insensible à la casse."
},
"client_email": {
"type": "string",
"description": "Email du client (recherche par email d'abord)."
},
"create_client_if_missing": {
"type": "boolean",
"description": "Si le client n'existe pas : le créer (sinon erreur explicite). Exige alors l'adresse ci-dessous."
},
"client_kind": {
"type": "string",
"enum": [
"company",
"individual"
],
"description": "Type du client créé. Défaut individual (le nom du label/artiste est conservé tel quel comme nom affiché) ; company UNIQUEMENT avec tin_number (SIREN/SIRET) — sinon Qonto refuse le devis."
},
"tin_number": {
"type": "string",
"description": "SIREN/SIRET (ou n° fiscal étranger) du client : rend le type company possible. Optionnel."
},
"contact_name": {
"type": "string",
"description": "Prénom Nom de la personne de contact (ex. 'Rafa Santos') quand client_name est un label — sert de prénom/nom Qonto. Optionnel."
},
"client_country": {
"type": "string",
"description": "Code pays ISO2 du client créé (défaut FR)."
},
"street_address": {
"type": "string",
"description": "Adresse de facturation (rue) — obligatoire pour créer un client, sauf address_unknown."
},
"zip_code": {
"type": "string",
"description": "Code postal — obligatoire pour créer un client, sauf address_unknown."
},
"city": {
"type": "string",
"description": "Ville — obligatoire pour créer un client."
},
"address_unknown": {
"type": "boolean",
"description": "Le client n'a PAS communiqué son adresse : rue/code postal remplacés par « — » (ville + pays requis). JAMAIS inventer une adresse — la demander au client."
},
"vat_number": {
"type": "string",
"description": "N° TVA intracom du client créé (optionnel)."
},
"request_id": {
"type": "string",
"description": "Identifiant unique de CET appel (ex. 'mate027-devis-2026-09-22'). Si le même request_id est rejoué (timeout, relance), le serveur renvoie la réponse d'origine sans rien recréer."
},
"force": {
"type": "boolean",
"description": "Créer même si un document identique (même client, même total, même jour) existe déjà. Défaut false."
},
"items": {
"type": "array",
"description": "Lignes (au moins 1).",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Intitulé de la prestation, ex. 'Mastering stéréo — Track X'."
},
"quantity": {
"type": [
"string",
"number"
],
"description": "Quantité (défaut 1)."
},
"unit_price": {
"type": "number",
"description": "Prix unitaire HT en €."
}
},
"required": [
"title",
"unit_price"
]
}
},
"status": {
"type": "string",
"enum": [
"draft",
"unpaid"
],
"description": "draft (proforma, à finaliser plus tard) ou unpaid (facture officielle). Défaut : draft."
},
"due_days": {
"type": "integer",
"description": "Jours avant échéance (défaut 30)."
},
"auth_token": {
"type": "string",
"description": "Token d'administration (si le client MCP ne permet pas le header Authorization)."
}
},
"required": [
"items"
],
"additionalProperties": false
}🟡qonto_create_quote(client_id, client_name, client_email, create_client_if_missing, client_kind, ...)
RÉSERVÉ AU STUDIO (token). Crée un devis client Qonto (D-2026-XXX) et renvoie numéro, total, lien client, id. Client cherché par id, email puis nom ; création possible avec create_client_if_missing=true + adresse (jamais inventée : address_unknown=true pose des tirets). Anti-doublon : refuse un devis identique le même jour (sauf force=true) ; request_id rend l'appel rejouable sans doublon. Aucun PDF dans la réponse : prepare_quote_email (qonto_type=quote, qonto_number=D-…) l'envoie, qonto_get donne l'URL PDF. En cas de doute sur l'état : qonto_list avant de relancer.
入力スキーマ
{
"type": "object",
"properties": {
"client_id": {
"type": "string",
"description": "Id Qonto du client (prioritaire sur email/nom)."
},
"client_name": {
"type": "string",
"description": "Nom du client (label, studio, artiste ou 'Prénom Nom'). Recherche exacte insensible à la casse."
},
"client_email": {
"type": "string",
"description": "Email du client (recherche par email d'abord)."
},
"create_client_if_missing": {
"type": "boolean",
"description": "Si le client n'existe pas : le créer (sinon erreur explicite). Exige alors l'adresse ci-dessous."
},
"client_kind": {
"type": "string",
"enum": [
"company",
"individual"
],
"description": "Type du client créé. Défaut individual (le nom du label/artiste est conservé tel quel comme nom affiché) ; company UNIQUEMENT avec tin_number (SIREN/SIRET) — sinon Qonto refuse le devis."
},
"tin_number": {
"type": "string",
"description": "SIREN/SIRET (ou n° fiscal étranger) du client : rend le type company possible. Optionnel."
},
"contact_name": {
"type": "string",
"description": "Prénom Nom de la personne de contact (ex. 'Rafa Santos') quand client_name est un label — sert de prénom/nom Qonto. Optionnel."
},
"client_country": {
"type": "string",
"description": "Code pays ISO2 du client créé (défaut FR)."
},
"street_address": {
"type": "string",
"description": "Adresse de facturation (rue) — obligatoire pour créer un client, sauf address_unknown."
},
"zip_code": {
"type": "string",
"description": "Code postal — obligatoire pour créer un client, sauf address_unknown."
},
"city": {
"type": "string",
"description": "Ville — obligatoire pour créer un client."
},
"address_unknown": {
"type": "boolean",
"description": "Le client n'a PAS communiqué son adresse : rue/code postal remplacés par « — » (ville + pays requis). JAMAIS inventer une adresse — la demander au client."
},
"vat_number": {
"type": "string",
"description": "N° TVA intracom du client créé (optionnel)."
},
"request_id": {
"type": "string",
"description": "Identifiant unique de CET appel (ex. 'mate027-devis-2026-09-22'). Si le même request_id est rejoué (timeout, relance), le serveur renvoie la réponse d'origine sans rien recréer."
},
"force": {
"type": "boolean",
"description": "Créer même si un document identique (même client, même total, même jour) existe déjà. Défaut false."
},
"items": {
"type": "array",
"description": "Lignes (au moins 1).",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Intitulé de la prestation, ex. 'Mastering stéréo — Track X'."
},
"quantity": {
"type": [
"string",
"number"
],
"description": "Quantité (défaut 1)."
},
"unit_price": {
"type": "number",
"description": "Prix unitaire HT en €."
}
},
"required": [
"title",
"unit_price"
]
}
},
"validity_days": {
"type": "integer",
"description": "Jours de validité du devis (défaut 30)."
},
"auth_token": {
"type": "string"
}
},
"required": [
"items"
],
"additionalProperties": false
}🟢qonto_list(type, status, client_email, limit, auth_token)
RÉSERVÉ AU STUDIO (token). Liste compacte des devis, factures ou clients Qonto (numéro, statut, total, date, client, id). À appeler AVANT de relancer une création si un appel précédent a semblé échouer.
入力スキーマ
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"quotes",
"invoices",
"clients"
],
"description": "Défaut : quotes."
},
"status": {
"type": "string",
"description": "Filtre statut : devis pending_approval|approved|canceled ; factures draft|unpaid|paid|canceled."
},
"client_email": {
"type": "string",
"description": "Filtre par email client."
},
"limit": {
"type": "integer",
"description": "Max lignes (défaut 30, max 100)."
},
"auth_token": {
"type": "string"
}
},
"additionalProperties": false
}🟢qonto_get(type, number, id, auth_token)
RÉSERVÉ AU STUDIO (token). Détail d'un devis ou d'une facture Qonto par numéro (D-2026-003, F-2026-001) ou id : lignes, client + adresse, statut, lien client/paiement, URL PDF signée (temporaire). Jamais de base64.
入力スキーマ
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"quote",
"invoice"
],
"description": "Défaut : quote."
},
"number": {
"type": "string",
"description": "Numéro du document (ou id Qonto)."
},
"id": {
"type": "string",
"description": "Id Qonto (alternative à number)."
},
"auth_token": {
"type": "string"
}
},
"additionalProperties": false
}🔴qonto_delete(type, number, id, confirm, auth_token)
RÉSERVÉ AU STUDIO (token). Supprime un devis en attente (pending_approval) ou une facture brouillon (draft) — ex. doublon créé par erreur. Refuse tout document envoyé/approuvé/finalisé. Exige confirm=true (le premier appel sans confirm renvoie un récapitulatif).
入力スキーマ
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"quote",
"invoice"
],
"description": "Défaut : quote."
},
"number": {
"type": "string",
"description": "Numéro du document (ou id Qonto)."
},
"id": {
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "true pour supprimer réellement."
},
"auth_token": {
"type": "string"
}
},
"additionalProperties": false
}🟢imap_list_inbox(limit, auth_token)
RÉSERVÉ AU STUDIO (token). Liste les N derniers mails de INBOX ([email protected]) via IMAP direct sur OVH. Retourne UID (à passer à imap_get_mail), date, expéditeur, objet, flags. Bypass Chrome/Roundcube — beaucoup plus rapide et fiable.
入力スキーマ
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"description": "Nombre de mails à retourner (défaut 20, max 50)."
},
"auth_token": {
"type": "string"
}
},
"additionalProperties": false
}🟢imap_get_mail(uid, auth_token)
RÉSERVÉ AU STUDIO (token). Récupère le corps + liens (WeTransfer, Drive, SwissTransfer, etc.) + pièces jointes d'un mail INBOX par UID. UID est fourni par imap_list_inbox. Décode automatiquement quoted-printable/base64 + UTF-8.
入力スキーマ
{
"type": "object",
"properties": {
"uid": {
"type": "integer",
"description": "UID du mail (obtenu via imap_list_inbox)."
},
"auth_token": {
"type": "string"
}
},
"required": [
"uid"
],
"additionalProperties": false
}🟡list_quote_requests(days, verdict, auth_token)
RÉSERVÉ AU STUDIO (token). Journal des demandes de devis reçues via le tool public send_quote_request : envoyées par mail ET filtrées comme robots/spam (avec la raison). Permet de vérifier qu'aucune vraie demande n'a été filtrée.
入力スキーマ
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"description": "Fenêtre en jours (défaut 7, max 90)."
},
"verdict": {
"type": "string",
"description": "Filtre : 'envoyé', 'filtré', 'plafond'. Vide = tout."
},
"auth_token": {
"type": "string"
}
},
"additionalProperties": false
}⚪qonto_append_invoice_line(client_id, client_email, client_name, title, quantity, ...)
RÉSERVÉ AU STUDIO (token d'administration requis). Ajoute une ligne à un brouillon (proforma) Qonto existant pour un client, ou crée le brouillon si absent. Idéal pour clients récurrents (Antinote, DKO, etc.) : accumuler les prestations puis facturer d'un coup avec qonto_finalize_invoice.
入力スキーマ
{
"type": "object",
"properties": {
"client_id": {
"type": "string"
},
"client_email": {
"type": "string"
},
"client_name": {
"type": "string"
},
"title": {
"type": "string",
"description": "Intitulé de la ligne, ex. 'cutting 12 inch A + B side ATN070'."
},
"quantity": {
"type": [
"string",
"number"
]
},
"unit_price": {
"type": "number"
},
"auth_token": {
"type": "string"
}
},
"required": [
"title",
"unit_price"
],
"additionalProperties": false
}⚪qonto_finalize_invoice(invoice_id, client_id, client_email, client_name, auth_token)
RÉSERVÉ AU STUDIO (token d'administration requis). Passe un brouillon (proforma) en statut 'unpaid' = facture officielle numérotée. Qonto génère le PDF + lien de paiement Mollie. Trouve le brouillon par invoice_id OU par client (id/email/name).
入力スキーマ
{
"type": "object",
"properties": {
"invoice_id": {
"type": "string"
},
"client_id": {
"type": "string"
},
"client_email": {
"type": "string"
},
"client_name": {
"type": "string"
},
"auth_token": {
"type": "string"
}
},
"additionalProperties": false
}🟡qonto_update_client(client_id, client_email, client_name, street_address, city, ...)
RÉSERVÉ AU STUDIO (token d'administration requis). Met à jour l'adresse de facturation d'un client Qonto existant. Identifier par client_id (préféré) OU client_email/client_name.
入力スキーマ
{
"type": "object",
"properties": {
"client_id": {
"type": "string",
"description": "ID Qonto du client (préféré)."
},
"client_email": {
"type": "string",
"description": "Fallback : recherche par email."
},
"client_name": {
"type": "string",
"description": "Fallback : recherche par nom."
},
"street_address": {
"type": "string",
"description": "Rue et numéro."
},
"city": {
"type": "string",
"description": "Ville."
},
"zip_code": {
"type": "string",
"description": "Code postal."
},
"country_code": {
"type": "string",
"description": "Code pays ISO2 (défaut FR)."
},
"auth_token": {
"type": "string",
"description": "Token d'administration."
}
},
"required": [
"street_address",
"city",
"zip_code"
],
"additionalProperties": false
}🟡upload_master(filename, chunk_data, chunk_index, is_last, auth_token)
RÉSERVÉ AU STUDIO (token d'administration requis). Dépose un zip de master client dans ~/www/masters/ sur le serveur OVH. Nom conservé tel quel (contrôle total côté studio). Upload chunké (chunk_index=0 pour le premier, is_last=true pour le dernier — le tool renvoie alors l'URL client). Écriture UNIQUEMENT dans ~/www/masters/ (chemin hardcodé, sanitize strict, pas d'échappement possible).
入力スキーマ
{
"type": "object",
"properties": {
"filename": {
"type": "string",
"description": "Nom du fichier .zip (autorisé : lettres/chiffres/._- et espaces ; extension .zip obligatoire ; max 200 chars). Sanitize strict côté serveur."
},
"chunk_data": {
"type": "string",
"description": "Contenu du chunk encodé en base64. Max ~8 Mo par chunk pour rester sous les limites HTTP OVH."
},
"chunk_index": {
"type": "integer",
"description": "Index du chunk (0-based). 0 = truncate le fichier destination ; >0 = append."
},
"is_last": {
"type": "boolean",
"description": "true pour le dernier chunk → renvoie l'URL client finalisée."
},
"auth_token": {
"type": "string",
"description": "Token d'administration (si le client MCP ne permet pas le header Authorization)."
}
},
"required": [
"filename",
"chunk_data"
],
"additionalProperties": false
}コミュニティ
エビデンス