layoutbridge-spm 0.0.1 → 1.0.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.
Files changed (79) hide show
  1. package/CHANGELOG.md +171 -0
  2. package/LICENSE +26 -0
  3. package/README.de.md +318 -0
  4. package/README.md +304 -4
  5. package/THIRD-PARTY-NOTICES.md +2878 -0
  6. package/dist/src/mcp/config.js +125 -0
  7. package/dist/src/mcp/dispatch.js +123 -0
  8. package/dist/src/mcp/license/free-tools.js +16 -0
  9. package/dist/src/mcp/license/gate.js +209 -0
  10. package/dist/src/mcp/license/index.js +96 -0
  11. package/dist/src/mcp/license/instance-name.js +56 -0
  12. package/dist/src/mcp/license/key-source.js +58 -0
  13. package/dist/src/mcp/license/lemonsqueezy-verifier.js +207 -0
  14. package/dist/src/mcp/license/placeholder-verifier.js +10 -0
  15. package/dist/src/mcp/license/polar-ids.js +63 -0
  16. package/dist/src/mcp/license/polar-verifier.js +265 -0
  17. package/dist/src/mcp/license/product-ids.js +72 -0
  18. package/dist/src/mcp/license/state-store.js +91 -0
  19. package/dist/src/mcp/license/types.js +11 -0
  20. package/dist/src/mcp/logging.js +270 -0
  21. package/dist/src/mcp/product-info.js +48 -0
  22. package/dist/src/mcp/server.js +250 -0
  23. package/dist/src/mcp/setup.js +608 -0
  24. package/dist/src/mcp/start.cjs +95 -0
  25. package/dist/src/mcp/tool-definition.js +2 -0
  26. package/dist/src/mcp/tools.js +2004 -0
  27. package/dist/src/mcp/typography-rules.js +70 -0
  28. package/dist/src/transport/com.js +250 -0
  29. package/dist/src/transport/osascript.js +171 -0
  30. package/dist/src/transport/queue.js +19 -0
  31. package/dist/src/transport/script-bundle.js +92 -0
  32. package/dist/src/transport/transport.js +30 -0
  33. package/indesign/commands/10-app.js +6 -0
  34. package/indesign/commands/20-documents.js +513 -0
  35. package/indesign/commands/22-document-setup.js +118 -0
  36. package/indesign/commands/23-save-package.js +255 -0
  37. package/indesign/commands/25-export.js +379 -0
  38. package/indesign/commands/26-export-image.js +197 -0
  39. package/indesign/commands/27-textdefaults.js +151 -0
  40. package/indesign/commands/28-selection.js +174 -0
  41. package/indesign/commands/30-pages.js +1032 -0
  42. package/indesign/commands/31-view.js +210 -0
  43. package/indesign/commands/32-sections.js +203 -0
  44. package/indesign/commands/35-parents.js +428 -0
  45. package/indesign/commands/37-layout.js +760 -0
  46. package/indesign/commands/40-frames.js +836 -0
  47. package/indesign/commands/41-shapes.js +505 -0
  48. package/indesign/commands/42-groups.js +117 -0
  49. package/indesign/commands/43-layers.js +291 -0
  50. package/indesign/commands/44-effects.js +274 -0
  51. package/indesign/commands/45-frame-options.js +247 -0
  52. package/indesign/commands/47-anchored.js +287 -0
  53. package/indesign/commands/50-modify.js +781 -0
  54. package/indesign/commands/52-align.js +139 -0
  55. package/indesign/commands/55-fit.js +106 -0
  56. package/indesign/commands/60-images.js +771 -0
  57. package/indesign/commands/62-embed.js +120 -0
  58. package/indesign/commands/69-placeholders.js +127 -0
  59. package/indesign/commands/70-text.js +567 -0
  60. package/indesign/commands/71-outlines.js +92 -0
  61. package/indesign/commands/72-place-text.js +366 -0
  62. package/indesign/commands/74-stories.js +116 -0
  63. package/indesign/commands/75-tables.js +676 -0
  64. package/indesign/commands/76-text-variables.js +260 -0
  65. package/indesign/commands/77-story-options.js +86 -0
  66. package/indesign/commands/78-frame-lines.js +304 -0
  67. package/indesign/commands/79-check-typography.js +303 -0
  68. package/indesign/commands/80-styles.js +1620 -0
  69. package/indesign/commands/81-composition.js +355 -0
  70. package/indesign/commands/82-object-styles.js +263 -0
  71. package/indesign/commands/83-indents-tabs.js +237 -0
  72. package/indesign/commands/84-import-styles.js +142 -0
  73. package/indesign/commands/85-swatches.js +112 -0
  74. package/indesign/commands/86-gradients.js +185 -0
  75. package/indesign/commands/87-replace-swatch.js +180 -0
  76. package/indesign/commands/88-replace-font.js +217 -0
  77. package/indesign/interpreter.js +758 -0
  78. package/package.json +55 -6
  79. package/rules/typography-rules.json +31 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,171 @@
1
+ # Changelog – LayoutBridge for Adobe InDesign® (package `layoutbridge-spm`)
2
+
3
+ All notable changes to the package are recorded in this file. Format based
4
+ on “Keep a Changelog” (https://keepachangelog.com/en/1.1.0/), version
5
+ numbers follow Semantic Versioning (https://semver.org/).
6
+
7
+ One release a month with a catalogue of new features; bug fixes are
8
+ implemented as quickly as possible, independently of that release cycle.
9
+ Tool names, parameters and return fields remain stable within a major
10
+ version; additions are additive (new tools, new optional parameters, new
11
+ fields). Renames and changed defaults belong in a new major version with
12
+ its own entry.
13
+
14
+ This file is part of the npm package and the MCPB bundle; the customer
15
+ version on the product page is derived from it.
16
+
17
+ Adobe and InDesign are either registered trademarks or trademarks of Adobe
18
+ in the United States and/or other countries.
19
+
20
+ ## [Unreleased]
21
+
22
+ No changes yet.
23
+
24
+ ## [1.0.0] - 2026-09-23
25
+
26
+ First release. State of the product:
27
+
28
+ - 110 tools for Adobe® InDesign® via MCP (stdio): documents and pages,
29
+ layout grid, baseline grid and guides, layers, frames, images and links,
30
+ text and styles, tables, swatches and gradients, design, text variables
31
+ and sections, taking over third-party documents, typography check,
32
+ preflight, packaging, PDF and image export.
33
+ - Platforms: macOS (Apple Events) and Windows 10/11 x64 (COM,
34
+ PowerShell 5.1); Node.js 20 or newer.
35
+ - Two ways to install: the installation package for Claude Desktop
36
+ (`layoutbridge-spm-1.0.0.mcpb`, runs with the Node.js built into Claude
37
+ Desktop) and the npm package `layoutbridge-spm` (`--setup`).
38
+ - Licence key per workstation with online check, 24-hour recheck, 14 days
39
+ of grace without network and release when changing computers
40
+ (`npx layoutbridge-spm --deactivate`).
41
+ - Log per call with data minimisation: no document text, no user names in
42
+ paths, random workstation identifier.
43
+
44
+ Changes made while preparing the first release, for reference:
45
+
46
+ ### Added
47
+
48
+ - The server checks the Node.js version at start. If it is older than 20,
49
+ the start ends with a message in English and German that names the
50
+ version found and the version required and refers to the installation
51
+ guide (exit code 1). New entry point `dist/src/mcp/start.cjs` for
52
+ `npx layoutbridge-spm` and the MCPB bundle; starting
53
+ `dist/src/mcp/server.js` directly remains possible.
54
+ - Every message of the error kind `license` names the support address
55
+ kontakt@mcp-interfaces.com in plain text; `error.details` additionally
56
+ carries `support`, `license_terms` and `license_terms_de` (additive).
57
+ - The server's start line and the log's start line name the address of
58
+ the licence terms and the support address.
59
+ - `CHANGELOG.md` (this file), `THIRD-PARTY-NOTICES`, `server.json`
60
+ (MCP Registry) and `manifest.json` (MCPB bundle) in preparation for the
61
+ first release; README sections License terms, Privacy Policy, Support
62
+ and Third-party notices.
63
+ - Setup command `npx layoutbridge-spm --setup`: adds the server to the
64
+ Claude Desktop configuration (`mcpServers.layoutbridge-spm`, command
65
+ `npx -y layoutbridge-spm`) and stores the licence key in `license.key`
66
+ in the default location. Shows the file path and the new entry and asks
67
+ before writing; creates a backup of the configuration file first; leaves
68
+ all other entries byte-for-byte unchanged; stops on invalid JSON with
69
+ line and column; `--dry-run` writes nothing; stops without an
70
+ interactive terminal. No network, no administrator rights; not a tool
71
+ in the catalogue. Options `--license-key-file <path>` and `--client
72
+ claude-desktop`. Entering the configuration by hand remains documented.
73
+ - German README as `README.de.md` in the package and the bundle; the
74
+ English `README.md` is the version shown by npm and directories.
75
+ - New tool `position_image_in_frame`: moves the graphic inside a frame
76
+ without scaling it – `align` to one of nine reference points of the
77
+ frame and/or `offset_mm` {x, y}; the frame stays unchanged.
78
+ - New tool `duplicate_parent_page`: duplicates a master spread with all
79
+ its pages and objects (`source_name`, optional `base_name`,
80
+ `name_prefix`, `keep_view`).
81
+ - `move_pages`: optional `keep_spreads` rebuilds the affected spreads as
82
+ pairs after moving; InDesign's limit of 10 pages per spread is checked
83
+ before anything moves (`invalid_state`, `details.code`
84
+ `spread_page_limit`); a spread with more than two pages is a warning
85
+ that shows the new spread division. New return fields `keep_spreads` and
86
+ `spreads_rebuilt`.
87
+ - `delete_page`: objects on the pasteboard of a spread that disappears
88
+ with the page are listed before deleting (id, type, link) in
89
+ `pasteboard_items`; optional `on_pasteboard_items` `warn` (default),
90
+ `abort` (`invalid_state`, `details.code` `pasteboard_items_present`) or
91
+ `move` together with `pasteboard_target_page_id`. New return fields
92
+ `on_pasteboard_items`, `pasteboard_items`, `pasteboard_moved_ids` and
93
+ `pasteboard_lost_ids`. A loss is predicted only when the page is the
94
+ only page of its spread; when InDesign regroups the spreads, objects on
95
+ the pasteboard move with their spread and are reported in the new return
96
+ field `pasteboard_relocated` (object, pages of the spread before and
97
+ after, position) together with a warning.
98
+ - `move_frame_to_page`: optional `pasteboard` {side, gap_mm, y_mm} puts
99
+ the object on the pasteboard beside the spread of the target page. New
100
+ return fields `on_pasteboard` and `pasteboard_side`.
101
+ - `create_parent_page`: optional `page_count` (1–10, also in single-sided
102
+ documents) and `based_on`. New return fields `page_count` and
103
+ `based_on`.
104
+ - `set_frame_inset`: optional `vertical_justification` (top, center,
105
+ bottom, justify); `inset_mm` may be omitted when
106
+ `vertical_justification` is given. New return field
107
+ `vertical_justification`.
108
+ - `set_text_in_range`: optional `keep_format_of` (`start` default,
109
+ `before`, `none`). New return field `keep_format_of`.
110
+
111
+ ### Changed
112
+
113
+ - `LICENSE` rewritten: use is permitted only with a valid licence key and
114
+ only under the licence terms (links in German and English); contact
115
+ kontakt@mcp-interfaces.com. The licence field in `package.json` is now
116
+ `SEE LICENSE IN LICENSE`.
117
+ - The support address in all messages, start lines, README, `package.json`
118
+ (`bugs`) and `manifest.json` (`support`) is now
119
+ kontakt@mcp-interfaces.com (the previous address remains reachable).
120
+ - `author` in `package.json` and `manifest.json` is now “MCP Interfaces”.
121
+ - `README.md` and this changelog are now in English.
122
+ - Package description and README use the product name “LayoutBridge for
123
+ Adobe InDesign®”; the package name remains `layoutbridge-spm`.
124
+ - `README.md` and `README.de.md` are now customer documentation:
125
+ requirements (Node.js version 20 or newer only for the npm package and
126
+ other MCP clients; the installation package runs with the Node.js built
127
+ into Claude Desktop), installation with the installation package
128
+ (switch the extension on after installing) or with npm (`--setup`, or
129
+ by hand with `"command": "npx"`), licence key, changing computers,
130
+ server configuration, log, licence terms, privacy, support.
131
+ - The licence check uses the payment service Polar (`api.polar.sh`).
132
+ `manifest.json` (`privacy_policies`) and the README name Polar's privacy
133
+ policy (https://polar.sh/legal/privacy). When changing computers, an
134
+ activation can also be released in Polar's customer portal.
135
+ - The licence gate is always active: without a valid licence key every
136
+ tool answers with the error kind `license`. The former development
137
+ switch `LAYOUTBRIDGE_SPM_LICENSE_ENFORCE` no longer exists and is
138
+ ignored if still set; the start line reads `license: enforced, …`.
139
+ - Package contents limited to `dist/src`, `indesign/`, `rules/`, README
140
+ (English and German), LICENSE, THIRD-PARTY-NOTICES, CHANGELOG and
141
+ `package.json` (no tests, no development documents in the package).
142
+
143
+ ### Fixed
144
+
145
+ - `move_pages` with `keep_spreads`: the rebuilt spreads were not facing
146
+ pairs – every page of a new spread stood on the right-hand side. The
147
+ left page of each pair is now placed before the spine and the right
148
+ page after it; afterwards every page is checked against its expected
149
+ side, and a page on the wrong side is a warning.
150
+ - `move_pages` with `keep_spreads`: moving a page back and forth could
151
+ abort with a script error (“the object no longer exists”) after the
152
+ pages had already been moved, or report that the spreads could not be
153
+ rebuilt. Pages are now looked up afresh before every step; if a step of
154
+ rebuilding fails, the pages stay moved and the call ends with a warning.
155
+ - `set_text_in_range`: text replacing a range at the start of a paragraph
156
+ took the formatting of the previous paragraph instead of the first
157
+ replaced character. It now keeps the formatting of the first replaced
158
+ character, as documented; `keep_format_of` `before` restores the former
159
+ behaviour. With `start`, the formatting of the first replaced character
160
+ now applies only up to the first new paragraph mark; every further new
161
+ paragraph takes the formatting of the replaced paragraph at the same
162
+ position (or of the last replaced paragraph), including its paragraph
163
+ style. When the range begins with a paragraph mark, the new text
164
+ continues that paragraph with its formatting.
165
+ - The MCPB bundle did not start in Claude Desktop when Claude Desktop uses
166
+ its built-in Node.js: the entry point `start.cjs` only started the
167
+ server when it was the main module, but Claude Desktop loads the entry
168
+ point with `import()`. The request `initialize` stayed unanswered until
169
+ Claude Desktop gave up ("Request timed out"). The entry point now also
170
+ starts when the process arguments name it, however it is loaded; the
171
+ Node.js version check runs on this path as well.
package/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2026 SP Medienservice, Inhaber Sascha Piprek
2
+ Alle Rechte vorbehalten. / All rights reserved.
3
+
4
+ Diese Software und die zugehörige Dokumentation sind
5
+ urheberrechtlich geschützt. Die Nutzung ist nur mit einem
6
+ gültigen Lizenzschlüssel und nur nach den Lizenzbedingungen
7
+ gestattet:
8
+ https://mcp-schnittstellen.de/layoutbridge/lizenzbedingungen.html
9
+ Darüber hinaus wird kein Nutzungsrecht eingeräumt.
10
+ Vervielfältigung, Verbreitung, Bearbeitung, Weitergabe und
11
+ öffentliche Zugänglichmachung – ganz oder in Teilen – bedürfen
12
+ der vorherigen schriftlichen Zustimmung des Rechteinhabers,
13
+ soweit die Lizenzbedingungen sie nicht erlauben.
14
+
15
+ This software and its documentation are protected by
16
+ copyright. Use is permitted only with a valid licence key and
17
+ only under the licence terms:
18
+ https://mcp-interfaces.com/layoutbridge/license.html
19
+ No other rights of use are granted. Reproduction,
20
+ distribution, modification, transfer and making available to
21
+ the public – in whole or in part – require the prior written
22
+ consent of the rights holder, except as permitted by the
23
+ licence terms.
24
+
25
+ Drittsoftware / Third-party software: THIRD-PARTY-NOTICES.md
26
+ Kontakt / Contact: kontakt@mcp-interfaces.com
package/README.de.md ADDED
@@ -0,0 +1,318 @@
1
+ # LayoutBridge for Adobe InDesign®
2
+
3
+ English version: [README.md](README.md)
4
+
5
+ **LayoutBridge for Adobe InDesign®** – MCP-Server für Adobe® InDesign®
6
+ (npm-Paket `layoutbridge-spm`) von MCP Interfaces. Er stellt Satzarbeit in
7
+ Adobe InDesign als Werkzeuge bereit, die jede MCP-fähige KI aufrufen kann:
8
+ Dokumente und Seiten, Satzspiegel und Hilfslinien, Rahmen, Bilder und
9
+ Verknüpfungen, Text, Formate, Tabellen, Farbfelder, Typografieprüfung,
10
+ Preflight und Export.
11
+
12
+ Produktseite: https://mcp-schnittstellen.de/layoutbridge/ (englisch:
13
+ https://mcp-interfaces.com/layoutbridge/).
14
+ Ausführliche Schritt-für-Schritt-Anleitung:
15
+ https://mcp-schnittstellen.de/layoutbridge/installation.html (englisch:
16
+ https://mcp-interfaces.com/layoutbridge/installation.html).
17
+
18
+ Adobe and InDesign are either registered trademarks or trademarks of Adobe in
19
+ the United States and/or other countries.
20
+
21
+ ## Voraussetzungen
22
+
23
+ - Adobe® InDesign®, installiert und gestartet – Mac oder Windows (Windows
24
+ 10/11 x64; geprüft mit InDesign® 21.5.1.73 auf Windows 11)
25
+ - Windows: Windows PowerShell 5.1 (`powershell.exe`, in Windows enthalten)
26
+ - Ihr Lizenzschlüssel aus der Quittungsmail des Kaufs – ein Schlüssel je
27
+ Arbeitsplatz
28
+ - Eine Netzverbindung für die Lizenzprüfung beim ersten Aufruf
29
+ - **Node.js ab Version 20 – nur für das npm-Paket** (Eintrag in der
30
+ Konfigurationsdatei, `--setup`, `--deactivate`) **und für andere
31
+ MCP-Clients.** Mit dem Installationspaket (`.mcpb`) ist keine eigene
32
+ Node.js-Installation nötig – Claude Desktop bringt Node.js mit (Schalter
33
+ „Use built-in Node.js for MCP“ unter „Erweiterte Einstellungen“, ab Werk
34
+ eingeschaltet).
35
+
36
+ ## Installation in Claude Desktop
37
+
38
+ Es gibt zwei Wege. Weg A ist der kürzere; Weg B ist derselbe Eintrag, den
39
+ auch andere MCP-Clients bekommen. Die oben verlinkte Anleitung zeigt jeden
40
+ Schritt mit den Einzelheiten für Mac und Windows.
41
+
42
+ **Weg A – Installationspaket (Bundle-Datei `.mcpb`)**
43
+
44
+ 1. Laden Sie die Datei `layoutbridge-spm-<Version>.mcpb` von der
45
+ Produktseite herunter.
46
+ 2. Öffnen Sie in Claude Desktop Einstellungen › Desktop-App › Erweiterungen
47
+ und ziehen Sie die Datei in dieses Fenster – dort steht „Ziehe .MCPB-
48
+ oder .DXT-Dateien hier her, um sie zu installieren“. Auf dem Mac können
49
+ Sie die Datei stattdessen per Doppelklick öffnen. Unter Windows öffnet
50
+ der Doppelklick Claude Desktop nicht – Windows fragt nach einem
51
+ Programm; ziehen Sie die Datei dort ins Fenster oder wählen Sie unter
52
+ „Erweiterte Einstellungen“ die Schaltfläche zum Installieren einer
53
+ Erweiterung (englische Oberfläche: „Advanced settings“ › „Install
54
+ extension“) und dann die Datei. Bestätigen Sie den Installationsdialog
55
+ mit „Installieren“.
56
+ 3. Tragen Sie Ihren Lizenzschlüssel in das Feld „Licence key“ ein und
57
+ klicken Sie auf „Speichern“. Claude Desktop speichert den Schlüssel auf
58
+ Ihrem Rechner.
59
+ 4. **Schalten Sie die Erweiterung ein.** Nach der Installation steht
60
+ „LayoutBridge for Adobe InDesign®“ unter Einstellungen › Erweiterungen
61
+ auf „Deaktiviert“. Stellen Sie den Schalter auf „Aktiviert“ – sonst
62
+ erscheinen keine Werkzeuge.
63
+
64
+ **Weg B – npm-Paket (Node.js ab Version 20)**
65
+
66
+ Einrichtungsbefehl – im Terminal (Mac) bzw. in der PowerShell (Windows)
67
+ aufrufen:
68
+
69
+ ```
70
+ npx layoutbridge-spm --setup
71
+ ```
72
+
73
+ Der Befehl trägt den Server in die Konfigurationsdatei von Claude Desktop
74
+ ein und legt den Lizenzschlüssel am Vorgabeort ab (siehe
75
+ „Lizenzschlüssel“). Er läuft nur, wenn Sie ihn aufrufen. Vor jeder Änderung
76
+ zeigt er den vollen Pfad der Datei und den neuen Eintrag im Wortlaut und
77
+ fragt nach (`y` für ja, `n` für nein). Vor dem Schreiben legt er eine
78
+ Sicherung `claude_desktop_config.json.bak-JJJJ-MM-TT_HHMM` im selben Ordner
79
+ an; geändert wird nur der Eintrag `layoutbridge-spm` unter `mcpServers`,
80
+ alle anderen Einträge bleiben unverändert. Ist die Datei kein gültiges
81
+ JSON, bricht er ab und nennt Zeile und Spalte. Den Lizenzschlüssel fragt er
82
+ verdeckt ab und schreibt ihn nur nach `license.key`. Keine
83
+ Administratorrechte, keine Netzverbindung.
84
+
85
+ - `--dry-run` zeigt dasselbe und schreibt nichts.
86
+ - `--license-key-file <Pfad>` liest den Schlüssel aus einer Datei, statt
87
+ ihn abzufragen.
88
+
89
+ **Von Hand:** Öffnen Sie die Konfigurationsdatei von Claude Desktop in
90
+ einem Texteditor – Mac `~/Library/Application Support/Claude/claude_desktop_config.json`,
91
+ Windows `%APPDATA%\Claude\claude_desktop_config.json` (einfacher:
92
+ Einstellungen › Desktop-App › Entwickler › „Konfiguration bearbeiten“
93
+ öffnet den Ordner mit der Datei). Ist die Datei leer oder noch nicht
94
+ vorhanden, hat sie genau diesen Inhalt:
95
+
96
+ ```json
97
+ {
98
+ "mcpServers": {
99
+ "layoutbridge-spm": {
100
+ "command": "npx",
101
+ "args": ["-y", "layoutbridge-spm"]
102
+ }
103
+ }
104
+ }
105
+ ```
106
+
107
+ Enthält die Datei bereits andere Server unter `"mcpServers"`, fügen Sie nur
108
+ den Block `"layoutbridge-spm": { … }` dort ein – mit einem Komma zwischen
109
+ den Einträgen – und lassen Sie alles andere unverändert. Legen Sie dann den
110
+ Lizenzschlüssel ab (siehe „Lizenzschlüssel“). Beim ersten Start lädt `npx`
111
+ das Paket `layoutbridge-spm` von der npm-Registry; danach startet es aus
112
+ dem lokalen Speicher.
113
+
114
+ **Danach:** Beenden Sie Claude Desktop vollständig – auf dem Mac mit ⌘ + Q,
115
+ unter Windows über „Beenden“ im Menü der Anwendung; das Fenster zu
116
+ schließen genügt nicht – und starten Sie es neu. Starten Sie Adobe®
117
+ InDesign® und fragen Sie in Claude Desktop: „Welche InDesign®-Version
118
+ läuft?“ Claude ruft das Werkzeug `get_app_version` auf und nennt die
119
+ Version. Die Werkzeuge erscheinen auf Weg A unter dem Namen der Erweiterung
120
+ „LayoutBridge for Adobe InDesign®“, auf Weg B mit dem Präfix
121
+ `layoutbridge-spm:`.
122
+
123
+ ## Andere MCP-Clients
124
+
125
+ Andere MCP-Clients (Claude Code, Cursor, GitHub Copilot u. a.) tragen
126
+ denselben Server nach ihrer eigenen Dokumentation ein. Der Befehl ist
127
+ überall
128
+
129
+ ```
130
+ npx -y layoutbridge-spm
131
+ ```
132
+
133
+ und setzt Node.js ab Version 20 voraus. Den Lizenzschlüssel findet der
134
+ Server an denselben Orten wie unter „Lizenzschlüssel“ beschrieben.
135
+
136
+ ## Lizenzschlüssel
137
+
138
+ Der Schlüssel steht in der Quittungsmail des Kaufs und gilt für genau einen
139
+ Arbeitsplatz; mehrere Arbeitsplätze brauchen mehrere Schlüssel.
140
+
141
+ **Wo LayoutBridge den Schlüssel sucht, in dieser Reihenfolge:**
142
+
143
+ 1. die Umgebungsvariable `LAYOUTBRIDGE_SPM_LICENSE_KEY` – das
144
+ Installationspaket setzt sie aus dem Feld „Licence key“; auf Weg B kann
145
+ sie als `"env": { "LAYOUTBRIDGE_SPM_LICENSE_KEY": "IHR-LIZENZSCHLÜSSEL" }`
146
+ in den Server-Eintrag,
147
+ 2. die Datei, die in der Umgebungsvariablen `LAYOUTBRIDGE_SPM_LICENSE_FILE`
148
+ steht,
149
+ 3. die Datei `license.key` am Vorgabeort – nur der Schlüssel, ohne weiteren
150
+ Text:
151
+ - Mac: `~/Library/Application Support/layoutbridge-spm/license.key`
152
+ - Windows: `%USERPROFILE%\.layoutbridge-spm\license.key`
153
+
154
+ Den Ordner `layoutbridge-spm` bzw. `.layoutbridge-spm` legen Sie an, falls
155
+ er fehlt. Ein nachgelegter oder geänderter Schlüssel wirkt ohne Neustart.
156
+
157
+ **Prüfung:** Beim ersten Werkzeugaufruf prüft LayoutBridge den Schlüssel
158
+ online; danach höchstens einmal in 24 Stunden. Ist der Dienst nicht
159
+ erreichbar, arbeitet LayoutBridge ab der letzten gültigen Prüfung 14 Tage
160
+ weiter und hängt jeder Antwort eine Warnung an; danach – oder wenn es noch
161
+ nie eine gültige Prüfung gab – sind die Werkzeuge gesperrt, bis der
162
+ Schlüssel wieder geprüft werden kann.
163
+
164
+ **Ohne gültigen Schlüssel** antwortet jedes Werkzeug mit `ok: false` und
165
+ `error.kind: "license"`. Die Meldung sagt im Klartext, ob der Schlüssel
166
+ fehlt, abgelaufen, ungültig, für ein anderes Produkt oder gerade nicht
167
+ prüfbar ist, und nennt den Ort, an dem der Schlüssel erwartet wurde;
168
+ `error.details` nennt dazu die Support-Adresse und die Lizenzbedingungen.
169
+ InDesign® wird dabei nicht angesprochen.
170
+
171
+ **Was gespeichert und übertragen wird:** Das Ergebnis der letzten Prüfung
172
+ steht in `license-state.json` neben `license.key` – mit einem
173
+ Fingerabdruck des Schlüssels, nie dem Schlüssel selbst, und ohne
174
+ Kundendaten. Zur Prüfung gehen der Lizenzschlüssel und eine Kennung dieses
175
+ Arbeitsplatzes an den Zahlungsdienst Polar (`api.polar.sh`, USA). Die
176
+ Kennung ist ein zufälliger Name der Form `layoutbridge-<8 Zeichen>`, der
177
+ beim ersten Mal erzeugt und in
178
+ `instance-name` neben `license.key` abgelegt wird; der Rechnername wird
179
+ nicht verwendet. Wer im Händler-Konto einen lesbaren Namen möchte, setzt
180
+ `LAYOUTBRIDGE_SPM_INSTANCE_NAME`. Dokumentinhalte, Dateipfade und
181
+ Werkzeugaufrufe werden nie übertragen.
182
+
183
+ ## Rechnerwechsel
184
+
185
+ Eine Lizenz ist auf einem Arbeitsplatz aktiv. Geben Sie sie auf dem alten
186
+ Rechner frei, bevor Sie den Schlüssel auf dem neuen eintragen – ohne
187
+ InDesign®, ohne Claude Desktop, aber mit Node.js ab Version 20:
188
+
189
+ ```
190
+ npx layoutbridge-spm --deactivate
191
+ ```
192
+
193
+ Der Befehl meldet im Klartext, ob die Freigabe geklappt hat, und löscht das
194
+ lokale Prüfergebnis. Er liest den Schlüssel an denselben Orten wie der
195
+ Server (siehe „Lizenzschlüssel“); beim Installationspaket verwahrt Claude
196
+ Desktop den Schlüssel – legen Sie ihn dann vorher als `license.key` ab oder
197
+ schreiben Sie an den Support. Haben Sie kein Node.js, weil Sie nur das
198
+ Installationspaket nutzen, oder ist der alte Rechner nicht mehr erreichbar,
199
+ können Sie die Aktivierung selbst im Kundenportal von Polar freigeben oder
200
+ an den Support schreiben; er gibt die Aktivierung frei.
201
+
202
+ ## Konfiguration des Servers
203
+
204
+ Vorgaben, die je Arbeitsplatz verschieden sind, lassen sich in einer
205
+ JSON-Datei festlegen, die der Server beim Start liest: Pfad aus der
206
+ Umgebungsvariablen `LAYOUTBRIDGE_SPM_CONFIG`, sonst auf dem Mac
207
+ `~/Library/Application Support/layoutbridge-spm/config.json`, unter Windows
208
+ `%USERPROFILE%\.layoutbridge-spm\config.json`. Fehlt die Datei, gelten die
209
+ neutralen Vorgaben. Alle Schlüssel sind optional; ein Parameter im Aufruf
210
+ geht immer vor.
211
+
212
+ ```json
213
+ {
214
+ "tracking_warn_beyond": 20,
215
+ "min_ppi": 300,
216
+ "export_pdf": {
217
+ "preset": "Name des PDF-Presets",
218
+ "fallback_preset": "Name des Ausweichpresets",
219
+ "fallback_over_bytes": 4194304
220
+ }
221
+ }
222
+ ```
223
+
224
+ | Schlüssel | Wirkung |
225
+ |---|---|
226
+ | `tracking_warn_beyond` | `apply_character_format_to_range` warnt, wenn die Laufweite betragsmäßig darüber liegt. Ohne Eintrag keine Warnung. |
227
+ | `min_ppi` | Vorgabe für den Parameter `min_ppi` von `place_image`, `scale_image_in_frame` und `fit_frame` (Warnung unter dieser effektiven Auflösung). Ohne Eintrag 300. |
228
+ | `export_pdf.preset` | Vorgabe für `preset` von `export_pdf`. Ohne Eintrag das lokalisierte „High Quality Print“. |
229
+ | `export_pdf.fallback_preset`, `export_pdf.fallback_over_bytes` | Zweiter Durchgang mit diesem Preset, wenn die Datei größer ist. Ohne Eintrag kein zweiter Durchgang. |
230
+
231
+ Unbekannte Schlüssel und falsche Typen meldet der Server beim Start auf der
232
+ Standardfehlerausgabe und ignoriert sie.
233
+
234
+ ## Protokoll
235
+
236
+ Eine Zeile je Aufruf, eine Datei je laufender Instanz:
237
+ `~/Library/Logs/layoutbridge-spm/` auf dem Mac,
238
+ `%USERPROFILE%\.layoutbridge-spm\logs\` unter Windows; anderer Ort über die
239
+ Umgebungsvariable `LAYOUTBRIDGE_SPM_LOG_DIR`. Das Protokoll bleibt auf
240
+ Ihrem Rechner; es wird nirgendwohin gesendet.
241
+
242
+ **Was in der Zeile steht (Vorgabe `basic`):** Zeitpunkt, Werkzeugname,
243
+ Dauer, Erfolg, Fehlerart und Fehlertext, Warnungen und die **Namen** der
244
+ übergebenen Parameter. Werte stehen nur dort, wo sie für die Fehlersuche
245
+ nötig und harmlos sind (Zahlen, Kennungen, Aufzählungswerte, Dateipfade).
246
+ Text, der Dokumentinhalt sein kann, erscheint nur als Längenangabe –
247
+ `"<Text, 248 Zeichen>"`. In Pfaden wird Ihr Benutzerverzeichnis durch `~`
248
+ ersetzt. Der Lizenzschlüssel wird nie protokolliert.
249
+
250
+ **Tiefe einstellen –** `LAYOUTBRIDGE_SPM_LOG_LEVEL`:
251
+
252
+ | Wert | Bedeutung |
253
+ |---|---|
254
+ | `off` | keine Protokollierung, es wird keine Datei angelegt |
255
+ | `basic` | **Vorgabe**, gefiltert wie oben beschrieben |
256
+ | `full` | alle Parameter im Wortlaut, Pfade mit Benutzernamen – nur für die Fehlersuche, auf Bitte des Supports |
257
+
258
+ Läuft `full`, sagt das die erste Zeile im Protokoll und die Startmeldung des
259
+ Servers. Danach wieder auf `basic` stellen.
260
+
261
+ **Aufbewahrung:** Beim Start löscht der Server Protokolldateien, die älter
262
+ als **30 Tage** sind. Andere Frist über `LAYOUTBRIDGE_SPM_LOG_KEEP_DAYS`
263
+ (Zahl in Tagen; `0` schaltet das Löschen ab).
264
+
265
+ ## License terms
266
+
267
+ Die Nutzung von LayoutBridge for Adobe InDesign® richtet sich nach den
268
+ Lizenzbedingungen (EULA). Maßgeblich ist die deutsche Fassung.
269
+
270
+ - Deutsch: https://mcp-schnittstellen.de/layoutbridge/lizenzbedingungen.html
271
+ - English: https://mcp-interfaces.com/layoutbridge/license.html
272
+
273
+ Der Server nennt die Adresse in seiner Startzeile und in jeder Antwort der
274
+ Fehlerart `license` (`error.details.license_terms`).
275
+
276
+ ## Privacy Policy
277
+
278
+ Welche Daten der Server verarbeitet – Lizenzprüfung beim Zahlungsdienst,
279
+ Protokoll auf dem eigenen Rechner, nichts weiter – steht in der
280
+ Datenschutzerklärung des Produkts:
281
+
282
+ - Deutsch: https://mcp-schnittstellen.de/layoutbridge/datenschutz.html
283
+ - English: https://mcp-interfaces.com/layoutbridge/privacy.html
284
+
285
+ Die Lizenzprüfung ruft den Zahlungsdienst Polar auf; dessen
286
+ Datenschutzerklärung: https://polar.sh/legal/privacy.
287
+
288
+ ## Support
289
+
290
+ Fragen und Fehlermeldungen an **kontakt@mcp-interfaces.com**. Wir antworten
291
+ an Werktagen, angestrebt innerhalb von zwei Werktagen. Hilfreich sind:
292
+ Werkzeugname, Fehlertext im Wortlaut, Zeitpunkt, InDesign-Version und
293
+ Betriebssystem. Schicken Sie uns **nie Ihren Lizenzschlüssel**.
294
+
295
+ Eine kopierte Fehlermeldung kann Dateinamen und den Ordnerweg unterhalb
296
+ Ihres Benutzerverzeichnisses sowie Bezeichnungen aus dem Dokument
297
+ (Seiten, Rahmen, Formate) enthalten – keinen Benutzernamen, keinen
298
+ Dokumenttext, keinen Lizenzschlüssel. Fehlerkorrekturen werden
299
+ schnellstmöglich umgesetzt.
300
+
301
+ ## Third-party notices
302
+
303
+ Das Paket enthält Software Dritter (Laufzeitabhängigkeiten einschließlich
304
+ transitiver Pakete). Name, Version, Lizenz, Urheberzeile und vollständiger
305
+ Lizenztext je Paket stehen in `THIRD-PARTY-NOTICES.md` (im npm-Paket und im
306
+ Installationspaket enthalten).
307
+
308
+ ## Versionen und Changelog
309
+
310
+ Ein Release im Monat mit Katalog der neuen Funktionen; Fehlerkorrekturen
311
+ werden schnellstmöglich und unabhängig davon umgesetzt. Alle Änderungen
312
+ stehen in `CHANGELOG.md` (im Paket enthalten). Innerhalb einer
313
+ Hauptversion bleiben Werkzeugnamen, Parameter und Rückgabefelder stabil;
314
+ Ergänzungen sind additiv.
315
+
316
+ ## Lizenz
317
+
318
+ Proprietär, alle Rechte vorbehalten. Siehe `LICENSE`.