Affinity Design
Agency Guide

MCP Tool Reference

Complete reference for all 20 MCP plugins and their available tools

Plugin Overview

Your platform exposes 20 MCP plugins. Each plugin is a collection of tools (functions) and resources (data endpoints) that AI clients can call.

#PluginPurpose
1agencyAgency MCP key meta-tools: switch client scope, view/rollout Affinity WordPress plugin updates for your fleet
2corePlatform basics: time, SMS, calls, client info, notes, assets
3ghlGoHighLevel CRM: contacts, appointments, pipelines, SMS
4ghl-socialGHL Social Planner: accounts, posts, analytics
5ga4Google Analytics 4: reports, realtime, custom definitions
6gbpGoogle Business Profile: locations, reviews, posts, insights
7githubGitHub repos: files, branches, change sets, PRs
8google-adsGoogle Ads: campaigns, keywords, landing pages, audits
9meta-adsMeta Ads: campaigns, audiences, creatives, audits
10reddit-adsReddit Ads: thread research, campaign drafts, audits
11wordpressWordPress sites: content, generic entities, SEO meta, Elementor
12twilioTwilio: numbers, SMS, call bindings
13sendgridSendGrid: senders, email campaigns, domain auth
14image-generationAI image generation: create, edit, manage assets
15cloudflareCloudflare: DNS, Pages deployments, bindings
16verificationOperation verification: confirm writes succeeded
17docsAffinity Docs: search and read public help documentation
18vercelVercel: deployments, build logs, website bindings
19communicationsWebsite forms & form receiver: scan, register, configure forms
20website-offersWebsite-Day offer funnel: provision GitHub/Cloudflare site infra for paid starter orders

Agency

Meta-tools available only on sessions authenticated with an agency MCP key (X-API-Key starting with afa_).

Tools

ToolDescription
agency_list_clientsSearch clients in scope for this agency key by name, domain, or phone
agency_select_clientScope the current session to a specific client
agency_current_clientReport the client the session is currently scoped to
agency_plugin_fleet_listList Affinity WordPress plugin installations visible to this agency (tenant-scoped)
agency_plugin_rollout_planDry-run an agency-scoped Affinity WordPress plugin rollout — returns eligible/blocked sites
agency_plugin_rollout_requestRequest an agency-scoped plugin rollout within platform-allowed channels
agency_plugin_rollout_rollbackRequest rollback for an agency-owned plugin rollout

Rollout requests and rollbacks are destructive-flagged tools — the platform enforces tenant scope, so an agency can only affect its own client sites.


Core

Platform-level tools available to all clients.

Tools

ToolDescription
get_timeGet current date or offset by days/weeks
send_smsSend SMS via Twilio to any E.164 number
transfer_callTransfer an active Twilio call to a number
end_callHang up an active Twilio call by SID
get_client_infoReturn client metadata (name, timezone, phone, agents)
log_noteAppend a note to a call record
knowledge_list_website_docsList website knowledge docs (audits, design specs, skills)
get_uploader_linkGenerate a one-time 5-minute URL for asset uploads

Resources

ResourceDescription
asset://listList 50 most recent client assets
asset://{assetRef}Metadata for a specific asset
knowledge://website/{id}/auditWebsite audit document
knowledge://website/{id}/designWebsite design system doc
knowledge://website/{id}/skillWebsite interaction skill doc
knowledge://doc/{docId}Generic knowledge document

GHL

GoHighLevel CRM and calendar operations.

Tools

ToolDescription
ghl_get_availabilityQuery calendar free slots
ghl_book_appointmentCreate appointment + contact
ghl_get_contactSearch contact by phone
ghl_create_contactCreate new GHL contact
ghl_update_contactUpdate contact fields
ghl_get_appointmentsList appointments for a contact
ghl_cancel_appointmentCancel/delete appointment
ghl_send_smsSend SMS via GHL
ghl_get_pipelineRetrieve sales pipeline stages
ghl_update_opportunityMove opportunity through pipeline
ghl_get_email_templatesList Email Builder templates
ghl_get_email_campaignsList scheduled campaigns
ghl_create_email_campaignCreate/schedule newsletter

Resources

ResourceDescription
ghl://contacts/{contactId}Contact details
ghl://calendar/{calId}/slotsFree slots (next 14 days)

GHL Social

GHL Social Planner operations.

Tools

ToolDescription
ghl_social_get_accountsList connected social accounts
ghl_social_get_postsList scheduled/published posts
ghl_social_get_post_statusCheck status of a specific post
ghl_social_create_postCreate and schedule a post
ghl_social_edit_postEdit an existing post
ghl_social_delete_postRemove a post
ghl_social_get_media_libraryBrowse uploaded media
ghl_social_get_tagsList available tags
ghl_social_get_categoriesList content categories
ghl_social_get_account_analyticsPerformance metrics per account

GA4

Google Analytics 4 reporting.

Tools

ToolDescription
ga4_get_accountsList GA4 accounts and properties
ga4_get_property_detailsProperty info (timezone, currency, industry)
ga4_run_reportFlexible Data API report with dimensions, metrics, filters
ga4_run_realtime_reportRealtime metrics
ga4_get_custom_definitionsCustom dimensions & metrics

Resources

ResourceDescription
ga4://property/{propertyId}Property details
ga4://property/{propertyId}/traffic-summary28-day traffic summary

GBP

Google Business Profile management.

Tools

ToolDescription
gbp_list_locationsList connected GBP locations
gbp_get_locationFull location data
gbp_get_attributesCurrent location attributes
gbp_get_available_attributesAttributes available for the category
gbp_get_performance28-day performance metrics
gbp_patch_locationUpdate description, hours, etc.
gbp_update_attributesSet/update attributes
gbp_list_categoriesSearch GBP categories
gbp_list_usable_imagesList assets usable on GBP
gbp_upload_client_imagesUpload client assets to GBP media
gbp_list_auditsAudit history
gbp_get_auditSpecific audit with scores

Resources

ResourceDescription
gbp://locationsAll connected locations
gbp://location/{connectionId}Location details
gbp://location/{connectionId}/performance28-day performance

GitHub

GitHub repository operations.

Tools

ToolDescription
github_list_sitesList connected GitHub repos for the client
github_get_capabilitiesGitHub execution capabilities, and repo metadata for a specific connection
github_read_fileRead a repository file
github_list_treeList repo tree structure
github_create_branchCreate a non-default branch from the default branch or another base branch
github_apply_change_setApply a multi-file change set as one commit and one branch update
github_stage_assetStage a stable client asset reference into the repo via the change-set workflow
github_upload_imageUpload an image into the repo
github_get_diff_summaryCompare-based diff summary between a base branch and a review branch
github_create_pull_requestOpen a PR from a review branch back to the default (or another explicit base) branch

Google Ads campaign management.

Tools

ToolDescription
google_ads_list_connectionsList connected Google Ads accounts
google_ads_list_accessible_customersAccessible customers via API
google_ads_run_gaqlRun read-only GAQL query
google_ads_get_campaignsList campaigns
google_ads_get_keywordsKeywords per campaign
google_ads_get_landing_pagesConnected landing pages
google_ads_create_landing_pageBuild a new landing page draft
google_ads_run_auditRun account audit
google_ads_commit_auditSave audit results
google_ads_get_agent_configRead the autonomous agent's autonomy level, hard monthly spend cap, and per-dimension audit auto-commit flags
google_ads_configure_agentSet the autonomous agent's autonomy level, auto-commit dimensions, and/or hard monthly spend cap

Meta Ads

Meta (Facebook/Instagram) Ads management.

Tools

ToolDescription
meta_ads_list_resourcesList ad accounts, Pages, Pixels
meta_ads_get_campaignsList campaigns
meta_ads_get_adsetsAd sets per campaign
meta_ads_get_adsAds per ad set
meta_ads_create_campaignCreate new campaign
meta_ads_update_campaignModify campaign settings
meta_ads_create_lookalikeBuild lookalike audience
meta_ads_get_creative_performanceCreative-level metrics
meta_ads_run_auditRun account audit
meta_ads_commit_auditSave audit results
meta_ads_run_competitive_researchAnalyze competitor ads

Reddit Ads

Reddit Ads campaign research and management.

Tools

ToolDescription
reddit_ads_list_connectionsList Reddit Ads account bindings for the active client
reddit_ads_get_account_healthConnection health, promo setup, and API token state
reddit_ads_run_insightsFixture-safe performance metrics for a connected account
reddit_ads_run_auditRun the promo, tracking, community, creative, and budget audit
reddit_ads_commit_auditMark operator-approved audit gaps (defaults to dry run)
reddit_ads_run_thread_researchScan public Reddit threads for prospect pains, objections, and a Reddit-native creative brief before drafting
reddit_ads_create_campaign_draftCreate a campaign draft (does not start live spend); supports researchFirst to scan threads before filling creative, auto-generates a thumbnail unless one is supplied
reddit_ads_start_agentStart the Reddit Ads audit loop (does not start campaign spend)
reddit_ads_stop_agentStop the Reddit Ads audit loop (does not pause live campaigns)
reddit_ads_run_agent_nowRun the Reddit Ads agent loop immediately

WordPress

WordPress site content management, generic REST entity CRUD, SEO metadata, and Elementor page editing.

Discovery & Media

ToolDescription
wordpress_list_sitesList connected WordPress sites for the client
wordpress_get_capabilitiesSupported connector capabilities, and connection details for a specific site
wordpress_list_mcp_abilitiesList enabled abilities from the connected WordPress MCP Adapter
wordpress_execute_mcp_abilityExecute one allowlisted ability through the WordPress MCP Adapter
wordpress_upload_imageUpload an image into the site's media library
wordpress_upload_media_from_assetUpload a stable client asset reference into the media library
wordpress_reconfigure_plugin_updatesDestructive. Re-push the Affinity plugin's update configuration (API URL, install ID, site token, update channel, clientId pairing) to a connected site. Use after a plugin release adds a new pairing field so an already-updated plugin picks it up without waiting for the site's own refresh cycle.

Posts & Pages

ToolDescription
wordpress_list_contentList posts or pages for a connected site
wordpress_read_contentRead an existing post or page by slug
wordpress_replace_content_textReplace exact text inside a post/page without rewriting the whole page HTML
wordpress_write_contentUpdate a post/page by slug, or create one if the slug doesn't exist
wordpress_bulk_create_contentCreate multiple content items from a template and entry list

Generic Entities & Taxonomy

ToolDescription
wordpress_list_entity_typesDiscover REST-exposed content types, including custom post types, and whether the route is writable
wordpress_list_taxonomiesDiscover REST-exposed taxonomies globally or for a specific post type
wordpress_list_entitiesList entities for a specific post type, including custom post types
wordpress_read_entityRead an entity by post type plus id or slug
wordpress_write_entityCreate or update an entity with publish-state control
wordpress_upsert_termCreate or update a taxonomy term
wordpress_assign_termsAssign taxonomy terms to an entity

SEO & Sitemap

ToolDescription
wordpress_read_seo_metaRead SEO meta fields (Yoast/Rank Math compatible where available)
wordpress_write_seo_metaUpdate supported SEO meta fields
wordpress_read_sitemapRead the sitemap index/XML, optionally expanding child sitemaps into a URL inventory
wordpress_create_redirectCreate a Rank Math redirect

Elementor

ToolDescription
wordpress_read_elementor_pageRead Elementor layout data for a post or page
wordpress_list_elementor_elementsList Elementor elements so widget IDs can be identified before edits
wordpress_get_elementor_widgetRead a single Elementor widget by widget ID
wordpress_backup_elementor_pageCreate a safe data backup before manual or automated edits
wordpress_update_elementor_widgetUpdate a single Elementor widget
wordpress_plan_elementor_changeResolve likely widget targets for a bounded structured request, without a raw widget ID
wordpress_preview_elementor_changePreview a bounded smart plan: selected target, current data, merged changes, blocked reasons
wordpress_apply_elementor_changeApply a bounded smart plan through the widget-level edit path (backup-first, access-mode enforced)

Twilio

Twilio number and messaging management.

Tools

ToolDescription
test_twilio_connectionVerify credentials
twilio_list_numbersList account phone numbers
twilio_send_smsSend SMS via Twilio (guarded by website binding)
twilio_describe_resourcesShow client Twilio resources
twilio_bind_websiteBind number to website for SMS

SendGrid

SendGrid email operations.

Tools

ToolDescription
sendgrid_list_sendersList sender identities/domains
sendgrid_send_emailSend email (guarded by website binding)
sendgrid_describe_resourcesShow client SendGrid resources
sendgrid_bind_websiteBind sender to website
sendgrid_setup_domain_authConfigure domain authentication
sendgrid_verify_domainVerify DNS records

Image Generation

AI-powered image creation, vectorization, and branded social rendering.

Tools

ToolDescription
image_create_sessionStart a persisted multi-turn image generation session and generate the first turn
image_continue_sessionContinue an existing image session; reuses the previous turn's assets by default
image_vectorize_assetConvert a stored raster asset into a true-vector SVG (Recraft) as a new asset
image_get_sessionGet one persisted image session, including turn history and asset refs
image_list_sessionsList recent persisted image sessions for the current client
social_brand_renderRun the branded social art-director and image compiler pipeline for a content brief
social_design_ideatePropose reusable branded social design recipes for review without saving them

For a true vector SVG (logos, icons, scalable/print-ready graphics), pass model: "recraft-ai/recraft-v4.1-svg" (aliases svg/vector) to image_create_session/image_continue_session. To convert an existing raster asset instead of regenerating it, use image_vectorize_asset.


Cloudflare

Cloudflare infrastructure management.

Tools

ToolDescription
cloudflare_list_resourcesList account inventory and bindings
cloudflare_list_dnsDNS records for a zone
cloudflare_update_dnsModify DNS records
cloudflare_get_deploymentsPages deployment history
cloudflare_watch_deploymentMonitor deployment status
cloudflare_bind_websiteBind site to Cloudflare project

Verification

Post-operation validation.

Tools

ToolDescription
mcp_verify_operationVerify a recent write succeeded before calling it done

This tool normalizes checks across Cloudflare Pages, WordPress, GitHub-backed sites, and other public providers. If verification fails, inspect the logs, patch the issue, and verify again.


Docs

Affinity public documentation — search and read customer-facing help articles from within any AI session. The docs plugin connects to the public docs app at https://docs.affinitydesign.ca/api/mcp through the af-gemini-connect bridge, and prefixes upstream tool names before exposing them.

Tools

ToolDescription
docs_searchSearch documentation pages by keyword or customer support question. Returns matching pages with titles, descriptions, URLs, and slugs.
docs_get_pageRead the full MDX content for a documentation page slug (e.g. clients/getting-started).

Configuration

No API key is required — the docs MCP endpoint is public and read-only. Optional environment overrides:

VariableDefaultDescription
DOCS_MCP_URLhttps://docs.affinitydesign.ca/api/mcpUpstream MCP endpoint URL
DOCS_MCP_TIMEOUT_MS10000Request timeout in milliseconds

Enablement

For client-scoped MCP API keys or Command Center sessions, ensure docs is included in the enabled plugin list when the client has an explicit plugin allowlist.


Vercel

Vercel deployment management and GitHub-backed website verification.

Tools

ToolDescription
vercel_list_resourcesList connected Vercel account inventory and website bindings for this client, including projects and deployment feedback status.
vercel_bind_websiteBind a connected website to a Vercel project so MCP verification can poll deployments and build logs after GitHub-backed website changes.
vercel_list_deploymentsList recent Vercel deployments for a bound website or Vercel project.
vercel_get_deployment_logsFetch Vercel deployment build logs for a bound website/project deployment.
vercel_watch_deploymentPoll Vercel after a GitHub website change. Returns success, pending state, or failure with redacted build-log lines so the agent can debug and apply a follow-up fix.

Binding a Website

After a client-level Vercel connection exists, bind the connected website to the project that deploys it:

POST /admin/clients/:clientId/websites/:websiteId/connections/bind
Content-Type: application/json

{
  "serviceType": "vercel",
  "sourceConnectionId": "connection_id",
  "projectId": "prj_xxx",
  "projectName": "client-site",
  "teamId": "team_xxx"
}

App-Side Verification Token

The app-side verification loop uses one of these token sources (not passed through MCP tool arguments):

  • Per-client connection: save a client-level vercel connection with a Vercel API token.
  • Deployment fallback: set VERCEL_API_TOKEN in the app environment.
  • Team-scoped accounts: set VERCEL_TEAM_ID or VERCEL_TEAM_SLUG on the connection.

Never put the Vercel API token in committed files, MCP tool calls, screenshots, or deployment logs.

Official Vercel MCP for Codex

Vercel's official remote MCP endpoint (https://mcp.vercel.com) can be registered in Codex for interactive inspection, deployment details, logs, docs, and project context:

codex mcp add vercel --url https://mcp.vercel.com
codex mcp login vercel
codex mcp list

Communications

Website form management and form receiver configuration.

Tools

ToolDescription
communications_get_form_receiverReturn the platform form receiver for a website. Provisions a stable receiver token when missing unless provisionIfMissing is false.
communications_scan_website_formsScan a public website for forms and map the observed forms into the website form registry.
communications_update_website_formUpdate one website form's registry settings such as displayName, status, deliveryMode, validation, notification, or webhook routing.
communications_register_website_formRegister or upsert a newly created website form directly into the Forms UI and platform receiver handling.
communications_delete_website_formDelete a stale or incorrect website form from the registry so a fresh scan can recreate the current live form.

Form Delivery Modes

The deliveryMode property controls how form submissions are processed:

ModeDescription
autoAutomatic delivery via detected integration (GHL, email, webhook)
nativeNative platform receiver without external integration
ghlDeliver to GoHighLevel pipeline
emailSend to notification email addresses
webhookForward to configured webhook URL

Website Offers

Provisions GitHub/Cloudflare infrastructure for paid Website-Day starter-site orders (the self-serve offer funnel), and validates generated builds before commit.

Tools

ToolDescription
website_offer_get_configRead the offer funnel config: checkout capacity, starter credits, GitHub template status, Cloudflare target settings
website_offer_get_orderFetch an offer order by id with payment, intake, build, GitHub, Cloudflare, and delivery status
website_offer_start_buildStart the controlled build lifecycle for a paid order after intake is complete
website_offer_retry_buildRetry the build lifecycle for a recoverable failed or review-state order
website_offer_nuke_and_restartWipe all generated artifacts (app/, components/, src/, checkpoint commits) and immediately start a fresh build — more destructive than retry
website_offer_validate_buildValidate a generated file set before committing it
github_create_site_from_templateCreate a GitHub repo from the configured Website-Day template
cloudflare_create_pages_projectCreate or return a Cloudflare Pages project for a GitHub repo
cloudflare_add_pages_domainAssociate an agency subdomain with a Cloudflare Pages project
cloudflare_upsert_dns_recordCreate or update the DNS record for an agency-owned Website-Day subdomain
agency_ghl_upsert_waitlist_leadCreate or update a waitlist lead and push it to the agency GHL waitlist when configured

Resource URIs Quick Reference

Use these URIs directly in prompts or tool arguments:

PatternExample
asset://listAll recent assets
asset://asset_abc123Specific asset metadata
knowledge://website/{id}/auditWebsite audit
knowledge://website/{id}/designDesign system
knowledge://website/{id}/skillInteraction skill
ghl://contacts/{id}GHL contact
ghl://calendar/{id}/slotsCalendar availability
ga4://property/{id}GA4 property
gbp://location/{id}GBP location

On this page