textabra-mcp 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.
@@ -0,0 +1,3 @@
1
+ __pycache__/
2
+ *.egg-info/
3
+ dist/
@@ -0,0 +1,9 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Textabra
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,64 @@
1
+ Metadata-Version: 2.5
2
+ Name: textabra-mcp
3
+ Version: 0.1.0
4
+ Summary: MCP-сервер Textabra: отчёты по страницам, проверки и задания для ИИ-редактора из Claude, Cursor и других агентов
5
+ Project-URL: Homepage, https://www.textabra.ru
6
+ Project-URL: Documentation, https://www.textabra.ru/api/docs
7
+ Author-email: Textabra <hi@textabra.ru>
8
+ License: MIT
9
+ License-File: LICENSE
10
+ Keywords: claude,cursor,mcp,model-context-protocol,seo,textabra
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Topic :: Internet :: WWW/HTTP :: Indexing/Search
16
+ Requires-Python: >=3.10
17
+ Requires-Dist: httpx>=0.27
18
+ Requires-Dist: mcp>=1.2
19
+ Description-Content-Type: text/markdown
20
+
21
+ # textabra-mcp
22
+
23
+ MCP-сервер Textabra. Подключает ИИ-агента (Claude Desktop, Claude Code, Cursor) к вашим проектам в Textabra через публичный API: агент смотрит отчёты по страницам, запускает проверки и получает задание для ИИ-редактора.
24
+
25
+ Нужен тариф «Профи» или «Корпоративный» и API-ключ из раздела «API-ключи» в настройках Textabra.
26
+
27
+ ## Подключение
28
+
29
+ Claude Desktop, файл `claude_desktop_config.json`:
30
+
31
+ ```json
32
+ {
33
+ "mcpServers": {
34
+ "textabra": {
35
+ "command": "uvx",
36
+ "args": ["textabra-mcp"],
37
+ "env": { "TEXTABRA_API_KEY": "tx_ваш_ключ" }
38
+ }
39
+ }
40
+ }
41
+ ```
42
+
43
+ Claude Code:
44
+
45
+ ```bash
46
+ claude mcp add textabra --env TEXTABRA_API_KEY=tx_ваш_ключ -- uvx textabra-mcp
47
+ ```
48
+
49
+ Из локальной копии репозитория (до публикации пакета): `uvx --from ./mcp textabra-mcp`.
50
+
51
+ ## Инструменты
52
+
53
+ | Инструмент | Что делает |
54
+ |---|---|
55
+ | `account_status` | тариф, лимиты, использованная квота проверок |
56
+ | `list_projects`, `create_project` | проекты |
57
+ | `list_pages`, `add_urls` | страницы проекта, добавление URL с запуском проверки |
58
+ | `get_page_report` | 8 оценок качества, SEO-чеклист, семантика |
59
+ | `recheck_page` | перепроверка (`seo` бесплатно, остальное списывает квоту) |
60
+ | `get_brief` | задание для ИИ-редактора по странице |
61
+
62
+ Платные действия списывают проверки из общей квоты аккаунта (на «Профи» 1100 за 30 дней). Описание API: https://www.textabra.ru/api/docs
63
+
64
+ Переменные окружения: `TEXTABRA_API_KEY` (обязательно), `TEXTABRA_API_URL` (по умолчанию `https://www.textabra.ru/api/v1`).
@@ -0,0 +1,44 @@
1
+ # textabra-mcp
2
+
3
+ MCP-сервер Textabra. Подключает ИИ-агента (Claude Desktop, Claude Code, Cursor) к вашим проектам в Textabra через публичный API: агент смотрит отчёты по страницам, запускает проверки и получает задание для ИИ-редактора.
4
+
5
+ Нужен тариф «Профи» или «Корпоративный» и API-ключ из раздела «API-ключи» в настройках Textabra.
6
+
7
+ ## Подключение
8
+
9
+ Claude Desktop, файл `claude_desktop_config.json`:
10
+
11
+ ```json
12
+ {
13
+ "mcpServers": {
14
+ "textabra": {
15
+ "command": "uvx",
16
+ "args": ["textabra-mcp"],
17
+ "env": { "TEXTABRA_API_KEY": "tx_ваш_ключ" }
18
+ }
19
+ }
20
+ }
21
+ ```
22
+
23
+ Claude Code:
24
+
25
+ ```bash
26
+ claude mcp add textabra --env TEXTABRA_API_KEY=tx_ваш_ключ -- uvx textabra-mcp
27
+ ```
28
+
29
+ Из локальной копии репозитория (до публикации пакета): `uvx --from ./mcp textabra-mcp`.
30
+
31
+ ## Инструменты
32
+
33
+ | Инструмент | Что делает |
34
+ |---|---|
35
+ | `account_status` | тариф, лимиты, использованная квота проверок |
36
+ | `list_projects`, `create_project` | проекты |
37
+ | `list_pages`, `add_urls` | страницы проекта, добавление URL с запуском проверки |
38
+ | `get_page_report` | 8 оценок качества, SEO-чеклист, семантика |
39
+ | `recheck_page` | перепроверка (`seo` бесплатно, остальное списывает квоту) |
40
+ | `get_brief` | задание для ИИ-редактора по странице |
41
+
42
+ Платные действия списывают проверки из общей квоты аккаунта (на «Профи» 1100 за 30 дней). Описание API: https://www.textabra.ru/api/docs
43
+
44
+ Переменные окружения: `TEXTABRA_API_KEY` (обязательно), `TEXTABRA_API_URL` (по умолчанию `https://www.textabra.ru/api/v1`).
@@ -0,0 +1,31 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "textabra-mcp"
7
+ version = "0.1.0"
8
+ description = "MCP-сервер Textabra: отчёты по страницам, проверки и задания для ИИ-редактора из Claude, Cursor и других агентов"
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = { text = "MIT" }
12
+ authors = [{ name = "Textabra", email = "hi@textabra.ru" }]
13
+ keywords = ["mcp", "seo", "textabra", "claude", "cursor", "model-context-protocol"]
14
+ classifiers = [
15
+ "Development Status :: 4 - Beta",
16
+ "Intended Audience :: Developers",
17
+ "License :: OSI Approved :: MIT License",
18
+ "Programming Language :: Python :: 3",
19
+ "Topic :: Internet :: WWW/HTTP :: Indexing/Search",
20
+ ]
21
+ dependencies = ["mcp>=1.2", "httpx>=0.27"]
22
+
23
+ [project.urls]
24
+ Homepage = "https://www.textabra.ru"
25
+ Documentation = "https://www.textabra.ru/api/docs"
26
+
27
+ [project.scripts]
28
+ textabra-mcp = "textabra_mcp.server:main"
29
+
30
+ [tool.hatch.build.targets.wheel]
31
+ packages = ["textabra_mcp"]
File without changes
@@ -0,0 +1,96 @@
1
+ """MCP-сервер Textabra: даёт ИИ-агентам (Claude, Cursor и другим) доступ к вашим проектам через публичный API v1.
2
+
3
+ Запуск: `textabra-mcp` (stdio). Ключ берётся из переменной окружения TEXTABRA_API_KEY (создаётся в настройках Textabra,
4
+ тарифы «Профи» и «Корпоративный»). Адрес API можно переопределить через TEXTABRA_API_URL.
5
+ """
6
+
7
+ import os
8
+
9
+ import httpx
10
+ try: # mcp 2.x переименовал FastMCP в MCPServer
11
+ from mcp.server.mcpserver import MCPServer as _Server
12
+ from mcp.server.mcpserver.exceptions import ToolError
13
+ except ImportError: # mcp 1.x
14
+ from mcp.server.fastmcp import FastMCP as _Server
15
+ from mcp.server.fastmcp.exceptions import ToolError
16
+
17
+ BASE_URL = os.getenv("TEXTABRA_API_URL", "https://www.textabra.ru/api/v1").rstrip("/")
18
+
19
+ mcp = _Server("textabra")
20
+
21
+
22
+ def _call(method: str, path: str, **kwargs):
23
+ key = os.getenv("TEXTABRA_API_KEY", "").strip()
24
+ if not key:
25
+ raise ToolError("Не задан TEXTABRA_API_KEY: создайте ключ в настройках Textabra (раздел «API-ключи») и передайте его в переменной окружения.")
26
+ try:
27
+ r = httpx.request(method, BASE_URL + path, headers={"Authorization": f"Bearer {key}"}, timeout=60, **kwargs)
28
+ except httpx.HTTPError as e:
29
+ raise ToolError(f"Не удалось связаться с Textabra: {e}") from e
30
+ if r.status_code >= 400:
31
+ try:
32
+ msg = r.json().get("error") or r.text[:200]
33
+ except ValueError:
34
+ msg = r.text[:200]
35
+ raise ToolError(f"Textabra вернул {r.status_code}: {msg}")
36
+ return r.json()
37
+
38
+
39
+ @mcp.tool()
40
+ def account_status() -> dict:
41
+ """Тариф аккаунта, лимиты и сколько уже использовано: проекты, страницы, проверки за последние 30 дней."""
42
+ return _call("GET", "/me")
43
+
44
+
45
+ @mcp.tool()
46
+ def list_projects() -> dict:
47
+ """Список проектов аккаунта (id, название, число страниц)."""
48
+ return _call("GET", "/projects")
49
+
50
+
51
+ @mcp.tool()
52
+ def create_project(name: str) -> dict:
53
+ """Создать проект с указанным названием. Возвращает id проекта."""
54
+ return _call("POST", "/projects", json={"name": name})
55
+
56
+
57
+ @mcp.tool()
58
+ def list_pages(project_id: int) -> dict:
59
+ """Страницы проекта с общим баллом 0-100, баллом качества, SEO-чеклистом и семантикой."""
60
+ return _call("GET", f"/projects/{project_id}/pages")
61
+
62
+
63
+ @mcp.tool()
64
+ def add_urls(project_id: int, urls: list[str]) -> dict:
65
+ """Добавить URL в проект и запустить полную проверку (до 100 адресов за вызов).
66
+ Каждая страница списывает одну проверку из квоты. Результаты появятся в list_pages и get_page_report через 1-2 минуты."""
67
+ return _call("POST", f"/projects/{project_id}/pages", json={"urls": urls})
68
+
69
+
70
+ @mcp.tool()
71
+ def get_page_report(page_id: int, full: bool = False) -> dict:
72
+ """Отчёт по странице: 8 оценок качества с комментариями, SEO-чеклист, семантический анализ.
73
+ full=true добавляет полные данные снимка страницы и семантического отчёта (большой ответ)."""
74
+ return _call("GET", f"/pages/{page_id}", params={"include": "seo_data,semantic_report"} if full else None)
75
+
76
+
77
+ @mcp.tool()
78
+ def recheck_page(page_id: int, what: str = "all") -> dict:
79
+ """Перепроверить страницу: what = seo (бесплатно) | quality | semantic | all. Платные виды списывают одну проверку из квоты.
80
+ Проверка идёт в фоне 1-2 минуты; затем забирайте результат через get_page_report."""
81
+ return _call("POST", f"/pages/{page_id}/recheck", json={"what": what})
82
+
83
+
84
+ @mcp.tool()
85
+ def get_brief(page_id: int, mode: str = "edit") -> str:
86
+ """Задание для ИИ-редактора по странице на основе анализа Textabra: что поправить, какие темы и сущности добавить.
87
+ mode = edit (доработать текст) | write (написать заново). Нужен готовый семантический анализ (recheck_page с what=semantic)."""
88
+ return _call("GET", f"/pages/{page_id}/brief", params={"mode": mode})["prompt"]
89
+
90
+
91
+ def main() -> None:
92
+ mcp.run()
93
+
94
+
95
+ if __name__ == "__main__":
96
+ main()