hubspot
hubspot.
HubSpot CRM objects — one tool, the verb in `op`.
setup & usage
hubspot s'authentifie via un token de private app. dans les réglages de ton compte hubspot, va dans integrations → private apps, crée une private app et coche les scopes :
crm.objects.contacts, crm.objects.companies, crm.objects.deals, crm.objects.tickets (lecture + écriture) — le crm lui-mêmecrm.schemas.* (lecture) — pour découvrir les propriétés d'un objetcrm.lists.read + crm.lists.write — pour les listes (= les segments)⚠️ si ta private app date d'avant, elle n'a que les scopes crm.objects.* et hubspot_list répondra 403. ça ne veut pas dire que ta clé est mauvaise : rouvre la private app et ajoute le scope, le token ne change pas.
⚠️ le token attendu est l'access token de la private app (forme pat-<région>-…). si tu colles autre chose — typiquement un *refresh token* oauth, un long blob base64 qui commence par Ci… — hubspot répond 401 `EXPIRED_AUTHENTICATION` avec un message trompeur du genre « expired 20697 day(s) ago » et une date d'expiration au 1er janvier 1970. rien n'a expiré : un refresh token n'a pas de champ d'expiration, donc envoyé en bearer il est lu comme expiré depuis l'epoch. ce message-là veut dire « ce n'est pas un access token », pas « ton token a vieilli ».
/account), connecteur hubspotinterroge et édite ton crm hubspot (contacts, companies, deals, tickets) depuis claude.
hubspot_object (op search, object_type contacts)hubspot_object (op create, object_type deals)hubspot_object (op associations)hubspot_object (op add_note)### segments = listes
dans hubspot, un « segment » est une liste : il n'y a pas d'api segments séparée. hubspot_list les couvre.
hubspot_list (op search, object_type contacts)create puis op add_membersmembersrecord_liststrois types de listes, choisis à la création et non modifiables ensuite :
add_members / remove_members)update, filter_branch)vider une liste (clear_members) et la supprimer (delete) acceptent dry_run=true : ça dit ce qui partirait sans rien toucher. une liste supprimée reste restaurable 90 jours (op restore).
### propriétés — à lire avant d'écrire
les noms internes hubspot ne sont pas les libellés de l'interface (dealstage, pas « Deal Stage »), et une liste déroulante n'accepte que ses valeurs déclarées. hubspot_property (op list) donne le schéma réel d'un type d'objet — sur un portail neuf, ça fait déjà 404 propriétés sur les contacts dont 45 énumérations. c'est ce qui rend fiables les create/update de hubspot_object et les critères filter_branch d'une liste dynamique, qui référencent les propriétés par nom interne.
⚠️ une exception, vérifiée en live : dealstage revient avec une liste d'options vide. les étapes d'un deal appartiennent à un *pipeline*, pas à la propriété — les lire demande l'api pipelines, que le connecteur ne monte pas encore.
outils
usage
claude plugin marketplace add otomata-tech/oto-plugin — mcp + skill configured.pipx install oto-cli then oto hubspot …