github Python re-analysis due

saagpatel/portfolio-health

github

MCP server for project portfolio health monitoring — SQLite FTS5 index of memory files + bridge-db activity

maintainer
saagpatel
licence
MIT
first seen
2026-06-20
last seen
2026-09-05
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 5 tools
transport stdio counts 5 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • portfolio_get_project
  • portfolio_list_active
  • portfolio_search
  • portfolio_stale_candidates
  • portfolio_unshipped
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit a160a81 · analyzer v33 · 2w ago

skills & prompt files 1

code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 11

filesystem 9

  • fs saagpatel-portfolio-health-a160a81/src/portfolio_health/__main__.py :6 from pathlib import Path
  • fs saagpatel-portfolio-health-a160a81/src/portfolio_health/health.py :7 from pathlib import Path
  • fs saagpatel-portfolio-health-a160a81/src/portfolio_health/indexer.py :10 from pathlib import Path
  • fs saagpatel-portfolio-health-a160a81/src/portfolio_health/queries.py :11 from pathlib import Path
  • fs saagpatel-portfolio-health-a160a81/src/portfolio_health/server.py :5 from pathlib import Path
  • fs (weak) saagpatel-portfolio-health-a160a81/tests/test_git_and_server.py :6 from pathlib import Path
  • fs (weak) saagpatel-portfolio-health-a160a81/tests/test_health.py :7 from pathlib import Path
  • fs (weak) saagpatel-portfolio-health-a160a81/tests/test_indexer.py :7 from pathlib import Path
  • fs (weak) saagpatel-portfolio-health-a160a81/tests/test_queries.py :7 from pathlib import Path

shell / exec 3

  • shell saagpatel-portfolio-health-a160a81/src/portfolio_health/indexer.py :9 import subprocess
  • shell (weak) saagpatel-portfolio-health-a160a81/tests/test_git_and_server.py :5 import subprocess
  • shell (weak) saagpatel-portfolio-health-a160a81/tests/test_indexer.py :351 import subprocess

database 6

  • db saagpatel-portfolio-health-a160a81/src/portfolio_health/health.py :6 import sqlite3
  • db saagpatel-portfolio-health-a160a81/src/portfolio_health/indexer.py :8 import sqlite3
  • db saagpatel-portfolio-health-a160a81/src/portfolio_health/queries.py :8 import sqlite3
  • db (weak) saagpatel-portfolio-health-a160a81/tests/test_health.py :6 import sqlite3
  • db (weak) saagpatel-portfolio-health-a160a81/tests/test_indexer.py :6 import sqlite3
  • db (weak) saagpatel-portfolio-health-a160a81/tests/test_queries.py :5 import sqlite3

tool registrations 5

  • portfolio_list_active saagpatel-portfolio-health-a160a81/src/portfolio_health/server.py :52
  • portfolio_get_project saagpatel-portfolio-health-a160a81/src/portfolio_health/server.py :62
  • portfolio_search saagpatel-portfolio-health-a160a81/src/portfolio_health/server.py :73
  • portfolio_stale_candidates saagpatel-portfolio-health-a160a81/src/portfolio_health/server.py :84
  • portfolio_unshipped saagpatel-portfolio-health-a160a81/src/portfolio_health/server.py :95

declared dependencies 2

  • mcp@>=1.0.0
  • pyyaml@>=6.0.0