npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@axiestudio/tool

v1.2.2

Published

Zero-dependency fetch wrappers that replace MCP servers for AI agent workflows

Readme

@axiestudio/tool

Zero-dependency fetch wrappers that replace MCP servers for AI agent workflows. Every tool shares the same invoke(toolName, args) interface — no installation, no daemon, no config. Just import and call.

Works with Node.js (18+), Bun, Deno, and any runtime that supports fetch and ES modules. Use from Python, Go, or any language via subprocess.

Inspired by Mario Zechner's "What if you don't need MCP?" — the idea that plain fetch wrappers outperform protocol-heavy MCP servers for most AI agent use cases.

Install

npm install @axiestudio/tool   # or bun add / pnpm add / yarn add

Or just copy the .js files you need — they have zero npm dependencies.

Architecture

┌──────────────────────────────────────────────────────────────┐
│  52 Core Tools (zero dependencies — just fetch())            │
│                                                              │
│  context7 · cloudflare-docs · npm · github                   │
│  ar-android-docs · ar-ios-docs                               │
│  astro-docs · drizzle-docs · better-auth-docs · livekit-docs │
│  hono-docs · react-docs · nextjs-docs · zod-docs             │
│  bun-docs · stripe-docs · tanstack-docs · shadcn-docs        │
│  neon-docs · deno-docs · vitest-docs · svelte-docs           │
│  vue-docs · angular-docs · nuxt-docs · clerk-docs            │
│  convex-docs · turso-docs · supabase-docs · prisma-docs      │
│  turborepo-docs · elevenlabs-docs · trpc-docs · solid-docs   │
│  elysia-docs · fastify-docs · effect-docs · xstate-docs      │
│  vite-docs · vercel-docs · payload-docs · resend-docs        │
│  mantine-docs · langchain-docs · nitro-docs                  │
│  panda-css-docs · expo-docs · zustand-docs · storybook-docs  │
│  tauri-docs · rspack-docs · wxt-docs                         │
│                                                              │
│  Works with: node, bun, deno, npx tsx, python (subprocess)   │
├──────────────────────────────────────────────────────────────┤
│  Browser Tools (optional — requires puppeteer-core)           │
│                                                              │
│  browser/start.js · nav.js · eval.js · screenshot.js         │
│  get-text.js · wait.js · scroll.js · links.js · fill.js      │
│  cookies.js · pick.js                                        │
│                                                              │
│  Install: npm install puppeteer-core                          │
├──────────────────────────────────────────────────────────────┤
│  Interactive CLI (optional — requires ink + react)             │
│                                                              │
│  bin/cli.js — terminal UI for exploring all 52 tools          │
│                                                              │
│  Install: npm install ink react                               │
└──────────────────────────────────────────────────────────────┘

Core tools are the 52 .js files in the root. They use only the built-in fetch() API (available in Node 18+, Bun, Deno). No npm install required — copy the files and import.

Browser tools in browser/ connect to Chrome via CDP and require puppeteer-core (~2 MB, no bundled Chromium). Install only if you need browser automation.

Interactive CLI (bin/cli.js) provides a full-screen terminal UI. It requires ink and react. These are listed as optionalDependencies — skip them if you only use the tools programmatically.

Tools

Multi-purpose tools

| Tool | Import | Description | Auth | |------|--------|-------------|------| | context7 | @axiestudio/tool/context7 | Live docs for any library (npm, GitHub, PyPI) | CONTEXT7_API_KEY (optional) | | cloudflare-docs | @axiestudio/tool/cloudflare-docs | Cloudflare developer docs (Workers, KV, D1, R2, AI…) | None | | npm | @axiestudio/tool/npm | npm registry — search, README, metadata, versions, downloads, dependencies | None | | github | @axiestudio/tool/github | GitHub public API — files, dirs, code search, releases, tag comparison | None |

AR docs

| Tool | Import | Description | |------|--------|-------------| | ar-android-docs | @axiestudio/tool/ar-android-docs | Google ARCore + Scene Viewer documentation | | ar-ios-docs | @axiestudio/tool/ar-ios-docs | Apple ARKit documentation |

Framework & runtime docs

| Tool | Import | Description | |------|--------|-------------| | react-docs | @axiestudio/tool/react-docs | React | | nextjs-docs | @axiestudio/tool/nextjs-docs | Next.js | | astro-docs | @axiestudio/tool/astro-docs | Astro | | svelte-docs | @axiestudio/tool/svelte-docs | Svelte & SvelteKit | | vue-docs | @axiestudio/tool/vue-docs | Vue.js | | angular-docs | @axiestudio/tool/angular-docs | Angular | | nuxt-docs | @axiestudio/tool/nuxt-docs | Nuxt | | solid-docs | @axiestudio/tool/solid-docs | SolidJS | | hono-docs | @axiestudio/tool/hono-docs | Hono | | fastify-docs | @axiestudio/tool/fastify-docs | Fastify | | elysia-docs | @axiestudio/tool/elysia-docs | Elysia (Bun) | | trpc-docs | @axiestudio/tool/trpc-docs | tRPC | | nitro-docs | @axiestudio/tool/nitro-docs | Nitro server toolkit | | expo-docs | @axiestudio/tool/expo-docs | Expo (React Native) | | bun-docs | @axiestudio/tool/bun-docs | Bun runtime | | deno-docs | @axiestudio/tool/deno-docs | Deno runtime |

Build & dev tools

| Tool | Import | Description | |------|--------|-------------| | vite-docs | @axiestudio/tool/vite-docs | Vite | | vitest-docs | @axiestudio/tool/vitest-docs | Vitest | | turborepo-docs | @axiestudio/tool/turborepo-docs | Turborepo | | storybook-docs | @axiestudio/tool/storybook-docs | Storybook | | rspack-docs | @axiestudio/tool/rspack-docs | Rspack | | wxt-docs | @axiestudio/tool/wxt-docs | WXT (web extensions) | | tauri-docs | @axiestudio/tool/tauri-docs | Tauri (desktop apps) |

Database & backend

| Tool | Import | Description | |------|--------|-------------| | drizzle-docs | @axiestudio/tool/drizzle-docs | Drizzle ORM | | prisma-docs | @axiestudio/tool/prisma-docs | Prisma ORM | | neon-docs | @axiestudio/tool/neon-docs | Neon serverless Postgres | | supabase-docs | @axiestudio/tool/supabase-docs | Supabase | | turso-docs | @axiestudio/tool/turso-docs | Turso (edge SQLite) | | convex-docs | @axiestudio/tool/convex-docs | Convex | | payload-docs | @axiestudio/tool/payload-docs | Payload CMS |

Auth & payments

| Tool | Import | Description | |------|--------|-------------| | better-auth-docs | @axiestudio/tool/better-auth-docs | Better Auth | | clerk-docs | @axiestudio/tool/clerk-docs | Clerk | | stripe-docs | @axiestudio/tool/stripe-docs | Stripe |

UI & styling

| Tool | Import | Description | |------|--------|-------------| | shadcn-docs | @axiestudio/tool/shadcn-docs | shadcn/ui | | mantine-docs | @axiestudio/tool/mantine-docs | Mantine | | panda-css-docs | @axiestudio/tool/panda-css-docs | Panda CSS |

State management & data

| Tool | Import | Description | |------|--------|-------------| | tanstack-docs | @axiestudio/tool/tanstack-docs | TanStack (Query, Router, Table) | | zustand-docs | @axiestudio/tool/zustand-docs | Zustand | | zod-docs | @axiestudio/tool/zod-docs | Zod | | xstate-docs | @axiestudio/tool/xstate-docs | XState | | effect-docs | @axiestudio/tool/effect-docs | Effect |

AI & APIs

| Tool | Import | Description | |------|--------|-------------| | langchain-docs | @axiestudio/tool/langchain-docs | LangChain JS | | vercel-docs | @axiestudio/tool/vercel-docs | Vercel platform | | livekit-docs | @axiestudio/tool/livekit-docs | LiveKit | | elevenlabs-docs | @axiestudio/tool/elevenlabs-docs | ElevenLabs | | resend-docs | @axiestudio/tool/resend-docs | Resend (email API) |

Browser automation

| Tool | Import | Description | Dependencies | |------|--------|-------------|-------------| | browser/* | CLI scripts | CDP browser automation | puppeteer-core |


Runtime Compatibility

# Node.js (18+)
node --input-type=module -e "import { invoke } from './npm.js'; ..."

# Bun
bun -e "import { invoke } from './npm.js'; ..."

# Deno
deno run --allow-net npm.js

# Python (via subprocess)
import subprocess
result = subprocess.run(["node", "--input-type=module", "-e",
    "import { invoke } from './npm.js'; const r = await invoke('search', { query: 'hono' }); console.log(JSON.stringify(r));"
], capture_output=True, text=True)
print(result.stdout)

Usage

Docs tools (48 tools — all share the same interface)

All documentation tools expose three commands: get-index, get-page, and search-docs.

import { invoke } from "@axiestudio/tool/hono-docs"; // swap for any docs tool

// List all available doc pages
const { index }    = await invoke("get-index");

// Fetch a specific page as Markdown
const { markdown } = await invoke("get-page", { path: "/docs/getting-started" });

// Search across all docs
const { result }   = await invoke("search-docs", { query: "middleware" });

This same pattern works for all 48 docs tools:

import { invoke } from "@axiestudio/tool/react-docs";
import { invoke } from "@axiestudio/tool/vite-docs";
import { invoke } from "@axiestudio/tool/prisma-docs";
import { invoke } from "@axiestudio/tool/stripe-docs";
// ... any of the 48 docs tools

Note: cloudflare-docs has a slightly different interface — it uses list-products instead of get-index, and search-docs takes a product parameter. See below.


Context7 — live library docs (two-step)

import { invoke } from "@axiestudio/tool/context7";

// Step 1: resolve library ID (always required)
const id = await invoke("resolve-library-id", { libraryName: "hono" });

// Step 2: fetch docs for a topic
const docs = await invoke("get-library-docs", { libraryId: id, topic: "middleware" });

Set CONTEXT7_API_KEY for higher rate limits. Works without it on the free tier.


Cloudflare Docs

import { invoke } from "@axiestudio/tool/cloudflare-docs";

const { products } = await invoke("list-products");
const { markdown } = await invoke("get-page", { path: "/workers/runtime-apis/kv/" });
const { result }   = await invoke("search-docs", { product: "d1", query: "migrations" });

npm Registry

import { invoke } from "@axiestudio/tool/npm";

const results  = await invoke("search", { query: "hono middleware" });
const readme   = await invoke("get-readme", { packageName: "drizzle-orm" });
const info     = await invoke("get-package-info", { packageName: "better-auth" });
const versions = await invoke("get-versions", { packageName: "react" });
const stats    = await invoke("get-downloads", { packageName: "hono" });
const deps     = await invoke("get-dependencies", { packageName: "drizzle-orm" });

GitHub

import { invoke } from "@axiestudio/tool/github";

const { content }  = await invoke("get-file", { owner: "honojs", repo: "hono", path: "src/index.ts" });
const { entries }  = await invoke("list-dir",  { owner: "honojs", repo: "hono", path: "src" });
const { items }    = await invoke("search-code", { query: "DurableObject alarm in:file language:ts" });
const { releases } = await invoke("get-releases", { owner: "cloudflare", repo: "workers-sdk" });
const info         = await invoke("get-repo-info", { owner: "honojs", repo: "hono" });
const diff         = await invoke("compare-tags", { owner: "honojs", repo: "hono", base: "v4.0.0", head: "v4.1.0" });

Browser Automation (CDP)

Minimal Puppeteer Core scripts for scraping and frontend testing. Requires Chrome + puppeteer-core.

# Install the dependency (only needed for browser tools)
npm install puppeteer-core

# Start Chrome on port 9222
node browser/start.js        # or: bun browser/start.js

# Navigate, screenshot, extract text
node browser/nav.js https://example.com
node browser/screenshot.js
node browser/get-text.js '#main'

# Form interaction
node browser/fill.js '#email' [email protected]
node browser/pick.js "Click the submit button"

# Utilities
node browser/eval.js 'document.title'
node browser/wait.js '.loaded' 10
node browser/links.js --json
node browser/cookies.js --curl
node browser/scroll.js bottom --wait 2

All browser scripts use node as the shebang but work equally with bun. If puppeteer-core is not installed, you get a friendly error message with install instructions instead of a cryptic module-not-found crash.

See browser/README.md for the full reference.


Interactive CLI

npx @axiestudio/tool           # interactive explorer (all 52 tools)
npx @axiestudio/tool init      # generate config for your AI agent

The interactive explorer lets you browse all 52 tools, pick commands, fill in parameters, and see results — all from the terminal. The init wizard generates a skill file for your AI agent setup.


Design Philosophy

  • Zero dependencies for core tools — each tool is a single .js file using only the fetch() API built into modern runtimes.
  • Runtime-agnostic — works with Node.js 18+, Bun, Deno, or any ES module runtime with fetch. Use from Python/Go/Rust via subprocess.
  • Same interface everywhereinvoke(toolName, args) works the same across all 52 tools.
  • No MCP, no daemons — just plain HTTP fetch calls. No protocol overhead.
  • Drop-in for agents — copy the .js files next to your project and import directly. No npm required.
  • Optional layers — browser tools need puppeteer-core, interactive CLI needs ink/react. Skip what you don't need.

Environment Variables

| Variable | Used by | Purpose | |----------|---------|---------| | CONTEXT7_API_KEY | context7.js | Bearer token for higher rate limits |

All other tools work without any API keys.


Testing

# Unit tests (810 tests, offline — no network)
node --test test/*.test.mjs

# Live API smoke tests (hits every tool's real endpoint)
node test/_live_test_all.mjs

License

Apache 2.0 — see LICENSE.

Attribution

Browser automation approach inspired by Mario Zechner's blog post on replacing MCP servers with plain CDP scripts.