MCP, MCP server
Local-first personal finance MCP
Local-first personal finance MCP.
Compatibility: Not stated.
Grade C
One Medium finding. Read the findings before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
PERMISSION_SHELL_UNDECLARED
Why this grade
- PERMISSION_SHELL_UNDECLARED Medium
Runs shell commands that the manifest or description does not mention.
finance_mcp/keychain.py, line 33
proc = subprocess.run(
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
requests shell access. No manifest field names shell or command execution.
PERMISSION_SHELL_UNDECLARED
finance_mcp/keychain.py, line 33
proc = subprocess.run(
Install and update
Concern
dependencies are not pinned.
INSTALL_UNPINNED
requirements.txt, line 1
fastmcp>=4.1.0
Network
Concern
can reach a host that is not written as a fixed address.
NETWORK_NO_FIXED_HOST
hooks/install-ping.py, line 40
urllib.request.urlopen(req, timeout=3).read()
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
finance_mcp/__init__.py, line 16
"""Minimal .env loader. Runs at package import so all entry points
finance_mcp/__init__.py, line 21
env_file = here / ".env"
finance_mcp/plaid_client.py, line 43
secret = os.environ.get("PLAID_SECRET", "").strip()
Show more
finance_mcp/plaid_client.py, line 46
"PLAID_CLIENT_ID and PLAID_SECRET must be set. Copy .env.example to .env "
finance_mcp/server.py, line 3
Registers all tools. Loads env from .env if present (without overriding env
finance_mcp/server.py, line 12
Configuration: see .env.example. All env vars are documented there.
finance_mcp/server.py, line 21
from . import __version__ # noqa: F401 - also fires .env loader
finance_mcp/tools/diag.py, line 38
"PLAID_CLIENT_ID and PLAID_SECRET missing. Copy .env.example to .env "
.env.example, line 1
# Copy to .env (chmod 600). Do NOT commit .env.
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Pass
No encoded or minified payload found.
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 d37f127a69ff. requests shell access. No manifest field names shell or command execution. dependencies are not pinned. can reach a host that is not written as a fixed address. reads a credential or environment file.
Date and source
Date checked:
github.com
Commit graded: d37f127a69fff12b0b8355d9bd5ecc5d3ee97ef8
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.