@wolido/pi-anysearch
v0.2.0
Published
AnySearch AI search API extension for pi
Maintainers
Readme
@wolido/pi-anysearch
AnySearch AI search extension for pi. It wraps the AnySearch vertical search API — 40 curated capability domains (finance, academic, legal, security, health, travel, ...) — as four LLM tools, with authentication, MCP session handling and output truncation taken care of.
Tools
| Tool | Purpose |
| --- | --- |
| anysearch_search | Vertical web search. Optional capability tag (e.g. finance.quote, academic.search, code.doc, security.vuln), zone (cn/intl), language, tag-specific params, format and max_results (1–20). |
| anysearch_batch_search | Run several queries in parallel with shared options; returns one aggregated result set. |
| anysearch_extract | Fetch a URL and return its readable content as markdown (via AnySearch's MCP extract tool). |
| anysearch_domains | List the curated sub-domains under a top-level capability domain (via MCP get_sub_domains); useful for discovering valid tags. |
Search and batch results include titles, URLs, snippets, extracted content and total_results / search_time_ms metadata. Oversized outputs are truncated to pi's tool output limits, byte-safely for multi-byte text.
Installation
pi install npm:@wolido/pi-anysearchFor local development, load the extension directly from the repo:
pi -e /path/to/pi-anysearch/src/index.tsConfiguration
The API key is resolved on first tool execution, with the following precedence (first hit wins):
Environment variable —
ANYSEARCH_API_KEYexport ANYSEARCH_API_KEY="sk-..."Project config —
<project>/.pi/pi-anysearch/config.json{ "apiKey": "sk-..." }Read only when the project is trusted by pi; config files from untrusted projects are ignored so a malicious repository cannot inject an API key.
⚠️ This file contains a plaintext key — add
.pi/pi-anysearch/config.jsonto your project's.gitignore.Global config —
~/.pi/agent/pi-anysearch/config.json(same JSON format)Anonymous mode — no key found: requests are sent without an
Authorizationheader and are rate-limited by the AnySearch service.
Get a key at anysearch.ai.
Development
npm install
npm test # vitest, 63 tests
npm run typecheck # tsc --noEmitLayout:
src/anysearch.ts— AnySearch client:POST /v1/searchenvelope API plus a stateful MCP Streamable HTTP session (initialize→notifications/initialized→tools/call) for extract/domains.src/config.ts— API key resolution (env → trusted project config → global config → anonymous).src/index.ts— pi extension factory registering the four tools (TypeBox schemas viaStringEnumfor provider compatibility); clients are created lazily and cached per cwd + trust state.tests/— vitest suite with a mock fetch/MCP harness (tests/helpers/).
License
MIT © 2026 liuyu
