Grades are a hygiene check, not a security guarantee.

MCP, MCP server

Gemina

Extract, search and tag any document: invoices, receipts, contracts, templates.

Compatibility: Not stated.

Grade C

One Medium finding. Read the findings before installing.

Graded by PlugVetRubric v2

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

Rescanned at commit f47ecef0d333, unchanged since the check below.

SECRETS_PATH_CREDENTIAL

Why this grade

  • SECRETS_PATH_CREDENTIAL Medium

    Mentions a credential store path (~/.ssh, id_rsa, .npmrc, .aws/credentials, credentials.json, .netrc).

    examples/gmail-attachment-triage/triage.py, line 8 - credentials.json in this directory (Google OAuth client, type "Desktop app")

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

    Pass

    No shell or command execution found, and no extra permission was declared.

  • Install and update

    Note

    README documents an installer that pipes a download into a shell. The docs document an installer that pipes a download into a shell.

    INSTALL_DOCUMENTED_INSTALLER

    README.md, line 428

    xAI's coding agent. Install with `curl -fsSL https://x.ai/cli/install.sh | bash`. OAuth triggers a browser flow on firs

    llms-install.md, line 329

    xAI's coding agent. Install with `curl -fsSL https://x.ai/cli/install.sh | bash`. OAuth triggers a browser flow on firs

  • Network

    Concern

    can reach a host that is not written as a fixed address. can reach static.modelcontextprotocol.io. The description does not name that host.

    NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST

    examples/bulk-tag-folder/bulk_tag.py, line 37

    response = requests.post(

    examples/bulk-tag-folder/bulk_tag.py, line 50

    with requests.get(url, stream=True, timeout=120) as response:

    examples/gmail-attachment-triage/triage.py, line 141

    response = requests.post(

    Show more

    examples/langchain-loader/gemina_loader.py, line 54

    response = requests.post(

    examples/llamaindex-reader/gemina_reader.py, line 58

    response = requests.post(

    docs/publish-checklist.md, line 78

    schema = json.load(urllib.request.urlopen("https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json"))

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_ENV_READ SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV

    examples/bulk-tag-folder/bulk_tag.py, line 84

    api_key = os.environ.get("GEMINA_API_KEY")

    examples/gmail-attachment-triage/triage.py, line 8

    - credentials.json in this directory (Google OAuth client, type "Desktop app")

    examples/gmail-attachment-triage/triage.py, line 60

    flow = InstalledAppFlow.from_client_secrets_file("credentials.json", SCOPES)

    Show more

    examples/gmail-attachment-triage/triage.py, line 171

    api_key = os.environ.get("GEMINA_API_KEY")

    examples/gmail-attachment-triage/triage.py, line 175

    if not Path("credentials.json").exists():

    examples/gmail-attachment-triage/triage.py, line 176

    print("error: credentials.json not found (see README)", file=sys.stderr)

    examples/langchain-loader/gemina_loader.py, line 39

    self.api_key = api_key or os.environ.get("GEMINA_API_KEY")

    examples/llamaindex-reader/gemina_reader.py, line 35

    self.api_key = api_key or os.environ.get("GEMINA_API_KEY")

    .gitignore, line 31

    # Local config / secrets

    .gitignore, line 32

    .env

    .gitignore, line 33

    .env.local

    README.md, line 428

    xAI's coding agent. Install with `curl -fsSL https://x.ai/cli/install.sh | bash`. OAuth triggers a browser flow on first use; tokens cache in `~/.grok/mcp_credentials.json`. On gro

  • 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

    assets/logo/logo-header-tagline.svg, line 1

    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="774" height="576" viewBox="0 0 774 576">

    assets/logo/logo-header-white.svg, line 1

    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="774" height="504" viewBox="0 0 774 504">

    assets/logo/logo-header.svg, line 1

    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="774" height="504" viewBox="0 0 774 504">

    Show more

    assets/logo/logo.svg, line 1

    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="558" height="342" viewBox="0 0 558 342">

    assets/logo/logo-header-tagline.svg, line 2

    <image width="774" height="576" xlink:href="data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwYAAAJACAYAAAA3sHERAAAgAElEQVR4nNSW3Q7DIAiF4cL3f2DTnWWpZpSBP2tw7ksvagUFi0f5cRw0BXMCkOecrvCg

    assets/logo/logo-header-white.svg, line 2

    <image width="774" height="504" xlink:href="data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwYAAAH4CAYAAADwwfqUAAAgAElEQVR4nNSW3Q7DIAiF4cL3f2DTnWWpZpSBP2tw7ksvagUFi0f5cRw0BXMCkOecrvCg

    assets/logo/logo-header.svg, line 2

    <image id="Background" width="774" height="504" xlink:href="data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwYAAAH4CAYAAADwwfqUAAAgAElEQVR4nOzBAQEAMAzDoNy/6E7IgbdtAQAA/6oOAAD//+zQAQ0A

    assets/logo/logo-header.svg, line 3

    <image width="774" height="504" xlink:href="data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwYAAAH4CAYAAADwwfqUAAAgAElEQVR4nNSW3Q7DIAiF4cL3f2DTnWWpZpSBP2tw7ksvagUFi0f5cRw0BXMCkOecrvCg

    assets/logo/logo.svg, line 2

    <image y="2" width="558" height="340" xlink:href="data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAAi4AAAFUCAYAAAADG7flAAAgAElEQVR4nNyVUQ6AIAxD2w/uf2BCZlAxZtGBggR8fxBG2m0MhhDwd1jhTwbIzV

  • 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 f47ecef0d333. README documents an installer that pipes a download into a shell. The docs document an installer that pipes a download into a shell. can reach a host that is not written as a fixed address. can reach static.modelcontextprotocol.io. The description does not name that host. 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: f47ecef0d333049c4acb151eee42a89428cae98a

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