02 — List Tools and Sites
Walkthrough
Section titled “Walkthrough”Once Claude Desktop has the SEO Navigator connector wired up, the first thing to do is sanity-check the surface area: how many tools showed up, and which sites the bearer token actually grants access to.
List the SEO Navigator MCP tools and the sites I can access.
list_sites You have 2 sites registered:
viper-template— WordPress (Elementor, wp-mcp-adapter proxy backend)
Base URL:https://viper-template.on-forge.comastro-site— Astro (deploy via Cloudflare Pages)
Live URL:https://sn-astro-sites.pages.dev
31 SEO Navigator tools are available in this session — discovery + posts +
pages + GitHub markdown sync + Astro routes. The check_astro_deploy tool is
not loaded because the worker hasn’t been given a CLOUDFLARE_API_TOKEN.
To confirm Claude actually called the tool (not invented an answer), open the audit log on the worker admin dashboard. Every successful MCP tool call lands there with the actor, tool name, timing, and result status.

You should see your list_sites call near the top, status ok, with your
user_id as the actor. If you’re using a super-admin master token, the actor
column reads master instead of a username.
The reverse direction also works — the Sites page shows what’s registered:

This is where new sites get added, edited, or linked to a GitHub repo. Each row’s Builder column hints at the platform-specific workflow each site supports.
Verify that, once connected, the user can see every SEO Navigator tool inside the 🔌 menu and can ask Claude to enumerate the sites their token is scoped to.
Prerequisites
Section titled “Prerequisites”- Scenario 01 has been completed; the SEO Navigator connector is Connected.
- The test user has at least two sites linked (one WordPress, one Duda or one Astro is ideal so the output is varied).
Setup state
Section titled “Setup state”- Claude Desktop on a fresh, empty conversation.
- The composer is empty; the 🔌 icon is visible to its left.
-
Action: Click the 🔌 icon in the composer. Expected: A drop-down opens with a SEO Navigator group. Built-in tools are listed alphabetically; counts shown next to the group should read 31 or more. Recorder: scroll the list slowly and pause on
list_sites,diagnose_site,create_page_from_codeto make the variety obvious. -
Action: Close the menu. In the composer, type:
List my sites.
Press Enter. Expected: Claude announces it will call
list_sites, a tool-use card appears, then a markdown table appears in the reply with columns id, name, platform, base_url, mcp_backend. Recorder: capture the tool-use card expanding to show inputs{}and the streaming response. -
Action: Hover the tool-use card and click View result. Expected: The raw JSON response from
list_sitesis shown, one object per site, each withid,platform(wordpress/duda/astro), andavailable_buildersfor WP rows. Recorder: zoom on the JSON for two seconds, then collapse it. -
Action: In the composer, type:
Ping the first site and tell me if it responds.
Expected: Claude calls
ping_sitewith the first site’sid, the card resolves green, and the reply summarises{ ok: true, latency_ms: <n> }. Recorder: capture the latency number — it makes the demo feel real.
Verification
Section titled “Verification”- The admin dashboard Audit log shows two new rows:
tools/call list_sitesandtools/call ping_site, both with statusokand the test user’s email in actor. - The token’s Last used timestamp on the Tokens page has refreshed.
Rollback / cleanup
Section titled “Rollback / cleanup”- No persistent state is created by this scenario. Nothing to clean up.
Edge cases to capture in the recording
Section titled “Edge cases to capture in the recording”- Token scoped to zero sites:
list_sitesreturns[]. Show Claude saying “you have no sites attached” and the recorder cuts to the admin UI to attach one. - Site unreachable during ping: the card resolves red with
E_UPSTREAM_UNREACHABLE. Show the JSON error and explain the next step isdiagnose_site(Scenario 05).