Skip to main content

Agent Access (MCP)

Connect your own AI agents to the platform over the Model Context Protocol. A connected agent can analyse campaign results, build segments, operate journeys and schedule notifications — with every write held for your approval before it takes effect.

Plan availability

MCP agent access is available on Premium (read & analytics tools, up to 2 agent applications) and Enterprise (all tools, unlimited applications, custom approval policies).

Connect an agent

  1. In the dashboard, open Agent → Applications → New agent application (requires the owner or admin role — see Team & Roles).
  2. Pick the scopes the agent needs (write scopes require Enterprise) and create the application. The MCP key is shown once — store it in your agent's configuration; rotate it if lost.
  3. Point any MCP-compatible runner at the server:
{
"mcpServers": {
"push-notification-system": {
"type": "http",
"url": "https://api.hober.io/v1/mcp",
"headers": { "Authorization": "Bearer hober_mcp_..." }
}
}
}

The server speaks Streamable HTTP and is stateless: every request is authenticated with the key, and the agent only ever sees the tools its scopes allow.

Human-in-the-loop approval

Each application has an approval mode:

ModeBehaviour
writes_only (default)Reads run immediately; writes wait for your approval
strictEvery tool call waits for approval
customPer-tool overrides on top of the writes_only default
offEverything runs immediately

When a gated call arrives, the agent receives {"status": "pending_approval", "approval_id": ...} and the request appears in Agent → Approval queue (also emitted as an agent.approval_requested webhook). Approve to execute exactly what the agent submitted, or reject with a reason the agent reads on its next poll of get_approval. Pending approvals expire after the application's TTL (default 24 h) and count as rejections.

Approvals are executed with idempotency keys, so approving can never double-send a campaign; every tool invocation — executed, pending, rejected, expired or failed — lands in the append-only Audit log.

What agents can do

  • Campaigns: list, inspect results, check quota; schedule and cancel (gated).
  • Segments: list, preview rule sets, create (gated). recommend_segment suggests starting rules for re-engagement, win-back and upsell goals.
  • Journeys: inspect definitions and runs; activate and pause (gated).
  • Insights: conversion funnels, attribution summaries, campaign comparisons, send-time recommendations (deterministic, sample-size-honest).
  • Guardrails: get_guardrail_posture explains your quiet hours and enforcement. Agent sends pass the same consent, frequency-cap and quiet-hours checks as every other send — no agent can bypass them.

Agents also get resources (hober://campaigns/recent, hober://segments/catalog, …) for context and prompts (campaign_brief, results_report, …) that walk them through complete workflows, approval mechanics included.

Teach your agent Hober: the skill

Connecting the MCP server gives an agent access; the Hober skill gives it expertise — the workflows, approval discipline, and domain vocabulary a practiced operator follows (campaign golden paths, the segment rule grammar with worked examples, in-app authoring, diagnostics).

The skill lives in the repository at skills/hober and is versioned alongside the MCP server so it never drifts from the tool surface.

Install:

  • Claude Code: copy the skills/hober folder into your project's .claude/skills/ (or ~/.claude/skills/ for all projects).
  • claude.ai / Claude desktop: zip the skills/hober folder and upload it under Settings → Capabilities → Skills.
  • Any agent runtime that supports Agent Skills: point it at the folder — SKILL.md is the entry point.

Webhooks and callbacks

Subscribe webhook endpoints to agent.approval_requested, agent.approval_expired and agent.tool_executed to follow agent activity from your own systems (same HMAC signing as delivery webhooks). Optionally set a callback URL on the application: decisions are POSTed to it so agents don't need to poll — treat the callback as a wake-up and confirm via get_approval.