funifier-mcp 0.3.17 → 0.3.18
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/.cursor/rules/funifier.mdc +1 -0
- package/.github/copilot-instructions.md +1 -0
- package/AGENTS.md +1 -0
- package/datasource-funifier-docs/.coverage.json +12 -5
- package/datasource-funifier-docs/.search-index.json +10705 -10118
- package/datasource-funifier-docs/.skills-map.json +4 -0
- package/datasource-funifier-docs/.validation.json +72 -36
- package/datasource-funifier-docs/knowledge/guides/permission-audit.md +229 -0
- package/datasource-funifier-docs/knowledge/index.md +1 -0
- package/dist/mcp/bundle.js +108 -108
- package/dist/mcp/tools/_audit.d.ts +103 -0
- package/dist/mcp/tools/_audit.d.ts.map +1 -0
- package/dist/mcp/tools/_audit.js +241 -0
- package/dist/mcp/tools/_audit.js.map +1 -0
- package/dist/mcp/tools/_audit.test.d.ts +2 -0
- package/dist/mcp/tools/_audit.test.d.ts.map +1 -0
- package/dist/mcp/tools/_audit.test.js +412 -0
- package/dist/mcp/tools/_audit.test.js.map +1 -0
- package/dist/mcp/tools/_backup.d.ts +37 -3
- package/dist/mcp/tools/_backup.d.ts.map +1 -1
- package/dist/mcp/tools/_backup.js +137 -8
- package/dist/mcp/tools/_backup.js.map +1 -1
- package/dist/mcp/tools/_backup.test.js +195 -0
- package/dist/mcp/tools/_backup.test.js.map +1 -1
- package/dist/mcp/tools/_scope-engine.d.ts +40 -0
- package/dist/mcp/tools/_scope-engine.d.ts.map +1 -0
- package/dist/mcp/tools/_scope-engine.js +197 -0
- package/dist/mcp/tools/_scope-engine.js.map +1 -0
- package/dist/mcp/tools/_scope-engine.test.d.ts +2 -0
- package/dist/mcp/tools/_scope-engine.test.d.ts.map +1 -0
- package/dist/mcp/tools/_scope-engine.test.js +241 -0
- package/dist/mcp/tools/_scope-engine.test.js.map +1 -0
- package/dist/mcp/tools/permissions.d.ts.map +1 -1
- package/dist/mcp/tools/permissions.js +68 -11
- package/dist/mcp/tools/permissions.js.map +1 -1
- package/dist/mcp/tools/permissions.test.js +268 -4
- package/dist/mcp/tools/permissions.test.js.map +1 -1
- package/package.json +1 -1
- package/skills/funifier/SKILL.md +1 -0
- package/skills/funifier/references/audit-permissions.md +89 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# funifier-audit-permissions
|
|
2
|
+
|
|
3
|
+
Cross-check a project's Funifier API calls against the live security document — scan code for usage, build an evidence-backed manifest, run the deterministic audit engine, and report missing scopes, excess tokens, and static danger findings; use when debugging 401s, auditing minimum privilege, or verifying permissions before deploying; audit is read-only and never changes any configuration
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Before starting — find relevant docs
|
|
8
|
+
|
|
9
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
funifier_search_docs "audit permissions security scope 401 missing-scope excess-token danger manifest bearer basic app-secret role least-privilege"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
16
|
+
|
|
17
|
+
## Primary docs for this skill
|
|
18
|
+
|
|
19
|
+
If search returns insufficient results, read these directly:
|
|
20
|
+
|
|
21
|
+
- `funifier_read_doc path=guides/permission-audit`
|
|
22
|
+
- `funifier_read_doc path=modules/security`
|
|
23
|
+
|
|
24
|
+
## Steps
|
|
25
|
+
|
|
26
|
+
## Regras críticas
|
|
27
|
+
|
|
28
|
+
- **O audit é read-only.** Nenhuma configuração é alterada. O MCP apenas lê o documento de segurança e avalia o manifest.
|
|
29
|
+
- **Bearer tokens embtem o scope no login.** Corrigir o role não invalida tokens existentes — o jogador precisa fazer login novamente.
|
|
30
|
+
- **Excess findings podem ser necessários** a consumidores fora deste manifest. Verifique antes de remover qualquer token.
|
|
31
|
+
- **Low-confidence entries** (URLs dinâmicas ou wrappers): use `"confidence": "low"` e um path com o prefixo mais específico possível. Nunca omita chamadas suspeitas.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Steps
|
|
36
|
+
|
|
37
|
+
### 1. Descobrir chamadas Funifier no projeto
|
|
38
|
+
|
|
39
|
+
Procure no código todas as chamadas à API Funifier (endpoints, métodos HTTP e mecanismo de auth):
|
|
40
|
+
|
|
41
|
+
- **Com GitNexus indexado:** `gitnexus_query("funifier API calls")` para localizar call sites
|
|
42
|
+
- **Fallback (busca em código):** grep por `/v3/`, `funifier`, `apiKey`, `app_secret`, `Authorization`
|
|
43
|
+
- Para cada chamada, registre: `method`, `path`, `auth context` (ver tabela em `guides/permission-audit.md` §2), e `file:line` como `evidence`
|
|
44
|
+
- Classifique o auth:
|
|
45
|
+
- Sem secret / token público → `"public"`
|
|
46
|
+
- Player Bearer → `"player"`
|
|
47
|
+
- App secret em config/env → `"app:<name>"` (use o `name` da entrada em `apps[]`)
|
|
48
|
+
|
|
49
|
+
### 2. Montar o manifest
|
|
50
|
+
|
|
51
|
+
Construa o JSON seguindo o schema de `guides/permission-audit.md` §3. Exemplo mínimo:
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"version": 1,
|
|
56
|
+
"entries": [
|
|
57
|
+
{ "method": "GET", "path": "/v3/player/me", "auth": "player", "evidence": "src/api.ts:12" },
|
|
58
|
+
{ "method": "POST", "path": "/v3/action/log", "auth": "player", "evidence": "src/events.ts:58" },
|
|
59
|
+
{ "method": "POST", "path": "/v3/player", "auth": "app:backend", "evidence": "workers/sync.ts:34" },
|
|
60
|
+
{ "method": "GET", "path": "/v3/database/orders", "auth": "app:backend", "evidence": "workers/sync.ts:80" }
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Para chamadas com URL dinâmica: use o prefixo mais específico e defina `"confidence": "low"`.
|
|
66
|
+
|
|
67
|
+
### 3. Executar o audit
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
funifier_permissions action=audit data=<manifest JSON>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
O resultado inclui:
|
|
74
|
+
- `missing`: chamadas que seriam negadas — 401 em produção. Campo `requiredTokens` indica o token mínimo.
|
|
75
|
+
- `excess`: tokens concedidos que nenhuma entrada requer. Campo `narrowingSuggestion` para broad tokens.
|
|
76
|
+
- `danger`: riscos estáticos no documento de segurança (independentes do manifest).
|
|
77
|
+
- `manual-review`: tokens não verificáveis por análise de paths (`cross_domain`, `write_upload`, etc.).
|
|
78
|
+
- `missing-principal`: auth context referenciado no manifest não existe no documento de segurança.
|
|
79
|
+
|
|
80
|
+
### 4. Apresentar o relatório e encaminhar remediação
|
|
81
|
+
|
|
82
|
+
Apresente os findings agrupados por severidade (`missing` primeiro). Para cada `missing`:
|
|
83
|
+
- Indique o token exato necessário (`requiredTokens`), a chamada e a evidência.
|
|
84
|
+
- **Não aplique a correção automaticamente.** Apresente a ação sugerida ao utilizador e aguarde aprovação.
|
|
85
|
+
- Quando aprovado: `funifier_permissions action=save_security_role` ou `save_api_app` (cada mutação cria backup automático).
|
|
86
|
+
|
|
87
|
+
Para `excess`: adverta que o token pode ser necessário a consumidores fora deste manifest antes de sugerir remoção.
|
|
88
|
+
|
|
89
|
+
Para `danger`: explique o risco e sugira remoção ou restrição do scope afetado como ação separada.
|