whichlib
Server Details
Dependency picker for coding agents: recommends, compares and scores GitHub repos with a verdict.
- Status
- Healthy
- Uptime
- 100.0% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- josifb/whichlib
- GitHub Stars
- 0
- Server Listing
- whichlib
TDQS
Scored across 3 tools
Each tool occupies a distinct niche: compare_repos for candidates you already have, recommend_repos for finding candidates by stated need, and trending_repos for time/star-based discovery. The descriptions explicitly cross-reference and steer away from misuse (e.g. 'not the right tool for picking a dependency... use recommend_repos'). No meaningful overlap remains.
All three names follow a <verb-ish>_repos pattern with a shared noun suffix, which is highly predictable. trending_repos is a gerund rather than an imperative verb, a minor deviation from the compare_/recommend_ style.
Three tools for a tightly focused repo discovery/comparison server is well-scoped. Each tool earns its place: one for discovery by trend, one for need-based recommendation, one for head-to-head comparison.
The lifecycle of 'find a library -> evaluate it -> choose between options' is fully covered by recommend, compare, and trending. A minor gap is the absence of a single-repo lookup (get_repo) to score/verdict one known repository without a comparison peer.
Available Tools
3 toolscompare_reposCompare repositoriesARead-onlyInspect
Compare 2-10 known GitHub repositories side by side, best score first: score and tier, stars, forks, open issues, last push, license, npm/PyPI weekly downloads (only when the registry links back to the repository) and a verdict. Each result has a 0-100 score (momentum 40% (stars gained per week; without history, lifetime stars per week scaled by the npm/PyPI download trend), maintenance 25%, adoption incl. npm/PyPI weekly downloads 25%, license 10%), a tier (Strong >=75, Solid >=50, Watch >=25, Avoid <25; New for repos under 30 days old, too new to judge), a one-line verdict and the full breakdown. Use this to choose between candidates you already have (for example zod vs valibot) or to check a dependency the project already uses; use recommend_repos to find candidates. One GitHub API call per repository plus npm/PyPI lookups. A repository that does not exist is listed under notFound and the rest are still compared; the call fails only if none can be fetched, or when GitHub's rate limit is reached or the token is rejected. Hosted: 50 free tool calls per day per user; send header X-GitHub-Token with your own GitHub token for unlimited use, or run the npm package locally (npx -y whichlib).
| Name | Required | Description | Default |
|---|---|---|---|
| repos | Yes | Repository names as owner/repo, e.g. ["colinhacks/zod", "fabian-hiller/valibot"]. Not URLs or npm/PyPI package names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint/openWorldHint; the description adds substantial behavioral context beyond them: one GitHub call per repo plus registry lookups, partial-failure semantics (bad repos land in notFound, others still compared), failure only when all fail or rate limit/token rejection occurs, and the hosted quota with the X-GitHub-Token escape hatch. This is a mutation-free read tool whose cost and failure profile are fully disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what is compared, then scoring weights, tiers, verdict, usage, then cost/failure/quota. Long but dense with zero filler; slight length cost from packing the full scoring rubric into one paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-shape burden and does: score, tier thresholds, verdict, breakdown, and the notFound list. Combined with the disclosed rate limits and quota, an agent has everything needed to call and interpret this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already specifies owner/repo format and the 'not URLs or npm/PyPI package names' constraint, so the description adds little param-level meaning. It restates the 2-10 bound and gives example values, which is marginal reinforcement rather than new information — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (compare 2-10 GitHub repositories side by side) and immediately enumerates the compared dimensions and the returned fields. It explicitly contrasts itself with the sibling recommend_repos, so an agent can route between them without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('choose between candidates you already have, for example zod vs valibot' / 'check a dependency the project already uses') and names the alternative for the opposite case ('use recommend_repos to find candidates'). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_reposRecommend repositoriesARead-onlyInspect
Find the best open-source library for a need before adding a dependency. Give the need in plain words and get up to limit GitHub repositories ranked by fit = score x relevance to the need. Each result has a 0-100 score (momentum 40% (stars gained per week; without history, lifetime stars per week scaled by the npm/PyPI download trend), maintenance 25%, adoption incl. npm/PyPI weekly downloads 25%, license 10%), a tier (Strong >=75, Solid >=50, Watch >=25, Avoid <25; New for repos under 30 days old, too new to judge), a one-line verdict and the full breakdown. Use this when you do not yet have candidates; use compare_repos when you already have names. Makes 3 GitHub searches plus npm/PyPI lookups for the shortlist. Hosted: 50 free tool calls per day per user; send header X-GitHub-Token with your own GitHub token for unlimited use, or run the npm package locally (npx -y whichlib).
| Name | Required | Description | Default |
|---|---|---|---|
| need | Yes | The need in plain words, e.g. "python pdf parser", "react state management". Name the task, not a library. | |
| limit | No | How many repositories to return, 1-10. | |
| language | No | GitHub language name, e.g. "TypeScript", "Python", "Rust", "C++". JavaScript also matches TypeScript repositories and the reverse; Python also matches Jupyter Notebook. Omit to search all languages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnly and openWorld; the description adds substantial operational context: it makes 3 GitHub searches plus npm/PyPI lookups, is subject to a 50 calls/day hosted limit, accepts an X-GitHub-Token header for unlimited use, and can run locally via npx. These are real behavioral traits beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and routing, then the scoring model and operational notes. It is dense and long, but every clause is load-bearing for interpreting results; minor tightening could still help.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe returns, and it does thoroughly: 0-100 score, weighted components, tier thresholds, one-line verdict, and full breakdown. Coupled with rate limits and auth, an agent has everything needed to call and interpret this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by defining the fitness formula (fit = score x relevance to the need) and clarifying that `need` gets reinterpreted through relevance weighting. It reinforces limit usage but adds little on language.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (find the best open-source library for a need) and pins the moment it applies (before adding a dependency). It also names the sibling it is not: compare_repos is for when you already have names, so it is distinguishable without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('you do not yet have candidates') and the alternative with its own condition ('use compare_repos when you already have names'). This is unambiguous routing between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trending_reposTrending repositoriesARead-onlyInspect
Discover projects: the most-starred GitHub repositories created in the last day, week or month, or with period "rising" repositories of any age that gained the most stars this week (like GitHub Trending; risingRank keeps that order). Optionally one language; each scored and returned sorted by score (starsRank keeps the stars order). Each result has a 0-100 score (momentum 40% (stars gained per week; without history, lifetime stars per week scaled by the npm/PyPI download trend), maintenance 25%, adoption incl. npm/PyPI weekly downloads 25%, license 10%), a tier (Strong >=75, Solid >=50, Watch >=25, Avoid <25; New for repos under 30 days old, too new to judge), a one-line verdict and the full breakdown. Not the right tool for picking a dependency, since new repositories have little maintenance history; use recommend_repos for that. One GitHub search (rising: one download of the daily list from raw.githubusercontent.com instead), plus one npm/PyPI lookup per repository when withDownloads is true. Hosted: 50 free tool calls per day per user; send header X-GitHub-Token with your own GitHub token for unlimited use, or run the npm package locally (npx -y whichlib).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many repositories to return, 1-100. | |
| period | No | "day", "week" or "month": repos created in the last 24 hours, 7 days or 30 days. "rising": repos of any age by stars gained this week (the top 1,000 repos per language plus new ones are tracked). | week |
| language | No | GitHub language name, e.g. "TypeScript", "Python", "Rust". Matches that language only. Omit for all languages. | |
| withDownloads | No | Also look up npm/PyPI weekly downloads for each repository. Slower: one registry lookup per repository. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnly/openWorld; the description adds the real operational facts an agent needs: one GitHub search (or a raw.githubusercontent.com download for rising), one npm/PyPI lookup per repo when withDownloads is true, and a 50-calls/day quota with the X-GitHub-Token header or local npx fallback. It also discloses return semantics (0-100 score, weightings, tier thresholds, verdict, breakdown), far beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the key exclusion are front-loaded in the first sentences, and every later sentence (call budget, scoring, tiers) carries usable information. It is dense and long, and the full scoring weightings could reasonably live in docs, keeping it short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully covers the return shape (score, tier, verdict, breakdown), cost model, auth/quota, and alternative tool choice. An agent has everything needed to call it correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds interpretation the schema lacks: that 'rising' tracks repos of any age via stars gained this week, and that risingRank/starsRank control the returned ordering. It does not restate limit or language beyond the schema's own text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('the most-starred GitHub repositories created in the last day, week or month') and contrasts with a named sibling ('use recommend_repos for that'). An agent can distinguish it from compare_repos/recommend_repos without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when NOT to use it ('Not the right tool for picking a dependency, since new repositories have little maintenance history') and names the alternative (recommend_repos). It also explains what each period value selects and when withDownloads adds cost.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Changed
compare_repos1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
recommend_repos1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
trending_repos1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
3 tool updates
- First observed
compare_repos - First observed
recommend_repos - First observed
trending_repos
Related MCP Connectors
Finds real, maintained open-source repos that fit your project. MCP grounding for coding agents.
Trust-check any dependency for agents: OpenSSF Scorecard, licenses, CVEs, deps. 7 ecosystems.
GitHub project health, package dependency risk, trending repos, license & package comparison.
Audit GitHub repos for malicious and supply-chain code before you depend on them.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables AI agents to discover and evaluate GitHub repositories from natural-language feature descriptions, returning ranked adoption-grade candidates with evidence and quality signals.32MIT
- AlicenseNot gradedqualityFmaintenanceOpen source intelligence for AI agents — GitHub project-health scoring, package dependency-risk analysis, trending repositories, license checks, and side-by-side package comparison.MIT
- AlicenseAqualityAmaintenanceDependency intelligence for AI agents. CVE scanning, health checks, upgrade planning.9394 npm2Apache 2.0
- AlicenseNot gradedqualityCmaintenanceDiscover, rank, and compare GitHub repositories from any MCP-compatible AI client. Enables searching, filtering, ranking, and evaluating open-source repositories by topic, language, stars, license, activity, and relevance.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.