LQABR MCP HubSpot Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Port to listen on for HTTP transport (injected by Cloud Run). | 8080 |
| MCP_HOST | No | Host to bind to for HTTP transport. | 0.0.0.0 |
| MCP_PATH | No | URL path for the HTTP endpoint. | /mcp |
| MCP_TRANSPORT | No | Transport type: 'stdio' or 'http' (or alias 'streamable-http'). | stdio |
| HUBSPOT_AUTH_MODE | No | Mode switch for HubSpot authentication (e.g., 'env' or 'secret-manager'). | |
| HUBSPOT_ACCESS_TOKEN | No | The HubSpot access token directly (only used when LQABR_SECRET_BACKEND=env is set). | |
| LQABR_SECRET_BACKEND | No | Override to use 'env' for local development / CI (reads HubSpot token from an env var instead of Secret Manager). Never set in production. | |
| LQABR_SECRET_PROJECT | No | The GCP project ID where secrets are stored in Secret Manager. | |
| HUBSPOT_ACCESS_TOKEN_SECRET_ID | No | The ID (name) of the secret in Secret Manager that holds the HubSpot access token. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| upsert_lead_profileA | Create or update one lead in HubSpot: upserts the Company, upserts the Contact, and associates them. Creating and updating are ONE upsert, so calling this twice for the same lead is safe and does not duplicate. Returns the HubSpot ids. Bad data is recorded and reported as failed, never silently dropped. |
| get_lead_profileA | Read one lead's current state from HubSpot. Read-only. Returns the nine contract fields plus contact_hs_id and company_hs_id so you can write status back without re-searching. Check company_resolved: when false, the company fields are unpopulated and warnings explains why. |
| upsert_blog_summaryA | Put one published blog post into HubSpot: the ONLY writer to the blog summary store. Searches on blog_published_at, then updates that row or creates one — a single upsert, so calling it twice for the same post is safe and does not duplicate. Returns the ticket id and whether the row was created or updated. blog_industry must be exactly one of FINANCIAL_SERVICES, LEGAL_SERVICES, HEALTHCARE — a near-miss selects zero leads and raises no error. Bad data is recorded and reported as failed, never silently dropped. |
| get_blog_summaryA | Read one blog summary row by its publication timestamp. Read-only. Returns the seven contract fields plus ticket_hs_id. Not-found is a VALID result — found is false and summary is null — never an error. Check warnings: a non-empty list means more than one row shares this timestamp and the first was returned. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 4 tools
The tools clearly separate lead and blog summary domains, but within each domain the upsert and get tools have high semantic overlap in purpose, though descriptions help distinguish read vs. write.
All tool names follow a consistent verb_noun pattern (upsert/get + lead_profile/blog_summary) with snake_case, very predictable. Minor point: 'upsert' is a valid term but less common than 'create_or_update'.
4 tools is a reasonable count for a focused HubSpot integration covering two entities (lead and blog summary) with basic CRUD. It's slightly thin but appropriate for a narrow scope.
Coverage is incomplete: lead profiles have upsert+get but no ability to delete or list/filter leads. Blog summaries similarly lack delete and listing. The domain surface has notable missing operations that could hinder workflows.