NinFenz Content Gate
Provides an integration surface for .NET, enabling the NinFenz content contract layer and document generation tools to be used from .NET environments.
Provides an integration surface for npm, enabling the NinFenz content contract layer and document generation tools to be consumed from npm packages.
Provides an integration surface for Rust, enabling the NinFenz content contract layer and document generation tools to be used from Rust projects.
NinFenz · 文档生成工坊(规范驱动)
站点(线上):https://ninfenz.dev · 机器入口 llms.txt
NF 终端(TUI)演示 —— 全屏人机入口(纯标准库);菜单与动作是 nf CLI 真命令的受控调用方。
键位按顶尖终端约定:Tab 切面板、↑↓ 在当前面板内移动、/ 过滤、? 看键位。

┌ NF TUI v1.0.0 · NinFenz 内容契约层 ──────────────────────────────────────────────────────────┐
│仓库 NinFenz · 能力区 9 焦点 动作 · 就绪(0 项待办)│
├────────────────────────┬─────────────────────────────────────────────────────────────────────┤
│ 能力区 1/9 │▍ 动作 · 环境自检(2) │
│▸ 0 环境自检(2) │❯ 只读体检 nf doctor │
│ 1 一键演示世界(1) │ 体检(机器面) │
│ 2 需求 → 装配计划(2)│ │
│ 3 全链生产(2) ├─────────────────────────────────────────────────────────────────────┤
│ 4 校验与体检(4) │ 输出 · 1-3/3 · 已跟随 │
│ 5 货架与资产(4) │❯ nf doctor (退出码 0 · 0.42s) │
│ 6 管线与模块(4) │环境自检:Python 3.11 · 仓库在场 · 模块 13 · 管线 3 │
│ 7 帮助与命令面(2) │✔ 只读体检通过:无缺件 / 无越界 / 无非确定性输出 │
│ 8 写盘表单(13) │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
│ │ │
├────────────────────────┴─────────────────────────────────────────────────────────────────────┤
│ Tab 切面板 · ↑↓ 移动 · / 过滤 · Enter 运行 · ? 帮助 · q 退出 │
└──────────────────────────────────────────────────────────────────────────────────────────────┘python tui/nf.py 进全屏界面;--selftest 跑安全自检,--demo 打印上面这帧,--exec "nf doctor" 是脚本面
(无 TTY 亦可:--list-actions --json 给 agent 列动作与退出码)。命令在后台线程跑,运行中 Ctrl-C 只取消该命令;
路径参数过仓库包含性判据、写盘需键入 yes 确认、密钥只从环境变量读并遮蔽显示。细节见 tui/README.md。
MIT License · 原创开源 · 衍生/引用请注明来源
NF 是内容契约层——定义“AI 稳定产出长内容”的协议、质量与资产标准;协议本身域中立、模型无关。
别名与检索词:NF · NinFenz · 宁封子 · 内容契约层(content contract layer)· 规范驱动的内容工厂 · 长内容生成协议 · 装配式内容生产 · 模块/管线/资产 · 质量门禁 · 域包 · MCP 接入。
不是什么:不是模型、不是提示词模板集、不是某厂商 SDK——协议本体域中立、模型无关;MCP 只是可对接的连接协议之一。
bash verify.sh(当前基线见下方生成区「质量凭证」行) · python scripts/nf.py --version
⚡ 如果你是 AI / Agent
这是什么:规范驱动的文档工厂,装模块/管线/资产 → 校验 → 输出。
入口链:
docs/agent/AGENT_START.md(开工)→docs/agent/AI_ROUTING.md(选线)→docs/meta/DEEP_DIVE.md(懂得深)。机器凭证:
bash verify.sh(当前基线见下方生成区的「质量凭证」行,由nf stats --write写入);机器入口清单见llms.txt;语言面见README.en.md·README.ja.md(三面的机读事实与语言切换行由 check34 的语言面扫描断言一致;注册表 =protocol/locales.json)。要懂 NF 为什么这样设计:读 docs/meta/DEEP_DIVE.md。
Related MCP server: agentfolio-mcp-server
快速开始
作者/开发者,5 分钟:
bash verify.shpython scripts/nf.py shell(交互终端:端壳退役后的人机入口,见docs/terminal.md)python scripts/nf.py demopython scripts/nf.py --helppython scripts/nf.py doctorpython scripts/nf.py completion bash
AI 装配:
读
docs/agent/AGENT_START.md读
docs/agent/agent_组装指令包_v0.2.md按需取 01/02/06/07 与 community 包
组装完整版并过
##7自检nf assemble "<需求>" --build --dest <目录>(组装式命令:直接产「完整版」单文件)nf assemble "<需求>" --check <out.md>
常见问题(FAQ)
NF 是什么? 内容契约层:把「AI 稳定产出长内容」定义成协议 + 质量门 + 资产标准,使产出可装载、可质检、可复现。
NF 是 MCP 服务器吗? 不是必须。协议与资产都是纯文本,克隆或直链即可装载;
nf serve才额外提供 MCP 接入面。支持哪些模型? 模型无关:任何能读文本的 AI 都能按协议装配与装载,不绑定某家模型或某个连接协议。
必须联网吗? 不必。仓库本身就是 markdown 源件;
bash verify.sh只读本地,可离线跑。产出怎么判合格? 判据只来自内部链:verify 门禁(静态可核)+ 五维纵深自评 + 真实战例;外部评价不作为质量背书。
怎么引用? MIT 许可;引用请注明来源,机读元数据见仓库根引用文件(
CITATION.cff)。出口与合规? 密码学只走标准库 + 外部
ssh-keygen(不自制算法);出口管制读法见docs/EXPORT.md。
能力与资产
官方核心:13 模块 · 3 管线(P00 / P01 / P90) · 核心协议件 01–07
社区规模:111 登记包 · 363 资产档 · 101 概念图 · 100 域包/1200 细分 · 标准目录 370 条(可达 332 / 不可达 38 · 机构 194 · 206 条依赖边) · 标准绑定 1200 条
质量凭证:verify v2.30 · check1-42 · PASS=76(bash verify.sh 单入口;期望基线取自 quality_baseline.EXPECTED_*) · 馆藏 3 件
分层:data 148 · eng 38 · form 29 · gov 71 · iface 84 (按标准目录 layer)
本区由
python scripts/nf.py stats --write生成,禁止手改;口径与实算真源见protocol/repo_stats.json。
协议链与文档导航
层 | 入口 |
方向 |
|
协议 |
|
库 |
|
社区 |
|
AI |
|
工具 |
|
接入面 |
|
馆 |
|
版本块
版本 | 状态 |
v2.12.0 | 当前(2026-10-05)· 知识层 + 终端线 + 顶尖对标补齐 + 数字资产契约层 |
v2.11.0 | 已发布 2026-09-10 · world_model 确定性抽象状态契约 + world_slots |
v2.10.0 | 已发布 2026-09-09 · 45 质量纵深 + 基础层 A 组收口 |
v2.9.0 | 已发布 2026-09-08 · STRATEGY + 43/44 随波 |
v2.8.0 | 已发布 2026-09-08 · 41/42 波 C 质量收口 |
详细版本演进见 CHANGELOG.md 与 docs/meta/VERSION-MATRIX.md。
Available Tools
12 toolsasset_listList asset keysARead-onlyIdempotent
List asset files and the uppercase keys they declare, from community/*/assets and 05_资产库/用户自定义. Use it to discover a key before asset_read; do not use it to fetch asset text (asset_read) or to list modules/patterns (module_read / pattern_list). Optional package is an exact directory name, not a glob, path, or regex, and restricts the scan to community//assets (for example 校园情感领域包); README.md files are skipped. A package with no matching files returns an empty list, not an error.
Keys are sorted and uncapped; each call rescans the local asset files.
| Name | Required | Description | Default |
|---|---|---|---|
| package | No | Optional community package name; omit to scan all community assets and 05_资产库. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | Asset files and their declared keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description still adds real behavior: README.md files are skipped, a package with no matches returns an empty list rather than an error, keys are sorted and uncapped, and every call rescans local files (i.e., no cached/stale view). These are non-obvious traits an agent cannot infer from the schema or hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and scan scope are front-loaded, followed by routing guidance, then parameter constraints and edge-case behavior. Every sentence carries distinct information; nothing is restated from the name, title, or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and annotations already carry the safety profile. The description still covers scan scope, parameter form, skip rules, empty-result behavior, ordering, and refresh semantics, leaving no gap an agent would need to guess at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes further by ruling out misuse ('exact directory name, not a glob, path, or regex'), stating the resulting scope (community/<package>/assets), and giving a concrete example value (校园情感领域包). It stops short of describing the multi-package precedence between community and 05_资产库 when omitted, but adds clear value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('List asset files and the uppercase keys they declare') plus the exact scan roots (community/*/assets and 05_资产库/用户自定义), which no sibling shares. It even names the sibling reads it is not (asset_read, module_read, pattern_list), so the agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('discover a key before asset_read') and explicit when-not-to-use with named alternatives ('do not use it to fetch asset text (asset_read) or to list modules/patterns (module_read / pattern_list)'). This is a complete routing rule, not an implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asset_readFetch asset contentARead-onlyIdempotent
Read asset files for a key, returning package, path, and text.
Use only a key from asset_list; for enumeration use asset_list, for other resources module_read or pipeline_read.
The key is exact uppercase, never glob, regex, package, path, or prose. The package is an exact directory; it narrows files but never key matching.
Tokens come from each file's name or first 6000 characters; lowercase/partial keys fail. Full text is returned; no truncation.
Without a package, all community assets and 05_资产库 are searched. A package limits the scan to one directory with no fallback. Multiple matches may be returned. No match is an error.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Exact, case-sensitive asset key (for example EMOTION_WHEEL, JOB, or TECH_RULES). | |
| package | No | Optional community package name; omit to search all community assets and 05_资产库. |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | Yes | Requested asset key. |
| matches | Yes | Matching files, one entry per declaring asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses the default search scope (all community assets plus 05_资产库), that a package limits the scan to one directory with no fallback, that multiple matches may be returned, that no match is an error, and that full untruncated text is returned. Annotations only cover safety; the description carries the substantive behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then constraints, then scope — good ordering with no filler sentences. The telegraphic style ('Tokens come from each file's name or first 6000 characters') is dense enough that a first-time reader may need a re-read, costing some clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the description covers everything else an agent needs: valid input form, failure conditions, search scope, and multiplicity of results. Nothing material is missing for a two-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds real semantics the schema lacks: keys are exact uppercase and never glob/regex/package/path/prose, lowercase or partial keys fail, and package narrows files but never key matching. It also explains that omitting package searches all community assets and 05_资产库.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Read asset files for a key' — and even names the return shape (package, path, text). It explicitly distinguishes itself from asset_list, module_read, and pipeline_read, so an agent can route without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('Use only a key from asset_list') and when-to-use-something-else ('for enumeration use asset_list, for other resources module_read or pipeline_read'). The alternative routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knowledge_order_readResolve knowledge orderARead-onlyIdempotent
Return the declared knowledge-source query order and a contract-first flag.
Use it before assembling or citing NF content; do not use it to search documents (use library_search instead) or read module/asset bodies (module_read / asset_read).
Optional clearance is a visibility ceiling: public keeps public sources, internal keeps public and internal, restricted keeps all. Use public before republishing material, or omit it to keep all. Filtered sources are omitted without reordering the rest, and count is post-filter. Reads only the declaration, never source bodies.
| Name | Required | Description | Default |
|---|---|---|---|
| clearance | No | Consumer clearance; hides sources above this visibility. Omit to keep every source. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of sources in query_order. |
| clearance | Yes | Applied clearance, or '不裁剪' when omitted. |
| query_order | Yes | Sources in required consultation order. |
| contract_first | Yes | True when the first source in the declared order is contract-level. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. Beyond that, the description adds non-obvious behavior: filtered sources are omitted without reordering the remainder, count is post-filter, and it 'reads only the declaration, never source bodies' — meaningful operational context not derivable from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the return contract, then usage, then parameter semantics, then a closing read-scope caveat. Three sentences with no filler; every clause either routes the agent, defines the parameter, or discloses filtering behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is not required, and the description correctly focuses on when to call, when not to, and how clearance filtering behaves. For a zero-required-parameter read tool with an output schema, nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the enum values are already documented, so the baseline is 3. The description goes further by explaining the ceiling semantics concretely — 'public keeps public sources, internal keeps public and internal, restricted keeps all' — and clarifying the omit behavior, which adds interpretive value beyond the enum list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource pair ('Return the declared knowledge-source query order and a contract-first flag'), naming exactly what is produced. It then explicitly distinguishes itself from siblings by naming library_search, module_read, and asset_read as the tools for the jobs this one does not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the trigger ('Use it before assembling or citing NF content') and two explicit exclusions with the correct alternatives ('do not use it to search documents (use library_search instead)', 'read module/asset bodies (module_read / asset_read)'). It also advises 'use public before republishing material', a concrete usage condition for the single parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
library_readRead library entryARead-onlyIdempotent
Read one library catalog entry by ID, returning its frontmatter record and body. Use it after library_search resolves the ID; do not use it to search (library_search) or to read modules, pipelines, or assets (module_read / pipeline_read / asset_read). The ID is the canonical stem without the .md suffix and matching is case-insensitive (for example NF-1); an unknown ID returns an error carrying the requested value and repair guidance. Reads one local file and returns its full text without truncation. Local-only; no auth or rate limits.
| Name | Required | Description | Default |
|---|---|---|---|
| entry_id | Yes | Catalog ID, case-insensitive (for example NF-1 or nf-worldcampus-monyeah777-1). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Canonical catalog ID. |
| path | Yes | Repository-relative Markdown path. |
| text | Yes | Full Markdown body as stored on disk. |
| bytes | Yes | UTF-8 byte length of text. |
| found | Yes | True when the entry was located. |
| status | Yes | Catalog lifecycle status (for example active). |
| frontmatter | Yes | Parsed YAML frontmatter as JSON; keys vary by entry. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false. The description adds valuable behavioral details beyond those annotations: unknown IDs return an error with the requested value and repair guidance, reads are local-only, the full text is returned without truncation, and there are no auth requirements or rate limits. This is rich transparency for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then immediately covers routing, ID format, error behavior, read characteristics, and environment constraints. Every sentence carries useful information, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the 100% schema description coverage, and the presence of an output schema, the description is fully complete. It covers purpose, sibling differentiation, ID format, error handling, return behavior, and local-only constraints, leaving no critical gap for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single parameter's case-insensitivity and example are already documented. The description adds additional format semantics not present in the schema: the ID is 'the canonical stem without the .md suffix' and matching is case-insensitive. This meaningfully extends parameter understanding beyond the structured field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Read one library catalog entry by ID, returning its frontmatter record and body.' It also explicitly distinguishes this tool from siblings, naming library_search, module_read, pipeline_read, and asset_read as alternatives. An agent can select this tool without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is explicit: 'Use it after library_search resolves the ID; do not use it to search ... or to read modules, pipelines, or assets.' This provides both when-to-use and when-not-to-use guidance, along with named alternatives. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
library_searchSearch library and docsARead-onlyIdempotent
Search the library catalog and repository docs for query, returning ranked catalog entries plus matching document titles. Use it to find an entry ID for library_read or to locate a doc or package README; do not use it for exact module or protocol metadata (registry_search / spec_list). Catalog matching is case-insensitive and relevance-ranked; document hits match the filename or H1 title as a case-sensitive substring.
The combined list is capped by limit (1–50, default 10), and there is no offset or next-page parameter. Catalog hits come first, so a full catalog page can hide document hits; an empty query returns the first page of document hits only, and no matches yields an empty list.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum combined hits to return (default 10); catalog and document hits share the cap. | |
| query | Yes | Search text; catalog hits are relevance-ranked and document hits match filename or H1 title. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | Ranked catalog entries followed by matching documents, truncated to limit. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so safety is covered; the description adds substantial behavior beyond that: case-insensitive relevance-ranked catalog matching vs case-sensitive substring doc matching, catalog-first ordering that can hide doc hits, and the empty-query / no-match behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight paragraphs: purpose and routing first, then edge-case behavior. Every sentence carries distinct information (matching rules, cap semantics, ordering hazard, empty-query result) with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be enumerated, and nothing an agent needs to call this correctly is missing: routing, matching semantics, cap behavior, and pagination absence are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real semantics the schema lacks: the 1–50 cap is shared between catalog and document hits, and there is deliberately no offset/next-page parameter. This meaningfully clarifies query and limit behavior beyond the field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) plus the two resources searched (library catalog and repository docs), and explicitly names the sibling tools it is not (library_read is the follow-up consumer, registry_search/spec_list cover exact metadata). An agent can route without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use (find an entry ID for library_read, locate a doc or package README) and when-not (exact module or protocol metadata, pointing at registry_search / spec_list). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
module_readFetch module documentARead-onlyIdempotent
Read one NF module's full Markdown by ID, including its raw machine-contract block when present.
Use it after registry_search resolves a module, or enumerate module IDs with registry_search and an empty query; do not use it for pipelines or assets (pipeline_read / asset_read).
The ID is the declared machine-contract or heading ID (M90), or a qualified ID (通用:M10, as returned by registry_search), not the filename; matching is case-sensitive. An unknown ID returns an error with the requested value and repair guidance. Returns the full file plus resolved metadata from one local file and does not evaluate the contract. Local-only; no auth, network, rate limits, or writes.
| Name | Required | Description | Default |
|---|---|---|---|
| module_id | Yes | Exact ID (M90) or qualified ID (通用:M10); matching is case-sensitive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Machine-contract or heading ID of the module. |
| path | Yes | Repository-relative Markdown path. |
| text | Yes | Full module Markdown as stored on disk. |
| bytes | Yes | UTF-8 byte length of text. |
| found | Yes | True when the module was located. |
| has_machine_contract | Yes | True when a machine_contract block was parsed from the file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/closed-world annotations, it discloses the error behavior for unknown IDs (returns the requested value plus repair guidance), that metadata is resolved from a single local file, that the contract is not evaluated, and that there is no auth, network, rate limit, or write side effect. This is substantive behavior an agent cannot get from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then usage, then ID semantics, then behavior; every sentence carries information. Minor overlap between the trailing 'no auth, network, rate limits, or writes' and the existing annotations, but not wasteful enough to penalize more.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be enumerated, and the description still clarifies what comes back (full file plus resolved metadata) and what is deliberately not done (contract evaluation). For a single-required-param read tool, nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline is 3, but the description adds real meaning: the ID is a declared machine-contract/heading ID (M90) or a qualified ID (通用:M10) as returned by registry_search, explicitly not the filename, and matching is case-sensitive. It complements rather than repeats the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (read), a specific resource (one NF module's full Markdown by ID), and the extra artifact returned (raw machine-contract block). It also explicitly distinguishes itself from pipeline_read and asset_read, so an agent can separate it from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the positive trigger (after registry_search resolves a module, or enumerate IDs via registry_search with an empty query) and the negative trigger (not for pipelines or assets, with the correct alternatives named). Both when-to-use and when-not-to-use are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pattern_listList patternsARead-onlyIdempotent
List engineering patterns as id/path/title/status metadata from patterns/*/PATTERN.md, sorted by ID. Use it to discover a pattern ID before pattern_read; do not use it to fetch pattern text (use pattern_read instead) or to list modules/assets (module_read / asset_list). Returns metadata only, never the PATTERN.md body, with no pagination; no matches yields an empty list, and each call rescans the local patterns directory.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | Patterns sorted by ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely new behavioral facts: metadata-only returns, no pagination, empty list on no match, and a fresh rescan of the local patterns directory on every call. The last point is a real cost/consistency signal not derivable from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and return shape, then routes to alternatives, then the operational caveats. Dense but each clause carries distinct information; slightly long for a zero-parameter list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still summarizes the return shape and edge cases (empty list, no pagination, metadata only). Combined with the strong routing guidance, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; the description correctly implies no filtering or paging inputs, but with an empty schema there is nothing further to add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List engineering patterns as id/path/title/status metadata from patterns/*/PATTERN.md, sorted by ID') and explicitly contrasts itself with pattern_read, module_read, and asset_list, so an agent can distinguish it from every sibling without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives both the positive case ('Use it to discover a pattern ID before pattern_read') and the negative case ('do not use it to fetch pattern text ... or to list modules/assets'), naming the correct alternatives for each. Nothing about when to select this tool is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pattern_readRead engineering patternARead-onlyIdempotent
Read one engineering pattern's full Markdown from patterns//PATTERN.md, including frontmatter, rules, and a counterexample. Use it for the practice behind an NF rule; do not use it to enumerate patterns (pattern_list) or read domain modules (module_read). pattern_id is the exact, case-sensitive directory name such as fail-closed-verification, not the document title. A missing pattern is an error, not an empty result; reads one local file and returns its full text without truncation. Local-only; no auth or rate limits.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern_id | Yes | Exact pattern directory name (for example fail-closed-verification or single-source-truth). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Pattern directory name. |
| path | Yes | Repository-relative Markdown path. |
| text | Yes | Full PATTERN.md body as stored on disk. |
| bytes | Yes | UTF-8 byte length of text. |
| found | Yes | True when the pattern was located. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/closed-world annotations, it discloses error semantics ('a missing pattern is an error, not an empty result'), output fidelity ('full text without truncation'), and operational context ('Local-only; no auth or rate limits'). These are non-obvious traits the agent needs and are not in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose then routes alternatives, parameters, and error behavior. Dense but every clause carries information; slightly packed into long sentences rather than cleanly separated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return format needn't be restated, and the description still notes full untruncated text. For a single-file read tool, an agent has everything needed to call it correctly and interpret errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: pattern_id is case-sensitive and is the directory name, not the document title (e.g. fail-closed-verification). That disambiguation goes beyond the schema's own wording.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one engineering pattern's full Markdown') plus the exact location (patterns/<id>/PATTERN.md) and contents (frontmatter, rules, counterexample). It also names the sibling tools it is not, so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case ('for the practice behind an NF rule') and explicit exclusions with named alternatives: pattern_list for enumeration and module_read for domain modules. Nothing is left to inference about when to pick this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pipeline_listList pipelinesARead-onlyIdempotent
List NF pipelines as path/title metadata from 03_管线库 and community/*/pipelines. Use it to discover a pipeline ID before pipeline_read; do not use it to fetch pipeline text (use pipeline_read instead), module metadata (registry_search), or protocol packages (spec_list). The optional query is a case-sensitive substring of the repository-relative path or H1 title, not file content; wildcard characters are literal. Omit it to list every pipeline (examples: P04, 技术文档, 校园). Returns metadata only, never pipeline bodies, sorted by repository path; no matches yields an empty list, and each call rescans the repository. Local-only; no auth or rate limits.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Case-sensitive substring matched against the relative path and H1 title; omit to list every pipeline. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | Pipelines matching query, sorted by repository path. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/non-destructive, but the description adds substantive context beyond them: each call rescans the repository, results are sorted by repository path, no matches yields an empty list, and it is local-only with no auth or rate limits. It also reiterates that bodies are never returned, which is the key behavioral boundary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence front-loads scope, the second routes usage, and the remainder packs only actionable detail with zero filler. Dense but every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one optional parameter, full schema coverage, an output schema, and annotations, the description closes the remaining gaps (rescan cost, sort order, empty-result behavior, no auth). Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3; the description earns extra by clarifying that the query matches the repository-relative path or H1 title and not file content, that wildcard characters are literal, and by giving concrete example values (P04, 技术文档, 校园). It stops short of 5 only because the core matching rule is already in the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list NF pipelines), names the exact locations scanned (03_管线库 and community/*/pipelines), and clarifies it returns metadata only. An agent can distinguish it from pipeline_read, registry_search, and spec_list without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes when to use it (discover a pipeline ID before pipeline_read) and enumerates three do-not-use cases with the correct alternative named for each. No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pipeline_readFetch pipeline documentARead-onlyIdempotent
Read one NF pipeline's full Markdown by P-number or repository-relative path. Use it after pipeline_list identifies a pipeline; do not use it to list pipelines (use pipeline_list instead) or read modules/assets (module_read / asset_read). pipeline is either a Pxx stem (P01, matched against the filename prefix) or a .md path under 03_管线库/ or a community pipelines/ directory; paths outside those roots and .. escapes are rejected. A missing pipeline is an error, not an empty result; reads one local file and returns its full text without truncation. Local-only; no auth or rate limits.
| Name | Required | Description | Default |
|---|---|---|---|
| pipeline | Yes | Pxx stem (P01) or repository-relative .md path under 03_管线库/ or community/*/pipelines/. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | Repository-relative Markdown path. |
| text | Yes | Full pipeline Markdown as stored on disk. |
| bytes | Yes | UTF-8 byte length of text. |
| found | Yes | True when the pipeline was located. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive/closed-world, and the description adds context beyond them: local-only with no auth or rate limits, a missing pipeline is an error rather than an empty result, no truncation, and path-validation rules rejecting roots outside 03_管线库/ and community/*/pipelines/ and '..' escapes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then constraints and error semantics in tight order; content is dense but every sentence carries a distinct fact. Slightly longer than minimal, but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema, everything an agent needs is present: usage routing, accepted identifier forms, path restrictions, and error behavior. Return format is correctly left to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the single 'pipeline' parameter, but the prose adds real meaning beyond it: the Pxx stem is matched against the filename prefix, and the accepted path roots and the '..' escape rejection clarify the accepted syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Read one NF pipeline's full Markdown by P-number or repository-relative path.' It explicitly distinguishes itself from pipeline_list, module_read and asset_read in the same breath, so an agent can select it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('after pipeline_list identifies a pipeline') and when-not-to-use with named alternatives for both the listing case (pipeline_list) and the module/asset case (module_read / asset_read). Routing guidance is complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
registry_searchSearch module registryARead-onlyIdempotent
Query the NF registry for modules whose id or name contains query. Use it to resolve a module ID before module_read; do not use it for the authoritative protocol package catalog (spec_list) or free-text document search (library_search). Matching is case-sensitive; query is required, and an empty query matches every entry (examples: M90, 技术文档域包). Results are grouped under modules and protocols, with protocol hits secondary. Reads registry.json only and never scans module or pipeline files; it never matches descriptions, paths, or file contents, and no matches yields empty arrays.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Case-sensitive substring matched against module and protocol ids and names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| modules | Yes | Matching modules in registry order. |
| protocols | Yes | Matching protocol packages in registry order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, yet the description adds substantial context: reads registry.json only, never scans module or pipeline files, never matches descriptions/paths/file contents, no matches yields empty arrays, and results are grouped with protocol hits secondary. This is disclosure well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then filtering behavior, then exclusions and edge cases in one dense block. Every clause earns its place, though the long semicolon-chained sentences are heavier than ideal for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-required-param read tool with an output schema, the description covers matching semantics, edge cases, exclusions, and result shape (grouped modules/protocols). Nothing an agent needs to invoke it correctly is missing, and return-value detail is appropriately left to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already states case-sensitive substring semantics, so baseline would be 3. The description adds value beyond the schema by clarifying required-ness, that an empty query matches every entry, and by giving concrete examples (M90, 技术文档域包).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (query/search) and resource (NF registry for modules), with explicit scope: id or name contains query. It names the siblings it is not (spec_list for the protocol catalog, library_search for free-text documents), so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use (resolve a module ID before module_read) plus two named exclusions with their intended alternatives. This is the full when/when-not/alternatives pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spec_listList protocol packagesARead-onlyIdempotent
List protocol packages from desktop/src/core/registry.json with each package's id, version, module count, and categories. Use it for the authoritative protocol package catalog; do not use it to search modules (registry_search) or pipelines (pipeline_list), and do not treat protocol hits from registry_search as a substitute for this list. Takes no arguments; an empty list means the registry declares no protocols. Reads one local file deterministically; a missing or malformed registry is an error. Packages appear in registry order.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | Registered protocol packages in registry order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description still adds genuine behavioral context: reads one local file deterministically, missing/malformed registry is an error, empty list means no protocols, and results follow registry order. That is meaningful disclosure beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and scope are front-loaded in the first sentence, and most sentences earn their place. The closing warning about registry_search protocol hits restates the earlier exclusion and costs some density, keeping it just short of ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, but the description still covers the edge cases an agent needs: no-arg invocation, empty-result meaning, error on missing/malformed registry, and deterministic ordering. Complete for a zero-param read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4; the description confirms 'Takes no arguments', consistent with the empty schema. Nothing further is needed since there is no parameter surface to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('List protocol packages') and even names the source of truth (desktop/src/core/registry.json) plus the exact fields returned (id, version, module count, categories). It explicitly contrasts itself with registry_search and pipeline_list, so an agent can distinguish it from all listed siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('authoritative protocol package catalog') and when-not-to-use, naming both alternatives (registry_search for modules, pipeline_list for pipelines). It even preempts a likely mistake by warning that protocol hits from registry_search are not a substitute.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v2.11.3- Added
asset_list - Removed
asset_ls - Removed
knowledge_order - Added
knowledge_order_read - Added
pattern_list - Removed
pattern_ls - Added
pipeline_list - Removed
pipeline_ls - Removed
registry_query - Added
registry_search - Added
spec_list - Removed
spec_ls
1 tool update
v2.11.2- Changed
asset_read2 fields changed- removed
Output schema / properties / foundRemoved value: -{ - "description": "True when at least one asset file matched.", - "type": "boolean" -} - changed
Output schema / requiredPrevious value: -[ - "found", - "key", - "matches" -]New value: +[ + "key", + "matches" +]
4 tool updates
- Removed
asset_get - Added
asset_ls - Added
asset_read - Added
pattern_ls
10 tool updates
v1.0.1- First observed
asset_get - First observed
knowledge_order - First observed
library_read - First observed
library_search - First observed
module_read - First observed
pattern_read - First observed
pipeline_ls - First observed
pipeline_read - First observed
registry_query - First observed
spec_ls
TDQS
Scored across 12 tools
Each tool targets a distinct resource type and action (list/read/search), and descriptions explicitly state what each tool should not be used for, preventing misselection. The only minor overlap is between registry_search and spec_list for protocols, but the descriptions clearly delineate authoritative catalog vs search.
All 12 tools follow a consistent snake_case noun_verb pattern (e.g., pattern_read, pipeline_list, asset_read), with no mixing of conventions. The outlier knowledge_order_read still follows the same pattern.
12 tools is well-scoped for a content access server covering multiple resource types (patterns, pipelines, assets, modules, library, registry, specs). Each tool earns its place as a list/read/search operation for a distinct resource.
The read-only surface covers list/read for patterns, pipelines, assets, modules (via registry_search empty query), library entries, and knowledge order. Minor gaps exist: no spec_read for protocol package bodies, and library_search can surface document titles without a corresponding generic document read tool.
Maintenance
Related MCP Connectors
Read-only MCP tools for AI agent discovery, structured resources, and NIULAI information.
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Read-only search of 2,189 AI agent tools (MCP servers, x402 APIs) with daily automated trust scores.
Related MCP Servers
- AlicenseBqualityCmaintenanceProvides complete access to Model Context Protocol documentation through an MCP server, allowing LLMs to query specific sections like 'Tools', 'Resources', and 'Authorization' to retrieve comprehensive protocol specifications.19 npm9MIT
- AlicenseAqualityFmaintenanceMCP server for AgentFolio — the identity and reputation layer for AI agents. Query agent profiles, trust scores, verification status, and marketplace listings through 8 MCP tools.978 npm1MIT

Contentrain MCPofficial
AlicenseAqualityAmaintenanceLocal-first MCP server for AI content governance. 13 tools for model/content management, validation, normalization, and i18n across any framework.226MIT- AlicenseAqualityDmaintenance这是一个面向中文圈的MCP服务器,将中国互联网常用能力(如地图、快递、RSS、B站等)封装为标准MCP工具,方便AI Agent安全调用。132MIT