sponsor-finder
npx skills add https://github.com/github/awesome-copilot --skill sponsor-finder
Agent 安装分布
Skill 文档
Sponsor Finder
Find which of a repository’s open source dependencies accept sponsorship via GitHub Sponsors (or Open Collective, Ko-fi, etc.). Accepts a GitHub owner/repo, uses the deps.dev API for dependency resolution and project health data, and produces a verified sponsorship report covering both direct and transitive dependencies.
Your Workflow
When the user provides a repository in owner/repo format:
- Parse the input â Extract
ownerandrepo. - Detect the ecosystem â Fetch manifest to determine package name + version.
- Get full dependency tree â deps.dev
GetDependencies(one call). - Resolve repos â deps.dev
GetVersionfor each dep ârelatedProjectsgives GitHub repo. - Get project health â deps.dev
GetProjectfor unique repos â OSSF Scorecard. - Find funding links â npm
fundingfield, FUNDING.yml, web search fallback. - Verify every link â fetch each URL to confirm it’s live.
- Group and report â by funding destination, sorted by impact.
Step 1: Detect Ecosystem and Package
Use get_file_contents to fetch the manifest from the target repo. Determine the ecosystem and extract the package name + latest version:
| File | Ecosystem | Package name from | Version from |
|---|---|---|---|
package.json |
NPM | name field |
version field |
requirements.txt |
PYPI | list of package names | use latest (omit version in deps.dev call) |
pyproject.toml |
PYPI | [project.dependencies] |
use latest |
Cargo.toml |
CARGO | [package] name |
[package] version |
go.mod |
GO | module path |
extract from go.mod |
Gemfile |
RUBYGEMS | gem names | use latest |
pom.xml |
MAVEN | groupId:artifactId |
version |
Step 2: Get Full Dependency Tree (deps.dev)
This is the key step. Use web_fetch to call the deps.dev API:
https://api.deps.dev/v3/systems/{ECOSYSTEM}/packages/{PACKAGE}/versions/{VERSION}:dependencies
For example:
https://api.deps.dev/v3/systems/npm/packages/express/versions/5.2.1:dependencies
This returns a nodes array where each node has:
versionKey.nameâ package nameversionKey.versionâ resolved versionrelationâ"SELF","DIRECT", or"INDIRECT"
This single call gives you the entire dependency tree â both direct and transitive â with exact resolved versions. No need to parse lockfiles.
URL encoding
Package names containing special characters must be percent-encoded:
@colors/colorsâ%40colors%2Fcolors- Encode
@as%40,/as%2F
For repos without a single root package
If the repo doesn’t publish a package (e.g., it’s an app not a library), fall back to reading package.json dependencies directly and calling deps.dev GetVersion for each.
Step 3: Resolve Each Dependency to a GitHub Repo (deps.dev)
For each dependency from the tree, call deps.dev GetVersion:
https://api.deps.dev/v3/systems/{ECOSYSTEM}/packages/{NAME}/versions/{VERSION}
From the response, extract:
relatedProjectsâ look forrelationType: "SOURCE_REPO"âprojectKey.idgivesgithub.com/{owner}/{repo}linksâ look forlabel: "SOURCE_REPO"âurlfield
This works across all ecosystems â npm, PyPI, Cargo, Go, RubyGems, Maven, NuGet â with the same field structure.
Efficiency rules
- Process in batches of 10 at a time.
- Deduplicate â multiple packages may map to the same repo.
- Skip deps where no GitHub project is found (count as “unresolvable”).
Step 4: Get Project Health Data (deps.dev)
For each unique GitHub repo, call deps.dev GetProject:
https://api.deps.dev/v3/projects/github.com%2F{owner}%2F{repo}
From the response, extract:
scorecard.checksâ find the"Maintained"check âscore(0â10)starsCountâ popularity indicatorlicenseâ project licenseopenIssuesCountâ activity indicator
Use the Maintained score to label project health:
- Score 7â10 â â Actively maintained
- Score 4â6 â â ï¸ Partially maintained
- Score 0â3 â ð¤ Possibly unmaintained
Efficiency rules
- Only fetch for unique repos (not per-package).
- Process in batches of 10 at a time.
- This step is optional â skip if rate-limited and note in output.
Step 5: Find Funding Links
For each unique GitHub repo, check for funding information using three sources in order:
5a: npm funding field (npm ecosystem only)
Use web_fetch on https://registry.npmjs.org/{package-name}/latest and check for a funding field:
- String:
"https://github.com/sponsors/sindresorhus"â use as URL - Object:
{"type": "opencollective", "url": "https://opencollective.com/express"}â useurl - Array: collect all URLs
5b: .github/FUNDING.yml
Use get_file_contents to fetch {owner}/{repo} path .github/FUNDING.yml.
Parse the YAML:
github: [username]âhttps://github.com/sponsors/{username}open_collective: slugâhttps://opencollective.com/{slug}ko_fi: usernameâhttps://ko-fi.com/{username}patreon: usernameâhttps://patreon.com/{username}tidelift: platform/packageâhttps://tidelift.com/subscription/pkg/{platform-package}custom: [urls]â use as-is
5c: Web search fallback
For the top 10 unfunded dependencies (by number of transitive dependents), use web_search:
"{package name}" github sponsors OR open collective OR funding
Skip packages known to be corporate-maintained (React/Meta, TypeScript/Microsoft, @types/DefinitelyTyped).
Efficiency rules
- Check 5a and 5b for all deps. Only use 5c for top unfunded ones.
- Skip npm registry calls for non-npm ecosystems.
- Deduplicate repos â check each repo only once.
Step 6: Verify Every Link (CRITICAL)
Before including ANY funding link, verify it exists.
Use web_fetch on each funding URL:
- Valid page â â Include
- 404 / “not found” / “not enrolled” â â Exclude
- Redirect to valid page â â Include final URL
Verify in batches of 5 at a time. Never present unverified links.
Step 7: Output the Report
## ð Sponsor Finder Report
**Repository:** {owner}/{repo}
**Scanned:** {current date}
**Ecosystem:** {ecosystem} · {package}@{version}
---
### Summary
- **{total}** total dependencies ({direct} direct + {transitive} transitive)
- **{resolved}** resolved to GitHub repos
- **ð {sponsorable}** have verified funding links ({percentage}%)
- **{destinations}** unique funding destinations
- All links verified â
---
### Verified Funding Links
| Dependency | Repo | Funding | Direct? | How Verified |
|------------|------|---------|---------|--------------|
| {name} | [{owner}/{repo}](https://github.com/{owner}/{repo}) | ð [GitHub Sponsors](https://github.com/sponsors/{user}) | â
| FUNDING.yml |
| {name} | [{owner}/{repo}](https://github.com/{owner}/{repo}) | ð [Open Collective](https://opencollective.com/{slug}) | âï¸ | npm funding |
| ... | ... | ... | ... | ... |
Use â
for direct dependencies, âï¸ for transitive.
---
### Funding Destinations (by impact)
| Destination | Deps | Health | Link |
|-------------|------|--------|------|
| ð Open Collective: {name} | {N} direct | â Maintained | [opencollective.com/{name}](https://opencollective.com/{name}) |
| ð @{user} | {N} direct + {M} transitive | â Maintained | [github.com/sponsors/{user}](https://github.com/sponsors/{user}) |
| ... | ... | ... | ... |
Sort by total number of dependencies (direct + transitive), descending.
---
### No Verified Funding Found
| Dependency | Repo | Why | Direct? |
|------------|------|-----|---------|
| {name} | {owner}/{repo} | Corporate (Meta) | â
|
| {name} | {owner}/{repo} | No FUNDING.yml or metadata | âï¸ |
| ... | ... | ... | ... |
Only show the top 10 unfunded direct deps. If more, note "... and {N} more".
---
### ð {percentage}% verified funding coverage · {destinations} destinations · {sponsorable} dependencies
### ð¡ Sponsoring just {N} people/orgs covers all {sponsorable} funded dependencies
Format notes
- Direct? column: â = direct dependency, âï¸ = transitive
- Health column: â Maintained (7+), â ï¸ Partial (4â6), ð¤ Low (0â3) â from OSSF Scorecard
- How Verified:
FUNDING.yml,npm funding,PyPI metadata,Web search - ð GitHub Sponsors, ð Open Collective, â Ko-fi, ð Other
- Prioritize GitHub Sponsors links when multiple funding sources exist
- The ð¡ summary line tells the user the minimum number of sponsorships to cover everything
Error Handling
- If deps.dev returns 404 for the package â fall back to reading the manifest directly and resolving via registry APIs.
- If deps.dev is rate-limited â note partial results, continue with what was fetched.
- If
get_file_contentsreturns 404 for the repo â inform user repo may not exist or is private. - If link verification fails â exclude the link silently.
- Always produce a report even if partial â never fail silently.
Critical Rules
- NEVER present unverified links. Fetch every URL before showing it. 5 verified links > 20 guessed links.
- NEVER guess from training knowledge. Always check â funding pages change over time.
- Be transparent. Show “How Verified” and “Direct?” columns so users understand the data.
- Use deps.dev as primary resolver. Fall back to registry APIs only if deps.dev is unavailable.
- Always use GitHub MCP tools (
get_file_contents),web_fetch, andweb_searchâ never clone or shell out. - Be efficient. Batch API calls, deduplicate repos, respect sampling limits.
- Focus on GitHub Sponsors. Most actionable platform â show others but prioritize GitHub.
- Deduplicate by maintainer. Group to show real impact of sponsoring one person.
- Show the actionable minimum. The ð¡ line tells users the fewest sponsorships to cover all funded deps.