原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

Nacre

作者:nacre-work版本 0.41.0i★ –i在你的电脑上运行
注册名称work.nacre/nacre

安装

概览

作者提供的说明(英文原文)

Self-hosted permission-aware context layer. Search returns only what the caller may read.

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 搜索与 AI 记忆
  • 你需要填写:NACRE_SERVICE_KEY

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。

你需要

  • npm已安装 Node.js(用于 npx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "nacre": {
      "command": "npx",
      "args": [
        "-y",
        "@nacre.work/mcp"
      ],
      "env": {
        "NACRE_SERVICE_KEY": "your-value"
      }
    }
  }
}

在终端中运行这条命令

claude mcp add nacre --env NACRE_SERVICE_KEY=your-value -- npx -y @nacre.work/mcp

运行前请先填写空着的值。

在 Cursor 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "nacre": {
      "command": "npx",
      "args": [
        "-y",
        "@nacre.work/mcp"
      ],
      "env": {
        "NACRE_SERVICE_KEY": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "nacre": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@nacre.work/mcp"
      ],
      "env": {
        "NACRE_SERVICE_KEY": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

需要你填写的值

  • NACRE_SERVICE_KEY 机密 必填 env
    Service-account key for STDIO mode. The server also needs the deployment's full environment (database and backend configuration) - see docs/mcp.md; the key alone is not enough to start it.

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过域名 nacre.work 验证(注册中心会核实域名所有权)

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“搜索与 AI 记忆”中的其他服务器比较i

  • 星标数多于此分类中其他 7270 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 7270 个服务器的 74% 更新
  • 基础检查结果等于或优于此分类中其他 7270 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

Nacre 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

你需要填写:NACRE_SERVICE_KEY

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(0.41.0)于12天前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。

有什么可以替代它?

同一分类中有:Context7, Codebase Memory, Exa

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Context7

作者:upstash

Up-to-date docs for AI agents

电脑或云端★ 64,224MIT昨天更新
安装

Codebase Memory

作者:DeusData

Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.

在你的电脑上运行★ 48,148MIT21天前更新
安装

Exa

作者:exa-labs

Connect AI agents to Exa for web search, content fetching, and multi-step research.

在云端运行★ 5,213MIT上个月更新
安装

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

Nacre Your index. Your access rules. Your perimeter.

Agents see exactly what they're allowed to see.

nacre.work · Docs · Quickstart · Discussions


Nacre is a self-hosted knowledge index with fine-grained access control. Agents reach it over MCP, applications over a REST API. No chat interface, no company assistant — just the context layer underneath them.

Why

Vector search is a solved problem. What isn't solved: making sure an agent querying a company index sees exactly the documents the requesting user is cleared for — and being able to prove it to an auditor.

  • Permissions that inherit. Workspaces → layers, with read/write/admin inherited top-down. write does not imply read; admin implies both. Document-level grants and deny rules are commercial — this build refuses them and says so, rather than accepting a rule it cannot propagate.
  • Filtering happens inside the index. Access filters are applied during HNSW traversal, not after ranking, so top_k returns k permitted results rather than k minus whatever got stripped out.
  • MCP as a first-class surface. Streamable HTTP per the 2026-07-28 spec, and local STDIO for developer agents. Agents authenticate with a service account key; OAuth discovery is served (RFC 9728), and client registration is the authorization server's business rather than ours.
  • Hybrid retrieval, because agents ask for identifiers. Dense vectors and BM25 fused with reciprocal rank fusion, plus a cross-encoder rerank where a deployment configures one. Not offered as a differentiator — the line above is the honest one — but an agent searching for SQLSTATE 23505, an invoice number or a variable name needs the literal match, and a dense-only index does not reliably return it.
  • Bring your own models. Embeddings through any OpenAI-compatible endpoint, bound per layer. Changing the model on an existing layer is a reindex that keeps search answering throughout, and it is gated on recall against a query set you supply before it switches over.
  • A command line client. npx @nacre.work/cli signs in, creates a layer, walks a directory into it and searches — the four curl invocations the quickstart spells out, for when you want the result rather than the contract. A document that fails to index is a non-zero exit, so a nightly ingest cannot report success having indexed nothing.
  • Stays inside your network. Docker Compose, no phone-home.

Quickstart

git clone https://github.com/nacre-work/nacre && cd nacre

cp .env.example .env docker compose --profile minimal up -d

Full walkthrough: docs/quickstart.md.

On an Apple Silicon Mac, read docs/apple-silicon.md first — the images are arm64 and the stack is native, but the embedder is the one piece you run on the host.

Layout

packages/api        REST API and authorization service

packages/mcp MCP server (Streamable HTTP + STDIO) packages/worker indexing pipeline: parse, chunk, embed packages/core data model, permission resolver, shared types packages/sdk TypeScript SDK packages/admin community admin UI services/parser Python sidecar: bytes → {text, blocks, metadata} docs/ specifications — normative, and ahead of the code

State

Early, and it runs. The loop works end to end and has been driven by hand against a real PostgreSQL and a real Qdrant: create an organization, create a layer, grant someone read, ingest a document, poll the job to indexed, search and get the chunk back — and search as someone without the grant and get nothing while the vectors are still sitting in the index. Both surfaces work, REST and MCP over Streamable HTTP and STDIO alike. Revoking a grant removes the document from results on the next request: the permitted set is computed from the grants on every search, so there is no cache in the index to fall behind.

Search is rate limited per organization, unsafe methods take an Idempotency-Key, collections page by cursor, and reranking runs on the search path when a deployment configures a reranker. Tombstoned vectors are collected, and the SDK and the admin UI are written.

Signing in works: email and password, with rotating refresh tokens that end the session if one is replayed. init creates the first administrator and prints a generated password once. SSO is a commercial module.

The access log is readable: GET /v1/audit, newest first, cursor-paged, as JSON, JSONL or CSV. org_admin sees which documents were read — the question an audit log exists to answer — and platform_admin sees administrative actions and never that, which is rule 2 applied to the journal.

A layer can be moved onto a different embedding model. Qdrant will not add a named vector to a collection that exists, so the collection is replaced rather than altered: every point copied across with no embeddings computed, one statement to switch the pointer, then re-embedding one layer at a time. Search stays available and stays one query throughout. Before a layer switches, its reference query set is scored against the new model and a migration that lost recall stops instead of going live — that gate is off until you write a set, because it needs documents only you can pick.

A document can be uploaded as a form as well as sent as JSON, and a PDF, an Office or OpenDocument file (text, presentation or spreadsheet), an EPUB or an RTF is extracted by the parser sidecar. Both signals have to agree — the part declares the format's type and the bytes begin with its signature — because a declared type the bytes contradict is a disagreement, and sniffing alone would make the declared type decoration. Any other binary format is still refused at the edge, and a scanned PDF with no text layer is refused rather than indexed as nothing.

Tokens can be signed with an Ed25519 key instead of a shared secret, in which case the public half is published at /.well-known/jwks.json and only the process issuing tokens holds the private one.

`docker compose --profile minimal up` has been run from a clean clone, and the whole loop driven through it.

What is not built is what a commercial licence covers, and docs/licensing.md lists it: multi-tenancy, SSO, document-level permissions and deny rules, ID-JAG, SIEM export, a global admin, and quotas.

docs/ is the specification, and it still runs ahead of the code in places — start with docs/authz.md, which everything else depends on.

Invariants

Six rules. Breaking any of them is a security incident, not a bug. Details in docs/authz.md.

  1. The organization comes from the token and nowhere else.
  2. Access filtering is a pre-filter, never a post-filter.
  3. A failure to evaluate permissions denies access.
  4. "No permission" and "no such object" return identical responses.
  5. A deleted document is never returned, including before garbage collection.
  6. write does not imply read.

License

Apache 2.0 — all of it. Everything above is in this repository and stays there.

Tenancy (suspension, offboarding, quotas), SSO over OIDC with SCIM group sync, issuing document-level grants and deny rules, EMA, SIEM forwarding, global admin, backup, a required second factor and filtered directory administration are commercial modules. They live in a separate private repository under a separate license and are not distributed with this one — see docs/licensing.md for the line between the two and the one question that decides it.

Where this build meets one of them it refuses in the open: a deny rule or a document-scoped grant is answered 400 with the reason, rather than accepted and silently not enforced.

The Nacre name and mark are trademarks; see TRADEMARK.md.

Supporting this

There is no hosted tier, no seat count and nothing metered here, so the open half earns nothing by being used — which is the point, and also why it is worth saying who pays for it. The commercial modules do, and they are for the organizations that need them; a developer running this on a laptop is never the person being asked.

If it saved you a week, the Sponsor button at the top of this repository is the other way to say so. Nothing in this repository is behind it, and nothing will be.

问 PopNx