HubSpot is Poor to agents.
Discry independently scored how well an AI agent can discover and understand the HubSpot API from what’s public — not whether it’s usable. Below: every signal we checked, what’s costing the score, and what to change.
SCORED UNDER RUBRIC 1.2 · A full re-launch under Discry Score 2.5 — a new behavioral instrument, not comparable to these scores — is in progress.
Discovery
45% of score · 40/100Comprehension
55% of score · 47/100What we found
- HubSpot has no llms.txt at all (404) — this is the most critical agent discovery failure for an API of this scale
- Despite being a major platform, HubSpot's developer documentation is not optimized for programmatic or agent consumption — heavy JS-rendered pages with poor markdown conversion
- Strong MCP ecosystem presence with official server on PulseMCP and multiple community implementations on Glama
- OpenAPI specs exist but are not easily accessible at standard paths — they're behind the developer portal
- The developer docs site is on HubSpot's CMS (HubL) which adds complexity for scraping and markdown conversion
What to change
Prioritized by impact on discoverability. You (or your docs platform) deploy these — Discry never touches your API.
- 01Add llms.txt at developers.hubspot.com/llms.txt covering the CRM API, Marketing API, and common integration patterns — highest impact single change
- 02Publish OpenAPI specs at a standard public path (developers.hubspot.com/openapi.json)
- 03Add .well-known/mcp.json pointing to the official HubSpot MCP server
- 04Add AGENTS.md to the HubSpot GitHub organization with context for coding agents working with HubSpot APIs
- 05Create markdown-optimized documentation versions for agent consumption — current JS-heavy pages parse poorly
Execution coverage · INFORMATIONAL, UNSCORED
Whether an agent can actually complete a call and recover from errors is the deeper Audit layer — documented here, but not part of the Discry Score.
OAuth2 and Private App token auth. JSON error responses with category, message, and correlationId. Rate limits documented (100 requests per 10 seconds for OAuth, 200 for private apps). Cursor-based pagination with 'after' parameter. No idempotency support documented.