← Command Centre

🔐 Backend Access Registry

Executive summary of every account, credential, and integration powering the Brainzyme backend. A map, not a vault — records where credentials live, never the secrets themselves.

Last updated: 2026-05-19 (hosting + services full refresh vs the 39-service Connections Registry) · Source of truth: F:/Agentic-OS/reference/connections-registry.md + project_backend_access_registry.md + reference_hosting_infrastructure.md

Related: Connections Registry (new — 2026-05-08)
This page is the infrastructure-access map. For per-service auth recipes, env-var contracts, common failure modes, and tool docstrings on REST/GraphQL/MCP/CLI services, see the Connections Registry at F:/Agentic-OS/reference/connections-registry.md with per-service contracts at F:/Agentic-OS/reference/services/{name}.md.
Boundary: this page = "where credentials live + how the human accesses them"; Connections Registry = "how a tool/agent calls the service correctly".
Jump to: Google & GCP GCP Walkthrough GCP API Map ⚠ Scopes Expansion 2026-05-18 GitHub Hosting MCP Auth .env Keys Other Integrations Tool Map & Preflight Pending Change Log

✅ Recently Resolved · ⚠ Pending

Resolved 2026-04-26:

Resolved 2026-05-04:

Pending:

1. Google Accounts & GCP Auth-critical

1a. OAuth client projects

GCP ProjectOwned byWorkspace orgUser Type7-day expiry?Credentials
claude01-cli PRIMARY [email protected] betternutritionalscience.co.uk
parent-company Workspace, canonical from 2026-04-26
Internal ✅ no F:\Claude Root\bns-token.json (12 scopes — cloud-platform removed 2026-05-04)
F:\Claude Root\bq-token.json (bigquery-only, minted 2026-05-04)
F:\Claude Root\ga4-oauth-token.json (legacy GA4-only)
F:\Claude Root\.env → GA4_OAUTH_*
claude-use-calum8999 LEGACY [email protected] brainzyme.co.uk
previous primary Workspace, no new integrations
Internal ✅ no F:\Claude Root\gdrive-credentials.json (Drive)
F:\Claude Root\youtube-oauth.json (YouTube, Brand Account flow)
youtube-audit SPECIALISED [email protected] (personal) n/a (no Workspace) External + Published no F:\Claude Root\youtube-token.json — YouTube channel ownership requires personal-Gmail Brand-Account-Owner path
Why Internal mode matters Internal = project restricted to Workspace users of that exact domain → refresh tokens never expire, no verification required, no test-user list. External/Testing gives 7-day tokens until the app is verified (painful for Brainzyme's use case). A brainzyme.co.uk Internal project only admits @brainzyme.co.uk accounts. Same for BNS. Personal @gmail.com — locked out of both (expected). Covering both domains with one client requires External + verification, which we avoid.

1b. Accounts authenticated against each OAuth client

Google accountOAuth projectToken fileConsumed byPurpose
[email protected] PRIMARY claude01-cli F:\Claude Root\bns-token.json
(12 scopes — cloud-platform removed 2026-05-04)
7 Python helpers:
tools/bns_drive.py
tools/bns_sheets.py
tools/bns_docs.py
tools/bns_gmail.py
tools/bns_calendar.py
tools/build_campaign_planner_sheet.py
tools/build_creative_tracker_sheet.py
+ direct googleapiclient imports
Canonical primary admin path. Drive / Sheets / Docs / Gmail (modify) / Calendar / Search Console / GA4 (read+admin). cloud-platform REMOVED (RAPT trigger). BigQuery uses separate bq-token.json. Token never expires (Internal-mode + Production OAuth screen). Do NOT pass SCOPES to from_authorized_user_file() — let token file govern refresh.
[email protected] LEGACY claude-use-calum8999 F:\Claude Root\gdrive-token.json (broken — 7-day expiry from External-Testing era) gdrive MCP
(@starfysh/gdrive-mcp, Drive-only)
Historical Brainzyme Drive access. Slated for retirement. No new integrations target this path. Re-mint only if a remaining script depends on the gdrive MCP.
[email protected] n/a (separate CLI auth) stored by gws CLI gws CLI
(Drive + Sheets + Docs + Gmail + Calendar)
Single-auth shell tool, still functional. Don't rebuild gws functionality on BNS — Python helpers cover the same surface for new work.
[email protected] SPECIALISED youtube-audit (personal Google Cloud project) F:\Claude Root\youtube-token.json YouTube Data API + YouTube Analytics — video-creative-audit skill + v4.0/video-audit/scripts/drive-channel-sync.py Canonical active YouTube path — verified 2026-04-26 via tokeninfo (client_id 895992706842) successfully reading channel UCjlK40vF-Jggn6eOLaioLrg. [email protected] has Owner rights on the Brand Account that owns the channel. The earlier .env commentary claiming [email protected] was the working YouTube path was aspirational — corrected. Token minted via PUBLISHED OAuth consent screen → no 7-day expiry. Stays separate; not migrated to BNS.
[email protected] BIGQUERY claude01-cli F:\Claude Root\bq-token.json
(1 scope: bigquery)
tools/ga4_bq.py (GA4 BigQuery event-level analysis) BigQuery-only OAuth token. Isolated from bns-token.json to avoid RAPT re-auth failures that cloud-platform scope triggers. Mint via tools/bq_first_auth.py. Same OAuth Desktop client (claude01-cli GCP project, Internal consent screen). Smoke-tested 2026-05-04: 7,271 UK events, all 4 market datasets (analytics_408119030 UK, analytics_408049345 US, analytics_408080646 DE, analytics_408139967 FR). Credential priority chain in ga4_bq.py: bq-sa.jsonbq-token.jsonbns-token.json.

Single-primary-admin model: BNS Ltd is the parent legal entity, so [email protected] is the canonical permanent business identity. Per-brand admins ([email protected]) become specialised secondaries. Banked rule: memory/feedback_bns_primary_admin_canonical.md.

2. New GCP Project Walkthrough Historical — project already exists

Status 2026-04-26: The BNS-side OAuth project — claude01-cli — was created on 2026-04-25, OAuth consent screen Published to Production, full 13-scope bns-token.json minted on 2026-04-26, and 9 Google services smoke-tested (Identity, Drive, Sheets, Docs, Gmail, Calendar, Search Console, GA4 Admin, Cloud Resource Manager). No new walkthrough run is required. Steps below are kept as a reference template for any future Workspace org.

Exact steps for standing up a new Internal-mode OAuth project inside the betternutritionalscience.co.uk Workspace. Produces a credentials JSON that will issue permanent (non-expiring) refresh tokens for any @betternutritionalscience.co.uk account.

  1. Sign in to Google Cloud Console as [email protected] — visit console.cloud.google.com. Top-left, verify the org name shows “betternutritionalscience.co.uk”, not “No organisation” — this is the check that unlocks Internal mode later.
  2. Create a new project. Top nav → project dropdown → New Project. Name: Brainzyme Google Access. Organisation: betternutritionalscience.co.uk. Location: betternutritionalscience.co.uk. Click Create. Wait for the notification, then select it.
  3. Link a billing account (optional but recommended). Billing → Link Billing Account. Drive/Sheets/Docs/Gmail/Calendar APIs are all within free-tier for this project’s traffic, but billing-linked projects have higher quotas and are harder to accidentally disable.
  4. Enable the APIs — APIs & Services → Library. Enable each in sequence (see §3 below for the exact list — minimum: Drive API). Click Enable on each; each takes ~5–10 seconds.
  5. Configure OAuth consent screen. APIs & Services → OAuth consent screen.
    • User Type: Internal (only visible because this project sits inside a Workspace org — the whole point of step 1's verification)
    • App name: Brainzyme Google Access
    • User support email: [email protected]
    • Developer contact: [email protected]
    • Leave App logo, App domain, Authorised domains blank (not required for Internal)
    • Save and continue
  6. Add scopes. Click Add or Remove Scopes. For a Drive-only MCP, add: .../auth/drive.readonly and .../auth/drive.file. For full Workspace: add Sheets, Docs, Gmail, Calendar read/write scopes as needed. Save and Continue. (Internal mode doesn't need test users — skip that page.)
  7. Create OAuth 2.0 Client ID. APIs & Services → Credentials → Create Credentials → OAuth client ID.
    • Application type: Desktop app
    • Name: Claude Code MCP
    • Create → Download JSON
  8. Store the credentials file. Save the downloaded JSON as F:\Claude Root\gdrive-credentials-bns.json. Matches the existing naming convention, keeps it alongside the brainzyme.co.uk credentials but clearly namespaced.
  9. Wire up a second MCP instance in .mcp.json. Add a new gdrive-bns server entry pointing at the new credentials and a fresh token path (gdrive-token-bns.json). Pattern + examples in project_multi_account_google_mcp.md. Restart Claude Code.
  10. Run initial auth flow and verify permanent token. First MCP call triggers a browser auth prompt → sign in as [email protected] → grant scopes. Refresh token written to gdrive-token-bns.json. Because the project is Internal, this token will not expire in 7 days. After completing, update the §1b table above with the new entry and add a line to the Change Log.
If “Internal” is greyed out That means the project isn't attached to a Workspace organisation. Either (a) you're still signed in with the wrong account, or (b) the BNS Workspace hasn't propagated yet — new Workspace orgs can take up to 24h. Signing out and back in usually fixes (a). For (b), wait and retry.

3. GCP API Enablement Map Reference

Original side-by-side: APIs enabled on legacy claude-use-calum8999 vs the new claude01-cli. As of 2026-04-26, claude01-cli has Cloud Resource Manager + BigQuery family + Cloud Storage + Logging + Monitoring + Dataform + Service Management + Service Usage + Telemetry + Cloud Trace + Cloud SQL + Datastore + Dataplex enabled. 2026-05-04 update: cloud-platform scope removed from bns-token.json (triggers RAPT failures). BigQuery now uses dedicated bq-token.json with just the bigquery scope. BigQuery API is still enabled on claude01-cli — the token file governs access, not the scope list. Stay-on-existing-project items (Ads, Gemini) aren't per-account OAuth — they use different credential models.

APIService IDOn existing?Enable on new?Why / consumer
Google Drive API drive.googleapis.com ✓ yes ✓ yes gdrive MCP — Drive file access
Google Sheets API sheets.googleapis.com ✓ yes ✓ yes gws CLI + future Sheets MCP
Google Docs API docs.googleapis.com ✓ yes ✓ yes gws CLI + future Docs MCP
Gmail API gmail.googleapis.com ✓ yes Optional gws CLI — only if Gmail shell access needed on BNS account
Google Calendar API calendar-json.googleapis.com ✓ yes Optional gws CLI — only if Calendar shell access needed on BNS account
People API people.googleapis.com ✓ yes Optional Profile info for authenticated user (nice-to-have)
Google Ads API googleads.googleapis.com ✓ yes (developer token + MCC) ✖ no need Uses separate developer token pattern — MCC 269-741-1682 stays on existing project
Generative Language API generativelanguage.googleapis.com ✓ yes (AI Studio key) ✖ no need Gemini API — uses GOOGLE_AI_STUDIO_KEY from .env, not OAuth

Minimum viable for new BNS project: Drive API only (matches current MCP scope). Enable Sheets + Docs if planning to wire gws CLI against the BNS account too.

3a. Scopes Expansion — 2026-05-18 LIVE WALKTHROUGH Calum to execute

Why this exists: Customer Match consent injection blocked on the Data Manager API (Google Ads API path closed per the 2026-05-18 Step 0 smoke). Rather than make one trip per scope, we agreed to batch a preemptive expansion: 9 new OAuth scopes covering active + likely-near-term workstreams (CM consent, programmatic SEO, page-perf, GTM affiliate work, GCP ops, business profile, deliverability, billing monitoring). Plus separate Maps Platform API-key path. Plus a Deliverability Stack (subagent + DMARC aggregator + optional MXToolbox API). Approved by Calum 2026-05-18, refined 2026-05-19 (Tag Manager scopes consolidated by Google).

Approved scope set

#Scope URLWhy we need itTarget token fileStatus
1 www.googleapis.com/auth/datamanager
www.googleapis.com/auth/datamanager.partnerlink
ADDED 2026-05-19 (re-added after save problem)
Customer Match consent injection. Per-record adUserData + adPersonalization on the 57 bz_* lists. Calum granted BOTH the main scope AND the datamanager.partnerlink companion (bonus — adds partner-link write capability for Marketing Platform / CM360 / SA360 / DV360 / Analytics). Broader than originally planned; no risk. data-manager-token.json ADDED
2 www.googleapis.com/auth/indexing SEO Indexing API. Programmatic indexing requests for new pages — speeds up str-programmatic-seo + str-ai-seo publish cycles by 1-7 days. seo-token.json (cluster) ADDED 2026-05-19
3 www.googleapis.com/auth/pagespeedonline.readonly
→ API key path instead (PAGESPEED_API_KEY in .env)
ROUTING CHANGE 2026-05-19
PageSpeed Insights API. Replaces local Lighthouse in tools/lighthouse_gate.py — canonical Google Lighthouse + CrUX field data in one response. Use API key, not OAuth — PSI supports plain API-key access (free tier 25k/day, plenty for Brainzyme). Same pattern as Maps Platform. Saves a scope slot on the consent screen. Restrict the key to PageSpeed Insights API only. .env only (no token file) USE API KEY (not OAuth)
4 www.googleapis.com/auth/siteverification Search Console Site Verification API. Programmatically register new subdomain blogs / new TLDs without the manual HTML-file / DNS TXT trip. seo-token.json (cluster) RE-ADD NEEDED
5 www.googleapis.com/auth/tagmanager.edit.containers
www.googleapis.com/auth/tagmanager.edit.containerversions
www.googleapis.com/auth/tagmanager.publish
www.googleapis.com/auth/tagmanager.delete.containers
www.googleapis.com/auth/tagmanager.manage.accounts
www.googleapis.com/auth/tagmanager.manage.users
ADDED 2026-05-19 (6 scopes — full GTM admin)
Tag Manager API — correction 2026-05-19: the scopes are NOT consolidated as I'd claimed earlier. GTM still uses individual scopes per Google's docs. Calum granted 6 (publish + edit containers + edit container versions + delete containers + manage accounts + manage users) — more capability than the original 2-scope plan; all-in. Use case: affiliate pixel deployment (Awin / Impact / ShareASale postbacks) + future Web Pixels Part 2 + GTM admin automation. gcp-token.json (cluster) ADDED 2026-05-19
6 www.googleapis.com/auth/cloud-platform Full GCP — IAM, Cloud Logging, Functions, Cloud DNS, Cloud Run. Calum: read+write per 2026-05-18 (upgraded from read-only). Required for server-side ops scripts. gcp-token.json (cluster) ADDED
7 www.googleapis.com/auth/cloud-billing FULL, not .readonly Programmatic GCP spend monitoring. Calum 2026-05-19: granted FULL cloud-billing instead of the originally-planned cloud-billing.readonly. Practical effect: can also edit billing accounts / payment methods / alerts via API. Low risk on Internal-mode app (only [email protected] can mint tokens). Swap to .readonly later if you want to tighten. gcp-token.json (cluster) ADDED 2026-05-19
8 www.googleapis.com/auth/business.manage Business Profile API. Read/write Brainzyme's Google Business Profile — posts, hours, location (for future product pickup), Q&A, review replies. Calum 2026-05-19: Business Information API ALSO enabled (was only Account Management initially) — one scope, both APIs. Required for pickup-location feature. business-profile-token.json ADDED 2026-05-19
9 www.googleapis.com/auth/postmaster
www.googleapis.com/auth/postmaster.domain
www.googleapis.com/auth/postmaster.user
ADDED 2026-05-19
Gmail Postmaster Tools API — 3 scopes granted (broader than originally-proposed postmaster.readonly): full read+admin + domain register/unregister + per-domain user mgmt. Sender reputation, spam rate, FBL data for brainzyme.com (and .us/.de/.fr if sending), plus programmatic domain registration. Pairs with the new mkt-email-deliverability skill + DMARC aggregator (see Deliverability Stack section below). postmaster-token.json ADDED 2026-05-19

Cloud Console walkthrough — one session, ~25 min

  1. Sign in to console.cloud.google.com as [email protected] — top-left org dropdown must show betternutritionalscience.co.uk. PENDING
  2. Select project claude01-cli (the canonical primary OAuth project — see §1a above). All new scopes attach to this single project so we keep one consent screen and one app to manage. PENDING
  3. Enable APIs in Library. APIs & Services → Library → search and click Enable on each:
    • datamanager.googleapis.com — Data Manager API
    • indexing.googleapis.com — Indexing API
    • pagespeedonline.googleapis.com — PageSpeed Insights API
    • siteverification.googleapis.com — Google Site Verification API
    • tagmanager.googleapis.com — Tag Manager API
    • cloudresourcemanager.googleapis.com — already enabled (verify only)
    • cloudbilling.googleapis.com — Cloud Billing API
    • mybusinessaccountmanagement.googleapis.com — My Business Account Management API
    • mybusinessbusinessinformation.googleapis.com — My Business Business Information API
    • gmailpostmastertools.googleapis.com — Gmail Postmaster Tools API
    Each takes 5-10 seconds. DONE 2026-05-19 — all 9 APIs confirmed enabled in Cloud Console, plus bonus Cloud Logging/Monitoring/Trace/SQL/Storage/Compute Engine APIs that come "free" with the cloud-platform scope.
  4. Edit OAuth consent screen scopes. APIs & Services → OAuth consent screen → Edit App. Navigate to the Scopes step. Click Add or Remove Scopes. In the panel, paste each scope URL from the table above into the "Manually add scopes" field (one at a time). Tick the boxes that appear, then "Update". Confirm all 9 new scopes are listed in the granted scopes panel before continuing through the wizard. Save and Continue through the remaining steps. DONE 2026-05-19 — all 9 OAuth scope groups confirmed on consent screen (10 non-sensitive incl. 3 Postmaster + 1 paginated, 20 sensitive incl. 6 Tag Manager + datamanager.partnerlink bonus, 2 restricted incl. full Gmail restored). PSI uses API key path instead of OAuth scope (see row 3).
  5. Accept Customer Match Terms of Service. SKIPPABLE — this step was the precondition for building our OWN Customer Match uploader (Path C). Per the 2026-05-19 diagnostic: the Shopify Google & YouTube channel app is already syncing CM records on our behalf using ITS allowlisted token (5 RUNNING offline_user_data_jobs as of the audit, EEA lists succeeding). Our own dev token is NOT allowlisted for Customer Match API writes (Step 0 smoke confirmed). Skip unless / until we apply for Customer Match API allowlisting separately (weeks-long Google process). The Cloud Console may also not show this option at all without prior allowlisting — expected, not a bug. Calum 2026-05-19: was unable to find the path — correct, this is gated. DEFERRED
  6. Register Postmaster Tools domains — OR add [email protected] as a user on the existing registrations. ROUTING FIX 2026-05-19 Domains are already registered under [email protected] (personal Gmail) per Calum's existing Postmaster setup at postmaster.google.com/u/0/managedomains. Personal-Gmail can't auth with our Internal-mode claude01-cli OAuth project (same wall as YouTube channel ownership, which is why youtube-audit is separate). Clean fix: in Postmaster Tools UI, click each domain → Manage users → add [email protected] as manager/owner. DNS TXT verification carries over — the DOMAIN owns it, not the account. Fallback if no multi-user UI: register each domain a SECOND time under [email protected]; same TXT works; two registrations coexist independently. PENDING
  7. Confirm Business Profile manager access. Open business.google.com → Brainzyme profile → Users. Confirm [email protected] appears as a Manager (or Owner). If not, add yourself. PENDING
  8. Maps Platform API key (parallel path — NOT OAuth). APIs & Services → Library → enable: Maps JavaScript API, Places API (New), Geocoding API. Then Credentials → Create Credentials → API key. Restrict the key:
    • Application restrictions: HTTP referrers — add *.brainzyme.com/*, *.brainzyme.us/*, *.brainzyme.de/*, *.brainzyme.fr/*, localhost:*
    • API restrictions: only the 3 Maps APIs enabled above
    Copy the key → add to F:/Agentic-OS/.env as MAPS_API_KEY=AIza.... PENDING
  9. Mint refresh tokens for each cluster. Once steps 1-7 are done, run these 5 scripts from the Agentic-OS root (each opens a browser auth flow):
    • python tools/data_manager_first_auth.pydata-manager-token.json
    • python tools/seo_first_auth.pyseo-token.json (indexing + pagespeedonline + siteverification)
    • python tools/gcp_first_auth.pygcp-token.json (cloud-platform + cloud-billing.readonly + tagmanager.*)
    • python tools/business_profile_first_auth.pybusiness-profile-token.json
    • python tools/postmaster_first_auth.pypostmaster-token.json
    Each script: sign in as [email protected], click Allow. Token writes to disk. Scripts will be created in the same Claude session that authored this walkthrough — not yet on disk. PENDING
  10. Smoke-test each new token. Claude will write tmp/scope_expansion_smoke.py that loads each new token, hits a minimal-side-effect endpoint per service (e.g. OfflineUserDataJobService.list, indexing.urlNotifications.getMetadata, pagespeedonline.pagespeedapi.runpagespeed, etc.), and reports GREEN/RED per service. Run it once Calum finishes the GCP UI work. PENDING
Note — what stays unchanged: This walkthrough only ADDS scopes. The existing 7 token files (bns-token.json, bq-token.json, ga4-oauth-token.json, drive-token.json, youtube-token.json, youtube-write-token.json, google-ads.yaml) stay valid as-is. Existing tools that use them continue working without changes.

Per-cluster token-file map (after walkthrough)

ClusterToken filefirst_auth scriptScopes bundledTools that will consume
Data Manager data-manager-token.json tools/data_manager_first_auth.py datamanager tools/upload_customer_match_with_consent.py (task #8)
SEO seo-token.json tools/seo_first_auth.py indexing, pagespeedonline.readonly, siteverification tools/lighthouse_gate.py (PSI upgrade), future tools/indexing_*.py, tools/sc_verify_property.py
GCP / Ops gcp-token.json tools/gcp_first_auth.py cloud-platform, cloud-billing.readonly, tagmanager (consolidated 2026) Future GCP ops scripts, GTM audit / publish tooling, billing-monitor crons
Business Profile business-profile-token.json tools/business_profile_first_auth.py business.manage Future tools/bp_*.py for post / review-reply / hours / pickup-location
Postmaster (deliverability) postmaster-token.json tools/postmaster_first_auth.py postmaster.readonly Future tools/postmaster_pull.py deliverability cron; alerts on spam-rate spike
Maps Platform (API KEY — not OAuth) — (.env MAPS_API_KEY) n/a (manual key creation) Maps JS API, Places API (New), Geocoding API Future product-pickup location-picker UI / geocoding

Deliverability Stack NEW 2026-05-19

Calum has recurring SPF / DKIM / DMARC / inbox-placement pain. Postmaster Tools API (row 9 above) gives the Gmail telemetry, but on its own it's data without an operator. This 3-piece stack closes the loop: telemetry + the operator who reads it + the missing DMARC report parser.

#ItemTypeWhat it doesStatus
D1 mkt-email-deliverability skill Local skill (no Google scope, no API key) The operator. Diagnoses SPF / DKIM / DMARC / BIMI issues; reads Postmaster + DMARC reports; recommends DNS changes; handles ISP-specific deliverability strategy. Adapted from rshah515/claude-code-subagents (MIT) and Brainzyme-tailored for Klaviyo + GHL + Shopify Email + Cloudflare DNS. Installed at F:/Agentic-OS/.claude/skills/mkt-email-deliverability/SKILL.md. DONE 2026-05-19
D2 DMARC aggregator (dmarcian or EasyDMARC) External service (free tier) Parses the daily DMARC aggregate XML reports that arrive at [email protected] from receiving mail servers. Without an aggregator these reports are unreadable. Sign up: dmarcian.com OR easydmarc.com — 5-min setup; both have free tiers covering Brainzyme's volume. After signup: add the aggregator-provided rua= address to your DMARC TXT record in Cloudflare DNS for brainzyme.com (and .us/.de/.fr if those send mail). PENDING
D3 MXToolbox API key (optional) External service (free tier) Programmatic blacklist + SPF/DKIM lookups via API. Without it, the mkt-email-deliverability skill has to paste manual MXToolbox output. Sign up: mxtoolbox.com/user/api — free tier covers manual + light programmatic use. Add as MXTOOLBOX_API_KEY in F:/Agentic-OS/.env. PENDING (optional)
How the 3 pieces work together:
  1. Postmaster Tools API (Gmail telemetry, row 9 above) → "what is happening to our Gmail deliverability"
  2. DMARC aggregator (D2) → "which mail servers are sending on our behalf and whether SPF/DKIM align"
  3. MXToolbox API (D3) → "is our IP/domain on a blacklist; do our DNS records resolve correctly"
  4. mkt-email-deliverability skill (D1) → "what to change based on the data from 1+2+3"

What this DOES and DOES NOT change

Cost outlook

All new APIs have free tiers that easily cover Brainzyme's traffic:

Decisions still open

DecisionRecommendationStatus
Customer Match opt-out posture: accepts_marketing: falsead_personalization: DENIED (lenient split) vs exclude entirely (strict) Lenient split — most defensible CM compliance; keeps measurement value. Build the tool with a flag, default lenient. Calum to decide later
Postmaster Tools: monitor only brainzyme.com or all 4 TLDs (.com/.us/.de/.fr)? All 4 if any of them send mail; otherwise .com only. Each one is a 1-min DNS TXT add. PENDING
Business Profile: existing profile only, or add new market-specific profiles? Start with the existing profile; add per-market profiles only if Brainzyme registers EU subsidiaries. PENDING

When Calum finishes the walkthrough, Claude updates each row above from PENDINGDONE and re-publishes the dashboard. Per-cluster token-file paths get cross-linked into reference/connections-registry.md + new reference/services/{data-manager,indexing,pagespeed,business-profile,postmaster}.md contracts in the same session.

4. GitHub Summary

Two GitHub accounts in play. Full detail — emails, repo visibility, deploy flow — in reference_hosting_infrastructure.md.

AccountRoleLinked toUsed for
Calum Edinburgh (Company)
[email protected]
Francis-managed Main VPS Company automation projects (Francis-managed) hosted on the Main VPS.
HappyUser89
[email protected]
Claude-driven Main VPS + Testing VPS + Cloudflare Pages Claude's account. Hosts HappyUser89/brainzyme (the apps.nutritionalproducts.org dashboards) on the Main VPS, the n8n ads-agent development on the Testing VPS, and — new — the Cloudflare Pages hosting layer (§5b). Classic PAT embedded in F:\brainzyme-git\.git\config remote URL — git push works silently. Repo PRIVATE.

The Main VPS carries both accounts — Calum Edinburgh for Francis's company projects, HappyUser89 for the apps/dashboards project (separate projects on one box). The Testing VPS and the new Cloudflare hosting are both on HappyUser89. ("Joe SEO" is a Hostinger hosting account — see §5 — not a GitHub account.)

5. Hosting — VPSes + Cloudflare Summary

Two Hostinger VPSes, both running Coolify v4 — plus a new Cloudflare Pages static-hosting layer (§5b). Docker cleanup runbook, troubleshooting, deploy architecture: reference_hosting_infrastructure.md. Per-VPS API + root access: Connections Registry services/hostinger.md + services/coolify.md.

VPSHostinger accountServer / IPGitHub linkPurposeAccess
Main VPS calum842 srv843884
168.231.115.117
Calum Edinburgh + HappyUser89 apps.nutritionalproducts.org dashboards (Command Centre, UGC Explorer, Creative Review, all dashboards) + Francis's company automation projects + n8n at support.nutritionalproducts.org Calum + Claude + Francis
Testing VPS Joe SEO srv1376875
168.231.113.172
HappyUser89 n8n at support-v2.nutritionalproducts.org — used to build & develop the v4.0 ads agent. Coolify admin at ops.nutritionalproducts.org. Calum + Claude

Hostinger panel: hpanel.hostinger.com → VPS → select server → Browser terminal (runs as root on host). Programmatic VPS / firewall management via tools/hostinger_api.py (per-account tokens HOSTINGER_API_CALUM842 / HOSTINGER_API_JOESEO). The Main VPS Coolify has had recurring disk-fill incidents — runbook in memory/feedback_calum842_vps_disk_fill_post_mortem.md + feedback_coolify_prune_minus_a_required.md.

5a. Main VPS edge gate — Coolify HTTP Basic Auth LIVE 2026-04-22

Traefik basicauth middleware applied per-app in Coolify. Currently enforced on the Command Centre application (uuid s8sk0ks4gk40kwsgco480cgg) which owns the root FQDN — so every subfolder app under apps.nutritionalproducts.org inherits the gate.

FieldValue
URLhttps://apps.nutritionalproducts.org/
Usernameadmin
PasswordStored in .envAPPS_NP_BASIC_AUTH_PASSWORD — not duplicated in this dashboard.
Inline (curl / browser)https://admin:[email protected]/ (expand the env var locally)
.env varsAPPS_NP_URL / APPS_NP_BASIC_AUTH_USER / APPS_NP_BASIC_AUTH_PASSWORD
Traefik middlewarehttp-basic-auth-s8sk0ks4gk40kwsgco480cgg
Known bugs avoidedmemory/feedback_coolify_basic_auth_bugs.md — varchar(255) column, encrypt()/decryptString() asymmetry

To rotate: open the Coolify app → Configuration → HTTP Basic Authentication section → change password via the Livewire UI (never direct DB write) → Force deploy (without cache). Update the .env value (APPS_NP_BASIC_AUTH_PASSWORD) and §5 of project_backend_access_registry.md. Verify: curl -sI -k -H "Host: apps.nutritionalproducts.org" https://168.231.115.117/ → expect 401; with -u admin:<pass>200.

5b. Cloudflare Pages — new static-hosting layer NEW — 2026-05

Static dashboards / sites are moving to Cloudflare Pages, deployed from the HappyUser89 GitHub account. 4 CF Pages projects live: brainzyme, public, team-shared, bns-daily-intelligence — 3 of them gated by Cloudflare Zero Trust Access apps (email allowlist). CF account team divine-unit-8d4e (Free plan).

FieldValue
HostingCloudflare Pages (static) + Zero Trust Access (auth gate)
GitHub sourceHappyUser89 — CF Pages auto-deploys on push (one-time GitHub App install per CF account)
Auth tokenCLOUDFLARE_API (cfat_* Account API Token) + CLOUDFLARE_ACCOUNT_ID in .env
Access gateCF Zero Trust, team divine-unit-8d4e; email allowlist [email protected], [email protected]
Contract / SOPservices/cloudflare.md · reference/it-sops/cloudflare-pages-static-hosting.md

6. MCP Servers in .mcp.json Who auths as what Hardened 2026-05-08

MCP serverAuth sourceAccount / identity
google-adsF:\Claude Root\google-ads.yaml (path in GOOGLE_ADS_CREDENTIALS)Google Ads MCC 269-741-1682
browserbase${BROWSERBASE_API_KEY} + ${BROWSERBASE_PROJECT_ID} + ${GOOGLE_API_KEY} from .envBrowserbase project ccb152d1-...
dataforseo${DATAFORSEO_USERNAME} / ${DATAFORSEO_PASSWORD} from .env[email protected]
pinecone${PINECONE_API_KEY} from .envprimary Pinecone project
ga4service account JSON at F:\Claude Root\ga4-adc.json + GA4_PROPERTY_ID=408119030GA4 property 408119030
shopify-dev-mcpnone (stateless dev tool)n/a
n8n-mcp${N8N_API_KEY} + ${N8N_BASE_URL} from .env (npx -y n8n-mcp)n8n workflow builder — Main VPS n8n (support.nutritionalproducts.org)
Hardening 2026-05-08: Inline plaintext secrets removed from .mcp.json; all secret values now flow via ${VAR} interpolation from .env. Browserbase, DataForSEO, Pinecone, and GOOGLE_API_KEY were inline pre-2026-05-08. Rotate any secret → edit .env, restart Claude Code (no .mcp.json edit needed).
Connections Registry source of truth: per-service auth recipes + failure modes live in F:/Agentic-OS/reference/services/*.md. The Browserbase MCP "deferred-tool" pattern (must run ToolSearch select:mcp__browserbase__* before tool calls) is documented at services/browserbase-mcp.md. Same pattern applies to google-ads, ga4, pinecone, dataforseo.

7. .env API Keys Names only Refreshed 2026-05-08

Two .env files exist: F:\Agentic-OS\.env (canonical for active sessions) and F:\Claude Root\.env (legacy parallel). Per Connections Registry policy, Agentic-OS wins. Never committed.

Full per-service auth recipes + failure modes live at F:\Agentic-OS\reference\services\*.md. This table is the executive summary.

Env varProviderConsumer / contract
Shopify — modern client_credentials flow (mint via tools/shopify_get_token.py)
{UK,US,DE,FR}_SHOPIFY_CLIENT_ID / _CLIENT_SECRETShopify Custom App (per market)Used by shopify_get_token.py to mint admin tokens. services/shopify.md
{UK,US,DE,FR}_SHOPIFY_SHOP_DOMAINShopify (per market)Short form (e.g. brainzyme); script appends .myshopify.com
{UK,US,DE,FR}_SHOPIFY_ADMIN_TOKENShopify (per market)Minted on demand. Stale on every Custom App reinstall — re-mint is the fix to any 401.
Cloudflare (Workers + Tunnel + REST API + Pages + Zero Trust Access)
CLOUDFLARE_REVIEWS_WORKER_URL / CLOUDFLARE_REVIEWS_WORKER_TOKENCF WorkersBearer for /api/test-stores, /api/submissions. Auth for Wrangler CLI is npx wrangler@4 login OAuth (NOT cfat_ tokens). services/cloudflare.md
CLOUDFLARE_API / CLOUDFLARE_ACCOUNT_IDCloudflare Account APIcfat_* Account API Token — Tunnel, REST API, CF Pages, Zero Trust Access. 4 CF Pages projects live (see §5b). services/cloudflare.md
Hosting infrastructure — VPSes / Coolify / n8n
COOLIFY_API_TOKEN / COOLIFY_JOESEO_API_TOKEN (+ per-VPS COOLIFY_*_URL / _ADMIN_EMAIL / _ADMIN_PASSWORD)Coolify (dual VPS)API tokens for the Main VPS (calum842) + Testing VPS (joeseo) Coolify instances. services/coolify.md
VPS_ROOT_PASSWORD / VPS_ROOT_PASSWORD_CALUM842 / VPS_ROOT_PASSWORD_JOESEOHostinger VPS rootRoot console / SSH passwords for srv843884 + srv1376875.
HOSTINGER_API_CALUM842 / HOSTINGER_API_JOESEOHostinger Developer APIPer-account VPS-management + firewall tokens. tools/hostinger_api.py. services/hostinger.md
N8N_API_KEY / N8N_BASE_URL / N8N_BASIC_AUTH_USER / _PASS (Main VPS)
N8N_API_KEY_JOESEO / N8N_BASE_URL_JOESEO (Testing VPS)
n8n (dual host)Main VPS n8n = support.nutritionalproducts.org; Testing VPS n8n = support-v2.nutritionalproducts.org (ads-agent dev). services/n8n.md
APPS_NP_URL / APPS_NP_BASIC_AUTH_USER / APPS_NP_BASIC_AUTH_PASSWORDCoolify Traefik basic-authEdge gate on apps.nutritionalproducts.org (see §5a).
Google Workspace (single bns-token covers Sheets/Docs/Drive/Gmail/Calendar/SC)
BNS_TOKEN_PATHGoogle WorkspacePath to bns-token.json OAuth refresh token. services/google-workspace.md
GOOGLE_WORKSPACE_CLI_CLIENT_ID / _CLIENT_SECRETGoogle Desktop OAuth clientUsed for gws auth login
Google Ads / GA4 / BigQuery (separate auth paths)
GOOGLE_ADS_CREDENTIALSGoogle AdsPath to google-ads.yaml with refresh token + developer token. services/google-ads.md
GA4_PROPERTY_ID + GA4_PROPERTY_{UK,US,DE,FR}GA4 Data APIProperty 408119030 (canonical) plus per-market split. services/google-analytics.md
GA4_OAUTH_CLIENT_ID / _CLIENT_SECRET / _TOKEN_PATHGA4 OAuth desktop clientMinted via tools/ga4_first_auth.py
GOOGLE_APPLICATION_CREDENTIALSBigQuery (service account)Separate from GA4 OAuth. services/bigquery.md
BQ_TOKEN_PATHBigQuery (scope-isolated OAuth)Alternative path via tools/bq_first_auth.py
MCPs (now ${VAR} interpolated — see Section 6)
BROWSERBASE_API_KEY / BROWSERBASE_PROJECT_IDBrowserbaseMCP server (browserbase). services/browserbase-mcp.md
GOOGLE_API_KEYGoogle API (multi-purpose)Used by Browserbase MCP for image-ref/Maps lookups
DATAFORSEO_USERNAME / DATAFORSEO_PASSWORDDataForSEOMCP + direct scripts. services/dataforseo.md
PINECONE_API_KEYPineconeMCP + tools/pinecone_sync_gemini.py
Image / video pipeline
FAL_KEY + FAL_AI_KEY aliasfal.aiFlux 2 Pro + GPT-Image-2 endpoints. services/fal-ai.md
OPENROUTER_API_KEYOpenRouterVision QC during image-pipeline runs. services/openrouter.md
TEMPLATED_API_KEYTemplated.ioCarousel ad templating (paired with fal.ai). services/templated.md
HEYGEN_API_KEY plannedHeyGenAvatar video generation. Key not yet acquired. services/heygen.md
LLMs / search
OPENAI_API_KEYOpenAIReddit search via Responses API; image gen fallback. services/openai.md
GEMINI_API_KEY + GOOGLE_AI_STUDIO_KEYGoogle GeminiCLI + direct API. services/gemini.md
XAI_API_KEYxAIX/Twitter search via Responses API. services/xai.md
ANTHROPIC_API_KEY not neededAnthropicUse Claude CLI / Claude Code instead. services/anthropic.md
Other
YOUTUBE_API_KEYYouTube Data API v3Channel listing, transcript fetch. OAuth via [email protected] is the active path. services/youtube.md
FIRECRAWL_API_KEY plannedFirecrawlWeb scraping fallback. Key not yet acquired. services/firecrawl.md
HYROS_API_KEYHYROSIndependent ad attribution. services/hyros.md
XERO_CLIENT_ID / XERO_CLIENT_SECRETXeroOAuth 2.0 + PKCE; auto-rotating xero-token.json. services/xero.md
GRAPHITI_API_KEYGraphitiKnowledge graph (Claude Root tools only). services/graphiti.md
TELEGRAM_BOT_TOKEN / TELEGRAM_ALLOWED_USERSTelegramClaude Code Channels plugin. services/telegram.md
CREATIVEOS_REFRESH_TOKEN + CREATIVEOS_FIREBASE_API_KEYCreativeOS / FirebaseCompetitor ad library scraper. Firebase API key was hardcoded pre-2026-05-08; now env-driven with fallback. services/creativeos.md
CLICKUP_API_TOKEN / CLICKUP_TEAM_IDClickUpPersonal API token (header Authorization: <token> — NO Bearer prefix). Task / project management. services/clickup.md
REAMAZE_USER_ID / REAMAZE_APIReamazeCustomer service + help-centre API (HTTP Basic). Brand subdomain brainzyme.reamaze.com. services/reamaze.md
GOOGLE_CHAT_WEBHOOK_URLGoogle ChatOne-way Claude→Calum notifications via tools/notify_chat.py. services/google-chat.md
GHL_PIT_TOKEN / GHL_LOCATION_IDGo High Level plannedBrainzyme's marketing email + automation platform. Private Integration Token. services/go-high-level.md
FOREPLAY_API_KEYForeplayCompetitor ad intel (legacy — not yet in Connections Registry)

For changes to this table, edit F:\Agentic-OS\.env.example + add a service contract under reference/services/ + run python tools/check-connections-registry.py. The validator catches drift between this list and the actual tooling.

8. Other Integrations

Integrations not covered by the service sections above. Full per-service auth in the Connections Registry (services/*.md).

IntegrationAccount / identityCredential locationNotes
Coolify (dual VPS)Main VPS (calum842) + Testing VPS (joeseo)COOLIFY_API_TOKEN / COOLIFY_JOESEO_API_TOKEN in .envSelf-hosted PaaS on both VPSes. Admin UIs: coolify.nutritionalproducts.org (Main) + ops.nutritionalproducts.org (Testing). tools/coolify_api.py --vps {calum842|joeseo}. services/coolify.md
TailscaleGoogle SSO — [email protected]per-device tailscale up (no env var)Private mesh VPN + Funnel. ~4 machines on the tailnet (Coolify VPS + workstation + contractor PCs). services/tailscale.md
ClickUpBNS workspaceCLICKUP_API_TOKEN in .envREST API via Personal API token (NOT connector-only). Task / project management. services/clickup.md
Reamazebrainzyme.reamaze.comREAMAZE_USER_ID / REAMAZE_API in .envCustomer service + help-centre. Article edits route via ClickUp → Santiago → Lew. services/reamaze.md
Google ChatBNS Workspace spaceGOOGLE_CHAT_WEBHOOK_URL in .envOne-way Claude→Calum notifications (tools/notify_chat.py). services/google-chat.md
Go High Level (GHL)BNS LeadConnector plannedGHL_PIT_TOKEN / GHL_LOCATION_IDBrainzyme's marketing email + automation platform (NOT Klaviyo). services/go-high-level.md
Claude.ai ConnectorsClaude.ai sign-inClaude.ai account settings (OAuth, per-session)Bridge MCPs — Gmail / Calendar / Drive / ClickUp. Re-auth from the Claude desktop client when a connector shows needs-auth. Status: verify per session.
HYROSBNS HYROS accountHYROS_API_KEY in .envIndependent ad attribution — cross-reference vs platform metrics. services/hyros.md
HideMyAccTBCTBCPer-brand anti-detect profiles — Multi-Brand Social Presence (BNS brands' own official accounts).
ForeplayTBCFOREPLAY_API_KEY in .envCompetitor ad intel (legacy — not yet in Connections Registry).

10. Tool Map & Preflight NEW — 2026-05-12 Session 49

Single-page directory of every active tool in the Claude Code stack — so a fresh session can find the right tool first time. Built after the 2026-05-12 incident exposed both the user-scope backup gap AND the cost of misfiring on tool calls.

Canonical: F:/Agentic-OS/reference/tool-map.md (13 sections, full detail) · Smoke test: python tools/preflight_smoke.py or /preflight slash command (covers all 13 areas in ~10s) · SOP: apps.nutritionalproducts.org/it-sop/system-state-mirror/

Sheet view (queryable mirror): Master Sheet → Tool Map tab (97 rows, sheetId 1038784443; new 2026-05-13). The markdown is canonical — the Sheet is a derived mirror, auto-refreshed by python tools/sync_registries_to_master_sheet.py. Sibling tabs: Connections Registry (40 rows) · Page Build Registry (5 rows). Drift validator: python tools/check-tool-map.py (exit 0 = clean; runs as preflight Stage 9).

Tool inventory (the 13 sections)

§AreaWhat's in it
1GSD task bridge + statuslinePostToolUse hook + statusline patch — surfaces in-memory TaskCreate/TaskUpdate state. Active-task file, cache, log. Verification: PINEAPPLE-RESTART-43.
2MCP servers (file-based)7 registered in .mcp.json: google-ads, ga4, pinecone, dataforseo, shopify-dev-mcp, browserbase, n8n-mcp. Plus 4 OAuth bridges (Gmail/Drive/Calendar/ClickUp).
3Google services (non-MCP)bns_docs.py, bns_drive.py, bns_sheets.py, bns_gmail.py, bns_calendar.py — OAuth-based, BNS as primary. Plus gws CLI on %APPDATA%\npm.
4Shopify4 complementary layers: shopify-dev-mcp MCP server (validate_theme + docs) + shopify-ai-toolkit plugin (19 skills) + liquid-skills plugin (3 skills) + @shopify/cli CLI fallback.
5Browser toolsBrowserbase MCP (parallel desktop) + Browser Harness (logged-in single) + Playwright (clean mobile). Routing matrix at reference/browser-tools-routing.md.
6Pinecone2 live indexes: claude01-v2 (768d — RAG memory) + bz-canonical-messaging (1024d — compliance gate). 3 access paths (MCP / REST / Python).
7Codex QC + GeminiCodex 5.5 wrapper (codex_qc.py, 4 modes) + Gemini Flash (gemini_quick.py, free OAuth) + Gemini 2.5 Pro (gemini_pro.py, API key). Plus tool-youtube for YouTube transcripts (Gemini fabricates, never route YouTube there).
8Hooks (project-scope)13 registered hooks (F:/Agentic-OS/.claude/hooks/): bridge, mirror, auto-commit, context monitor, compliance gates, drift checks, branch guard.
9System-state mirrorStop hook mirrors user-scope files (~/.claude/settings.json, Windows Terminal settings, etc.) into reference/system-state/. Closes the only backup gap. SOP.
10Skills overview40 local skills (mkt/str/ops/viz/tool/meta/os) + 29 plugin skills (shopify + liquid + n8n-mcp-skills) + 8 slash commands. Skills auto-trigger from YAML frontmatter trigger phrases; not waiting on user.
11Common pitfalls7 known foot-guns with one-line fixes: PowerShell trailing-space trim, stale gsd-active-task, missing MCP schemas, dead shell shim, gws not in PATH, outdated "Claude can't write to Docs" note, phantom hook refs in settings.
12Specialist QC + probing tools~25 standalone scripts in tools/: Lighthouse (npx, v13.2.0, no API) + performance_snapshot, qc_pages_live, shopify_theme_drift_check, seo_audit_report, gsc_recovery_check, seo_full_site_sheet, check_copy_against_canonical (canonical messaging gate), anatomy_qc (image), ocr_text_check, scrapers (CreativeOS / Google Ads Transparency / Meta Ad Library), Xero audits, auction_insights, plus more.
13Verify the stackpython tools/preflight_smoke.py [--stages 1,2,7] [--quiet] [--json] · or slash command /preflight. Expected baseline (2026-05-12): 7 PASS / 1 WARN (gws PATH on stale shells) / 1 SKIP (Claude-side MCP live).

Skills inventory — 77 total available in any session

SourceCountCategories / examples
Local Agentic-OS skills40mkt (8 marketing: ad-copy / brand-voice / copywriting / creative-brief / icp / positioning / ugc-scripts / content-pipeline / content-repurposing) · str (6 strategy: ai-seo / campaign-strategy / programmatic-seo / schema-markup / seo-audit / trending-research) · ops (10 operations: campaign-pipeline / campaign-state / compliance-preflight / cron / go-live / pages-registry / quiz-deploy / shopify-page-builder / targeting-qc / video-audit) · viz (5 visual: excalidraw / image-pipeline / interface-design / nano-banana / stitch-design / ugc-heygen) · tool (4: firecrawl-scraper / humanizer / stitch / youtube) · meta (2: skill-creator / wrap-up) · os (2: heartbeat / session-manager)
shopify-ai-toolkit plugin19shopify-admin, shopify-customer, shopify-functions, shopify-hydrogen, shopify-liquid, shopify-onboarding-dev, shopify-onboarding-merchant, shopify-partner, shopify-payments-apps, shopify-polaris-{admin-extensions, app-home, checkout-extensions, customer-account-extensions}, shopify-pos-ui, shopify-storefront-graphql, shopify-use-shopify-cli, shopify-app-store-review, shopify-custom-data, shopify-dev
liquid-skills plugin3liquid-theme-a11y, liquid-theme-standards, shopify-liquid-themes
n8n-mcp-skills plugin NEW7n8n expression syntax, MCP tools expert, workflow patterns, validation expert, node configuration, code JavaScript, code Python (czlonkowski; pairs with the n8n-mcp server)
Slash commands8archive-gsd, bank, bank-full, preflight, qc-off, qc-on, resume, start-here

Trigger pattern (how Claude picks a skill)

Claude does not wait for the user to name a skill. The available-skills list is injected at session start with every skill's YAML description (trigger phrases + negative triggers). Claude reads the user's message, matches against triggers, and invokes the relevant skill via the Skill tool. Example: "audit my campaigns" → triggers ads-audit; "write some ad copy for FOCUS PRO" → triggers mkt-ad-copy; "/preflight" → goes to the slash command file directly. Missed triggers should be flagged to the maintainer — fix the frontmatter description.

11. Change Log