TOČA MARIBOR is a paintless-dent-repair (PDR) workshop in Maribor, Slovenia — the people you call when your car comes home from a hailstorm covered in dimples. Their old WordPress site looked like a generic Astra template wearing a corporate-blue tie: stacked promise headings ("BREZ LAKIRANJA. BREZ KITANJA."), a service grid that read like a price list, and no real proof anywhere that an actual workshop with actual lights existed behind the page. In one focused session, an MCP-compatible AI agent connected to AgenticWP rebuilt the entire site — homepage, services, process, and CTAs — through structured MCP tool calls. This writeup walks through the homepage rebuild as the headline exhibit; inner pages were rebuilt in the same session via the same workflow. Zero minutes spent in the Elementor editor.
The old TOČA MARIBOR frontpage was technically functional and commercially flat. It worked, in the sense that a visitor could read the words and find the phone number — but it didn't sell. Symptoms:
The customer didn't hire a designer or a developer. An AI agent (Claude, via the Claude Code CLI) connected to the TOČA MARIBOR WordPress site through the AgenticWP MCP server — a single subprocess speaking the Model Context Protocol. From there, every change was a structured tool call. No Elementor editor sessions, no FTP, no copy-paste between browser tabs.
update_elementor_element — surgically replace a single widget's settings or its full element JSON, preserving its ID. Triggers Elementor's Document::save() so the rendered HTML and CSS regenerate atomically.patch_css — atomically write or remove a named CSS block inside astra-settings.custom-css. Idempotent. Roll back any block in one call by name.insert_elementor_element — slot a new container or widget into a specific position in the page tree (start / end / before / after a sibling), with parent-type validation so a widget can't accidentally land at the page root.render_page — fetch the live frontend (no auth, no editor) to verify what visitors actually see after each save, including stylesheet count, inline-style byte count, and selector-matched HTML snippets.flush_cache — flush object, Elementor and Astra CSS caches together so changes go live for visitors without an admin login.Every write went through structured tool calls authenticated as a WordPress admin. No PHP edits, no shell, no raw SQL — AgenticWP's hard "won't do" list. The customer's site stayed in known state the entire time, and every CSS block was reversible by name.
The triple-negative headline ("BREZ LAKIRANJA. BREZ KITANJA. BREZ KOMPROMISOV.") got replaced with a concrete, single-promise headline — what the workshop actually does, in two beats. The flat background was swapped for a real photo of the workshop with the car under shop lights, so the page finally communicates "an actual place exists behind this URL." Buttons were unified to a primary booking CTA + secondary "see process" link, instead of three competing actions.


The old "services" block was a single white card containing seven bulleted service names (Hladno kleparstvo · Cenitve vozil za zavarovalnice · Kleparska in ličarska dela · Vzdrževanje vozil · Menjava avtostekel · Čiščenje vozil) sitting on top of a blurred Ferrari front-end photo. Visually noisy, no scannability, no per-service detail. The agent rebuilt it as a clean six-card grid under the eyebrow "NAŠE STORITVE" and the headline "CELOVITA SKRB ZA VAŠE VOZILO" — each card has its own icon, a one-line description, and a per-service "Več →" link. Built via update_elementor_element on the existing services container so the element ID stayed intact, with a named homepage-2026-services CSS block for typography and hover states.


The original page didn't actually have a process. What it had was a "what is PDR" info card next to a heading "HLADNO KLEPARSTVO · poglejte posnetek popravila udrtine" — a card describing the technique with four feature bullets ("Postopek je hiter / Cenovno ugoden / Prijazen okolju / Ohranja originalno barvo") plus an embedded video. Useful for technique-curious visitors, useless for someone trying to decide whether to book. The agent inserted a new container into the page tree via insert_elementor_element — placed after the services block, validated as a section-type parent so the widget tree stayed structurally legal — containing a four-step horizontal timeline under the headline "OD TOČE DO PREDAJE V 48 URAH" ("from hail to delivery in 48 hours"): 1 Kontakt ali rezervacija → 2 Skeniranje vozila → 3 Hladno kleparstvo → 4 Predaja vozila. Each step has a numbered circle, a short title, and a description. The new section ships under its own named homepage-2026-process CSS block so it's removable in a single patch_css mode=remove call.


The bottom of the page used to be a low-contrast "we offer comprehensive services for…" paragraph ("NUDIMO CELOVITE STORITVE ZA CENITVE, STROKOVNO OBNOVO IN SKRBNO VZDRŽEVANJE VAŠEGA VOZILA") sitting on a noisy concrete-grey texture, with two italic testimonial blurbs floating above it and a single dark-blue "Pregled storitev in ponudbe" pill button as the only call-to-action. AgenticWP rebuilt it as a high-contrast conversion block: a deep blue gradient panel with a "VAS JE POTOLKLA TOČA?" eyebrow pill, the headline "POKLIČITE NAS. CENITEV JE BREZPLAČNA." (with BREZPLAČNA highlighted in yellow), a one-line value-prop, and a yellow primary "Rezerviraj cenitev →" button beside a ghost "Kontakt" button. Below the buttons sits a single inline utility line — opening hours · location · email — for visitors who hate forms. The agent rebuilt the section in place via update_elementor_element on the existing CTA container, preserving the element ID so the rest of the page's anchor links kept pointing at the same place.


What "one focused session" actually means in production for the TOČA MARIBOR frontpage:
patch_css mode=remove call.insert_elementor_element, with parent-type validation so the widget tree stayed structurally legal — no risk of a widget landing at the page root and tripping Document::save().One moment where the product's deliberate "no" list shaped the work in a way that mattered:
functions.php filtering the rendered HTML. AgenticWP doesn't expose a code-edit endpoint — and that constraint forced the cleaner answer: replace the actual Elementor widget in place via update_elementor_element, preserving the element ID, so the change is visible in the editor, indexable by Elementor's revision history, and removable from the customer's own admin if they ever want to roll back.AgenticWP is intentionally narrow. No PHP mutation, no plugin install, no shell, no raw SQL. Those constraints aren't gaps — they're what makes "let an AI agent run loose on my live WordPress site" a reasonable thing to do at all.
AgenticWP is a WordPress plugin + MCP server. It works with Claude Code, Cursor, Windsurf, VS Code Copilot and 15+ other MCP-compatible tools. Pay once, install once, then let the AI you already trust run your site.