mcpField
V
voyager

voyager

Local
github.com/dir-aiDeveloper Tools0Updated 14w ago

About voyager

voyager is a web retrieval and package-verification MCP server for coding agents. It turns queries into cited, confidence-scored briefs, using an OSV vulnerability gate, source signals, and filtering for prompt-injection content.

Key features

  1. 01Verify npm and PyPI packages
  2. 02Gate packages with OSV vulnerability data
  3. 03Create cited, confidence-scored briefs
  4. 04Search GitHub, official docs, and the web
  5. 05Filter injection content and frame evidence
  6. 06Reproduce installs in an isolated container

Use cases

  1. 01Block vulnerable dependencies in CI
  2. 02Summarize web research for coding agents
  3. 03Discover GitHub projects and consult official docs
  4. 04Test package installation and loading in isolation

MCP support

It provides an MCP server with check_package, retrieve, discover_repos, and fetch_docs tools for package checks and information retrieval.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"dir-ai-voyager": {
"command": "npx",
"args": [
"-y",
"@dir-ai/voyager"
]
}
}
}
Run commandnpx -y @dir-ai/voyager

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@dir-ai/voyager1.4.0

Tools

4

Saved tool list · updated 2w ago

ParameterTypeRequiredDescription
namestringYes
versionstringNoOptional pinned version (default: latest).
ecosystemenumNonpm | pypi
projectDepsobjectNoname → range: peer-compat check against your stack.
proveInTwinbooleanNoInstall + smoke-import in an isolated container to promote belief→reproduced (trusted machines only).

Details

From the project README

voyager

The verified-brief organ for coding agents.

An AI coding agent that reaches the open internet gets a raw, unsigned, possibly-poisoned blob and feeds it straight into its own prompt. voyager sits in front of that: it turns a query into a cited, confidence-scored, OSV-gated, injection-hardened brief — the only surface your model ever sees.

Every claim carries its provenance and a confidence signal. Package recommendations pass a fail-closed OSV vulnerability gate, surface build provenance (npm SLSA attestations) when present, and can be reproduced in a disposable twin — install + smoke-import run inside a hardened, rootless, network-isolated container (never on the host). That proves the package installs and its entrypoint loads; it is not a safety proof. All fetched text is stripped of instruction-shaped payloads (multilingual + base64 + markdown /HTML vectors) and framed as untrusted evidence the model must analyze, never obey.

  • check — is this package safe to use? Registry facts + OSV gate (fail-closed)
    • provenance/license/age supply-chain signals + optional isolated twin. Exit codes: 0 ok · 1 rejected (unsafe) · 2 tool/usage error (no verdict).
  • brief / retrieve — a cited brief combining package verification, GitHub discovery, canonical docs, and open-web search, each cross-referenced.
  • security by construction — one egress allowlist, https-only, streamed size cap, injection-strip + evidence framing. Zero-network unless you query.

CLI, library, and MCP server.

Install

npm i @dir-ai/voyager
npx -y @dir-ai/voyager check express

CLI

voyager check <name> [--ecosystem npm|pypi] [--version V] [--twin]   # exit 1 if unsafe
voyager brief "<query>" [--package name] [--discover "<intent>"] [--search "<q>"] [--docs <lib>]
voyager discover "<intent>"     # GitHub repo discovery (Tier-A)
voyager search "<query>"        # open-web search (Tier-C, needs a key)
voyager docs <library>          # canonical docs (Tier-B)
voyager doctor                  # which source keys are configured

check is a natural CI gate: fail the build if an agent picked a vulnerable, deprecated, or non-existent dependency.

Library

import { checkPackage, voyagerRetrieve, setKeyResolver } from '@dir-ai/voyager'

const v = await checkPackage({ name: 'express', ecosystem: 'npm' })
// → { verdict: 'belief' | 'fact' | 'rejected', claim, steps }  (adversarial trace)

const brief = await voyagerRetrieve('a safe date library', {
  packages: [{ name: 'date-fns', ecosystem: 'npm' }],
  discover: 'date library',
})
brief.rendered   // the injection-hardened, framed text to feed a model
brief.claims     // structured, cited, confidence-scored

// Bring your own key store (default is env vars):
setKeyResolver((provider) => mySecrets.get(provider))

MCP server

// .mcp.json
{
  "mcpServers": {
    "voyager": { "command": "npx", "args": ["-y", "@dir-ai/voyager", "mcp"] }
  }
}

Tools: check_package, retrieve, discover_repos, fetch_docs.

Docker

docker run --rm ghcr.io/dir-ai/voyager check express
docker run -i --rm ghcr.io/dir-ai/voyager mcp   # stdio MCP

Tiers & trust

TierSourceBase trust
AGitHub · npm · PyPI · OSV (structured facts)high
Bcanonical docs (official hosts only)high
Copen-web search (Tavily / Exa / Apify)low — cross-referenced before trusted
Disolated twin (install + smoke in a container)reproduction, not a safety proof

Keys are optional: the Tier-A core (npm/PyPI/OSV, and GitHub unauthenticated) is zero-key. Tier-C providers each no-op without their key. Set GITHUB_TOKEN, TAVILY_API_KEY, etc., or inject a resolver.

Security posture

One egress allowlist (a fixed set of public API hosts), https-only, redirect: error, a streamed byte cap that aborts an oversized body mid-download, and an injection-strip that removes role-hijacks / chat-template tokens / zero-width & bidi characters, decodes-and-rescans base64, neutralizes markdown images and HTML comments, and matches instruction payloads across several languages. The framing is the real defense — the strip keeps it from being trivially escaped. The twin runs the package's code only inside a hardened, network-isolated, read-only, non-root container; with no container runtime it refuses to run (returns unsupported) rather than execute on the host. See SECURITY.md.

Cache

Idempotent Tier-A facts (npm / PyPI / OSV) are cached in-process and on disk under ~/.voyager/cache (content-addressed, TTL'd) so repeated checks are fast, survive across runs, and lean less on the network. No secret is ever written (auth headers are never part of a cache key or value). VOYAGER_NO_CACHE=1 disables it; VOYAGER_CACHE_DIR relocates it.

Roadmap

deps.dev-backed multi-ecosystem facts (crates / Go / RubyGems / Packagist), typosquatting detection, PyPI/cargo twins. Contributions welcome.

License

MIT © dir-ai

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.