MCP, MCP server
Mcp Sii
Servidor MCP open source para el Sistema de Facturación Gratuito del SII (mipyme.sii.cl).
Compatibility: Not stated.
Grade C
One Medium finding. Read the report before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
NETWORK_HOST_FROM_INPUT
Why this grade
- NETWORK_HOST_FROM_INPUT Medium
A file takes a URL or endpoint as input and has no fixed host list.
src/browser.ts, line 253
// `curl -b`. Devuelve cuántas escribió.
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Concern
can delete files.
PERMISSION_DELETE_FILES
src/browser.ts, line 312
fs.rmSync(ruta, { force: true });
src/browser.ts, line 454
fs.rmSync(path.join(base, entrada), { recursive: true, force: true });
src/credencialesRuntime.ts, line 27
fs.rmSync(certPath, { force: true });
Show more
src/credencialesRuntime.ts, line 41
fs.unlinkSync(rutaTemporalSii('pfxruntime', rut));
src/session.ts, line 320
fs.rmSync(this.cookieJar, { force: true });
src/session.ts, line 483
try { fs.unlinkSync(cookiesFile); } catch { /* no existía */ }
src/session.ts, line 500
try { fs.unlinkSync(certPem); } catch { /* no se alcanzó a crear */ }
src/session.ts, line 501
try { fs.unlinkSync(keyPem); } catch { /* no se alcanzó a crear */ }
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Serious
accepts a host from input, with no fixed list in this file.
NETWORK_HOST_FROM_INPUT
src/browser.ts, line 253
// `curl -b`. Devuelve cuántas escribió.
src/browser.ts, line 265
// - NO se usa el prefijo `#HttpOnly_` que escribe `curl -c`. Nuestro propio
src/browser.ts, line 273
// más de 7 campos y curl la descarta EN SILENCIO, así que el fallo
Show more
src/browser.ts, line 281
// inservible: curl saldría sin autenticación y el error se reportaría como
src/browser.ts, line 303
// el jar que dejó `curl -c` en una corrida con certificado - se reescribía
src/http.ts, line 54
// Marca para separar el cuerpo del `content_type` que curl agrega con `-w`.
src/http.ts, line 321
// Ejecuta curl y separa cuerpo de Content-Type SIN decodificar el cuerpo. Es
src/http.ts, line 330
// curl agrega con `-w`. Decodificar antes sería adivinar.
src/http.ts, line 353
// Sin marca no hubo `-w` (o curl murió antes de escribirla): no hay
src/http.ts, line 387
// Sólo el código: el error original trae el comando curl completo.
src/http.ts, line 391
// Cualquier otro fallo del proceso (curl con exit != 0, ETIMEDOUT, curl
src/http.ts, line 401
// spawn (ENOENT, ETIMEDOUT, ENOBUFS). El caso más común - curl corriendo y
src/http.ts, line 408
? `curl salió ${(e as { status?: number }).status}`
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
jest.e2e.config.js, line 16
// Carga SII_RUT/SII_CLAVE del .env, igual que los scripts del proyecto.
src/env.ts, line 60
if (hasCert && !process.env.SII_CERT_PASSWORD) {
src/env.ts, line 68
const certPassword = process.env.SII_CERT_PASSWORD;
Show more
src/perfilesVerificacion.ts, line 65
`Falta ${faltan} en el .env. Este perfil es el de ${DESCRIPCIONES[nombre]}, `
src/perfilesVerificacion.ts, line 67
+ 'equivocado da un resultado que no dice nada. Ver .env.example.');
src/perfilesVerificacion.ts, line 70
// `~` no lo expande nadie cuando el valor viene de un archivo .env: sin esto,
src/perfilesVerificacion.ts, line 78
* El certificado se guarda en el `.env` como una RUTA a un archivo, no como
src/perfilesVerificacion.ts, line 85
const password = process.env.SII_CERT_PASSWORD ?? '';
src/perfilesVerificacion.ts, line 98
+ 'archivo .pfx o .p12 en disco; el .env guarda su ruta, no su contenido.');
src/perfilesVerificacion.ts, line 164
&& (process.env.SII_CERT_PASSWORD ?? '') !== ''
src/validateCert.ts, line 1
// El README indica que las credenciales se leen del .env, y sin esto el script
src/validateCert.ts, line 41
const certPassword = process.env.SII_CERT_PASSWORD;
src/scripts/certificarBhe.ts, line 37
throw new Error('Faltan SII_RUT y/o SII_CLAVE en el entorno (van en el .env del proyecto).');
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Note
a file was over the read cap and was not fully read. the file cap was reached before every file was read.
OBFUSCATION_FILE_OVER_READ_CAP OBFUSCATION_FILE_CAP_REACHED
package-lock.json, line 1
{
tests/tools/dte.test.ts, line 1
import { registerDteTools } from '../../src/tools/dte';
Licence
Pass
A licence file is present (LICENSE).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit 6cdf0d6417cb. can delete files. accepts a host from input, with no fixed list in this file. reads a credential or environment file. a file was over the read cap and was not fully read. the file cap was reached before every file was read.
Date and source
Date checked:
github.com
Commit graded: 6cdf0d6417cb6f81628fbb5381490a21fc195a7b
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.