@prontosite/mcp 0.18.0 → 0.19.0
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.
- package/CHANGELOG.md +5 -0
- package/README.md +1 -0
- package/api.mjs +9 -0
- package/package.json +1 -1
- package/tools.mjs +14 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
Alle nennenswerten Änderungen am MCP-Server für ProntoSite. Der Server ist ein dünner Client um die
|
|
4
4
|
ProntoSite Deploy-API; die eigentliche Logik lebt serverseitig.
|
|
5
5
|
|
|
6
|
+
## 0.19.0 – 2026-11-06
|
|
7
|
+
|
|
8
|
+
- Neu: `site_seo_set` (`noindex`) nimmt die Website aus Suchmaschinen, auf eigener Domain und prontosite.io-Adresse gleich (X-Robots-Tag, robots-Meta, robots.txt mit `Disallow: /`, keine Sitemap), auf allen Tarifen. Normale Entwurfsänderung mit einem Rückgängig-Schritt, Auto-Publish-Regeln gelten.
|
|
9
|
+
- `site_status`: neues Feld `seo` (`noindex`, `noindexLive`, `vomBetreiberFestgelegt`). Instructions 2f.
|
|
10
|
+
|
|
6
11
|
## 0.18.0 – 2026-11-06
|
|
7
12
|
|
|
8
13
|
- Neu: `site_badge_set` (`aktiv`, `variant` = auto | light | dark | mono) blendet das Badge „Made with ProntoSite" für die ganze Website aus oder ein und
|
package/README.md
CHANGED
|
@@ -101,6 +101,7 @@ sichern: `cp ~/.prontosite.json ~/.prontosite.json.bak`).
|
|
|
101
101
|
| `site_embed_consent({ site?, host, page?, category, confirmed })` | Einbettung als `notwendig` (§ 25 Abs. 2 Nr. 2 TDDDG, Eigenverantwortung) oder wieder `gated` einstufen; `notwendig` nur mit `confirmed:true` (sonst 400 mit Verantwortungs-Text). Optional seiten-gebunden. Datenschutz/Cookie-Richtlinie passen sich beim nächsten Publish an. **Schreibend.** |
|
|
102
102
|
| `site_widgets({ site? })` | Katalog der verwalteten Widgets: name, aktiv, optionen, schema (consent, a11y, notice/Pop-Ups, google-reviews, ps-impressum, ps-datenschutz). In jedem Plan verfügbar. **Lesend.** |
|
|
103
103
|
| `site_widget_set({ site?, widget, aktiv?, optionen? })` | Widget aktivieren/deaktivieren und Optionen setzen – gleicher Schema-Sanitizer wie das Dashboard; Listen-Widgets (notice) via `optionen.items[]`. Greift beim nächsten Publish. Siehe [Widget-Katalog](https://prontosite.io/docs/widget-katalog). **Schreibend.** |
|
|
104
|
+
| `site_seo_set({ site?, noindex })` | „Nicht in Suchmaschinen": wirkt auf eigener Domain und prontosite.io-Adresse (X-Robots-Tag, robots-Meta, robots.txt, keine Sitemap), auf allen Tarifen. Stand steht in `site_status.seo`. |
|
|
104
105
|
| `site_badge_set({ site?, aktiv?, variant? })` | Badge „Made with ProntoSite" für die ganze Website aus-/einblenden und Variante setzen (`auto` \| `light` \| `dark` \| `mono`), auf allen Tarifen. Stand steht in `site_status.badge`. |
|
|
105
106
|
|
|
106
107
|
`site_deploy` und `site_publish` sind **schreibende** Aktionen (verändern die Live-Website). Die
|
package/api.mjs
CHANGED
|
@@ -315,6 +315,15 @@ export async function apiBadgeSet(cfg, { site, aktiv, variant } = {}, fetchImpl
|
|
|
315
315
|
return asJson(res);
|
|
316
316
|
}
|
|
317
317
|
|
|
318
|
+
/** PUT /api/seo/<site> {noindex} – „Nicht in Suchmaschinen" setzen (dieselbe Op wie das Dashboard). */
|
|
319
|
+
export async function apiSeoSet(cfg, { site, noindex } = {}, fetchImpl = fetch) {
|
|
320
|
+
if (typeof noindex !== "boolean") throw new Error("noindex (true oder false) erwartet.");
|
|
321
|
+
const { token, slug } = resolveTarget(cfg, site);
|
|
322
|
+
const res = await fetchImpl(`${baseUrl(cfg)}/seo/${encodeURIComponent(slug)}`, {
|
|
323
|
+
method: "PUT", headers: { ...authHeaders(token, cfg), "content-type": "application/json" }, body: JSON.stringify({ noindex }) });
|
|
324
|
+
return asJson(res);
|
|
325
|
+
}
|
|
326
|
+
|
|
318
327
|
/** GET/PUT /api/legal-options/<site> – Anzeige-Optionen der Rechtstext-Widgets. Ohne impressum/datenschutz
|
|
319
328
|
* nur LESEN; sonst Teil-Update (nur echte Booleans wirken). */
|
|
320
329
|
export async function apiLegalOptions(cfg, { site, impressum, datenschutz } = {}, fetchImpl = fetch) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prontosite/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "MCP-Server für ProntoSite – Website-Status, Export, Deploy und Veröffentlichen direkt aus einem KI-Assistenten (Claude Desktop). Dünner Client um die ProntoSite Deploy-API.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
package/tools.mjs
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* site_domain_connect nur mit Betreuer-Token (Entscheidung 9a).
|
|
10
10
|
* `z` wird vom Aufrufer übergeben (dieselbe zod-Instanz wie sein MCP-SDK).
|
|
11
11
|
*/
|
|
12
|
-
import { apiEditText, apiEditHtml, apiPageTexts, apiPageTextsSet, apiPageCopy, apiMediaUploadBegin, apiMediaUploadFile, apiMediaCommit, apiMediaList, apiImageSet, apiUndo, apiMediaDelete, apiMediaRestore, apiFormsGet, apiFormsSet, apiMediaSearch, apiMediaImport, apiPreviewScreenshot, apiStatus, apiExport, apiExportFetch, apiDeploy, apiPublish, sitesList, apiAccountCreate, apiCompanyGet, apiCompanySet, apiLegalOptions, apiDomainStatus, apiDomainConnect, apiEmbeds, apiEmbedConsent, apiWidgets, apiWidgetSet, apiBadgeSet, apiFiles, apiFileGet, apiFilePut, apiFileDelete, apiFileRename, apiLock, apiJsReview, apiInboxGet, apiInboxPost } from "./api.mjs";
|
|
12
|
+
import { apiEditText, apiEditHtml, apiPageTexts, apiPageTextsSet, apiPageCopy, apiMediaUploadBegin, apiMediaUploadFile, apiMediaCommit, apiMediaList, apiImageSet, apiUndo, apiMediaDelete, apiMediaRestore, apiFormsGet, apiFormsSet, apiMediaSearch, apiMediaImport, apiPreviewScreenshot, apiStatus, apiExport, apiExportFetch, apiDeploy, apiPublish, sitesList, apiAccountCreate, apiCompanyGet, apiCompanySet, apiLegalOptions, apiDomainStatus, apiDomainConnect, apiEmbeds, apiEmbedConsent, apiWidgets, apiWidgetSet, apiBadgeSet, apiSeoSet, apiFiles, apiFileGet, apiFilePut, apiFileDelete, apiFileRename, apiLock, apiJsReview, apiInboxGet, apiInboxPost } from "./api.mjs";
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Arbeitsweise (MCP-`instructions` beim Initialize – lokal UND /mcp): Weg B ist der Standard (Nick 19.10.).
|
|
@@ -42,6 +42,7 @@ const instructionLines = mode => [
|
|
|
42
42
|
+ "(Schrift, Größe, Farbe, Icon). Ein vorhandenes Badge nie im HTML ändern, nachbauen oder entfernen (site_edit_text/site_edit_html/"
|
|
43
43
|
+ "site_file_put lehnen das ab; erlaubt ist nur das Wiederherstellen des Original-Markers). Badge ausblenden nur über site_badge_set, nie per CSS oder HTML; "
|
|
44
44
|
+ "dasselbe Tool ändert die Variante für die ganze Website. Stand: badge in site_status.",
|
|
45
|
+
"2f. Website aus Suchmaschinen nehmen nur über site_seo_set { noindex: true }, nie per Meta-Tag, robots.txt oder site_file_put: Das Tool wirkt beim Ausliefern auf eigener Domain und prontosite.io-Adresse (X-Robots-Tag, robots-Meta, robots.txt, keine Sitemap). Stand: seo in site_status.",
|
|
45
46
|
"2b. Für Übersetzungen und Textüberarbeitung: site_page_texts → Texte übersetzen/überarbeiten → site_page_texts_set, JE SEITE ein Aufruf "
|
|
46
47
|
+ "(neue Sprachfassung vorher mit site_page_copy, z. B. index.html → en/index.html). NIE HTML über site_file_put umschreiben. "
|
|
47
48
|
+ "Rechtstext-Seiten (Impressum/Datenschutz) sind ausgenommen.",
|
|
@@ -708,6 +709,18 @@ export function registerTools(server0, { z, cfg, mode = "local", remote = null }
|
|
|
708
709
|
}
|
|
709
710
|
);
|
|
710
711
|
|
|
712
|
+
server.tool(
|
|
713
|
+
"site_seo_set",
|
|
714
|
+
"SCHREIBEND (normale Entwurfsänderung, ein Rückgängig-Schritt, Auto-Publish-Regeln gelten): „Nicht in Suchmaschinen\" für die ganze Website. noindex:true wirkt "
|
|
715
|
+
+ "ab dem nächsten Veröffentlichen auf eigener Domain und prontosite.io-Adresse: X-Robots-Tag und robots-Meta noindex, nofollow, robots.txt mit Disallow: /, keine Sitemap. "
|
|
716
|
+
+ "noindex:false hebt das auf. Auf allen Tarifen. Hat der Betreiber es festgelegt, kommt 409 (adminLocked): dem Nutzer sagen, dass nur der Betreiber das ändern kann.",
|
|
717
|
+
{ site: z.string().optional().describe(SITE_DESC),
|
|
718
|
+
noindex: z.boolean().describe("true = nicht in Suchmaschinen, false = wieder erlauben.") },
|
|
719
|
+
async ({ site, noindex }) => {
|
|
720
|
+
try { return asText(await apiSeoSet(cfg, { site, noindex })); } catch (e) { return asError(e); }
|
|
721
|
+
}
|
|
722
|
+
);
|
|
723
|
+
|
|
711
724
|
// ---- Datei-API: kleine Änderungen am Entwurf direkt auf dem Server (Konzept §7) ----
|
|
712
725
|
const FILE_SMALL = "STANDARDWEG: Änderungen direkt am Server-Entwurf (für reine Textänderungen am einfachsten site_edit_text); "
|
|
713
726
|
+ "Export + Deploy nur als Ausnahme für größere Umbauten oder auf ausdrücklichen Wunsch. "
|