Ask an agent how to wire middleware in the current Next.js and it will answer with total confidence, out of a snapshot of the documentation taken before the API changed shape. It does not know it is guessing. The fix is to stop it guessing: give it a way to fetch the real docs, and a way to run a real web search.
The trap is that most of what is on offer is a thin set of instructions wrapped around the same four commercial services — Context7 for library documentation, Exa and Tavily for search, Firecrawl for page extraction. Install three and you get three sets of instructions pointed at one API, three ways to burn one quota, and no capability you did not already have. What separates a skill worth installing is not the wrapper. It is the operating knowledge around it — the behaviour the API reference does not print. The sharpest Context7 skill on that measure has five stars, and it reframes a rule that both it and the vendor's own 59,866-star skill hand to your agent.
Top picks
| skill | publisher | license | verdict | updated |
|---|---|---|---|---|
| find-docs | upstash | MIT | the default; take the vendor's own | 2026-07-25 |
| lookup | melodic-software | MIT | best wrapper: tracks its own upstream | 2026-07-28 |
| context7 | julianobarbosa | MIT | best failure-mode documentation | 2026-07-22 |
| search-tips | malob | MIT | technique, not a binding | 2026-07-26 |
| exa-search | mxyhi | Apache-2.0 | pins the schema it was tested against | 2026-07-23 |
| tavily-research | tavily-ai | MIT | cited reports, not link lists | 2026-06-04 |
| find-docs | sammcj | Apache-2.0 | same workflow, no query-shape guidance | 2026-07-27 |
Documentation lookup: start with Upstash's own
find-docs is two commands. ctx7 library turns a name into a /org/project id; ctx7 docs queries that id. The default path runs both through npx ctx7@latest, so you get the current CLI without needing a global install — a bare ctx7 is offered as an option, not the recommendation. The instructions are unusually careful about query shape: use the library's real punctuation ("Next.js", not "nextjs"), keep one topic per query — it splits "routing and auth and caching" into separate calls rather than diluting the ranking — and never put credentials in a query, because the query reaches Context7's servers.
The best part is the failure path. On a quota error the agent must say Context7 was skipped instead of quietly answering from training data. The weak part is the ceiling it sets: no more than three calls per question, stated as a rule with no reasoning attached.
Wrappers: melodic-software's lookup is the one that stays honest
lookup solves the problem wrappers create. Its frontmatter records the upstream it was copied from and the date it was synced, and it ships an update script that pulls Upstash's current find-docs/SKILL.md and the CLI SKILL.md beside it, diffs them against vendored baselines, and reports the new upstream guidance for a human to merge. It refuses to overwrite the local additions, and those additions earn their keep: a CLI-versus-MCP decision table (pipe to jq and dump to disk on the CLI side; roughly 1.8× more content per call on the MCP side) and the Windows Git Bash bug where ctx7 docs /org/project gets path-mangled into a path under Program Files unless you prefix MSYS_NO_PATHCONV=1.
It also tells you not to install a second Context7 surface beside it, because two surfaces fragment lookups and drift apart on separate schedules. That warning is the whole argument of this piece, written by someone who maintains one.
Gotchas: julianobarbosa's context7 writes down what breaks
context7 carries six numbered API behaviours that cost someone real time. The resolver is a fuzzy, ranked matcher, so a narrow context query can promote a fork above the official repository — inspect the top match before using it. A bare library id resolves to whatever Context7 currently treats as latest stable, which can hand back Next 13 documentation when you asked about the app router; pin the version at major boundaries. Snippet truncation is silent, so re-query rather than invent a symbol an example never defines — and it says outright that its own "max 3 calls per question" tip is a defensive ceiling on the model rather than the API's real budget, so set the key.
The cost is weight: you bun install a TypeScript toolchain inside the skill directory, and a 24-hour disk cache of resolved ids can go stale after a repository rename until you pass --no-cache. In exchange the CLIs return typed exit codes — auth, not-found, rate-limit and timeout each get their own — so a caller can branch on a failure without parsing the message.
Research: malob's search-tips is technique, not a binding
search-tips is not an API wrapper at all. It is accumulated method for Exa, the Firecrawl CLI and Reddit, and it has opinions: default Exa to highlights with textMaxCharacters: 1 so you get quoted passages instead of a context flood; write long, specific questions, because a semantic index rewards them and keyword lists confuse it; scrape with --only-main-content, then retry without it, because that flag is known to swallow article bodies on Future plc sites, Blogspot and GDPR-heavy pages. It even has a query-reformulation table — paraphrase, decompose, scope shift, perspective shift, temporal framing.
Two operational facts in it are worth the install on their own: a failed call in a parallel group drags its siblings down with it, so retry individually, and Firecrawl cannot scrape Reddit, so route those reads elsewhere. It does assume Exa, Firecrawl and Reddit tooling are already wired up.
Search APIs: mxyhi's exa-search pins the schema
exa-search records the exact Exa MCP server commit and npm version it was verified against, down to a tarball checksum, and then does something rare: it keeps a standing list of the tools that are deprecated but still answering. get_code_context_exa, company_research_exa, people_search_exa, crawling_exa, deep_search_exa and the deep-researcher pair are all named with their current replacement, and the entry for deep_search_exa adds that the hosted endpoint now wants OAuth or an API key when you ask for it. It also warns that the simple search tool accepts only query and numResults on the current hosted schema — the extra knobs belong to the advanced variant.
The trade is that there is no client. You speak to the hosted MCP endpoint over HTTP: initialize, keep the session header, call the tool, parse JSON out of data: lines. The skill supplies shell helpers, but this is the pick that most expects you in a terminal. Read it next to search-tips, which still recommends parameters this one marks deprecated — when two good skills disagree about a schema, believe the one that pinned a version.
Reports: tavily-ai's tavily-research when you need citations
tavily-research is for when the deliverable is a written, sourced answer rather than a list of links. It drives the tvly CLI: one command returns a synthesized report with citations, mini for a single scoped question at around 30 seconds, pro for multi-angle comparisons at roughly 60 to 120. --output-schema forces the result into your own JSON shape, --citation-format switches between numbered, MLA, APA and Chicago, and --no-wait hands back a request id you can poll.
The caveat is packaging. It is one step in a chain and expects its siblings: it hands you a one-line installer for tvly, then points at a companion CLI skill for the other install and auth routes, slots itself into that skill's search-to-research chain as the last link, and instructs the agent not to substitute another tool when tvly is missing. Install the directory, not the file.
How do you tell which skill you are actually holding?
By reading the body, because names are not namespaced. The name is only the topic; the publisher and the body are the identity.
A skill called find-docs can be any of several documents describing the same two-step Context7 workflow, and the difference never shows in the name. Upstash's tells the agent to use the library's real punctuation and to split multi-topic questions; sammcj's carries neither refinement and opens by telling the agent to run pnpx ctx7@latest while every example beneath it is a bare ctx7; melodic-software's find-docs leads with a global npm install and offers the throwaway runner second. Same name, same backend, different levels of care.
The name context7 stretches further. It can be a TypeScript toolchain you install with Bun, as julianobarbosa's is. It can be a procedure for calling two MCP tools, as context7-mcp is. Or it can be a shell wrapper over the REST API for machines where no MCP server is configured, as netresearch's is — search for the id, then fetch, choosing whether what comes back is reference material or an explanation.
And the differences run in both directions, which is the part people miss. Klavis-AI's documentation-lookup and Upstash's MCP version are the same four-step procedure almost word for word, except the vendor's adds the instruction to split multi-topic questions. affaan-m's is the same procedure again and carries something neither of those two has: redact API keys, passwords and tokens from the query before it leaves for Context7. The version that is not the vendor's is not automatically the thinner one — but you only find out by reading it.
What to check before you install
Who are you actually signing up with. A skill named after a vendor does not mean you get an account with that vendor. gooseworks-ai's web-search-tavily is Tavily reached through a broker: it reads a credentials file written by npx gooseworks login and POSTs every call to a proxy endpoint that forwards to the API. That may be exactly what you want — one key across many services — but it is a different trust boundary from a Tavily key in your own environment. Check the setup block before the feature list. Two of its curl examples are also malformed, closing the JSON body before the query is added, so expect to fix them by hand.
Whether the skill ships the files it needs. tavily-best-practices is a routing page whose actual depth sits in six reference documents it links to — search, extract, crawl, research, SDK and integrations. Copy the SKILL.md on its own and you have a page of dead links. andrewyng's version carries identical prose with provenance metadata added: a revision number, an updated-on date, a marker that the content came from the maintainer. That is more than most pages tell you, and it is still only a stamp on this page — it records when the text was last revised, not that anything was pulled from upstream since.
Whether it tells you what it sends. K-Dense-AI's exa-search is the rare one that discloses its own instrumentation: every script sets an integration header so Exa can attribute the traffic to that repository, and the skill asks you not to remove it. Benign, and disclosed — which is more than most wrappers manage. It also has the strongest academic path, biasing retrieval with a research-paper category plus a scholarly domain allowlist, and declaring its Python dependencies inline so uv run needs no separate install.
What to actually install
The agent confidently inventing an API it last saw in training is fixed by one good lookup path, not three. Pick the interface you already run — shell or MCP — and let the vendor's own skill be the default. Then add exactly one thing beside it, and make it a skill that carries knowledge rather than another wrapper: melodic-software's lookup if you want the copy to stay honest about its upstream, julianobarbosa's if you want the failure modes written down before you hit them.
For research rather than lookup, the split is clean. search-tips is the method, mxyhi's exa-search is the schema of record, and tavily-research is the one that hands back something citable. What you have avoided is the move that looks like diligence and is not: three skills, one API, one quota, and three different sets of stale advice about how to call it.
More skills worth a look
context7-cli brings three core capabilities to your workflow: retrieve up-to-date documentation for any library, install and manage AI coding skills, and configure Context7 MCP integration with your editor. Use it when your training data may be stale, you need to verify API signatures, or you're setting up Context7 for Claude Code, Cursor, or OpenCode.
context7-docscontext7-docs pulls up-to-date documentation and working code examples for any library, framework, SDK, CLI tool, or cloud service directly into your workflow. Use it whenever you need API syntax, configuration details, version migration help, or setup instructions—especially for rapidly evolving tools where training data lags behind. The skill includes tools to resolve library identifiers and query documentation by concept, keeping you current without relying on potentially stale training data.
Firecrawl SearchFirecrawl Search performs web searches and returns results with optional full-page content extraction in markdown format. Use it to find pages, answer questions, discover sources, or research topics—going beyond snippet-only results. Supports filtering by source type, time range, location, and category.
Firecrawl ScrapeFirecrawl Scrape converts web pages into clean, LLM-ready markdown—whether static or dynamically rendered with JavaScript. It handles single URLs or batch scraping with concurrent processing, and offers filtering options like main-content-only extraction and PII redaction.
Firecrawl InteractFirecrawl Interact lets you control a live browser on any scraped page using natural language or code—click elements, submit forms, handle pagination, and navigate multi-step flows. Use it when basic scraping fails due to JavaScript interactions, or when you need to log in, fill out forms, or traverse complex navigation patterns.
firecrawl-scraperFirecrawl Web Scraper turns website content into structured markdown optimized for AI models. It handles dynamic JavaScript rendering, bypasses bot protection, and supports single-page scraping, full-site crawling, URL discovery, and schema-based data extraction.
TavilyTavily offers three complementary tools for AI-powered research: basic web search for quick lookups, advanced search with depth control and domain filtering, and content extraction from specific URLs. Choose the right tool based on your needs—start with simple search and escalate to extraction when you need full page content or targeted information.
tavily-searchTavily Search queries the entire web and returns ranked results with relevance scores and optional AI-generated answers in one call. Unlike single-URL fetching, it powers research workflows, competitive analysis, and "what's the latest" questions with configurable search depth, time ranges, and content extraction across multiple pages.
exa-researchExa Research performs neural web search that understands meaning rather than keywords, offering four distinct actions: find relevant URLs by topic, get cited answers to factual questions, fetch full text from web pages, and discover similar sites. Each call costs $0.012, with content retrieval billed per URL.
exa-web-search-freeExa Web Search (Free) provides neural search across the web, code repositories, and company profiles without API authentication. Query current news and information, discover code examples from GitHub and Stack Overflow, or gather business intelligence on companies using three core search tools.
openalexOpenAlex Academic Search lets you query a comprehensive open citation graph covering 250M+ works with institutional affiliations, funding sources, and rich metadata. Filter by year, publication type, open access status, and citation count, then sort by relevance, citations, or date.
arxivarxiv lets you search the arXiv repository by keyword or paper ID, then download full PDFs and view complete metadata including authors, abstract, and publication date. Results display in a sortable table format, and papers can be saved to a local directory for offline access.
deep-researchDeep Research breaks down complex queries into atomic sub-questions, then systematically crawls multiple sources, extracts verifiable claims, and resolves contradictions. The skill delivers structured reports with confidence scoring, source attribution, and explicit gap flagging—ensuring every finding is traceable and conflicts are surfaced rather than hidden.
deep-researchDeep Research pulls together information from multiple web sources to build comprehensive, cited reports. It breaks topics into focused sub-questions, searches across available tools, reads key sources in depth, and synthesizes findings into structured reports with full attribution. Ideal for competitive analysis, due diligence, market sizing, or any investigation requiring evidence-backed conclusions.
parallel-webParallel Web unifies web intelligence workflows through multiple capabilities: search for current information and research topics, extract content from specific URLs, enrich datasets with web-sourced fields, discover entities by criteria, run exhaustive multi-source reports, and set up recurring web monitoring. Route requests to the right capability based on your need.