Atlas / MCP servers / resper1965 / n.360

n.360BLOCK

mcp/resper1965/n-360

n.iso — plataforma de adequação ISO 27001/27701 da ness.

Verdict
BLOCK
Grade
F
Trust score
29 /100
Exposed tools
40 29r · 11w · 0d
Transport
stdio
License
NOASSERTION
Stars
0
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://github.com/resper1965/n.360/actions/workflows/ci.yml) [](https://github.com/resper1965/n.360/actions/workflows/deploy.yml) [](https://github.com/resper1965/n.360/actions/workflows/codeql.yml)

O n.360 é a plataforma de governança, risco e conformidade da ness. Ela tem dois módulos que trabalham sobre um cadastro só (partes, itens, documentos, RoPA, DPIA, evidências):

Endereço: *** (`APP_URL` em `wrangler.jsonc`). Os domínios antigos `niso.ness.com.br` e `nprivacy.ness.com.br` respondem 308 para `/iso` e `/privacy`. Integrações já configuradas continuam respondendo no lugar, sem redirecionar: `/api/, /scim/`, `/mcp`, `/oauth/, /.well-known/`, `/health`, `/politicas, /auditor` e `/proposta (fica em src/config/url.ts). O callback de SSO e o recurso OAuth do MCP ficam presos em niso`.

Nomes

No texto e na marca, n.360, n.iso e n.privacy; n360 só no endereço. O repositório se chama resper1965/n.360 (renomeado em 2026-10-13; o endereço antigo resper1965/n.iso redireciona). niso sobrou como identificador técnico mantido de propósito, e nunca aparece como nome de produto: o Worker niso, o D1 niso-db, o pacote mcp-server-niso, o cabeçalho X-nISO-Signature e as variáveis NISO_*. Trocar esses nomes quebraria deploy, banco, integrações e assinaturas de webhook já emitidas.

Quem usa o quê

Papéis

Papéis de conta (PAPEIS_DE_CONTA em src/schemas/users.ts):

Read from source at commit f1a5fa5b4be4OBSERVED · 2026-10-14
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add niso --env BRAINSTORM_TOKEN=${BRAINSTORM_TOKEN} --env BRAINSTORM_TOKEN_FILE=${BRAINSTORM_TOKEN_FILE} --env CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN} --env NISO_API_KEY=${NISO_API_KEY} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "niso": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "BRAINSTORM_TOKEN": "${BRAINSTORM_TOKEN}",
        "BRAINSTORM_TOKEN_FILE": "${BRAINSTORM_TOKEN_FILE}",
        "CLOUDFLARE_API_TOKEN": "${CLOUDFLARE_API_TOKEN}",
        "NISO_API_KEY": "${NISO_API_KEY}"
      }
    }
  }
}
03

Exposed tools (40)

29 read · 11 write · 0 destructive.

ToolRiskDescription
BearerreadToken por tenant, emitido pela ness.
niso_audit_packreadDownload the audit readiness pack (consolidated JSON: project, phases, controls, evidence, audit trail)
niso_coherence_checkreadCross-reference check between the project
niso_contextoreadComece por aqui. Diz o cliente desta conexão, o projectId a usar, o que você pode e não pode fazer, e os roteiros de trabalho.
niso_create_assetwriteCreate a new asset entry in the project
niso_create_audit_findingwriteCreate a new audit finding. If non-conforming, it automatically creates a linked Corrective Action (CAPA). ${WRITE_GUARDRAIL}
niso_create_auditor_notewriteSubmit a question or clarification request for a control using an auditor token. ${WRITE_GUARDRAIL}
niso_create_evidencewriteRegister a TEXTUAL evidence document (policy, procedure, meeting minutes, log excerpt, configuration dump) in a project
niso_create_riskwriteCreate a new risk entry in a project
niso_evaluate_evidencereadAI pre-qualification of an evidence record (CONFORME/PARCIAL/NAO CONFORME draft — not an audit verdict). Requires the extracted text of the evidence document. ${WRITE_GUARDRAIL}
niso_executarwriteGrava no projeto desta conexão, como o consultor faria na interface: POST, PUT, PATCH ou DELETE em /api/v1/... Apagar e gerar em lote exigem confirmado_pelo_usuario: true — antes, mostre ao usuário o que será feito (nome e id) e espere o
niso_gap_analysiswriteRun the project
niso_generate_policies_bulkwriteGenerate multiple policy documents sequentially via AI. NEVER run autonomously — bulk generation ALWAYS requires explicit human approval in the active contract. ${WRITE_GUARDRAIL}
niso_generate_policyreadGenerate a policy document for a control via the n.iso PolicyAgent (AI draft). The server saves it as a DRAFT of the control
niso_get_projectreadGet detailed information about a specific project, including phases and progress
niso_import_trainingwriteImport employee training records in bulk from an external source. ${WRITE_GUARDRAIL}
niso_lerreadLê qualquer área do projeto desta conexão, como o consultor vê na interface. caminho começa com /api/v1/ — o mapa das áreas está em niso_contexto. Arquivo binário (PDF, planilha, imagem) volta só como metadados.
niso_list_controlsreadList all compliance controls for a specific project
niso_list_evidencereadList all evidence records for a project
niso_list_projectsreadList all active GRC projects in the n.iso portfolio
niso_list_risksreadList all risks in a project
niso_migrate_27701readMigrate the project
niso_privacy_atualizar_tratamentoreadn.privacy: altera campos de um tratamento do RoPA (só os enviados; o resto fica). Não muda status nem aprovação. Tratamento aprovado: a edição substitui o pedido de aprovação aberto; avise o usuário antes. ${RASCUNHO_PRIVACY}
niso_privacy_criar_dpia_do_tratamentoreadn.privacy: cria a DPIA (RIPD) do tratamento em Draft, pré-preenchida com o registro e as ligações. Se já existe, devolve o id dela. A análise, o parecer do encarregado e a aprovação são de pessoas, pela interface. ${RASCUNHO_PRIVACY}
niso_privacy_encarregadoreadn.privacy: o painel do encarregado: pedidos do titular, incidentes, tratamentos sem base, DPIA ou LIA, terceiros, documentos, evidências, cobertura LGPD, prazos legais não cadastrados e o
niso_privacy_incidentesreadn.privacy: incidentes (protocolo, risco ao titular, status) com os prazos de comunicação em situacao_anpd e situacao_titular. Só leitura.
niso_privacy_ligar_documento_requisitoreadn.privacy: liga um documento do projeto a requisitos do catálogo (LGPD, ANPD), para contar na cobertura. SOMA aos já ligados (desligar é pela interface). Só documento VIGENTE cobre o requisito; rascunho não conta. ${RASCUNHO_PRIVACY}
niso_privacy_ligar_tratamentoreadn.privacy: liga ao tratamento itens (sistemas, bases, processos de /assets; bloco E), departamentos (/departamentos; bloco A) e a base legal do catálogo (bloco D). Itens e departamentos SOMAM aos já ligados (desligar é pela interface). ${RASCUNHO_PRIVACY}
niso_privacy_rascunhar_liareadn.privacy: grava o RASCUNHO da LIA (teste de legítimo interesse) do tratamento: só os campos enviados mudam. Nunca conclui nem reabre: concluir é de uma pessoa, pela interface. LIA concluída é recusada. ${RASCUNHO_PRIVACY}
niso_privacy_registrar_incidentereadn.privacy: registra um incidente e, se informado, a avaliação de risco ao titular. O sistema gera o protocolo e os prazos de comunicação. O agente não encerra o incidente, não registra a comunicação enviada e não edita prazo: são atos de pessoas, pela interface. ${RASCUNHO_PRIVACY}
niso_privacy_registrar_pedido_titularreadn.privacy: registra um pedido do titular recebido. O sistema gera o protocolo e congela o prazo a partir de parametros_legais; o agente não define nem edita prazo, não responde e não encerra (a resposta é registrada por uma pessoa). ${RASCUNHO_PRIVACY}
niso_privacy_requisitos_lacunasreadn.privacy: cobertura dos requisitos da LGPD e da ANPD no projeto (resumo e cada requisito: coberto, parcial ou lacuna, com o documento, controle ou evidência que cobre). Sem fonte traz as duas. Só leitura.
niso_privacy_ropareadn.privacy: lista os tratamentos do RoPA com status, base legal, riscos (sensível, menores, transferência), nao_informado (campo que a importação não trouxe) e as ligações resumidas de cada um (itens, departamentos, partes, transferências, DPIAs, LIA, terceiros com avaliação vencida). Só leitura.
niso_privacy_ropa_detalhereadn.privacy: um tratamento do RoPA por inteiro: o registro, as ligações (base legal do catálogo, itens, departamentos, partes, transferências, DPIAs, dpia_pendente, aprovação) e a LIA. Só leitura.
niso_privacy_titular_pedidosreadn.privacy: pedidos do titular (protocolo, tipo, status, prazo_em e situacao_prazo). O prazo sai de parametros_legais; sem o parâmetro cadastrado o prazo é
niso_respond_auditor_notereadProvide a response to an auditor note or request. ${WRITE_GUARDRAIL}
niso_skillreadTraz o método de trabalho de uma skill do consultor (ex.: pré-avaliação de prontidão para certificação). Sem argumentos lista as skills; com nome traz o SKILL.md; com nome e arquivo traz uma referência ou script. Só leitura.
niso_traceabilityreadGet the project
niso_update_policywritePropose the text of a control
niso_update_riskwriteUpdate an existing risk (partial: only the fields you pass change; the rest is kept). Use niso_list_risks to get the riskId. Risk acceptance (accepted_by/accepted_at) is a management decision and cannot be set here. ${WRITE_GUARDRAIL}
04

Trust audit

BLOCKgrade F · trust 29/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)WARN
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (3 observation(s))
Network
declared (10 observation(s))
Shell
declared (3 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
worker-configuration.d.ts:3044
exec(input?: (string | URLPatternInit), baseURL?: string): URLPatternResult | null;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
worker-configuration.d.ts:3335
exec(cmd: string[], options?: ContainerExecOptions): Promise<ExecProcess>;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHNetwork egress · net.metadata_ip · CWE-200, CWE-319
src/routes/integrations.ts:53
if (a === 169 && b === 254) return true;          // link-local (inclui metadata 169.254.169.254)
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/skills/brainstorming
.claude/skills/brainstorming
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/skills/code-review
.claude/skills/code-review
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/skills/dispatching-parallel-agents
.claude/skills/dispatching-parallel-agents
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/skills/executing-plans
.claude/skills/executing-plans
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/skills/find-skills
.claude/skills/find-skills
Why it matters. link not followed
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
frontend/playwright.config.js:26
baseURL: 'http://127.0.0.1:8787',
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
src/services/tratamentos-importar.ts:15
const t = texto.replace(/^/, '');
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
frontend/test/proposta-publica.test.js:11
const TOKEN = 'tok_SEGREDO_abcdefghijklmnopqrstuvwxyz0123456789';
MEDIUMPrompt injection · prompt.hidden_style · CWE-94, CWE-1427
docs/arquivo/planos/2026-10-07-avisos-de-prazo.md:1099
<p><a href="${e(base)}" style="background-color: #00ade8; color: #ffffff; padding: 10px 20px; text-decoration: none; border-radius: 5px; display: inline-block;">Abrir o n.iso</a></p>
MEDIUMPrompt injection · prompt.hidden_style · CWE-94, CWE-1427
docs/arquivo/planos/2026-10-07-p1-contrato-tela-api.md:985
Dentro do `c.innerHTML`, troque o bloco `${history.length ? history.map(...).join('') : '<div ...>Faca uma pergunta...</div>'}` só pelo `<div style="text-align:center;color:var(--muted);padding:3rem 0
MEDIUMPrompt injection · prompt.hidden_style · CWE-94, CWE-1427
docs/arquivo/planos/2026-10-07-p4-evidencia-controle.md:1062
badgeHtml = `<span style="font-size:0.72rem; padding:2px 6px; border-radius:4px; border:1px solid ${selo.cor}; color:${selo.cor}; margin-left:8px; font-weight:600; text-transform:uppercase; letter-spa
MEDIUMPrompt injection · prompt.hidden_style · CWE-94, CWE-1427
docs/arquivo/planos/2026-10-07-p4-evidencia-controle.md:1281
`<code style="font-size:0.75rem;color:var(--text-dim)">${hashShort}</code>`,
MEDIUMPrompt injection · prompt.hidden_style · CWE-94, CWE-1427
docs/arquivo/planos/2026-10-08-papeis-conectores.md:227
${podeRegistrarAchado ? `<button data-action="openAddFindingModal" data-args="${escapeHTML(JSON.stringify([ctrl.id, ctrl.standard]))}" class="btn" style="padding:4px 10px;font-size:0.75rem;border-colo
LOWInventory / provenance · inv.hidden_file · CWE-1104
frontend/.oxlintrc.json
.oxlintrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.suspicious_name · CWE-1104
test/ajustes-c2-c7.test.ts
ajustes-c2-c7.test.ts
Why it matters. member named after an attack tool
Fix. remove or justify
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
docs/design/handoff-ness-v1/support.js:844
const fn = new Function(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
docs/design/handoff-ness-v1/support.js:1218
new Function("React", "module", "exports", "require", code)(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
test/schema-contract.test.ts:46
await exec(schemaSql);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
.agents/skills/brainstorming/scripts/server.cjs:13
return crypto.createHash('sha1').update(clientKey + WS_MAGIC).digest('base64');
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.agents/skills/brainstorming/scripts/server.cjs:209
const root = path.join(__dirname, '../../..');
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
frontend/scripts/copy-templates.mjs:10
const src = resolve(here, '../../src/templates/policies');
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/mcp/servidor.ts:3
import { TOOLS, ferramentaPermitida, executarFerramenta, type Transporte, type Ferramenta } from '../../mcp-server-niso/src/ferramentas';

Gates applied: no_behavioural_pass.

Audited 2026-10-14 · audit v0.4.1 · source sha f1a5fa5b4be4full audit observations/trust-audit/mcp-server/resper1965__n.360.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-14f1a5fa5b4be4BLOCKF29first audit
06

Questions

What is the n.360 MCP server?

n.iso — plataforma de adequação ISO 27001/27701 da ness.

What tools does n.360 expose?

40 in total: 29 read-only, 11 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is n.360 safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (29/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does n.360 need?

It reads BRAINSTORM_TOKEN, BRAINSTORM_TOKEN_FILE, CLOUDFLARE_API_TOKEN and NISO_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does n.360 run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as niso at 11.0.0.

How current is this page?

The grade is for one exact copy of the source (f1a5fa5b4be4), read on 2026-10-14. The repository is watched and re-audited when it changes.

Advertisement