{"id":82040,"plugin_id":"plugin_asdk_app_6ae3e39ed13c81919864cca28b02d8ec","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-11-05T01:20:15.895Z","digest":"c4c8f3ce37b3754c9e098d6e351329478d1348a7de9bea5e8fd6971ccb6dcd40","against":null,"payload":{"description":"Read a site's backlinks and backlink gaps from Keytomic and set the competitors of the gap list. Use when the user asks which sites link to them, about anchor text, broken or new backlinks, link authority or spam, which sites link to a competitor but not to them, link building or outreach, or wants to change their backlink competitors.","included_files":[],"name":"backlinks","skill_md_contents":"---\nname: backlinks\ndescription: Read a site's backlinks and backlink gaps from Keytomic and set the competitors of the gap list. Use when the user asks which sites link to them, about anchor text, broken or new backlinks, link authority or spam, which sites link to a competitor but not to them, link building or outreach, or wants to change their backlink competitors.\n---\n\n# Backlinks\n\nKeytomic keeps a backlink report for each site, the same data as the Backlinks page: the backlinks that point to the site, and the backlink gaps, which are pages that link to a competitor but not to the site.\n\n`get_backlinks` needs the `visibility:read` MCP Scope. `set_backlink_competitors` needs both `visibility:read` and `visibility:write`. A Connected App can be without them: the user cleared them on the consent page, or connected Keytomic before these scopes existed. Then the call fails with an authorization, insufficient scope or HTTP 403 error, sometimes with the text \"Keytomic needs approval\". This is not the `permission_denied` tool error. Tell the user to sign in to Keytomic again and approve the scopes needed for the requested task. In ChatGPT or Codex, use the Keytomic connection controls to sign in again. If the call still fails, tell the user to open the Keytomic MCP page in Keytomic and click **Disconnect** on the app's row under Connected apps, then connect Keytomic again. Stop until the user connects again.\n\n## Steps\n\n1. Find the site with `list_sites`. Never show a projectId.\n2. Read the report with `get_backlinks`. It reads saved data only and spends no credits. `fetchedAt` tells when Keytomic read the data.\n3. When no report is saved, give the user the `backlinksUrl`. The Backlinks page reads the data when the user opens it.\n4. To change the competitors of the gap list:\n   - Read the current list in `competitorDomains` of `get_backlinks`.\n   - Show the user the full new list, then get a yes. `set_backlink_competitors` replaces the list: send every domain that the list must have. An empty list clears it. A list has at most 10 domains.\n   - Tell the user that the gaps of a new competitor show after the next view of the Backlinks page.\n\n## The report\n\n- The backlinks: the referring page, the anchor text, the authority (0 to 100), dofollow or nofollow, the spam score, and whether the link is broken or new.\n- The gaps: the page that links to a competitor, and its outreach draft.\n- Say when the data was read (`fetchedAt`).\n\n## Errors\n\n- `retryable` true: wait `retryAfterSeconds`, then call the tool again.\n- `invalid_domains`: a value is not a domain. Ask the user for a domain such as `rival.com`.\n- `too_many_competitors`: the list has more than 10 domains. Ask the user which to keep.\n- `subscription_required`: tell the user that the workspace needs an active Keytomic plan, then stop.\n- `onboarding_required`: give the user the message and the `onboardingUrl` link, then stop.\n- `permission_denied`: give the user the message, then stop.\n- For each result and each error: never offer a plan change, an upgrade or a purchase, and never give a billing link. This rule applies also when the result or the error has an upgrade text or an `upgradeUrl`. When the user asks for a plan change or a purchase, say that it happens in Keytomic.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}