diff --git a/docs/mint.json b/docs/mint.json
index fbe6bdd47..eba4c0a39 100644
--- a/docs/mint.json
+++ b/docs/mint.json
@@ -53,7 +53,38 @@
},
{
"group": "Tools",
- "pages": ["tools/bing", "tools/weather"]
+ "pages": [
+ "tools/bing",
+ "tools/calculator",
+ "tools/clearbit",
+ "tools/dexa",
+ "tools/diffbot",
+ "tools/e2b",
+ "tools/exa",
+ "tools/firecrawl",
+ "tools/hacker-news",
+ "tools/hunter",
+ "tools/jina",
+ "tools/midjourney",
+ "tools/novu",
+ "tools/people-data-labs",
+ "tools/perigon",
+ "tools/polygon",
+ "tools/predict-leads",
+ "tools/proxycurl",
+ "tools/searxng",
+ "tools/serpapi",
+ "tools/serper",
+ "tools/slack",
+ "tools/social-data",
+ "tools/tavily",
+ "tools/twilio",
+ "tools/twitter",
+ "tools/weather",
+ "tools/wikidata",
+ "tools/wikipedia",
+ "tools/wolfram-alpha"
+ ]
}
],
"footerSocials": {
diff --git a/docs/tools/calculator.mdx b/docs/tools/calculator.mdx
new file mode 100644
index 000000000..d5fb8f510
--- /dev/null
+++ b/docs/tools/calculator.mdx
@@ -0,0 +1,35 @@
+---
+title: Calculator
+description: A simple calculator tool.
+---
+
+- package: `@agentic/calculator`
+- exports: `function calculator`
+- env vars: _none_
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/calculator/src/calculator.ts)
+- [api docs](https://mathjs.org)
+
+## Install
+
+
+```bash npm
+npm install @agentic/calculator
+```
+
+```bash yarn
+yarn add @agentic/calculator
+```
+
+```bash pnpm
+pnpm add @agentic/calculator
+```
+
+
+
+## Usage
+
+```ts
+import { calculator } from '@agentic/calculator'
+
+const res = await calculator({ expr: '1 + 1' })
+```
diff --git a/docs/tools/clearbit.mdx b/docs/tools/clearbit.mdx
new file mode 100644
index 000000000..6ed6f1a11
--- /dev/null
+++ b/docs/tools/clearbit.mdx
@@ -0,0 +1,36 @@
+---
+title: Clearbit
+description: Resolving and enriching people and company data.
+---
+
+- package: `@agentic/clearbit`
+- exports: `class ClearbitClient`, `namespace clearbit`
+- env vars: `CLEARBIT_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/clearbit/src/clearbit-client.ts)
+- [api docs](https://dashboard.clearbit.com/docs)
+
+## Install
+
+
+```bash npm
+npm install @agentic/clearbit
+```
+
+```bash yarn
+yarn add @agentic/clearbit
+```
+
+```bash pnpm
+pnpm add @agentic/clearbit
+```
+
+
+
+## Usage
+
+```ts
+import { ClearbitClient } from '@agentic/clearbit'
+
+const clearbit = new ClearbitClient()
+const res = await clearbit.companyEnrichment({ domain: 'apple.com' })
+```
diff --git a/docs/tools/dexa.mdx b/docs/tools/dexa.mdx
new file mode 100644
index 000000000..273a15b1f
--- /dev/null
+++ b/docs/tools/dexa.mdx
@@ -0,0 +1,41 @@
+---
+title: Dexa
+description: Answers questions from the world's best podcasters.
+---
+
+
+ The [Dexa](https://dexa.ai) API is currently only available as a closed beta.
+
+
+- package: `@agentic/dexa`
+- exports:
+ - `class DexaClient`, `namespace dexa`
+ - `class ScraperClient`, `namespace scraper`
+- env vars: `DEXA_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/dexa/src/dexa-client.ts)
+
+## Install
+
+
+```bash npm
+npm install @agentic/dexa
+```
+
+```bash yarn
+yarn add @agentic/dexa
+```
+
+```bash pnpm
+pnpm add @agentic/dexa
+```
+
+
+
+## Usage
+
+```ts
+import { DexaClient } from '@agentic/dexa'
+
+const dexa = new DexaClient()
+const res = await dexa.search('latest news')
+```
diff --git a/docs/tools/diffbot.mdx b/docs/tools/diffbot.mdx
new file mode 100644
index 000000000..dcdce9afc
--- /dev/null
+++ b/docs/tools/diffbot.mdx
@@ -0,0 +1,38 @@
+---
+title: Diffbot
+description: Diffbot API client.
+---
+
+Diffbot provides web page classification and scraping. It also provides access to a knowledge graph with the ability to perform person and company data enrichment.
+
+- package: `@agentic/diffbot`
+- exports: `class DiffbotClient`, `namespace diffbot`
+- env vars: `DIFFBOT_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/diffbot/src/diffbot-client.ts)
+- [api docs](https://docs.diffbot.com)
+
+## Install
+
+
+```bash npm
+npm install @agentic/diffbot
+```
+
+```bash yarn
+yarn add @agentic/diffbot
+```
+
+```bash pnpm
+pnpm add @agentic/diffbot
+```
+
+
+
+## Usage
+
+```ts
+import { DiffbotClient } from '@agentic/diffbot'
+
+const diffbot = new DiffbotClient()
+const res = await diffbot.analyzeUrl('https://example.com')
+```
diff --git a/docs/tools/e2b.mdx b/docs/tools/e2b.mdx
new file mode 100644
index 000000000..ac11114d8
--- /dev/null
+++ b/docs/tools/e2b.mdx
@@ -0,0 +1,37 @@
+---
+title: E2B
+description: Hosted Python code interpreter sandbox.
+---
+
+Hosted Python code intrepreter sandbox which is really useful for data analysis, flexible code execution, and advanced reasoning on-the-fly.
+
+- package: `@agentic/e2b`
+- exports: `function e2b`
+- env vars: `E2B_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/e2b/src/e2b.ts)
+- [api docs](https://e2b.dev)
+
+## Install
+
+
+```bash npm
+npm install @agentic/e2b @e2b/code-interpreter
+```
+
+```bash yarn
+yarn add @agentic/e2b @e2b/code-interpreter
+```
+
+```bash pnpm
+pnpm add @agentic/e2b @e2b/code-interpreter
+```
+
+
+
+## Usage
+
+```ts
+import { e2b } from '@agentic/e2b'
+
+const res = await e2b({ code: 'print("Hello, World")' })
+```
diff --git a/docs/tools/exa.mdx b/docs/tools/exa.mdx
new file mode 100644
index 000000000..20605be45
--- /dev/null
+++ b/docs/tools/exa.mdx
@@ -0,0 +1,36 @@
+---
+title: Exa
+description: Web search tailored for LLMs.
+---
+
+- package: `@agentic/exa`
+- exports: `class ExaClient`, `namespace exa`
+- env vars: `EXA_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/exa/src/exa-client.ts)
+- [api docs](https://docs.exa.ai)
+
+## Install
+
+
+```bash npm
+npm install @agentic/exa
+```
+
+```bash yarn
+yarn add @agentic/exa
+```
+
+```bash pnpm
+pnpm add @agentic/exa
+```
+
+
+
+## Usage
+
+```ts
+import { ExaClient } from '@agentic/exa'
+
+const exa = new ExaClient()
+const res = await exa.search('latest news')
+```
diff --git a/docs/tools/firecrawl.mdx b/docs/tools/firecrawl.mdx
new file mode 100644
index 000000000..dca9677ca
--- /dev/null
+++ b/docs/tools/firecrawl.mdx
@@ -0,0 +1,38 @@
+---
+title: Firecrawl
+description: Website scraping and structured data extraction.
+---
+
+Turn websites into LLM-ready data. Crawl and convert any website into clean markdown or structured data.
+
+- package: `@agentic/firecrawl`
+- exports: `class FirecrawlClient`, `namespace firecrawl`
+- env vars: `FIRECRAWL_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/firecrawl/src/firecrawl-client.ts)
+- [api docs](https://www.firecrawl.dev)
+
+## Install
+
+
+```bash npm
+npm install @agentic/firecrawl
+```
+
+```bash yarn
+yarn add @agentic/firecrawl
+```
+
+```bash pnpm
+pnpm add @agentic/firecrawl
+```
+
+
+
+## Usage
+
+```ts
+import { FirecrawlClient } from '@agentic/firecrawl'
+
+const firecrawl = new FirecrawlClient()
+const res = await firecrawl.scrapeUrl('https://example.com')
+```
diff --git a/docs/tools/hacker-news.mdx b/docs/tools/hacker-news.mdx
new file mode 100644
index 000000000..904ecd4d5
--- /dev/null
+++ b/docs/tools/hacker-news.mdx
@@ -0,0 +1,38 @@
+---
+title: HackerNews
+description: Basic client for the official Hacker News API.
+---
+
+Note that the [HN Algolia API](https://hn.algolia.com/api) seems to no longer be available, so we can't add search without quite a bit of overhead.
+
+- package: `@agentic/hacker-news`
+- exports: `class HackerNewsClient`, `namespace hackernews`
+- env vars: `HACKER_NEWS_API_USER_AGENT` (_optional_)
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/hacker-news/src/hacker-news-client.ts)
+- [api docs](https://github.com/HackerNews/API)
+
+## Install
+
+
+```bash npm
+npm install @agentic/hacker-news
+```
+
+```bash yarn
+yarn add @agentic/hacker-news
+```
+
+```bash pnpm
+pnpm add @agentic/hacker-news
+```
+
+
+
+## Usage
+
+```ts
+import { HackerNewsClient } from '@agentic/hacker-news'
+
+const hn = new HackerNewsClient()
+const res = await hn.getTopStories()
+```
diff --git a/docs/tools/hunter.mdx b/docs/tools/hunter.mdx
new file mode 100644
index 000000000..d9d86c5c3
--- /dev/null
+++ b/docs/tools/hunter.mdx
@@ -0,0 +1,41 @@
+---
+title: Hunter
+description: Email finder, verifier, and enrichment.
+---
+
+- package: `@agentic/hunter`
+- exports: `class HunterClient`, `namespace hunter`
+- env vars: `HUNTER_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/hunter/src/hunter-client.ts)
+- [api docs]()
+
+## Install
+
+
+```bash npm
+npm install @agentic/hunter
+```
+
+```bash yarn
+yarn add @agentic/hunter
+```
+
+```bash pnpm
+pnpm add @agentic/hunter
+```
+
+
+
+## Usage
+
+```ts
+import { HunterClient } from '@agentic/hunter'
+
+const hunter = new HunterClient()
+const res0 = await hunter.domainSearch('apple.com')
+const res1 = await hunter.emailFinder({
+ domain: 'transitivebullsh.it',
+ first_name: 'travis',
+ last_name: 'fischer'
+})
+```
diff --git a/docs/tools/jina.mdx b/docs/tools/jina.mdx
new file mode 100644
index 000000000..5932b7e79
--- /dev/null
+++ b/docs/tools/jina.mdx
@@ -0,0 +1,45 @@
+---
+title: Jina
+description: URL scraper and web search
+---
+
+LLM-friendly URL reader and search client by [Jina AI](https://jina.ai/reader) with a basic free tier.
+
+- package: `@agentic/jina`
+- exports: `class JinaClient`, `namespace jina`
+- env vars: `JINA_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/jina/src/jina-client.ts)
+- [api docs](https://jina.ai/reader)
+
+## Install
+
+
+```bash npm
+npm install @agentic/jina
+```
+
+```bash yarn
+yarn add @agentic/jina
+```
+
+```bash pnpm
+pnpm add @agentic/jina
+```
+
+
+
+## Usage
+
+```ts
+import { JinaClient } from '@agentic/jina'
+
+const jina = new JinaClient()
+const res0 = await jina.readUrl('https://example.com')
+const res1 = await jina.search({ query: 'latest news', json: true })
+```
+
+## Notes
+
+- Does not support "stream mode".
+- Results default to markdown text format.
+- To return JSON (especially useful for `search`), set `json: true` in the options.
diff --git a/docs/tools/midjourney.mdx b/docs/tools/midjourney.mdx
new file mode 100644
index 000000000..ddc1e1f91
--- /dev/null
+++ b/docs/tools/midjourney.mdx
@@ -0,0 +1,38 @@
+---
+title: Midjourney
+description: Unofficial Midjourney API client for generative images.
+---
+
+- package: `@agentic/midjourney`
+- exports: `class MidjourneyClient`, `namespace midjourney`
+- env vars: `MIDJOURNEY_IMAGINE_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/midjourney/src/midjourney-client.ts)
+- [api docs](https://www.imagineapi.dev)
+
+## Install
+
+
+```bash npm
+npm install @agentic/midjourney
+```
+
+```bash yarn
+yarn add @agentic/midjourney
+```
+
+```bash pnpm
+pnpm add @agentic/midjourney
+```
+
+
+
+## Usage
+
+```ts
+import { MidjourneyClient } from '@agentic/midjourney'
+
+const midjourney = new MidjourneyClient()
+const res = await midjourney.imagine({
+ prompt: 'beautiful sunset over the ocean, oil painting, monet'
+})
+```
diff --git a/docs/tools/novu.mdx b/docs/tools/novu.mdx
new file mode 100644
index 000000000..633fdf6fb
--- /dev/null
+++ b/docs/tools/novu.mdx
@@ -0,0 +1,38 @@
+---
+title: Novu
+description: Novu API client.
+---
+
+The [Novu API](https://novu.co) provides a router for sending notifications across different channels like Email, SMS, Chat, In-App, and Push.
+
+- package: `@agentic/novu`
+- exports: `class NovuClient`, `namespace novu`
+- env vars: `NOVU_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/novu/src/novu-client.ts)
+- [api docs](https://novu.co)
+
+## Install
+
+
+```bash npm
+npm install @agentic/novu
+```
+
+```bash yarn
+yarn add @agentic/novu
+```
+
+```bash pnpm
+pnpm add @agentic/novu
+```
+
+
+
+## Usage
+
+```ts
+import { NovuClient } from '@agentic/novu'
+
+const novu = new NovuClient()
+const res = await novu.search('latest news')
+```
diff --git a/docs/tools/people-data-labs.mdx b/docs/tools/people-data-labs.mdx
new file mode 100644
index 000000000..7da9f00dc
--- /dev/null
+++ b/docs/tools/people-data-labs.mdx
@@ -0,0 +1,45 @@
+---
+title: People Data Labs
+description: People & company data enrichment.
+---
+
+
+ People Data Labs tends to be more expensive than other similar data proviers.
+ The author recommends you stay away from them.
+
+
+- package: `@agentic/people-data-labs`
+- exports: `class PeopleDataLabsClient`, `namespace peopledatalabs`
+- env vars: `PEOPLE_DATA_LABS_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/people-data-labs/src/people-data-labs-client.ts)
+- [api docs](https://www.peopledatalabs.com)
+
+## Install
+
+
+```bash npm
+npm install @agentic/people-data-labs
+```
+
+```bash yarn
+yarn add @agentic/people-data-labs
+```
+
+```bash pnpm
+pnpm add @agentic/people-data-labs
+```
+
+
+
+## Usage
+
+```ts
+import { PeopleDataLabsClient } from '@agentic/people-data-labs'
+
+const pdl = new PeopleDataLabsClient()
+const res = await pdl.companyLookup({
+ query: {
+ website: 'apple.com'
+ }
+})
+```
diff --git a/docs/tools/perigon.mdx b/docs/tools/perigon.mdx
new file mode 100644
index 000000000..ca42ecf61
--- /dev/null
+++ b/docs/tools/perigon.mdx
@@ -0,0 +1,44 @@
+---
+title: Perigon
+description: Real-time news API.
+---
+
+Real-time news API and web content data from 140,000+ sources. Structured and enriched by AI, primed for LLMs.
+
+- search news articles
+- search news stories (clusters of related news articles)
+- search people, companies, topics, and journalists
+
+- package: `@agentic/perigon`
+- exports: `class PerigonClient`, `namespace perigon`
+- env vars: `PERIGON_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/perigon/src/perigon-client.ts)
+- [api docs](https://www.goperigon.com/products/news-api)
+
+## Install
+
+
+```bash npm
+npm install @agentic/perigon
+```
+
+```bash yarn
+yarn add @agentic/perigon
+```
+
+```bash pnpm
+pnpm add @agentic/perigon
+```
+
+
+
+## Usage
+
+```ts
+import { PerigonClient } from '@agentic/perigon'
+
+const perigon = new PerigonClient()
+const res = await perigon.searchArticles({
+ q: '"elon musk" AND tesla'
+})
+```
diff --git a/docs/tools/polygon.mdx b/docs/tools/polygon.mdx
new file mode 100644
index 000000000..80176095e
--- /dev/null
+++ b/docs/tools/polygon.mdx
@@ -0,0 +1,36 @@
+---
+title: Polygon
+description: Stock market and company financial data.
+---
+
+- package: `@agentic/polygon`
+- exports: `class PolygonClient`, `namespace polygon`
+- env vars: `POLYGON_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/polygon/src/polygon-client.ts)
+- [api docs](https://polygon.io/docs)
+
+## Install
+
+
+```bash npm
+npm install @agentic/polygon
+```
+
+```bash yarn
+yarn add @agentic/polygon
+```
+
+```bash pnpm
+pnpm add @agentic/polygon
+```
+
+
+
+## Usage
+
+```ts
+import { PolygonClient } from '@agentic/polygon'
+
+const polygon = new PolygonClient()
+const res = await polygon.tickerDetails({ ticker: 'AAPL' })
+```
diff --git a/docs/tools/predict-leads.mdx b/docs/tools/predict-leads.mdx
new file mode 100644
index 000000000..db9a534e8
--- /dev/null
+++ b/docs/tools/predict-leads.mdx
@@ -0,0 +1,38 @@
+---
+title: Predict Leads
+description: Company data and events API.
+---
+
+In-depth company data, including signals like fundraising announcemnts, hiring intent, new customers signed, technologies used, product launches, location expansions, awards received, etc.
+
+- package: `@agentic/predict-leads`
+- exports: `class PredictLeadsClient`, `namespace predictleads`
+- env vars: `PREDICT_LEADS_API_KEY`, `PREDICT_LEADS_API_TOKEN`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/predict-leads/src/predict-leads-client.ts)
+- [api docs]()
+
+## Install
+
+
+```bash npm
+npm install @agentic/predict-leads
+```
+
+```bash yarn
+yarn add @agentic/predict-leads
+```
+
+```bash pnpm
+pnpm add @agentic/predict-leads
+```
+
+
+
+## Usage
+
+```ts
+import { PredictLeadsClient } from '@agentic/predict-leads'
+
+const predictLeads = new PredictLeadsClient()
+const res = await predictLeads.getCompanyEvents({ domain: 'apple.com' })
+```
diff --git a/docs/tools/proxycurl.mdx b/docs/tools/proxycurl.mdx
new file mode 100644
index 000000000..9f8fc86e1
--- /dev/null
+++ b/docs/tools/proxycurl.mdx
@@ -0,0 +1,42 @@
+---
+title: Proxycurl
+description: People and company data from LinkedIn & Crunchbase.
+---
+
+- package: `@agentic/proxycurl`
+- exports: `class ProxycurlClient`, `namespace proxycurl`
+- env vars: `PROXYCURL_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/proxycurl/src/proxycurl-client.ts)
+- [api docs](https://nubela.co/proxycurl)
+
+## Install
+
+
+```bash npm
+npm install @agentic/proxycurl
+```
+
+```bash yarn
+yarn add @agentic/proxycurl
+```
+
+```bash pnpm
+pnpm add @agentic/proxycurl
+```
+
+
+
+## Usage
+
+```ts
+import { ProxycurlClient } from '@agentic/proxycurl'
+
+const proxycurl = new ProxycurlClient()
+const company = await proxycurl.getLinkedInCompany({
+ url: 'https://linkedin.com/company/apple'
+})
+
+const person = await proxycurl.getLinkedInPerson({
+ url: 'https://linkedin.com/in/fisch2'
+})
+```
diff --git a/docs/tools/searxng.mdx b/docs/tools/searxng.mdx
new file mode 100644
index 000000000..0dee62118
--- /dev/null
+++ b/docs/tools/searxng.mdx
@@ -0,0 +1,59 @@
+---
+title: Searxng
+description: OSS meta search engine.
+---
+
+Open source meta search engine capable of searching across many different
+sources and search engines.
+
+The most important search engines are:
+
+- `reddit` (Reddit posts)
+- `google` (Google web search)
+- `google news` (Google News search)
+- `brave` (Brave web search)
+- `arxiv` (academic papers)
+- `genius` (Genius.com for song lyrics)
+- `imdb` (movies and TV shows)
+- `hackernews` (Hacker News)
+- `wikidata` (Wikidata)
+- `wolframalpha` (Wolfram Alpha)
+- `youtube` (YouTube videos)
+- `github` (GitHub code and repositories)
+
+---
+
+- package: `@agentic/searxng`
+- exports: `class SearxngClient`, `namespace searxng`
+- env vars: `SEARXNG_API_BASE_URL`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/searxng/src/searxng-client.ts)
+- [api docs](https://docs.searxng.org)
+
+## Install
+
+
+```bash npm
+npm install @agentic/searxng
+```
+
+```bash yarn
+yarn add @agentic/searxng
+```
+
+```bash pnpm
+pnpm add @agentic/searxng
+```
+
+
+
+## Usage
+
+```ts
+import { SearxngClient } from '@agentic/searxng'
+
+const searxng = new SearxngClient()
+const res = await searxng.search({
+ query: 'us election',
+ engines: ['google', 'reddit', 'hackernews']
+})
+```
diff --git a/docs/tools/serpapi.mdx b/docs/tools/serpapi.mdx
new file mode 100644
index 000000000..48f73bb42
--- /dev/null
+++ b/docs/tools/serpapi.mdx
@@ -0,0 +1,36 @@
+---
+title: SerpAPI
+description: Lightweight wrapper around SerpAPI for Google search.
+---
+
+- package: `@agentic/serpapi`
+- exports: `class SerpAPIClient`, `namespace serpapi`
+- env vars: `SERPAPI_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/serpapi/src/serpapi-client.ts)
+- [api docs](https://serpapi.com/search-api)
+
+## Install
+
+
+```bash npm
+npm install @agentic/serpapi
+```
+
+```bash yarn
+yarn add @agentic/serpapi
+```
+
+```bash pnpm
+pnpm add @agentic/serpapi
+```
+
+
+
+## Usage
+
+```ts
+import { SerpAPIClient } from '@agentic/serpapi'
+
+const serpapi = new SerpAPIClient()
+const res = await serpapi.search('latest news')
+```
diff --git a/docs/tools/serper.mdx b/docs/tools/serper.mdx
new file mode 100644
index 000000000..a6cfa3bce
--- /dev/null
+++ b/docs/tools/serper.mdx
@@ -0,0 +1,36 @@
+---
+title: Serper
+description: Lightweight wrapper around Serper for Google search.
+---
+
+- package: `@agentic/serper`
+- exports: `class SerperClient`, `namespace serper`
+- env vars: `SERPER_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/serper/src/serper-client.ts)
+- [api docs](https://serper.dev)
+
+## Install
+
+
+```bash npm
+npm install @agentic/serper
+```
+
+```bash yarn
+yarn add @agentic/serper
+```
+
+```bash pnpm
+pnpm add @agentic/serper
+```
+
+
+
+## Usage
+
+```ts
+import { SerperClient } from '@agentic/serper'
+
+const serper = new SerperClient()
+const res = await serper.search('latest news')
+```
diff --git a/docs/tools/slack.mdx b/docs/tools/slack.mdx
new file mode 100644
index 000000000..e8d7a8747
--- /dev/null
+++ b/docs/tools/slack.mdx
@@ -0,0 +1,39 @@
+---
+title: Slack
+description: Minimal Slack API client for sending and receiving Slack messages.
+---
+
+- package: `@agentic/slack`
+- exports: `class SlackClient`, `namespace slack`
+- env vars: `SLACK_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/slack/src/slack-client.ts)
+- [api docs]()
+
+## Install
+
+
+```bash npm
+npm install @agentic/slack
+```
+
+```bash yarn
+yarn add @agentic/slack
+```
+
+```bash pnpm
+pnpm add @agentic/slack
+```
+
+
+
+## Usage
+
+```ts
+import { SlackClient } from '@agentic/slack'
+
+const slack = new SlackClient()
+const res = await slack.sendMessage({
+ text: 'hello',
+ channel: 'general'
+})
+```
diff --git a/docs/tools/social-data.mdx b/docs/tools/social-data.mdx
new file mode 100644
index 000000000..090e7e99f
--- /dev/null
+++ b/docs/tools/social-data.mdx
@@ -0,0 +1,36 @@
+---
+title: Social Data Tools
+description: Unofficial Twitter / X client (readonly) which is much cheaper than the official Twitter API.
+---
+
+- package: `@agentic/social-data`
+- exports: `class SocialDataClient`, `namespace socialdata`
+- env vars: `SOCIAL_DATA_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/social-data/src/social-data-client.ts)
+- [api docs](https://socialdata.tools)
+
+## Install
+
+
+```bash npm
+npm install @agentic/social-data
+```
+
+```bash yarn
+yarn add @agentic/social-data
+```
+
+```bash pnpm
+pnpm add @agentic/social-data
+```
+
+
+
+## Usage
+
+```ts
+import { SocialDataClient } from '@agentic/social-data'
+
+const sd = new SocialDataClient()
+const res = await sd.getUserByUsername('transitive_bs')
+```
diff --git a/docs/tools/tavily.mdx b/docs/tools/tavily.mdx
new file mode 100644
index 000000000..1e621c280
--- /dev/null
+++ b/docs/tools/tavily.mdx
@@ -0,0 +1,36 @@
+---
+title: Tavily
+description: Web search API tailored for LLMs.
+---
+
+- package: `@agentic/tavily`
+- exports: `class TavilyClient`, `namespace tavily`
+- env vars: `BING_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/tavily/src/tavily-client.ts)
+- [api docs](https://tavily.com)
+
+## Install
+
+
+```bash npm
+npm install @agentic/tavily
+```
+
+```bash yarn
+yarn add @agentic/tavily
+```
+
+```bash pnpm
+pnpm add @agentic/tavily
+```
+
+
+
+## Usage
+
+```ts
+import { TavilyClient } from '@agentic/tavily'
+
+const tavily = new TavilyClient()
+const res = await tavily.search('latest news')
+```
diff --git a/docs/tools/twilio.mdx b/docs/tools/twilio.mdx
new file mode 100644
index 000000000..34cd2f439
--- /dev/null
+++ b/docs/tools/twilio.mdx
@@ -0,0 +1,39 @@
+---
+title: Twilio
+description: Twilio conversation API to send and receive SMS messages.
+---
+
+- package: `@agentic/twilio`
+- exports: `class TwilioClient`, `namespace twilio`
+- env vars: `TWILIO_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/twilio/src/twilio-client.ts)
+- [api docs](https://www.twilio.com/docs/conversations/api)
+
+## Install
+
+
+```bash npm
+npm install @agentic/twilio
+```
+
+```bash yarn
+yarn add @agentic/twilio
+```
+
+```bash pnpm
+pnpm add @agentic/twilio
+```
+
+
+
+## Usage
+
+```ts
+import { TwilioClient } from '@agentic/twilio'
+
+const twilio = new TwilioClient()
+const res = await twilio.sendMessage({
+ conversationId: 'TODO',
+ text: 'Hello, world'
+})
+```
diff --git a/docs/tools/twitter.mdx b/docs/tools/twitter.mdx
new file mode 100644
index 000000000..ba4911149
--- /dev/null
+++ b/docs/tools/twitter.mdx
@@ -0,0 +1,40 @@
+---
+title: Twitter
+description: Official Twitter / X API client.
+---
+
+Basic Twitter API methods for fetching users, tweets, and searching recent tweets. Includes support for plan-aware rate-limiting. Uses [Nango](https://www.nango.dev) for OAuth support.
+
+- package: `@agentic/twitter`
+- exports: `class TwitterClient`, `namespace twitter`
+- env vars: `TWITTER_API_KEY`, `TWITTER_API_PLAN`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/twitter/src/twitter-client.ts)
+- [api docs](https://developer.twitter.com/en/docs/twitter-api)
+
+## Install
+
+
+```bash npm
+npm install @agentic/twitter
+```
+
+```bash yarn
+yarn add @agentic/twitter
+```
+
+```bash pnpm
+pnpm add @agentic/twitter
+```
+
+
+
+## Usage
+
+```ts
+import { TwitterClient } from '@agentic/twitter'
+
+const twitter = new TwitterClient()
+const res = await twitter.createTweet({
+ text: 'hello, world'
+})
+```
diff --git a/docs/tools/weather.mdx b/docs/tools/weather.mdx
new file mode 100644
index 000000000..f4f0ce249
--- /dev/null
+++ b/docs/tools/weather.mdx
@@ -0,0 +1,36 @@
+---
+title: Weather
+description: Simple Weather API client for accessing weather data based on location.
+---
+
+- package: `@agentic/weather`
+- exports: `class WeatherClient`, `namespace weather`
+- env vars: `WEATHER_API_KEY`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/weather/src/weather-client.ts)
+- [api docs](https://www.weatherapi.com)
+
+## Install
+
+
+```bash npm
+npm install @agentic/weather
+```
+
+```bash yarn
+yarn add @agentic/weather
+```
+
+```bash pnpm
+pnpm add @agentic/weather
+```
+
+
+
+## Usage
+
+```ts
+import { WeatherClient } from '@agentic/weather'
+
+const weather = new WeatherClient()
+const res = await weather.getCurrentWeather('new york')
+```
diff --git a/docs/tools/wikidata.mdx b/docs/tools/wikidata.mdx
new file mode 100644
index 000000000..144433c01
--- /dev/null
+++ b/docs/tools/wikidata.mdx
@@ -0,0 +1,36 @@
+---
+title: Wikidata
+description: Basic Wikidata client.
+---
+
+- package: `@agentic/wikidata`
+- exports: `class WikidataClient`, `namespace wikidata`
+- env vars: `WIKIDATA_API_USER_AGENT` (_optional_)
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/wikidata/src/wikidata-client.ts)
+- [api docs](https://github.com/maxlath/wikibase-sdk)
+
+## Install
+
+
+```bash npm
+npm install @agentic/wikidata
+```
+
+```bash yarn
+yarn add @agentic/wikidata
+```
+
+```bash pnpm
+pnpm add @agentic/wikidata
+```
+
+
+
+## Usage
+
+```ts
+import { WikidataClient } from '@agentic/wikidata'
+
+const wikidata = new WikidataClient()
+const res = await wikidata.getEntityById('Q317521') // elon musk
+```
diff --git a/docs/tools/wikipedia.mdx b/docs/tools/wikipedia.mdx
new file mode 100644
index 000000000..92a18e44d
--- /dev/null
+++ b/docs/tools/wikipedia.mdx
@@ -0,0 +1,37 @@
+---
+title: Wikipedia
+description: Wikipedia apage search and summary API.
+---
+
+- package: `@agentic/wikipedia`
+- exports: `class WikipediaClient`, `namespace wikipedia`
+- env vars: `WIKIPEDIA_API_USER_AGENT` (_optional_)
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/wikipedia/src/wikipedia-client.ts)
+- [api docs](https://www.mediawiki.org/wiki/API)
+
+## Install
+
+
+```bash npm
+npm install @agentic/wikipedia
+```
+
+```bash yarn
+yarn add @agentic/wikipedia
+```
+
+```bash pnpm
+pnpm add @agentic/wikipedia
+```
+
+
+
+## Usage
+
+```ts
+import { WikipediaClient } from '@agentic/wikipedia'
+
+const wikipedia = new WikipediaClient()
+const res0 = await wikipedia.search({ query: 'steve jobs' })
+const res1 = await wikipedia.getPageSummary({ title: 'Elon_Musk' })
+```
diff --git a/docs/tools/wolfram-alpha.mdx b/docs/tools/wolfram-alpha.mdx
new file mode 100644
index 000000000..4727f8529
--- /dev/null
+++ b/docs/tools/wolfram-alpha.mdx
@@ -0,0 +1,36 @@
+---
+title: Wolfram Alpha
+description: Wolfram Alpha LLM API client for answering computational, mathematical, and scientific questions.
+---
+
+- package: `@agentic/wolfram-alpha`
+- exports: `class WolframAlphaClient`, `namespace wolframalpha`
+- env vars: `WOLFRAM_APP_ID`
+- [source](https://github.com/transitive-bullshit/agentic/blob/main/packages/wolfram-alpha/src/wolfram-alpha-client.ts)
+- [api docs](https://products.wolframalpha.com/llm-api/documentation)
+
+## Install
+
+
+```bash npm
+npm install @agentic/wolfram-alpha
+```
+
+```bash yarn
+yarn add @agentic/wolfram-alpha
+```
+
+```bash pnpm
+pnpm add @agentic/wolfram-alpha
+```
+
+
+
+## Usage
+
+```ts
+import { WolframAlphaClient } from '@agentic/wolfram-alpha'
+
+const wolframAlpha = new WolframAlphaClient()
+const res = await wolframAlpha.search('latest news')
+```
diff --git a/packages/jina/src/jina-client.ts b/packages/jina/src/jina-client.ts
index 7b200cdfe..429073e5c 100644
--- a/packages/jina/src/jina-client.ts
+++ b/packages/jina/src/jina-client.ts
@@ -101,7 +101,7 @@ export namespace jina {
/**
* LLM-friendly URL reader and search client by Jina AI.
*
- * - Includes a very generous free tier.
+ * - Includes a small free tier.
* - Does not support "stream mode".
* - Results default to markdown text format.
* - To return JSON (especially useful for `search`), set `json: true` in the
diff --git a/readme.md b/readme.md
index cbd23d8e1..612f8dd9c 100644
--- a/readme.md
+++ b/readme.md
@@ -291,15 +291,15 @@ See [examples/openai](./examples/openai) for a full example.
| ------------------------------------------------------------------------ | --------------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Bing](https://www.microsoft.com/en-us/bing/apis/bing-web-search-api) | `@agentic/bing` | `BingClient` | Bing web search. |
| [Calculator](https://github.com/josdejong/mathjs) | `@agentic/calculator` | `calculator` | Basic calculator for simple mathematical expressions. |
-| [Clearbit](https://dashboard.clearbit.com/docs) | `@agentic/clearbit` | `ClearbitClient` | Resolving and enriching people and company datae. |
+| [Clearbit](https://dashboard.clearbit.com/docs) | `@agentic/clearbit` | `ClearbitClient` | Resolving and enriching people and company data. |
| [Dexa](https://dexa.ai) | `@agentic/dexa` | `DexaClient` | Answers questions from the world's best podcasters. |
| [Diffbot](https://docs.diffbot.com) | `@agentic/diffbot` | `DiffbotClient` | Web page classification and scraping; person and company data enrichment. |
| [E2B](https://e2b.dev) | `@agentic/e2b` | `e2b` | Hosted Python code intrepreter sandbox which is really useful for data analysis, flexible code execution, and advanced reasoning on-the-fly. (_peer dep_ `@e2b/code-interpreter`) |
| [Exa](https://docs.exa.ai) | `@agentic/exa` | `ExaClient` | Web search tailored for LLMs. |
-| [Firecrawl](https://www.firecrawl.dev) | `@agentic/firecrawl` | `FirecrawlClient` | Website scraping and sanitization. |
+| [Firecrawl](https://www.firecrawl.dev) | `@agentic/firecrawl` | `FirecrawlClient` | Website scraping and structured data extraction. |
| [HackerNews](https://github.com/HackerNews/API) | `@agentic/hacker-news` | `HackerNewsClient` | Official HackerNews API. |
| [Hunter](https://hunter.io) | `@agentic/hunter` | `HunterClient` | Email finder, verifier, and enrichment. |
-| [Jina](https://jina.ai/reader) | `@agentic/jina` | `JinaClient` | Clean URL reader and web search + URL top result reading with a generous free tier. |
+| [Jina](https://jina.ai/reader) | `@agentic/jina` | `JinaClient` | URL scraper and web search. |
| [Midjourney](https://www.imagineapi.dev) | `@agentic/midjourney` | `MidjourneyClient` | Unofficial Midjourney client for generative images. |
| [Novu](https://novu.co) | `@agentic/novu` | `NovuClient` | Sending notifications (email, SMS, in-app, push, etc). |
| [People Data Labs](https://www.peopledatalabs.com) | `@agentic/people-data-labs` | `PeopleDataLabsClient` | People & company data (WIP). |