Grades are a hygiene check, not a security guarantee.

MCP, MCP server

Embedded Api Mcp Server

Embedded Api Mcp Server, an MCP server listed in the PlugVet directory.

Compatibility: Not stated.

Grade B

Minor issues only, no Medium or High. Worth a quick look at the findings below before installing.

Graded by PlugVetRubric v2

Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.

PERMISSION_DELETE_FILES NETWORK_NO_FIXED_HOST SECRETS_PATH_DOTENV OBFUSCATION_ENCODED_BLOB SECRETS_ENV_READ

Why this grade

  • PERMISSION_DELETE_FILES Low

    Contains a call that can delete files.

    scripts/build-prod.js, line 18 fs.rmSync(distDir, { recursive: true, force: true });

  • NETWORK_NO_FIXED_HOST Low

    Makes a network call whose host is not written as a fixed address.

    src/digital-samba-api.ts, line 299 response = await fetch(url, {

  • SECRETS_PATH_DOTENV Low

    Mentions a .env file.

    scripts/smoke-test.mjs, line 18 * which is read from the environment or .env.local - never passed on the

  • OBFUSCATION_ENCODED_BLOB Low

    Contains a long base64 shaped string in a file that should be readable.

    openapi-stored.yaml, line 1 openapi: 3.0.3

  • SECRETS_ENV_READ Note

    Reads an environment variable whose name contains KEY, SECRET, TOKEN, PASSWORD or CREDENTIAL.

    bin/cli.js, line 137 process.env.DIGITAL_SAMBA_DEVELOPER_KEY = args["developer-key"];

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

    scripts/build-prod.js, line 18

    fs.rmSync(distDir, { recursive: true, force: true });

    scripts/build-size-check.js, line 80

    fs.unlinkSync(tarballName);

  • Install and update

    Pass

    No install-time script found, and dependencies are pinned or absent.

  • Network

    Concern

    can reach a host that is not written as a fixed address.

    NETWORK_NO_FIXED_HOST

    src/digital-samba-api.ts, line 299

    response = await fetch(url, {

    src/digital-samba-api.ts, line 1882

    const response = await fetch(

    src/digital-samba-api.ts, line 1968

    const response = await fetch(`${this.apiBaseUrl}${endpoint}`, {

    Show more

    src/digital-samba-api.ts, line 1995

    const response = await fetch(`${this.apiBaseUrl}${endpoint}`, {

    src/digital-samba-api.ts, line 2133

    const response = await fetch(

    src/digital-samba-api.ts, line 2175

    const response = await fetch(

    src/digital-samba-api.ts, line 2217

    const response = await fetch(

    src/digital-samba-api.ts, line 2258

    const response = await fetch(

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_ENV_READ SECRETS_PATH_DOTENV

    bin/cli.js, line 137

    process.env.DIGITAL_SAMBA_DEVELOPER_KEY = args["developer-key"];

    bin/cli.js, line 140

    process.env.DIGITAL_SAMBA_DEVELOPER_KEY = positionals[0];

    scripts/smoke-test.mjs, line 18

    * which is read from the environment or .env.local - never passed on the

    Show more

    bin/cli.js, line 141

    } else if (!process.env.DIGITAL_SAMBA_DEVELOPER_KEY) {

    scripts/smoke-test.mjs, line 35

    // .env.local first (local dev secrets), then .env. Neither overrides a value

    scripts/smoke-test.mjs, line 37

    loadEnv({ path: resolve(ROOT, ".env.local") });

    scripts/smoke-test.mjs, line 38

    loadEnv({ path: resolve(ROOT, ".env") });

    scripts/smoke-test.mjs, line 40

    const KEY = process.env.DIGITAL_SAMBA_DEVELOPER_KEY;

    scripts/smoke-test.mjs, line 57

    `Add it to .env.local (gitignored) or export it before running.`,

    src/auth.ts, line 26

    return process.env.DIGITAL_SAMBA_DEVELOPER_KEY || null;

    src/index.ts, line 111

    process.env.DIGITAL_SAMBA_DEVELOPER_KEY = config.apiKey;

    src/oauth.ts, line 294

    const clientSecret = process.env.OAUTH_CLIENT_SECRET;

    src/oauth.ts, line 310

    process.env.OAUTH_TOKEN_URL || "https://api.digitalsamba.com/oauth/token",

    .dockerignore, line 9

    .gitignore

    .dockerignore, line 10

    .env

    .github/workflows/deploy-prod.yml, line 111

    # The host's docker-compose.yml and .env are host-managed; they are no

  • Agent instructions

    Pass

    No instruction to ignore earlier instructions or to hide a step.

  • Obfuscation

    Concern

    contains an encoded blob in a file that should be readable.

    OBFUSCATION_ENCODED_BLOB

    openapi-stored.yaml, line 1

    openapi: 3.0.3

    package-lock.json, line 1

    {

    openapi-stored.yaml, line 1681

    token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1ZCI6IkVYVDEyMzQiLCJ1IjoiTW9oYW1tZWQiLCJyZCI6IjIwYjI3OGJkLTYzNTEtM2IyYy05MWQwLWVhOGRhYzJhZTRiZiIsInRkIjoiZGJiNzgwMmMtYWZmMi00Y2M0LWFm

    Show more

    openapi-stored.yaml, line 1682

    link: 'https://username.digitalsamba.com/myRoom?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1ZCI6IkVYVDEyMzQiLCJ1IjoiTW9oYW1tZWQiLCJyZCI6IjIwYjI3OGJkLTYzNTEtM2IyYy05MWQwLWVhOGRhY

    openapi-stored.yaml, line 1686

    example: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1ZCI6IkVYVDEyMzQiLCJ1IjoiTW9oYW1tZWQiLCJyZCI6IjIwYjI3OGJkLTYzNTEtM2IyYy05MWQwLWVhOGRhYzJhZTRiZiIsInRkIjoiZGJiNzgwMmMtYWZmMi00Y2M0LW

    openapi-stored.yaml, line 1689

    example: 'https://username.digitalsamba.com/myRoom?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1ZCI6IkVYVDEyMzQiLCJ1IjoiTW9oYW1tZWQiLCJyZCI6IjIwYjI3OGJkLTYzNTEtM2IyYy05MWQwLWVhOG

    openapi-stored.yaml, line 10362

    token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiaXVTVDV0Tk9mdW0zYmw4TzRNckdBc2d4Y2QzRW81anZUT0l5cnFXWS5wbmciLCJhY3Rpb24iOiJ1cGxvYWQiLCJ0eXBlIjoibGlicmFyeSIsImxpYnJhcnlfaWQi

    openapi-stored.yaml, line 10376

    example: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiaXVTVDV0Tk9mdW0zYmw4TzRNckdBc2d4Y2QzRW81anZUT0l5cnFXWS5wbmciLCJhY3Rpb24iOiJ1cGxvYWQiLCJ0eXBlIjoibGlicmFyeSIsImxpYnJhcnlfaW

  • 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 80cc2dc177ca. can delete files. can reach a host that is not written as a fixed address. reads a credential or environment file. contains an encoded blob in a file that should be readable.

Date and source

Date checked:

View source

github.com

Commit graded: 80cc2dc177ca1bf7832c7a43499b2539466fafe9

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.

Read how this letter is chosen