TOOLKIT

Digital Marketing Pro

An open-source marketing operating system as a plugin: 163 skills, 24 agents, a 12-part engagement flow, eight HTTP connectors that fire real API calls behind a typed approval gate, and an empty .mcp.json you fill yourself.

by Indranil Banerjeeindranilbanerjee/digital-marketing-proMIT licence809 starscommit d866753read by us 11 September 2026

It is on the toolkit shelf rather than the skill shelf because it is a system, not a skill. One command runs a 61-step engagement per brand and writes fifty-odd files; per-brand state, a brand switch and an agency dashboard are built in. The README says an engagement takes about an hour of model time.

The connector layer is honest about itself: the shipped `.mcp.json` is empty, connectors are opt-in, and the eight that execute end to end (Slack, HubSpot, Klaviyo, SendGrid, Brevo, Customer.io, Mailchimp, Ahrefs) go through `:execute-action` with a uniform typed-approval gate. Twenty-five more are declared in a manifest for MCP.

It carries compliance machinery most marketing tools skip: C2PA provenance, EU AI Act Article 50 disclosure, sixteen jurisdictions, and a pre-publish `:check` command.

What it exposes

163 tools, and which ones change things

Some of the 163: /digital-marketing-pro:engagement :content-engine :campaign-plan :check :execute-action :doctor :brand-setup :performance-report

Writes

  • execute-action, behind the typed approval gate, to the eight HTTP connectors

Questions

Questions people ask before installing

Does it connect to anything out of the box?

No, and the README says so: the shipped .mcp.json is empty and connectors are opt-in. That is the right default; you bring the MCP servers or keys.

How is this different from claude-ads?

claude-ads is paid media only, with a control plane for live account changes. Digital Marketing Pro spans strategy, SEO, content, CRM and compliance, and its execution layer is HTTP connectors to messaging and CRM tools, not ad platforms.

Is 163 skills too many?

The plugin’s own routing layer exists because of that number: every description was rewritten so the model can pick one. Start from the `:engagement` command or the `--intent` help router, not the list.