Zakira.Recall 0.4.0

dotnet tool install --global Zakira.Recall --version 0.4.0
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local Zakira.Recall --version 0.4.0
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=Zakira.Recall&version=0.4.0
                    
nuke :add-package Zakira.Recall --version 0.4.0
                    

Zakira.Recall

Test NuGet License: MIT

Local CLI and MCP server for web search, page fetch, and research workflows without API keys.

Supports:

  • provider selection and fallback
  • pluggable provider discovery with alias support
  • Playwright-backed search and fetch
  • structured citations for research results
  • repeatable quality evaluation reports for search/research results
  • JSON, text, Markdown, and Dumpify CLI output modes
  • interactive browser profile setup for sign-in and consent flows
  • config and profile inspection commands

Install

From NuGet as a global tool:

dotnet tool install --global Zakira.Recall

Available commands after install:

recall --help

Commands

recall search "site:github.com mcp server"
recall search "playwright mcp" --provider duckduckgo-browser --page 2 --time-range month --safe-search false
recall fetch "https://example.com"
recall fetch "https://example.com" --output markdown
recall research "best local mcp web search tools" --domain-diversity true
recall research "playwright search providers" --fallback-provider bing --max-concurrent-fetches 4 --output dump
recall eval run examples/eval-dataset.json --provider bing --output markdown --report artifacts/eval-report.md
recall config init
recall config show --output dump
recall providers list --output json
recall providers test ddg
recall profile show default --output markdown
recall profile init default --channel msedge --provider duckduckgo --headless false
recall profile auth interactive --provider duckduckgo-browser --no-wait true
recall mcp

Providers

Available providers:

  • duckduckgo
  • duckduckgo-browser
  • bing

Provider names are resolved through the registry, so aliases such as ddg work anywhere a provider name is accepted.

List provider capabilities and current health state:

recall providers list
recall providers list --output json
recall providers list --output dump
recall providers test ddg

The browser-backed providers use Playwright and support interactive setup flows.

For contributors: provider registration is assembly-driven. New ISearchProvider implementations in the Playwright assembly are discovered automatically, and aliases plus setup URLs come from the provider itself.

Playwright Setup

Search providers that use Playwright and the fetch flow require the Playwright runtime and browser install.

If you are running from build output:

pwsh "$env:LOCALAPPDATA\Temp\Zakira.Recall\bin\Debug\net10.0\playwright.ps1" install chromium

If you installed the global tool, run the packaged playwright.ps1 next to the installed tool files.

If you want to prepare a persistent interactive browser profile for consent pages or sign-in:

recall profile auth interactive --provider duckduckgo-browser
recall profile auth interactive --provider bing
recall profile auth interactive --provider bing --no-wait true

This opens a non-headless browser using the selected profile, navigates to the provider's setup URL, and prints guidance in the terminal. By default it waits for Enter before closing. Use --no-wait true if you want the command to return immediately after opening the page.

Config

Default config file locations:

  • If XDG_CONFIG_HOME is set: $(XDG_CONFIG_HOME)/Zakira.Recall/profiles.json
  • Otherwise on Windows: %APPDATA%\Zakira.Recall\profiles.json

Default profile storage locations:

  • If XDG_DATA_HOME is set: $(XDG_DATA_HOME)/Zakira.Recall/profiles
  • Otherwise on Windows: %LOCALAPPDATA%\Zakira.Recall\profiles

Example config file for $XDG_CONFIG_HOME/Zakira.Recall/profiles.json:

  • examples/profiles.json

Generate it with the CLI:

recall config init

By default this writes to:

  • $XDG_CONFIG_HOME/Zakira.Recall/profiles.json when XDG_CONFIG_HOME is set
  • otherwise %APPDATA%\Zakira.Recall\profiles.json

Override the output path if needed:

recall config init --path "C:/temp/recall-profiles.json"

Inspect the resolved configuration:

recall config show
recall config show --path "C:/temp/recall-profiles.json" --output dump

Generate a config with fallback providers and logging defaults:

recall config init --provider duckduckgo --fallback-provider duckduckgo-browser bing --enable-fallback true --config-log-level Information

Useful config fields:

  • defaultProvider
  • defaultProfile
  • profilesRoot
  • fallbackProviders
  • enableProviderFallback
  • providerHealthCooldownSeconds
  • maxConcurrentFetches
  • logLevel

Inspect a resolved profile:

recall profile show
recall profile show default --provider bing --output markdown

Per-profile fields:

  • name
  • channel
  • defaultProvider
  • headless
  • userDataDir
  • locale
  • timeoutSeconds
  • fallbackProviders
  • enableProviderFallback
  • providerHealthCooldownSeconds
  • maxConcurrentFetches
  • logLevel
  • metadata

Notes:

  • If profilesRoot is omitted, the tool falls back to the default data directory.
  • If defaultProfile is omitted, the tool uses default.
  • If a profile omits channel, the tool uses msedge.
  • If a profile omits headless, the resolver defaults it to true.
  • If a profile omits timeoutSeconds, the resolver defaults it to 30.
  • If enableProviderFallback is enabled, search can fail over to configured fallback providers.
  • Provider health is tracked in-memory during the current process and used to avoid retrying recently failing providers.
  • logLevel can be set globally in config, per profile, or overridden at runtime with --log-level.

CLI Options

User-facing commands default to text output. Use --output json when you want machine-oriented structured output.

Common search options:

recall search <query> \
  [--provider <name>] \
  [--profile <name>] \
  [--limit <n>] \
  [--page <n>] \
  [--time-range <day|week|month|year>] \
  [--safe-search <true|false>] \
  [--fallback <true|false>] \
  [--fallback-provider <name> ...] \
  [--output <json|text|markdown|dump>]

Fetch options:

recall fetch <url> \
  [--profile <name>] \
  [--timeout <seconds>] \
  [--output <json|text|markdown|dump>]

Research options:

recall research <query> \
  [--provider <name>] \
  [--profile <name>] \
  [--limit <n>] \
  [--top-pages <n>] \
  [--page <n>] \
  [--time-range <day|week|month|year>] \
  [--safe-search <true|false>] \
  [--fallback <true|false>] \
  [--fallback-provider <name> ...] \
  [--max-concurrent-fetches <n>] \
  [--domain-diversity <true|false>] \
  [--output <json|text|markdown|dump>]

Evaluation options:

recall eval run <dataset.json> \
  [--provider <name>] \
  [--profile <name>] \
  [--limit <n>] \
  [--top-pages <n>] \
  [--fallback <true|false>] \
  [--fallback-provider <name> ...] \
  [--report <path>] \
  [--fail-under <score>] \
  [--output <json|text|markdown|dump>]

recall eval score <dataset.json> <responses.json> \
  [--report <path>] \
  [--fail-under <score>] \
  [--output <json|text|markdown|dump>]

eval run executes live research for each case in the dataset and scores the result. eval score scores previously captured ResearchResponse objects without making live web requests.

Dataset cases can define:

  • query: the research query to run
  • expectedDomains: domains that should appear in the search results
  • requiredTerms: terms that should appear in the search, fetch, citation, or summary text
  • badDomains: domains that should not appear

Start with examples/eval-dataset.json, then add real failure cases as they are found.

Profile inspection options:

recall profile show [name] \
  [--provider <name>] \
  [--output <json|text|markdown|dump>]

Provider inspection options:

recall providers list \
  [--profile <name>] \
  [--output <json|text|markdown|dump>]

recall providers test <name> \
  [--profile <name>] \
  [--output <json|text|markdown|dump>]

Config inspection options:

recall config show \
  [--path <path>] \
  [--output <json|text|markdown|dump>]

Global options:

--config <path>
--default-provider <name>
--default-profile <name>
--profiles-root <path>
--log-level <Trace|Debug|Information|Warning|Error|Critical|None>

Output

CLI commands support multiple output modes:

  • json: full structured response
  • text: concise terminal-friendly output
  • markdown: readable output for notes or LLM workflows
  • dump: structured object inspection via Dumpify

Examples:

recall search "mcp server"
recall fetch "https://example.com" --output markdown
recall research "playwright search" --output json
recall providers list --output dump
recall providers test ddg

Research Output

research returns:

  • normalized search results
  • fetched page content for selected sources
  • structured citations
  • partial errors when some pages fail but others succeed

By default, research also:

  • deduplicates equivalent result URLs before fetch
  • prefers domain diversity when selecting top pages to read

This makes the tool safer for agent workflows because one failed fetch does not have to fail the whole research run.

MCP

Run the MCP server over stdio:

recall mcp

The exposed tools are:

  • WebSearch
  • WebFetch
  • WebResearch
  • WebListProviders
  • WebBatchFetch
  • WebSearchThenFetch
  • WebShowConfig
  • WebShowProfile
  • WebGetProviderHealth

MCP tools return structured typed results that are easier for agents to consume directly.

WebSearch and WebResearch support provider selection, paging, time range, safe search, and fallback controls.

Pack

Pack the NuGet tool locally:

pwsh .\pack.ps1

Pack and push to NuGet.org:

pwsh .\pack.ps1 -Push
pwsh .\pack.ps1 -ApiKey "<key>" -Push

If -ApiKey is omitted, pack.ps1 uses NUGET_API_KEY.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
0.4.0 65 5/8/2026
0.3.0 93 4/29/2026
0.2.0 94 4/25/2026
0.1.0 105 4/24/2026