MCP, MCP server
Enterprise Ai Accelerator
Evaluation prototype — pre-production, solo-maintained.
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.
SECRETS_PATH_CREDENTIAL
Why this grade
- SECRETS_PATH_CREDENTIAL Medium
Mentions a credential store path (~/.ssh, id_rsa, .npmrc, .aws/credentials, credentials.json, .netrc).
auth/aws_auth.py, line 7
3. Named profile (~/.aws/credentials)
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
Note
requests shell access. The manifest names this permission.
PERMISSION_SHELL_DECLARED
migration_scout/integrations/cloudquery_backend.py, line 389
result = subprocess.run(
migration_scout/integrations/cloudquery_backend.py, line 414
proc = subprocess.run(
Dockerfile.demo, line 34
[subprocess.run([sys.executable, '-m', mod], check=False) for name, mod in modules] \
Install and update
Concern
dependencies are not pinned.
INSTALL_UNPINNED
requirements.txt, line 6
anthropic>=0.69.0,<1.0
Network
Concern
can reach a host that is not written as a fixed address. can reach aws-replication-installer-init.us-east-1.s3.amazonaws.com. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
ai_audit_trail/chain.py, line 129
with urllib.request.urlopen(req, timeout=self.timeout) as resp:
cloud_iq/k8s_analyzer.py, line 234
capacity_str = pvc.spec.resources.requests.get("storage", "0Gi")
cloud_iq/adapters/kubernetes.py, line 208
storage_str = requests.get("storage", "0Gi")
Show more
cloud_iq/adapters/kubernetes.py, line 290
cpu_str = requests.get("cpu", "0")
cloud_iq/adapters/kubernetes.py, line 291
mem_str = requests.get("memory", "0")
finops_intelligence/api.py, line 97
state.spend_data = tracker.fetch(days=730) # 2 years
finops_intelligence/cost_tracker.py, line 103
data = tracker.fetch(days=90)
finops_intelligence/cost_tracker.py, line 107
data = tracker.fetch(days=90)
ai_audit_trail/Dockerfile, line 56
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')" \
ai_audit_trail/docker-compose.yml, line 48
"import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
cloud_iq/Dockerfile, line 48
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8080/health')" || exit 1
cloud_iq/docker-compose.yml, line 42
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8080/health')"]
docker-compose.yml, line 47
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
docker-compose.yml, line 71
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8080/health')"]
docker-compose.yml, line 123
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8080/health')"]
migration_scout/Dockerfile, line 62
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8080/health')" || exit 1
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV
cloud_config.py, line 184
aws_access_key_id=os.environ.get("AWS_ACCESS_KEY_ID", ""),
cloud_config.py, line 185
aws_secret_access_key=os.environ.get("AWS_SECRET_ACCESS_KEY", ""),
auth/aws_auth.py, line 7
3. Named profile (~/.aws/credentials)
Show more
cloud_config.py, line 187
aws_session_token=os.environ.get("AWS_SESSION_TOKEN", ""),
cloud_config.py, line 193
azure_client_secret=os.environ.get("AZURE_CLIENT_SECRET", ""),
cloud_config.py, line 201
gcp_credentials_file=os.environ.get("GOOGLE_APPLICATION_CREDENTIALS", ""),
cloud_config.py, line 206
oci_key_file=os.environ.get("OCI_KEY_FILE", ""),
cloud_config.py, line 210
anthropic_api_key=os.environ.get("ANTHROPIC_API_KEY", ""),
mcp_transports.py, line 65
_AUTH_TOKEN: str | None = os.environ.get("EAA_MCP_AUTH_TOKEN") or None
app_portfolio/analyzer.py, line 63
".venv", "venv", ".env", ".tox", ".mypy_cache",
auth/gcp_auth.py, line 42
os.path.expanduser("~/.config/gcloud/application_default_credentials.json")
cloud_iq/adapters/aws.py, line 11
4. ~/.aws/credentials
migration_scout/cross_cloud.py, line 411
f"4. Auth config: Set TARGET_CLOUD={self.target.value} and provider credentials in .env",
.dockerignore, line 33
.env
.dockerignore, line 35
!.env.example
.env.example, line 30
AWS_PROFILE= # optional: named profile from ~/.aws/credentials
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 4c048b6134a2. requests shell access. The manifest names this permission. dependencies are not pinned. can reach a host that is not written as a fixed address. can reach aws-replication-installer-init.us-east-1.s3.amazonaws.com. The description does not name that host. reads a credential or environment file.
Date and source
Date checked:
github.com
Commit graded: 4c048b6134a2d2e20c4c413db443e596d8f479dc
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.