sv-mcp 0.2.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.
- sv_mcp-0.2.0/.env.example +13 -0
- sv_mcp-0.2.0/.github/workflows/publish.yml +52 -0
- sv_mcp-0.2.0/.gitignore +32 -0
- sv_mcp-0.2.0/CHANGELOG.md +20 -0
- sv_mcp-0.2.0/CODE_OF_CONDUCT.md +5 -0
- sv_mcp-0.2.0/CONTRIBUTING.md +31 -0
- sv_mcp-0.2.0/LICENSE +21 -0
- sv_mcp-0.2.0/PKG-INFO +153 -0
- sv_mcp-0.2.0/README.md +125 -0
- sv_mcp-0.2.0/SECURITY.md +27 -0
- sv_mcp-0.2.0/glama.json +4 -0
- sv_mcp-0.2.0/pyproject.toml +52 -0
- sv_mcp-0.2.0/scripts/smoke_test.py +199 -0
- sv_mcp-0.2.0/server.json +38 -0
- sv_mcp-0.2.0/src/sv_mcp/__init__.py +3 -0
- sv_mcp-0.2.0/src/sv_mcp/annotations.py +69 -0
- sv_mcp-0.2.0/src/sv_mcp/execution.py +146 -0
- sv_mcp-0.2.0/src/sv_mcp/schemas.py +233 -0
- sv_mcp-0.2.0/src/sv_mcp/server.py +140 -0
- sv_mcp-0.2.0/src/sv_mcp/tasks.py +123 -0
- sv_mcp-0.2.0/src/sv_mcp/tool_registry.py +220 -0
- sv_mcp-0.2.0/tests/conftest.py +28 -0
- sv_mcp-0.2.0/tests/fixtures/definitions_snapshot.json +6806 -0
- sv_mcp-0.2.0/tests/fixtures/ranklens_post_deploy.json +16 -0
- sv_mcp-0.2.0/tests/test_execution.py +144 -0
- sv_mcp-0.2.0/tests/test_schemas.py +161 -0
- sv_mcp-0.2.0/tests/test_tasks.py +103 -0
- sv_mcp-0.2.0/tests/test_tool_registry.py +204 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# stdio mode (default) - local, single-user
|
|
2
|
+
SV_API_KEY=
|
|
3
|
+
|
|
4
|
+
# http mode - hosted, multi-user OAuth (set SV_MCP_TRANSPORT=http to enable)
|
|
5
|
+
SV_MCP_TRANSPORT=stdio
|
|
6
|
+
SV_MCP_OAUTH_CLIENT_SECRET=
|
|
7
|
+
SV_MCP_HOST=0.0.0.0
|
|
8
|
+
SV_MCP_PORT=8080
|
|
9
|
+
|
|
10
|
+
# Optional - both already default to production; only override for a
|
|
11
|
+
# non-default deployment (e.g. testing against a dev SEOB instance)
|
|
12
|
+
# SEOB_BASE_URL=
|
|
13
|
+
# SV_MCP_BASE_URL=
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
name: Publish Python package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build:
|
|
10
|
+
name: Build package
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v6
|
|
15
|
+
with:
|
|
16
|
+
persist-credentials: false
|
|
17
|
+
|
|
18
|
+
- name: Set up Python
|
|
19
|
+
uses: actions/setup-python@v6
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.x"
|
|
22
|
+
|
|
23
|
+
- name: Install build
|
|
24
|
+
run: python -m pip install --upgrade build
|
|
25
|
+
|
|
26
|
+
- name: Build wheel and source distribution
|
|
27
|
+
run: python -m build
|
|
28
|
+
|
|
29
|
+
- name: Store distributions
|
|
30
|
+
uses: actions/upload-artifact@v5
|
|
31
|
+
with:
|
|
32
|
+
name: python-package-distributions
|
|
33
|
+
path: dist/
|
|
34
|
+
|
|
35
|
+
publish-to-pypi:
|
|
36
|
+
name: Publish to PyPI
|
|
37
|
+
needs: build
|
|
38
|
+
runs-on: ubuntu-latest
|
|
39
|
+
environment: pypi
|
|
40
|
+
|
|
41
|
+
permissions:
|
|
42
|
+
id-token: write
|
|
43
|
+
|
|
44
|
+
steps:
|
|
45
|
+
- name: Download distributions
|
|
46
|
+
uses: actions/download-artifact@v6
|
|
47
|
+
with:
|
|
48
|
+
name: python-package-distributions
|
|
49
|
+
path: dist/
|
|
50
|
+
|
|
51
|
+
- name: Publish to PyPI
|
|
52
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
sv_mcp-0.2.0/.gitignore
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.egg-info/
|
|
5
|
+
.eggs/
|
|
6
|
+
dist/
|
|
7
|
+
build/
|
|
8
|
+
.coverage
|
|
9
|
+
htmlcov/
|
|
10
|
+
.pytest_cache/
|
|
11
|
+
.mypy_cache/
|
|
12
|
+
.ruff_cache/
|
|
13
|
+
|
|
14
|
+
# Virtual environments
|
|
15
|
+
.venv/
|
|
16
|
+
venv/
|
|
17
|
+
env/
|
|
18
|
+
|
|
19
|
+
# Secrets and local config
|
|
20
|
+
.env
|
|
21
|
+
.env.*
|
|
22
|
+
!.env.example
|
|
23
|
+
*.pem
|
|
24
|
+
*.key
|
|
25
|
+
*.token
|
|
26
|
+
config.json
|
|
27
|
+
.sv/
|
|
28
|
+
|
|
29
|
+
# OS/editor
|
|
30
|
+
.DS_Store
|
|
31
|
+
.idea/
|
|
32
|
+
.vscode/
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
First release on PyPI and the MCP Registry.
|
|
6
|
+
|
|
7
|
+
- Every tool now has a human-readable title and MCP annotations (`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`). Tools that save work to the SV account (`prose`, `geogptaudit`, `seogptcompare`, `seogptmapping`, `preliminaryaudit`) are marked as not read-only.
|
|
8
|
+
- Requires sv-cli 0.8.0, which retries automatically when the SV API rate limit (1 request per second per API key) is reached.
|
|
9
|
+
- Removed `seo-image` from the MCP tool list. AI image generation stays available through the SV API and SV CLI.
|
|
10
|
+
- Rewrote tool descriptions to state what each tool does and when to use it, without model-directed instructions.
|
|
11
|
+
- Tool errors now return the SV API's own message, field and error code, with a suggested next step, instead of raw JSON.
|
|
12
|
+
- Integer option fields are sent as a `minimum`/`maximum` range instead of a full list, reducing the size of the tool list by about a third.
|
|
13
|
+
- Added LICENSE, SECURITY.md, CONTRIBUTING.md and CODE_OF_CONDUCT.md.
|
|
14
|
+
|
|
15
|
+
## 0.1.0
|
|
16
|
+
|
|
17
|
+
- Initial MCP server built on the sv-cli core library: stdio mode with `SV_API_KEY`, and hosted Streamable HTTP mode with OAuth.
|
|
18
|
+
- Tool families generated from the live SV API definitions, plus `get_task_status` and `get_task_result` for async tasks.
|
|
19
|
+
- `seogpt2` exposed as `prose`.
|
|
20
|
+
- Calls identify themselves to the SV API as MCP clients for usage tracking.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Code of Conduct
|
|
2
|
+
|
|
3
|
+
This project follows the Contributor Covenant spirit: be respectful, constructive, and inclusive.
|
|
4
|
+
|
|
5
|
+
Unacceptable behavior includes harassment, threats, discriminatory language, or publishing private information. Maintainers may remove comments, issues, commits, or contributors that violate these expectations.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Thanks for contributing to SV MCP.
|
|
4
|
+
|
|
5
|
+
## Development setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
python -m venv .venv
|
|
9
|
+
source .venv/bin/activate
|
|
10
|
+
pip install -e '.[dev]'
|
|
11
|
+
pytest
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Guidelines
|
|
15
|
+
|
|
16
|
+
- SV MCP is a thin layer over the [sv-cli](https://github.com/seovendorco/sv-cli) core library. Request handling, validation, auth resolution and async-task handling live there; keep them there.
|
|
17
|
+
- Tool input schemas are generated from the live SV API definitions. Don't hand-write schemas.
|
|
18
|
+
- Every exposed tool needs a hand-written description in `TOOL_DESCRIPTIONS` (`src/sv_mcp/tool_registry.py`). Describe what the tool does and when to use it, in plain factual terms. Don't add instructions that push the model to prefer a tool, and no marketing language — the tests reject both.
|
|
19
|
+
- Do not hardcode API keys or real customer data in examples, fixtures, tests, or docs.
|
|
20
|
+
- Add tests for schema generation, tool registration, error handling and task behavior changes.
|
|
21
|
+
|
|
22
|
+
## Pull requests
|
|
23
|
+
|
|
24
|
+
Before opening a PR:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
pytest
|
|
28
|
+
python -m build
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Describe user-facing behavior, backward compatibility, and any change to the tool list.
|
sv_mcp-0.2.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 SV MCP Contributors
|
|
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.
|
sv_mcp-0.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: sv-mcp
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: MCP server for the SV API: SEO and GEO tools for Claude and other MCP clients.
|
|
5
|
+
Project-URL: Homepage, https://seovendor.co/api/mcp
|
|
6
|
+
Project-URL: Repository, https://github.com/seovendorco/sv-mcp
|
|
7
|
+
Project-URL: Issues, https://github.com/seovendorco/sv-mcp/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/seovendorco/sv-mcp/blob/main/CHANGELOG.md
|
|
9
|
+
Author: SV MCP Contributors
|
|
10
|
+
License: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: claude,geo,mcp,mcp-server,model-context-protocol,seo,sv
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Internet :: WWW/HTTP
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Requires-Dist: fastmcp>=3.4
|
|
23
|
+
Requires-Dist: sv-cli>=0.8.0
|
|
24
|
+
Provides-Extra: dev
|
|
25
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
|
|
26
|
+
Requires-Dist: pytest>=7.4; extra == 'dev'
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
|
|
29
|
+
# SV MCP
|
|
30
|
+
|
|
31
|
+
<!-- mcp-name: co.seovendor/sv-mcp -->
|
|
32
|
+
|
|
33
|
+
SV MCP is the [Model Context Protocol](https://modelcontextprotocol.io) server for the SV API. It gives Claude, Cursor, VS Code, Windsurf and other MCP clients SV's SEO and GEO tools: keyword research, page audits, AI-visibility (GEO) audits, competitor analysis and content generation.
|
|
34
|
+
|
|
35
|
+
It is built on the same core library as [SV CLI](https://github.com/seovendorco/sv-cli), so both behave the same way against the SV API.
|
|
36
|
+
|
|
37
|
+
- **Server URL:** `https://mcp.seovendor.co`
|
|
38
|
+
- **Transport:** Streamable HTTP
|
|
39
|
+
- **Auth:** OAuth 2.1 — sign in with your SV account; your API key stays on the server
|
|
40
|
+
- **Docs:** https://seovendor.co/api/mcp
|
|
41
|
+
- **Free API key:** https://access.seovendor.co/signup
|
|
42
|
+
|
|
43
|
+
## Connect
|
|
44
|
+
|
|
45
|
+
### Claude.ai and Claude Desktop
|
|
46
|
+
|
|
47
|
+
1. Open **Customize → Connectors**.
|
|
48
|
+
2. Click **+ → Add custom connector**.
|
|
49
|
+
3. Paste `https://mcp.seovendor.co` and click **Add**.
|
|
50
|
+
4. Click **Connect** and sign in to SV to approve access.
|
|
51
|
+
|
|
52
|
+
On Team and Enterprise plans, an Owner first adds the connector under **Organization settings → Connectors**; members then connect it themselves.
|
|
53
|
+
|
|
54
|
+
### Claude Code
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
claude mcp add --transport http sv-mcp https://mcp.seovendor.co
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Cursor (`~/.cursor/mcp.json`)
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{ "mcpServers": { "sv-mcp": { "url": "https://mcp.seovendor.co" } } }
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### VS Code (`.vscode/mcp.json`)
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{ "servers": { "sv-mcp": { "type": "http", "url": "https://mcp.seovendor.co" } } }
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Windsurf (`~/.codeium/windsurf/mcp_config.json`)
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{ "mcpServers": { "sv-mcp": { "serverUrl": "https://mcp.seovendor.co" } } }
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Clients that only support stdio
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{ "mcpServers": { "sv-mcp": { "command": "npx", "args": ["-y", "mcp-remote", "https://mcp.seovendor.co"] } } }
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Tools
|
|
85
|
+
|
|
86
|
+
| Tool | What it does | Mode |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| `better-keywords` | Keyword research: search volume, CPC, competition and intent | Sync |
|
|
89
|
+
| `content-quality` | Scores a page's content quality (E-E-A-T) for a keyword | Sync |
|
|
90
|
+
| `content-transformer` | Rewrites or reformats supplied text into a content type | Sync |
|
|
91
|
+
| `core-analysis` | On-page SEO analysis of a URL | Sync |
|
|
92
|
+
| `insight-igniter` | Entities and topics AI engines associate with a website | Sync |
|
|
93
|
+
| `preliminaryaudit` | Quick automated SEO health score for a URL | Sync |
|
|
94
|
+
| `ranklens` | How a site ranks across repeated AI-engine queries, and competitors | Sync |
|
|
95
|
+
| `seogpt` | Short-form SEO text such as meta titles and descriptions | Sync |
|
|
96
|
+
| `topical-authority` | Topical content plan for a keyword | Sync |
|
|
97
|
+
| `top-competitors` | Top-ranking competitor URLs for a keyword | Sync |
|
|
98
|
+
| `marketplace-services` | Searches SV's catalog of purchasable services | Sync |
|
|
99
|
+
| `geogptaudit` | GEO audit: visibility in AI-generated answers for given entities | Async |
|
|
100
|
+
| `prose` | Writes a long-form article or blog post | Async |
|
|
101
|
+
| `seogptcompare` | Compares a URL against its top competitors for a keyword | Async |
|
|
102
|
+
| `seogptmapping` | Maps keywords to the most relevant pages on a domain | Async |
|
|
103
|
+
| `get_task_status` | Checks the status of an async task | — |
|
|
104
|
+
| `get_task_result` | Fetches the result of a finished async task | — |
|
|
105
|
+
|
|
106
|
+
**Async tools** return a `task_id` straight away; follow up with `get_task_status` / `get_task_result`, or pass `wait: true` to wait up to 45 seconds for the result in the same call.
|
|
107
|
+
|
|
108
|
+
**Points:** successful tool calls use points from your SV account. Failed calls, and checking on or fetching a task, don't.
|
|
109
|
+
|
|
110
|
+
**Rate limit:** the SV API accepts 1 request per second per API key. SV MCP retries automatically when it hits the limit, so this is normally invisible.
|
|
111
|
+
|
|
112
|
+
## Run locally (stdio)
|
|
113
|
+
|
|
114
|
+
For a single user on their own machine, run the server locally with your SV API key:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
pip install sv-mcp
|
|
118
|
+
export SV_API_KEY=your-key
|
|
119
|
+
sv-mcp
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Example client entry, using [uv](https://docs.astral.sh/uv/) so nothing needs installing first:
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{ "mcpServers": { "sv-mcp": { "command": "uvx", "args": ["sv-mcp"], "env": { "SV_API_KEY": "your-key" } } } }
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Hosted HTTP mode
|
|
129
|
+
|
|
130
|
+
`SV_MCP_TRANSPORT=http` runs the multi-user OAuth deployment behind `https://mcp.seovendor.co`. It authenticates against SV's own account system and needs an OAuth client secret registered there, so it is intended for SV's hosted deployment. See `.env.example` for the settings.
|
|
131
|
+
|
|
132
|
+
## Development
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
python -m venv .venv
|
|
136
|
+
source .venv/bin/activate
|
|
137
|
+
pip install -e '.[dev]'
|
|
138
|
+
pytest
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
142
|
+
|
|
143
|
+
## Privacy
|
|
144
|
+
|
|
145
|
+
See the SV privacy policy: https://seovendor.co/privacy-policy/
|
|
146
|
+
|
|
147
|
+
## Security
|
|
148
|
+
|
|
149
|
+
See [SECURITY.md](SECURITY.md). Report vulnerabilities to ask@seovendor.co.
|
|
150
|
+
|
|
151
|
+
## License
|
|
152
|
+
|
|
153
|
+
[MIT](LICENSE)
|
sv_mcp-0.2.0/README.md
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# SV MCP
|
|
2
|
+
|
|
3
|
+
<!-- mcp-name: co.seovendor/sv-mcp -->
|
|
4
|
+
|
|
5
|
+
SV MCP is the [Model Context Protocol](https://modelcontextprotocol.io) server for the SV API. It gives Claude, Cursor, VS Code, Windsurf and other MCP clients SV's SEO and GEO tools: keyword research, page audits, AI-visibility (GEO) audits, competitor analysis and content generation.
|
|
6
|
+
|
|
7
|
+
It is built on the same core library as [SV CLI](https://github.com/seovendorco/sv-cli), so both behave the same way against the SV API.
|
|
8
|
+
|
|
9
|
+
- **Server URL:** `https://mcp.seovendor.co`
|
|
10
|
+
- **Transport:** Streamable HTTP
|
|
11
|
+
- **Auth:** OAuth 2.1 — sign in with your SV account; your API key stays on the server
|
|
12
|
+
- **Docs:** https://seovendor.co/api/mcp
|
|
13
|
+
- **Free API key:** https://access.seovendor.co/signup
|
|
14
|
+
|
|
15
|
+
## Connect
|
|
16
|
+
|
|
17
|
+
### Claude.ai and Claude Desktop
|
|
18
|
+
|
|
19
|
+
1. Open **Customize → Connectors**.
|
|
20
|
+
2. Click **+ → Add custom connector**.
|
|
21
|
+
3. Paste `https://mcp.seovendor.co` and click **Add**.
|
|
22
|
+
4. Click **Connect** and sign in to SV to approve access.
|
|
23
|
+
|
|
24
|
+
On Team and Enterprise plans, an Owner first adds the connector under **Organization settings → Connectors**; members then connect it themselves.
|
|
25
|
+
|
|
26
|
+
### Claude Code
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
claude mcp add --transport http sv-mcp https://mcp.seovendor.co
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Cursor (`~/.cursor/mcp.json`)
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{ "mcpServers": { "sv-mcp": { "url": "https://mcp.seovendor.co" } } }
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### VS Code (`.vscode/mcp.json`)
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{ "servers": { "sv-mcp": { "type": "http", "url": "https://mcp.seovendor.co" } } }
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Windsurf (`~/.codeium/windsurf/mcp_config.json`)
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{ "mcpServers": { "sv-mcp": { "serverUrl": "https://mcp.seovendor.co" } } }
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Clients that only support stdio
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{ "mcpServers": { "sv-mcp": { "command": "npx", "args": ["-y", "mcp-remote", "https://mcp.seovendor.co"] } } }
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Tools
|
|
57
|
+
|
|
58
|
+
| Tool | What it does | Mode |
|
|
59
|
+
|---|---|---|
|
|
60
|
+
| `better-keywords` | Keyword research: search volume, CPC, competition and intent | Sync |
|
|
61
|
+
| `content-quality` | Scores a page's content quality (E-E-A-T) for a keyword | Sync |
|
|
62
|
+
| `content-transformer` | Rewrites or reformats supplied text into a content type | Sync |
|
|
63
|
+
| `core-analysis` | On-page SEO analysis of a URL | Sync |
|
|
64
|
+
| `insight-igniter` | Entities and topics AI engines associate with a website | Sync |
|
|
65
|
+
| `preliminaryaudit` | Quick automated SEO health score for a URL | Sync |
|
|
66
|
+
| `ranklens` | How a site ranks across repeated AI-engine queries, and competitors | Sync |
|
|
67
|
+
| `seogpt` | Short-form SEO text such as meta titles and descriptions | Sync |
|
|
68
|
+
| `topical-authority` | Topical content plan for a keyword | Sync |
|
|
69
|
+
| `top-competitors` | Top-ranking competitor URLs for a keyword | Sync |
|
|
70
|
+
| `marketplace-services` | Searches SV's catalog of purchasable services | Sync |
|
|
71
|
+
| `geogptaudit` | GEO audit: visibility in AI-generated answers for given entities | Async |
|
|
72
|
+
| `prose` | Writes a long-form article or blog post | Async |
|
|
73
|
+
| `seogptcompare` | Compares a URL against its top competitors for a keyword | Async |
|
|
74
|
+
| `seogptmapping` | Maps keywords to the most relevant pages on a domain | Async |
|
|
75
|
+
| `get_task_status` | Checks the status of an async task | — |
|
|
76
|
+
| `get_task_result` | Fetches the result of a finished async task | — |
|
|
77
|
+
|
|
78
|
+
**Async tools** return a `task_id` straight away; follow up with `get_task_status` / `get_task_result`, or pass `wait: true` to wait up to 45 seconds for the result in the same call.
|
|
79
|
+
|
|
80
|
+
**Points:** successful tool calls use points from your SV account. Failed calls, and checking on or fetching a task, don't.
|
|
81
|
+
|
|
82
|
+
**Rate limit:** the SV API accepts 1 request per second per API key. SV MCP retries automatically when it hits the limit, so this is normally invisible.
|
|
83
|
+
|
|
84
|
+
## Run locally (stdio)
|
|
85
|
+
|
|
86
|
+
For a single user on their own machine, run the server locally with your SV API key:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
pip install sv-mcp
|
|
90
|
+
export SV_API_KEY=your-key
|
|
91
|
+
sv-mcp
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Example client entry, using [uv](https://docs.astral.sh/uv/) so nothing needs installing first:
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{ "mcpServers": { "sv-mcp": { "command": "uvx", "args": ["sv-mcp"], "env": { "SV_API_KEY": "your-key" } } } }
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Hosted HTTP mode
|
|
101
|
+
|
|
102
|
+
`SV_MCP_TRANSPORT=http` runs the multi-user OAuth deployment behind `https://mcp.seovendor.co`. It authenticates against SV's own account system and needs an OAuth client secret registered there, so it is intended for SV's hosted deployment. See `.env.example` for the settings.
|
|
103
|
+
|
|
104
|
+
## Development
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
python -m venv .venv
|
|
108
|
+
source .venv/bin/activate
|
|
109
|
+
pip install -e '.[dev]'
|
|
110
|
+
pytest
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
114
|
+
|
|
115
|
+
## Privacy
|
|
116
|
+
|
|
117
|
+
See the SV privacy policy: https://seovendor.co/privacy-policy/
|
|
118
|
+
|
|
119
|
+
## Security
|
|
120
|
+
|
|
121
|
+
See [SECURITY.md](SECURITY.md). Report vulnerabilities to ask@seovendor.co.
|
|
122
|
+
|
|
123
|
+
## License
|
|
124
|
+
|
|
125
|
+
[MIT](LICENSE)
|
sv_mcp-0.2.0/SECURITY.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Reporting vulnerabilities
|
|
4
|
+
|
|
5
|
+
Please do not open public issues for security vulnerabilities. Report suspected vulnerabilities privately to **ask@seovendor.co**.
|
|
6
|
+
|
|
7
|
+
Include:
|
|
8
|
+
|
|
9
|
+
- Affected version, commit, or the hosted server URL
|
|
10
|
+
- Reproduction steps
|
|
11
|
+
- Impact
|
|
12
|
+
- Any suggested fix
|
|
13
|
+
|
|
14
|
+
## How credentials are handled
|
|
15
|
+
|
|
16
|
+
- **Hosted server (`https://mcp.seovendor.co`):** clients authenticate with OAuth. The user's SV API key is resolved on the server for each request and is never returned to the MCP client or the AI host. Resolved keys are cached in server memory for up to 5 minutes.
|
|
17
|
+
- **Local stdio mode:** the server reads the key from the `SV_API_KEY` environment variable of the process that launches it.
|
|
18
|
+
|
|
19
|
+
## API-key safety
|
|
20
|
+
|
|
21
|
+
- Never commit API keys, `.env` files, or OAuth client secrets.
|
|
22
|
+
- Do not paste real keys into issues, logs, screenshots, examples, or tests.
|
|
23
|
+
- Keep `SV_MCP_OAUTH_CLIENT_SECRET` in your process manager or secret store, not in the repository.
|
|
24
|
+
|
|
25
|
+
## Supported versions
|
|
26
|
+
|
|
27
|
+
Security fixes target the latest released version and the hosted server.
|
sv_mcp-0.2.0/glama.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling>=1.21"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "sv-mcp"
|
|
7
|
+
version = "0.2.0"
|
|
8
|
+
description = "MCP server for the SV API: SEO and GEO tools for Claude and other MCP clients."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = {text = "MIT"}
|
|
12
|
+
authors = [
|
|
13
|
+
{name = "SV MCP Contributors"}
|
|
14
|
+
]
|
|
15
|
+
keywords = ["mcp", "mcp-server", "model-context-protocol", "seo", "geo", "claude", "sv"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 4 - Beta",
|
|
18
|
+
"Intended Audience :: Developers",
|
|
19
|
+
"License :: OSI Approved :: MIT License",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
21
|
+
"Programming Language :: Python :: 3.10",
|
|
22
|
+
"Programming Language :: Python :: 3.11",
|
|
23
|
+
"Programming Language :: Python :: 3.12",
|
|
24
|
+
"Topic :: Internet :: WWW/HTTP",
|
|
25
|
+
]
|
|
26
|
+
dependencies = [
|
|
27
|
+
"sv-cli>=0.8.0", # 0.8.0 adds the HTTP 429 retry the SV API rate limit needs
|
|
28
|
+
"fastmcp>=3.4",
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
[project.urls]
|
|
32
|
+
Homepage = "https://seovendor.co/api/mcp"
|
|
33
|
+
Repository = "https://github.com/seovendorco/sv-mcp"
|
|
34
|
+
Issues = "https://github.com/seovendorco/sv-mcp/issues"
|
|
35
|
+
Changelog = "https://github.com/seovendorco/sv-mcp/blob/main/CHANGELOG.md"
|
|
36
|
+
|
|
37
|
+
[project.optional-dependencies]
|
|
38
|
+
dev = [
|
|
39
|
+
"pytest>=7.4",
|
|
40
|
+
"pytest-asyncio>=0.23",
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
[project.scripts]
|
|
44
|
+
sv-mcp = "sv_mcp.server:main"
|
|
45
|
+
|
|
46
|
+
[tool.hatch.build.targets.wheel]
|
|
47
|
+
packages = ["src/sv_mcp"]
|
|
48
|
+
|
|
49
|
+
[tool.pytest.ini_options]
|
|
50
|
+
addopts = "-q"
|
|
51
|
+
testpaths = ["tests"]
|
|
52
|
+
asyncio_mode = "auto"
|