{
  "schema_version": "2.0",
  "version": "2.0.0",
  "name": "ReachOut",
  "description": "Agent-driven marketing automation. Contacts, campaigns, segments and analytics exposed as MCP tools. Cloudflare-native. Legacy data tools are organization-scoped by API key; delegated MCP OAuth names the organization or project explicitly on every call. Responses identify the organization addressed by the call.",
  "homepage": "https://usereachout.com",
  "docs": "https://usereachout.com/llms-full.txt",
  "pricing": "https://usereachout.com/pricing",
  "contact": "hello@usereachout.com",
  "publisher": {
    "name": "Reach Out Labs GmbH",
    "url": "https://reachoutlabs.ch"
  },
  "mcp": {
    "endpoint": "https://api.usereachout.com/mcp",
    "transports": ["http", "sse"],
    "version": "2.0.0",
    "auth": {
      "type": "OAuth 2.1 authorization code with PKCE S256",
      "description": "Control-plane tools use a delegated user access token with the exact MCP audience and explicit consent. Access tokens are short-lived; refresh tokens rotate. Organization API keys remain available only for legacy organization-scoped data tools and get_organization_overview, where they are limited to explicit project grants."
    },
    "conventions": {
      "organization_scope": "explicit for delegated control-plane tools",
      "project_scope": "explicit when a tool addresses a project",
      "response_envelope": "Every control-plane response includes the organization identity; project-addressed responses also include the resolved project identity.",
      "active_context": false
    }
  },
  "tools": [
    {
      "name": "get_current_organization",
      "description": "Return the organization fixed to this legacy MCP API key.",
      "inputs": {},
      "outputs": {
        "organization": "object"
      },
      "side_effects": "none",
      "idempotent": true
    },
    {
      "name": "list_organizations",
      "description": "Return only the organization fixed to this legacy MCP API key.",
      "inputs": {},
      "outputs": {
        "organizations": "array"
      },
      "side_effects": "none",
      "idempotent": true
    },
    {
      "inventoryId": "organizations.create",
      "name": "create_organization",
      "delegatedScopes": ["mcp:write", "mcp:governance"],
      "arguments": ["name", "slug", "idempotencyKey"],
      "authority": "delegated user; organization creation rollout"
    },
    {
      "inventoryId": "organizations.provisioning.get",
      "name": "get_organization_provisioning",
      "delegatedScopes": ["mcp:read"],
      "arguments": ["organizationId"],
      "authority": "delegated organization member"
    },
    {
      "inventoryId": "organizations.provisioning.retry",
      "name": "retry_organization_provisioning",
      "delegatedScopes": ["mcp:write", "mcp:governance"],
      "arguments": ["organizationId"],
      "authority": "delegated organization owner or admin"
    },
    {
      "inventoryId": "organizations.overview.get",
      "name": "get_organization_overview",
      "delegatedScopes": ["mcp:read"],
      "arguments": ["organizationId"],
      "authority": "delegated member, or API key limited to explicit project grants"
    },
    {
      "inventoryId": "organizations.dashboard.get",
      "name": "get_organization_dashboard_stats",
      "delegatedScopes": ["mcp:read"],
      "arguments": ["organizationId"],
      "authority": "delegated member, or API key limited to explicit project grants",
      "description": "Return dashboard metrics, priorities and recent activity for active authorized projects, with per-block availability."
    },
    {
      "inventoryId": "projects.list",
      "name": "list_projects",
      "delegatedScopes": ["mcp:read"],
      "arguments": ["organizationId"],
      "authority": "delegated organization member"
    },
    {
      "inventoryId": "projects.get",
      "name": "get_project",
      "delegatedScopes": ["mcp:read"],
      "arguments": ["projectId"],
      "authority": "delegated project member"
    },
    {
      "inventoryId": "projects.create",
      "name": "create_project",
      "delegatedScopes": ["mcp:write", "mcp:governance"],
      "arguments": ["organizationId", "name", "idempotencyKey"],
      "authority": "delegated organization owner or admin; multi-project rollout"
    },
    {
      "inventoryId": "projects.update",
      "name": "update_project",
      "delegatedScopes": ["mcp:write", "mcp:governance"],
      "arguments": ["projectId", "name"],
      "authority": "delegated project admin"
    },
    {
      "inventoryId": "projects.archive",
      "name": "archive_project",
      "delegatedScopes": ["mcp:write", "mcp:governance"],
      "arguments": ["projectId"],
      "authority": "delegated project admin"
    },
    {
      "inventoryId": "projects.restore",
      "name": "restore_project",
      "delegatedScopes": ["mcp:write", "mcp:governance"],
      "arguments": ["projectId"],
      "authority": "delegated project admin"
    },
    {
      "inventoryId": "projects.set-default",
      "name": "set_default_project",
      "delegatedScopes": ["mcp:write", "mcp:governance"],
      "arguments": ["projectId"],
      "authority": "delegated organization owner or admin"
    },
    {
      "inventoryId": "projects.provisioning.get",
      "name": "get_project_provisioning",
      "delegatedScopes": ["mcp:read"],
      "arguments": ["projectId"],
      "authority": "delegated project member"
    },
    {
      "inventoryId": "projects.provisioning.retry",
      "name": "retry_project_provisioning",
      "delegatedScopes": ["mcp:write", "mcp:governance"],
      "arguments": ["projectId"],
      "authority": "delegated project admin"
    },
    {
      "inventoryId": "project-members.list",
      "name": "list_project_members",
      "delegatedScopes": ["mcp:read"],
      "arguments": ["projectId"],
      "authority": "delegated project member"
    },
    {
      "inventoryId": "project-members.grant",
      "name": "grant_project_member",
      "delegatedScopes": ["mcp:write", "mcp:governance"],
      "arguments": ["projectId", "memberId", "role"],
      "authority": "delegated project admin"
    },
    {
      "inventoryId": "project-members.update-role",
      "name": "update_project_member_role",
      "delegatedScopes": ["mcp:write", "mcp:governance"],
      "arguments": ["projectId", "memberId", "role"],
      "authority": "delegated project admin"
    },
    {
      "inventoryId": "project-members.revoke",
      "name": "revoke_project_member",
      "delegatedScopes": ["mcp:write", "mcp:governance"],
      "arguments": ["projectId", "memberId"],
      "authority": "delegated project admin"
    },
    {
      "inventoryId": "api-key-project-grants.list",
      "name": "list_api_key_project_grants",
      "delegatedScopes": ["mcp:read"],
      "arguments": ["organizationId", "apiKeyId"],
      "authority": "delegated organization admin"
    },
    {
      "inventoryId": "api-key-project-grants.grant",
      "name": "grant_api_key_project",
      "delegatedScopes": ["mcp:write", "mcp:governance"],
      "arguments": ["apiKeyId", "projectId", "role"],
      "authority": "delegated project admin"
    },
    {
      "inventoryId": "api-key-project-grants.update-role",
      "name": "update_api_key_project_role",
      "delegatedScopes": ["mcp:write", "mcp:governance"],
      "arguments": ["apiKeyId", "projectId", "role"],
      "authority": "delegated project admin"
    },
    {
      "inventoryId": "api-key-project-grants.revoke",
      "name": "revoke_api_key_project",
      "delegatedScopes": ["mcp:write", "mcp:governance"],
      "arguments": ["apiKeyId", "projectId"],
      "authority": "delegated project admin"
    },
    {
      "name": "list_contacts",
      "description": "List contacts in the organization associated with this legacy API key, sorted newest first.",
      "inputs": {
        "status": {
          "type": "string",
          "optional": true,
          "enum": ["ACTIVE", "UNSUBSCRIBED", "BOUNCED", "SUPPRESSED"]
        },
        "limit": {
          "type": "integer",
          "optional": true,
          "default": 25,
          "max": 100
        }
      },
      "outputs": {
        "contacts": "array"
      },
      "side_effects": "none",
      "idempotent": true
    },
    {
      "name": "get_contact",
      "description": "Get a single contact by ID in the organization associated with this legacy API key.",
      "inputs": {
        "contactId": {
          "type": "string",
          "required": true
        }
      },
      "outputs": {
        "contact": "object"
      },
      "side_effects": "none",
      "idempotent": true
    },
    {
      "name": "create_contact",
      "description": "Create a new contact in the organization associated with this legacy API key.",
      "inputs": {
        "email": {
          "type": "string",
          "required": true
        },
        "firstName": {
          "type": "string",
          "optional": true
        },
        "lastName": {
          "type": "string",
          "optional": true
        },
        "company": {
          "type": "string",
          "optional": true
        }
      },
      "outputs": {
        "contact": "object"
      },
      "side_effects": "writes contact record",
      "idempotent": false
    },
    {
      "name": "list_campaigns",
      "description": "List campaigns in the organization associated with this legacy API key.",
      "inputs": {
        "status": {
          "type": "string",
          "optional": true,
          "enum": ["DRAFT", "SCHEDULED", "SENDING", "SENT", "PAUSED", "ARCHIVED"]
        },
        "limit": {
          "type": "integer",
          "optional": true,
          "default": 25,
          "max": 100
        }
      },
      "outputs": {
        "campaigns": "array"
      },
      "side_effects": "none",
      "idempotent": true
    },
    {
      "name": "get_campaign_stats",
      "description": "Get delivery + engagement stats for a campaign in the organization associated with this legacy API key.",
      "inputs": {
        "campaignId": {
          "type": "string",
          "required": true
        }
      },
      "outputs": {
        "stats": "object"
      },
      "side_effects": "none",
      "idempotent": true
    },
    {
      "name": "list_segments",
      "description": "List segments in the organization associated with this legacy API key.",
      "inputs": {},
      "outputs": {
        "segments": "array"
      },
      "side_effects": "none",
      "idempotent": true
    },
    {
      "name": "get_analytics",
      "description": "Get analytics summaries (up to 30 rows) for the organization associated with this legacy API key.",
      "inputs": {
        "type": {
          "type": "string",
          "optional": true,
          "enum": ["daily", "weekly", "monthly"]
        }
      },
      "outputs": {
        "rows": "array"
      },
      "side_effects": "none",
      "idempotent": true
    },
    {
      "name": "send_campaign",
      "description": "Trigger sending a campaign in the organization associated with this legacy API key. The campaign must have a segment assigned.",
      "inputs": {
        "campaignId": {
          "type": "string",
          "required": true
        }
      },
      "outputs": {
        "job": "object"
      },
      "side_effects": "enqueues email send job; consumes email quota",
      "idempotent": false
    }
  ]
}
