zens-ink 1.4.5__tar.gz
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.
- zens_ink-1.4.5/LICENSE +21 -0
- zens_ink-1.4.5/PKG-INFO +206 -0
- zens_ink-1.4.5/README.md +182 -0
- zens_ink-1.4.5/setup.cfg +4 -0
- zens_ink-1.4.5/setup.py +26 -0
- zens_ink-1.4.5/zens_ink/__init__.py +4 -0
- zens_ink-1.4.5/zens_ink/__main__.py +74 -0
- zens_ink-1.4.5/zens_ink/brave_volume.py +219 -0
- zens_ink-1.4.5/zens_ink/competitor_gap.py +173 -0
- zens_ink-1.4.5/zens_ink/config.py +47 -0
- zens_ink-1.4.5/zens_ink/content_matrix.py +222 -0
- zens_ink-1.4.5/zens_ink/domain_rating.py +218 -0
- zens_ink-1.4.5/zens_ink/geo_fanout.py +408 -0
- zens_ink-1.4.5/zens_ink/kd.py +856 -0
- zens_ink-1.4.5/zens_ink/keyword_cluster.py +314 -0
- zens_ink-1.4.5/zens_ink/keyword_research.py +112 -0
- zens_ink-1.4.5/zens_ink/keyword_volume.py +162 -0
- zens_ink-1.4.5/zens_ink/kgr_auto.py +195 -0
- zens_ink-1.4.5/zens_ink/mcp.py +504 -0
- zens_ink-1.4.5/zens_ink/onpage_audit.py +675 -0
- zens_ink-1.4.5/zens_ink/rank_tracker.py +298 -0
- zens_ink-1.4.5/zens_ink/reddit_blueocean.py +560 -0
- zens_ink-1.4.5/zens_ink/search_intent.py +279 -0
- zens_ink-1.4.5/zens_ink/search_performance.py +121 -0
- zens_ink-1.4.5/zens_ink/serp_intent.py +645 -0
- zens_ink-1.4.5/zens_ink/setup_gsc.py +133 -0
- zens_ink-1.4.5/zens_ink/site_audit.py +1646 -0
- zens_ink-1.4.5/zens_ink.egg-info/PKG-INFO +206 -0
- zens_ink-1.4.5/zens_ink.egg-info/SOURCES.txt +30 -0
- zens_ink-1.4.5/zens_ink.egg-info/dependency_links.txt +1 -0
- zens_ink-1.4.5/zens_ink.egg-info/entry_points.txt +2 -0
- zens_ink-1.4.5/zens_ink.egg-info/top_level.txt +1 -0
zens_ink-1.4.5/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Jask
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
zens_ink-1.4.5/PKG-INFO
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: zens-ink
|
|
3
|
+
Version: 1.4.5
|
|
4
|
+
Summary: Free SEO toolkit for indie builders — zero dependencies
|
|
5
|
+
Home-page: https://github.com/ZensInk/zens-ink-seo-package
|
|
6
|
+
Author: Jask
|
|
7
|
+
License: MIT
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: Site Management
|
|
12
|
+
Requires-Python: >=3.10
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
License-File: LICENSE
|
|
15
|
+
Dynamic: author
|
|
16
|
+
Dynamic: classifier
|
|
17
|
+
Dynamic: description
|
|
18
|
+
Dynamic: description-content-type
|
|
19
|
+
Dynamic: home-page
|
|
20
|
+
Dynamic: license
|
|
21
|
+
Dynamic: license-file
|
|
22
|
+
Dynamic: requires-python
|
|
23
|
+
Dynamic: summary
|
|
24
|
+
|
|
25
|
+
<div align="center">
|
|
26
|
+
|
|
27
|
+
<img src="assets/logo.svg" alt="ZensInk" width="80">
|
|
28
|
+
|
|
29
|
+
# ZensInk
|
|
30
|
+
|
|
31
|
+
<img src="assets/hero-banner.png" alt="ZensInk — SEO Toolkit for Indie Builders" width="100%">
|
|
32
|
+
|
|
33
|
+
### SEO Toolkit for Indie Builders
|
|
34
|
+
|
|
35
|
+
CLI tools for keyword research, competitor analysis, and technical audits. Zero dependencies, pure Python.
|
|
36
|
+
|
|
37
|
+
[English](README.md) · [中文](README.zh.md)
|
|
38
|
+
|
|
39
|
+
[](https://opensource.org/licenses/MIT)
|
|
40
|
+
[](https://www.python.org)
|
|
41
|
+
[](https://github.com/ZensInk/zens-ink-seo-package)
|
|
42
|
+
[](SKILL.md)
|
|
43
|
+
[](https://github.com/ZensInk/zens-ink-seo-package)
|
|
44
|
+
[](https://github.com/ZensInk/zens-ink-seo-package)
|
|
45
|
+
[](https://github.com/ZensInk/zens-ink-seo-package/pulls)
|
|
46
|
+
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
Thirteen CLI tools that cover the full SEO workflow — from discovering what people search, to clustering keywords by topic, to classifying search intent, to auditing your own site. No paid APIs. No Ahrefs. No subscriptions. Just free data sources wired together with Python.
|
|
52
|
+
|
|
53
|
+
| Tool | What it does | API needed |
|
|
54
|
+
|------|-------------|-----------|
|
|
55
|
+
| `keyword_research` | Discover long-tail keywords via Google Autocomplete | None |
|
|
56
|
+
| `keyword_cluster` | Group keywords into semantic topic clusters | None |
|
|
57
|
+
| `kd` | Keyword difficulty score via SERP structure analysis | Free Serper key |
|
|
58
|
+
| `kgr_auto` | KGR opportunity scoring (competition vs volume) | Optional Bing key |
|
|
59
|
+
| `keyword_volume` | Real search volume via Bing Webmaster API | Free Bing key |
|
|
60
|
+
| `brave_volume` | Cross-check search demand via Brave SERP signals | Free Brave key |
|
|
61
|
+
| `domain_rating` | Real Ahrefs Domain Rating (0-100) via the free public API | Free Ahrefs key |
|
|
62
|
+
| `search_intent` | Classify keywords by search intent (info/commercial/transactional) | None |
|
|
63
|
+
| `content_matrix` | Prioritized content opportunity matrix | None |
|
|
64
|
+
| `competitor_gap` | Compare multiple competitor sitemaps, find content gaps | None |
|
|
65
|
+
| `site_audit` | Technical SEO + GEO audit: 30 checks covering links, meta, images, structured data, AI visibility | None |
|
|
66
|
+
| `onpage_audit` | On-page quality scoring (7 dimensions, 0-100 per page) | None |
|
|
67
|
+
| `setup_gsc` | One-time OAuth setup for Google Search Console | — |
|
|
68
|
+
| `search_performance` | Your site's real Google ranking data (GSC) | Free GSC OAuth |
|
|
69
|
+
|
|
70
|
+
## Why
|
|
71
|
+
|
|
72
|
+
Ahrefs costs $200/month. SEMrush costs $130/month. For indie builders who just need to find keywords worth writing about, that's overkill.
|
|
73
|
+
|
|
74
|
+
zens.ink wires together free public data sources — Google Autocomplete, Bing Webmaster Tools, Google Search Console, Brave Search, Ahrefs Domain Rating — with zero Python dependencies.
|
|
75
|
+
|
|
76
|
+
## Install
|
|
77
|
+
|
|
78
|
+
**Option A — pip (recommended)**
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
pip install git+https://github.com/ZensInk/zens-ink-seo-package.git
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
After install, the `zens-ink` command is available globally:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
zens-ink --help
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Option B — git clone**
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
git clone https://github.com/ZensInk/zens-ink-seo-package.git
|
|
94
|
+
cd zens-ink-seo-package
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Quick Start
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
# Discover keywords (with a-z long-tail expansion)
|
|
101
|
+
zens-ink keyword_research "tarot" --expand
|
|
102
|
+
|
|
103
|
+
# Check real search volume
|
|
104
|
+
zens-ink keyword_volume "tarot reading" --country us
|
|
105
|
+
|
|
106
|
+
# Keyword difficulty (SERP-based, with Chinese mode)
|
|
107
|
+
zens-ink kd "塔罗牌" --zh
|
|
108
|
+
|
|
109
|
+
# Compare 3 competitors at once
|
|
110
|
+
zens-ink competitor_gap \
|
|
111
|
+
--url https://yoursite.com/sitemap.xml \
|
|
112
|
+
--compare https://competitor-a.com/sitemap.xml https://competitor-b.com/sitemap.xml
|
|
113
|
+
|
|
114
|
+
# Audit your build for SEO issues
|
|
115
|
+
zens-ink site_audit --dist dist --sitemap dist/sitemap.xml
|
|
116
|
+
|
|
117
|
+
# Check your own Google search performance
|
|
118
|
+
zens-ink search_performance
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
<details>
|
|
122
|
+
<summary>Not installed? Use <code>python3 -m</code> instead</summary>
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
python3 -m zens_ink.keyword_research "tarot" --expand
|
|
126
|
+
python3 -m zens_ink.kd "tarot reading"
|
|
127
|
+
python3 -m zens_ink.site_audit --dist dist --sitemap dist/sitemap.xml
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
</details>
|
|
131
|
+
|
|
132
|
+
## Use as Agent Skill
|
|
133
|
+
|
|
134
|
+
ZensInk works as an AI agent skill — let your AI assistant run SEO tools for you in plain language.
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# Install for ClawHub / OpenClaw / Hermes compatible agents
|
|
138
|
+
npx skills add ZensInk/zens-ink-seo-package --skill zens-ink
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Then just tell your AI: "find keywords for my tarot site" and it runs the tools for you. See [SKILL.md](SKILL.md) for details.
|
|
142
|
+
|
|
143
|
+
## Use as MCP Server (DSH / Claude / Codex)
|
|
144
|
+
|
|
145
|
+
ZensInk ships a built-in MCP stdio server — every tool becomes a native model tool (`mcp__zensink__keyword_research`, `mcp__zensink__kd`, ...). Pure stdlib, zero extra dependencies.
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
python3 -m zens_ink.mcp # MCP stdio server on stdin/stdout
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Add to [DeepSeek Harness (DSH)](https://github.com/deepseek-ai/deepseek-harness) — `~/.dsh/profiles/web/cordis.patch.yml`:
|
|
152
|
+
|
|
153
|
+
```yaml
|
|
154
|
+
- insert:
|
|
155
|
+
- id: mcp-zensink
|
|
156
|
+
name: '@deepseek-ai/dsh-mcp-client'
|
|
157
|
+
config:
|
|
158
|
+
serverName: zensink
|
|
159
|
+
transport: stdio
|
|
160
|
+
command: python3
|
|
161
|
+
args: ['-m', 'zens_ink.mcp']
|
|
162
|
+
toolCallTimeoutMs: 300000
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
For other MCP clients (Claude Desktop, Codex, ...), point the stdio command at `python3 -m zens_ink.mcp`. API keys are read from the package root `.env` as usual.
|
|
166
|
+
|
|
167
|
+
If the [Pro package](https://zens.ink) (`zens_ink_pro`) is installed alongside, its tools (winability, content_radar, competitor_radar, geo_score, geo_visibility, gap_deep, full_audit) are picked up automatically — the same server exposes everything available on that machine. OSS-only installs stay OSS-only.
|
|
168
|
+
|
|
169
|
+
## Typical Workflow
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
keyword_research → find what people actually search
|
|
173
|
+
↓
|
|
174
|
+
keyword_volume → filter by real demand
|
|
175
|
+
↓
|
|
176
|
+
kd → pick keywords you can actually rank for
|
|
177
|
+
↓
|
|
178
|
+
competitor_gap → see what competitors already cover
|
|
179
|
+
↓
|
|
180
|
+
site_audit → make sure your pages are crawlable
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Requirements
|
|
184
|
+
|
|
185
|
+
- Python 3.10+
|
|
186
|
+
- Zero dependencies — pure standard library
|
|
187
|
+
- Optional API keys (Bing, Serper, Brave, GSC) in `.env` — see `.env.example`
|
|
188
|
+
|
|
189
|
+
## Documentation
|
|
190
|
+
|
|
191
|
+
- **Changelog**: [CHANGELOG.md](CHANGELOG.md)
|
|
192
|
+
|
|
193
|
+
- **Full docs & case studies**: [zens.ink/docs](https://zens.ink/docs)
|
|
194
|
+
- **Pro package** (automated full-audit pipeline, HTML reports, GEO score): [zens.ink](https://zens.ink)
|
|
195
|
+
|
|
196
|
+
## License
|
|
197
|
+
|
|
198
|
+
MIT — free for personal and commercial use.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
<div align="center">
|
|
203
|
+
|
|
204
|
+
Made by [Jask](https://github.com/respectevery01)
|
|
205
|
+
|
|
206
|
+
</div>
|
zens_ink-1.4.5/README.md
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="assets/logo.svg" alt="ZensInk" width="80">
|
|
4
|
+
|
|
5
|
+
# ZensInk
|
|
6
|
+
|
|
7
|
+
<img src="assets/hero-banner.png" alt="ZensInk — SEO Toolkit for Indie Builders" width="100%">
|
|
8
|
+
|
|
9
|
+
### SEO Toolkit for Indie Builders
|
|
10
|
+
|
|
11
|
+
CLI tools for keyword research, competitor analysis, and technical audits. Zero dependencies, pure Python.
|
|
12
|
+
|
|
13
|
+
[English](README.md) · [中文](README.zh.md)
|
|
14
|
+
|
|
15
|
+
[](https://opensource.org/licenses/MIT)
|
|
16
|
+
[](https://www.python.org)
|
|
17
|
+
[](https://github.com/ZensInk/zens-ink-seo-package)
|
|
18
|
+
[](SKILL.md)
|
|
19
|
+
[](https://github.com/ZensInk/zens-ink-seo-package)
|
|
20
|
+
[](https://github.com/ZensInk/zens-ink-seo-package)
|
|
21
|
+
[](https://github.com/ZensInk/zens-ink-seo-package/pulls)
|
|
22
|
+
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
Thirteen CLI tools that cover the full SEO workflow — from discovering what people search, to clustering keywords by topic, to classifying search intent, to auditing your own site. No paid APIs. No Ahrefs. No subscriptions. Just free data sources wired together with Python.
|
|
28
|
+
|
|
29
|
+
| Tool | What it does | API needed |
|
|
30
|
+
|------|-------------|-----------|
|
|
31
|
+
| `keyword_research` | Discover long-tail keywords via Google Autocomplete | None |
|
|
32
|
+
| `keyword_cluster` | Group keywords into semantic topic clusters | None |
|
|
33
|
+
| `kd` | Keyword difficulty score via SERP structure analysis | Free Serper key |
|
|
34
|
+
| `kgr_auto` | KGR opportunity scoring (competition vs volume) | Optional Bing key |
|
|
35
|
+
| `keyword_volume` | Real search volume via Bing Webmaster API | Free Bing key |
|
|
36
|
+
| `brave_volume` | Cross-check search demand via Brave SERP signals | Free Brave key |
|
|
37
|
+
| `domain_rating` | Real Ahrefs Domain Rating (0-100) via the free public API | Free Ahrefs key |
|
|
38
|
+
| `search_intent` | Classify keywords by search intent (info/commercial/transactional) | None |
|
|
39
|
+
| `content_matrix` | Prioritized content opportunity matrix | None |
|
|
40
|
+
| `competitor_gap` | Compare multiple competitor sitemaps, find content gaps | None |
|
|
41
|
+
| `site_audit` | Technical SEO + GEO audit: 30 checks covering links, meta, images, structured data, AI visibility | None |
|
|
42
|
+
| `onpage_audit` | On-page quality scoring (7 dimensions, 0-100 per page) | None |
|
|
43
|
+
| `setup_gsc` | One-time OAuth setup for Google Search Console | — |
|
|
44
|
+
| `search_performance` | Your site's real Google ranking data (GSC) | Free GSC OAuth |
|
|
45
|
+
|
|
46
|
+
## Why
|
|
47
|
+
|
|
48
|
+
Ahrefs costs $200/month. SEMrush costs $130/month. For indie builders who just need to find keywords worth writing about, that's overkill.
|
|
49
|
+
|
|
50
|
+
zens.ink wires together free public data sources — Google Autocomplete, Bing Webmaster Tools, Google Search Console, Brave Search, Ahrefs Domain Rating — with zero Python dependencies.
|
|
51
|
+
|
|
52
|
+
## Install
|
|
53
|
+
|
|
54
|
+
**Option A — pip (recommended)**
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pip install git+https://github.com/ZensInk/zens-ink-seo-package.git
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
After install, the `zens-ink` command is available globally:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
zens-ink --help
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Option B — git clone**
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
git clone https://github.com/ZensInk/zens-ink-seo-package.git
|
|
70
|
+
cd zens-ink-seo-package
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Quick Start
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Discover keywords (with a-z long-tail expansion)
|
|
77
|
+
zens-ink keyword_research "tarot" --expand
|
|
78
|
+
|
|
79
|
+
# Check real search volume
|
|
80
|
+
zens-ink keyword_volume "tarot reading" --country us
|
|
81
|
+
|
|
82
|
+
# Keyword difficulty (SERP-based, with Chinese mode)
|
|
83
|
+
zens-ink kd "塔罗牌" --zh
|
|
84
|
+
|
|
85
|
+
# Compare 3 competitors at once
|
|
86
|
+
zens-ink competitor_gap \
|
|
87
|
+
--url https://yoursite.com/sitemap.xml \
|
|
88
|
+
--compare https://competitor-a.com/sitemap.xml https://competitor-b.com/sitemap.xml
|
|
89
|
+
|
|
90
|
+
# Audit your build for SEO issues
|
|
91
|
+
zens-ink site_audit --dist dist --sitemap dist/sitemap.xml
|
|
92
|
+
|
|
93
|
+
# Check your own Google search performance
|
|
94
|
+
zens-ink search_performance
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
<details>
|
|
98
|
+
<summary>Not installed? Use <code>python3 -m</code> instead</summary>
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
python3 -m zens_ink.keyword_research "tarot" --expand
|
|
102
|
+
python3 -m zens_ink.kd "tarot reading"
|
|
103
|
+
python3 -m zens_ink.site_audit --dist dist --sitemap dist/sitemap.xml
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
</details>
|
|
107
|
+
|
|
108
|
+
## Use as Agent Skill
|
|
109
|
+
|
|
110
|
+
ZensInk works as an AI agent skill — let your AI assistant run SEO tools for you in plain language.
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Install for ClawHub / OpenClaw / Hermes compatible agents
|
|
114
|
+
npx skills add ZensInk/zens-ink-seo-package --skill zens-ink
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Then just tell your AI: "find keywords for my tarot site" and it runs the tools for you. See [SKILL.md](SKILL.md) for details.
|
|
118
|
+
|
|
119
|
+
## Use as MCP Server (DSH / Claude / Codex)
|
|
120
|
+
|
|
121
|
+
ZensInk ships a built-in MCP stdio server — every tool becomes a native model tool (`mcp__zensink__keyword_research`, `mcp__zensink__kd`, ...). Pure stdlib, zero extra dependencies.
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
python3 -m zens_ink.mcp # MCP stdio server on stdin/stdout
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Add to [DeepSeek Harness (DSH)](https://github.com/deepseek-ai/deepseek-harness) — `~/.dsh/profiles/web/cordis.patch.yml`:
|
|
128
|
+
|
|
129
|
+
```yaml
|
|
130
|
+
- insert:
|
|
131
|
+
- id: mcp-zensink
|
|
132
|
+
name: '@deepseek-ai/dsh-mcp-client'
|
|
133
|
+
config:
|
|
134
|
+
serverName: zensink
|
|
135
|
+
transport: stdio
|
|
136
|
+
command: python3
|
|
137
|
+
args: ['-m', 'zens_ink.mcp']
|
|
138
|
+
toolCallTimeoutMs: 300000
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
For other MCP clients (Claude Desktop, Codex, ...), point the stdio command at `python3 -m zens_ink.mcp`. API keys are read from the package root `.env` as usual.
|
|
142
|
+
|
|
143
|
+
If the [Pro package](https://zens.ink) (`zens_ink_pro`) is installed alongside, its tools (winability, content_radar, competitor_radar, geo_score, geo_visibility, gap_deep, full_audit) are picked up automatically — the same server exposes everything available on that machine. OSS-only installs stay OSS-only.
|
|
144
|
+
|
|
145
|
+
## Typical Workflow
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
keyword_research → find what people actually search
|
|
149
|
+
↓
|
|
150
|
+
keyword_volume → filter by real demand
|
|
151
|
+
↓
|
|
152
|
+
kd → pick keywords you can actually rank for
|
|
153
|
+
↓
|
|
154
|
+
competitor_gap → see what competitors already cover
|
|
155
|
+
↓
|
|
156
|
+
site_audit → make sure your pages are crawlable
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Requirements
|
|
160
|
+
|
|
161
|
+
- Python 3.10+
|
|
162
|
+
- Zero dependencies — pure standard library
|
|
163
|
+
- Optional API keys (Bing, Serper, Brave, GSC) in `.env` — see `.env.example`
|
|
164
|
+
|
|
165
|
+
## Documentation
|
|
166
|
+
|
|
167
|
+
- **Changelog**: [CHANGELOG.md](CHANGELOG.md)
|
|
168
|
+
|
|
169
|
+
- **Full docs & case studies**: [zens.ink/docs](https://zens.ink/docs)
|
|
170
|
+
- **Pro package** (automated full-audit pipeline, HTML reports, GEO score): [zens.ink](https://zens.ink)
|
|
171
|
+
|
|
172
|
+
## License
|
|
173
|
+
|
|
174
|
+
MIT — free for personal and commercial use.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
<div align="center">
|
|
179
|
+
|
|
180
|
+
Made by [Jask](https://github.com/respectevery01)
|
|
181
|
+
|
|
182
|
+
</div>
|
zens_ink-1.4.5/setup.cfg
ADDED
zens_ink-1.4.5/setup.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from setuptools import setup, find_packages
|
|
2
|
+
|
|
3
|
+
setup(
|
|
4
|
+
name="zens-ink",
|
|
5
|
+
version="1.4.5",
|
|
6
|
+
description="Free SEO toolkit for indie builders — zero dependencies",
|
|
7
|
+
long_description=open("README.md").read() if __import__("os").path.exists("README.md") else "",
|
|
8
|
+
long_description_content_type="text/markdown",
|
|
9
|
+
author="Jask",
|
|
10
|
+
url="https://github.com/ZensInk/zens-ink-seo-package",
|
|
11
|
+
license="MIT",
|
|
12
|
+
packages=find_packages(),
|
|
13
|
+
python_requires=">=3.10",
|
|
14
|
+
install_requires=[], # Zero dependencies — pure stdlib
|
|
15
|
+
entry_points={
|
|
16
|
+
"console_scripts": [
|
|
17
|
+
"zens-ink=zens_ink.__main__:main",
|
|
18
|
+
],
|
|
19
|
+
},
|
|
20
|
+
classifiers=[
|
|
21
|
+
"Programming Language :: Python :: 3",
|
|
22
|
+
"License :: OSI Approved :: MIT License",
|
|
23
|
+
"Operating System :: OS Independent",
|
|
24
|
+
"Topic :: Internet :: WWW/HTTP :: Site Management",
|
|
25
|
+
],
|
|
26
|
+
)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""CLI dispatcher for zens.ink SEO toolkit."""
|
|
3
|
+
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
TOOLS = {
|
|
7
|
+
# Discovery
|
|
8
|
+
"keyword_research": "Discover keywords via Google Autocomplete",
|
|
9
|
+
"keyword_cluster": "Group raw keywords into semantic topic clusters",
|
|
10
|
+
# Difficulty
|
|
11
|
+
"kd": "Keyword Difficulty score via SERP structure analysis",
|
|
12
|
+
"kgr_auto": "Automated opportunity scoring (KGR: competition vs volume)",
|
|
13
|
+
# Volume
|
|
14
|
+
"keyword_volume": "Check real search volume via Bing API",
|
|
15
|
+
"brave_volume": "Estimate search demand via Brave SERP signals",
|
|
16
|
+
# Off-page authority
|
|
17
|
+
"domain_rating": "Real Ahrefs Domain Rating via free public API",
|
|
18
|
+
# Intent & Strategy
|
|
19
|
+
"search_intent": "Classify keywords by search intent (info/commercial/transactional/navigational)",
|
|
20
|
+
"serp_intent": "SERP-based intent analysis (reverse-engineer Google's actual ranking behavior)",
|
|
21
|
+
"content_matrix": "Generate prioritized content opportunity matrix",
|
|
22
|
+
"geo_fanout": "Query Fan-out content planning (GEO/AI search)",
|
|
23
|
+
"reddit_blueocean": "Reddit blue-ocean keyword mining via Autocomplete",
|
|
24
|
+
# Competitive
|
|
25
|
+
"competitor_gap": "Analyze competitor content via sitemaps",
|
|
26
|
+
# Technical Audit
|
|
27
|
+
"site_audit": "Technical SEO audit (orphan pages, broken links, missing tags)",
|
|
28
|
+
"onpage_audit": "On-page quality scoring (7 dimensions, 0-100 per page)",
|
|
29
|
+
# GSC
|
|
30
|
+
"setup_gsc": "One-time OAuth setup for Search Console",
|
|
31
|
+
"search_performance": "Your site's Google search data (GSC)",
|
|
32
|
+
# Tracking
|
|
33
|
+
"rank_tracker": "SQLite-backed keyword position history",
|
|
34
|
+
# MCP server
|
|
35
|
+
"mcp": "Run as MCP stdio server (DSH / Claude / Codex integration)",
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def show_help():
|
|
40
|
+
from zens_ink import __version__
|
|
41
|
+
print(f"\nzens.ink CLI v{__version__} — Free SEO toolkit for indie builders\n")
|
|
42
|
+
print("Usage: zens-ink <tool> [options]")
|
|
43
|
+
print(" or: python3 -m zens_ink.<tool> [options]\n")
|
|
44
|
+
print("Tools:")
|
|
45
|
+
for name, desc in TOOLS.items():
|
|
46
|
+
print(f" {name:25s} {desc}")
|
|
47
|
+
print(f"\n {len(TOOLS)} tools — all pure stdlib, zero pip dependencies")
|
|
48
|
+
print(f"\nDocs: https://github.com/ZensInk/zens-ink-seo-package\n")
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def main():
|
|
52
|
+
args = sys.argv[1:]
|
|
53
|
+
|
|
54
|
+
if not args or args[0] in ("-h", "--help", "help"):
|
|
55
|
+
show_help()
|
|
56
|
+
return
|
|
57
|
+
|
|
58
|
+
tool = args[0]
|
|
59
|
+
if tool not in TOOLS:
|
|
60
|
+
print(f"Unknown tool: {tool}\n")
|
|
61
|
+
show_help()
|
|
62
|
+
sys.exit(1)
|
|
63
|
+
|
|
64
|
+
# Import and run the tool's main() with remaining args
|
|
65
|
+
mod = __import__(f"zens_ink.{tool}", fromlist=["main"])
|
|
66
|
+
sys.argv = [tool] + args[1:]
|
|
67
|
+
if tool == "mcp":
|
|
68
|
+
mod.serve() # MCP stdio server loop
|
|
69
|
+
return
|
|
70
|
+
mod.main()
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
if __name__ == "__main__":
|
|
74
|
+
main()
|