agent-seo-engine 0.1.0__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.
- agent_seo_engine-0.1.0/.github/workflows/ci.yml +19 -0
- agent_seo_engine-0.1.0/.github/workflows/pypi.yml +57 -0
- agent_seo_engine-0.1.0/.gitignore +12 -0
- agent_seo_engine-0.1.0/LICENSE +21 -0
- agent_seo_engine-0.1.0/PKG-INFO +127 -0
- agent_seo_engine-0.1.0/README.md +102 -0
- agent_seo_engine-0.1.0/SECURITY.md +3 -0
- agent_seo_engine-0.1.0/docs/pypi-publishing.md +22 -0
- agent_seo_engine-0.1.0/examples/article.md +22 -0
- agent_seo_engine-0.1.0/examples/claude-desktop.json +8 -0
- agent_seo_engine-0.1.0/examples/hermes.yaml +6 -0
- agent_seo_engine-0.1.0/llms.txt +19 -0
- agent_seo_engine-0.1.0/pyproject.toml +40 -0
- agent_seo_engine-0.1.0/server.json +24 -0
- agent_seo_engine-0.1.0/src/agent_seo_engine/__init__.py +13 -0
- agent_seo_engine-0.1.0/src/agent_seo_engine/__main__.py +3 -0
- agent_seo_engine-0.1.0/src/agent_seo_engine/agent.py +94 -0
- agent_seo_engine-0.1.0/src/agent_seo_engine/cli.py +68 -0
- agent_seo_engine-0.1.0/src/agent_seo_engine/intent.py +134 -0
- agent_seo_engine-0.1.0/src/agent_seo_engine/mcp_server.py +59 -0
- agent_seo_engine-0.1.0/src/agent_seo_engine/opportunity.py +72 -0
- agent_seo_engine-0.1.0/src/agent_seo_engine/quality.py +118 -0
- agent_seo_engine-0.1.0/tests/test_agent_seo_engine.py +62 -0
- agent_seo_engine-0.1.0/tests/test_metadata.py +24 -0
- agent_seo_engine-0.1.0/uv.lock +862 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
- uses: actions/setup-python@v5
|
|
13
|
+
with:
|
|
14
|
+
python-version: "3.11"
|
|
15
|
+
cache: pip
|
|
16
|
+
- run: python -m pip install --upgrade pip
|
|
17
|
+
- run: pip install -e ".[dev]"
|
|
18
|
+
- run: python -m compileall -q src
|
|
19
|
+
- run: pytest
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
release:
|
|
6
|
+
types: [published]
|
|
7
|
+
|
|
8
|
+
concurrency:
|
|
9
|
+
group: pypi-${{ github.ref }}
|
|
10
|
+
cancel-in-progress: false
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
build:
|
|
14
|
+
name: Build distributions
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
steps:
|
|
19
|
+
- name: Check out repository
|
|
20
|
+
uses: actions/checkout@v4
|
|
21
|
+
|
|
22
|
+
- name: Set up Python
|
|
23
|
+
uses: actions/setup-python@v5
|
|
24
|
+
with:
|
|
25
|
+
python-version: "3.12"
|
|
26
|
+
|
|
27
|
+
- name: Install build tooling
|
|
28
|
+
run: python -m pip install --upgrade pip build twine
|
|
29
|
+
|
|
30
|
+
- name: Build package
|
|
31
|
+
run: python -m build
|
|
32
|
+
|
|
33
|
+
- name: Check distributions
|
|
34
|
+
run: python -m twine check dist/*
|
|
35
|
+
|
|
36
|
+
- name: Upload distributions
|
|
37
|
+
uses: actions/upload-artifact@v4
|
|
38
|
+
with:
|
|
39
|
+
name: python-package-distributions
|
|
40
|
+
path: dist/
|
|
41
|
+
|
|
42
|
+
publish:
|
|
43
|
+
name: Publish package
|
|
44
|
+
needs: build
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
environment: pypi
|
|
47
|
+
permissions:
|
|
48
|
+
id-token: write
|
|
49
|
+
steps:
|
|
50
|
+
- name: Download distributions
|
|
51
|
+
uses: actions/download-artifact@v4
|
|
52
|
+
with:
|
|
53
|
+
name: python-package-distributions
|
|
54
|
+
path: dist/
|
|
55
|
+
|
|
56
|
+
- name: Publish to PyPI
|
|
57
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 David Mosiah
|
|
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.
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: agent-seo-engine
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Agent-first SEO quality, intent and opportunity engine with CLI and optional MCP server.
|
|
5
|
+
Project-URL: Homepage, https://github.com/davidmosiah/agent-seo-engine
|
|
6
|
+
Project-URL: Repository, https://github.com/davidmosiah/agent-seo-engine
|
|
7
|
+
Project-URL: Issues, https://github.com/davidmosiah/agent-seo-engine/issues
|
|
8
|
+
Author: David Mosiah
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: agent-tools,agentic-workflows,ai-agents,cli,content-ops,local-first,mcp,mcp-server,search-intent,seo
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: Indexing/Search
|
|
18
|
+
Classifier: Topic :: Text Processing :: Markup :: Markdown
|
|
19
|
+
Requires-Python: >=3.10
|
|
20
|
+
Provides-Extra: dev
|
|
21
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
22
|
+
Provides-Extra: mcp
|
|
23
|
+
Requires-Dist: mcp>=1.13.0; extra == 'mcp'
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
|
|
26
|
+
# Agent SEO Engine
|
|
27
|
+
|
|
28
|
+
[](https://github.com/davidmosiah/agent-seo-engine/stargazers)
|
|
29
|
+
[](https://github.com/davidmosiah/agent-seo-engine/actions/workflows/ci.yml)
|
|
30
|
+
[](LICENSE)
|
|
31
|
+
[](https://github.com/davidmosiah/agent-seo-engine)
|
|
32
|
+
|
|
33
|
+
> If this agent-first tool helps your workflow, please star the repo. Stars make this agent-first tooling easier for other builders to discover and help Delx keep shipping open infrastructure.
|
|
34
|
+
|
|
35
|
+
Agent-first SEO scoring, search-intent detection and opportunity prioritization. It packages the useful parts of a production content pipeline into a clean local CLI plus an optional MCP server for Codex, Claude, Cursor, Hermes, OpenClaw and other agent runtimes.
|
|
36
|
+
|
|
37
|
+
Use it when an agent needs deterministic SEO checks before rewriting, refreshing or publishing content.
|
|
38
|
+
|
|
39
|
+
## What It Does
|
|
40
|
+
|
|
41
|
+
- Classifies search intent: informational, navigational, transactional and commercial investigation
|
|
42
|
+
- Scores markdown articles for agent-readable SEO gaps
|
|
43
|
+
- Prioritizes GSC-style opportunities by impressions, position, CTR gap, conversions and commercial value
|
|
44
|
+
- Exposes `manifest`, `connection_status` and `privacy_audit` surfaces before content tools
|
|
45
|
+
- Runs locally by default with no required API keys
|
|
46
|
+
|
|
47
|
+
## Install
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
pipx install "git+https://github.com/davidmosiah/agent-seo-engine.git"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
With MCP support:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
pipx install "git+https://github.com/davidmosiah/agent-seo-engine.git#egg=agent-seo-engine[mcp]"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
PyPI release automation is configured with Trusted Publishing. See [docs/pypi-publishing.md](docs/pypi-publishing.md) for the one-time PyPI pending-publisher setup.
|
|
60
|
+
|
|
61
|
+
## CLI
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
agent-seo-engine manifest --client codex
|
|
65
|
+
agent-seo-engine doctor
|
|
66
|
+
agent-seo-engine privacy-audit
|
|
67
|
+
agent-seo-engine intent "best ai agent framework"
|
|
68
|
+
agent-seo-engine score --file examples/article.md --primary-keyword "ai agent testing"
|
|
69
|
+
agent-seo-engine opportunity --impressions 4200 --clicks 80 --position 12.4 --commercial-intent 0.8
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
All commands return structured JSON by default. Use `--format markdown` for human review.
|
|
73
|
+
|
|
74
|
+
## MCP
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
agent-seo-mcp
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Hermes-style config:
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
mcp_servers:
|
|
84
|
+
agent_seo:
|
|
85
|
+
command: agent-seo-mcp
|
|
86
|
+
args: []
|
|
87
|
+
sampling:
|
|
88
|
+
enabled: false
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Recommended first calls:
|
|
92
|
+
|
|
93
|
+
1. `agent_seo_connection_status`
|
|
94
|
+
2. `agent_seo_privacy_audit`
|
|
95
|
+
3. `agent_seo_score_content`
|
|
96
|
+
|
|
97
|
+
## Agent Surfaces
|
|
98
|
+
|
|
99
|
+
| Tool | Purpose |
|
|
100
|
+
|---|---|
|
|
101
|
+
| `agent_seo_manifest` | Install/runtime guidance for agent clients |
|
|
102
|
+
| `agent_seo_connection_status` | Local/offline readiness and optional integration status |
|
|
103
|
+
| `agent_seo_privacy_audit` | Draft, analytics and credential boundaries |
|
|
104
|
+
| `agent_seo_detect_intent` | Search intent classification |
|
|
105
|
+
| `agent_seo_score_content` | Markdown quality checks with exact recommendations |
|
|
106
|
+
| `agent_seo_prioritize_opportunity` | GSC-style opportunity scoring |
|
|
107
|
+
|
|
108
|
+
## Copy-Paste Agent Prompt
|
|
109
|
+
|
|
110
|
+
```text
|
|
111
|
+
Use agent-seo-engine. First call agent_seo_connection_status and agent_seo_privacy_audit.
|
|
112
|
+
Score the draft, then propose only edits tied to failed checks or high-impact opportunities.
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Agent Contract
|
|
116
|
+
|
|
117
|
+
Agents should not guess whether a draft is ready. They should call the scoring tool, read exact failed checks, then propose focused edits. The engine is intentionally deterministic and local so repeated agent runs can compare output over time.
|
|
118
|
+
|
|
119
|
+
## Development
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
python3 -m venv .venv
|
|
123
|
+
. .venv/bin/activate
|
|
124
|
+
pip install -e ".[dev]"
|
|
125
|
+
pytest
|
|
126
|
+
python -m compileall -q src
|
|
127
|
+
```
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Agent SEO Engine
|
|
2
|
+
|
|
3
|
+
[](https://github.com/davidmosiah/agent-seo-engine/stargazers)
|
|
4
|
+
[](https://github.com/davidmosiah/agent-seo-engine/actions/workflows/ci.yml)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](https://github.com/davidmosiah/agent-seo-engine)
|
|
7
|
+
|
|
8
|
+
> If this agent-first tool helps your workflow, please star the repo. Stars make this agent-first tooling easier for other builders to discover and help Delx keep shipping open infrastructure.
|
|
9
|
+
|
|
10
|
+
Agent-first SEO scoring, search-intent detection and opportunity prioritization. It packages the useful parts of a production content pipeline into a clean local CLI plus an optional MCP server for Codex, Claude, Cursor, Hermes, OpenClaw and other agent runtimes.
|
|
11
|
+
|
|
12
|
+
Use it when an agent needs deterministic SEO checks before rewriting, refreshing or publishing content.
|
|
13
|
+
|
|
14
|
+
## What It Does
|
|
15
|
+
|
|
16
|
+
- Classifies search intent: informational, navigational, transactional and commercial investigation
|
|
17
|
+
- Scores markdown articles for agent-readable SEO gaps
|
|
18
|
+
- Prioritizes GSC-style opportunities by impressions, position, CTR gap, conversions and commercial value
|
|
19
|
+
- Exposes `manifest`, `connection_status` and `privacy_audit` surfaces before content tools
|
|
20
|
+
- Runs locally by default with no required API keys
|
|
21
|
+
|
|
22
|
+
## Install
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
pipx install "git+https://github.com/davidmosiah/agent-seo-engine.git"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
With MCP support:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pipx install "git+https://github.com/davidmosiah/agent-seo-engine.git#egg=agent-seo-engine[mcp]"
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
PyPI release automation is configured with Trusted Publishing. See [docs/pypi-publishing.md](docs/pypi-publishing.md) for the one-time PyPI pending-publisher setup.
|
|
35
|
+
|
|
36
|
+
## CLI
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
agent-seo-engine manifest --client codex
|
|
40
|
+
agent-seo-engine doctor
|
|
41
|
+
agent-seo-engine privacy-audit
|
|
42
|
+
agent-seo-engine intent "best ai agent framework"
|
|
43
|
+
agent-seo-engine score --file examples/article.md --primary-keyword "ai agent testing"
|
|
44
|
+
agent-seo-engine opportunity --impressions 4200 --clicks 80 --position 12.4 --commercial-intent 0.8
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
All commands return structured JSON by default. Use `--format markdown` for human review.
|
|
48
|
+
|
|
49
|
+
## MCP
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
agent-seo-mcp
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Hermes-style config:
|
|
56
|
+
|
|
57
|
+
```yaml
|
|
58
|
+
mcp_servers:
|
|
59
|
+
agent_seo:
|
|
60
|
+
command: agent-seo-mcp
|
|
61
|
+
args: []
|
|
62
|
+
sampling:
|
|
63
|
+
enabled: false
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Recommended first calls:
|
|
67
|
+
|
|
68
|
+
1. `agent_seo_connection_status`
|
|
69
|
+
2. `agent_seo_privacy_audit`
|
|
70
|
+
3. `agent_seo_score_content`
|
|
71
|
+
|
|
72
|
+
## Agent Surfaces
|
|
73
|
+
|
|
74
|
+
| Tool | Purpose |
|
|
75
|
+
|---|---|
|
|
76
|
+
| `agent_seo_manifest` | Install/runtime guidance for agent clients |
|
|
77
|
+
| `agent_seo_connection_status` | Local/offline readiness and optional integration status |
|
|
78
|
+
| `agent_seo_privacy_audit` | Draft, analytics and credential boundaries |
|
|
79
|
+
| `agent_seo_detect_intent` | Search intent classification |
|
|
80
|
+
| `agent_seo_score_content` | Markdown quality checks with exact recommendations |
|
|
81
|
+
| `agent_seo_prioritize_opportunity` | GSC-style opportunity scoring |
|
|
82
|
+
|
|
83
|
+
## Copy-Paste Agent Prompt
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
Use agent-seo-engine. First call agent_seo_connection_status and agent_seo_privacy_audit.
|
|
87
|
+
Score the draft, then propose only edits tied to failed checks or high-impact opportunities.
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Agent Contract
|
|
91
|
+
|
|
92
|
+
Agents should not guess whether a draft is ready. They should call the scoring tool, read exact failed checks, then propose focused edits. The engine is intentionally deterministic and local so repeated agent runs can compare output over time.
|
|
93
|
+
|
|
94
|
+
## Development
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
python3 -m venv .venv
|
|
98
|
+
. .venv/bin/activate
|
|
99
|
+
pip install -e ".[dev]"
|
|
100
|
+
pytest
|
|
101
|
+
python -m compileall -q src
|
|
102
|
+
```
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# PyPI publishing
|
|
2
|
+
|
|
3
|
+
This package is configured for PyPI Trusted Publishing through GitHub Actions.
|
|
4
|
+
No long-lived PyPI token is required in GitHub secrets or local config.
|
|
5
|
+
|
|
6
|
+
## One-time PyPI setup
|
|
7
|
+
|
|
8
|
+
Create a pending GitHub publisher in PyPI account settings:
|
|
9
|
+
|
|
10
|
+
- PyPI project name: `agent-seo-engine`
|
|
11
|
+
- Owner: `davidmosiah`
|
|
12
|
+
- Repository name: `agent-seo-engine`
|
|
13
|
+
- Workflow name: `pypi.yml`
|
|
14
|
+
- Environment name: `pypi`
|
|
15
|
+
|
|
16
|
+
PyPI docs:
|
|
17
|
+
|
|
18
|
+
- Pending publishers: https://docs.pypi.org/trusted-publishers/creating-a-project-through-oidc/
|
|
19
|
+
- Publishing workflow: https://docs.pypi.org/trusted-publishers/using-a-publisher/
|
|
20
|
+
|
|
21
|
+
After the pending publisher exists, run the `Publish to PyPI` GitHub Actions
|
|
22
|
+
workflow manually or publish a GitHub release.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: AI Agent Testing
|
|
3
|
+
description: A practical checklist for testing AI agents before release.
|
|
4
|
+
keywords:
|
|
5
|
+
- ai agent testing
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# AI Agent Testing
|
|
9
|
+
|
|
10
|
+
AI agent testing catches tool failures, missing context and unsafe writes before users depend on the workflow.
|
|
11
|
+
|
|
12
|
+
## Readiness
|
|
13
|
+
|
|
14
|
+
Start with deterministic checks for configuration, permissions and expected tool availability.
|
|
15
|
+
|
|
16
|
+
## Behavior
|
|
17
|
+
|
|
18
|
+
Run the same prompt against known fixtures and compare structured output.
|
|
19
|
+
|
|
20
|
+
## Release
|
|
21
|
+
|
|
22
|
+
Keep a short manual review step for destructive actions and account-level changes.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Agent SEO Engine
|
|
2
|
+
|
|
3
|
+
Agent-first SEO scoring, search-intent detection and opportunity prioritization with CLI and optional MCP server.
|
|
4
|
+
|
|
5
|
+
Repository: https://github.com/davidmosiah/agent-seo-engine
|
|
6
|
+
Install: pipx install "git+https://github.com/davidmosiah/agent-seo-engine.git"
|
|
7
|
+
MCP command: agent-seo-mcp
|
|
8
|
+
|
|
9
|
+
Core tools:
|
|
10
|
+
- agent_seo_manifest
|
|
11
|
+
- agent_seo_connection_status
|
|
12
|
+
- agent_seo_privacy_audit
|
|
13
|
+
- agent_seo_detect_intent
|
|
14
|
+
- agent_seo_score_content
|
|
15
|
+
- agent_seo_prioritize_opportunity
|
|
16
|
+
|
|
17
|
+
Safety:
|
|
18
|
+
- Runs locally by default.
|
|
19
|
+
- Drafts and analytics exports should stay local unless explicitly shared.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling>=1.26"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "agent-seo-engine"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Agent-first SEO quality, intent and opportunity engine with CLI and optional MCP server."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
authors = [{ name = "David Mosiah" }]
|
|
13
|
+
keywords = ["ai-agents", "agent-tools", "agentic-workflows", "seo", "mcp", "mcp-server", "content-ops", "search-intent", "local-first", "cli"]
|
|
14
|
+
dependencies = []
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Development Status :: 3 - Alpha",
|
|
17
|
+
"Intended Audience :: Developers",
|
|
18
|
+
"License :: OSI Approved :: MIT License",
|
|
19
|
+
"Programming Language :: Python :: 3",
|
|
20
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
21
|
+
"Topic :: Internet :: WWW/HTTP :: Indexing/Search",
|
|
22
|
+
"Topic :: Text Processing :: Markup :: Markdown",
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
[project.optional-dependencies]
|
|
26
|
+
mcp = ["mcp>=1.13.0"]
|
|
27
|
+
dev = ["pytest>=8.0"]
|
|
28
|
+
|
|
29
|
+
[project.scripts]
|
|
30
|
+
agent-seo-engine = "agent_seo_engine.cli:main"
|
|
31
|
+
agent-seo-mcp = "agent_seo_engine.mcp_server:main"
|
|
32
|
+
|
|
33
|
+
[project.urls]
|
|
34
|
+
Homepage = "https://github.com/davidmosiah/agent-seo-engine"
|
|
35
|
+
Repository = "https://github.com/davidmosiah/agent-seo-engine"
|
|
36
|
+
Issues = "https://github.com/davidmosiah/agent-seo-engine/issues"
|
|
37
|
+
|
|
38
|
+
[tool.pytest.ini_options]
|
|
39
|
+
pythonpath = ["src"]
|
|
40
|
+
testpaths = ["tests"]
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.davidmosiah/agent-seo-engine",
|
|
4
|
+
"description": "Agent-first local SEO quality, intent and opportunity engine with CLI and optional MCP server.",
|
|
5
|
+
"status": "active",
|
|
6
|
+
"repository": {
|
|
7
|
+
"url": "https://github.com/davidmosiah/agent-seo-engine",
|
|
8
|
+
"source": "github"
|
|
9
|
+
},
|
|
10
|
+
"version": "0.1.0",
|
|
11
|
+
"packages": [
|
|
12
|
+
{
|
|
13
|
+
"registryType": "pypi",
|
|
14
|
+
"identifier": "agent-seo-engine",
|
|
15
|
+
"version": "0.1.0",
|
|
16
|
+
"transport": {
|
|
17
|
+
"type": "stdio"
|
|
18
|
+
},
|
|
19
|
+
"environmentVariables": []
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"remotes": [],
|
|
23
|
+
"websiteUrl": "https://github.com/davidmosiah/agent-seo-engine"
|
|
24
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""Agent-first SEO analysis toolkit."""
|
|
2
|
+
|
|
3
|
+
from .agent import build_agent_manifest, build_connection_status, build_privacy_audit
|
|
4
|
+
from .intent import SearchIntentAnalyzer
|
|
5
|
+
from .quality import score_markdown
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"SearchIntentAnalyzer",
|
|
9
|
+
"build_agent_manifest",
|
|
10
|
+
"build_connection_status",
|
|
11
|
+
"build_privacy_audit",
|
|
12
|
+
"score_markdown",
|
|
13
|
+
]
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import Mapping
|
|
4
|
+
|
|
5
|
+
SUPPORTED_CLIENTS = ["generic", "claude", "codex", "cursor", "windsurf", "hermes", "openclaw"]
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def _safe_client(client: str = "generic") -> str:
|
|
9
|
+
return client if client in SUPPORTED_CLIENTS else "generic"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _present(env: Mapping[str, str], key: str) -> bool:
|
|
13
|
+
return bool(str(env.get(key, "")).strip())
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def build_agent_manifest(client: str = "generic") -> dict:
|
|
17
|
+
return {
|
|
18
|
+
"project": "agent-seo-engine",
|
|
19
|
+
"mcp_name": "io.github.davidmosiah/agent-seo-engine",
|
|
20
|
+
"client": _safe_client(client),
|
|
21
|
+
"package": {
|
|
22
|
+
"pip": "pipx install agent-seo-engine[mcp]",
|
|
23
|
+
"cli": "agent-seo-engine",
|
|
24
|
+
"mcp": "agent-seo-mcp",
|
|
25
|
+
},
|
|
26
|
+
"supported_clients": SUPPORTED_CLIENTS,
|
|
27
|
+
"standard_tools": [
|
|
28
|
+
"agent_seo_manifest",
|
|
29
|
+
"agent_seo_connection_status",
|
|
30
|
+
"agent_seo_privacy_audit",
|
|
31
|
+
"agent_seo_detect_intent",
|
|
32
|
+
"agent_seo_score_content",
|
|
33
|
+
"agent_seo_prioritize_opportunity",
|
|
34
|
+
],
|
|
35
|
+
"recommended_first_calls": ["agent_seo_connection_status", "agent_seo_privacy_audit"],
|
|
36
|
+
"default_mode": "local_offline",
|
|
37
|
+
"hermes": {
|
|
38
|
+
"config_path": "~/.hermes/config.yaml",
|
|
39
|
+
"tool_name_prefix": "mcp_agent_seo_",
|
|
40
|
+
"recommended_config": (
|
|
41
|
+
"mcp_servers:\n"
|
|
42
|
+
" agent_seo:\n"
|
|
43
|
+
" command: agent-seo-mcp\n"
|
|
44
|
+
" args: []\n"
|
|
45
|
+
" sampling:\n"
|
|
46
|
+
" enabled: false"
|
|
47
|
+
),
|
|
48
|
+
},
|
|
49
|
+
"agent_rules": [
|
|
50
|
+
"Start with connection status before content operations.",
|
|
51
|
+
"Use local content paths or explicit text from the user.",
|
|
52
|
+
"Do not send drafts to analytics providers unless the user asks.",
|
|
53
|
+
"Return exact checks and next actions, not generic SEO advice.",
|
|
54
|
+
],
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def build_connection_status(env: Mapping[str, str] | None = None) -> dict:
|
|
59
|
+
env = env or {}
|
|
60
|
+
services = []
|
|
61
|
+
if _present(env, "GEMINI_API_KEY") or _present(env, "GOOGLE_API_KEY"):
|
|
62
|
+
services.append("gemini")
|
|
63
|
+
if _present(env, "GA4_PROPERTY_ID"):
|
|
64
|
+
services.append("ga4")
|
|
65
|
+
if _present(env, "GSC_SITE_URL"):
|
|
66
|
+
services.append("google_search_console")
|
|
67
|
+
|
|
68
|
+
return {
|
|
69
|
+
"ok": True,
|
|
70
|
+
"mode": "offline" if not services else "offline_plus_optional_integrations",
|
|
71
|
+
"external_services_configured": services,
|
|
72
|
+
"ready_for_content_scoring": True,
|
|
73
|
+
"ready_for_mcp": True,
|
|
74
|
+
"next_steps": [
|
|
75
|
+
"Run agent-seo-engine score --file <markdown> --primary-keyword <keyword>.",
|
|
76
|
+
"Use optional analytics environment only for reports that require it.",
|
|
77
|
+
],
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def build_privacy_audit() -> dict:
|
|
82
|
+
return {
|
|
83
|
+
"project": "agent-seo-engine",
|
|
84
|
+
"secrets_returned_to_agent": False,
|
|
85
|
+
"local_files_ignored": [".env", "credentials/", "node_modules/", ".agent-data/", "coverage/"],
|
|
86
|
+
"external_services": ["optional: Gemini", "optional: GA4", "optional: Google Search Console"],
|
|
87
|
+
"data_boundary": "Content scoring, intent detection and opportunity scoring run locally by default.",
|
|
88
|
+
"safety_rules": [
|
|
89
|
+
"Keep drafts local unless an optional integration is explicitly requested.",
|
|
90
|
+
"Do not commit credentials, analytics exports or unpublished content plans.",
|
|
91
|
+
"Prefer structured JSON output for agents and markdown only for human review.",
|
|
92
|
+
"Treat generated recommendations as editorial suggestions, not automatic publishing approval.",
|
|
93
|
+
],
|
|
94
|
+
}
|