seo 0.3.0-beta.2 → 0.3.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 CHANGED
@@ -3,11 +3,14 @@
3
3
  Last updated: 15 October 2026
4
4
 
5
5
  This policy covers the official `seo` command-line tool, library, MCP server,
6
- the hosted MCP server at seoskill.dev/mcp, and the seoskill.dev website.
6
+ the hosted MCP server at seoskill.dev/mcp with its account page, and the
7
+ seoskill.dev website.
7
8
 
8
- In short: the hosted MCP never stores your data, API keys are never stored,
9
- and the only thing kept about your use is an anonymous usage count (the event,
10
- report, agent, version and week).
9
+ In short: the hosted MCP keeps only your linked Google accounts and any API
10
+ keys you save, encrypted, so it can fetch your own data when you ask. It never
11
+ keeps your Search Console or analytics data, your reports or a log of your
12
+ requests. The only thing kept about your use is an anonymous usage
13
+ count (the event, report, agent, version and week).
11
14
 
12
15
  The command-line tool runs on your machine. It does not create an SEO
13
16
  account, upload reports to a hosted SEO service, or send reports or connected
@@ -21,30 +24,52 @@ the work you requested. The sections below explain what each request can send.
21
24
  ## The hosted MCP server
22
25
 
23
26
  The hosted MCP server at `https://seoskill.dev/mcp` runs the same reports
24
- for an MCP client you connect to it. It never stores your data or your keys.
25
- There is no database, account or log of your data. The only thing it keeps is
26
- the anonymous usage count described below.
27
-
28
- - **Google sign-in.** You sign in with Google and grant read-only access to
29
- Search Console and Google Analytics. The resulting Google tokens are sealed
30
- (encrypted) into the tokens your MCP client keeps. The server keeps no
31
- copy. Revoking the app in your
32
- [Google Account connections](https://myaccount.google.com/connections)
33
- stops them working.
34
- - **API keys.** Keys for DataForSEO and Ahrefs are optional. You can enter
35
- them on the sign-in page, where they are sealed into the same tokens, or
36
- send them as request headers. A key is used for the request it arrives with and is never stored.
27
+ for an MCP client you connect to it. To do that it keeps a small store in
28
+ Cloudflare D1 with only these things:
29
+
30
+ - **A person id.** A random id created the first time you sign in with
31
+ Google. That first Google account is your account. There is no password.
32
+ - **Your linked Google accounts.** The email address of each Google account
33
+ you link, and its refresh and access tokens. You grant read-only access to
34
+ Search Console and Google Analytics.
35
+ - **Your API keys, if you save them.** A DataForSEO login and password and an
36
+ Ahrefs key.
37
+
38
+ Every token and key is encrypted with a server key before it is written. The
39
+ tokens are used only to fetch your own data when you or your agent ask for
40
+ it. The token your MCP client keeps carries only your person id.
41
+
42
+ The server keeps nothing else. It does not keep reports, Search Console
43
+ or Google Analytics rows, lists of your sites, or the pages it checked.
44
+ Request logs are turned off.
45
+
37
46
  - **Your data.** Search Console, Google Analytics and provider responses are
38
- fetched for each request, returned to your MCP client and not kept. Pages
39
- checked live are fetched for the request and not kept.
40
- - **Outside services.** Google answers the Google requests. The provider you
41
- choose receives your research request under its own policy. Ahrefs
42
- receives the domains in research rows for the free Domain Rating column.
43
- Cloudflare runs the server and handles the network requests.
47
+ fetched for each request, returned to your MCP client and not kept. Pages checked live are fetched for the request and not kept.
48
+ - **API key headers.** You can send `X-DataForSEO-Login`,
49
+ `X-DataForSEO-Password` and `X-Ahrefs-Key` headers instead of saving keys.
50
+ A header wins over a saved key and is used for that request only.
51
+ - **The account page.** At [seoskill.dev/account](https://seoskill.dev/account)
52
+ you sign in with Google to see your linked accounts, add or remove them,
53
+ and save or remove keys. It sets one essential cookie that holds your
54
+ encrypted person id for up to 30 days.
55
+ - **Outside services.** Google answers its own requests. The provider you
56
+ choose receives your research request under its own policy.
57
+ Ahrefs receives the domains in research rows for the free Domain Rating
58
+ column. Cloudflare runs the server, stores the encrypted data and handles
59
+ the network requests.
44
60
  - **Usage counts.** Each run sends one anonymous event to the same telemetry
45
61
  endpoint the CLI uses, with the event, report, agent, version and week. It
46
62
  never contains a site, URL, query, key, account or report data.
47
63
 
64
+ ### Delete your hosted data
65
+
66
+ Sign in at [seoskill.dev/account](https://seoskill.dev/account) and choose
67
+ **Delete everything**. It deletes your person id, linked accounts and keys,
68
+ and revokes the Google sign-ins. Your agents will ask you to sign in again if
69
+ you use the hosted server later. You can also revoke SEO Skill in your
70
+ [Google Account connections](https://myaccount.google.com/connections), which
71
+ stops the stored Google tokens working.
72
+
48
73
  Your MCP client and its model provider receive the results under their own
49
74
  terms.
50
75
 
@@ -86,6 +111,16 @@ CI can use `SEO_CLICKY_SITEKEY` without saving it. Clicky responses are cached
86
111
  locally for up to 24 hours, and cache keys and cached responses do not contain
87
112
  the sitekey.
88
113
 
114
+ ## Bing data the software can access
115
+
116
+ Bing access is optional. In the command-line tool and local MCP server, you
117
+ save a Bing Webmaster API key with `seo providers bing connect`, or set
118
+ `SEO_BING_API_KEY`. The key is saved in the system keychain when available,
119
+ with a private local file fallback. Requests go directly from your machine to
120
+ Bing over HTTPS and can read the sites that key can read. Run
121
+ `seo providers bing disconnect` to remove the saved key. The hosted MCP
122
+ server does not read Bing data.
123
+
89
124
  ## How Google data is protected
90
125
 
91
126
  The software stores project profiles, settings, OAuth tokens, cached API
@@ -300,8 +335,10 @@ copy, publish, transmit, or pass it to an agent or application yourself.
300
335
  ## Removing access and local data
301
336
 
302
337
  Use `seo auth logout` to remove local Google tokens. Use
303
- `seo providers dataforseo disconnect` or `seo providers ahrefs disconnect` to
304
- remove the corresponding saved provider credential. Environment variables are
338
+ `seo providers dataforseo disconnect`, `seo providers ahrefs disconnect` or
339
+ `seo providers bing disconnect` to remove the corresponding saved credential.
340
+ To remove what the hosted MCP keeps, use **Delete everything** on the
341
+ [account page](https://seoskill.dev/account). Environment variables are
305
342
  controlled by your shell or runtime and are not changed by these commands. Use `seo privacy` to
306
343
  inspect local paths and `seo reset --yes` to remove every saved credential and
307
344
  local file managed by the software.
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
  <h1 align="center">SEO Skill</h1>
9
9
 
10
10
  <p align="center">
11
- The SEO command for AI agents. Give your agent your own Search Console and analytics data, with Google update dates beside it, and keyword data from your own provider key.
11
+ The SEO command for AI agents. A free Google Search Console MCP server and CLI: your agent reads your real Search Console, Google Analytics and Bing data, with Google update dates beside it, plus keyword research from your own DataForSEO or Ahrefs key.
12
12
  </p>
13
13
 
14
14
  <p align="center">
@@ -18,8 +18,6 @@
18
18
  ·
19
19
  <a href="https://seoskill.dev/docs">Documentation</a>
20
20
  ·
21
- <a href="https://seoskill.dev/docs/mcp">Hosted MCP</a>
22
- ·
23
21
  <a href="https://www.npmjs.com/package/seo">npm</a>
24
22
  ·
25
23
  <a href="https://github.com/iannuttall/seo/issues">Questions</a>
@@ -43,8 +41,8 @@
43
41
  </p>
44
42
 
45
43
  Ask your agent what is happening in search and get an answer built from your
46
- own Search Console, Google Analytics and Clicky data, with Google update dates
47
- laid over it. Add your own DataForSEO or Ahrefs key when you need keyword,
44
+ own Search Console, Bing Webmaster Tools, Google Analytics and Clicky data,
45
+ with Google update dates laid over it. Add your own DataForSEO or Ahrefs key when you need keyword,
48
46
  SERP, competitor or backlink data.
49
47
 
50
48
  The results are facts with their dates and limits. There is no advice baked
@@ -81,15 +79,22 @@ claude mcp add --transport http seoskill https://seoskill.dev/mcp
81
79
  codex mcp add seoskill --url https://seoskill.dev/mcp
82
80
  ```
83
81
 
84
- Sign in with Google when the client asks. The server stores nothing. Your
85
- sign-in and any provider keys are sealed into the token your MCP client
86
- keeps, or sent as headers on each request. The
82
+ Sign in with Google when the client asks. That first Google account is your
83
+ account, so there is no password or separate signup. The server keeps only
84
+ your linked Google accounts and any API keys you save, encrypted. It keeps no
85
+ report data, no Search Console or analytics rows and no request logs.
86
+
87
+ Your [account page](https://seoskill.dev/account) lets you add more Google
88
+ accounts, save DataForSEO or Ahrefs keys, or delete everything.
89
+ Each request uses the linked Google account that can read the site. The
87
90
  [hosted MCP guide](https://seoskill.dev/docs/mcp) covers other clients, and the
88
91
  [API keys guide](https://seoskill.dev/docs/keys) shows how to add a key
89
92
  without pasting it into a chat.
90
93
 
91
94
  A crawl fetches many pages, so `seo crawl` and `seo internal-links` run only
92
- on your machine, through the CLI or the local MCP server.
95
+ on your machine, through the CLI or the local MCP server. Bing data also runs
96
+ only there for now; when you ask the hosted server for Bing, it tells your
97
+ agent which CLI command to run.
93
98
 
94
99
  ## The eight commands
95
100
 
@@ -100,7 +105,7 @@ on your machine, through the CLI or the local MCP server.
100
105
  | `seo compare --date <date>` | `seo_compare` | Equal periods before and after a date, with the Google updates in the window |
101
106
  | `seo index` | `seo_index` | Pages that lost most of their clicks, checked live and with URL Inspection |
102
107
  | `seo research <action>` | `seo_research` | Keyword metrics, ranked keywords, SERPs, competitors and backlinks from your key |
103
- | `seo data` | `seo_data` | Raw Search Console rows; the hosted tool also reads analytics landing pages |
108
+ | `seo data` | `seo_data` | Raw Search Console rows, or Bing rows in the CLI and local server; the hosted tool also reads analytics landing pages |
104
109
  | `seo crawl <url>` | `seo_crawl` | A site crawl with technical issues and the URLs they affect (local only) |
105
110
  | `seo internal-links --url <url>` | `seo_internal_links` | Pages that could link to a target page (local only) |
106
111
 
@@ -129,8 +134,8 @@ seo report --section quick-wins
129
134
  ```
130
135
 
131
136
  The sections are `overview`, `quick-wins`, `low-ctr`, `striking-distance`,
132
- `second-page`, `content-decay`, `cannibalization` and `traffic-drop`. Page
133
- sections check their top 20 URLs live and merge same-site redirects.
137
+ `second-page`, `content-decay`, `cannibalization`, `traffic-drop` and `bing`.
138
+ Page sections check their top 20 URLs live and merge same-site redirects.
134
139
 
135
140
  Each result ends with the command to run next. A traffic drop usually leads to
136
141
  `seo compare` with the date it started, then `seo page` for the URLs that
@@ -162,7 +167,9 @@ seo providers dataforseo connect
162
167
  seo providers ahrefs connect
163
168
  ```
164
169
 
165
- Then ask for one action:
170
+ On the hosted server, save the keys on your
171
+ [account page](https://seoskill.dev/account) or send them as headers. Then ask
172
+ for one action:
166
173
 
167
174
  ```sh
168
175
  seo research keyword_metrics --keywords "invoice software,invoice template"
@@ -177,6 +184,27 @@ Ahrefs". The hosted server adds it for everyone; the CLI adds it when you have
177
184
  saved an Ahrefs key. Provider numbers are estimates. Search Console stays the
178
185
  record of what your own site actually got.
179
186
 
187
+ ## Add Bing Webmaster Tools
188
+
189
+ Bing data is free. It works in the CLI and the local MCP server. Save a Bing
190
+ Webmaster API key (Bing Webmaster Tools, then Settings, then API access):
191
+
192
+ ```sh
193
+ seo providers bing connect
194
+ ```
195
+
196
+ Agents and CI can set `SEO_BING_API_KEY` instead. `seo providers bing status`
197
+ shows the connection and `seo providers bing disconnect` removes it. The
198
+ hosted server has no Bing for now. When you ask it for Bing, it tells your
199
+ agent to run the CLI instead, the same way it does for a crawl.
200
+
201
+ `seo report` then shows Google and Bing clicks and impressions for the same
202
+ dates, and each engine's share of those clicks. The `bing` section puts Bing's
203
+ top queries and pages beside Google's numbers for the same rows, and
204
+ `seo data --source bing` returns the raw Bing rows. Bing and Google numbers sit
205
+ side by side and are never added together. Bing lists only its top queries
206
+ and pages by week, so a row missing from Bing's list is unknown, not zero.
207
+
180
208
  ## Add your analytics
181
209
 
182
210
  Google Analytics comes with your Google sign-in. Pick the property during
@@ -227,7 +255,7 @@ installed provider packages.
227
255
 
228
256
  - Missing, partial, capped and filtered data is named. It never becomes a zero
229
257
  or an all-clear.
230
- - Search Console, analytics, live page checks and provider estimates stay
258
+ - Search Console, Bing, analytics, live page checks and provider estimates stay
231
259
  apart. Query rows do not add up to site totals.
232
260
  - Flags such as likely automated queries and CTR gaps against the site's own
233
261
  curve are heuristics. They point at rows worth a look.
@@ -243,10 +271,11 @@ the same command again over a later, complete window.
243
271
  Version 0.3.0 moved most reports into the eight commands. Old names such as
244
272
  `seo quick-wins` still run in 0.3 and print the new command to use. They stop
245
273
  working in 0.4.0. Some reports and commands were removed, including rank
246
- tracking, programmatic SEO, AI search readiness, llms.txt, Bing Webmaster,
274
+ tracking, programmatic SEO, AI search readiness, llms.txt, Bing links,
247
275
  IndexNow, Semrush, local search, server logs and the monthly and narrative
248
- reports. The old research reports became `seo research`. The
249
- [changelog](CHANGELOG.md) lists every old name and where it went.
276
+ reports. Bing Webmaster search data came back in 0.3.0-beta.3. The old
277
+ research reports became `seo research`. The [changelog](CHANGELOG.md) lists
278
+ every old name and where it went.
250
279
 
251
280
  ## Use it in CI and scripts
252
281
 
@@ -314,7 +343,8 @@ seo auth logout --all
314
343
  seo reset
315
344
  ```
316
345
 
317
- The hosted server keeps no data at all. Read the
346
+ The hosted server keeps only your linked sign-ins and saved keys, encrypted,
347
+ and no report data or logs. Read the
318
348
  [privacy policy](https://seoskill.dev/privacy) for every network boundary and
319
349
  the [telemetry page](https://seoskill.dev/telemetry) for the anonymous usage
320
350
  counts and how to turn them off.
@@ -328,6 +358,7 @@ vulnerabilities privately through the process in [SECURITY.md](SECURITY.md).
328
358
  - [Getting started](https://seoskill.dev/docs/getting-started)
329
359
  - [Hosted MCP](https://seoskill.dev/docs/mcp)
330
360
  - [API keys](https://seoskill.dev/docs/keys)
361
+ - [Your hosted account](https://seoskill.dev/account)
331
362
  - [CLI](https://seoskill.dev/docs/cli)
332
363
  - [Commands](https://seoskill.dev/docs)
333
364
  - [What is stored](https://seoskill.dev/docs/privacy)