Documentation
Project setup, GitHub, Adobe Target MCP, creating activities, and deploying through pull requests.
Overview
ATGitOps Helper is a workspace for Adobe Target GitOps. Each project ties a GitHub repository to Adobe Target MCP. You author offers in the visual composer, open a pull request, and when that PR merges to main, GitHub Actions creates or updates the activity in Adobe Target.
1. Project
Name + GitHub + MCP
2. Activity
XT / AB / ABT setup
3. PR
Review offer in GitHub
4. Deploy
Merge → Actions → Target
Important
Getting started
- Run the helper
- MongoDBDefault URI is
mongodb://127.0.0.1:27017/atgitops. Override withMONGODB_URIin.env.local. - Sign inRegister an account or sign in. Projects and credentials are stored per user.
- Create a projectUse Create project or Add new project on the home dashboard.
cd at-git-helper
npm install
npm run dev
# Open http://localhost:3847Project setup
A project is a named workspace with its own GitHub repo and Target MCP credentials. Switch projects anytime from the header switcher.
Add project wizard (4 steps)
- ProjectName, project ID, client, and optional description.
- GitHubSign in with GitHub, pick or paste the repo URL/branch, add SSH key for private repos if needed.
- MCPConnect Adobe Target MCP (Sign in with Adobe recommended). Optionally push credentials to GitHub Actions.
- Deploy / bootstrapOptionally push GitOps boilerplate, a sample XT activity, and sync Actions secrets/variables.
Note
GitHub setup
GitHub is where activity folders live and where deploy runs. Prefer OAuth over pasting a PAT.
Recommended path
- Sign in with GitHubRequires
GITHUB_CLIENT_ID/GITHUB_CLIENT_SECRETin.env.local. - Choose the repositoryUse the account/organization switcher and repo picker, or paste HTTPS/SSH URLs. Set the working branch (usually main). If an org is missing, reconnect GitHub (
read:org) and grant the OAuth app under the org’s Third-party access settings. - Private reposAdd the helper SSH key once (Project settings → GitHub) so git push/bootstrap can reach the repo.
- BootstrapOn the Deploy step, push boilerplate including
.github/workflows/deploy.yml, scripts, and templates. Empty repos bootstrap onto main.
Actions secrets & variables
Deploy needs these on the repo (synced from the MCP step when enabled, or managed under workspace → Actions / Project settings):
- Secrets:
ADOBE_ACCESS_TOKEN,ADOBE_CLIENT_ID,ADOBE_CLIENT_SECRET - Variables:
DEPLOY_USERNAME,MCP_SERVER_URL
Note
Adobe Target MCP setup
MCP is how the helper and GitHub Actions talk to Adobe Target — list audiences, create activities after merge, and update offers.
Recommended: Sign in with Adobe
- MCP server URLDefault is
https://targetmcp.adobe.io/mcp. - Browser OAuthClick Sign in with Adobe. Complete Adobe login; the helper stores the MCP session for the project.
- Deploy usernameSet the Adobe / Target deploy username used by Actions.
- Push to ActionsEnable “Push MCP credentials to GitHub Actions” so deploy.yml can authenticate after merge.
Advanced credentials
Under Advanced you can paste an access token and/or client ID/secret instead of browser OAuth. Use this for service accounts or when OAuth is unavailable.
Note
Create a Target activity
From a project workspace → Activities → New activity. Flow: Setup → Composer → Publish (GitHub PR).
1. Setup
- Activity name — human label (also drives the GitHub folder name).
- Type
- XT — Experience Targeting (personalization; no traffic split)
- AB — A/B test with traffic split
- ABT — Auto-Allocate toward a winner
- Page URL — used for page preview and page-delivery context.
- Experiences — add up to 8; each has an experience name and offer name.
- Targeting — optional audiences, mbox (default
target-global-mbox), and schedule. Empty audiences = all visitors.
Click Continue to composer. This only builds a local draft — Target create is deferred until merge to main.
2. Composer
Edit Offer Styles (CSS) and JS against a live page preview. Switch experiences with the A / B / … tabs; the active offer is what injects into preview. Use Build with AI when the preview can read the page.
3. Publish
Click Open PR to GitHub. The helper creates a branch, commits the activity folder, and opens a pull request against main.
przepisy_homepage_personalization_xt_test/
├── activity-info.json
└── przepisy_homepage_personalization_xt_test_exp_a.htmlComposer & page preview
Preview modes control how the Page URL loads in the iframe:
Proxy — default. Server strips CSP / frame headers so the iframe can load. Fails when the site blocks datacenter fetches (Akamai, WAF, bot walls).
Direct — iframe loads the real URL. Works only if the site allows framing.
Extension — required for many production sites (including WAF-protected homepages). Load at-git-helper/browser-extension in Chrome (Developer mode → Load unpacked), then Enable with extension so only that Page URL host is unlocked in this tab.
Extension tip
Build with AI
Generate offer CSS and JS from a natural-language prompt while the page preview is loaded. The helper samples palette and fonts from the live page so popups, banners, and copy changes match site branding.
- Add an AI agentAccount settings → AI agents → paste a Cursor API key.
- Load previewUse Proxy or Extension until the Page URL renders. AI needs a readable preview for theme/fonts.
- Optional: Pick elementTarget one node in preview, then describe the change (e.g. change headline, restyle CTA).
- Choose Cursor modeCloud API uses your key against Cursor cloud. Live workspace runs against a local workspace when available.
- GenerateWatch the planning log for captured theme/fonts, then confirm the offer injects into Page Preview. Adjust Styles/JS manually if needed before Open PR.
Note
Walkthrough: Przepisy.pl Experience Targeting
End-to-end example using an existing project and https://www.przepisy.pl/ as the page under test.
- Open the project workspaceHome → select project → Open workspace → Activities → New activity.
- Fill setup for XT personalization
- Name:
Przepisy homepage personalization - Type: Experience Targeting (XT)
- Page URL:
https://www.przepisy.pl/ - Folder (auto):
przepisy_homepage_personalization_xt_test - Description: personalize homepage hero / featured recipes for a target audience
- Leave audiences empty for all visitors, or search and attach a reusable Target audience
- Name:
- Continue to composerConfirm the step indicator shows Composer. Page URL should already be https://www.przepisy.pl/.
- Load preview (WAF sites)Przepisy.pl often blocks Proxy preview (Akamai / WAF). Switch to Extension, install/reload the browser extension, then Enable with extension. Edit Styles/JS and verify the offer injects on the live homepage.
- Shape the offerUse Styles + JS (or Build with AI after preview loads) to personalize headlines, CTAs, or banners. For XT you typically keep one experience; add more if you need alternate targeted offers.
- Open PR to GitHubPublish creates a branch like
activity/przepisy_homepage_personalization_xt_testand a PR against main. Example: PR #15 — “Add Target activity: Przepisy homepage personalization”. - Merge to deployReview CI on the PR, merge to main, then watch Deploy Adobe Target in workspace → Actions. Target creates the XT activity after a successful deploy on main.
What success looks like
Deploy to Adobe Target
Deployment is Git-driven. Publishing from the helper only opens a PR; Target changes apply after merge.
- Review the PRCheck activity-info.json, offer HTML, and green CI validation on the pull request.
- Merge to mainMerge via GitHub UI or
gh pr merge. - GitHub Actions deploy
deploy.ymlvalidates the activity folder and calls Target MCP to create (if missing) or update the activity and offers. - Watch from the helperProject workspace → Actions, or the Actions tab on GitHub. Confirm the run succeeds.
- Activate in Target UIDeploy does not auto-activate. Open Adobe Target, QA the activity, then activate when ready.
Optional: create the PR from a local clone
If you edit files outside the helper, commit from your Target GitOps repo clone (not the at-git-helper app folder):
cd /path/to/your-target-gitops-repo
git checkout main && git pull origin main
git checkout -b activity/przepisy_homepage_personalization_xt_test
git add przepisy_homepage_personalization_xt_test/
git commit -m "$(cat <<'EOF'
Add Przepisy homepage XT personalization.
EOF
)"
git push -u origin HEAD
gh pr create --title "Add Przepisy homepage personalization" --body "$(cat <<'EOF'
## Summary
- XT activity for https://www.przepisy.pl/
- Offer CSS/JS for homepage personalization
## Test plan
- [ ] PR validation passes
- [ ] After merge, Actions deploy succeeds
- [ ] Activity appears in Adobe Target
EOF
)"Save deploy IDs
After the first successful create on main, Actions logs return activity_id and offer_id values. Save them into activity-info.json (helper Save IDs / Fetch IDs flows when available) so later PRs update the same Target activity instead of creating duplicates.
- activity_id — Adobe Target activity ID
- offer_id — HTML offer ID per experience
Troubleshooting
Helper won’t start
Node.js 20+, npm install, MongoDB reachable.
GitHub push / setup fails
Use Sign in with GitHub, confirm repo URL/branch, and SSH key for private repos. Check GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRET.
MCP / Adobe sign-in fails
Re-run Sign in with Adobe, confirm MCP server URL, or use Advanced token/credentials. Ensure Actions secrets are synced for deploy.
Page preview blocked (WAF / Akamai)
Expected for sites like przepisy.pl via Proxy. Install the preview extension (v1.5.6+), enable for that host, hard-refresh the helper tab.
Organization missing from GitHub picker
Reconnect with GitHub and approve org access. Org owners may need to approve the OAuth app under Third-party access.
Build with AI looks generic
Wait until preview is fully loaded so theme/fonts are captured (planning log). Re-run Generate after Reload if the capture was empty or tiny.
PR created but Target empty
Confirm the PR was merged to main, Actions secrets are present, and the deploy job on main succeeded. PR-time jobs may skip create-on-merge.
Duplicate activities
Save activity/offer IDs after the first deploy before opening follow-up PRs.