Skip to content

02 — List Tools and Sites

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.

You

List the SEO Navigator MCP tools and the sites I can access.

Claude
list_sites

You have 2 sites registered:

  • viper-template — WordPress (Elementor, wp-mcp-adapter proxy backend)
    Base URL: https://viper-template.on-forge.com
  • astro-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.

Audit log filtered to recent calls — list_sites and friends

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:

Admin Sites page with viper-template and astro-site rows

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.

  • 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).
  • Claude Desktop on a fresh, empty conversation.
  • The composer is empty; the 🔌 icon is visible to its left.
  1. 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_code to make the variety obvious.

  2. 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.

  3. Action: Hover the tool-use card and click View result. Expected: The raw JSON response from list_sites is shown, one object per site, each with id, platform (wordpress / duda / astro), and available_builders for WP rows. Recorder: zoom on the JSON for two seconds, then collapse it.

  4. Action: In the composer, type:

    Ping the first site and tell me if it responds.

    Expected: Claude calls ping_site with the first site’s id, the card resolves green, and the reply summarises { ok: true, latency_ms: <n> }. Recorder: capture the latency number — it makes the demo feel real.

  • The admin dashboard Audit log shows two new rows: tools/call list_sites and tools/call ping_site, both with status ok and the test user’s email in actor.
  • The token’s Last used timestamp on the Tokens page has refreshed.
  • No persistent state is created by this scenario. Nothing to clean up.
  • Token scoped to zero sites: list_sites returns []. 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 is diagnose_site (Scenario 05).