mxAURA Developer Center

MCP guide

https://mcp.mxaura.ai/mcp is a remote Model Context Protocol server. Point an MCP-capable assistant at it, sign in, and the assistant can read (and, with the right scopes, act on) your mxAURA account through 21 tools.

It speaks MCP protocol 2025-06-18 over streamable HTTP, authenticates with OAuth 2.1 (PKCE, dynamic client registration), and every call goes through the same public API as an API key would — same scopes, same rate limits, same tenant boundary.

Connect

Claude.ai (web / desktop app)

Settings → Connectors → Add custom connector → URL https://mcp.mxaura.ai/mcp → Connect. A browser window opens to auth.mxaura.ai; sign in to mxAURA, review the scopes, approve. Done.

Claude Code

claude mcp add --transport http mxaura https://mcp.mxaura.ai/mcp

then /mcp inside a session to authenticate.

Cursor / other MCP clients

Add a server of type "streamable HTTP" (or "remote") with the URL above. If the client cannot do OAuth itself, use the mcp-remote bridge:

{ "mcpServers": { "mxaura": { "command": "npx", "args": ["-y", "mcp-remote", "https://mcp.mxaura.ai/mcp"] } } }

What happens underneath

  1. The client fetches https://mcp.mxaura.ai/.well-known/oauth-protected-resource and learns the authorization server is https://auth.mxaura.ai.
  2. It reads https://auth.mxaura.ai/.well-known/oauth-authorization-server, registers itself at /register (RFC 7591), and opens /authorize with a PKCE S256 challenge.
  3. You sign in to mxAURA (2FA if enabled) and approve the scopes shown.
  4. The client exchanges the code at /token and gets an access token (mxa_oat_…, 1 hour) and a refresh token (30 days).

No secrets are typed anywhere. To disconnect, remove the connector in the client; its access token expires within the hour and cannot refresh. Removing an integration from mxAURA's side is on the roadmap.

Scopes and the support profile

A client that asks for no specific scopes gets the support profile:

components.read brandings.read pools.read campaigns.read flows.read
hubs.read articles.read identity.read dispatch.read

Every read, nothing that sends, publishes or spends. A client may request it by name (scope=support) or ask for specific scopes; the consent screen shows exactly what will be granted. tools/list only returns the tools the token can call, so an assistant never sees a tool it cannot use.

The tools

Tool Scope What it does
get_me any Who the token is: account, scopes
list_components, get_component components.read Messages, headers, summaries, signatures, senders, templates
list_pools, get_pool, get_pool_messages pools.read Pools and the ordered messages composed into them
compose_message pools.write Compose a message into a pool
list_campaigns, get_campaign campaigns.read Campaigns
simulate_campaign campaigns.read The full journey a contact would receive — read-only, the same engine dispatch uses
list_flows, get_flow flows.read Flows with enrollment counts
enroll_contact enrollments.write Enroll a HubSpot contact — sends real email, capped per hour
get_dispatch_log dispatch.read What was sent, to whom, with what result
list_hubs, get_hub, get_hub_stats hubs.read Hubs, their settings and embed details, 30-day traffic
list_articles, get_article articles.read Articles: metadata, status, placements, SEO, stats
get_identity identity.read The messaging identity (frameworks)
list_brandings brandings.read Brandings

Each tool's description and input schema are served by tools/list; the assistant reads them directly.

What the model can and cannot see

Bodies are never returned to the model. Message HTML, article markdown, layout templates, personal messages come back as their length (html_chars: 2140) instead of their text. Content a user wrote is untrusted input to a model: a hub article must never be able to instruct an assistant. A workflow that truly needs a body fetches it over the REST API.

Everything else — names, ids, statuses, positions, stats, reasons — comes back as structured JSON.

Limits

MCP calls are API calls. The token's burst (25 / 10 s), per-minute (120) and account (600 / min) limits apply, and the assistant is told when it hits one (rate_limited (HTTP 429): …) so it can back off rather than crash the session. Tool results are truncated at 100 KB.

Typical questions it can answer

Troubleshooting

Symptom Cause Fix
Client says "unauthorized" after connecting Access token expired and the client did not refresh Reconnect; most clients refresh silently
A tool is missing The token lacks its scope Reconnect and approve the scope, or accept that support is read-only
enroll_contact returns enrollment_cap Hourly cap reached Wait for Retry-After
"server did not respond" Network, or the client is using a stdio transport Use a streamable-HTTP transport or mcp-remote

https://mcp.mxaura.ai/health reports the server and protocol version without authentication.