mcpField
G
godfetch

godfetch

github.com/trancong12102Development751 installsUpdated 6w ago
Repository

About godfetch

godfetch is a skill for developers doing external research on libraries and code repositories. It routes documentation, code, package, and GitHub queries to specialized tools, with fallbacks when a primary source is unavailable.

Key features

  1. 01Routes library documentation queries
  2. 02Searches code across repositories
  3. 03Looks up package versions and status
  4. 04Finds GitHub issues, PRs, and releases
  5. 05Navigates symbols and repository history

Use cases

  1. 01Checking a library API or changelog
  2. 02Finding an identifier across repositories
  3. 03Reviewing package versions or deprecations
  4. 04Inspecting GitHub issues and releases

MCP support

godfetch itself is a skill, not an MCP server. Its routing guide uses the Sourcegraph MCP server for cross-repository search, code navigation, and Git history.

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/trancong12102/agentskills --skill godfetch

After installing, type/godfetchin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
context7.md
deps-dev.md
scripts/
get-versions.py
git-clone.sh
llms-probe.sh

Details

From the project README

godfetch

Unified external research — look up library documentation, search source code in any git repository, and check package versions from a single skill.

Routing

IntentPrimary toolFallback
Library docs, API referencellms-probe → WebFetch llms.txtcontext7 if no llms.txt published
Changelogs, breaking changesllms-probe → WebFetch llms.txtgh api contents for CHANGELOG.md
Cross-repo code search (exact identifier)Sourcegraph MCP keyword_searchgh search code, then git-clone for follow-up
Semantic / concept query in a GitHub-hosted dep ("how does X work in lib Y")mcp__plugin_ora_morph__github_codebase_searchgit-clone if the question keeps branching across files
Concept query across multi-host or GitLab/Bitbucket reposSourcegraph MCP nls_search with 2-5 extracted keywordskeyword_search after picking a literal term
Deep dive in known repo (3+ files)git-clone + shell toolsSourcegraph read_file for one-off reads
GitHub issuesgh issue view <N>gh search issues for discovery
GitHub PRsgh pr view <N>gh search prs for discovery
GitHub releases (versions, dates, notes)gh release view <tag> --repo owner/repogh release list --repo owner/repo for browsing
Single file (known repo + path)Sourcegraph MCP read_filegh api repos/.../contents/<path> (GitHub only)
Symbol navigation (def, references)Sourcegraph go_to_definition / find_referencesgit-clone + ast-grep
Git history / diff search across reposSourcegraph commit_search / diff_search / compare_revisionsgh api /repos/.../commits
Package version, deprecationdeps-devnpm view for npm-only metadata
npm package info (non-version)npm view <pkg> (Bash)WebSearch for community sentiment
General web lookupWebSearch → WebFetch—
Comparison / decisionllms-probe per lib + WebSearchcontext7 for additional snippets

For mixed requests, launch all relevant tools in parallel. Probe and clone are I/O-bound — start them in the background and run WebFetch/context7/WebSearch concurrently to mask latency.

GitHub access rules

Do not use WebFetch on github.com or raw.githubusercontent.com URLs — use the right tool:

GitHub contentUseNever
Source code (exploration)git-clone + shell toolsbrowsing files via gh api contents
Source file (known path)gh api repos/.../contents/<path>WebFetch raw.githubusercontent.com
Issuesgh issue view <N> --repo owner/repoWebFetch github.com/.../issues/N
Pull requestsgh pr view <N> --repo owner/repoWebFetch github.com/.../pull/N
Issue/PR searchgh search issues "q" --repo ...WebFetch github.com/issues?q=...
Releases (versions, dates, notes)gh release view/list --repo owner/repo or gh api repos/.../releasesWebFetch github.com/.../releases — relative timestamps on the HTML get hallucinated into training-era years
CHANGELOG.mdgh api repos/.../contents/CHANGELOG.mdWebFetch blob/ or raw URLs
Search discipline
  • deps-dev for versions: when checking latest version, deprecation, or comparing installed vs latest — always use deps-dev first. Only fall back to npm view or WebSearch if deps-dev errors or the package is private.
  • llms.txt first, context7 fallback: for library docs, run scripts/llms-probe.sh against the docs domain before reaching for context7. Author-published llms.txt has no community-curation lag and no enrichment layer that can hallucinate. Fall back to context7 only when probe returns nothing.

llms.txt — Author-Canonical Library Documentation

Many doc sites publish llms.txt (Markdown index of doc pages) and llms-full.txt (concatenated full content). These are author-published — no enrichment layer, no community-curation lag — so they reflect the deployed docs version exactly. Prefer them over context7 when available.

Step 1: Probe for availability
bash scripts/llms-probe.sh <docs-domain>

Outputs TSV kind \t url \t size for any found files. Probes root + common nested paths (/docs/, /en/), follows redirects, dedupes. Returns non-zero exit if nothing found.

kindMeaning
indexllms.txt — Markdown list of doc page URLs
fullllms-full.txt — entire docs corpus concatenated

Size shows ? when the CDN strips both Content-Length and Content-Range headers (Vercel does this on react.dev) — treat ? as unknown and prefer the index path.

Step 2: Fetch based on what's there
FoundAction
llms-full.txt ≤ ~500 KBWebFetch it directly — single round trip, full corpus
llms-full.txt > ~500 KB or size ?WebFetch llms.txt first, pick relevant section links, fetch those
Only index (no full)WebFetch the index, then fetch individual page links
Probe failedFall back to context7 (next section)

For multi-section pulls, dispatch the page WebFetch calls in parallel.

Known publishers

Confirmed live (April 2026): React (react.dev), Next.js (nextjs.org, content under /docs/), Vercel, Anthropic (docs.anthropic.com → platform.claude.com), Cloudflare (docs.cloudflare.com → developers.cloudflare.com), Supabase, Drizzle (orm.drizzle.team), Hono (hono.dev), Zod (zod.dev), Expo (docs.expo.dev), tRPC (trpc.io), shadcn/ui (ui.shadcn.com). Most Mintlify- and GitBook-hosted docs auto-publish.

Tailwind, most pre-1.0 libraries, and many community packages do not publish — those go straight to context7.

Rules
  • Probe before assuming. Adoption is uneven and paths vary (root vs /docs/ vs redirects). Always run llms-probe.sh and act on the TSV — never hardcode URLs.
  • Watch file size before fetching full. Cloudflare's llms-full.txt is ~46 MB and Supabase reports ? (chunked). A blind fetch of either blows the context window. The 500 KB threshold is a heuristic — adjust to remaining context budget.
  • Index → page chain for big corpora. Treat llms.txt as a routing table: parse section headings, fetch only the page URLs that match the question.

context7 — Library Documentation (Fallback)

Reach for context7 when llms-probe.sh returns nothing — the library doesn't publish llms.txt, or its docs domain isn't reachable. Coverage spans ~33K libraries via community-curated indexes; tradeoff is an enrichment layer that can introduce inaccuracies the author-published llms.txt avoids.

Two-step workflow via the official ctx7 CLI. Requires bunx ctx7@latest login once (no API key env var).

Step 1: Resolve library ID
bunx ctx7@latest library <name> [query]

Lists library candidates with their Context7 IDs (e.g. /websites/react_dev), trust scores, and snippet counts. The optional [query] re-ranks results by relevance — pass it whenever you already know the topic. Add --json for machine-readable output.

Step 2: Fetch documentation
bunx ctx7@latest docs <libraryId> "<query>"

Returns markdown snippets ranked by relevance. Add --json for structured output. If the first answer is shallow or off-topic, retry with --research — it spins up sandboxed agents that read the source repo and run a live web search, at higher cost.

Rules:

  • One-time setup: bunx ctx7@latest login (interactive). Verify with bunx ctx7@latest whoami.
  • Always resolve the library ID first — IDs are not guessable.
  • Write specific queries — "useState hook with objects" beats "hooks". The query drives relevance ranking on both commands.
  • Use --research only as a retry when the default answer was insufficient, not by default — it's slower and more expensive.

Reference: references/context7.md

Sourcegraph — Cross-Repo Search & Code Navigation (MCP)

Sourcegraph public instance exposes an HTTP MCP server at https://sourcegraph.com/.api/mcp providing 13+ tools for cross-repo search, code navigation, and git history. Configured in ora plugin's .mcp.json — tools auto-available to Clio.

Indexes 2M+ OSS repos across GitHub + GitLab + Bitbucket. Sub-second cross-repo queries, no local clone overhead.

Tools by intent:

IntentTool
Search by exact identifier (AND)keyword_search — literal match, ALL terms required. Filters: repo:, file:, lang:, rev:
Search by concept / vocab unknownnls_search — OR logic + word stemming (handler matches handle). NOT semantic embedding
Read single fileread_file — 128KB cap; repo, path, optional revision / startLine / endLine
List directorylist_files
Find reposlist_repos
Symbol navigationgo_to_definition, find_references
Git history / diffscommit_search, diff_search, compare_revisions
Contributor lookupget_contributor_repos
AI synthesis over codebasedeepsearch — heavy; spawns subagents

Rules:

  • Pick keyword_search vs nls_search by what you know. Concrete identifier (function/class/constant name, error string, literal phrase) → keyword_search. Vocab unknown / conceptual ("how does X work", cross-library pattern) → nls_search. Why: keyword_search is AND + literal — missing one term zeroes the result; nls_search is OR + stemming — broader recall but noisier ranking.
  • Extract keywords before nls_search. Strip question words (how, what, where, does, is) and articles. Pass 2-5 meaningful nouns/verbs, not full sentences. Example: "how does the router match incoming requests" → router match request handler. Why: tool stems and OR-matches each term — natural-language fillers dilute the signal.
  • Scope with repo:^...$ anchors to avoid matching forks. repo:foo/bar matches foo/bar-fork too; repo:^github\.com/foo/bar$ does not.
  • Pattern: search → verify path → read_file. When a search result is annotated repo@revision (e.g. github.com/foo/bar@abc123), split it and pass repo + revision separately to read_file. Omitting revision silently reads HEAD of the default branch and may return different content.
  • Parallelize independent searches. Three repos to compare → fire three keyword_search/nls_search calls in one message, not sequentially.
  • Discovery vs forensics — keyword_search / nls_search for "find repos that…"; git-clone for tracing flow through 5+ files in one repo.
  • Index lag — Code published within the last ~24 hours may not be indexed. Fall back to git-clone --refresh for just-released versions.
  • Repo not indexed = fallback — If read_file returns null repository, drop to git-clone or gh api contents.
  • deepsearch is heavy — Spawns AI subagents. Use only when keyword_search + read_file can't synthesize the answer and the target spans multiple repos or non-GitHub hosts. For GitHub-only synthesis use mcp__plugin_ora_morph__github_codebase_search instead — lighter and shaped for the same job.
  • Plan tier caveat — Sourcegraph docs note MCP access is part of Enterprise plans; public sourcegraph.com MCP endpoint's free-tier behavior is unverified. If first tool call returns 401/403, drop to git-clone.

Reference: Sourcegraph MCP docs

Morph github_codebase_search — default for GitHub-hosted semantic queries

mcp__plugin_ora_morph__github_codebase_search runs Morph's WarpGrep subagent against a target public GitHub repo and returns a synthesized answer with file:line citations. Reach for it first when the question is shaped like "how does library X do Y", "where does package Z handle case W", "what's the data flow for feature V in repo R" — one morph call replaces a clone-then-grep-then-read loop.

  • Use when the target repo is on GitHub and the question is conceptual / semantic ("how", "where", "what wires X to Y"). Why: morph parallelizes the per-file grep + read + synthesize the caller would otherwise do serially.
  • Prefer Sourcegraph for: GitLab/Bitbucket targets, multi-repo cross-cutting searches, exact-identifier-with-filter queries (repo:, lang:, rev:), git history / diffs.
  • Prefer git-clone for: 3+ files of follow-up exploration in one repo, ast-grep structural queries, or when the question keeps branching ("now show me where this is called, now show me the test for it").
  • Trust citations, verify conclusions — morph's file:line references point to real locations in the target repo, but its synthesis (what that code does, how it answers the question) can be wrong. When the answer is load-bearing, spot-check via gh api repos/.../contents/<path> or git-clone + Read.

git-clone — Source Code Exploration

Shallow-clone any public git repo into a local cache and explore the working tree with shell tools. Cache lives at ~/.cache/clio-repos/ and is reused across sessions.

bash scripts/git-clone.sh <repo> [--branch X] [--refresh]

The script echoes the absolute path of the cached clone. Subsequent calls for the same repo return the cached path instantly (no re-clone).

Repo argument forms:

  • owner/repo — GitHub shortcut (e.g. vercel/next.js)
  • Full HTTPS URL — works for any host (https://gitlab.com/..., https://gitlab.jmango360.com/...)
  • SSH form — git@host:path (requires SSH key configured)

Parallelization: clone is I/O-bound (1-3s for small/medium repos). When researching a topic that needs both docs and source code, dispatch the clone and llms-probe/context7/WebSearch in parallel — by the time docs return, the clone is ready to explore.

Rules:

  • Do not read script source code. Run with --help for usage.
  • Default cache is ~/.cache/clio-repos/; override with --cache-dir when needed.
  • Caches are reused — pass --refresh only when you need the latest commit.
  • For one-off file fetches by exact path, prefer gh api repos/.../contents/<path> — no clone overhead.

deps-dev — Package Versions

Query latest stable versions from public registries. No API key needed.

python3 scripts/get-versions.py <system> <pkg1> [pkg2] ...

Supported ecosystems:

EcosystemSystem IDExample
npmnpmexpress, @types/node
PyPIpypirequests, django
Gogogithub.com/gin-gonic/gin
Cargocargoserde, tokio
Mavenmavenorg.springframework:spring-core
NuGetnugetNewtonsoft.Json
RubyGemsrubygemsrails, sidekiq

Output: TSV with columns package, version, published, status.

Rules:

  • Do not read script source code. Run directly or use --help.
  • Batch lookups when possible — pass multiple package names in one call.
  • Flag deprecated packages — if status says deprecated, suggest an alternative.

Reference: references/deps-dev.md

Comments

Markdown supported