Skip to content

Commit 1a17742

Browse files
committed
Initial release: ENCODE Toolkit v0.3.0-beta.1
0 parents  commit 1a17742

280 files changed

Lines changed: 68321 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude-plugin/plugin.json

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
{
2+
"name": "encode-toolkit",
3+
"description": "20 ENCODE API tools + 48 expert skills for genomics research. Search experiments, download files with MD5 verification, run pipelines, and cross-reference 14 databases.",
4+
"version": "0.3.0-beta.1",
5+
"author": {
6+
"name": "Dr. Alex M. Mawla, PhD",
7+
"email": "ammawla@ucdavis.edu"
8+
},
9+
"homepage": "https://github.com/ammawla/encode-toolkit",
10+
"repository": "https://github.com/ammawla/encode-toolkit",
11+
"icon": "docs/icon.svg",
12+
"license": "LicenseRef-Noncommercial",
13+
"keywords": [
14+
"genomics",
15+
"encode",
16+
"bioinformatics",
17+
"epigenomics",
18+
"chip-seq",
19+
"atac-seq",
20+
"rna-seq",
21+
"wgbs",
22+
"hi-c",
23+
"cut-and-run",
24+
"pipeline",
25+
"nextflow",
26+
"GTEx",
27+
"ClinVar",
28+
"GWAS",
29+
"JASPAR",
30+
"CellxGene",
31+
"gnomAD",
32+
"Ensembl",
33+
"UCSC",
34+
"provenance",
35+
"biology",
36+
"science"
37+
],
38+
"skills": "skills/*",
39+
"tools": [
40+
{
41+
"name": "encode_search_experiments",
42+
"description": "Search ENCODE experiments with 20+ filters including assay type, organism, organ, biosample, target, and more."
43+
},
44+
{
45+
"name": "encode_get_experiment",
46+
"description": "Get full details for a specific experiment including all files, quality metrics, and audit info."
47+
},
48+
{
49+
"name": "encode_list_files",
50+
"description": "List files for a specific experiment with format/type filters."
51+
},
52+
{
53+
"name": "encode_search_files",
54+
"description": "Search files across all experiments with combined experiment + file filters."
55+
},
56+
{
57+
"name": "encode_download_files",
58+
"description": "Download specific files by accession to a local directory with MD5 verification."
59+
},
60+
{
61+
"name": "encode_get_metadata",
62+
"description": "List valid filter values for any search parameter."
63+
},
64+
{
65+
"name": "encode_batch_download",
66+
"description": "Search + download files in one step with preview mode."
67+
},
68+
{
69+
"name": "encode_manage_credentials",
70+
"description": "Store, check, or clear ENCODE credentials for restricted data access."
71+
},
72+
{
73+
"name": "encode_get_facets",
74+
"description": "Get live counts from ENCODE showing what data exists for given filters."
75+
},
76+
{
77+
"name": "encode_get_file_info",
78+
"description": "Get detailed metadata for a single file."
79+
},
80+
{
81+
"name": "encode_track_experiment",
82+
"description": "Track an experiment locally with publications, methods, and pipeline info."
83+
},
84+
{
85+
"name": "encode_list_tracked",
86+
"description": "List all tracked experiments with metadata and publication counts."
87+
},
88+
{
89+
"name": "encode_get_citations",
90+
"description": "Get publications for tracked experiments. Export as BibTeX or RIS."
91+
},
92+
{
93+
"name": "encode_compare_experiments",
94+
"description": "Analyze whether two experiments are compatible for combined analysis."
95+
},
96+
{
97+
"name": "encode_log_derived_file",
98+
"description": "Log derived files for provenance tracking back to ENCODE source data."
99+
},
100+
{
101+
"name": "encode_get_provenance",
102+
"description": "View provenance chains from derived files to source ENCODE data."
103+
},
104+
{
105+
"name": "encode_export_data",
106+
"description": "Export tracked experiments as CSV, TSV, or JSON with PMIDs for cross-referencing."
107+
},
108+
{
109+
"name": "encode_summarize_collection",
110+
"description": "Get grouped statistics of your tracked experiment collection."
111+
},
112+
{
113+
"name": "encode_link_reference",
114+
"description": "Link external references (PubMed, bioRxiv, ClinicalTrials, GEO) to experiments."
115+
},
116+
{
117+
"name": "encode_get_references",
118+
"description": "Get external references linked to experiments for cross-server workflows."
119+
}
120+
]
121+
}

.claude/settings.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"permissions": {
3+
"allow": [
4+
"Bash(.venv/bin/python -m pytest:*)",
5+
"Bash(.venv/bin/python -c:*)",
6+
"Bash(grep -c '@mcp.tool':*)",
7+
"Bash(wc -l:*)",
8+
"Bash(ls:*)"
9+
]
10+
}
11+
}

.env.example

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Optional: ENCODE access credentials for restricted data
2+
# Get these from your ENCODE account profile at https://www.encodeproject.org/
3+
# These are only needed for unreleased/restricted datasets.
4+
# Public data (most of ENCODE) requires no authentication.
5+
#
6+
# On first use, credentials are moved to your OS keyring (macOS Keychain,
7+
# Linux Secret Service, Windows Credential Locker) and removed from env vars.
8+
ENCODE_ACCESS_KEY=
9+
ENCODE_SECRET_KEY=
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
name: Bug Report
2+
description: Report a bug in ENCODE Toolkit
3+
title: "[Bug]: "
4+
labels: ["bug"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
Thanks for reporting a bug! Please fill out the sections below.
10+
11+
- type: dropdown
12+
id: component
13+
attributes:
14+
label: Component
15+
description: Which part of ENCODE Toolkit is affected?
16+
options:
17+
- MCP Tools (search, download, track)
18+
- Skills (analysis, pipelines, external DBs)
19+
- File Downloads / MD5 verification
20+
- Credential Management
21+
- SQLite Tracker
22+
- Installation / Setup
23+
- Other
24+
validations:
25+
required: true
26+
27+
- type: textarea
28+
id: description
29+
attributes:
30+
label: What happened?
31+
description: Clear description of the bug.
32+
placeholder: "When I run encode_search_experiments with..."
33+
validations:
34+
required: true
35+
36+
- type: textarea
37+
id: expected
38+
attributes:
39+
label: Expected behavior
40+
description: What should have happened instead?
41+
validations:
42+
required: true
43+
44+
- type: textarea
45+
id: reproduce
46+
attributes:
47+
label: Steps to reproduce
48+
description: Minimal steps to reproduce the issue.
49+
placeholder: |
50+
1. Run `encode_search_experiments(assay_title="ChIP-seq", organ="liver")`
51+
2. See error...
52+
53+
- type: input
54+
id: version
55+
attributes:
56+
label: Version
57+
description: Output of `pip show encode-toolkit | grep Version`
58+
placeholder: "0.3.0b1"
59+
60+
- type: dropdown
61+
id: python
62+
attributes:
63+
label: Python version
64+
options:
65+
- "3.13"
66+
- "3.12"
67+
- "3.11"
68+
- "3.10"
69+
70+
- type: dropdown
71+
id: client
72+
attributes:
73+
label: MCP Client
74+
options:
75+
- Claude Code
76+
- Claude Desktop
77+
- VS Code (Continue/Cline)
78+
- Cursor
79+
- Other
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
name: Feature Request
2+
description: Suggest a new feature or improvement
3+
title: "[Feature]: "
4+
labels: ["enhancement"]
5+
body:
6+
- type: markdown
7+
attributes:
8+
value: |
9+
Thanks for your suggestion! Help us understand what you need.
10+
11+
- type: dropdown
12+
id: category
13+
attributes:
14+
label: Category
15+
options:
16+
- New MCP Tool
17+
- New Skill
18+
- New Pipeline
19+
- New Database Integration
20+
- Existing Tool Enhancement
21+
- Existing Skill Enhancement
22+
- Documentation
23+
- Other
24+
validations:
25+
required: true
26+
27+
- type: textarea
28+
id: problem
29+
attributes:
30+
label: Problem or use case
31+
description: What research problem does this solve?
32+
placeholder: "I'm trying to analyze ENCODE CRISPR screen data and need..."
33+
validations:
34+
required: true
35+
36+
- type: textarea
37+
id: solution
38+
attributes:
39+
label: Proposed solution
40+
description: How should this work? Include example tool calls if possible.
41+
placeholder: |
42+
A new tool `encode_analyze_screen` that takes an experiment accession
43+
and returns guide-level scores...
44+
45+
- type: textarea
46+
id: alternatives
47+
attributes:
48+
label: Alternatives considered
49+
description: Other approaches you've thought about.

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
## Summary
2+
3+
<!-- Brief description of changes (1-3 sentences) -->
4+
5+
## Changes
6+
7+
<!-- Bulleted list of what was changed -->
8+
9+
-
10+
11+
## Type
12+
13+
<!-- Check the relevant option -->
14+
15+
- [ ] Bug fix
16+
- [ ] New feature (tool, skill, pipeline)
17+
- [ ] Enhancement to existing feature
18+
- [ ] Documentation
19+
- [ ] Infrastructure (CI, packaging, config)
20+
21+
## Testing
22+
23+
<!-- How was this tested? -->
24+
25+
- [ ] All 506 existing tests pass (`pytest tests/ -v`)
26+
- [ ] New tests added for new functionality
27+
- [ ] Lint passes (`ruff check src/`)
28+
- [ ] Format passes (`ruff format --check src/`)
29+
- [ ] Plugin validation passes (plugin.json valid, skills load)
30+
31+
## Checklist
32+
33+
- [ ] CHANGELOG.md updated
34+
- [ ] CLAUDE.md updated (if architecture/tools changed)
35+
- [ ] No secrets or credentials in code
36+
- [ ] No breaking changes to existing tool signatures

.github/dependabot.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "pip"
4+
directory: "/"
5+
schedule:
6+
interval: "weekly"
7+
labels:
8+
- "dependencies"
9+
open-pull-requests-limit: 5
10+
11+
- package-ecosystem: "github-actions"
12+
directory: "/"
13+
schedule:
14+
interval: "weekly"
15+
labels:
16+
- "ci"
17+
open-pull-requests-limit: 3
18+
19+
- package-ecosystem: "npm"
20+
directory: "/"
21+
schedule:
22+
interval: "monthly"
23+
labels:
24+
- "dependencies"
25+
open-pull-requests-limit: 2

.github/workflows/lint.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: Lint
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
lint:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v4
14+
15+
- name: Set up Python
16+
uses: actions/setup-python@v5
17+
with:
18+
python-version: "3.13"
19+
20+
- name: Install ruff
21+
run: pip install ruff
22+
23+
- name: Check formatting
24+
run: ruff format --check src/ tests/
25+
26+
- name: Check linting
27+
run: ruff check src/ tests/

0 commit comments

Comments
 (0)