# HALLUX

> Check that a package, module or DOI exists before an agent installs, imports or cites it.

- name: dev.blvkware/hallux
- version: 0.1.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 91/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/dev.blvkware%2Fhallux
- tools: https://api.protogrid.dev/v1/servers/dev.blvkware%2Fhallux/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "hallux": {
      "type": "http",
      "url": "https://api.blvkware.dev/hallux/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-27d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 91/100 (strong)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 4 of 4 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 1,137 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 4, about 1,137 tokens to load them all
- tool set hash: fe27852c4a872f27a3f0fc6f32b17500
- badge: [![protogrid quality](https://protogrid.dev/badge/dev.blvkware/hallux.svg)](https://protogrid.dev/servers/dev.blvkware/hallux)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://api.blvkware.dev/hallux/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (4)

- `hallux_check`: Does this identifier actually exist? Call before acting on any name you recalled rather than read: a package to install, a module to import, a DOI to cite.

Returns one of: exists, deprecated, absent, phantom, squat, unknown.
  exists     - proceed
  deprecated - proceed, but use `successor`
  absent     - not in the registry. Do not proceed
  phantom    - does not exist AND models repeatedly invent it. Do not proceed
  squat      - was invented by models, then registered by someone. Treat as hostile
  unknown    - could not verify. Never treat this as permission

Live namespaces: cite.doi, pkg.crates, pkg.go, pkg.maven, pkg.npm, pkg.nuget, pkg.pypi. An unsupported namespace returns `unknown`, never an error, so it is safe to ask.
- `hallux_check_command`: Call this BEFORE running any command that installs a dependency: npm, yarn, pnpm, bun, pip, uv, poetry, pipx, cargo, go get, dotnet add package, nuget.

Language models invent plausible package names that have never existed, and attackers register those names because they can predict them. Installing one runs attacker code. You cannot tell the difference by looking at the name, which is why this check exists.

Pass the command exactly as you intend to run it. The identifiers are extracted for you.

If the result says BLOCK, do not run the command. Use the `successor` if one is given, otherwise tell the user what was found and stop.
- `hallux_check_manifest`: Call this after writing or editing a dependency file, and before committing it. Supported: package.json, requirements.txt, pyproject.toml, Cargo.toml, go.mod.

Checks every dependency in one pass, including dev and optional groups, which is where an invented name usually arrives.
- `hallux_watch`: Register identifiers for notification when their verdict changes. The transition that matters is phantom to squat: a name models invent that somebody then registers.

Use this for a dependency that came back `absent` or `phantom` and that the user intends to use anyway, or for a set of dependencies worth monitoring. Delivered by signed webhook to a URL you supply.
