pinright

io.github.Hiper-AI由 GitHub 账号 Hiper-AI 发布v1.0.0更新于 Nov 7, 2026

面向编码代理的版本准确的库文档,并对每个依赖项进行供应链检查。

AI 翻译由 AI 模型根据下方的原文描述翻译,可能有误。

原文描述

Version-accurate library docs for coding agents, with a supply-chain check of each dependency.

已验证STDIO仅桌面

概览

pinright 的本地 MCP 服务;无需登录;STDIO;6 个工具。

暂无 AI 概览:以下信息来自注册中心条目和服务本身。

安装

在 SourceWeft 中

  1. 打开 控制台中的 pinright,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

[pinright: version-accurate docs and a dependency check for coding agents. The hook answer for npm install [email protected]: pinright blocked this dependency change; lodash 4.17.20 has 5 known advisories; use 4.x release 4.18.1.]

pinright

Version-accurate docs and a dependency check for coding agents. Your agent gets library versions from one of two places: its memory, where about 40% of the pins it wrote in our benchmark carried a known advisory, or a docs MCP server, which returns documentation and does not check the version against advisories. pinright gives it the docs for the exact version it installs and a verdict on every dependency it adds, before the install runs. MCP server, pre-install hook, CLI and GitHub Action, all local.

[npm] [CI] [License: MIT] [Install in Cursor] [Install in VS Code]

Install

Node 20.9 or newer. One line, then restart the agent:

bash
npm i -g pinright && pinright init --user   # just you, every project; the hook starts in about 0.2 snpx -y pinright init                        # your team: writes project files you commit

init wires the MCP server, the pre-install hook where the client has one, and a starter .pinright.json. 16 clients; six have a hook: Claude Code, Cursor, VS Code (GitHub Copilot), OpenAI Codex, Gemini CLI and Windsurf. The Cursor and VS Code buttons above add the MCP server only. Every client, scopes and pinright doctor.

Without pinright, with pinright

Without. The agent runs npm install [email protected]. It installs. The lockfile now carries five advisories, two of them high, and nobody is told.

With. The hook answers before the command runs, and the agent reads this:

pinright blocked this dependency change:- [email protected] (npm) has 5 known advisories (CVE-2021-23337, CVE-2026-4800, CVE-2020-28500, HIGH). Use 4.x release 4.18.1: npm install [email protected]Change the version (or the name) and try again. check-package and get-docs from the pinright MCP server explain each case.

The agent retries with 4.18.1, on the same release line. When it asks first, check-package and get-docs give it the same verdict with the full advisory list, the version to pin, and the docs for that version. Real output of pinright hook claude, 2026-11-01.

Why pinright

Docs MCP servers return documentation for a library. They do not check the version the agent pins, and they do not see the install. To measure that kind of server we ran pinright's own server with its security layer off (PINRIGHT_ABLATION=docs-only): docs for the version asked, no verdict. It is not another product. Claude Code with Sonnet 5.5, Haiku 5.5 and Opus 5.5, 2 runs per cell, on the 1.0.0 code; each cell gives the range over the three models.

No docsDocs-only context serverpinright
Direct dependencies pinned with a known advisory40% to 42%0% to 2%0%
Whole-tree alerts per project (npm audit, pip-audit)29.8 to 31.90.3 to 3.50.3
Docs tasks that used the current API9 to 14 of 1615 or 16 of 1616 of 16
Tokens per agent task15k to 21k56k to 94k42k to 74k
Tokens per docs task17k to 23k94k to 135k63k to 95k
Agent turns per agent task4.0 to 4.39.3 to 11.15.9 to 7.5
MCP tool text read per agent tasknone25k to 45k characters5k to 17k characters
Verdict on the version the agent pinsnonoadvisories, malware, lookalikes, versions that do not exist
Check when the install runsnonopre-install hook in 6 clients
Whole-tree lockfile auditnonocheck-manifest, SARIF, GitHub Action

Current docs alone removed most alerts; the verdict removed the rest. Per model, pinright used 21% to 26% fewer tokens than the docs-only server on the 12 agent tasks and 26% to 33% fewer on the 8 docs tasks. Every paired interval stays above zero; the lowest bound is 2%. Tokens count everything the model processed, cache reads included. No tools at all costs less than either.

Why fewer tokens. With docs only, the agent looked versions up through the docs: it called get-docs once per package, 5.2 to 5.7 times per agent task, before writing a file. 87% of those calls named no version, so they returned the docs of the latest release, and 75% asked for "version" or "latest" in the query. With pinright, every agent-task run opened with check-packages for the whole list, about 600 characters of verdicts and versions to pin, then called get-docs 0.7 to 1.7 times per task, with a version in 86 of 87 calls.

Limits. The 0.3 left is nuxt, whose current release pulls packages with no fix published; installing with no version gets the same 0.3, and the docs-only and pinright alert intervals overlap. One vendor's models, tasks we wrote, no shell, two days of advisory data, small n. In a second run with a shell, the agents looked versions up with npm view or pip index before pinning, and every arm ended at the same 6 alerts per model: there pinright made no measurable difference to the pins. On APIs released after August 2026, 2 of 48 runs got the current API without docs, 45 of 48 with docs only and 46 of 48 with pinright. On 12 tasks taken from public GitHub issues, 25% to 29% of direct pins carried an advisory without docs and none with pinright. The hook blocked or asked on 1.46% of 25,077 public commands and misread 10 of 154,402 tool calls from a month of our own agent sessions. Per-model tables · results and caveats · technical report · reproduce it

Ask your agent

  • "Add zod and pin a version with no known advisories."
  • "Show me the docs for the version of next this project has installed."
  • "Audit package-lock.json and tell me what to upgrade, on the same release lines."
  • "What changed between express 4 and 5 before I move?"

Tools

ToolWhat it does
check-packagesThe verdict for up to 50 packages in one call: version to pin, short reason, full notice only where it matters
check-packageOne package in depth: advisories with CVE and fix, deprecation, license, lookalike names, policy violations
get-docsDocs from the published package and its repo at the release tag, for the version you name or the one installed
find-libraryLibrary name to registry package (next.js to npm:next), with the safe version
upgrade-guideWhat changes between two versions: breaking changes, renamed APIs, advisories the move fixes
check-manifestWhole-tree audit of a lockfile or manifest, with SARIF; the GitHub Action runs it in CI

Ecosystems: npm, PyPI, Cargo, Go, Maven and Gradle, NuGet, RubyGems, Composer, GitHub Actions. Verdicts never say ok when a source did not answer. A committed .pinright.json sets allow and deny lists, license rules, severity threshold and what to do when a source is down. How it works · the hook · team policy · CLI · GitHub Action

Privacy and limits

No account, no telemetry. pinright sends package names and versions to deps.dev, OSV, the registries, jsDelivr and GitHub, never your code; SECURITY.md lists each host. The hook reads commands and files statically: it is a guardrail, not a sandbox, and the threat model lists what gets past it. When a source is down the built-in default lets the install through; the starter policy asks instead.

More

Install · prompt injection · benchmark · security review · changelog · contributing · release runbook

The report we value most is a false positive: a command the hook blocked, or a package it flagged, that should have passed. Open an issue with the template and paste the command and the output of npx pinright doctor --json. Report a vulnerability in pinright privately, as SECURITY.md describes.

MIT. Built by Hiper AI ([email protected]). Site: pinright.dev. Everyone taking part follows the Code of Conduct.

来源:README.md,提交 db06565

工具

6

find-library

Find a library (with security verdict)

Finds the registry package for a library name ("next.js" -> npm:next, "pytorch" -> pypi:torch) and returns ids for get-docs, with the newest version that has no known advisories (safe) and a verdict. Skip it when you know the registry name: get-docs takes "npm:next" or "pypi:requests" directly, and check-packages takes plain names.

输入参数query必填ecosystemlibraryName必填

get-docs

Documentation for the version you will use (security-checked)

Returns the documentation sections that answer your question, taken from the package at a specific version (its published files and its repo at the release tag) and the project site. Without a version it documents the newest version with no known advisories. With a vulnerable version it starts with a SECURITY NOTICE and documents the safe version on the same release line, so the code you write keeps working after the upgrade.

输入参数namequerytokensversionecosystemlibraryIdpackageName

check-package

Check a package before installing it

Supply-chain verdict for one package, no docs: known advisories (CVE/GHSA, malware), deprecation, license, newest version with no known advisories, the safe version on the same release line as the one you pass, and typosquat lookalikes. For several packages use check-packages, one call for the whole list.

输入参数name必填detailversionecosystem必填

check-packages

Check a whole dependency list in one call

Supply-chain verdict for up to 50 packages at once: one table row per package (verdict, version to pin, short reason) and the full notice only for the ones that need attention. Call it once with every dependency you plan to add, before writing the manifest, instead of one check per package. Packages already in the project are checked at their installed version when you omit it.

输入参数packages必填ecosystem

check-manifest

Audit a whole dependency tree

Audits every package in a lockfile (direct and transitive) against OSV, the way Dependabot would, and says how to fix each finding: the direct upgrade on the same release line, the parent upgrade that clears a transitive one, or an override. Pass a project directory or a file path, or the file content with its name. Supported: package-lock.json, npm-shrinkwrap.json, pnpm-lock.yaml, yarn.lock, package.json, requirements.txt, poetry.lock, uv.lock, pdm.lock, pyproject.toml, Cargo.lock, Cargo.toml, go.mod, Gemfile.lock, packages.lock.json, gradle.lockfile, pom.xml, build.gradle, build.gradle.kts, libs.versions.toml, composer.lock, composer.json, requirements*.txt. Without a lockfile the tree is resolved through deps.dev. GitHub workflows (.github/workflows/*.yml, action.yml, or the directory) get an Actions check: advisories and SHA pinning.

输入参数pathcontentfileNameincludeDev

upgrade-guide

What changes between two versions

Breaking changes, removed or renamed APIs, config and default changes, packages that split off, deprecations, and the advisories fixed, between the version a project uses and the one to move to. Sources: changelogs and GitHub release notes for the versions in between, migration guides when a major is crossed, and (npm) a diff of the exported .d.ts API. Call it before upgrading across a major, when a SECURITY NOTICE recommends a new major, or to fix a Dependabot PR. Without "to" it uses the version pinright recommends.

输入参数tofromquerytokenspackageecosystemlibraryId

版本历史

1
  1. v1.0.0最新Nov 3, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分