MCP, MCP server
studylife
Personal study organization - calendar, focus timer, notes, and learning goals in one Blazor WebAssembly app.
Compatibility: Not stated.
Grade B
Minor issues only, no Medium or High. Worth a quick look at the findings below before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
NETWORK_NO_FIXED_HOST SECRETS_PATH_DOTENV OBFUSCATION_ENCODED_BLOB PERMISSION_SHELL_DECLARED
Why this grade
- NETWORK_NO_FIXED_HOST Low
Makes a network call whose host is not written as a fixed address.
docs/ARCHITECTURE.md, line 714
**Server-side dashboard summary (2026-09):** the dashboard no longer fetches raw data and computes in WASM. `GET api/dashboard/summary?now=<client local DateTime>` (`Controllers/Da - SECRETS_PATH_DOTENV Low
Mentions a .env file.
docs/SCALING.md, line 2058
| `ConfigMap`/`Secret` | ECS task-definition environment/Secrets Manager | a `.env` file / Docker Compose `environment:` | - OBFUSCATION_ENCODED_BLOB Low
Contains a long base64 shaped string in a file that should be readable.
docs/ARCHITECTURE.md, line 1
# StudyLife - Architecture & Developer Documentation - PERMISSION_SHELL_DECLARED Note
Runs shell commands, and the manifest or description says so.
tools/coverage-report.py, line 36
result = subprocess.run(cmd, cwd=REPO_ROOT)
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
tools/coverage-report.py, line 36
result = subprocess.run(cmd, cwd=REPO_ROOT)
tools/coverage-report.py, line 54
result = subprocess.run(cmd, cwd=REPO_ROOT)
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
docs/ARCHITECTURE.md, line 714
**Server-side dashboard summary (2026-09):** the dashboard no longer fetches raw data and computes in WASM. `GET api/dashboard/summary?now=<client local DateTime>` (`Controllers/Da
docs/ARCHITECTURE.md, line 735
lazily *generates* one on first fetch (a GET with a side effect), which the bundle must never do,
src/StudyLife.Client/Pages/Index.razor.cs, line 264
// fetch (GET api/sessions/history, ~500ms measured on a phone) has returned. The tasks
Show more
src/StudyLife.Client/Pages/Index.razor.cs, line 398
// change) AND at least HeavyFetchThrottle has passed since the last fetch (or this is the
src/StudyLife.Client/Pages/Setup.razor, line 648
/// of starting a second, overlapping fetch (several kinds commonly arrive within the same
src/StudyLife.Client/Pages/Setup.razor, line 789
// Session-authenticated fetch (replaces the former bootstrap-key endpoint,
src/StudyLife.Client/Pages/Wrapped.razor.cs, line 193
// ── Phase 2: achievement count - its own, much longer-range fetch (~10 years, same span
src/StudyLife.Client/Shared/LocalizedComponentBase.cs, line 32
/// text-table fetch (event subscriptions, kicking off other independent requests to keep - not
Secrets
Concern
reads a credential or environment file.
SECRETS_PATH_DOTENV
.gitattributes, line 9
*.yaml text eol=lf
.gitignore, line 9
## Environment
docs/SCALING.md, line 2058
| `ConfigMap`/`Secret` | ECS task-definition environment/Secrets Manager | a `.env` file / Docker Compose `environment:` |
Show more
.gitignore, line 11
!.env.example
.gitignore, line 41
# Local environment
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
docs/ARCHITECTURE.md, line 1
# StudyLife - Architecture & Developer Documentation
docs/api/openapi.json, line 1
{
src/StudyLife.Client/i18ntext/IndexText.mt.json, line 1
{
Show more
k8s/sealed-secrets/studylife-scale/r2-backup-credentials.yaml, line 9
ACCESS_KEY_ID: AgCnNat/LYXWj9L+8hn029mNDA4dONMUd8D1J1mZhWSEhNPd4sjHVw8/vhg+aJACK9uyXUDvGECmoH1xvWM7qA8fc+LXKFSIDrbDqd7SdAOJG3j2xs4fHZpR0lZLVb6dj8OW0XAZg+pfGyh3VTvBFpl1SoL4k0R7RZh+5
k8s/sealed-secrets/studylife-scale/r2-backup-credentials.yaml, line 10
ACCESS_SECRET_KEY: AgB1Qt3egSpNyRaERJixSuIpEnZO2I+P32y7jHd2j/sj+ECjw0iUSZ+wLgAsz71HpeAWjBBHyoXZOPVRO4CUk6IEPs38GS2hJarIFQg5ysKpFxl5DzFL2OT/bPOtggWLvsIy3jIBLYAws8giHoIi4Pw+pcZpKugaH
k8s/sealed-secrets/studylife-scale/redis-auth.yaml, line 9
password: AgC4hXVWHTnvCPR0whupxxUjsJwOmdB0V9upf9/6PDsbeLA1piPGsTkqVWOgUTqu6EfsnS5v+kB5Zneazf7EueZRfDTCo0sQEsRSm6h699W5d7KG5wQp8fcEJT1iVYDMjrKFRWB2RdpWPI7d48yxgF67IwsgMBHrIMAZ1nfLI+
k8s/sealed-secrets/studylife-scale/redis-auth.yaml, line 10
username: AgBMWt5FC+inFJU8sakeRSUgINA5dK50TQxnCeIKQoNH0PcwJLIZ/1RE6EN1LuG1Fl7+Wd1AXR0odax7AmlYWL/Xnx6QvIDETk0JqaMOEu/rWmSYCFdB+aVGaUSeGQrNLuEtDLTybKjhNxP/cMKvZkCyPldxV/6SfZwfQluV40
k8s/sealed-secrets/studylife-scale/studylife-apns.yaml, line 9
apns-key.p8: AgB4WRlod3droScCDuQx9r6KzmHX0r6S9VMJF2jIIdDvkMzlE+pJ+BjAkL+uqyDAtdF2l3tljb9HYMqqkedAS7eveMePGPKeft72ivx9o2FTw6Cf79+bFKUruBsR7eWP7VcdyNR0i1mrAsZXoJiic7xcsAAy+wcLAF+dNW5
k8s/sealed-secrets/studylife-scale/studylife-pg-app-secret.yaml, line 9
password: AgAPtLb/hk9fNeWtPVIyWjmmDPKNP9CkP6zLo+UsOIoWCFsM7IeVVJ06sjjhvk5YnJFT5VG+BMY0PpWi0ZmchoVrpQR+e9OXphlc1/9b6h4zbDmNyL6Or6B/4twrxv/UfQg0Bh7757Lgx6WjrehbR30cSrP7Ae2lAeF/hhLHoz
k8s/sealed-secrets/studylife-scale/studylife-pg-app-secret.yaml, line 10
username: AgAdwrZR7VaE/Hh6UGIocH5dEPtUI2ALDeBi0wbg2lszfwAVcJYPGOT7fRO5G/2MQu7cHjJecQTDe2dUZAKirkKUIqkUYlz60i6CAJUssBU+1sP4dDAuQU0HgfKpZ/uTmUbGhmRwE8TF/x4J78eLnu5ZOKxjnMRqGZzhxyk1w3
k8s/sealed-secrets/studylife-scale/studylife-secrets.yaml, line 9
Database__ConnectionString: AgCCRVLeAslOV2U6B6Z5hWaEiQGpbMlM8W8oKX7aDstzjygTPQmYwY7Cr8wg80QHNCKLCSgnba/lG6sqEoZi3IrtR3nVu2pKIo3s+7w+NITqo1hs5ZW1/b9xVrT2zmUix1xjNHZQg5uctGUCw4MYJ0ip
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 efea45425ddf. requests shell access. The manifest names this permission. 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:
github.com
Commit graded: efea45425ddfe9c028f74f04c25377b93d41f486
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.