{
  "name": "PPL",
  "description": "The verified-consent human layer for AI marketing. Browse verified people by their published fields, check license and consent state, read a biocode mark, and verify a per-asset attestation. Licensing is scoped, time-boxed and renewable \u2014 never perpetual \u2014 and a revoked mark or credential reads as revoked at the source.",
  "version": "1.0.0",
  "protocolVersion": "0.3",
  "supportedInterfaces": [
    {
      "url": "https://mcp.therealppl.com/a2a/v1",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "0.3"
    }
  ],
  "provider": {
    "organization": "PPL",
    "url": "https://therealppl.com"
  },
  "documentationUrl": "https://therealppl.com/auth.md",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "extendedAgentCard": false
  },
  "defaultInputModes": [
    "application/json",
    "text/plain"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "browse_candidates",
      "name": "Browse verified people",
      "description": "Find verified people by their published fields only \u2014 category, the uses they are open to, a short blurb. Never returns contact details, biometrics or any other PII.",
      "tags": [
        "discovery",
        "casting",
        "consent"
      ],
      "examples": [
        "Find verified people open to pharma testimonial work",
        "Who is available for a diabetes campaign in the US?"
      ]
    },
    {
      "id": "check_license_status",
      "name": "Check license and consent state",
      "description": "The live state of a license: whether new work may be generated, whether pieces already delivered still serve, and when it ends. Default-deny \u2014 no license reads as no.",
      "tags": [
        "licensing",
        "consent",
        "compliance"
      ],
      "examples": [
        "Is license L-1234 still active?",
        "May we generate new work for this person?"
      ]
    },
    {
      "id": "get_biocode",
      "name": "Read a biocode mark",
      "description": "The public biocode projection for a person's mark. Revocation truth: a revoked mark returns should_render=false and no drawable geometry, so the proof cannot outlive the consent.",
      "tags": [
        "provenance",
        "biocode",
        "revocation"
      ],
      "examples": [
        "Show the biocode for this member",
        "Is this mark still renderable?"
      ]
    },
    {
      "id": "verify_credential",
      "name": "Verify an asset attestation",
      "description": "Verify a per-asset attestation: who consented, under which scoped license, and whether it still holds. A revoked credential reads invalid at the source.",
      "tags": [
        "provenance",
        "attestation",
        "compliance"
      ],
      "examples": [
        "Verify the credential on this ad",
        "Is this attestation still valid?"
      ]
    },
    {
      "id": "search_people",
      "name": "Find people who consent to a use",
      "description": "People whose own consent permits an intended use, medium, channel and territory. Returns previews only, never source media.",
      "tags": [
        "discovery",
        "consent",
        "licensing"
      ],
      "examples": [
        "Who consents to image social ads on Meta in the US?"
      ]
    },
    {
      "id": "get_license_terms",
      "name": "Read a person's licence terms",
      "description": "Status, allowed uses, restrictions, maximum term and the terms version for one person. Every term is time-boxed and renewable; never perpetual.",
      "tags": [
        "licensing",
        "consent"
      ],
      "examples": [
        "What may we license from this person, and for how long?"
      ]
    },
    {
      "id": "quote_license",
      "name": "Get a binding quote",
      "description": "A binding, expiring price for a scoped use, pinned to the terms version and the rate-card version. A quote grants nothing; a denial names the rule.",
      "tags": [
        "licensing",
        "pricing"
      ],
      "examples": [
        "Quote 3 images for a 6-month Meta campaign in the US"
      ]
    },
    {
      "id": "get_invite_status",
      "name": "Check a person you invited",
      "description": "How far a person your brand invited has got: identity, personhood, terms, signature, and the terms version. Only your own invites; no biometric data.",
      "tags": [
        "onboarding",
        "consent"
      ],
      "examples": [
        "Has the person we invited finished verifying?"
      ]
    },
    {
      "id": "get_license",
      "name": "Check a licence",
      "description": "Your own licence: status, remaining usage, expiry and the signed receipt; if the person revoked it, the date your kit copies must be deleted by.",
      "tags": [
        "licensing",
        "consent"
      ],
      "examples": [
        "Is our licence for Maya still active, and how many images are left?"
      ]
    },
    {
      "id": "list_projects",
      "name": "List your projects",
      "description": "Your brand's projects, as on the brand dashboard: stage, budget, committed spend.",
      "tags": [
        "projects"
      ],
      "examples": [
        "How are my projects doing?"
      ]
    },
    {
      "id": "get_project",
      "name": "Open a project",
      "description": "One project with every section: stage, people, delivery, documents (view or download), finance and notes.",
      "tags": [
        "projects"
      ],
      "examples": [
        "Show me the spring clinic campaign."
      ]
    },
    {
      "id": "get_brief_status",
      "name": "Check a brief",
      "description": "A filed brief: how many people already fit, whether an open call is running, and who raised a hand.",
      "tags": [
        "projects",
        "discovery"
      ],
      "examples": [
        "Any news on the pharmacist brief?"
      ]
    },
    {
      "id": "ways_in",
      "name": "Ways to find people",
      "description": "Search people on PPL, bring someone you know, or brief PPL.",
      "tags": [
        "discovery"
      ],
      "examples": [
        "I need someone for a new campaign."
      ]
    },
    {
      "id": "check_consent",
      "name": "Check consent before a quote",
      "description": "Whether a person's standing preferences cover your company (read from your brand account, never from the request) and an intended use, per medium, channel, territory and term. Read-only: creates no quote.",
      "tags": [
        "consent",
        "licensing"
      ],
      "examples": [
        "Does Maya's consent cover our clinic for image and video social ads in the US?"
      ]
    },
    {
      "id": "get_person",
      "name": "Meet one person",
      "description": "One person: the photos they chose to show, their name and noun, what they're open to and not for, where, and a from-price. Someone with no photo isn't shown.",
      "tags": [
        "discovery",
        "consent"
      ],
      "examples": [
        "Show me Maya's photos and what she's open to"
      ]
    },
    {
      "id": "list_generators",
      "name": "Pick where it renders",
      "description": "The generators your images and video can render in, and your saved defaults. Voice is always rendered by PPL.",
      "tags": [
        "licensing",
        "rendering"
      ],
      "examples": [
        "Which generators can make video?"
      ]
    },
    {
      "id": "get_payment_status",
      "name": "Check how you pay",
      "description": "Your card on file (brand and last 4 only), wallet balance, the page to save a card, and whether a quote's hold is placed.",
      "tags": [
        "payment"
      ],
      "examples": [
        "Do we have a card saved?"
      ]
    },
    {
      "id": "get_ticket",
      "name": "Check a ticket",
      "description": "One status for a ticket, from quote to hold, licence, measured outputs and settlement.",
      "tags": [
        "licensing",
        "payment"
      ],
      "examples": [
        "Any news on the Maya ticket?"
      ]
    },
    {
      "id": "get_scope_request",
      "name": "Check an ask to broaden terms",
      "description": "Your ask to a person to broaden their terms for a job: whether they accepted, countered or passed, the middle if one was offered, and when it expires.",
      "tags": [
        "licensing",
        "consent"
      ],
      "examples": [
        "Any news from Maya on the video ask?"
      ]
    }
  ],
  "securitySchemes": {
    "ppl_oauth": {
      "type": "oauth2",
      "description": "Authorization code + PKCE (S256), public client. The token is the signed-in person's own session; PPL issues no service credential.",
      "flows": {
        "authorizationCode": {
          "authorizationUrl": "https://dots.therealppl.com/oauth/authorize",
          "tokenUrl": "https://dots.therealppl.com/oauth/token",
          "scopes": {}
        }
      }
    }
  },
  "securityRequirements": [
    {
      "schemes": {
        "ppl_oauth": {
          "list": []
        }
      }
    }
  ]
}
