A gap in the native HubSpot connector
HubSpot's official MCP connector lets an AI agent call HubSpot directly, but it does not cover every endpoint. Lists and segments are missing. I built a small Laravel MCP server to fill that gap, with three tools for fetching list folders, fetching lists, and searching across them.
Each tool is a thin class that calls a service class, and each service talks to HubSpot through the official hubspot/api-client SDK instead of raw HTTP. Every request runs through token auth first, and every tool call gets logged, so a failure days later is still traceable back to its exact input.
An unexpected reuse
The HubSpot SDK makes its requests through Guzzle under the hood. To see those calls in my existing debugging tools, I wired in two packages I had already built for regular web apps, telescope-guzzle-watcher and laravel-pulse-guzzle-recorder. The first shows every outgoing HubSpot call in Telescope. The second tracks the same raw Guzzle traffic in Pulse, catching calls that Pulse's own HTTP client watcher does not see.
Neither package was written with AI agents in mind. I built them to debug regular API integrations. But an MCP server is still just a Laravel app making Guzzle calls underneath, so the same tools gave me full visibility into what the agent was actually doing on HubSpot's side. It was a good reminder that solid observability tooling pays off in places I did not plan for.