https://github.com/trionnemesis/healthcare-opendata-mcp
· scanned 2026-06-16 00:41 UTC (2 months, 1 week ago)
21 raw signals (3 security + 18 graph)
Last scanned 2 months, 1 week ago · v1 · 18 actionable findings from 2 signal sources. 3 repeated signals grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.
All 392 nodes from the latest scan, grouped by kind. Each node is a unit the engine identified (file, function, endpoint, table…). Most users won't need this view — it's primarily for debugging the engine's graph extraction or for AI agents that want to enumerate the project structure.
| Label | Layer | Status | Path |
|---|---|---|---|
_fx |
software | healthy | tests/adapters/test_pcc_detail_enricher.py:13 |
__init__ |
software | healthy | tests/adapters/test_pcc_detail_enricher.py:20 |
get |
software | healthy | tests/adapters/test_pcc_detail_enricher.py:26 |
post |
software | healthy | tests/adapters/test_pcc_detail_enricher.py:30 |
test_matches_case_no |
software | healthy | tests/adapters/test_pcc_detail_enricher.py:36 |
test_matches_tpam_link |
software | healthy | tests/adapters/test_pcc_detail_enricher.py:41 |
test_no_link_returns_none |
software | healthy | tests/adapters/test_pcc_detail_enricher.py:47 |
test_fetch_detail_happy_path |
software | healthy | tests/adapters/test_pcc_detail_enricher.py:52 |
test_no_detail_link_returns_none |
software | healthy | tests/adapters/test_pcc_detail_enricher.py:66 |
test_blocked_status_raises |
software | healthy | tests/adapters/test_pcc_detail_enricher.py:71 |
_adapter |
software | healthy | tests/adapters/test_nhi.py:19 |
test_refs_carry_rid_url_and_format |
software | healthy | tests/adapters/test_nhi.py:24 |
test_access_strategy_is_platform_api |
software | healthy | tests/adapters/test_nhi.py:33 |
test_csv_with_bom_to_records |
software | healthy | tests/adapters/test_nhi.py:38 |
test_empty_content_yields_no_records |
software | healthy | tests/adapters/test_nhi.py:50 |
test_composite_key_joined_with_pipe |
software | healthy | tests/adapters/test_nhi.py:66 |
test_clinic_dataset_registered_with_verified_rid |
software | healthy | tests/adapters/test_nhi.py:85 |
_adapter |
software | healthy | tests/adapters/test_pcc_tender.py:52 |
_ref |
software | healthy | tests/adapters/test_pcc_tender.py:56 |
test_generates_halfmonth_urls_within_window |
software | healthy | tests/adapters/test_pcc_tender.py:63 |
test_access_strategy_is_static_file |
software | healthy | tests/adapters/test_pcc_tender.py:73 |
test_award_filters_to_mohw_and_maps_twinkle_columns |
software | healthy | tests/adapters/test_pcc_tender.py:78 |
test_tender_announcement_type |
software | healthy | tests/adapters/test_pcc_tender.py:95 |
test_empty_file_tolerated |
software | healthy | tests/adapters/test_pcc_tender.py:107 |
_full |
software | healthy | tests/adapters/test_pcc_tender.py:118 |
test_empty_prefix_keeps_all_agencies |
software | healthy | tests/adapters/test_pcc_tender.py:123 |
test_dataset_meta_reflects_full_scope |
software | healthy | tests/adapters/test_pcc_tender.py:131 |
test_includes_keeps_matching_title |
software | healthy | tests/adapters/test_pcc_tender.py:144 |
test_includes_drops_non_matching |
software | healthy | tests/adapters/test_pcc_tender.py:153 |
test_excludes_removes_matching |
software | healthy | tests/adapters/test_pcc_tender.py:160 |
test_empty_includes_keeps_all_in_agency |
software | healthy | tests/adapters/test_pcc_tender.py:171 |
test_tender_topic_filter |
software | healthy | tests/adapters/test_pcc_tender.py:178 |
test_title_includes_marks_dataset_title |
software | healthy | tests/adapters/test_pcc_tender.py:185 |
test_rejects_xml_doctype_payload |
software | healthy | tests/adapters/test_pcc_tender.py:197 |
_adapter |
software | healthy | tests/adapters/test_static_csv.py:30 |
test_access_strategy_is_static_file |
software | healthy | tests/adapters/test_static_csv.py:35 |
test_multi_url_spec_yields_refs_sharing_dataset_id |
software | healthy | tests/adapters/test_static_csv.py:38 |
test_column_rename_unifies_schema_across_files |
software | healthy | tests/adapters/test_static_csv.py:48 |
test_composite_natural_key_joined_with_pipe |
software | healthy | tests/adapters/test_static_csv.py:62 |
test_exact_duplicate_rows_share_natural_key |
software | healthy | tests/adapters/test_static_csv.py:68 |
test_row_missing_key_column_is_skipped |
software | healthy | tests/adapters/test_static_csv.py:77 |
_fixture |
software | healthy | tests/adapters/test_pcc_detail.py:16 |
test_full_datetime |
software | healthy | tests/adapters/test_pcc_detail.py:21 |
test_date_only |
software | healthy | tests/adapters/test_pcc_detail.py:24 |
test_three_digit_year |
software | healthy | tests/adapters/test_pcc_detail.py:27 |
test_empty_or_garbage |
software | healthy | tests/adapters/test_pcc_detail.py:30 |
test_comma_separated_with_unit |
software | healthy | tests/adapters/test_pcc_detail.py:36 |
test_no_digits |
software | healthy | tests/adapters/test_pcc_detail.py:39 |
test_th_td_model |
software | healthy | tests/adapters/test_pcc_detail.py:45 |
test_td_td_model |
software | healthy | tests/adapters/test_pcc_detail.py:50 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
_FakeClient |
software | healthy | tests/adapters/test_pcc_detail_enricher.py:17 |
TestFindDetailPath |
software | healthy | tests/adapters/test_pcc_detail_enricher.py:35 |
TestEnricher |
software | healthy | tests/adapters/test_pcc_detail_enricher.py:51 |
TestDiscover |
software | healthy | tests/adapters/test_nhi.py:23 |
TestNormalize |
software | healthy | tests/adapters/test_nhi.py:37 |
TestCompositeNaturalKey |
software | healthy | tests/adapters/test_nhi.py:57 |
TestBuiltinRegistry |
software | healthy | tests/adapters/test_nhi.py:82 |
TestDiscover |
software | healthy | tests/adapters/test_pcc_tender.py:62 |
TestNormalize |
software | healthy | tests/adapters/test_pcc_tender.py:77 |
TestFullScopeDataset |
software | healthy | tests/adapters/test_pcc_tender.py:115 |
TestTopicFilter |
software | healthy | tests/adapters/test_pcc_tender.py:141 |
TestDiscover |
software | healthy | tests/adapters/test_static_csv.py:34 |
TestNormalize |
software | healthy | tests/adapters/test_static_csv.py:47 |
TestParseRocDatetime |
software | healthy | tests/adapters/test_pcc_detail.py:20 |
TestParseMoney |
software | healthy | tests/adapters/test_pcc_detail.py:35 |
TestExtractFields |
software | healthy | tests/adapters/test_pcc_detail.py:44 |
TestExtractDetailSynthetic |
software | healthy | tests/adapters/test_pcc_detail.py:70 |
TestExtractDetailLive |
software | healthy | tests/adapters/test_pcc_detail.py:82 |
TestSecurityGuards |
software | healthy | tests/adapters/test_pcc_detail.py:97 |
_FakeEnricher |
software | healthy | tests/mcp/test_service.py:52 |
TestGetTenderDetail |
software | healthy | tests/mcp/test_service.py:63 |
TestCatalog |
software | healthy | tests/mcp/test_service.py:110 |
TestQueryRows |
software | healthy | tests/mcp/test_service.py:133 |
TestRecords |
software | healthy | tests/mcp/test_service.py:158 |
TestServerWiring |
software | healthy | tests/mcp/test_service.py:173 |
TestUpsertBatch |
software | healthy | tests/repository/test_sqlite_repo.py:39 |
TestSourcesAndSearch |
software | healthy | tests/repository/test_sqlite_repo.py:80 |
TestQueryRows |
software | healthy | tests/repository/test_query_executor.py:44 |
FakeAdapter |
software | healthy | tests/ingestion/test_pipeline.py:26 |
TestRunSource |
software | healthy | tests/ingestion/test_pipeline.py:65 |
TestBuildSelect |
software | healthy | tests/domain/test_query_guard.py:12 |
TestNormalizeLimit |
software | healthy | tests/domain/test_query_guard.py:47 |
TestInjectionRejection |
software | healthy | tests/domain/test_query_guard.py:60 |
AccessStrategy |
software | healthy | src/health_opendata_mcp/contracts.py:13 |
RunStatus |
software | healthy | src/health_opendata_mcp/contracts.py:21 |
ColumnSpec |
software | healthy | src/health_opendata_mcp/contracts.py:29 |
DatasetMeta |
software | healthy | src/health_opendata_mcp/contracts.py:37 |
ResourceRef |
software | healthy | src/health_opendata_mcp/contracts.py:47 |
RawPayload |
software | healthy | src/health_opendata_mcp/contracts.py:57 |
Record |
software | healthy | src/health_opendata_mcp/contracts.py:63 |
NormalizedBatch |
software | healthy | src/health_opendata_mcp/contracts.py:70 |
SourceInfo |
software | healthy | src/health_opendata_mcp/contracts.py:78 |
IngestionRun |
software | healthy | src/health_opendata_mcp/contracts.py:88 |
QueryResult |
software | healthy | src/health_opendata_mcp/contracts.py:98 |
BlockedError |
software | healthy | src/health_opendata_mcp/contracts.py:104 |
DatasetNotFoundError |
software | healthy | src/health_opendata_mcp/contracts.py:108 |
SourceAdapter |
software | healthy | src/health_opendata_mcp/contracts.py:112 |
DetailFields |
software | healthy | src/health_opendata_mcp/adapters/_pcc_detail.py:24 |
_TableFieldParser |
software | healthy | src/health_opendata_mcp/adapters/_pcc_detail.py:59 |
StaticCsvSpec |
software | healthy | src/health_opendata_mcp/adapters/static_csv.py:27 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
README.md |
software | healthy | README.md |
Dockerfile |
software | healthy | Dockerfile |
pyproject.toml |
software | healthy | pyproject.toml |
LICENSE |
software | healthy | LICENSE |
CHANGELOG.md |
software | healthy | CHANGELOG.md |
test_pcc_detail_enricher.py |
software | healthy | tests/adapters/test_pcc_detail_enricher.py |
test_nhi.py |
software | healthy | tests/adapters/test_nhi.py |
test_pcc_tender.py |
software | healthy | tests/adapters/test_pcc_tender.py |
test_static_csv.py |
software | healthy | tests/adapters/test_static_csv.py |
test_pcc_detail.py |
software | healthy | tests/adapters/test_pcc_detail.py |
pcc_detail_synthetic.html |
software | healthy | tests/adapters/fixtures/pcc_detail_synthetic.html |
pcc_search_result.html |
software | healthy | tests/adapters/fixtures/pcc_search_result.html |
pcc_detail_live.html |
software | healthy | tests/adapters/fixtures/pcc_detail_live.html |
test_empty_db_guard.py |
software | healthy | tests/mcp/test_empty_db_guard.py |
test_service.py |
software | healthy | tests/mcp/test_service.py |
test_gke_runtime.py |
software | healthy | tests/mcp/test_gke_runtime.py |
test_sqlite_repo.py |
software | healthy | tests/repository/test_sqlite_repo.py |
test_query_executor.py |
software | healthy | tests/repository/test_query_executor.py |
test_pipeline.py |
software | healthy | tests/ingestion/test_pipeline.py |
test_query_guard.py |
software | healthy | tests/domain/test_query_guard.py |
security-mcp-tooling-improvements.md |
software | healthy | docs/issues/security-mcp-tooling-improvements.md |
prune_local_db.py |
software | healthy | scripts/prune_local_db.py |
export_board_data.py |
software | healthy | scripts/export_board_data.py |
enrich_bid_deadline.py |
software | healthy | scripts/enrich_bid_deadline.py |
README.md |
software | healthy | deploy/README.md |
cronjob-sync.yaml |
software | healthy | deploy/k8s/cronjob-sync.yaml |
service.yaml |
software | healthy | deploy/k8s/service.yaml |
deployment.yaml |
software | healthy | deploy/k8s/deployment.yaml |
rbac.yaml |
software | healthy | deploy/k8s/rbac.yaml |
__init__.py |
software | healthy | src/health_opendata_mcp/__init__.py |
cli.py |
software | healthy | src/health_opendata_mcp/cli.py |
contracts.py |
software | healthy | src/health_opendata_mcp/contracts.py |
_pcc_detail.py |
software | healthy | src/health_opendata_mcp/adapters/_pcc_detail.py |
static_csv.py |
software | healthy | src/health_opendata_mcp/adapters/static_csv.py |
__init__.py |
software | healthy | src/health_opendata_mcp/adapters/__init__.py |
pcc_tender.py |
software | healthy | src/health_opendata_mcp/adapters/pcc_tender.py |
_http.py |
software | healthy | src/health_opendata_mcp/adapters/_http.py |
pcc_detail.py |
software | healthy | src/health_opendata_mcp/adapters/pcc_detail.py |
_csv.py |
software | healthy | src/health_opendata_mcp/adapters/_csv.py |
_pcc_opendata.py |
software | healthy | src/health_opendata_mcp/adapters/_pcc_opendata.py |
nhi.py |
software | healthy | src/health_opendata_mcp/adapters/nhi.py |
__init__.py |
software | healthy | src/health_opendata_mcp/repository/__init__.py |
schema.py |
software | healthy | src/health_opendata_mcp/repository/schema.py |
sqlite_repo.py |
software | healthy | src/health_opendata_mcp/repository/sqlite_repo.py |
query_executor.py |
software | healthy | src/health_opendata_mcp/repository/query_executor.py |
__init__.py |
software | healthy | src/health_opendata_mcp/ingestion/__init__.py |
pipeline.py |
software | healthy | src/health_opendata_mcp/ingestion/pipeline.py |
__init__.py |
software | healthy | src/health_opendata_mcp/mcp_server/__init__.py |
server.py |
software | healthy | src/health_opendata_mcp/mcp_server/server.py |
__main__.py |
software | healthy | src/health_opendata_mcp/mcp_server/__main__.py |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
tests |
software | healthy | tests |
adapters |
software | healthy | tests/adapters |
fixtures |
software | healthy | tests/adapters/fixtures |
mcp |
software | healthy | tests/mcp |
repository |
software | healthy | tests/repository |
ingestion |
software | healthy | tests/ingestion |
domain |
software | healthy | tests/domain |
docs |
software | healthy | docs |
issues |
software | healthy | docs/issues |
scripts |
software | healthy | scripts |
deploy |
software | healthy | deploy |
k8s |
software | healthy | deploy/k8s |
src |
software | healthy | src |
health_opendata_mcp |
software | healthy | src/health_opendata_mcp |
adapters |
software | healthy | src/health_opendata_mcp/adapters |
repository |
software | healthy | src/health_opendata_mcp/repository |
ingestion |
software | healthy | src/health_opendata_mcp/ingestion |
mcp_server |
software | healthy | src/health_opendata_mcp/mcp_server |
domain |
software | healthy | src/health_opendata_mcp/domain |
| Label | Layer | Status | Path |
|---|---|---|---|
data_sources |
data | healthy | src/health_opendata_mcp/repository/schema.py |
datasets |
data | healthy | src/health_opendata_mcp/repository/schema.py |
records |
data | healthy | src/health_opendata_mcp/repository/schema.py |
ingestion_runs |
data | healthy | src/health_opendata_mcp/repository/schema.py |
IF |
data | healthy | src/health_opendata_mcp/repository/sqlite_repo.py |
| Label | Layer | Status | Path |
|---|---|---|---|
image::Dockerfile |
hardware | healthy | Dockerfile |
k8s::Role::deploy/k8s/rbac.yaml |
hardware | healthy | deploy/k8s/rbac.yaml |
k8s::ServiceAccount::deploy/k8s/rbac.yaml |
hardware | healthy | deploy/k8s/rbac.yaml |
k8s::RoleBinding::deploy/k8s/rbac.yaml |
hardware | healthy | deploy/k8s/rbac.yaml |
| Label | Layer | Status | Path |
|---|---|---|---|
port:8000 |
network | healthy | Dockerfile |
port:02 |
network | healthy | deploy/k8s/cronjob-sync.yaml |
port:30 |
network | healthy | deploy/k8s/cronjob-sync.yaml |
| Label | Layer | Status | Path |
|---|---|---|---|
k8s::CronJob::deploy/k8s/cronjob-sync.yaml |
hardware | healthy | deploy/k8s/cronjob-sync.yaml |
k8s::Deployment::deploy/k8s/deployment.yaml |
hardware | healthy | deploy/k8s/deployment.yaml |
| Label | Layer | Status | Path |
|---|---|---|---|
repobility-clone-6jqpeeeq |
software | healthy | /tmp/repobility-clone-6jqpeeeq |
| Label | Layer | Status | Path |
|---|---|---|---|
sqlite |
data | healthy | README.md |
| Label | Layer | Status | Path |
|---|---|---|---|
127.0.0.1 |
network | healthy | tests/mcp/test_gke_runtime.py |
| Label | Layer | Status | Path |
|---|---|---|---|
vps::gcp |
hardware | healthy | deploy/k8s/rbac.yaml |
This page is publicly accessible at:
https://repobility.com/scan/ea710779-78eb-40df-becb-de2b113fa6cb/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/ea710779-78eb-40df-becb-de2b113fa6cb/
Important — please don't re-submit the same URL repeatedly. The submission endpoint is idempotent: re-submitting the same git URL returns this same scan_token, not a new one. To re-scan this repo, sign up free and use the dashboard.