{
  "markdown": "# Cesteral MCP Servers\n\nSelf-hostable MCP connectors for major advertising platforms.\n\nUse this repo when you want transparent platform integrations, local experimentation,\nand infrastructure you control. Use **Cesteral Intelligence** when your team needs\napprovals before spend commits, credential brokering, auditability, and\ncross-platform execution from one governed environment.\n\n[**Try Meta Ads MCP locally (~10 min)**](docs/guides/quickstart.md#path-a-meta-ads-recommended) | [**Compare OSS vs Cesteral Intelligence**](https://cesteral.com/compare?utm_source=github&utm_medium=readme&utm_campaign=hero) | [**Book a workflow demo**](mailto:sales@cesteral.com?subject=Workflow%20demo%20-%20Cesteral%20MCP%20Servers)\n\n[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE.md)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0-blue)](https://www.typescriptlang.org/)\n[![MCP](https://img.shields.io/badge/MCP-2025--11--25-green)](https://modelcontextprotocol.io/)\n\n<p align=\"center\">\n  <img src=\"docs/logos/dv360.svg\" width=\"32\" height=\"32\" alt=\"DV360\" title=\"DV360\">&nbsp;&nbsp;\n  <img src=\"docs/logos/google-ad-manager.svg\" width=\"32\" height=\"32\" alt=\"Google Ads\" title=\"Google Ads\">&nbsp;&nbsp;\n  <img src=\"docs/logos/thetradedesk.svg\" width=\"32\" height=\"32\" alt=\"The Trade Desk\" title=\"The Trade Desk\">&nbsp;&nbsp;\n  <img src=\"docs/logos/meta.svg\" width=\"32\" height=\"32\" alt=\"Meta\" title=\"Meta Ads\">&nbsp;&nbsp;\n  <img src=\"docs/logos/linkedin.svg\" width=\"32\" height=\"32\" alt=\"LinkedIn\" title=\"LinkedIn Ads\">&nbsp;&nbsp;\n  <img src=\"docs/logos/tiktok.svg\" width=\"32\" height=\"32\" alt=\"TikTok\" title=\"TikTok Ads\">&nbsp;&nbsp;\n  <img src=\"docs/logos/campaign-manager.svg\" width=\"32\" height=\"32\" alt=\"CM360\" title=\"Campaign Manager 360\">&nbsp;&nbsp;\n  <img src=\"docs/logos/search-ads-360.svg\" width=\"32\" height=\"32\" alt=\"SA360\" title=\"Search Ads 360\">&nbsp;&nbsp;\n  <img src=\"docs/logos/pinterest.svg\" width=\"32\" height=\"32\" alt=\"Pinterest\" title=\"Pinterest Ads\">&nbsp;&nbsp;\n  <img src=\"docs/logos/snapchat.svg\" width=\"32\" height=\"32\" alt=\"Snapchat\" title=\"Snapchat Ads\">&nbsp;&nbsp;\n  <img src=\"docs/logos/amazon.svg\" width=\"32\" height=\"32\" alt=\"Amazon DSP\" title=\"Amazon DSP\">&nbsp;&nbsp;\n  <img src=\"docs/logos/microsoft-bing.svg\" width=\"32\" height=\"32\" alt=\"Microsoft Ads\" title=\"Microsoft Ads (Bing)\">\n</p>\n\n---\n\n## Two Ways to Use This\n\nThis repo is an **open connector layer**, not the full product.\n\n- **Self-host a connector** for transparency and direct control of your\n  credentials, infrastructure, and platform access.\n- **Use Cesteral Intelligence** when the workflow needs governed writes, team\n  approvals, credential brokering, auditability, and cross-platform\n  coordination — see [when you need it](#when-you-need-cesteral-intelligence) below.\n\n---\n\n## Flagship Connectors\n\n### <img src=\"docs/logos/google-ad-manager.svg\" width=\"20\" height=\"20\" alt=\"Google Ads\"> Google Ads MCP\n\nCampaign writes, GAQL reporting, bid adjustments, previews, and validation via\nGoogle Ads REST API v23.\n\n[Package docs](packages/gads-mcp) | [Use with Cesteral Intelligence](https://cesteral.com/integrations/google-ads?utm_source=github&utm_medium=readme&utm_campaign=gads-mcp)\n\n### <img src=\"docs/logos/meta.svg\" width=\"20\" height=\"20\" alt=\"Meta\"> Meta Ads MCP\n\nCampaign writes, insights, targeting discovery, delivery estimates, previews, and\nbulk operations via Meta Marketing API v25.0.\n\n[Package docs](packages/meta-mcp) | [Use with Cesteral Intelligence](https://cesteral.com/integrations/meta-ads?utm_source=github&utm_medium=readme&utm_campaign=meta-mcp)\n\n### <img src=\"docs/logos/dv360.svg\" width=\"20\" height=\"20\" alt=\"DV360\"> DV360 MCP\n\nCampaign writes, targeting, custom bidding, previews, uploads, and schema-driven\nvalidation via DV360 API v4.\n\n[Package docs](packages/dv360-mcp) | [Use with Cesteral Intelligence](https://cesteral.com/integrations/dv360?utm_source=github&utm_medium=readme&utm_campaign=dv360-mcp)\n\n---\n\n## When You Need Cesteral Intelligence\n\nThe OSS connectors give you per-server tool execution + audit logs. Cesteral\nIntelligence layers governance and orchestration on top:\n\n- **Credential brokering** -- keep platform secrets out of local operator workflows\n- **Approval workflows** -- require human review before destructive or high-spend changes\n- **Aggregated audit** -- unified, cross-server activity feed with provenance, tied to operator identity\n- **Cross-platform orchestration** -- coordinate governed execution across multiple connectors\n- **Team operations** -- shared workflows, tenant isolation, and operator visibility\n\n[Compare OSS connectors vs Cesteral Intelligence](https://cesteral.com/compare?utm_source=github&utm_medium=readme&utm_campaign=why-managed)\n\n---\n\n## The Full Fleet\n\n| Server                                    | Platform                          | Tools | Auth                            |\n| ----------------------------------------- | --------------------------------- | ----- | ------------------------------- |\n| [gads-mcp](packages/gads-mcp)             | Google Ads REST API v23           | 18    | OAuth2 refresh token            |\n| [meta-mcp](packages/meta-mcp)             | Meta Marketing API v25.0          | 27    | Bearer token                    |\n| [dv360-mcp](packages/dv360-mcp)           | DV360 API v4                      | 26    | Google OAuth2 / service account |\n| [ttd-mcp](packages/ttd-mcp)               | The Trade Desk REST + GraphQL API | 46    | User token (TTD-Auth header)    |\n| [linkedin-mcp](packages/linkedin-mcp)     | LinkedIn Marketing API v2         | 22    | Bearer token                    |\n| [tiktok-mcp](packages/tiktok-mcp)         | TikTok Marketing API v1.3         | 25    | Bearer token + advertiser ID    |\n| [cm360-mcp](packages/cm360-mcp)           | CM360 API v5                      | 22    | Google OAuth2                   |\n| [sa360-mcp](packages/sa360-mcp)           | SA360 Reporting API v0 + DS v2    | 17    | OAuth2 refresh token            |\n| [pinterest-mcp](packages/pinterest-mcp)   | Pinterest Ads API v5              | 24    | Bearer token                    |\n| [snapchat-mcp](packages/snapchat-mcp)     | Snapchat Ads API v1               | 25    | Bearer token                    |\n| [amazon-dsp-mcp](packages/amazon-dsp-mcp) | Amazon DSP API                    | 28    | Bearer token                    |\n| [msads-mcp](packages/msads-mcp)           | Microsoft Advertising API v13     | 28    | Access token + developer token  |\n| [dbm-mcp](packages/dbm-mcp)               | Bid Manager API v2                | 6     | Google OAuth2                   |\n\nThirteen servers, 290+ tools. Tool counts are the live registered total per\nserver, including the `*_search_tools` discovery tool where present.\n\n### What Every Server Ships\n\nThese connectors have grown past \"thin REST wrappers.\" Beyond raw tool calls,\nevery server in the fleet exposes the full surface of the modern MCP spec\n(protocol revisions `2025-03-26` through `2025-11-25`):\n\n- **MCP Prompts** — on-demand, multi-step workflow guidance (campaign launch,\n  reporting, troubleshooting) so agents don't have to rediscover each\n  platform's sequencing. Present on all 13 servers.\n- **MCP Resources** — structured, addressable context (schemas, field catalogs,\n  examples, enums) fetched on demand instead of bloating every tool schema.\n  Present on all 13 servers. DV360 uses these to keep its >1 MB discriminated\n  unions off the wire (`entity-schema://`, `entity-fields://`, `entity-examples://`).\n- **Tool discovery** — a `<platform>_search_tools` tool that lets an agent\n  search the server's own catalog by intent instead of paging the full list.\n  On 10 of the 13 servers (all except the small `gads-mcp` and `sa360-mcp` /\n  reporting-only `dbm-mcp`).\n- **Server discovery cards** — SEP-2127 metadata at\n  `/.well-known/mcp/server-card.json` (name, version, transports, auth modes,\n  capabilities) on every server, in every auth mode.\n- **OAuth resource discovery** — in `jwt` auth mode, the RFC 9728 endpoint at\n  `/.well-known/oauth-protected-resource`.\n- **Report CSV spill** — large report bodies spill to GCS behind a signed URL\n  so responses stay bounded. On the six reporting-heavy servers: `ttd-mcp`,\n  `tiktok-mcp`, `snapchat-mcp`, `amazon-dsp-mcp`, `pinterest-mcp`, `msads-mcp`.\n\n| Server         | Discovery | Prompts | Resources | CSV spill |\n| -------------- | :-------: | :-----: | :-------: | :-------: |\n| gads-mcp       |           |   ✅    |    ✅     |           |\n| meta-mcp       |    ✅     |   ✅    |    ✅     |           |\n| dv360-mcp      |    ✅     |   ✅    |    ✅     |           |\n| ttd-mcp        |    ✅     |   ✅    |    ✅     |    ✅     |\n| linkedin-mcp   |    ✅     |   ✅    |    ✅     |           |\n| tiktok-mcp     |    ✅     |   ✅    |    ✅     |    ✅     |\n| cm360-mcp      |    ✅     |   ✅    |    ✅     |           |\n| sa360-mcp      |           |   ✅    |    ✅     |           |\n| pinterest-mcp  |    ✅     |   ✅    |    ✅     |    ✅     |\n| snapchat-mcp   |    ✅     |   ✅    |    ✅     |    ✅     |\n| amazon-dsp-mcp |    ✅     |   ✅    |    ✅     |    ✅     |\n| msads-mcp      |    ✅     |   ✅    |    ✅     |    ✅     |\n| dbm-mcp        |           |   ✅    |    ✅     |           |\n\n---\n\n## Built for Production\n\nSelf-hosting an AI agent that touches live ad spend is a trust problem first\nand a capability problem second. Two things make this fleet shippable to\nproduction without hand-rolling guardrails:\n\n- **Audit-grade observability**. Every tool call is captured as append-only\n  JSONL. Failures additionally capture the full upstream HTTP trail — every\n  request, every retry, every response — with secrets redacted at the source.\n  Query it directly in BigQuery for hosted deployments, or pipe stdout to\n  your existing log stack for self-host.\n  [Read the observability guide](docs/guides/observability.md).\n- **Destructive-action elicitation gates**. 51 destructive tools across the\n  twelve write-capable servers (`dbm-mcp` is reporting-only) prompt the user\n  before deletes, bulk status changes, bid adjustments, budget changes,\n  conversion uploads, and async Workflows batch jobs. Stdio and clients\n  without elicitation support fall back to a documented non-interactive\n  contract. Bulk mutations under 10 items skip the prompt unless they touch a\n  sensitive field (status / budget / bid).\n- **Verifiable release provenance**. Governed tools carry a canonical\n  SHA-256 `definitionHash` (from `@cesteral/contract-hash`) emitted into a\n  per-package `cesteral-manifest.json`. Tagged releases publish to npm with\n  build provenance, signing the manifest transitively inside the tarball, so a\n  downstream governance system can verify exactly which tool definitions\n  shipped and promote matching tools to `attested` trust.\n\nIf your security review needs evidence — the redaction list, the field\nschema, the upstream capture path, the contract hash — all of it is in this\nrepository.\n\n---\n\n## Quick Start\n\nFor a guided walkthrough, see the [10-minute quickstart](docs/guides/quickstart.md).\n\n### Prerequisites\n\n- **Node.js** >= 20.0.0\n- **pnpm** >= 10.0.0 -- `corepack enable` picks up the pinned version from `packageManager` (or `npm install -g pnpm@10`)\n- **Docker** (for containerization)\n- **Terraform** >= 1.6.0 _(for deployment)_\n\n### 1. Clone and install\n\n```bash\ngit clone https://github.com/cesteral/mcp-open-advertising.git\ncd mcp-open-advertising\npnpm install\n```\n\n### 2. Build\n\n```bash\npnpm run build\n```\n\n### 3. Run a server locally\n\n```bash\n# Start any server using the dev script\n./scripts/dev-server.sh gads-mcp    # port 3004\n./scripts/dev-server.sh meta-mcp    # port 3005\n./scripts/dev-server.sh dv360-mcp   # port 3002\n\n# See each package README for required environment variables\n```\n\n### 4. Configure your AI agent\n\n```json\n{\n  \"mcpServers\": {\n    \"cesteral-gads\": {\n      \"url\": \"https://gads.your-domain.com/mcp\",\n      \"apiKey\": \"your-gads-api-key\"\n    },\n    \"cesteral-meta\": {\n      \"url\": \"https://meta.your-domain.com/mcp\",\n      \"apiKey\": \"your-meta-api-key\"\n    }\n  }\n}\n```\n\nAdd as many servers as you need. Each runs independently and can be deployed separately.\n\n### 5. Deploy\n\n```bash\ncd terraform\nterraform init\nterraform apply -var-file=dev.tfvars\n```\n\nSee the [deployment guide](docs/guides/deployment-instructions.md) for production setup.\n\n---\n\n## Architecture\n\nCesteral uses a **GCP-native architecture** with thirteen independently deployable Cloud Run MCP services. Each server exposes the MCP protocol directly via HTTPS on Cloud Run.\n\n**Key design decisions:**\n\n- **Single cloud provider (GCP)**: Cloud Run, BigQuery, Pub/Sub, Secret Manager -- unified monitoring, ~$150-220/month\n- **Direct HTTP transport**: No edge gateway layer needed\n- **Independent deployment**: Each server can be deployed and scaled separately\n- **Composable**: Use one server or all thirteen -- they work independently or together\n\nAI clients connect directly to one or more MCP servers over HTTPS; there is no\nshared gateway to provision. Cesteral Intelligence, when used, layers tenancy,\ncredentials, approvals, and governance above the same fleet.\n\n### Repository Structure\n\n```\nmcp-open-advertising/\n├── packages/\n│   ├── gads-mcp/          # Google Ads\n│   ├── meta-mcp/          # Meta Ads\n│   ├── dv360-mcp/         # DV360\n│   ├── ttd-mcp/           # The Trade Desk\n│   ├── linkedin-mcp/      # LinkedIn Ads\n│   ├── tiktok-mcp/        # TikTok Ads\n│   ├── cm360-mcp/         # Campaign Manager 360\n│   ├── sa360-mcp/         # Search Ads 360\n│   ├── pinterest-mcp/     # Pinterest Ads\n│   ├── snapchat-mcp/      # Snapchat Ads\n│   ├── amazon-dsp-mcp/    # Amazon DSP\n│   ├── msads-mcp/         # Microsoft Ads\n│   ├── dbm-mcp/           # Bid Manager (reporting)\n│   ├── contract-schema/   # Shared library -- canonical annotation + response schemas\n│   ├── contract-hash/     # Shared library -- canonical tool-definition hash\n│   └── shared/            # Shared auth, telemetry, utilities\n├── terraform/             # Infrastructure as Code\n├── scripts/               # Deployment and dev automation\n└── docs/                  # Documentation and guides\n```\n\n---\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Build all packages\npnpm run build\n\n# Run tests\npnpm run test\n\n# Type checking\npnpm run typecheck\n\n# Lint\npnpm run lint\n```\n\n### Testing MCP Tools\n\n```bash\n# Use MCP Inspector\nnpx @modelcontextprotocol/inspector packages/gads-mcp\n\n# Or use curl\ncurl -X POST http://localhost:3004/mcp \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\": \"2.0\", \"method\": \"tools/list\", \"id\": 1}'\n```\n\n### Technology Stack\n\n- **Runtime**: TypeScript 5.0+, Node.js 20 LTS, Hono (HTTP + MCP transport)\n- **Validation**: Zod schemas\n- **Infrastructure**: GCP Cloud Run, BigQuery, Pub/Sub, Secret Manager, Terraform\n- **Build**: Turborepo, pnpm workspaces, Docker\n\n---\n\n## Contributing\n\nWe welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n1. Fork the repository\n2. Create a feature branch: `git checkout -b feature/your-feature`\n3. Make changes and write tests\n4. Run tests: `pnpm run test`\n5. Submit a Pull Request\n\nSee also: [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) | [SECURITY.md](SECURITY.md) | [ROADMAP.md](ROADMAP.md)\n\n---\n\n## License\n\n[Apache License 2.0](LICENSE.md)\n\n---\n\n## Support\n\n- **Website**: [cesteral.com](https://cesteral.com) -- managed hosting and commercial features\n- **Documentation**: [docs/](docs/) for guides and architecture\n- **GitHub Issues**: Report bugs or request features\n- **Email**: support@cesteral.com\n",
  "bytes": 15616,
  "sha": "e7ff9941ba73a33960ba0e1d1a9a3c851738a471c0b87cfd4ee00df68777ba7f",
  "repo_slug": "cesteral/mcp-open-advertising",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_cesteral_tiktok_mcp_14bf9013/readme"
}