MCP for 4SEO is a Pro add-on for MCP for J that puts Weeblr's 4SEO in front of your AI client. Nineteen tools cover per-URL meta overrides, the site-wide business profile that feeds your structured data, 4SEO's own config store and the component's settings โ so a question like "which pages have a hand-written SEO title, and which are still running on whatever 4SEO sniffed off the page?" is one call rather than an afternoon of clicking through a list. It's also the odd one out in this family: it's the only add-on that writes to its extension's tables directly, because 4SEO doesn't offer anything else to write through.
Why this exists
Start with the thing that shaped the whole add-on, because it's the opposite of how every other MCP for J add-on works. The house rule is that writes go through the vendor's own models, so that whatever the vendor does on save โ validation, notifications, bookkeeping โ still happens. 4SEO doesn't give an outside caller that option. There's no public Web Services API, and nothing that behaves like the standard Joomla admin models the other add-ons lean on. So these tools write to the #__forseo_* tables themselves, and the responsibility for getting 4SEO's storage conventions right moves into the add-on. That's what most of the code here actually is: knowing that a per-page override stores three competing layers of meta data and a status column deciding which one wins, that the business profile's opening hours are a twenty-eight-field grid, and that some values live in one column until they get too big and then belong in another.
The everyday reason is simpler. SEO work is mostly auditing โ finding the pages that are missing something, or carrying something wrong, across a site with more pages than you want to open. 4SEO stores all of that and its admin screens show it to you one page at a time.
What Claude can do
Nineteen tools. The first four groups are typed wrappers that understand 4SEO's storage; the last is a deliberate escape hatch.
| Area | Tools | What you can do |
|---|---|---|
| Per-URL meta | 4 | List which pages carry an override with their custom title and description already decoded, read one in full, set a title, description, robots directive or canonical for a page, and clear an override again. |
| Business profile | 3 | Read, write and clear the site-wide profile behind 4SEO's LocalBusiness structured data: name, contact details, logo, and opening hours given as plain day-and-time entries rather than the grid 4SEO stores them in. |
| 4SEO config | 2 | Read every key in 4SEO's scoped config store with JSON values already parsed, and write one key with the encoding and the size-based column choice handled for you. |
| Component settings | 3 | Confirm 4SEO is installed and enabled and see which other Weeblr extensions are alongside it, read the component's parameters, and merge-write them so you can change one setting without disturbing the rest. |
| Table introspection | 3 | Which #__forseo_* tables this install has, what columns are in one, and how many rows match a filter. |
| Direct row access | 4 | Read, insert, update and delete rows in any #__forseo_* table, for the parts of 4SEO that don't have a typed tool yet, like redirect rules, sitemaps, Search Console data and crawl errors. |
Installing it
You'll need Joomla 5 or 6, PHP 8.2 or later, MCP for J, and 4SEO itself, which is a separate product from Weeblr. Without 4SEO installed, every tool here refuses โ they're wrappers around its storage and there's nothing for them to read.
This is a Pro add-on, so it needs an active Cybersalt Pro membership.
- Subscribe above, or get this and every other Pro add-on with MCP for J Pro โ All Access.
- Download the ZIP and install it through System โ Install โ Extensions, or paste your download URL into Install from URL.
- That's the whole install. The plugin enables itself, and the tools show up in your connected AI client the next time it lists them.
There's no admin screen for this plugin, by design โ it adds tools to MCP for J rather than a place to click. Run the component-info tool first; it's read-only and it confirms 4SEO is actually present and enabled before you start asking the rest of them for things.
Using it
Ask for what you want in plain language. "Which pages have a custom SEO title set?" is the audit query the list tool exists for. "Set the meta description on the contact page to this, and make it canonical to itself" writes both in one go. "What are we telling Google our opening hours are?" reads the business profile back in a form you can actually check.
One thing about writes is worth knowing up front, because it's the most common way to think you've changed something and find you haven't. A page's meta data in 4SEO has layers: what the component reported natively, what 4SEO worked out by looking at the rendered page, and what a human set by hand. Writing a custom value is only half the job โ there's a separate flag per field telling 4SEO's renderer to actually use the custom layer, and without it your new title sits in the database being ignored. The tools here set the value and the flag together, every time, and leave the other layers alone so 4SEO can keep refreshing them on its next crawl.
Two things about 4SEO worth knowing before you write anything
The business profile is more flexible in storage than the form admits. 4SEO's Business Profile screen offers a dropdown of LocalBusiness subtypes, and that's all you can pick. Storage doesn't enforce it โ the type is kept as a list, and the renderer takes the first entry and emits it as the schema type verbatim, so writing something the dropdown never offered does produce that type on the page. That's genuinely useful if your organisation isn't a shop. It's also the sharp edge, because the same code adds a telephone, an address and a geo reference to the node whether or not you've filled those in, and the address and geo point at entries that only get built when they have content. An organisation with no public street address ends up with references to things that don't exist, and there's no setting that removes them. If that's your situation, leaving the type empty is the clean answer โ 4SEO skips building the node entirely rather than building a broken one.
Clear the cache before you judge any structured-data output. 4SEO caches the structured data it builds. Write a change, fetch the page, see the old output, and the obvious conclusion is that the write didn't work โ which is wrong, and costs an hour. Clear the cache first, then look. And don't add a cache-busting query string to the URL while you're checking: 4SEO only injects structured data on URLs it recognises, so appending ?cb=123 gets you a page with no structured data at all, which looks far more alarming than it is.
Permissions and security
The last four tools in the table are generic: they read, insert, update and delete rows by table name, which is exactly the kind of thing that turns into a database console if nobody's careful. They don't. Every tool that accepts a table name resolves it against a forseo_ prefix and confirms the table exists before a query is built, so there's no argument you can pass that reaches #__users or #__content. The read tool takes no raw SQL at all: conditions are structured clauses combined with AND, with a short allowlist of operators, and no joins or subqueries. They're an escape hatch for the parts of 4SEO's own storage that haven't got a typed tool yet, and nothing wider than that.
Like every tool in MCP for J, these run as a real Joomla user with real permissions, and the write tools are marked as writes so your client asks before using one.
Open source
GPL-2.0-or-later, the same license as Joomla itself. Source lives on GitHub.
Add comment