All notable changes to the Imaging Data Commons Skill are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Trimmed
SKILL.mdfrom 791 to 684 lines by relocating content to reference guides rather than deleting it, resuming the Phase 2 reduction that the 1.7.0 MCP section had reversed:- Moved the three "what's new in IDC vX" queries to
references/sql_patterns.mdunder a new "Version Tracking" section;SKILL.mdkeeps the guidance that matters (useseries_init_idc_version/series_revised_idc_version, neverprior_versions_index) as a pointer - Dropped the second filter-value-discovery query from "Querying Metadata with SQL", which duplicated the
BodyPartExaminedpattern already insql_patterns.md, and the flat-dirTemplateandsource_bucket_location="gcs"download variants, both now described in prose next to the canonical example - Removed the repeated
from idc_index import IDCClient/client = IDCClient()preamble from six examples, stating once in the Overview that examples assume it — matching howsql_patterns.mdis already written - Condensed the DICOMweb endpoint table, the
citations_from_selectionparameter list, and the downloaded-file-naming notes into prose; the full endpoint details remain inreferences/dicomweb_guide.md - Deduplicated the two
references/bigquery_guide.mdpointers in "Advanced Queries with BigQuery"
- Moved the three "what's new in IDC vX" queries to
- "IDC MCP Server" section in
SKILL.mdandreferences/mcp_guide.md, covering IDC's hosted MCP server athttps://api.imaging.datacommons.cancer.gov/mcp(streamable HTTP, no authentication): how to recognize it, how to divide work between it andidc-index, and how to hand off SeriesInstanceUIDs for download - Guidance to identify the server by its
idc://guideMCP resource or a fingerprint of three or more IDC-specific tool names, and to fall back toidc-indexwhenever identification is ambiguous — generic tool names such asrun_sqlare explicitly not treated as evidence - "IDC MCP Server (Optional)" section in
USAGE.mdwith the endpoint, when adding it is worthwhile, and a Claude Code registration example tests/test_mcp_server.py: contract tests that parse the documented tool fingerprint and inventory out ofSKILL.md/references/mcp_guide.mdand check them against the live server, so the docs cannot drift silently as the beta server evolves; network tests skip rather than fail when the server is unreachable, and the offline checks guard URL consistency and keep generic tool names out of the fingerprintUSAGE.mdto thetest-snippets.ymlpath filter, since the new tests read it- Snippet test coverage for
references/use_cases.md,references/digital_pathology_guide.md, andreferences/parquet_access_guide.md, which had none: 31 tests covering the use-case selection queries, every slide microscopy / annotation / segmentation query in the pathology guide, and the DuckDB-over-HTTPS Parquet queries. The pathology tests assert the TCGA-BRCA slide counts quoted inline in that guide (2704 primary / 399 normal, barcode sample types 01/06/11), so a data release that moves them fails CI instead of silently making the prose wrong TestParquetAccessGuidechecks that every Parquet file listed in the guide exists undercurrent/and thatcurrent/resolves to the installedidc-index-datarelease
- Moved the MCP-vs-
idc-indexrouting decision into theSKILL.mdOverview, next to "Primary tool", so a session that already has the MCP server can skip theidc-indexsetup instead of discovering the alternative only after running it;idc-indexremains the primary, always-available path and the version-check step is unconditional again scripts/check_version.pyno longer installs anything: whenidc-indexis missing or below the pinned minimum it prints thepip installcommand for the running interpreter and exits non-zero, leaving the choice of environment to the user.SKILL.mddocuments the new behavior- Updated to idc-index 0.12.5 (idc-index-data 24.2.2); IDC data version remains v24. 0.12.5 relaxes the dependency to
pandas>=2.2.2,<4, so installing the skill's pinned minimum no longer downgrades a pandas 3.x environment (verified: 0.12.5 installs alongside pandas 3.0.5) - Refreshed the stale
Tested with:headers inreferences/:use_cases.md,clinical_data_guide.md, anddigital_pathology_guide.mdclaimed idc-index 0.12.1, andparquet_access_guide.mdclaimed idc-index-data 23.10.1. All snippets were re-run against idc-index 0.12.5 / idc-index-data 24.2.2 before the headers were updated.bigquery_guide.mdnow names the BigQuery dataset it was validated against (bigquery-public-data.idc_current, viabq query --dry_run) rather than an idc-index version its SQL does not use - Repository renamed from
idc-claude-skilltoimaging-data-commons-skillon GitHub to reflect that the skill is not specific to Claude - Made
README.md,USAGE.md,CHANGELOG.md, the issue template, and test docstrings vendor-neutral: the skill is described as an Agent Skills–format skill usable with any compatible AI assistant; Claude-specific setup instructions remain as one supported environment - Promoted the
npx skills addcross-agent installation to the top ofUSAGE.md; renamed "Claude API Setup" to "API Setup"
- Removed the
pip3 install --upgrade --break-system-packagescall fromscripts/check_version.py. It bypassed the PEP 668 guard on externally managed interpreters, and — combined with thepandas<=2.2.4cap in idc-index ≤ 0.12.4 — could silently downgrade a system-wide pandas 3.x as a side effect of a version check. It also invoked whateverpip3resolved to onPATH, which is not necessarily the running interpreter's pip, so an install could land in a different environment than the one that failed to importidc_index. Reported in review of K-Dense-AI/scientific-agent-skills#158
parse_versioninscripts/check_version.pyno longer raises on pre-release or suffixed tags (0.13.0rc1,v1.7.0-beta); it takes the leading digits of each component and pads to three, so an upstream pre-release cannot crash the startup check. Pre-releases compare equal to their base release, keeping update notices conservative
scripts/check_version.py(run first): installs the pinned author-vettedidc-indexminimum, then prints best-effort, notify-only notices when a neweridc-index(PyPI) or skill release (GitHub) is available — never auto-installs newer releases, silently skipped offline- "Keeping the Skill Up to Date" section in
USAGE.md(release notifications, per-surface update steps, fresh-conversation reminder); linked from README
- Replaced the inline startup version-check in
SKILL.mdwith a prominent pointer toscripts/check_version.py, keeping the code out of the model's context - Renamed repository references
idc-claude-skill→imaging-data-commons-skillacrossSKILL.md,README.md,USAGE.md - Pointed
tests/test_snippets.pyat the new script and added a guard that itsMIN_VERSION/SKILL_VERSIONmatch the SKILL.md frontmatter
- Standardized the required
idc-indexon0.12.3(was0.12.2in the version-check vs0.12.3in frontmatter) and switched to numeric, not string, version comparison
- Added version tracking guidance: "what's new in vX" workflow using
series_init_idc_version/series_revised_idc_versioninindex; clarifiedprior_versions_indexis for reproducibility only (zero overlap withindex, column names differ from main index version columns) - Collapsed five
SeriesInstanceUIDjoin rows into a single universal-key statement; table now covers only non-obvious join columns - Removed Installation and Setup section (duplicated the CRITICAL version-check block); folded optional deps into
ModuleNotFoundErrorTroubleshooting entry - Trimmed "Command-Line Download" inline section from ~60 lines to 5; full CLI coverage (
download-from-manifest,download-from-selection, all options) remains inreferences/cli_guide.md
ct_index,mr_index,pt_indextables (idc-index 0.12.3 / idc-index-data 24.2.0): modality-specific acquisition and reconstruction parameter indices, one row per series, all joining onSeriesInstanceUIDct_index(21 columns): pixel spacing, slice thickness, kVp, convolution kernel, tube current min/max (dose-modulated), exposure, spiral pitch, scan optionsmr_index(22 columns): field strength, scanning sequence, TE (array for multi-echo), TR, flip angle, DiffusionBValue (array for DWI), pixel bandwidth, receive coil, number of temporal positionspt_index(21 columns): radionuclide, injected dose, reconstruction method, decay/scatter/attenuation correction, frame duration (array for dynamic PET), number of time slices
- SQL query patterns for all three new tables in
references/sql_patterns.md - Join column entries for
ct_index,mr_index,pt_indexinreferences/index_tables_guide.mdand SKILL.md - Parquet file entries for
ct_index.parquet,mr_index.parquet,pt_index.parquetinreferences/parquet_access_guide.md
- Added concrete
indices_overviewcode example showing how to search for a column across all tables and read column schemas without fetching the table; directly addresses the failure mode where agents queryindexfor modality-specific parameters (SliceThickness, KVP, etc.) instead of usingct_index/mr_index/pt_index - Added troubleshooting entry "Column not found in
indextable" with a workingindices_overviewsearch snippet and join example, covering common acquisition/reconstruction parameters that live in the modality-specific index tables - Updated idc-index reference to 0.12.3
- Clarified
download_from_selectionAPI: added explicit warning that it takes filter keyword arguments (not a DataFrame), comparison table vsdownload_dicom_series(which has a different first-argument order), and restructured the download example as a step-by-step query → extract UIDs → pass list flow - Documented
download_dicom_seriesas an alternative download method with its own signature (seriesInstanceUIDas first arg, thendownloadDir) - Reduced redundancy and duplication in SKILL.md for cleaner reading
- Moved
version_metadata_indexto second position in Available Tables (right afterindex) to surface it alongside the primary index - Moved
prior_versions_indexto last position in Available Tables; updated description to clarify it contains only removed/superseded series and should not be queried for current data - Added explicit Best Practices rule prohibiting web search for IDC data content questions; idc-index DuckDB queries are always authoritative — web sources are stale
- Removed "Loaded" column from Available Tables and replaced with an unconditional rule: always call
client.fetch_index("table_name")before querying any table;fetch_index()is idempotent for all tables including auto-loaded ones, so no exceptions are needed
series_init_idc_versionandseries_revised_idc_versioncolumns in primaryindextable (idc-index-data 24.1.0): expose the IDC version when each series was first added and last revised, enabling version-aware filteringversion_metadata_indextable: maps each IDC version number to its release timestamp; requiresclient.fetch_index("version_metadata_index")- Tests for new index columns and
version_metadata_index(61 total, up from 55)
- Updated to idc-index 0.12.2 (idc-index-data 24.1.0); IDC data version remains v24
analysis_results_indexcolumn renames (idc-index-data 24.1.0):Updated→updated,Description→description
tests/test_bq_snippets.py: BigQuery snippet validation usingbq query --dry_run— 33 tests covering all SQL examples inreferences/bigquery_guide.md(dicom_all, original_collections_metadata, segmentations, quantitative_measurements, qualitative_measurements, private elements, and clinical tables); skips automatically whenbqCLI is unavailable or unauthenticated
- Fixed auto-upgrade subprocess call to pin
idc-indextoREQUIRED_VERSION(was"idc-index", nowf"idc-index=={REQUIRED_VERSION}"), ensuring the installed version always matches the tested version declared in the frontmatter - Added network access transparency note to Overview documenting expected external endpoints (GCS, S3, BigQuery, DICOMweb proxy, Google Healthcare API) and clarifying that no credentials or environment variables are accessed by the skill
- Added tested-with version comment to optional dependency install block (
pandas>=1.5, numpy>=1.23, pydicom>=2.3)
- Updated frontmatter description to be directive about skill triggering: now explicitly instructs invocation for IDC-related queries even without the word "IDC" in the prompt
- Extracted "Batch Processing and Filtering" (section 6) from SKILL.md to
references/use_cases.md(Use Case 5); replaced inline code block with a 2-sentence summary and pointer - Extracted "Integration with Analysis Pipelines" (section 9) from SKILL.md to
references/use_cases.md(Use Case 6); replaced inline pydicom/SimpleITK code blocks with a 2-sentence summary and pointer - SKILL.md reduced from 865 → 775 lines (−90 lines);
references/use_cases.mdexpanded from 187 → 278 lines - Updated to idc-index 0.12.1 (idc-index-data 24.0.4, IDC data version v24)
- IDC v24 adds 15 new collections (161 → 176), ~39K new series, ~4 TB new data (99.27 TB total, 85,682 cases)
- Updated
collections_indexcolumn names to snake_case (idc-index-data 24.0.0 breaking change):CancerTypes→cancer_types,TumorLocations→tumor_locations,Subjects→subjects,Species→species,Sources→sources,SupportingData→supporting_data,Program→program_id - Updated
analysis_results_indexcolumn names to snake_case (idc-index-data 24.0.4 breaking change):Subjects→subjects,Collections→collections,Modalities→modalities
volume_geometry_indextable documentation: 3D geometry validation for single-frame CT, MR, and PT series; boolean checks (orientation, spacing, dimensions, slice positions) and compositeregularly_spaced_3d_volumeflag; join viaSeriesInstanceUIDrtstruct_indextable documentation: RT Structure Set metadata (total ROIs, ROI names, generation algorithms, interpreted types, referenced image series UID); join viaSeriesInstanceUID- New reference guide
references/parquet_access_guide.md: direct DuckDB queries against public GCS Parquet files without installing idc-index; URL pattern, available files, and query examples for main index,volume_geometry_index, andrtstruct_index - SQL patterns for
volume_geometry_indexandrtstruct_indexinreferences/sql_patterns.md - Detailed documentation for BigQuery-only derived tables in
references/bigquery_guide.md:segmentations: per-segment anatomy with full schema, column descriptions, and queries for discovering structures, filtering by coded concept, and linking to SR measurements; note on gap vsseg_indexin idc-indexquantitative_measurements: radiomics and clinical numeric measurements from DICOM SR TID1500 (volume, diameter, shape descriptors, texture, intensity statistics); full schema with column descriptions and query examplesqualitative_measurements: coded assessments from DICOM SR TID1500 (malignancy rating, calcification, texture, margin); full schema with column descriptions and query examplesmeasurement_groups: parent grouping table for SR measurements- Combined example joining all three derived tables for LIDC-IDRI nodule analysis (malignancy + volume + diameter)
- SKILL.md section 7 now explicitly lists per-segment anatomy search, quantitative SR measurements, and qualitative SR measurements as BigQuery-only use cases with no idc-index equivalent
- Updated to idc-index 0.11.14 (idc-index-data 23.10.1)
- Added
SOPClassUIDandTransferSyntaxUIDcolumns to Key Columns Reference inreferences/index_tables_guide.md - Added Direct Parquet Access entry to Data Access Options table and pointer in SKILL.md
- Added
parquet_access_guide.mdto Quick Navigation table in SKILL.md
- New "Identifying Tumor vs Normal Slides" section in digital pathology guide with two approaches:
- Structured DICOM tissue type via
primaryAnatomicStructureModifier_CodeMeaning(works across all SM collections) - TCGA barcode parsing via
ContainerIdentifier(TCGA collections only, catches metastatic edge cases)
- Structured DICOM tissue type via
- TCGA-BRCA worked examples showing tumor vs normal slide counts
- Documentation references to GDC TCGA barcode format and sample type codes
- Specimen preparation query examples: filtering by staining (H&E), embedding medium (FFPE vs frozen), and fixative, with note about array column syntax (
array_to_string,list_contains) - "Finding Pre-Computed Analysis Results" section: discovering derived datasets (nuclei segmentations, TIL maps) via
analysis_results_index, with example joining annotations back to source slides - Note about per-annotation measurements in DICOM ANN objects (extractable via highdicom after download), with link to microscopy_dicom_ann_intro tutorial
- Updated to idc-index 0.11.10 (adds
ContainerIdentifiercolumn tosm_index) - Updated
sm_indextable description to reflect newly available columns (container/slide ID, tissue type, anatomic structure, diagnosis)
- Automatic idc-index package version check with upgrade prompt before any queries
- Version check compares installed version against
metadata.idc-indexin frontmatter and triggerspip install --upgradewhen outdated
- Prevents "table not found" errors when using newer index tables (e.g.,
contrast_index) with older idc-index versions
- Digital pathology reference guide (
references/digital_pathology_guide.md) with SM, ANN, and SEG query patterns, join examples, and pathology tool recommendations seg_indexcoverage in digital pathology guide with cross-domain clarification (SEG used for both radiology and pathology) and query for finding pathology-specific segmentationsAnnotationGroupLabelfiltering examples for finding annotation groups by name- SM + ANN cross-reference queries showing how to find annotations on slide microscopy images
- Index discovery guidance before BigQuery section to ensure all local indices are checked first
- Documentation for new
ann_indexandann_group_indextables (Microscopy Bulk Simple Annotations) - Example queries for annotation series and annotation group metadata
- Explanation of downloaded DICOM file naming convention (
<crdc_instance_uuid>.dcm) - New reference guides extracted from SKILL.md:
references/index_tables_guide.md- Table schemas, DataFrame access, join column referencereferences/sql_patterns.md- Quick-reference SQL patterns for common queriesreferences/use_cases.md- End-to-end workflow examples
- Quick Navigation section in SKILL.md with decision triggers for when to load each reference
idc-data-versionfield in frontmatter metadata- Documentation for new
contrast_indextable (contrast bolus metadata for CT, MR, PT, XA, RF series)
- Updated to idc-index 0.11.9 (IDC data version v23)
- Reduced SKILL.md from 1,245 to 825 lines by extracting secondary content to reference files
- Core Capabilities sections remain inline to ensure correct API pattern usage
- Refactored detailed SM/ANN content from SKILL.md into
references/digital_pathology_guide.md, keeping brief summaries with pointers in main skill - Made IDC version (v23) more prominent in SKILL.md with verification guidance to prevent responses using older versions
- Clarified distinction between
index_tables_guide.md(structure/access) andsql_patterns.md(query examples)
- Clinical data reference guide for navigating tabular data accompanying images
- Detailed patterns for mapping coded values (option_code to option_description)
- Examples for joining clinical data with imaging data via dicom_patient_id
- Expanded BigQuery guide with comprehensive clinical data coverage (metadata tables, cross-collection queries)
- Private DICOM elements documentation in BigQuery guide covering vendor-specific tags (e.g., diffusion b-values)
- Query patterns for discovering, accessing, and filtering by private tags in the OtherElements column
- CLI reference guide for idc-index command-line tools
- Cloud storage reference guide explaining bucket organization and direct access via s5cmd
- GitHub Actions workflow for syncing skill updates to claude-scientific-skills repository
- Moved version field from top-level frontmatter to metadata section for compatibility
- Corrected s5cmd command-line syntax in cloud storage guide
- Clarified caveat about retracted data in DICOMweb guide
- Updated DICOMweb reference to explain differences between the two available endpoints
- Core IDC data model documentation with index tables reference
- Query and download workflows using idc-index Python package
- BigQuery integration guide for advanced queries
- DICOMweb API guide for programmatic access
- Visualization integration with IDC Portal and OHIF viewer
- License checking and citation generation examples
- SQL query patterns for common use cases
- DICOM metadata guidance and best practices