MCP Server

mb-mastering

com.mathieuberthet/mb-mastering

What this MCP does

Provides audio mastering service information, pricing, quote requests, client invoicing, payment links, and studio administration tools.

fetch
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).
Input schema
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Identifiant du document renvoyé par search.'}}, '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.
Input schema
{'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.
Input schema
{'type': 'object', 'properties': {}, '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.
Input schema
{'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.
Input schema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
imap_get_mail
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.
Input schema
{'type': 'object', 'required': ['uid'], 'properties': {'uid': {'type': 'integer', 'description': 'UID du mail (obtenu via imap_list_inbox).'}, 'auth_token': {'type': 'string'}}, 'additionalProperties': False}
imap_list_inbox
RÉSERVÉ AU STUDIO (token). Liste les N derniers mails de INBOX (contact@mathieuberthet.com) via IMAP direct sur OVH. Retourne UID (à passer à imap_get_mail), date, expéditeur, objet, flags. Bypass Chrome/Roundcube — beaucoup plus rapide et fiable.
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'description': 'Nombre de mails à retourner (défaut 20, max 50).'}, 'auth_token': {'type': 'string'}}, 'additionalProperties': False}
list_quote_requests
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.
Input schema
{'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}
prepare_quote_email
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 contact@mathieuberthet.com. 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.
Input schema
{'type': 'object', 'required': ['document_type', 'document_number', 'client_email'], 'properties': {'cc': {'type': ['string', 'array'], 'description': 'Adresses en copie (string CSV ou array).'}, 'mode': {'enum': ['draft', 'send'], 'type': 'string', 'description': 'draft (défaut) : brouillon dans le webmail OVH. send : envoi immédiat.'}, 'subject': {'type': 'string', 'description': "Sujet de l'email. Défaut : « MB Mastering — Devis/Facture n° … »."}, 'language': {'enum': ['fr', 'en', 'raw'], 'type': 'string', '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_id': {'type': 'string', 'description': 'Id Qonto du document (alternative à qonto_number).'}, 'auth_token': {'type': 'string', 'description': "Token d'administration (si le client MCP ne permet pas le header Authorization)."}, 'pdf_base64': {'type': 'string', 'description': "PDF externe encodé en base64 — seulement si le document n'est pas dans Qonto."}, 'qonto_type': {'enum': ['quote', 'invoice'], 'type': 'string', 'description': 'RECOMMANDÉ : le serveur va chercher le PDF dans Qonto lui-même (aucun base64 à transporter). quote = devis, invoice = facture.'}, 'references': {'type': 'string', 'description': 'Chaîne References (Message-IDs séparés par espaces). Auto = in_reply_to si absent.'}, 'client_name': {'type': 'string', 'description': 'Nom du client (salutation et en-tête To).'}, 'in_reply_to': {'type': 'string', 'description': 'Message-ID du mail auquel on répond (avec ou sans chevrons), pour threading IMAP/Gmail.'}, 'body_message': {'type': 'string', 'description': 'Paragraphe personnalisé inséré dans le corps par défaut.'}, 'client_email': {'type': 'string', 'description': 'Adresse email du client destinataire.'}, 'pdf_filename': {'type': 'string', 'description': 'Nom du fichier joint. Défaut : Devis-<n>.pdf / Facture-<n>.pdf.'}, 'qonto_number': {'type': 'string', 'description': 'Numéro Qonto du document (D-2026-003, F-2026-001). Défaut : document_number.'}, 'document_type': {'enum': ['devis', 'facture'], 'type': 'string', 'description': 'Type de document joint.'}, 'document_number': {'type': 'string', 'description': 'Numéro du document, ex. 202608-2.'}}, 'additionalProperties': False}
qonto_append_invoice_line
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.
Input schema
{'type': 'object', 'required': ['title', 'unit_price'], 'properties': {'title': {'type': 'string', 'description': "Intitulé de la ligne, ex. 'cutting 12 inch A + B side ATN070'."}, 'quantity': {'type': ['string', 'number']}, 'client_id': {'type': 'string'}, 'auth_token': {'type': 'string'}, 'unit_price': {'type': 'number'}, 'client_name': {'type': 'string'}, 'client_email': {'type': 'string'}}, 'additionalProperties': False}
qonto_create_invoice
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.
Input schema
{'type': 'object', 'required': ['items'], 'properties': {'city': {'type': 'string', 'description': 'Ville — obligatoire pour créer un client.'}, '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', 'items': {'type': 'object', 'required': ['title', 'unit_price'], '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 €.'}}}, 'description': 'Lignes (au moins 1).'}, 'status': {'enum': ['draft', 'unpaid'], 'type': 'string', '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).'}, 'zip_code': {'type': 'string', 'description': 'Code postal — obligatoire pour créer un client, sauf address_unknown.'}, 'client_id': {'type': 'string', 'description': 'Id Qonto du client (prioritaire sur email/nom).'}, 'auth_token': {'type': 'string', 'description': "Token d'administration (si le client MCP ne permet pas le header Authorization)."}, '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."}, 'tin_number': {'type': 'string', 'description': 'SIREN/SIRET (ou n° fiscal étranger) du client : rend le type company possible. Optionnel.'}, 'vat_number': {'type': 'string', 'description': 'N° TVA intracom du client créé (optionnel).'}, 'client_kind': {'enum': ['company', 'individual'], 'type': 'string', '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.'}, '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)."}, '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.'}, '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."}, '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."}}, 'additionalProperties': False}
qonto_create_quote
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.
Input schema
{'type': 'object', 'required': ['items'], 'properties': {'city': {'type': 'string', 'description': 'Ville — obligatoire pour créer un client.'}, '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', 'items': {'type': 'object', 'required': ['title', 'unit_price'], '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 €.'}}}, 'description': 'Lignes (au moins 1).'}, 'zip_code': {'type': 'string', 'description': 'Code postal — obligatoire pour créer un client, sauf address_unknown.'}, 'client_id': {'type': 'string', 'description': 'Id Qonto du client (prioritaire sur email/nom).'}, 'auth_token': {'type': 'string'}, '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."}, 'tin_number': {'type': 'string', 'description': 'SIREN/SIRET (ou n° fiscal étranger) du client : rend le type company possible. Optionnel.'}, 'vat_number': {'type': 'string', 'description': 'N° TVA intracom du client créé (optionnel).'}, 'client_kind': {'enum': ['company', 'individual'], 'type': 'string', '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.'}, '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)."}, '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."}, 'validity_days': {'type': 'integer', 'description': 'Jours de validité du devis (défaut 30).'}, '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.'}, '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."}, '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."}}, 'additionalProperties': False}
qonto_delete
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).
Input schema
{'type': 'object', 'properties': {'id': {'type': 'string'}, 'type': {'enum': ['quote', 'invoice'], 'type': 'string', 'description': 'Défaut : quote.'}, 'number': {'type': 'string', 'description': 'Numéro du document (ou id Qonto).'}, 'confirm': {'type': 'boolean', 'description': 'true pour supprimer réellement.'}, 'auth_token': {'type': 'string'}}, 'additionalProperties': False}
qonto_finalize_invoice
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).
Input schema
{'type': 'object', 'properties': {'client_id': {'type': 'string'}, 'auth_token': {'type': 'string'}, 'invoice_id': {'type': 'string'}, 'client_name': {'type': 'string'}, 'client_email': {'type': 'string'}}, 'additionalProperties': False}
qonto_get
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.
Input schema
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'Id Qonto (alternative à number).'}, 'type': {'enum': ['quote', 'invoice'], 'type': 'string', 'description': 'Défaut : quote.'}, 'number': {'type': 'string', 'description': 'Numéro du document (ou id Qonto).'}, 'auth_token': {'type': 'string'}}, 'additionalProperties': False}
qonto_list
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.
Input schema
{'type': 'object', 'properties': {'type': {'enum': ['quotes', 'invoices', 'clients'], 'type': 'string', 'description': 'Défaut : quotes.'}, 'limit': {'type': 'integer', 'description': 'Max lignes (défaut 30, max 100).'}, 'status': {'type': 'string', 'description': 'Filtre statut : devis pending_approval|approved|canceled ; factures draft|unpaid|paid|canceled.'}, 'auth_token': {'type': 'string'}, 'client_email': {'type': 'string', 'description': 'Filtre par email client.'}}, 'additionalProperties': False}
qonto_update_client
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.
Input schema
{'type': 'object', 'required': ['street_address', 'city', 'zip_code'], 'properties': {'city': {'type': 'string', 'description': 'Ville.'}, 'zip_code': {'type': 'string', 'description': 'Code postal.'}, 'client_id': {'type': 'string', 'description': 'ID Qonto du client (préféré).'}, 'auth_token': {'type': 'string', 'description': "Token d'administration."}, 'client_name': {'type': 'string', 'description': 'Fallback : recherche par nom.'}, 'client_email': {'type': 'string', 'description': 'Fallback : recherche par email.'}, 'country_code': {'type': 'string', 'description': 'Code pays ISO2 (défaut FR).'}, 'street_address': {'type': 'string', 'description': 'Rue et numéro.'}}, 'additionalProperties': False}
search
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.
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': 'Termes de recherche / search query.'}}, 'additionalProperties': False}
send_quote_request
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.
Input schema
{'type': 'object', 'required': ['requester_email', 'titles'], 'properties': {'genre': {'type': 'string', 'description': 'Genre musical.'}, 'notes': {'type': 'string', 'description': 'Précisions libres sur le projet.'}, 'format': {'type': 'string', 'description': 'Support final visé (streaming, vinyle, CD…).'}, 'titles': {'type': 'integer', 'minimum': 1, 'description': 'Nombre de titres à masteriser.'}, 'service': {'type': 'string', 'description': 'Service souhaité (mastering stéréo, stems, à distance, gravure vinyle…).'}, 'deadline': {'type': 'string', 'description': 'Échéance éventuelle.'}, 'requester_name': {'type': 'string', 'description': 'Nom du demandeur ou du projet/artiste.'}, 'requester_email': {'type': 'string', 'description': 'Email du demandeur (pour la réponse).'}}, 'additionalProperties': False}
upload_master
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).
Input schema
{'type': 'object', 'required': ['filename', 'chunk_data'], 'properties': {'is_last': {'type': 'boolean', 'description': "true pour le dernier chunk → renvoie l'URL client finalisée."}, 'filename': {'type': 'string', 'description': 'Nom du fichier .zip (autorisé : lettres/chiffres/._- et espaces ; extension .zip obligatoire ; max 200 chars). Sanitize strict côté serveur.'}, 'auth_token': {'type': 'string', 'description': "Token d'administration (si le client MCP ne permet pas le header Authorization)."}, '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.'}}, 'additionalProperties': False}
Added
imap_get_mail
Sept. 27, 2026, 2:53 a.m.
Added
imap_list_inbox
Sept. 27, 2026, 2:53 a.m.
Changed
prepare_quote_email
Sept. 25, 2026, 3:02 a.m.
Added
qonto_update_client
Sept. 23, 2026, 2:53 a.m.
Added
qonto_finalize_invoice
Sept. 23, 2026, 2:53 a.m.
Added
qonto_append_invoice_line
Sept. 23, 2026, 2:53 a.m.
Added
list_quote_requests
Sept. 23, 2026, 2:53 a.m.
Added
qonto_delete
Sept. 23, 2026, 2:53 a.m.
Added
qonto_get
Sept. 23, 2026, 2:53 a.m.
Added
qonto_list
Sept. 23, 2026, 2:53 a.m.
Added
qonto_create_quote
Sept. 23, 2026, 2:53 a.m.
Added
qonto_create_invoice
Sept. 23, 2026, 2:53 a.m.
Changed
prepare_quote_email
Sept. 23, 2026, 2:53 a.m.
Added
upload_master
Sept. 17, 2026, 12:36 p.m.
Added
prepare_quote_email
Sept. 17, 2026, 12:36 p.m.
Added
send_quote_request
Sept. 17, 2026, 12:36 p.m.
Added
get_faq
Sept. 17, 2026, 12:36 p.m.
Added
get_studio_info
Sept. 17, 2026, 12:36 p.m.
Added
get_pricing
Sept. 17, 2026, 12:36 p.m.
Added
get_services
Sept. 17, 2026, 12:36 p.m.
Added
fetch
Sept. 17, 2026, 12:36 p.m.
Added
search
Sept. 17, 2026, 12:36 p.m.