Chirag Chadha

HubSpot

active

Developer tools used by 4,000+ developers every week, and the MCP server that grew the community 425%.

Software Engineer, Developer Experience · 2024 -

+425%quarterly active developers346 to 1,817, 72% week-4 retention
4,000+developers every week
97%config success rateup from 65% on the legacy flow
161files in the logging refactor

The problem

HubSpot's developer platform is built and extended through the command line. As AI coding agents took off, developers scattered across Claude Code, Cursor, Codex, Gemini, and Windsurf, and none of those agents could actually talk to HubSpot. The tooling also carried years of debt: an insecure config format, inconsistent logging, and an onboarding flow that quietly failed for roughly a third of new developers.

What I built

I joined as a co-op and converted to full-time on the Developer Experience team. My biggest win was a Model Context Protocol server that lets agents drive the HubSpot platform directly, then the integrations that shipped it across all five major editors and agents.

Claude CodeCursorCodexGeminiWindsurfHubSpot MCP serverone surface for every agentHubSpot developer platformCRM, projects, local dev, accounts

I also led the CLI's largest architectural project: a multi-repo overhaul of configuration management (hs account link) that replaced the insecure hubspot.yml with a structured .hs/settings.json model. I built the proof of concept, drove team buy-in, partnered with design on the UX, and applied seven design patterns (SRP, IoC, CQS, SoC, OCP, DRY, ISP) in the refactor, then broke a 3,800-line change into four cleanly reviewable pieces.

Alongside it I designed the core logging abstraction and migrated it across 161 files and roughly 5,000 lines, modernized the CLI from yargs to React Ink (owning the Table and List components in v8), and built the release-management command suite (hs project release create / list / info, plus a --preview flag on hs project upload) that replaced the deprecated deploy path.

logger.ts
// one logging abstraction, adopted across 161 files
const logger = createLogger("project:upload");

logger.debug("starting upload", { account, projectName });
try {
await uploadProject(account, projectName);
logger.success("upload complete");
} catch (err) {
logger.error(err, { hint: "run hs project logs for details" });
}

Going agent-first

I now drive the "Agent First CLI" direction: rethinking the hs CLI as a deterministic surface that AI agents (not just humans) can call, and re-architecting the CLI and local-dev-lib repos to be agent-agnostic across tools like Claude Code and Codex. I also build internal developer-productivity automation, including a custom triage skill that closed 36 long-stale GitHub issues in a single session, and proactively measured the platform's agent-readiness by scoring our developer docs and surfacing the gaps.

Impact

The MCP server grew the developer community from 346 to 1,817 quarterly active developers, a 425% jump with 72% week-4 retention. The config overhaul moved first-run success from 65% to 97%. Tooling I own ships to more than 4,000 developers every week, across the CLI, local-dev-lib, and the VS Code extension. The work put me on a senior-engineer track, owning ambiguous, multi-repo projects end to end.

TypeScriptNodeReact InkMCPClaude Code