@atezer/figma-mcp-bridge 1.6.4 → 1.6.5

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/README.md CHANGED
@@ -19,14 +19,16 @@ Her şey **bilgisayarınızda** kalır. Tasarım verileriniz internete gönderil
19
19
  ## Öne çıkan özellikler
20
20
 
21
21
  - **46 araç** — okuma, yazma, export, variable yönetimi, bileşen arama ve daha fazlası
22
- - **Figma API token tüketmez**Plugin üzerinden çalışır, Figma REST API kullanmaz
22
+ - **Figma API token tüketmez\***Varsayılan olarak plugin üzerinden çalışır, Figma API kotanızı kullanmaz
23
23
  - **Veri güvenliği** — Tasarım verisi sadece kendi bilgisayarınızda kalır (Zero Trust)
24
24
  - **Çoklu dosya** — Aynı anda birden fazla Figma/FigJam dosyası ile çalışabilirsiniz
25
25
  - **Çoklu AI aracı** — Claude ve Cursor aynı anda kullanılabilir (farklı portlarda)
26
26
  - **SVG/PNG export** — Vektörel veya bitmap, toplu export (1-50 node)
27
- - **REST API desteği** — Token ile yorum okuma, versiyon geçmişi, görsel export
27
+ - **REST API desteği** — İsteğe bağlı token ile yorum okuma, versiyon geçmişi, görsel export
28
28
  - **Figma Desktop + Tarayıcı** — Her ikisinde de çalışır
29
29
 
30
+ > \* **REST API isteğe bağlıdır.** Temel araçlar (okuma, yazma, export, variable) token olmadan plugin üzerinden çalışır. Yorum okuma, versiyon geçmişi gibi ek özellikler için Figma API token'ı ekleyebilirsiniz — plugin'deki Advanced panelinden girin, kalan API limitinizi plugin üzerinde takip edin.
31
+
30
32
  ## Hızlı başlangıç (3 adım)
31
33
 
32
34
  ### 1. Node.js kurun
@@ -163,7 +165,7 @@ Detaylı sorun giderme: [TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md)
163
165
 
164
166
  | Bilgi | Kaynak |
165
167
  |-------|--------|
166
- | Güncel sürüm | **1.6.4** ([package.json](package.json)) |
168
+ | Güncel sürüm | **1.6.5** ([package.json](package.json)) |
167
169
  | Değişiklik geçmişi | [CHANGELOG.md](CHANGELOG.md) |
168
170
  | GitHub sürümleri | [Releases](https://github.com/atezer/FMCP/releases) |
169
171
  | npm paketi | [@atezer/figma-mcp-bridge](https://www.npmjs.com/package/@atezer/figma-mcp-bridge) |
@@ -196,9 +198,25 @@ Detaylı sorun giderme: [TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md)
196
198
  - **KVKK / GDPR uyumlu** mimari
197
199
  - Detay: [PRIVACY.md](PRIVACY.md)
198
200
 
199
- ## Kurumsal kullanım
201
+ ## Kurumsal kullanım (Tüm şirkette tek seferde)
202
+
203
+ Plugin'i herkesin tek tek yüklemesi gerekmez. Figma Organization hesabınız varsa plugin'i **private plugin** olarak yayınlayabilirsiniz:
204
+
205
+ **Publish plugin** → **Publish to** → **Organizasyon adınız (Private)** seçin.
206
+
207
+ Yayınladıktan sonra:
208
+ - Tüm ekip üyeleri **Plugins** menüsünden tek tıkla erişir
209
+ - Kimsenin "manifest import" yapmasına gerek kalmaz
210
+ - Plugin güncellemelerini merkezden yönetirsiniz
211
+ - Review süreci yok (private plugin) — yayınladıktan hemen sonra kullanılabilir
212
+
213
+ **Gereksinimler:**
214
+ - Figma **Organization** veya **Enterprise** planı
215
+ - Yayınlama: Figma → Plugins → Publish → **Publish to** kısmında organizasyonunuzu seçin
216
+
217
+ > Her kullanıcının kendi bilgisayarında sadece AI aracı config'ini (Claude/Cursor) ayarlaması yeterli. Plugin zaten şirketin Figma'sında hazır olur.
200
218
 
201
- Plugin'i Figma Organization altında **private plugin** olarak yayınlayabilirsiniz. Böylece ekip üyeleri Plugins menüsünden tek tıkla erişir. Detay: [ENTERPRISE.md](docs/ENTERPRISE.md)
219
+ Kurumsal özellikler (audit log, air-gap, org plugin detayı): [ENTERPRISE.md](docs/ENTERPRISE.md)
202
220
 
203
221
  ## Lisans
204
222
 
@@ -247,7 +247,7 @@ export class PluginBridgeServer {
247
247
  logger.info({ clientId, fileKey: incomingFileKey, fileName: incomingFileName }, "Plugin bridge: client registered (fileKey=%s, fileName=%s)", incomingFileKey, incomingFileName);
248
248
  ws.send(JSON.stringify({
249
249
  type: "welcome",
250
- bridgeVersion: "1.6.4",
250
+ bridgeVersion: "1.6.5",
251
251
  port: this.port,
252
252
  clientId,
253
253
  multiClient: true,
@@ -89,7 +89,7 @@ export async function main() {
89
89
  bridge.start();
90
90
  const server = new McpServer({
91
91
  name: "F-MCP ATezer Bridge (Plugin-only)",
92
- version: "1.6.4",
92
+ version: "1.6.5",
93
93
  });
94
94
  // ---- figma_list_connected_files (multi-client discovery) ----
95
95
  server.registerTool("figma_list_connected_files", {
package/dist/local.js CHANGED
@@ -48,7 +48,7 @@ class LocalFigmaMCP {
48
48
  this.variablesCache = new Map();
49
49
  this.server = new McpServer({
50
50
  name: "F-MCP ATezer (Local)",
51
- version: "1.6.4",
51
+ version: "1.6.5",
52
52
  });
53
53
  }
54
54
  /**
@@ -232,14 +232,28 @@
232
232
  </div>
233
233
  <div id="token-status" style="font-size:10px;color:rgba(255,255,255,0.35);margin-top:3px;display:none;"></div>
234
234
  <div id="token-expiry-info" style="font-size:9px;color:rgba(255,255,255,0.3);margin-top:2px;display:none;"></div>
235
+ <div id="token-expiry-note" style="font-size:8px;color:rgba(255,255,255,0.2);margin-top:1px;display:none;">Figma'daki token suresiyle eslestiginden emin olun</div>
235
236
  <div id="rate-limit-bar" style="display:none;margin-top:4px;">
236
- <div style="display:flex;justify-content:space-between;font-size:9px;color:rgba(255,255,255,0.4);">
237
- <span>API Limit</span>
237
+ <div style="display:flex;justify-content:space-between;align-items:center;font-size:9px;color:rgba(255,255,255,0.4);">
238
+ <span style="display:flex;align-items:center;gap:3px;">API Limit <span id="rate-limit-info" onclick="var t=document.getElementById('rate-limit-tip');if(t)t.style.display=t.style.display==='block'?'none':'block';" style="cursor:pointer;display:inline-flex;align-items:center;justify-content:center;width:11px;height:11px;border-radius:50%;border:1px solid rgba(255,255,255,0.25);font-size:7px;color:rgba(255,255,255,0.4);user-select:none;">i</span></span>
238
239
  <span id="rate-limit-text">—</span>
239
240
  </div>
241
+ <div id="rate-limit-tip" style="display:none;font-size:8px;color:rgba(255,255,255,0.35);margin-top:3px;padding:4px 6px;background:rgba(255,255,255,0.05);border-radius:3px;line-height:1.5;">
242
+ <div style="margin-bottom:3px;color:rgba(255,255,255,0.5);">Limiti ne tuketir?</div>
243
+ <div>&#x25CB; Yorum okuma/yazma</div>
244
+ <div>&#x25CB; Versiyon gecmisi</div>
245
+ <div>&#x25CB; Gorsel export (REST ile)</div>
246
+ <div>&#x25CB; Dosya bilgisi (REST ile)</div>
247
+ <div style="margin-top:3px;color:rgba(255,255,255,0.5);">Limiti tuketmeyen (sinirsiz):</div>
248
+ <div>&#x25CF; Dosya okuma, yazma, silme</div>
249
+ <div>&#x25CF; Variable/token yonetimi</div>
250
+ <div>&#x25CF; Bilesen arama, export (plugin)</div>
251
+ <div>&#x25CF; Screenshot, frame olusturma</div>
252
+ </div>
240
253
  <div style="height:3px;background:rgba(255,255,255,0.08);border-radius:2px;overflow:hidden;margin-top:2px;">
241
254
  <div id="rate-limit-fill" style="height:100%;background:#4ecdc4;border-radius:2px;transition:width 0.3s;width:100%;"></div>
242
255
  </div>
256
+ <div id="rate-limit-note" style="font-size:8px;color:rgba(255,255,255,0.2);margin-top:2px;display:none;">REST API cagrisi sonrasi guncellenir</div>
243
257
  <div id="rate-limit-warning" style="display:none;font-size:9px;margin-top:2px;font-weight:600;"></div>
244
258
  </div>
245
259
  </div>
@@ -974,13 +988,22 @@
974
988
  fillEl.style.animation = 'none';
975
989
  }
976
990
  }
991
+ // Hide "no data" note when real data exists
992
+ var noteEl = document.getElementById('rate-limit-note');
993
+ if (noteEl) noteEl.style.display = 'none';
977
994
  } else if (barEl) {
978
995
  barEl.style.display = hasToken ? 'block' : 'none';
979
996
  if (textEl) textEl.textContent = '—';
980
997
  if (fillEl) { fillEl.style.width = '100%'; fillEl.style.animation = 'none'; }
981
998
  var warnEl2 = document.getElementById('rate-limit-warning');
982
999
  if (warnEl2) warnEl2.style.display = 'none';
1000
+ // Show "no data" note when token exists but no rate limit data
1001
+ var noteEl2 = document.getElementById('rate-limit-note');
1002
+ if (noteEl2) noteEl2.style.display = hasToken ? 'block' : 'none';
983
1003
  }
1004
+ // Token expiry note
1005
+ var expiryNoteEl = document.getElementById('token-expiry-note');
1006
+ if (expiryNoteEl) expiryNoteEl.style.display = (hasToken && expiresAt > 0) ? 'block' : 'none';
984
1007
  requestUiResize();
985
1008
  }
986
1009
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atezer/figma-mcp-bridge",
3
- "version": "1.6.4",
3
+ "version": "1.6.5",
4
4
  "description": "F-MCP ATezer: MCP server and Figma plugin bridge for Claude/Cursor. No REST token required.",
5
5
  "type": "module",
6
6
  "main": "dist/local.js",