@mcptoolshop/registry-stats 2.3.0 → 3.1.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/README.es.md +137 -134
- package/README.fr.md +137 -134
- package/README.hi.md +137 -134
- package/README.it.md +137 -134
- package/README.ja.md +137 -134
- package/README.md +47 -5
- package/README.pt-BR.md +137 -134
- package/README.zh.md +137 -134
- package/dist/cli.js +4 -3
- package/dist/index.cjs +311 -3
- package/dist/index.d.cts +108 -1
- package/dist/index.d.ts +108 -1
- package/dist/index.js +304 -3
- package/package.json +1 -1
package/README.it.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
<p align="center">
|
|
2
|
-
<a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.md">English</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
|
-
</p>
|
|
4
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.md">English</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
5
|
<p align="center">
|
|
6
6
|
<img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/registry-stats/readme.png" alt="registry-stats logo" width="400" />
|
|
7
7
|
</p>
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
<p align="center">
|
|
10
10
|
Five registries. One engine. Dashboard included.
|
|
11
11
|
</p>
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
<p align="center">
|
|
14
14
|
<a href="https://github.com/mcp-tool-shop-org/registry-stats/actions/workflows/pages.yml"><img src="https://github.com/mcp-tool-shop-org/registry-stats/actions/workflows/pages.yml/badge.svg" alt="CI"></a>
|
|
15
15
|
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="MIT License"></a>
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<a href="https://mcp-tool-shop-org.github.io/registry-stats/dashboard/"><img src="https://img.shields.io/badge/Dashboard-live-green" alt="Dashboard"></a>
|
|
18
18
|
<a href="https://mcp-tool-shop-org.github.io/registry-stats/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page"></a>
|
|
19
19
|
</p>
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
<p align="center">
|
|
22
22
|
<a href="#dashboard">Dashboard</a> ·
|
|
23
23
|
<a href="#desktop-app">Desktop App</a> ·
|
|
@@ -28,57 +28,60 @@
|
|
|
28
28
|
<a href="#config-file">Config</a> ·
|
|
29
29
|
<a href="#license">License</a>
|
|
30
30
|
</p>
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
---
|
|
33
|
-
|
|
34
|
-
Pubblica su npm, PyPI, NuGet, il Marketplace di VS Code e Docker Hub. Attualmente, rispondere alla domanda "come stanno
|
|
35
|
-
|
|
36
|
-
Nessuna dipendenza a runtime. Utilizza la funzione nativa `fetch()`. Node 18
|
|
37
|
-
|
|
38
|
-
## Cosa
|
|
39
|
-
|
|
40
|
-
|
|
|
41
|
-
|-------|-------------|
|
|
42
|
-
| **Engine** | Libreria TypeScript + CLI + server REST. Interroga cinque registri con un'unica interfaccia. Pubblicato su npm come `@mcptoolshop/registry-stats`. |
|
|
43
|
-
| **Dashboard** | Applicazione web
|
|
44
|
-
| **Desktop** | Applicazione nativa per Windows realizzata con WinUI 3 + WebView2. Include la dashboard offline e scarica le statistiche in tempo reale su richiesta. |
|
|
45
|
-
|
|
46
|
-
## Dashboard
|
|
47
|
-
|
|
48
|
-
Una dashboard con
|
|
49
|
-
|
|
50
|
-
- **Interfaccia a schede** — Schede Home, Analytics,
|
|
51
|
-
- **
|
|
52
|
-
- **
|
|
53
|
-
- **Sei grafici interattivi** —
|
|
54
|
-
- **Motore di crescita intelligente** —
|
|
55
|
-
- **
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
- **
|
|
59
|
-
- **
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
- **
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
33
|
+
|
|
34
|
+
Pubblica i tuoi pacchetti su npm, PyPI, NuGet, il Marketplace di VS Code e Docker Hub. Attualmente, per rispondere alla domanda "come stanno performando i miei pacchetti?", è necessario controllare cinque siti diversi. **registry-stats** è la piattaforma completa: un motore TypeScript (CLI + API + server REST), una dashboard web interattiva e un'applicazione desktop nativa per Windows, il tutto contenuto in un unico repository.
|
|
35
|
+
|
|
36
|
+
Nessuna dipendenza a runtime. Utilizza la funzione nativa `fetch()`. Node 18+.
|
|
37
|
+
|
|
38
|
+
## Cosa contiene
|
|
39
|
+
|
|
40
|
+
| Strato | Cosa fa |
|
|
41
|
+
|-------|-------------|
|
|
42
|
+
| **Engine** | Libreria TypeScript + CLI + server REST. Interroga cinque registri con un'unica interfaccia. Pubblicato su npm come `@mcptoolshop/registry-stats`. |
|
|
43
|
+
| **Dashboard** | Applicazione web alimentata da Astro, con il co-pilota AI Pulse (streaming vocale, ricerca web, schermo intero, connettori dati GitHub), sei grafici interattivi, aggiornamento in tempo reale, esportazione di report (PDF / JSONL / Markdown) e una guida di aiuto organizzata in schede. Ricostruita settimanalmente tramite CI; aggiornabile su richiesta. |
|
|
44
|
+
| **Desktop** | Applicazione nativa per Windows realizzata con WinUI 3 + WebView2. Include la dashboard offline e scarica le statistiche in tempo reale su richiesta. |
|
|
45
|
+
|
|
46
|
+
## Dashboard
|
|
47
|
+
|
|
48
|
+
Una dashboard con aggiornamento automatico è disponibile all'indirizzo [`/dashboard/`](https://mcp-tool-shop-org.github.io/registry-stats/dashboard/).
|
|
49
|
+
|
|
50
|
+
- **Interfaccia a schede** — Schede Home, Analytics, Classifica e Aiuto.
|
|
51
|
+
- **Co-pilota AI Pulse** — Assistente conversazionale basato su Ollama, con sintesi vocale in streaming (parla mentre l'LLM elabora, 4 voci tramite [mcp-voice-soundboard](https://github.com/mcp-tool-shop-org/mcp-voice-soundboard)), ricerca web (Wikipedia + SearXNG opzionale), sintesi vocale automatica, modalità schermo intero, connettore dati per organizzazioni GitHub, selettore di modelli e memoria delle conversazioni.
|
|
52
|
+
- **Panoramica generale** — Punteggio di salute (0–100), indice di diversità, variazione settimanale, numero totale di download in tutti i registri.
|
|
53
|
+
- **Sei grafici interattivi** — Tendenza degli ultimi 30 giorni (aggregata / per registro / top-5), quota di registro (area polare), rischio del portafoglio (istogramma + Gini & P90), top-10 dei più performanti, tracciamento della velocità con grafici a linee, e mappa di calore degli ultimi 30 giorni con rilevamento di picchi (>2σ).
|
|
54
|
+
- **Motore di crescita intelligente** — Gestisce le distorsioni dovute a numeri bassi con una soglia di base, un limite percentuale e una formula di velocità smorzata.
|
|
55
|
+
- **Informazioni utili** — Raccomandazioni generate automaticamente e avvisi per pacchetti in declino.
|
|
56
|
+
- **Pannello Pulse** — Vista divisa tra i pacchetti consolidati (≥ 50 download/settimana) e i pacchetti emergenti e nuovi, con grafici a linee degli ultimi 7 giorni, variazioni assolute e percentuali, contesto di riferimento e un riepilogo esecutivo in una riga.
|
|
57
|
+
- **Aggiornamento in tempo reale** — Recupero dei dati da npm e PyPI tramite API direttamente dal client, con indicatore di avanzamento; i risultati vengono memorizzati nella sessionStorage (TTL di 5 minuti) per garantire un cambio di scheda immediato.
|
|
58
|
+
- **Esportazione di report** — Menu a tendina accanto al pulsante di aggiornamento, che offre tre formati: **Exec PDF** (tramite jsPDF), **LLM JSONL** (record tipizzati per l'elaborazione da parte dell'AI) e **Dev Markdown** (tabelle GFM).
|
|
59
|
+
- **Classifica** — 132 pacchetti classificati in base al numero di download settimanali, con grafici a linee degli ultimi 30 giorni e badge intelligenti per le tendenze.
|
|
60
|
+
- **Pagina di configurazione** — Editor del portafoglio con validazione, sezione di sincronizzazione con i registri e panoramica delle pipeline.
|
|
61
|
+
- **Scheda di aiuto** — Guida chiara e completa che copre ogni scheda, i concetti chiave, i suggerimenti per l'assistente AI, la pipeline dei dati e link utili.
|
|
62
|
+
- **Tema chiaro / scuro** — Segue le preferenze del sistema.
|
|
63
|
+
|
|
64
|
+
I dati vengono recuperati al momento della compilazione e ricostruiti settimanalmente tramite CI (lunedì alle 06:00 UTC). L'aggiornamento in tempo reale recupera i numeri più recenti direttamente dalle API dei registri. Configura i pacchetti da monitorare in `site/src/data/packages.json` (132 pacchetti su 5 registri).
|
|
65
|
+
|
|
66
|
+
## Applicazione Desktop
|
|
67
|
+
|
|
68
|
+
Un'applicazione nativa per Windows che integra la dashboard in un ambiente WebView2 locale:
|
|
69
|
+
|
|
70
|
+
- **Funziona offline** — include HTML/CSS/JS integrati; funziona senza connessione a Internet
|
|
71
|
+
- **Aggiornamento in tempo reale** — recupera `stats.json` da GitHub Pages su richiesta
|
|
72
|
+
- **Esportazione CSV** — esporta i dati della classifica con un solo clic
|
|
73
|
+
- **Pacchetto MSIX** — creato e firmato tramite CI utilizzando `desktop-ci.yml`
|
|
74
|
+
|
|
75
|
+
Il codice sorgente dell'applicazione desktop si trova in `desktop/`. Realizzato con .NET 10 MAUI e destinato a WinUI 3.
|
|
76
|
+
|
|
77
|
+
## Installazione
|
|
78
|
+
|
|
76
79
|
```bash
|
|
77
80
|
npm install @mcptoolshop/registry-stats
|
|
78
81
|
```
|
|
79
|
-
|
|
80
|
-
## CLI (Interfaccia a riga di comando)
|
|
81
|
-
|
|
82
|
+
|
|
83
|
+
## CLI (Interfaccia a riga di comando)
|
|
84
|
+
|
|
82
85
|
```bash
|
|
83
86
|
# Query a single registry
|
|
84
87
|
registry-stats express -r npm
|
|
@@ -116,11 +119,11 @@ registry-stats express -r npm --range 2025-01-01:2025-06-30 --format chart
|
|
|
116
119
|
# Start a REST API server
|
|
117
120
|
registry-stats serve --port 3000
|
|
118
121
|
```
|
|
119
|
-
|
|
120
|
-
## File di configurazione
|
|
121
|
-
|
|
122
|
-
Create un file `registry-stats.config.json` nella directory principale del vostro progetto (oppure eseguite `registry-stats --init`):
|
|
123
|
-
|
|
122
|
+
|
|
123
|
+
## File di configurazione
|
|
124
|
+
|
|
125
|
+
Create un file `registry-stats.config.json` nella directory principale del vostro progetto (oppure eseguite `registry-stats --init`):
|
|
126
|
+
|
|
124
127
|
```json
|
|
125
128
|
{
|
|
126
129
|
"registries": ["npm", "pypi", "nuget", "vscode", "docker"],
|
|
@@ -139,11 +142,11 @@ Create un file `registry-stats.config.json` nella directory principale del vostr
|
|
|
139
142
|
"concurrency": 5
|
|
140
143
|
}
|
|
141
144
|
```
|
|
142
|
-
|
|
143
|
-
Eseguite `registry-stats` senza argomenti per ottenere le statistiche per tutti i pacchetti configurati. La CLI cerca il file di configurazione a partire dalla directory corrente.
|
|
144
|
-
|
|
145
|
-
La configurazione è disponibile anche tramite API programmatica:
|
|
146
|
-
|
|
145
|
+
|
|
146
|
+
Eseguite `registry-stats` senza argomenti per ottenere le statistiche per tutti i pacchetti configurati. La CLI cerca il file di configurazione a partire dalla directory corrente.
|
|
147
|
+
|
|
148
|
+
La configurazione è disponibile anche tramite API programmatica:
|
|
149
|
+
|
|
147
150
|
```typescript
|
|
148
151
|
import { loadConfig, defaultConfig, starterConfig } from '@mcptoolshop/registry-stats';
|
|
149
152
|
|
|
@@ -151,9 +154,9 @@ const config = loadConfig(); // finds nearest config file, or null
|
|
|
151
154
|
const defaults = defaultConfig(); // returns default Config object
|
|
152
155
|
const template = starterConfig(); // returns starter JSON string
|
|
153
156
|
```
|
|
154
|
-
|
|
155
|
-
## API programmatica
|
|
156
|
-
|
|
157
|
+
|
|
158
|
+
## API programmatica
|
|
159
|
+
|
|
157
160
|
```typescript
|
|
158
161
|
import { stats, calc, createCache } from '@mcptoolshop/registry-stats';
|
|
159
162
|
|
|
@@ -194,41 +197,41 @@ const cache = createCache();
|
|
|
194
197
|
await stats('npm', 'express', { cache }); // fetches
|
|
195
198
|
await stats('npm', 'express', { cache }); // cache hit
|
|
196
199
|
```
|
|
197
|
-
|
|
198
|
-
## Supporto per i registri
|
|
199
|
-
|
|
200
|
-
| Registro | Formato del pacchetto | Serie temporali | Dati disponibili |
|
|
201
|
-
|----------|---------------|-------------|----------------|
|
|
202
|
-
| `npm` | `express`, `@scope/pkg` | Sì (549 giorni) | giorno precedente, settimana precedente, mese precedente |
|
|
203
|
-
| `pypi` | `requests` | Sì (180 giorni) | giorno precedente, settimana precedente, mese precedente, totale |
|
|
204
|
-
| `nuget` | `Newtonsoft.Json` | No | totale |
|
|
205
|
-
| `vscode` | `publisher.extension` | No | totale (installazioni), valutazione, tendenze |
|
|
206
|
-
| `docker` | `namespace/repo` | No | totale (download), stelle |
|
|
207
|
-
|
|
208
|
-
## Affidabilità integrata
|
|
209
|
-
|
|
210
|
-
- Tentativi automatici con backoff esponenziale in caso di errori 429/5xx
|
|
211
|
-
- Rispetta le intestazioni `Retry-After`
|
|
212
|
-
- Limitazione della concorrenza per richieste di massa
|
|
213
|
-
- Cache TTL opzionale (configurabile: potete fornire la vostra implementazione Redis/file tramite l'interfaccia `StatsCache`)
|
|
214
|
-
|
|
215
|
-
## Server API REST
|
|
216
|
-
|
|
217
|
-
Eseguite come microservizio o integrate nel vostro server:
|
|
218
|
-
|
|
200
|
+
|
|
201
|
+
## Supporto per i registri
|
|
202
|
+
|
|
203
|
+
| Registro | Formato del pacchetto | Serie temporali | Dati disponibili |
|
|
204
|
+
|----------|---------------|-------------|----------------|
|
|
205
|
+
| `npm` | `express`, `@scope/pkg` | Sì (549 giorni) | giorno precedente, settimana precedente, mese precedente |
|
|
206
|
+
| `pypi` | `requests` | Sì (180 giorni) | giorno precedente, settimana precedente, mese precedente, totale |
|
|
207
|
+
| `nuget` | `Newtonsoft.Json` | No | totale |
|
|
208
|
+
| `vscode` | `publisher.extension` | No | totale (installazioni), valutazione, tendenze |
|
|
209
|
+
| `docker` | `namespace/repo` | No | totale (download), stelle |
|
|
210
|
+
|
|
211
|
+
## Affidabilità integrata
|
|
212
|
+
|
|
213
|
+
- Tentativi automatici con backoff esponenziale in caso di errori 429/5xx
|
|
214
|
+
- Rispetta le intestazioni `Retry-After`
|
|
215
|
+
- Limitazione della concorrenza per richieste di massa
|
|
216
|
+
- Cache TTL opzionale (configurabile: potete fornire la vostra implementazione Redis/file tramite l'interfaccia `StatsCache`)
|
|
217
|
+
|
|
218
|
+
## Server API REST
|
|
219
|
+
|
|
220
|
+
Eseguite come microservizio o integrate nel vostro server:
|
|
221
|
+
|
|
219
222
|
```bash
|
|
220
223
|
registry-stats serve --port 3000
|
|
221
224
|
```
|
|
222
|
-
|
|
225
|
+
|
|
223
226
|
```
|
|
224
227
|
GET /stats/:package # all registries
|
|
225
228
|
GET /stats/:registry/:package # single registry
|
|
226
229
|
GET /compare/:package?registries=npm,pypi
|
|
227
230
|
GET /range/:registry/:package?start=YYYY-MM-DD&end=YYYY-MM-DD&format=json|csv|chart
|
|
228
231
|
```
|
|
229
|
-
|
|
230
|
-
Utilizzo programmatica per server personalizzati o serverless:
|
|
231
|
-
|
|
232
|
+
|
|
233
|
+
Utilizzo programmatica per server personalizzati o serverless:
|
|
234
|
+
|
|
232
235
|
```typescript
|
|
233
236
|
import { createHandler, serve } from '@mcptoolshop/registry-stats';
|
|
234
237
|
|
|
@@ -240,9 +243,9 @@ import { createServer } from 'node:http';
|
|
|
240
243
|
const handler = createHandler();
|
|
241
244
|
createServer(handler).listen(3000);
|
|
242
245
|
```
|
|
243
|
-
|
|
244
|
-
## Registri personalizzati
|
|
245
|
-
|
|
246
|
+
|
|
247
|
+
## Registri personalizzati
|
|
248
|
+
|
|
246
249
|
```typescript
|
|
247
250
|
import { registerProvider, type RegistryProvider } from '@mcptoolshop/registry-stats';
|
|
248
251
|
|
|
@@ -263,9 +266,9 @@ const cargo: RegistryProvider = {
|
|
|
263
266
|
registerProvider(cargo);
|
|
264
267
|
await stats('cargo', 'serde');
|
|
265
268
|
```
|
|
266
|
-
|
|
267
|
-
## Struttura del Repository
|
|
268
|
-
|
|
269
|
+
|
|
270
|
+
## Struttura del Repository
|
|
271
|
+
|
|
269
272
|
```
|
|
270
273
|
registry-stats/
|
|
271
274
|
├── src/ # TypeScript engine (published to npm)
|
|
@@ -273,9 +276,9 @@ registry-stats/
|
|
|
273
276
|
├── desktop/ # WinUI 3 desktop app (.NET 10 MAUI)
|
|
274
277
|
└── test/ # Library tests (vitest)
|
|
275
278
|
```
|
|
276
|
-
|
|
277
|
-
## Sviluppo
|
|
278
|
-
|
|
279
|
+
|
|
280
|
+
## Sviluppo
|
|
281
|
+
|
|
279
282
|
```bash
|
|
280
283
|
# Engine
|
|
281
284
|
npm install && npm run build && npm test
|
|
@@ -286,36 +289,36 @@ npm run site:dev
|
|
|
286
289
|
# Dashboard (production build)
|
|
287
290
|
npm run site:build
|
|
288
291
|
```
|
|
289
|
-
|
|
290
|
-
## Sicurezza e ambito dei dati
|
|
291
|
-
|
|
292
|
-
| Aspetto | Dettaglio |
|
|
293
|
-
|--------|--------|
|
|
294
|
-
| **Data touched** | Statistiche di download pubbliche da npm, PyPI, NuGet, VS Code Marketplace, Docker Hub. Cache in memoria (opzionale). |
|
|
295
|
-
| **Data NOT touched** | Nessuna telemetria. Nessuna analisi. Nessun archivio di credenziali. Nessun dato utente. Nessuna scrittura di file. |
|
|
296
|
-
| **Permissions** | Lettura: API
|
|
297
|
-
| **Network** |
|
|
298
|
-
| **Telemetry** |
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
##
|
|
303
|
-
|
|
304
|
-
| Categoria | Punteggio |
|
|
305
|
-
|----------|-------|
|
|
306
|
-
| A. Sicurezza | 10 |
|
|
307
|
-
| B. Gestione degli errori | 10 |
|
|
308
|
-
| C. Documentazione per gli operatori | 10 |
|
|
309
|
-
| D. Igiene
|
|
310
|
-
| E. Identità (soft) | 10 |
|
|
311
|
-
| **Overall** | **50/50** |
|
|
312
|
-
|
|
313
|
-
> Analisi completa: [SHIP_GATE.md](SHIP_GATE.md) · [SCORECARD.md](SCORECARD.md)
|
|
314
|
-
|
|
315
|
-
## Licenza
|
|
316
|
-
|
|
317
|
-
MIT
|
|
318
|
-
|
|
292
|
+
|
|
293
|
+
## Sicurezza e ambito dei dati
|
|
294
|
+
|
|
295
|
+
| Aspetto | Dettaglio |
|
|
296
|
+
|--------|--------|
|
|
297
|
+
| **Data touched** | Statistiche di download pubbliche da npm, PyPI, NuGet, VS Code Marketplace, Docker Hub. Cache in memoria (opzionale). |
|
|
298
|
+
| **Data NOT touched** | Nessuna telemetria. Nessuna analisi. Nessun archivio di credenziali. Nessun dato utente. Nessuna scrittura di file. |
|
|
299
|
+
| **Permissions** | Lettura: API dei registri pubblici tramite HTTPS. Scrittura: solo stdout/stderr. |
|
|
300
|
+
| **Network** | Comunicazione HTTPS in uscita verso le API dei registri pubblici. Server REST localhost opzionale. |
|
|
301
|
+
| **Telemetry** | Nessun dato raccolto o trasmesso. |
|
|
302
|
+
|
|
303
|
+
Consultare [SECURITY.md](SECURITY.md) per la segnalazione di vulnerabilità.
|
|
304
|
+
|
|
305
|
+
## Scheda di valutazione
|
|
306
|
+
|
|
307
|
+
| Categoria | Punteggio |
|
|
308
|
+
|----------|-------|
|
|
309
|
+
| A. Sicurezza | 10 |
|
|
310
|
+
| B. Gestione degli errori | 10 |
|
|
311
|
+
| C. Documentazione per gli operatori | 10 |
|
|
312
|
+
| D. Igiene del processo di distribuzione | 10 |
|
|
313
|
+
| E. Identità (soft) | 10 |
|
|
314
|
+
| **Overall** | **50/50** |
|
|
315
|
+
|
|
316
|
+
> Analisi completa: [SHIP_GATE.md](SHIP_GATE.md) · [SCORECARD.md](SCORECARD.md)
|
|
317
|
+
|
|
318
|
+
## Licenza
|
|
319
|
+
|
|
320
|
+
MIT
|
|
321
|
+
|
|
319
322
|
---
|
|
320
|
-
|
|
321
|
-
Creato da <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
|
|
323
|
+
|
|
324
|
+
Creato da <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
|