@mcptoolshop/registry-stats 2.2.0 → 3.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.
- 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 +6 -6
- package/README.pt-BR.md +137 -134
- package/README.zh.md +137 -134
- package/package.json +1 -1
package/README.pt-BR.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.it.md">Italiano</a> | <a href="README.md">English</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.it.md">Italiano</a> | <a href="README.md">English</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
|
-
Você publica no npm, PyPI, NuGet, na loja do VS Code e no Docker Hub. Atualmente, responder à pergunta "como estão indo meus pacotes?" significa verificar cinco sites diferentes. **registry-stats** é a plataforma completa: um motor TypeScript (CLI + API + servidor REST), um painel web interativo e um aplicativo nativo para Windows — tudo em um único repositório.
|
|
35
|
-
|
|
36
|
-
Sem dependências de tempo de execução. Utiliza a função nativa `fetch()`. Node 18+.
|
|
37
|
-
|
|
38
|
-
## O que está incluído
|
|
39
|
-
|
|
40
|
-
| Camada | O que ele faz |
|
|
41
|
-
|-------|-------------|
|
|
42
|
-
| **Engine** | Biblioteca TypeScript + CLI + servidor REST. Consulte cinco registros com uma única interface. Publicado no npm como `@mcptoolshop/registry-stats`. |
|
|
43
|
-
| **Dashboard** |
|
|
44
|
-
| **Desktop** | Aplicativo nativo para Windows, construído com WinUI 3 + WebView2. Inclui o painel offline e busca as estatísticas em tempo real sob demanda. |
|
|
45
|
-
|
|
46
|
-
## Painel
|
|
47
|
-
|
|
48
|
-
Um painel de estatísticas que se atualiza automaticamente está disponível em [`/dashboard/`](https://mcp-tool-shop-org.github.io/registry-stats/dashboard/).
|
|
49
|
-
|
|
50
|
-
- **Interface
|
|
51
|
-
- **Assistente de
|
|
52
|
-
- **
|
|
53
|
-
- **Seis gráficos interativos** — tendência de 30 dias (
|
|
54
|
-
- **Motor de crescimento inteligente** —
|
|
55
|
-
- **
|
|
56
|
-
- **
|
|
57
|
-
- **
|
|
58
|
-
- **
|
|
59
|
-
- **
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
- **
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
33
|
+
|
|
34
|
+
Você publica no npm, PyPI, NuGet, na loja do VS Code e no Docker Hub. Atualmente, responder à pergunta "como estão indo meus pacotes?" significa verificar cinco sites diferentes. **registry-stats** é a plataforma completa: um motor TypeScript (CLI + API + servidor REST), um painel web interativo e um aplicativo nativo para Windows — tudo em um único repositório.
|
|
35
|
+
|
|
36
|
+
Sem dependências de tempo de execução. Utiliza a função nativa `fetch()`. Node 18+.
|
|
37
|
+
|
|
38
|
+
## O que está incluído
|
|
39
|
+
|
|
40
|
+
| Camada | O que ele faz |
|
|
41
|
+
|-------|-------------|
|
|
42
|
+
| **Engine** | Biblioteca TypeScript + CLI + servidor REST. Consulte cinco registros com uma única interface. Publicado no npm como `@mcptoolshop/registry-stats`. |
|
|
43
|
+
| **Dashboard** | Aplicação web com tecnologia Astro e assistente de IA Pulse (reconhecimento de voz, pesquisa na web, tela cheia, conectores de dados do GitHub), seis gráficos interativos, atualização em tempo real, exportação de relatórios (PDF / JSONL / Markdown) e um guia de ajuda em abas. Reconstruída semanalmente por CI; atualizável sob demanda. |
|
|
44
|
+
| **Desktop** | Aplicativo nativo para Windows, construído com WinUI 3 + WebView2. Inclui o painel offline e busca as estatísticas em tempo real sob demanda. |
|
|
45
|
+
|
|
46
|
+
## Painel
|
|
47
|
+
|
|
48
|
+
Um painel de estatísticas que se atualiza automaticamente está disponível em [`/dashboard/`](https://mcp-tool-shop-org.github.io/registry-stats/dashboard/).
|
|
49
|
+
|
|
50
|
+
- **Interface em abas** — Abas "Início", "Análise", "Ranking" e "Ajuda".
|
|
51
|
+
- **Assistente de IA Pulse** — Assistente conversacional alimentado por Ollama, com síntese de voz em tempo real (o assistente fala enquanto o modelo de linguagem gera a resposta, com 4 vozes disponíveis através de [mcp-voice-soundboard](https://github.com/mcp-tool-shop-org/mcp-voice-soundboard)), pesquisa na web (Wikipedia + SearXNG opcional), reprodução automática, modo de tela cheia, conector de dados de organizações do GitHub, seletor de modelo e memória de conversação.
|
|
52
|
+
- **Visão geral executiva** — pontuação de saúde (0–100), índice de diversidade, variação semanal, número total de downloads em todos os repositórios.
|
|
53
|
+
- **Seis gráficos interativos** — tendência de 30 dias (agregação / por repositório / top-5), participação no repositório (área polar), risco do portfólio (histograma + Gini e P90), top 10 em ascensão, rastreador de velocidade com gráficos de linha, e mapa de calor de 30 dias com detecção de picos (>2σ).
|
|
54
|
+
- **Motor de crescimento inteligente** — corrige distorções de pequenas amostras com um limite mínimo, um limite percentual e uma fórmula de velocidade amortecida.
|
|
55
|
+
- **Informações acionáveis** — recomendações geradas automaticamente e alertas para pacotes com desempenho decrescente.
|
|
56
|
+
- **Painel Pulse** — visualização dividida de pacotes estabelecidos (≥ 50 downloads/semana) e pacotes emergentes e novos, com gráficos de linha de 7 dias, variações absolutas e percentuais, contexto de referência e um resumo executivo em uma linha.
|
|
57
|
+
- **Atualização em tempo real** — busca sob demanda dos dados das APIs do npm e PyPI, com indicador de progresso; os resultados são armazenados em cache na sessionStorage (TTL de 5 minutos), para que a troca de abas seja instantânea.
|
|
58
|
+
- **Exportação de relatórios** — menu suspenso próximo ao botão de atualização, oferecendo três formatos: **PDF Executivo** (via jsPDF), **JSONL do Modelo de Linguagem** (registros formatados para ingestão por IA) e **Markdown para Desenvolvedores** (tabelas GFM).
|
|
59
|
+
- **Ranking** — 132 pacotes classificados por downloads semanais, com gráficos de linha de 30 dias e indicadores de tendência inteligentes.
|
|
60
|
+
- **Página de configuração** — editor de portfólio com validação, seção de sincronização de repositórios e visão geral do pipeline.
|
|
61
|
+
- **Aba de ajuda** — guia amigável que cobre todas as abas, conceitos-chave, dicas para o assistente de IA, pipeline de dados e links úteis.
|
|
62
|
+
- **Tema claro / escuro** — segue a preferência do sistema.
|
|
63
|
+
|
|
64
|
+
Os dados são coletados no momento da compilação e reconstruídos semanalmente por meio de CI (segundas-feiras às 06:00 UTC). A atualização em tempo real busca os dados mais recentes diretamente das APIs dos registros. Configure os pacotes a serem monitorados em `site/src/data/packages.json` (132 pacotes em 5 registros).
|
|
65
|
+
|
|
66
|
+
## Aplicativo para Desktop
|
|
67
|
+
|
|
68
|
+
Um aplicativo nativo para Windows que encapsula o painel em um shell WebView2 local:
|
|
69
|
+
|
|
70
|
+
- **Funciona offline** — inclui HTML/CSS/JS empacotados; funciona sem internet.
|
|
71
|
+
- **Atualização em tempo real** — busca o arquivo `stats.json` do GitHub Pages sob demanda.
|
|
72
|
+
- **Exportação para CSV** — exporte os dados da tabela de classificação com um clique.
|
|
73
|
+
- **Empacotado como MSIX** — construído e assinado no CI via `desktop-ci.yml`.
|
|
74
|
+
|
|
75
|
+
O código-fonte do aplicativo para desktop está localizado em `desktop/`. Construído com .NET 10 MAUI, direcionado para WinUI 3.
|
|
76
|
+
|
|
77
|
+
## Instalação
|
|
78
|
+
|
|
76
79
|
```bash
|
|
77
80
|
npm install @mcptoolshop/registry-stats
|
|
78
81
|
```
|
|
79
|
-
|
|
80
|
-
## Interface de Linha de Comando (CLI)
|
|
81
|
-
|
|
82
|
+
|
|
83
|
+
## Interface de Linha de Comando (CLI)
|
|
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
|
-
## Arquivo de Configuração
|
|
121
|
-
|
|
122
|
-
Crie um arquivo `registry-stats.config.json` na raiz do seu projeto (ou execute `registry-stats --init`):
|
|
123
|
-
|
|
122
|
+
|
|
123
|
+
## Arquivo de Configuração
|
|
124
|
+
|
|
125
|
+
Crie um arquivo `registry-stats.config.json` na raiz do seu projeto (ou execute `registry-stats --init`):
|
|
126
|
+
|
|
124
127
|
```json
|
|
125
128
|
{
|
|
126
129
|
"registries": ["npm", "pypi", "nuget", "vscode", "docker"],
|
|
@@ -139,11 +142,11 @@ Crie um arquivo `registry-stats.config.json` na raiz do seu projeto (ou execute
|
|
|
139
142
|
"concurrency": 5
|
|
140
143
|
}
|
|
141
144
|
```
|
|
142
|
-
|
|
143
|
-
Execute `registry-stats` sem argumentos para obter as estatísticas de todos os pacotes configurados. A CLI procura o arquivo de configuração a partir do diretório atual.
|
|
144
|
-
|
|
145
|
-
A configuração também está disponível programaticamente:
|
|
146
|
-
|
|
145
|
+
|
|
146
|
+
Execute `registry-stats` sem argumentos para obter as estatísticas de todos os pacotes configurados. A CLI procura o arquivo de configuração a partir do diretório atual.
|
|
147
|
+
|
|
148
|
+
A configuração também está disponível programaticamente:
|
|
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 Programática
|
|
156
|
-
|
|
157
|
+
|
|
158
|
+
## API Programática
|
|
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
|
-
## Suporte a Registros
|
|
199
|
-
|
|
200
|
-
| Registro | Formato do pacote | Séries temporais | Dados disponíveis |
|
|
201
|
-
|----------|---------------|-------------|----------------|
|
|
202
|
-
| `npm` | `express`, `@scope/pkg` | Sim (549 dias) | último dia, última semana, último mês |
|
|
203
|
-
| `pypi` | `requests` | Sim (180 dias) | último dia, última semana, último mês, total |
|
|
204
|
-
| `nuget` | `Newtonsoft.Json` | No | total |
|
|
205
|
-
| `vscode` | `publisher.extension` | No | total (instalações), avaliação, tendências |
|
|
206
|
-
| `docker` | `namespace/repo` | No | total (downloads), estrelas |
|
|
207
|
-
|
|
208
|
-
## Confiabilidade Integrada
|
|
209
|
-
|
|
210
|
-
- Tentativa automática com retrocesso exponencial em caso de erros 429/5xx
|
|
211
|
-
- Respeita os cabeçalhos `Retry-After`
|
|
212
|
-
- Limitação de concorrência para solicitações em lote
|
|
213
|
-
- Cache TTL opcional (plugável — utilize seu próprio backend Redis/arquivo através da interface `StatsCache`)
|
|
214
|
-
|
|
215
|
-
## Servidor de API REST
|
|
216
|
-
|
|
217
|
-
Execute como um microserviço ou incorpore em seu próprio servidor:
|
|
218
|
-
|
|
200
|
+
|
|
201
|
+
## Suporte a Registros
|
|
202
|
+
|
|
203
|
+
| Registro | Formato do pacote | Séries temporais | Dados disponíveis |
|
|
204
|
+
|----------|---------------|-------------|----------------|
|
|
205
|
+
| `npm` | `express`, `@scope/pkg` | Sim (549 dias) | último dia, última semana, último mês |
|
|
206
|
+
| `pypi` | `requests` | Sim (180 dias) | último dia, última semana, último mês, total |
|
|
207
|
+
| `nuget` | `Newtonsoft.Json` | No | total |
|
|
208
|
+
| `vscode` | `publisher.extension` | No | total (instalações), avaliação, tendências |
|
|
209
|
+
| `docker` | `namespace/repo` | No | total (downloads), estrelas |
|
|
210
|
+
|
|
211
|
+
## Confiabilidade Integrada
|
|
212
|
+
|
|
213
|
+
- Tentativa automática com retrocesso exponencial em caso de erros 429/5xx
|
|
214
|
+
- Respeita os cabeçalhos `Retry-After`
|
|
215
|
+
- Limitação de concorrência para solicitações em lote
|
|
216
|
+
- Cache TTL opcional (plugável — utilize seu próprio backend Redis/arquivo através da interface `StatsCache`)
|
|
217
|
+
|
|
218
|
+
## Servidor de API REST
|
|
219
|
+
|
|
220
|
+
Execute como um microserviço ou incorpore em seu próprio servidor:
|
|
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
|
-
Uso programático para servidores personalizados ou sem servidor:
|
|
231
|
-
|
|
232
|
+
|
|
233
|
+
Uso programático para servidores personalizados ou sem servidor:
|
|
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
|
-
## Registros Personalizados
|
|
245
|
-
|
|
246
|
+
|
|
247
|
+
## Registros Personalizados
|
|
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
|
-
## Estrutura do Repositório
|
|
268
|
-
|
|
269
|
+
|
|
270
|
+
## Estrutura do Repositório
|
|
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
|
-
## Desenvolvimento
|
|
278
|
-
|
|
279
|
+
|
|
280
|
+
## Desenvolvimento
|
|
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
|
-
## Segurança e Escopo de Dados
|
|
291
|
-
|
|
292
|
-
| Aspecto | Detalhe |
|
|
293
|
-
|--------|--------|
|
|
294
|
-
| **Data touched** | Estatísticas de download públicas do npm, PyPI, NuGet, VS Code Marketplace, Docker Hub. Cache na memória (opcional). |
|
|
295
|
-
| **Data NOT touched** | Sem telemetria. Sem análises. Sem armazenamento de credenciais. Sem dados do usuário. Sem gravações de arquivos. |
|
|
296
|
-
| **Permissions** | Leitura: APIs públicas de registros via HTTPS. Escrita: apenas stdout/stderr. |
|
|
297
|
-
| **Network** | Saída HTTPS para APIs públicas de registros. Servidor REST local opcional. |
|
|
298
|
-
| **Telemetry** | Nenhum dado coletado ou enviado. |
|
|
299
|
-
|
|
300
|
-
Consulte [SECURITY.md](SECURITY.md) para relatar vulnerabilidades.
|
|
301
|
-
|
|
302
|
-
## Tabela de Pontuação
|
|
303
|
-
|
|
304
|
-
| Categoria | Pontuação |
|
|
305
|
-
|----------|-------|
|
|
306
|
-
| A. Segurança | 10 |
|
|
307
|
-
| B. Tratamento de Erros | 10 |
|
|
308
|
-
| C. Documentação para Operadores | 10 |
|
|
309
|
-
| D. Higiene de Distribuição | 10 |
|
|
310
|
-
| E. Identidade (suave) | 10 |
|
|
311
|
-
| **Overall** | **50/50** |
|
|
312
|
-
|
|
313
|
-
> Auditoria completa: [SHIP_GATE.md](SHIP_GATE.md) · [SCORECARD.md](SCORECARD.md)
|
|
314
|
-
|
|
315
|
-
## Licença
|
|
316
|
-
|
|
317
|
-
MIT
|
|
318
|
-
|
|
292
|
+
|
|
293
|
+
## Segurança e Escopo de Dados
|
|
294
|
+
|
|
295
|
+
| Aspecto | Detalhe |
|
|
296
|
+
|--------|--------|
|
|
297
|
+
| **Data touched** | Estatísticas de download públicas do npm, PyPI, NuGet, VS Code Marketplace, Docker Hub. Cache na memória (opcional). |
|
|
298
|
+
| **Data NOT touched** | Sem telemetria. Sem análises. Sem armazenamento de credenciais. Sem dados do usuário. Sem gravações de arquivos. |
|
|
299
|
+
| **Permissions** | Leitura: APIs públicas de registros via HTTPS. Escrita: apenas stdout/stderr. |
|
|
300
|
+
| **Network** | Saída HTTPS para APIs públicas de registros. Servidor REST local opcional. |
|
|
301
|
+
| **Telemetry** | Nenhum dado coletado ou enviado. |
|
|
302
|
+
|
|
303
|
+
Consulte [SECURITY.md](SECURITY.md) para relatar vulnerabilidades.
|
|
304
|
+
|
|
305
|
+
## Tabela de Pontuação
|
|
306
|
+
|
|
307
|
+
| Categoria | Pontuação |
|
|
308
|
+
|----------|-------|
|
|
309
|
+
| A. Segurança | 10 |
|
|
310
|
+
| B. Tratamento de Erros | 10 |
|
|
311
|
+
| C. Documentação para Operadores | 10 |
|
|
312
|
+
| D. Higiene de Distribuição | 10 |
|
|
313
|
+
| E. Identidade (suave) | 10 |
|
|
314
|
+
| **Overall** | **50/50** |
|
|
315
|
+
|
|
316
|
+
> Auditoria completa: [SHIP_GATE.md](SHIP_GATE.md) · [SCORECARD.md](SCORECARD.md)
|
|
317
|
+
|
|
318
|
+
## Licença
|
|
319
|
+
|
|
320
|
+
MIT
|
|
321
|
+
|
|
319
322
|
---
|
|
320
|
-
|
|
321
|
-
Criado por <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
|
|
323
|
+
|
|
324
|
+
Criado por <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
|