MCP server for project portfolio health monitoring — SQLite FTS5 index of memory files + bridge-db activity
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
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
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
- agent-rules saagpatel-portfolio-health-a160a81/AGENTS.md
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