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.
@@ -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
@@ -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)
@@ -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.
@@ -0,0 +1,4 @@
1
+ {
2
+ "$schema": "https://glama.ai/mcp/schemas/server.json",
3
+ "maintainers": ["shyamthaker", "jim-seovendor"]
4
+ }
@@ -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"