Skip to main content
Glama
mcp-omnisearch

mcp-omnisearch

by spences10

mcp-omnisearch

built with vite+ tested with vitest

A Model Context Protocol (MCP) server for Tavily, Brave, Kagi, Exa, GitHub, Linkup, and Firecrawl. Two tools, search and execute, expose schema-generated native provider functions through Pi's local QuickJS sandbox. Requires Node.js 22.19+.

Quick start

Install the published server with MCPick:

npx mcpick add \
  --name mcp-omnisearch \
  --command npx \
  --args=-y,mcp-omnisearch

MCPick defaults to Claude Code. Use --client and --scope to target another client or add the server to the current repository:

npx mcpick add \
  --name mcp-omnisearch \
  --command npx \
  --args=-y,mcp-omnisearch \
  --client vscode \
  --scope project

See Deployment for supported clients and provider credential storage options.

To run from source instead:

pnpm install
pnpm run build
node ./dist/index.js

Providers without keys are skipped and the rest keep working. If your client supports environment-variable expansion, reference keys instead of storing their values in the MCP configuration:

{
	"mcpServers": {
		"mcp-omnisearch": {
			"command": "npx",
			"args": ["-y", "mcp-omnisearch"],
			"env": {
				"TAVILY_API_KEY": "${TAVILY_API_KEY}",
				"EXA_API_KEY": "${EXA_API_KEY}"
			}
		}
	}
}

Add only the provider keys you use. Expansion syntax and secret storage are client-specific; see Deployment for secure options and plaintext fallback guidance.

Related MCP server: MCP Search Server

Tools

Discover available functions and their compact TypeScript declarations. A provider-scoped lookup returns names and schemas together:

{ "query": "tavily" }

Use an exact name such as tavily_search for a smaller lookup, or {} for a catalog without declarations. Only configured providers appear.

execute

Run JavaScript against the discovered native provider functions:

{
	"code": "const r = await tools.tavily_search({ query: 'MCP code mode', max_results: 3 }); return r.results.map(({ title, url }) => ({ title, url }));"
}

Compose calls with await and Promise.all, filter intermediate data, and return only what the client needs. Credentials stay on the host; the sandbox has no filesystem or arbitrary network access. Arguments and responses use native provider formats, not a normalized search contract. See Code Mode for functions, limits and benchmark findings.

Upgrading

The consolidated web_search, ai_search, web_extract and github_search tools have been removed. Provider keys stay the same, but existing tool calls and client instructions need migration. See the breaking-change migration guide.

Documentation

  • Migration — move from consolidated tools to Code Mode.

  • Code Mode — native provider functions, schema generation, local testing, and benchmark findings.

  • Provider selection — choose providers by task, key, mode, and capability.

  • Search operators — native query syntax and provider-specific filters.

  • Large results — inline vs file response behavior and remote deployment caveats.

  • Deployment — MCP client, WSL, and Firecrawl setup.

  • Troubleshooting — keys, access, validation, rate limits, and common failures.

Environment variables

  • TAVILY_API_KEY

  • KAGI_API_KEY

  • BRAVE_API_KEY

  • GITHUB_API_KEY

  • EXA_API_KEY

  • LINKUP_API_KEY

  • FIRECRAWL_API_KEY

  • FIRECRAWL_BASE_URL optional, for self-hosted Firecrawl

  • OMNISEARCH_LARGE_RESULT_MODE optional, file default or inline

Development

pnpm install
pnpm run build
pnpm test

Please read CONTRIBUTING.md before opening a PR.

License

MIT License - see LICENSE.

Acknowledgments

Built on Model Context Protocol, Tavily, Kagi, Brave Search, Exa AI, Linkup, and Firecrawl.

Available Tools

2 tools
executeRun JavaScript in an isolated Pi QuickJS sandbox. Discover native provider functions with search, then call await tools.<name>(args). Use return, text() or console.log() for output. Promise.all supports parallel requests. Only final output reaches the client. No filesystem, network, Node APIs, modules or timers. Credentials stay on the host. At most 20 provider calls; 64 MiB heap; default deadline 60 seconds. Results are raw provider JSON. Async jobs return IDs: retrieve their status in a later call. No automatic retries. Calls already made are not undone on failure. State is not persisted between executions.A
Destructive

Run JavaScript in an isolated Pi QuickJS sandbox. Discover native provider functions with search, then call await tools.(args). Use return, text() or console.log() for output. Promise.all supports parallel requests. Only final output reaches the client. No filesystem, network, Node APIs, modules or timers. Credentials stay on the host. At most 20 provider calls; 64 MiB heap; default deadline 60 seconds. Results are raw provider JSON. Async jobs return IDs: retrieve their status in a later call. No automatic retries. Calls already made are not undone on failure. State is not persisted between executions.

Inputs: code (required), timeout_ms, large_result_mode.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 2 tools

    Disambiguation4/5

    Search is for discovering provider function signatures, while execute runs JavaScript in the sandbox; the descriptions clearly separate these phases and explicitly link them. However, the bare name 'search' could initially be mistaken for a provider-level search action rather than meta-discovery, and there is no distinct 'list' tool since search doubles as listing when the query is omitted.

    Naming Consistency4/5

    Both tools use a consistent single-verb convention with no mixing of camelCase or snake_case. The names are generic and lack an object (e.g., search_tools or execute_code), but the style is predictable across the set.

    Tool Count4/5

    Two tools exactly match the two-phase Code Mode workflow: discover available provider functions, then execute a program that calls them. It is on the thin side of the typical 3-15 range, but each tool clearly earns its place and there is no redundancy.

    Completeness4/5

    The core lifecycle is covered: search handles both listing and keyword lookup, and execute supports provider invocation, parallelism, and output. Minor gaps exist around explicit job-status polling, cancellation, and provider configuration management, though these may be reachable through execute calls.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      A unified Model Context Protocol server that integrates multiple search providers including Brave, Tavily, Exa, Semantic Scholar, and arXiv. It enables users to perform web, news, and image searches alongside academic research and citation analysis through a single interface.
      -
    • A
      license
      A
      quality
      B
      maintenance
      A Model Context Protocol server that gives AI assistants access to 7 search providers with intelligent auto-routing. Analyzes query intent and picks the best provider automatically — no manual switching needed. Install, configure your keys, and go.
      2
      219 PyPI
      5
      MIT