{
  "schemaVersion": "1",
  "name": "aicmohq-mcp",
  "transport": "stdio",
  "command": "aicmo mcp",
  "authentication": {
    "type": "bearer",
    "env": "AICMOHQ_API_KEY",
    "alternatives": [
      "aicmo login",
      "AICMOHQ_TOKEN",
      "AICMO_API_TOKEN",
      "AICMO_TOKEN"
    ],
    "note": "All tools except credit_costs and capabilities_list require an authenticated API token."
  },
  "api": {
    "basePath": "/api/v1",
    "defaultBaseUrl": "https://app.aicmohq.com",
    "overrideEnv": "AICMOHQ_API_URL",
    "trustedOriginsEnv": "AICMOHQ_TRUSTED_API_ORIGINS",
    "localApiOptInEnv": "AICMOHQ_ALLOW_LOCAL_API",
    "note": "The MCP server sends authenticated requests to this API; configure the origin at startup and list custom origins in AICMOHQ_TRUSTED_API_ORIGINS. Local HTTP requires AICMOHQ_ALLOW_LOCAL_API=true. Tool-call token and baseUrl overrides are disabled by default."
  },
  "tools": [
    "capabilities_list",
    "strategy_run",
    "scout",
    "write",
    "credit_costs",
    "connections_list",
    "queue_list",
    "queue_get",
    "queue_delete",
    "queue_update",
    "queue_approve",
    "queue_publish",
    "queue_reject",
    "queue_schedule",
    "queue_proof",
    "reddit_status",
    "reddit_warmup",
    "command_chat",
    "command_sessions",
    "command_run",
    "command_status",
    "command_approve_step",
    "workspace_context",
    "workspace_get",
    "products_list",
    "products_create",
    "products_update",
    "products_archive",
    "artifacts_list",
    "listening_list",
    "listening_scan",
    "signals_scan",
    "trends_list",
    "opportunities_list",
    "opportunities_draft",
    "opportunities_queue",
    "geo_status",
    "geo_scan",
    "geo_checklist",
    "recommendations_list",
    "recommendations_generate",
    "recommendations_decide",
    "campaigns_list",
    "campaigns_create",
    "campaigns_get",
    "campaigns_update",
    "campaigns_archive",
    "workflows_start",
    "workflows_execute",
    "workflows_status",
    "tasks_list",
    "tasks_create",
    "tasks_get",
    "tasks_update",
    "tasks_approve",
    "tasks_execute",
    "approvals_list",
    "approvals_approve",
    "approvals_reject",
    "launch_prepare",
    "listings_list",
    "listings_create",
    "listings_update",
    "listings_archive",
    "prospects_scan",
    "inbox_list",
    "inbox_get",
    "outreach_draft",
    "crm_sync",
    "analytics_overview",
    "analytics_attribution",
    "analytics_pagespeed",
    "analytics_report",
    "feed_list",
    "feed_update",
    "ga4_pull",
    "github_repos",
    "connections_health",
    "agent_mode_get",
    "agent_mode_set",
    "billing_status",
    "me_get"
  ],
  "channelCapabilities": [
    {
      "id": "x",
      "discover": false,
      "draftable": true,
      "approve": true,
      "schedule": true,
      "publishable": true,
      "measure": false,
      "assisted": false,
      "mode": "api",
      "draftStatus": "limited",
      "approveStatus": "available",
      "scheduleStatus": "available",
      "publishStatus": "limited"
    },
    {
      "id": "linkedin",
      "discover": false,
      "draftable": true,
      "approve": true,
      "schedule": true,
      "publishable": true,
      "measure": false,
      "assisted": false,
      "mode": "api",
      "draftStatus": "limited",
      "approveStatus": "available",
      "scheduleStatus": "available",
      "publishStatus": "limited"
    },
    {
      "id": "reddit",
      "discover": true,
      "draftable": true,
      "approve": true,
      "schedule": true,
      "publishable": true,
      "measure": false,
      "assisted": false,
      "mode": "api",
      "discoverStatus": "limited",
      "draftStatus": "limited",
      "approveStatus": "available",
      "scheduleStatus": "available",
      "publishStatus": "limited"
    },
    {
      "id": "github",
      "discover": true,
      "draftable": true,
      "approve": false,
      "schedule": false,
      "publishable": false,
      "measure": false,
      "assisted": false,
      "mode": "manual",
      "discoverStatus": "limited",
      "draftStatus": "limited"
    },
    {
      "id": "email",
      "discover": false,
      "draftable": false,
      "approve": false,
      "schedule": false,
      "publishable": true,
      "measure": false,
      "assisted": false,
      "mode": "api",
      "publishStatus": "limited"
    },
    {
      "id": "hacker_news",
      "discover": true,
      "draftable": true,
      "approve": true,
      "schedule": false,
      "publishable": false,
      "measure": false,
      "assisted": true,
      "mode": "assisted",
      "discoverStatus": "limited",
      "draftStatus": "limited",
      "approveStatus": "available",
      "assistedStatus": "limited"
    },
    {
      "id": "product_hunt",
      "discover": false,
      "draftable": false,
      "approve": false,
      "schedule": false,
      "publishable": false,
      "measure": false,
      "assisted": true,
      "mode": "assisted",
      "assistedStatus": "limited"
    },
    {
      "id": "ga4",
      "discover": false,
      "draftable": false,
      "approve": false,
      "schedule": false,
      "publishable": false,
      "measure": false,
      "assisted": false,
      "mode": "manual",
      "measureStatus": "blocked"
    }
  ],
  "draftablePlatforms": [
    "x",
    "linkedin",
    "reddit",
    "github",
    "hacker_news"
  ],
  "publishablePlatforms": [
    "x",
    "linkedin",
    "reddit",
    "email"
  ],
  "assistedPlatforms": [
    "hacker_news",
    "product_hunt"
  ],
  "toolDetails": [
    {
      "name": "capabilities_list",
      "capability": "capabilities.list",
      "description": "List supported chatbot, CLI, and MCP capabilities with risk and confirmation metadata.",
      "scope": null,
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "strategy_run",
      "capability": "strategy.run",
      "description": "Run the full strategy loop: extract git context and generate ICP-validated drafts into the queue (LinkedIn, X, Reddit).",
      "scope": "strategy:run",
      "effect": "spend",
      "risk": "medium",
      "confirmation": "approval"
    },
    {
      "name": "scout",
      "capability": "scout.research",
      "description": "Find marketing opportunities based on product and keywords.",
      "scope": "strategy:run",
      "effect": "spend",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "write",
      "capability": "writer.generate",
      "description": "Draft content from a topic or from recent git commits. Set enqueue=true to put the draft in the queue for LinkedIn/X publish.",
      "scope": "strategy:run",
      "effect": "spend",
      "risk": "medium",
      "confirmation": "approval"
    },
    {
      "name": "credit_costs",
      "capability": "credits.costs",
      "description": "List the credit cost of each AICMOHQ agent action. Local, read-only; no auth required.",
      "scope": null,
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "connections_list",
      "capability": "connections.list",
      "description": "List connected platforms (check LinkedIn before publishing).",
      "scope": "connections:read",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "queue_list",
      "capability": "queue.list",
      "description": "List content queue items for the authenticated AICMOHQ account.",
      "scope": "queue:read",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "queue_get",
      "capability": "queue.get",
      "description": "Fetch one content queue item by id.",
      "scope": "queue:read",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "queue_delete",
      "capability": "queue.delete",
      "description": "Permanently delete a queued draft.",
      "scope": "queue:write",
      "effect": "delete",
      "risk": "medium",
      "confirmation": "approval"
    },
    {
      "name": "queue_update",
      "capability": "queue.update",
      "description": "Update the content of a queued draft.",
      "scope": "queue:write",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "queue_approve",
      "capability": "queue.approve",
      "description": "Approve a draft queue item so it can be published.",
      "scope": "queue:write",
      "effect": "internal_write",
      "risk": "medium",
      "confirmation": "approval"
    },
    {
      "name": "queue_publish",
      "capability": "queue.publish",
      "description": "Publish an approved queue item (requires platform connection, e.g. LinkedIn).",
      "scope": "publish",
      "effect": "external_write",
      "risk": "high",
      "confirmation": "approval"
    },
    {
      "name": "queue_reject",
      "capability": "queue.reject",
      "description": "Reject a draft so it will not publish.",
      "scope": "queue:write",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "queue_schedule",
      "capability": "queue.schedule",
      "description": "Schedule an approved queue item for cron publish (ISO timestamp).",
      "scope": "queue:write",
      "effect": "internal_write",
      "risk": "medium",
      "confirmation": "approval"
    },
    {
      "name": "queue_proof",
      "capability": "queue.proof",
      "description": "Save a live post URL for Hacker News or Product Hunt (no API). Then call queue_publish to mark the item published.",
      "scope": "queue:write",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "reddit_status",
      "capability": "reddit.status",
      "description": "Inspect the connected Reddit account's conservative warm-up stage and engagement limits.",
      "scope": "connections:read",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "reddit_warmup",
      "capability": "reddit.warmup",
      "description": "Use the connected Reddit OAuth account to find value-first threads. Saves opportunities only; never comments or publishes.",
      "scope": "strategy:run",
      "effect": "spend",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "command_chat",
      "capability": "command.chat",
      "description": "Send a natural-language mission to AICMOHQ Agent. Persists session memory and returns a proposed plan (approval-first; does not publish).",
      "scope": "strategy:run",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "command_sessions",
      "capability": "command.sessions",
      "description": "List recent AICMOHQ Agent chat sessions (shared memory with dashboard + CLI).",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "command_run",
      "capability": "command.run",
      "description": "Execute a proposed command plan by assistant message id. Rejects auto=true when approval is required. Streams NDJSON progress.",
      "scope": "strategy:run",
      "effect": "internal_write",
      "risk": "medium",
      "confirmation": "approval"
    },
    {
      "name": "command_status",
      "capability": "command.status",
      "description": "Inspect a durable command run and its approval-gated steps.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "command_approve_step",
      "capability": "command.approve_step",
      "description": "Approve one bound CMO step so execution resumes (expires in 15 minutes).",
      "scope": "strategy:run",
      "effect": "internal_write",
      "risk": "medium",
      "confirmation": "approval"
    },
    {
      "name": "workspace_context",
      "capability": "workspace.context",
      "description": "Read the workspace strategy context (product, ICPs, positioning, brand voice) agents ground drafts on.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "workspace_get",
      "capability": "workspace.get",
      "description": "Read the raw workspace record (company profile, positioning, ICPs) the agents ground on.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "products_list",
      "capability": "products.list",
      "description": "List the products in the workspace. Most agent work needs a product_id from here first.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "products_create",
      "capability": "products.create",
      "description": "Add a product to the workspace so scans and drafts can be scoped to it.",
      "scope": "workspace:write",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "products_update",
      "capability": "products.update",
      "description": "Update a product's name, tagline, description, or url.",
      "scope": "workspace:write",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "products_archive",
      "capability": "products.archive",
      "description": "Delete a product. Its past artifacts stay, but new work can no longer target it.",
      "scope": "workspace:write",
      "effect": "delete",
      "risk": "medium",
      "confirmation": "approval"
    },
    {
      "name": "artifacts_list",
      "capability": "artifacts.list",
      "description": "List agent artifacts (research briefs, drafts, reports) produced for this workspace.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "listening_list",
      "capability": "listening.list",
      "description": "List captured listening mentions — places the product or its category was discussed.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "listening_scan",
      "capability": "listening.scan",
      "description": "Run a listening scan for new mentions of the product. Costs credits.",
      "scope": "strategy:run",
      "effect": "spend",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "signals_scan",
      "capability": "signals.scan",
      "description": "Search external sources for demand signals matching a query.",
      "scope": "strategy:run",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "trends_list",
      "capability": "trends.list",
      "description": "Read trending topics for the day or week to ground timely content.",
      "scope": null,
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "opportunities_list",
      "capability": "opportunities.list",
      "description": "List scored growth opportunities derived from listening and signals.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "opportunities_draft",
      "capability": "opportunities.draft",
      "description": "Draft content for an opportunity. Costs credits; the draft still needs human approval to publish.",
      "scope": "strategy:run",
      "effect": "spend",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "opportunities_queue",
      "capability": "opportunities.queue",
      "description": "Move an opportunity's draft into the content queue as a pending item.",
      "scope": "queue:write",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "geo_status",
      "capability": "geo.status",
      "description": "Read current GEO (AI-citation) status: which AI answers mention the product.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "geo_scan",
      "capability": "geo.scan",
      "description": "Run a GEO scan to check whether AI assistants cite the product. Costs credits.",
      "scope": "geo:run",
      "effect": "spend",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "geo_checklist",
      "capability": "geo.checklist",
      "description": "Read the GEO readiness checklist (signal, status) plus which sources already cite the product.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "recommendations_list",
      "capability": "recommendations.list",
      "description": "List the CMO's current recommendations for the workspace.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "recommendations_generate",
      "capability": "recommendations.generate",
      "description": "Regenerate the recommendation set from the latest workspace data.",
      "scope": "strategy:run",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "recommendations_decide",
      "capability": "recommendations.decide",
      "description": "Accept or dismiss one recommendation. Accepting is what changes prioritization.",
      "scope": "strategy:run",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "campaigns_list",
      "capability": "campaigns.list",
      "description": "List campaigns (multi-step marketing graphs) in the workspace.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "campaigns_create",
      "capability": "campaigns.create",
      "description": "Create a campaign. Pass a node/edge graph to define its steps, or omit it for an empty draft.",
      "scope": "campaigns:write",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "campaigns_get",
      "capability": "campaigns.get",
      "description": "Read one campaign including its full step graph.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "campaigns_update",
      "capability": "campaigns.update",
      "description": "Update a campaign's name, status (draft/active/archived), or step graph.",
      "scope": "campaigns:write",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "campaigns_archive",
      "capability": "campaigns.archive",
      "description": "Delete a campaign.",
      "scope": "campaigns:write",
      "effect": "delete",
      "risk": "medium",
      "confirmation": "approval"
    },
    {
      "name": "workflows_start",
      "capability": "workflows.start",
      "description": "Start a background workflow (e.g. reddit_scan, hn_scan, content drafts) for a product. Costs credits.",
      "scope": "strategy:run",
      "effect": "spend",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "workflows_execute",
      "capability": "workflows.execute",
      "description": "Execute a named workflow synchronously with a small input map. Costs credits.",
      "scope": "strategy:run",
      "effect": "spend",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "workflows_status",
      "capability": "workflows.status",
      "description": "Read a running workflow's status and step results.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "tasks_list",
      "capability": "tasks.list",
      "description": "List agent tasks, optionally filtered by status or agent.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "tasks_create",
      "capability": "tasks.create",
      "description": "Queue a task for one of the agents (scout, writer, publisher, engage, analyst).",
      "scope": "strategy:run",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "tasks_get",
      "capability": "tasks.get",
      "description": "Read one task with its input, result, and error.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "tasks_update",
      "capability": "tasks.update",
      "description": "Update a task's status, result, or error.",
      "scope": "strategy:run",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "tasks_approve",
      "capability": "tasks.approve",
      "description": "Approve a task that is waiting for a human decision. Never approve your own work.",
      "scope": "strategy:run",
      "effect": "internal_write",
      "risk": "medium",
      "confirmation": "approval"
    },
    {
      "name": "tasks_execute",
      "capability": "tasks.execute",
      "description": "Run an approved task now instead of waiting for the scheduler.",
      "scope": "strategy:run",
      "effect": "internal_write",
      "risk": "medium",
      "confirmation": "approval"
    },
    {
      "name": "approvals_list",
      "capability": "approvals.list",
      "description": "List items waiting for a human approval decision.",
      "scope": "queue:read",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "approvals_approve",
      "capability": "approvals.approve",
      "description": "Record a human approval, which releases the item to publish. Agents must not call this on their own drafts.",
      "scope": "publish",
      "effect": "external_write",
      "risk": "high",
      "confirmation": "step_up"
    },
    {
      "name": "approvals_reject",
      "capability": "approvals.reject",
      "description": "Reject a pending approval so the item is never published.",
      "scope": "queue:write",
      "effect": "internal_write",
      "risk": "medium",
      "confirmation": "approval"
    },
    {
      "name": "launch_prepare",
      "capability": "launch.prepare",
      "description": "Prepare launch assets (Product Hunt / Hacker News copy) for a product. Submission stays human-assisted.",
      "scope": "strategy:run",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "listings_list",
      "capability": "listings.list",
      "description": "List directory launch listings (Product Hunt, Hacker News, directories) tracked for the workspace.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "listings_create",
      "capability": "listings.create",
      "description": "Track a new directory launch listing. Records intent only; submission stays human-assisted.",
      "scope": "workspace:write",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "listings_update",
      "capability": "listings.update",
      "description": "Update a tracked launch listing (status, URL, notes).",
      "scope": "workspace:write",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "listings_archive",
      "capability": "listings.archive",
      "description": "Remove a tracked launch listing.",
      "scope": "workspace:write",
      "effect": "delete",
      "risk": "medium",
      "confirmation": "approval"
    },
    {
      "name": "prospects_scan",
      "capability": "prospects.scan",
      "description": "Scan for prospects matching the workspace ICP. Costs credits.",
      "scope": "strategy:run",
      "effect": "spend",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "inbox_list",
      "capability": "inbox.list",
      "description": "List inbox conversations with prospects across email and DMs.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "inbox_get",
      "capability": "inbox.get",
      "description": "Read one contact's full inbox thread.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "outreach_draft",
      "capability": "outreach.draft",
      "description": "Draft an outreach message to a contact and queue it for human approval. Nothing is sent — approve and publish the queued item to actually deliver it.",
      "scope": "outreach:write",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "crm_sync",
      "capability": "crm.sync",
      "description": "Push a contact to the connected HubSpot CRM. Writes to an external system, so it needs approval.",
      "scope": "outreach:write",
      "effect": "external_write",
      "risk": "high",
      "confirmation": "approval"
    },
    {
      "name": "analytics_overview",
      "capability": "analytics.overview",
      "description": "Read aggregate performance over the last N days: totals per metric, per platform, and queue status.",
      "scope": "analytics:read",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "analytics_attribution",
      "capability": "analytics.attribution",
      "description": "Read attribution: which content and channels drove signups.",
      "scope": "analytics:read",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "analytics_pagespeed",
      "capability": "analytics.pagespeed",
      "description": "Run a PageSpeed check on a public url and return its performance scores.",
      "scope": "analytics:read",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "analytics_report",
      "capability": "analytics.report",
      "description": "Read the rolled-up performance report for the last N days (default 7).",
      "scope": "analytics:read",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "feed_list",
      "capability": "feed.list",
      "description": "Read the agent activity feed — what the agents did and what needs attention.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "feed_update",
      "capability": "feed.update",
      "description": "Mark one feed item as read or acted on.",
      "scope": "strategy:run",
      "effect": "internal_write",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "ga4_pull",
      "capability": "ga4.pull",
      "description": "Pull the latest metrics from the connected GA4 property.",
      "scope": "analytics:read",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "github_repos",
      "capability": "github.repos",
      "description": "List repos visible through the connected GitHub account, for shipping-log content.",
      "scope": "connections:read",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "connections_health",
      "capability": "connections.health",
      "description": "Check each connected platform's token health before trying to publish.",
      "scope": "connections:read",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "agent_mode_get",
      "capability": "agent_mode.get",
      "description": "Read the publishing mode (approve or autonomous) plus any per-agent overrides.",
      "scope": "strategy:run",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "agent_mode_set",
      "capability": "agent_mode.set",
      "description": "Change the publishing mode. Switching to autonomous removes the human approval gate, so it needs a human.",
      "scope": "settings:write",
      "effect": "internal_write",
      "risk": "high",
      "confirmation": "step_up"
    },
    {
      "name": "billing_status",
      "capability": "billing.status",
      "description": "Read the active plan, credit balance, and renewal date.",
      "scope": "billing:read",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    },
    {
      "name": "me_get",
      "capability": "me.get",
      "description": "Read the authenticated identity: user id, token type, and granted scopes.",
      "scope": "billing:read",
      "effect": "read",
      "risk": "low",
      "confirmation": "none"
    }
  ],
  "errors": {
    "mediaType": "application/json",
    "envelope": {
      "isError": true,
      "content": [
        {
          "type": "text",
          "text": "JSON error object"
        }
      ]
    },
    "error": {
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": "stable machine-readable code",
        "message": "human-readable explanation",
        "status": "upstream HTTP status when applicable",
        "retryable": "false unless retrying unchanged may succeed"
      }
    },
    "examples": {
      "missingAuth": {
        "error": {
          "code": "missing_auth_token",
          "message": "Missing auth token. Run `aicmo login` or set AICMOHQ_API_KEY in the MCP server env.",
          "retryable": false
        }
      },
      "invalidArguments": {
        "error": {
          "code": "invalid_arguments",
          "message": "Missing required argument(s): id",
          "retryable": false
        }
      },
      "apiFailure": {
        "error": {
          "code": "http_503",
          "message": "API error 503: request failed",
          "status": 503,
          "retryable": true
        }
      }
    }
  },
  "links": {
    "humanDocs": "/mcp",
    "apiDocs": "/mcp.json"
  }
}