Hosted privacy policy URLs for apps, sites, stores and lead forms, created by an agent in one call
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional. 'Bearer ppu_...' Agent API key; without it free resource types go live and paid types return a Stripe Checkout link.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Confirm whether a hosted privacy policy is live. Returns status (active or not_found), liveUrl, and updatedAt when live.
Tool list last changed Oct 25, 2026.
Confirm whether a hosted privacy policy is live. Returns status (active or not_found), liveUrl, and updatedAt when live.
| Argument | Type | Description |
|---|---|---|
| companySlug* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"companySlug"
],
"properties": {
"companySlug": {
"type": "string",
"maxLength": 60,
"minLength": 1
}
}
}Generate and host a privacy policy for a business, app, store or site and return its stable HTTPS URL. Free resource types and Agent API key holders get liveUrl at once; other types get a Stripe Checkout link ($29/year) for a human to pay, plus the pendingUrl that goes live after payment. Repeating a call with the same inputs (or the same idempotencyKey) within 24 hours returns the first result.
| Argument | Type | Description |
|---|---|---|
| ccpa | boolean | Include CCPA/CPRA (California) sections. |
| gdpr | boolean | Include GDPR (EU/UK) sections. |
| coppa | boolean | Include COPPA (children under 13) sections. |
| email* | string | Owner contact email. Receives the live link and manages the URL later. |
| caloppa | boolean | Include CalOPPA sections. |
| companyName* | string | Business, app or site name as it should appear in the policy. |
| companySlug | string | URL slug (a-z, 0-9, hyphens). Defaults to a slug of companyName. |
| resourceType* | string | What the policy covers. See list_resource_types for which are free. |
| idempotencyKey | string | Your own retry key. Defaults to a hash of the other inputs. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"companyName",
"email",
"resourceType"
],
"properties": {
"ccpa": {
"type": "boolean",
"description": "Include CCPA/CPRA (California) sections."
},
"gdpr": {
"type": "boolean",
"description": "Include GDPR (EU/UK) sections."
},
"coppa": {
"type": "boolean",
"description": "Include COPPA (children under 13) sections."
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"description": "Owner contact email. Receives the live link and manages the URL later."
},
"caloppa": {
"type": "boolean",
"description": "Include CalOPPA sections."
},
"companyName": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Business, app or site name as it should appear in the policy."
},
"companySlug": {
"type": "string",
"pattern": "^[a-z0-9](?:[a-z0-9-]{0,58}[a-z0-9])?$",
"description": "URL slug (a-z, 0-9, hyphens). Defaults to a slug of companyName."
},
"resourceType": {
"enum": [
"Mobile App",
"Website",
"SaaS/Web App",
"E-commerce Store",
"Browser Extension",
"Desktop App",
"API/SDK",
"IoT/Device",
"Lead Form/Landing Page",
"Ad or Campaign Page"
],
"type": "string",
"description": "What the policy covers. See list_resource_types for which are free."
},
"idempotencyKey": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Your own retry key. Defaults to a hash of the other inputs."
}
}
}Apple privacy manifest for the app's own code: the data the app itself collects (ownData ids), its own tracking (with tracking domains), the required-reason APIs its code uses with Apple's reason codes, and optionally SDKs linked statically without their own manifest. SDKs with their own manifest are covered by theirs (Apple). Categories: NSPrivacyAccessedAPICategoryFileTimestamp (DDA9.1, C617.1, 3B52.1); NSPrivacyAccessedAPICategorySystemBootTime (35F9.1, 8FFB.1, 3D61.1); NSPrivacyAccessedAPICategoryDiskSpace (85F4.1, E174.1, 7D9E.1, B728.1); NSPrivacyAccessedAPICategoryActiveKeyboards (3EC4.1, 54BD.1); NSPrivacyAccessedAPICategoryUserDefaults (CA92.1, 1C8F.1, AC6B.1). Returns plist (XML), manifest (the same as JSON) and problems (empty when App Store Connect should accept it).
| Argument | Type | Description |
|---|---|---|
| ownData | array | |
| settings | object | |
| tracking | object | |
| apiReasons | object | |
| staticSdks | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"ownData": {
"type": "array",
"items": {
"enum": [
"account_email",
"account_name",
"phone",
"address",
"user_id",
"precise_location",
"coarse_location",
"photos_videos",
"audio",
"messages",
"user_content",
"support",
"contacts",
"health",
"fitness",
"search",
"purchases",
"gameplay"
],
"type": "string"
},
"maxItems": 30
},
"settings": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "boolean"
}
},
"tracking": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"domains": {
"type": "array",
"items": {
"type": "string",
"maxLength": 253
},
"maxItems": 30
},
"enabled": {
"type": "boolean"
}
}
},
"apiReasons": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "array",
"items": {
"type": "string",
"maxLength": 10
},
"maxItems": 5
}
},
"staticSdks": {
"type": "array",
"items": {
"enum": [
"firebase-analytics",
"firebase-crashlytics",
"firebase-auth",
"firebase-messaging",
"admob",
"meta",
"revenuecat",
"onesignal",
"sentry",
"stripe",
"mixpanel",
"amplitude",
"google-sign-in",
"sign-in-with-apple",
"appsflyer"
],
"type": "string"
},
"maxItems": 30
}
}
}Answers for Apple's App Privacy details and Google Play's Data safety form from the SDKs an app uses, their settings and the data the app collects itself. Every answer carries the vendor or store page it comes from. Settings are yes/no questions per SDK (ids like ga.user_id, app.iap); unknown ids are rejected. SDK ids: firebase-analytics, firebase-crashlytics, firebase-auth, firebase-messaging, admob, meta, revenuecat, onesignal, sentry, stripe, mixpanel, amplitude, google-sign-in, sign-in-with-apple, appsflyer. Returns wizardUrl, a privacy-policy wizard link with the same services and personal data filled in. A starting point to check, not legal advice.
| Argument | Type | Description |
|---|---|---|
| sdks* | array | |
| ownData | array | |
| settings | object | |
| platforms* | array | |
| deletionRequest | boolean | |
| encryptedInTransit | boolean |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"platforms",
"sdks"
],
"properties": {
"sdks": {
"type": "array",
"items": {
"enum": [
"firebase-analytics",
"firebase-crashlytics",
"firebase-auth",
"firebase-messaging",
"admob",
"meta",
"revenuecat",
"onesignal",
"sentry",
"stripe",
"mixpanel",
"amplitude",
"google-sign-in",
"sign-in-with-apple",
"appsflyer"
],
"type": "string"
},
"maxItems": 30
},
"ownData": {
"type": "array",
"items": {
"enum": [
"account_email",
"account_name",
"phone",
"address",
"user_id",
"precise_location",
"coarse_location",
"photos_videos",
"audio",
"messages",
"user_content",
"support",
"contacts",
"health",
"fitness",
"search",
"purchases",
"gameplay"
],
"type": "string"
},
"maxItems": 30
},
"settings": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "boolean"
}
},
"platforms": {
"type": "array",
"items": {
"enum": [
"ios",
"android"
],
"type": "string"
},
"minItems": 1
},
"deletionRequest": {
"type": "boolean"
},
"encryptedInTransit": {
"type": "boolean"
}
}
}The resourceType values create_privacy_policy_url accepts, and which of them are hosted free. No side effects.
No arguments.
{
"type": "object",
"properties": {}
}