seo 0.3.0-beta.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PRIVACY.md +72 -35
- package/README.md +87 -45
- package/SECURITY.md +2 -2
- package/dist/cli.js +89 -227
- package/dist/cli.js.map +1 -1
- package/dist/{dist-D41t9hLG.js → dist-Cv-Z5qD5.js} +1 -1
- package/dist/dist-VKoRyTMH.js +334 -0
- package/dist/dist-VKoRyTMH.js.map +1 -0
- package/dist/index.d.ts +527 -1658
- package/dist/index.js +10142 -13579
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts +2 -2
- package/dist/mcp.js +5453 -8899
- package/dist/mcp.js.map +1 -1
- package/dist/{package-1f8VcMU8.js → package-BfqlCbxN.js} +2 -2
- package/dist/{package-1f8VcMU8.js.map → package-BfqlCbxN.js.map} +1 -1
- package/evals/research.json +2 -2
- package/evals/seo.json +2 -2
- package/package.json +14 -5
- package/skills/seo/SKILL.md +30 -21
- package/dist/dist-STeaS3Hh.js +0 -698
- package/dist/dist-STeaS3Hh.js.map +0 -1
package/evals/research.json
CHANGED
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
{
|
|
29
29
|
"id": 3,
|
|
30
30
|
"prompt": "I have not set up any keyword provider. Just estimate typical volumes for these keywords yourself.",
|
|
31
|
-
"expected_output": "Should not invent search volumes. Should explain that research needs the person's own DataForSEO or Ahrefs key. For the CLI, should point to `seo providers dataforseo connect` or `seo providers ahrefs connect`. For the hosted server, should point to the
|
|
31
|
+
"expected_output": "Should not invent search volumes. Should explain that research needs the person's own DataForSEO or Ahrefs key. For the CLI, should point to `seo providers dataforseo connect` or `seo providers ahrefs connect`. For the hosted server, should point to the account page at https://seoskill.dev/account or client headers, and should not ask the person to paste a key into the chat.",
|
|
32
32
|
"assertions": [
|
|
33
33
|
"Does not invent search volumes",
|
|
34
34
|
"Explains that a DataForSEO or Ahrefs key is needed",
|
|
35
|
-
"Points to `seo providers` connect or the hosted
|
|
35
|
+
"Points to `seo providers` connect or the hosted account page",
|
|
36
36
|
"Does not ask for the key to be pasted into the chat"
|
|
37
37
|
],
|
|
38
38
|
"files": []
|
package/evals/seo.json
CHANGED
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
{
|
|
19
19
|
"id": 2,
|
|
20
20
|
"prompt": "No MCP tools are connected in this session. Get me the main SEO report for example.com as JSON.",
|
|
21
|
-
"expected_output": "Should use the CLI. Should check `command -v seo` first, and if it is missing, install it with `npm i -g seo` and tell the person to run `seo start` to sign in with Google. Should then run `seo report --site example.com --json
|
|
21
|
+
"expected_output": "Should use the CLI. Should check `command -v seo` first, and if it is missing, install it with `npm i -g seo` and tell the person to run `seo start` to sign in with Google. Should then run `seo report --site example.com --json`, and run `seo sites` first if the site is unknown. Should note that JSON mode never prompts. Should read the result before summarizing and should not fabricate output if sign-in is missing.",
|
|
22
22
|
"assertions": [
|
|
23
23
|
"Checks whether the seo command is installed before the first call",
|
|
24
24
|
"Uses `npm i -g seo` and `seo start` when the command or sign-in is missing",
|
|
25
|
-
"Runs `seo report` with --json and
|
|
25
|
+
"Runs `seo report` with --json and --site",
|
|
26
26
|
"Does not fabricate report output when the command cannot run"
|
|
27
27
|
],
|
|
28
28
|
"files": []
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "seo",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"mcpName": "io.github.iannuttall/seo",
|
|
5
|
+
"description": "The SEO command for AI agents: a free Google Search Console MCP server and CLI. Reads your real Search Console, Google Analytics and Bing data for traffic drops, quick wins, content decay, cannibalization and indexing, plus DataForSEO and Ahrefs keyword research.",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"license": "Apache-2.0",
|
|
7
8
|
"author": "Ian Nuttall",
|
|
@@ -16,6 +17,14 @@
|
|
|
16
17
|
"funding": "https://github.com/iannuttall/seo",
|
|
17
18
|
"keywords": [
|
|
18
19
|
"seo",
|
|
20
|
+
"google-search-console",
|
|
21
|
+
"search-console-mcp",
|
|
22
|
+
"seo-mcp",
|
|
23
|
+
"mcp-server",
|
|
24
|
+
"bing-webmaster-tools",
|
|
25
|
+
"dataforseo",
|
|
26
|
+
"ahrefs",
|
|
27
|
+
"agent-skills",
|
|
19
28
|
"search-console",
|
|
20
29
|
"google-analytics",
|
|
21
30
|
"keyword-research",
|
|
@@ -72,7 +81,7 @@
|
|
|
72
81
|
"deploy:web": "pnpm --filter @seo/web secrets:check && pnpm --filter @seo/web exec wrangler d1 migrations apply seo-telemetry --remote && pnpm --filter @seo/web exec wrangler deploy",
|
|
73
82
|
"deploy:web:dry-run": "pnpm --filter @seo/web exec wrangler deploy --dry-run",
|
|
74
83
|
"hooks:install": "node scripts/install-git-hooks.mjs",
|
|
75
|
-
"lint": "biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate
|
|
84
|
+
"lint": "biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate",
|
|
76
85
|
"lint:static": "biome check . && node scripts/check-emdashes.mjs && node scripts/check-report-parity.mjs && pnpm run skills:validate",
|
|
77
86
|
"lint:fix": "biome check . --write",
|
|
78
87
|
"loc:audit": "node scripts/loc-audit.mjs",
|
|
@@ -85,9 +94,9 @@
|
|
|
85
94
|
"secrets:web:check-local": "pnpm --filter @seo/web secrets:check-local",
|
|
86
95
|
"secrets:web:publish": "pnpm --filter @seo/web secrets:publish",
|
|
87
96
|
"skills:validate": "node scripts/validate-skills.mjs",
|
|
88
|
-
"test": "turbo run test && pnpm run
|
|
97
|
+
"test": "turbo run test && pnpm run test:contracts:built",
|
|
89
98
|
"test:built": "turbo run test && pnpm run test:contracts:built",
|
|
90
|
-
"test:contracts:built": "node --test scripts/package.test.mjs scripts/provider-packages.test.mjs
|
|
99
|
+
"test:contracts:built": "node --test scripts/package.test.mjs scripts/provider-packages.test.mjs",
|
|
91
100
|
"test:resources": "pnpm run build:package && pnpm run test:resources:built",
|
|
92
101
|
"test:resources:built": "node scripts/resource-harness.mjs && node scripts/provider-resource-harness.mjs && node scripts/provider-extension-resource-harness.mjs",
|
|
93
102
|
"test:package-install": "pnpm --filter @seo/core build && pnpm --filter @seo/mcp build && pnpm run build:package && node --test scripts/installed-package.test.mjs",
|
package/skills/seo/SKILL.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: seo
|
|
3
|
-
description:
|
|
3
|
+
description: Free Google Search Console MCP server and CLI for AI agents. Reads your real Search Console, Google Analytics and Bing Webmaster Tools data, plus DataForSEO and Ahrefs keyword research. Use it for any SEO question - why Google traffic or clicks dropped, organic traffic decline, quick wins, low CTR, striking distance keywords, content decay and declining pages, keyword cannibalization, indexing and URL inspection, one page's queries, Google update impact, competitor keywords, backlinks, technical SEO crawls, redirects, internal links and client SEO reports. Returns facts from your own data, never guesses.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# seo
|
|
7
7
|
|
|
8
|
-
SEO Skill returns facts from the person's own Search Console
|
|
9
|
-
with Google update dates, plus keyword and competitor data from their own
|
|
8
|
+
SEO Skill returns facts from the person's own Search Console, Bing Webmaster
|
|
9
|
+
Tools and analytics, with Google update dates, plus keyword and competitor data from their own
|
|
10
10
|
DataForSEO or Ahrefs key. It gives no advice. You read the facts, show the
|
|
11
11
|
person what matters, and decide with them what to change.
|
|
12
12
|
|
|
@@ -18,8 +18,8 @@ There are two ways to reach the same commands:
|
|
|
18
18
|
run `npm i -g seo`, then `seo start` to sign in with Google. Add `--json`
|
|
19
19
|
for machine-readable output; JSON mode never prompts.
|
|
20
20
|
|
|
21
|
-
Crawls
|
|
22
|
-
or the local MCP server.
|
|
21
|
+
Crawls, internal links and Bing run only on the person's machine, through
|
|
22
|
+
the CLI or the local MCP server.
|
|
23
23
|
|
|
24
24
|
## The commands
|
|
25
25
|
|
|
@@ -30,30 +30,30 @@ or the local MCP server.
|
|
|
30
30
|
| `seo compare --date <date>` | `seo_compare` | Equal periods before and after a date, with Google updates |
|
|
31
31
|
| `seo index` | `seo_index` | Pages that lost most of their clicks, checked live and with URL Inspection |
|
|
32
32
|
| `seo research <action>` | `seo_research` | Keyword metrics, ranked keywords, SERP, competitors, backlinks |
|
|
33
|
-
| `seo data` | `seo_data` | Raw Search Console rows; the MCP tool also reads analytics landing pages |
|
|
33
|
+
| `seo data` | `seo_data` | Raw Search Console or Bing rows (source `bing`); the MCP tool also reads analytics landing pages |
|
|
34
34
|
| `seo crawl` | `seo_crawl` | A site crawl with technical issues and the URLs they affect |
|
|
35
35
|
| `seo internal-links --url <url>` | `seo_internal_links` | Pages that could link to a target page |
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
Run `seo_sites` (or `seo sites`) when you do not know the property.
|
|
38
|
+
CLI commands need `--site` (or `--url`): `example.com`, a URL or
|
|
39
|
+
`sc-domain:example.com`. Nothing is saved between runs; keep your own notes.
|
|
39
40
|
|
|
40
41
|
## How to run them
|
|
41
42
|
|
|
42
|
-
1. Run `seo report
|
|
43
|
+
1. Run `seo report --site <site>` (or `seo_report`) without a section. It shows totals
|
|
43
44
|
against the previous period, the pages and queries that moved, and a short
|
|
44
45
|
count with top rows for each section.
|
|
45
46
|
2. Pick the one section that matters and run it with `--section <id>` (or
|
|
46
47
|
`section`). Sections: overview, quick-wins, low-ctr, striking-distance,
|
|
47
|
-
second-page, content-decay, cannibalization, traffic-drop. Page
|
|
48
|
-
check their top 20 URLs live and merge same-site redirects.
|
|
48
|
+
second-page, content-decay, cannibalization, traffic-drop, bing. Page
|
|
49
|
+
sections check their top 20 URLs live and merge same-site redirects.
|
|
49
50
|
3. Use `detail` `rows` with `offset` for the next page of rows, or `full` for
|
|
50
51
|
every field. Start with the summary; ask for more only when you need it.
|
|
51
52
|
4. Each result ends with the command to run next. Follow it when it fits the
|
|
52
53
|
question.
|
|
53
54
|
|
|
54
|
-
Each command takes
|
|
55
|
-
|
|
56
|
-
in the output.
|
|
55
|
+
Each command takes a target and optional dates. Everything else is automatic
|
|
56
|
+
and shown in the output.
|
|
57
57
|
|
|
58
58
|
## Common jobs
|
|
59
59
|
|
|
@@ -71,11 +71,22 @@ in the output.
|
|
|
71
71
|
| Internal links to a page | `internal-links` |
|
|
72
72
|
| A question the report does not answer | `data` |
|
|
73
73
|
|
|
74
|
+
## Bing
|
|
75
|
+
|
|
76
|
+
The report overview shows Google and Bing clicks for the same dates. The
|
|
77
|
+
`bing` section puts Bing's top queries and pages beside Google's numbers. Never
|
|
78
|
+
add Bing to Google. Bing lists only its top rows by week, so a missing row is
|
|
79
|
+
unknown, not zero. Bing runs in the CLI and local MCP server: connect it once
|
|
80
|
+
with `seo providers bing connect` (or `SEO_BING_API_KEY`). The hosted server
|
|
81
|
+
has no Bing yet, so its totals are Google only: no Bing data there is not
|
|
82
|
+
"no Bing traffic". Run `npx -y seo report --site <site> --section bing --json`.
|
|
83
|
+
|
|
74
84
|
## Research keys
|
|
75
85
|
|
|
76
|
-
Research costs the person's own provider credits. On the hosted server,
|
|
77
|
-
|
|
78
|
-
|
|
86
|
+
Research costs the person's own provider credits. On the hosted server, add
|
|
87
|
+
keys and missing Google accounts at `https://seoskill.dev/account`, or send
|
|
88
|
+
keys as client headers. In the CLI and local server, run
|
|
89
|
+
`seo providers <name> connect`. Domain Rating appears
|
|
79
90
|
as a free column next to domains; credit it as "Domain Rating by Ahrefs".
|
|
80
91
|
|
|
81
92
|
## Evidence rules
|
|
@@ -89,8 +100,6 @@ as a free column next to domains; credit it as "Domain Rating by Ahrefs".
|
|
|
89
100
|
- A Google update in the same window is timing, not cause.
|
|
90
101
|
- Intentional `noindex`, canonicals and redirects are observations until the
|
|
91
102
|
person says they are wrong.
|
|
92
|
-
-
|
|
93
|
-
- Show the facts, for example in a table, and ask before you edit any page.
|
|
103
|
+
- Show the facts in a table and ask before you edit any page.
|
|
94
104
|
|
|
95
|
-
Old report names
|
|
96
|
-
0.3 and print their new command. Use the new commands.
|
|
105
|
+
Old 0.2 report names, such as `seo quick-wins`, print their new command.
|