Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

SEO Expert: Digital Darts

Owner verified

REMOTE · SEO.DIGITALDARTS.COM.AU

All-in-one Shopify SEO. Rank on Google and in AI search. Find what's broken and fix it in chat.

+3 this week 91 Trust /100

Last scanned (5 hours ago)

Scores higher than 98% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Marketing and SEO

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security94
Transport & Reachability100
Schema Quality & AI Usability75
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 4074 tokens (~150/item across 27 items; 27 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management97
  • Stability observed for 29 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage99
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 98% of tool parameters carry a description.Partial
  • Structured output schemas are declared (96% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 28 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
What we tested

Checks we ran (13)

  • TLS certificate
  • Authorization
  • HTTPS
  • HSTS header
  • DNSSEC
  • Transport
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Does not apply to this hosted endpoint (2)

  • Supply Chain SecurityScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.
  • Provenance & TransparencyScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.

The score does not measure everything. What the score does not measure →

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 3 Nov 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “list_resources” rewrote its description, which is the text the model reads security
    • “list_resources” reworded the description of “includeUnpublished” cosmetic
  • 2 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.

  • 30 Oct 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • New tool “fix_broken_links”, which the server declares destructive security
    • Tool “get_job_status” rewrote its description, which is the text the model reads security
    • Tool “list_broken_links” rewrote its description, which is the text the model reads security
  • 28 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

  • 26 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

  • 24 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://seo.digitaldarts.com.au/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=seo.digitaldarts.com.au CN=YE2,O=Let's Encrypt,C=US 31 Oct 2026 29 Jan 2027 ECDSA 256 ECDSA-SHA384 6731d47e71e816f7af1fe8cd57419b2590f
SANs: seo.digitaldarts.com.au
CN=YE2,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 4df3b15dd6c0784c507cd37b58e6f115
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of seo.digitaldarts.com.au. — Not signed

Zone DS Keys Algorithms Outcome
. Trust anchor 20326, 38696 8, 8 Verified
au. DS published 26642 8 Verified
com.au. DS published 14185 8 Verified
digitaldarts.com.au. No DS Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On connection
HTTP status 401

WWW-Authenticate challenge Bearer resource_metadata="https://seo.digitaldarts.com.au/.well-known/oauth-protected-resource/mcp"

Bearer resource_metadata="https://seo.digitaldarts.com.au/.well-known/oauth-protected-resource/mcp"
Header Value
strict-transport-security max-age=31536000; includeSubDomains
content-security-policy default-src 'self'; base-uri 'self'; frame-ancestors 'none'; object-src 'none'; img-src 'self' data: https:; font-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self' 'nonce-a3vpU6OZ+2QQjCs4Kl13vg=='; connect-src 'self'; form-action 'self'
x-content-type-options nosniff
referrer-policy strict-origin-when-cross-origin
permissions-policy camera=(), microphone=(), geolocation=(), payment=(), usb=(), browsing-topics=()
www-authenticate Bearer resource_metadata="https://seo.digitaldarts.com.au/.well-known/oauth-protected-resource/mcp"

Protected resource metadata

Document https://seo.digitaldarts.com.au/.well-known/oauth-protected-resource/mcp
Retrieved Yes
Resource https://seo.digitaldarts.com.au/mcp
Authorisation server https://seo.digitaldarts.com.au

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://seo.digitaldarts.com.au/mcp Verified 200
http (plaintext) http://seo.digitaldarts.com.au/mcp HTTPS enforced 301 https://seo.digitaldarts.com.au/mcp
MCP tools · 27 exposed · ~3,286 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
apply_link_titles ~103

Fill in the title attribute on internal links for up to 50 pages, using each target page's own title (the same job as the app's Link titles tab). Preview with preview_link_titles first and get the merchant's go-ahead. Runs in the background, so follow it with get_job_status.

NameTypeReqDescription
allowDuplicateboolean–Allow a title that just repeats the link text (normally skipped)
resourceIdsarrayyesFrom preview_link_titles
NameTypeReqDescription
jobIdstring–Pass to get_job_status
messagestringyes–
okbooleanyes–
totalinteger–Pages queued

No examples provided.

create_redirect ~131

Create a Shopify URL redirect. Preferred: pass brokenLinkId (from list_broken_links, internal links only) plus target, which also marks the broken link fixed. Or pass path + target directly. Targets must be an existing page on the store (or '/'); redirects into another 404 are refused.

NameTypeReqDescription
brokenLinkIdstring–Fix this broken link (preferred)
pathstring–Broken path, e.g. /products/old-handle (when no brokenLinkId)
targetstringyesWhere to send visitors, e.g. /products/new-handle or /
NameTypeReqDescription
createdbooleanyesFalse when the path already had a redirect and nothing changed
existingTargetstring–Where the path already redirected; present only when created is false
existingTargetUnknownboolean–A redirect existed but Shopify didn't reveal its target
messagestringyesWhat to tell the merchant
okbooleanyes–
pathstringyes–
targetstringyesThe target that was requested

No examples provided.

fix_broken_links ~170

Fix up to 100 broken links in one call, each its own way: "redirect" sends the old URL to a live page on this store (internal links only), "replace" points the link in the content at a new URL, "remove" takes the link out of the content and keeps its text or image, "dismiss" hides it from the list and changes nothing on the store. Use it when the merchant gives a list of old and new URLs, or wants a set of links handled the same way; for a single link, use create_redirect or replace_link. Show the merchant what will change and get their go-ahead first. One job runs per store at a time, in the background, so follow it with get_job_status.

NameTypeReqDescription
fixesarrayyes–
NameTypeReqDescription
jobIdstring–Pass to get_job_status
messagestringyes–
okbooleanyes–
queuedintegeryesFixes the job will run
rejectedarrayyesFixes that were not queued, each with why

No examples provided.

flatten_redirect_chain ~77

Point a chained redirect straight at its final destination, turning A → B → C into A → C. Takes a chainId from list_redirect_chains. A loop is refused (there's nothing sane to point at), as is a final destination that would itself 404.

NameTypeReqDescription
chainIdstringyesFrom list_redirect_chains
NameTypeReqDescription
messagestringyes–
okbooleanyes–
pathstringyes–
targetstringyesThe final destination it now points at

No examples provided.

get_backlinks ~83

The store's backlink profile snapshot (total backlinks, referring domains, rank) plus the top referring domains. Data comes from the app's monthly refresh; if no snapshot exists yet the merchant should open the Backlinks tab in SEO Expert once.

NameTypeReqDescription
limitinteger–Referring domains to return, 1 to 25. The profile totals cover every backlink regardless.
NameTypeReqDescription
availablebooleanyes–
backlinksUrlstring–Present when available is false
messagestring–Present when available is false
profileobject–Snapshot totals: backlinks, referring domains, rank
topDomainsarray––
totalDomainsinteger––

No examples provided.

get_image ~81

Fetch ONE image (by image id from get_resource) so you can actually see it. Call this before writing alt text, because alt text guessed from the product title describes the product rather than the picture. Returns the image itself, downscaled.

NameTypeReqDescription
imageIdstringyesImage id from get_resource. A Shopify media gid or the image URL also resolves.

No output schema declared.

No examples provided.

get_indexing_status ~131

Which of the store's pages are appearing in Google and which aren't, from Search Console: counts, the pages themselves, and the trend. 'Not appearing' means Google reported no impressions for that page over the window. That is a strong signal but not proof the page is unindexed, so use inspect_url for the definitive per-page check. Cached for a day; pass refresh to recompute.

NameTypeReqDescription
limitinteger–Pages to list in each group, 1 to 50. The counts and trend cover every page regardless.
refreshboolean–Recompute instead of reading cache
NameTypeReqDescription
appearingarray––
checkedAtstring––
connectUrlstring–Present when connected is false
connectedbooleanyes–
fixUrlstring––
historyarray––
messagestring–Present when connected is false
notAppearingarray––
notestring––
summaryobject––
windowobject––

No examples provided.

get_job_status ~172

Progress of the store's background work: SEO audits, link scans, and bulk jobs (meta, alt text, link fixes, link titles). Pass a jobId from run_audit / run_link_scan / apply_link_titles / fix_broken_links, or a kind to get its latest run. Call this instead of guessing whether queued work has finished. An audit appears here once a worker picks it up, which is normally within seconds.

NameTypeReqDescription
jobIdstring–From the tool that queued the work
kindstring–Return the latest run of this kind instead of one job. Use when you don't have a jobId. 'bulk' matches the most recent bulk job of ANY kind, so it can return image compression or a link job rather th…
NameTypeReqDescription
jobobject|nullyes–
recentarray––
tasksUrlstring––

No examples provided.

get_page_seo ~71

Look up a storefront URL (product/collection/page/blog/article) and return the matched resource's SEO fields plus its open audit issues and store-level issues. Use the returned resource id with update_meta_tags.

NameTypeReqDescription
urlstringyesFull storefront URL, e.g. https://example.com/products/foo
NameTypeReqDescription
issuesarrayyes–
lastAuditAtstring|null––
matchedbooleanyesWhether the URL mapped to a synced resource
resourceobject|nullyes–
storeIssuesarrayyesStore-level issues (no single page)

No examples provided.

get_resource ~77

Full SEO detail for one resource by id (from list_resources / get_page_seo): SEO title/description, meta score, and every image with its alt text (image ids feed update_image_alt).

NameTypeReqDescription
resourceIdstringyesId from list_resources or get_page_seo. A Shopify gid, numeric id or handle also resolves.
NameTypeReqDescription
editUrlstringyesAdmin deep link to the meta-tags editor
imagesarrayyes–
resourceobjectyes–

No examples provided.

get_search_performance ~197

Google Search Console data for the connected property: 'overview' (daily clicks/impressions/CTR/position totals vs the previous period), 'queries' (top search queries), or 'pages' (top pages). Data lags ~3 days by Google's design. Requires the merchant to have connected Google in the app.

NameTypeReqDescription
daysinteger–Length of the reporting window in days. Anything other than 7, 28 or 90 falls back to 28. The window ends about 3 days ago, which is Google's own reporting lag.
limitinteger–Rows to return for the 'queries' and 'pages' panels, 1 to 50. Ignored for 'overview'.
panelstring–Which view: 'overview' for whole-window totals compared with the previous period (no per-day series), 'queries' for the top search terms, 'pages' for the top URLs.
NameTypeReqDescription
connectUrlstring–Present when connected is false
connectedbooleanyes–
daysinteger––
messagestring–Present when connected is false
notestring––
panelstring––
rowsarray–queries/pages panels
totalsobject–overview panel: clicks/impressions/ctr/position
windowobject–The date range the data covers

No examples provided.

get_seo_summary ~50

Overall SEO health of the store: health score (0-100), open audit issue counts by severity (critical/warning/info), and last audit time. Start here to understand where the store stands.

Input schema present but exposes no named parameters.

NameTypeReqDescription
healthScoreinteger|nullyes0-100; null before the first audit
healthScoreAtstring|null––
lastAuditAtstring|nullyes–
openCountsobjectyes–

No examples provided.

inspect_url ~106

Definitive index check for ONE page, straight from Google's URL Inspection API: indexed or not, coverage state, verdict, last crawl, and whether Google chose a different canonical. Slower than get_indexing_status because it makes a live call per URL, so use it to confirm a specific page rather than to sweep the store. Needs owner-level access to the Search Console property; anything less comes back unavailable with an explanation.

NameTypeReqDescription
urlstringyesFull storefront URL on this store
NameTypeReqDescription
availableboolean–False when Google refused the inspection
canonicalMismatchboolean––
connectUrlstring––
connectedbooleanyes–
coverageStatestring|null––
demoboolean–Synthesized demo data, not a live Google answer
indexedboolean––
lastCrawlTimestring|null––
messagestring––
urlstring––
verdictstring|null––

No examples provided.

list_broken_links ~153

Open broken links found by the content-graph link scanner. Internal ones can be fixed with create_redirect (pass the brokenLinkId). External ones must be edited in the source content. To fix many at once, or a list of old and new URLs, use fix_broken_links. Paginated.

NameTypeReqDescription
limitinteger–Links per page, 1 to 50. Larger values are clamped, not rejected.
linkTypestring–Only links of this kind. 'internal' points back at this store and can be fixed with create_redirect; 'external' points off-site and needs replace_link. Omit for both.
pageinteger–1-based page number.
NameTypeReqDescription
fixUrlstringyesAdmin deep link to the broken-links page
linksarrayyes–
pageintegeryes–
pageCountintegeryes–
totalintegeryes–

No examples provided.

list_redirect_chains ~108

Redirects that point at another redirect (A → B → C), which wastes crawl budget and slows visitors down. Each row carries the path, the hops, the final destination, whether it loops, and where the store's own content links into it. Fix one with flatten_redirect_chain. Paginated.

NameTypeReqDescription
limitinteger–Chains per page, 1 to 50. Larger values are clamped, not rejected.
pageinteger–1-based page number.
NameTypeReqDescription
chainsarrayyes–
fixUrlstringyes–
pageintegeryes–
pageCountintegeryes–
totalintegeryes–

No examples provided.

list_resources ~313

List the store's synced content (products, collections, pages, blogs, articles) with SEO fields and meta score (0-100). Filters combine, so several can be set at once. Items search engines never see (drafts, archived and unlisted items, and products not published to the Online Store) are left out unless includeUnpublished is true, because SEO work on them is wasted. Sorted worst score first. Paginated.

NameTypeReqDescription
includeUnpublishedboolean–Include items search engines never see: drafts, archived and unlisted items, and products not published to the Online Store
limitinteger–Items per page, 1 to 50. Larger values are clamped, not rejected.
maxScoreinteger–Only items scoring at or below this meta score (0-100). 50 is a reasonable 'needs work' cut-off.
missingAltboolean–Set true for only the items carrying at least one image with no alt text. false is ignored, not inverted.
missingMetaDescriptionboolean–Set true for only the items with no meta description. false is ignored, not inverted.
missingMetaTitleboolean–Set true for only the items with no SEO title. false is ignored, not inverted.
pageinteger–1-based page number.
searchstring–Case-insensitive match on the item's title.
typestring–Only this content type. Omit for every type.
NameTypeReqDescription
pageintegeryes–
pageCountintegeryes–
resourcesarrayyes–
totalintegeryes–

No examples provided.

list_seo_issues ~136

List open SEO audit issues, optionally filtered by severity (critical|warning|info) or ruleId. Each issue includes a fixUrl deep link into the SEO Expert app where the merchant can fix it. Paginated (page, limit ≤ 50).

NameTypeReqDescription
limitinteger–Issues per page, 1 to 50. Larger values are clamped, not rejected.
pageinteger–1-based page number.
ruleIdstring–Filter to one audit rule id
severitystring–Only issues at this severity. Omit for all three, which returns critical first.
NameTypeReqDescription
issuesarrayyes–
pageintegeryes–
pageCountintegeryes–
totalintegeryes–

No examples provided.

preview_link_replacement ~84

Where a broken link actually appears in the store's content, before anything is edited: the pages, the occurrence counts, and any navigation menus containing it (menus belong to Shopify's menu editor and can't be rewritten here). Read-only. Run this before replace_link and show the merchant what would change.

NameTypeReqDescription
brokenLinkIdstringyesFrom list_broken_links
NameTypeReqDescription
menusarrayyesMenus containing the link, which the app cannot rewrite
notestring––
resourcesarrayyes–
totalOccurrencesintegeryes–

No examples provided.

preview_link_titles ~167

Internal links in the store's content that have no title attribute, with the title the app would fill in for each (taken from the target page's own title). Read-only. Pass resourceIds to inspect specific pages, or omit them to walk the pages the audit has flagged. Feed the resourceIds into apply_link_titles.

NameTypeReqDescription
allowDuplicateboolean–Allow a title that just repeats the link text (normally skipped)
limitinteger–How many flagged pages to walk, 1 to 50. Larger values are clamped, not rejected. Ignored when resourceIds is supplied.
pageinteger–1-based page number. Ignored when resourceIds is supplied.
resourceIdsarray–Omit to use the pages the audit flagged
NameTypeReqDescription
fixUrlstring––
pageinteger––
pageCountinteger––
resourcesarrayyes–
tallyobjectyesWhat apply_link_titles would do across these pages
totalinteger––

No examples provided.

replace_link ~113

Edit a broken link's href in the store's content so it points somewhere that works. This is the fix for an EXTERNAL broken link (a redirect can't help there) and the better fix for an internal one when the right page exists. Preview with preview_link_replacement first and get the merchant's go-ahead. Navigation menus can't be rewritten by the app.

NameTypeReqDescription
brokenLinkIdstringyesFrom list_broken_links
newHrefstringyesThe URL or path the link should point at
NameTypeReqDescription
failuresarray––
messagestringyes–
occurrencesReplacedintegeryes–
okbooleanyes–
remainingintegeryesPages the time budget did not reach. Greater than zero means the fix is INCOMPLETE — call this tool again with the same arguments to continue.
resourcesChangedintegeryes–

No examples provided.

run_audit ~53

Queue a fresh SEO audit of the whole store (same limit as the in-app button: one per day). The audit runs in the background, so call get_seo_summary a few minutes later for the updated score.

Input schema present but exposes no named parameters.

NameTypeReqDescription
messagestringyes–
okbooleanyes–

No examples provided.

run_link_scan ~73

Scan the store's content for broken links (same limit as the in-app button: one per day). list_broken_links reports what the LAST scan found, so run this first when the merchant has just changed content or asks whether something is still broken. Runs in the background, so follow it with get_job_status.

Input schema present but exposes no named parameters.

NameTypeReqDescription
jobIdstring–Pass to get_job_status
messagestringyes–
okbooleanyes–

No examples provided.

unhide_resource ~111

Remove Shopify's 'hidden from search engines' flag (the seo.hidden metafield) from one page, so it can be indexed and appears in the sitemap again. list_resources reports seoHidden, and a page that should rank but is hidden is one of the highest-value fixes there is. Only do this when the merchant confirms the page SHOULD be public.

NameTypeReqDescription
resourceIdstringyesId of the page to unhide, from list_resources (check its seoHidden field) or get_page_seo.
NameTypeReqDescription
messagestringyes–
okbooleanyes–
resourceIdstringyes–
seoHiddenbooleanyes–

No examples provided.

update_image_alt ~107

Set the alt text for ONE image (by image id from get_resource). Writes to Shopify immediately. Good alt text describes the image for screen readers in ≤ 125 characters, with no 'image of' and no keyword stuffing. Empty string clears.

NameTypeReqDescription
altstringyesWhat the image actually shows, in ≤ 125 characters. Empty string clears the alt text.
imageIdstringyesImage id from get_resource. Call get_image first to see what it shows.
NameTypeReqDescription
altTextstring|null––
missingAltCountinteger–Remaining images without alt on the resource
okbooleanyes–

No examples provided.

update_image_alt_bulk ~133

Set alt text for up to 50 images in one call (image ids from get_resource). Writes to Shopify immediately; items succeed or fail independently and failures are reported per id. View every image with get_image BEFORE writing its alt, because alt text guessed from a product title describes the product rather than the picture. Same rules as update_image_alt: describe the image in ≤ 125 characters, no "image of", no keyword stuffing, empty string clears.

NameTypeReqDescription
itemsarrayyesOne entry per image, up to 50. Entries are applied independently, so one bad id does not void the rest.
NameTypeReqDescription
failedintegeryes–
missingAltRemainingintegeryesImages still missing alt text across the store
okbooleanyesTrue when every item succeeded
resultsarrayyes–
updatedintegeryes–

No examples provided.

update_meta_tags ~153

Set the SEO title and/or meta description for ONE resource (by resourceId from list_resources / get_page_seo). Writes to Shopify immediately. Guidance: titles ≤ 60 characters, descriptions 120-160 characters, front-load the keyword, no keyword stuffing. Pass an empty string to clear a field. Fields the merchant hand-edited in the app are respected as locked against templates, and this call marks edited fields as manual.

NameTypeReqDescription
resourceIdstringyesId of the item to update, from list_resources or get_page_seo.
seoDescriptionstring–Omit to leave unchanged; empty string clears
seoTitlestring–Omit to leave unchanged; empty string clears
NameTypeReqDescription
metaScoreinteger|null––
okbooleanyes–
seoDescriptionstring|null––
seoTitlestring|null––

No examples provided.

update_meta_tags_bulk ~133

Set SEO titles and/or meta descriptions for up to 50 resources in one call (resource ids from list_resources). Writes to Shopify immediately; items succeed or fail independently and failures are reported per id. Same rules as update_meta_tags: titles ≤ 60 characters, descriptions 120-160 characters, front-load the keyword, no keyword stuffing, empty string clears. Write UNIQUE copy per page, because reusing one title across items defeats the point.

NameTypeReqDescription
itemsarrayyesOne entry per item to update, up to 50. Entries are applied independently, so one bad id does not void the rest.
NameTypeReqDescription
failedintegeryes–
okbooleanyesTrue when every item succeeded
resultsarrayyes–
updatedintegeryes–

No examples provided.

Install

How do I install the SEO Expert: Digital Darts MCP server?

SEO Expert: Digital Darts is a hosted endpoint at https://seo.digitaldarts.com.au/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · seo.digitaldarts.com.au

# add to Claude Code
claude mcp add --transport http au-com-digitaldarts-seo-expert 'https://seo.digitaldarts.com.au/mcp'
Common questions

What is the SEO Expert: Digital Darts MCP server?

SEO Expert: Digital Darts is an MCP server listed in the public MCP registry as au.com.digitaldarts/seo-expert. All-in-one Shopify SEO. Rank on Google and in AI search. Find what's broken and fix it in chat. This page covers its hosted endpoint (https://seo.digitaldarts.com.au/mcp). Its publisher has verified ownership with us.

Is the SEO Expert: Digital Darts MCP server safe to use?

SEO Expert: Digital Darts scores 91 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the SEO Expert: Digital Darts MCP server expose?

SEO Expert: Digital Darts exposes 27 tools: get_seo_summary, list_seo_issues, get_page_seo, list_resources, get_resource, and 22 more. Their descriptions and schemas cost roughly 3,286 tokens of context every time the server is loaded.

Does the SEO Expert: Digital Darts MCP server require authentication?

Yes. SEO Expert: Digital Darts asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the SEO Expert: Digital Darts MCP server still maintained?

SEO Expert: Digital Darts is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What did VerifyMCP test on the SEO Expert: Digital Darts MCP server?

VerifyMCP ran 13 checks on SEO Expert: Digital Darts, covering TLS certificate, Authorization, HTTPS, HSTS header and 9 more. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.