marketing-automation-mcp is a Python MCP server for deterministic campaign reporting, provider-backed budget optimization, copy generation, and demo-only audience segmentation.
This repo now favors reproducibility over ad hoc setup:
- Supported Python:
3.12and3.13 - Local bootstrap:
uv - Primary MCP transport:
stdio - Local Python
3.14.xis treated as compatibility work, not the supported baseline
The public MCP contract in this repo is intentionally narrow:
generate_campaign_reportoptimize_campaign_budgetcreate_campaign_copyanalyze_audience_segments
Only these four tools are part of the supported server surface today. Other modules under src/tools/ exist as internal or aspirational code paths and should not be treated as production MCP features.
DEMO_MODE=trueReturns deterministic sample data for demos and contract testing.DEMO_MODE=falseUses real platform credentials and the selected AI provider. Missing live dependencies return structuredblockedresponses instead of fabricated output.
uv sync --python 3.13 --extra dev
cp .env.example .env
uv run python -m compileall src tests dashboard
uv run pytestIf you need a pip fallback:
python3.13 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"Start the MCP server in its supported transport mode:
uv run python -m src.serverThe server currently documents and supports stdio transport only.
Claude Desktop configuration:
{
"mcpServers": {
"marketing-automation": {
"command": "uv",
"args": ["run", "python", "-m", "src.server"],
"cwd": "/absolute/path/to/Marketing-Automation-MCP-Server"
}
}
}cp .env.example .envMinimum useful configurations:
- Demo mode only:
DEMO_MODE=true
- Live reporting and optimization:
DEMO_MODE=false- one or more platform credential sets
- Live copy generation:
DEMO_MODE=falseAI_PROVIDER=openaiOPENAI_API_KEY=...AI_OPENAI_MODEL=gpt-5.4
Optional provider env vars:
ANTHROPIC_API_KEY,ANTHROPIC_MODELGEMINI_API_KEY,GEMINI_MODEL
For stable live behavior, set:
SECRET_KEYENCRYPTION_KEY
If ENCRYPTION_KEY is missing, API-key encryption is disabled for that process and the server logs a warning.
Every tool response includes these top-level fields:
{
"status": "ok | blocked",
"mode": "demo | live",
"blocked_reason": "optional string",
"warnings": []
}See the full contract in docs/api/README.md.
Live report and optimization flows may persist internal audit records to the configured database:
- report flows can persist normalized campaign snapshots
- optimization flows can persist AI decision history
These writes are internal side effects for observability and replay safety. They are not part of the public MCP response contract.
uv run python -m compileall src tests dashboard
uv run pytest
uv run python -c "import src.server, src.cli, src.ai_engine, src.performance; print('imports ok')"
docker build -t marketing-automation-mcp:latest .