Title: Advocate MCP Structured Data
Author: cameronjmcewan
Published: <strong>November 6, 2026</strong>
Last modified: November 6, 2026

---

Search plugins

![](https://ps.w.org/advocatemcp-structured-data/assets/banner-772x250.png?rev=3788560)

![](https://ps.w.org/advocatemcp-structured-data/assets/icon-256x256.png?rev=3788560)

# Advocate MCP Structured Data

 By [cameronjmcewan](https://profiles.wordpress.org/cameronjmcewan/)

[Download](https://downloads.wordpress.org/plugin/advocatemcp-structured-data.2.5.0.zip)

 * [Details](https://wordpress.org/plugins/advocatemcp-structured-data/#description)
 * [Reviews](https://wordpress.org/plugins/advocatemcp-structured-data/#reviews)
 *  [Installation](https://wordpress.org/plugins/advocatemcp-structured-data/#installation)
 * [Development](https://wordpress.org/plugins/advocatemcp-structured-data/#developers)

 [Support](https://wordpress.org/support/plugin/advocatemcp-structured-data/)

## Description

Search engines and AI assistants read structured data to understand what a
 business
is, where it is, and what it offers. This plugin puts your Advocate business profile
into your site’s `<head>` as JSON-LD, server-side, so crawlers that do not run JavaScript
can read it.

You maintain one profile on Advocate. This site follows it — there is nothing to

re-enter here when your hours, address, or services change.

**Background profile updates.** The profile is fetched in the background,
 never
while a visitor is waiting for a page. If Advocate is unreachable and a profile 
was downloaded successfully before, the plugin uses it for up to 24 hours from its
last validated download. It then pauses structured data until a valid download succeeds.
Unknown-age caches from older versions also pause until refreshed. Your site keeps
working.

### External services

This plugin connects to Advocate (https://app.advocatemcp.com), a service run by

Advocate MCP LLC. An Advocate account and a published business profile are required
to publish structured data. Advocate offers paid service plans; review current plans
at https://app.advocatemcp.com/pricing before subscribing. Installing or connecting
this plugin does not subscribe you or charge you.

**Account connection.** Only after an administrator clicks Connect Advocate,
 the
browser opens Advocate with this website’s public address, its WordPress admin return
address, and a random temporary state value. You sign in or create an account, choose
your business, and confirm. WordPress receives only the public business identifier
and website, never your Advocate password or account token. A new business stays
private until you complete onboarding and choose to publish. HTTPS is required, 
and the public website and WordPress admin must have the same origin (their paths
may differ). Manual setup remains available.

The following profile and page-view requests require a configured Business ID.
 
Directory packages make no plugin-initiated Advocate request before connection or
configuration. Self-hosted ZIP packages additionally check the public update manifest
described below, independently of configuration.

**1. Fetching your profile.** On a background refresh, about hourly, the plugin

requests `https://app.advocatemcp.com/api/biz/<your-business-id>/jsonld`. Only your
Business ID is sent. The reply is the JSON-LD this plugin prints. It is data, not
code — nothing is downloaded and run. This never happens while a visitor is waiting
for a page.

**2. Reporting page views.** After a page has finished sending, the plugin posts

to `https://app.advocatemcp.com/api/edge/plugin-beacon` to report that one page 
view happened. It sends your Business ID, your site’s hostname, the path of the 
page viewed with the query string removed, the visitor’s browser or crawler user-
agent string, the installed plugin version, and a SHA-256 hash of the visitor’s 
IP address. A hash is not a guarantee of anonymity. The raw IP address is never 
sent. The request does not block, so it cannot delay or break a page. This is what
lets your Advocate dashboard show visits and AI-crawler reads on your own site.

Directory packages do not load a remote page script.

The plugin also adds a few tags to your pages’ `<head>` (and a `Link` response
 
header) naming Advocate’s MCP endpoint for your business, and sends requests for
your site’s `/.well-known/mcp.json` to Advocate’s description of it, only when your
site would otherwise answer that address with a “not found” page. These are data;
nothing is sent anywhere.

To stop profile fetching and page-view reporting, clear the
 Business ID or deactivate
the plugin. Turning publishing off also stops scheduled page-view reporting. Page/
CDN cache hits do not run PHP and are not measured by this plugin.

**Self-hosted distribution updates.** Direct ZIP packages contain an updater
 that
periodically requests `https://app.advocatemcp.com/wordpress-plugin/advocatemcp-
structured-data.json` with the plugin version in its user-agent, even before a Business
ID is set. A copy installed before 2.5.0 lives in the `advocate-agent` folder and
requests https://app.advocatemcp.com/wordpress-plugin/advocate-agent.json instead;
both addresses offer this same release. The manifest can offer a plugin ZIP from
the same service. Directory packages omit this updater and use WordPress.org’s standard
plugin update mechanism.

Advocate’s terms of service: https://app.advocatemcp.com/terms
 Advocate’s privacy
policy: https://app.advocatemcp.com/privacy

## Installation

 1. Install and activate Advocate MCP Structured Data. If using a directory release,
    
    use Plugins  Add New. If using a downloaded ZIP, use Upload Plugin.
 2. Open Settings  Advocate and choose **Connect Advocate**. Sign in or create
     your
    Advocate account, choose the business, and confirm the website.
 3. Complete onboarding in Advocate if your business is new. Publication and any
     subscription
    are separate choices; connecting the plugin does not publish.
 4. For a published profile, open WordPress setup in Advocate and select
     **Check connection**
    to observe whether the latest profile is on your site.

A download prepared in your Advocate account can still configure a matching
 website
automatically. Existing settings are kept, including disabled publishing. To use
manual setup, enter the Business ID (the final part of the Advocate profile URL)
in Settings  Advocate. Automatic connection preserves an existing disabled publishing
setting; enable it explicitly when you are ready.

A connection attempt expires after two hours. If it expires, your WordPress
 account/
site changes, or somebody edits these plugin settings while you are away, start 
Connect Advocate again. Existing settings are kept on a refused callback. The first
profile update runs in the background; Refresh now retries it.

## FAQ

### Where can I get help?

Use the contact form at https://app.advocatemcp.com/contact or email
 support@advocatemcp.
com.

### I already use Yoast or Rank Math. Should I use both?

Probably not both for the same business. Two descriptions of one business on one

page can confuse crawlers. The settings page warns you when it detects another SEO
plugin — ask Advocate which one to keep.

### How quickly does a profile edit reach my site?

The plugin checks for updates about once an hour. Choose Refresh now to check
 sooner.
Cached pages may need to be cleared before they show the update.

Automatic checks run through WordPress scheduled tasks (WP-Cron), which only
 run
when your site is visited or when your host triggers them, so there is no fixed 
delivery deadline. “Refresh now” checks immediately; a successful check updates 
this plugin’s own copy of the profile, not caches in front of your site.

### What happens if Advocate is down?

The saved profile can appear on newly generated pages for up to 24 hours after
 
its last validated download. Failed retries do not extend that time. After that,
publishing pauses until a valid download succeeds. The settings page shows the pause
and offers Refresh now. This uses the WordPress server clock; keep it synchronized.
It does not guarantee a deadline across clock changes.

Page/CDN caches may still contain older HTML and must be cleared separately.
 This
is an outage-age limit, not an authenticated remote withdrawal signal. Updating 
the downloadable ZIP does not update existing installed copies; replace the installed
plugin through your normal WordPress update procedure.

### Does this support WordPress multisite?

Activate and configure Advocate separately on each site. New network activation

is refused, and one business is never configured for all sites. Public website path
and nondefault port must match as well as hostname. Deactivation clears that site’s
refresh tasks and cached profile while preserving its settings; reactivation needs
a fresh download. Uninstall removes plugin settings too. When two copies of the 
plugin are installed (see the 2.5.0 changelog), the notice appears on each site’s
own Plugins screen, not on the network Plugins screen. A network-wide delete of 
the earlier copy restores settings only when this copy is loaded in that Network
Admin request, that is, active on the main site; if it is active only on sub-sites,
nothing is saved anywhere.

Legacy network deactivation cleans the current network, while uninstall checks
 
all networks because plugin files are shared. Automatic cleanup is limited to 100
sites. A larger scope is refused before any site is changed. A database or cache
failure stops cleanup with an error; resolve it and retry. Completed sites may already
be cleaned. Neither operation purges existing page/CDN HTML.

### How does an administrator remove Advocate from more than 100 sites?

Use a maintenance window and a verified backup. Stop incoming PHP/cron work and

drain existing workers first; older plugin code does not honor the new inactive 
marker. Inventory every site across every network. Use WP-CLI with –skip-plugins
=advocatemcp-structured-data to deactivate the plugin on every network and any separately
active site without loading its bounded automatic hooks. Keep the plugin files in
place until every site’s cleanup is verified.

For each site URL in that inventory, run the following with the current source
 
installed (a copy installed before 2.5.0 uses the `advocate-agent` folder and main
file name in both places). Replace the example URL. This reuses the plugin’s per-
site cleanup, then removes settings only after that cleanup succeeds. Stop on any
error:

    ```
    wp --url='https://example.com/site/' --skip-plugins=advocatemcp-structured-data eval '
    require WP_PLUGIN_DIR . "/advocatemcp-structured-data/advocatemcp-structured-data.php";
    advocate_deactivate_site();
    $missing = new stdClass();
    foreach ( [ "advocate_agent_settings", "advocate_setup_import", "advocate_setup_notice", "advocate_connect_attempt", "advocate_lifecycle" ] as $key ) {
        delete_option( $key );
        if ( get_option( $key, $missing ) !== $missing ) {
            WP_CLI::error( "Cleanup failed for " . $key . "; resolve storage errors and retry." );
        }
    }
    WP_CLI::success( "Advocate data and refresh tasks cleared for this site." );'
    ```

Retain a successful receipt for every site and verify that no Advocate refresh
 
task or plugin data remains. Only then remove the shared plugin directory and clear
page/CDN caches. A site-level Delete button does not bypass the global 100-site 
uninstall preflight. This operator procedure still requires a staging rehearsal 
for your WordPress/WP-CLI and cache configuration.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Advocate MCP Structured Data” is open source software. The following people have
contributed to this plugin.

Contributors

 *   [ cameronjmcewan ](https://profiles.wordpress.org/cameronjmcewan/)

[Translate “Advocate MCP Structured Data” into your language.](https://translate.wordpress.org/projects/wp-plugins/advocatemcp-structured-data)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/advocatemcp-structured-data/),
check out the [SVN repository](https://plugins.svn.wordpress.org/advocatemcp-structured-data/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/advocatemcp-structured-data/)
by [RSS](https://plugins.trac.wordpress.org/log/advocatemcp-structured-data/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 2.5.0

 * Renamed to Advocate MCP Structured Data (slug `advocatemcp-structured-data`)
   
   for the WordPress.org plugin directory. A copy that updates in place keeps its
   settings, cached profile and scheduled refreshes unchanged. Switching from the
   earlier `advocate-agent` folder to this one by deactivating the old copy clears
   its cached profile and refresh schedule, as any deactivation does; this copy 
   downloads the profile again within a minute of activation.
 * Values read from the request (the visitor’s user agent, address and path,
    and
   the account connection callback’s method and query) pass through WordPress sanitizers
   before use. Translations load through WordPress itself.
 * A site holding both the earlier `advocate-agent` folder and this one can
    activate
   only one; the active copy says so on the Plugins screen. Switch in this order:
   deactivate the earlier copy, activate this one, and only then delete the earlier
   copy — while this copy is active it puts back anything the earlier copy’s uninstall
   removes. Deleting the earlier copy before this one is active removes the settings.
   Deleting this copy while the earlier one is installed leaves the settings for
   it.

#### 2.4.0

 * Publishes a per-business pointer to Advocate’s MCP server alongside the
    structured
   data: `<link>`/`<meta>` discovery tags, a schema.org WebAPI block, and a `Link`
   response header. The render path still performs no I/O.
 * Directory packages do not load a remote page script.
 * `/.well-known/mcp.json` on this site redirects to Advocate’s manifest for
    this
   business, only when nothing else on the site answers that address.

#### 2.3.0

 * Connect an Advocate account without copying a Business ID; preserve disabled
   
   publishing and refuse stale, expired, wrong-user or wrong-site callbacks.
 * Consume each connection and apply settings together; replay cannot overwrite
   
   later local settings. Keep new business profiles private through onboarding.
 * Prepare an explicit directory package without the self-hosted update channel
   
   or business-specific setup data; preserve direct-distribution compatibility.
 * Describe account connection, plugin-version reporting, service plans and update
   
   requests accurately. Compatibility metadata reflects tested versions only.

#### 2.2.2

 * Self-hosted update channel: the plugin now carries an `Update URI` header and
   
   checks Advocate’s version manifest for new releases, so WordPress offers updates
   without a WordPress.org listing. Update packages are requested only from app.
   advocatemcp.com over HTTPS.
 * The traffic beacon reports the installed plugin version so Advocate can show
   
   which version each site runs.

#### 2.2.1

 * Pause newly generated structured data after 24 hours without a validated
    profile
   download, including unknown-age legacy caches; show the pause in settings. Failed
   refreshes cannot renew the deadline.
 * Validate the public site path and port on downloaded and cached profiles,
    including
   every supplied identity anchor.
 * Refuse new network activation, bound legacy multisite cleanup, clear every
    refresh
   event and fence late refresh workers across deactivation/reactivation.
 * Preserve cleanup retry state and report storage failures before uninstall can
   
   remove the inactive marker. Page/CDN cache removal remains an operator step.

#### 2.2.0

 * Downloads prepared in Advocate can configure the business automatically on
    the
   matching website. Existing business settings and disabled publishing are preserved.
   Generic downloads still support manual setup.

#### 2.1.0

 * After a page has been sent, the plugin now tells Advocate one page view
    happened(
   which page, which browser or crawler), so your Advocate dashboard can show visits
   and AI-crawler reads on your own site. The visitor’s IP address never leaves 
   your server — only a one-way hash is sent. Nothing about this waits on Advocate
   or can slow a visitor down.

#### 2.0.0

 * The profile is now fetched in the background. Earlier versions could make a
    
   visitor wait up to five seconds when the cache was cold.
 * Failed fetches are remembered briefly instead of retried on every page view.
 * The block is no longer added to 404, search, or feed pages.
 * Warns when another SEO plugin is already publishing business schema.
 * Refuses to publish a profile that is anchored to a domain other than this one.
 * The settings page reports what was last published and when.
 * Setup is one field. The Agent Query URL and Business Name fields are gone.
 * Removed `/.well-known/mcp.json`. It advertised endpoints that no longer exist.

#### 1.1.0

 * Structured data injection.

#### 1.0.0

 * Initial release.

## Meta

 *  Version **2.5.0**
 *  Last updated **3 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.1.4**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [JSON-LD](https://wordpress.org/plugins/tags/json-ld/)[LocalBusiness](https://wordpress.org/plugins/tags/localbusiness/)
   [schema](https://wordpress.org/plugins/tags/schema/)[seo](https://wordpress.org/plugins/tags/seo/)
   [structured data](https://wordpress.org/plugins/tags/structured-data/)
 *  [Advanced View](https://wordpress.org/plugins/advocatemcp-structured-data/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/advocatemcp-structured-data/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/advocatemcp-structured-data/reviews/)

## Contributors

 *   [ cameronjmcewan ](https://profiles.wordpress.org/cameronjmcewan/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/advocatemcp-structured-data/)