Skip to main content
Glama
yuelinghuashu

yuelinghuashu/story-cli

📚 story-cli

中文 English License Node CI npm version npm downloads

제로 배포, Git 네이티브 Markdown 콘텐츠 관리 CLI. 간단한 디렉터리 규칙으로 스토리/논문/노트/튜토리얼을 관리하고, README를 자동 생성하며, EPUB을 내보내고, 중영 이중 언어를 지원합니다.


✨ 기능

  • 간단한 디렉터리 규칙 — 콘텐츠는 폴더입니다: NN-이름/ 에 config.json + text.md 포함

  • README 자동 생성 — 각 항목과 루트 인덱스가 자동 생성됩니다 (템플릿 기반, 사용자 정의 가능)

  • 시리즈 그룹 정렬 — series / seriesOrder 로 표시 순서를 제어하며, 임의 삽입 시 재정렬 불필요

  • 런타임 검증 — 빌드 전에 구성 검사 (필수 필드, 열거형, 형식)

  • 규정 준수 검사 — story validate 가 Story-Repo 규격에 따라 검증 (디렉터리 이름 / UTF-8 / 중복 번호 / schema)

  • 연관 스토리 — story link 로 약한 연관 관리; story build 가 같은 시리즈 후보 연관 자동 제안

  • 이중 언어 지원 — 중영 콘텐츠 + 현지화된 README 자동 생성

  • 챕터 + 단어 수 — 챕터 제목과 언어 인식 단어 수 자동 추출

  • 다중 형식 내보내기 — EPUB (표지 렌더링/레이아웃 스타일/시리즈 메타데이터) / HTML / TXT / JSON / Markdown / embeddings, --stdout 파이프 지원

  • 범용 콘텐츠 플랫폼 — 지식 베이스 모드 (논문/인터뷰/노트), 기술 문서 모드 (튜토리얼/API)

  • MCP Server — AI 클라이언트 (Claude / Cursor) 가 콘텐츠 라이브러리를 직접 읽고 쓸 수 있음

  • GitHub Action — 제로 구성 CI 진입점 (yuelinghuashu/story-cli@v1), 원클릭으로 「Push → Build → 배포」 구현

  • Watch 모드 — 파일 변경 시 자동 재빌드


Related MCP server: obsidian-kb

🚀 빠른 시작

# 安装(需要 Node.js >= 22)
npm install -g @yuelinghuashu/story-cli

# 创建示例仓库并查看效果
story demo

# 初始化仓库
story init

# 创建内容并编写
story new "我的新故事"

# 构建所有 README
story build

# 导出 EPUB / 统计
story epub --all
story stats
make init                 # 初始化
make new TITLE="我的故事"  # 新建并自动构建
make commit               # 构建 + 提交
make push                 # 构建 + 提交 + 推送
make stats                # 查看创作统计
make analyze              # 写作质量分析(重复短语 / 字数过期 / 章节趋势,需 jq)

Windows 사용자는 story init 으로 생성된 story.ps1 (PowerShell 버전 워크플로우) 도 사용할 수 있습니다: .\story.ps1 init / .\story.ps1 new -Title '我的故事' / .\story.ps1 build.


🌱 이야기 그 이상

범용 콘텐츠 관리 — '정규화'할 수 있는 모든 텍스트 자산은 동일한 워크플로우를 사용할 수 있습니다:

템플릿 모드

콘텐츠 유형

대표 시나리오

--template=story (기본)

소설 / 스토리

오리지널, 2차 창작

--template=knowledge

논문 / 인터뷰 / 블로그 / 노트

지식 베이스, 연구 라이브러리

--template=tech

튜토리얼 / API 문서 / 변경 로그

기술 블로그, 프로젝트 문서

story init --template=knowledge
story init --template=tech

🤖 AI가 콘텐츠 라이브러리를 관리하게 하세요

story-cli에는 MCP Server 가 내장되어 있습니다. AI 클라이언트 (Claude Desktop / Cursor / VSCode Copilot Chat) 가 콘텐츠 라이브러리를 직접 읽고 쓸 수 있습니다. AI는 '생성 → 작성 → 빌드 → 통계'의 완전한 루프를 독립적으로 수행할 수 있으며, 터미널에서 수동으로 명령을 실행할 필요가 없습니다.

💡 토큰 경제성: MCP 도구는 설계 초기부터 AI 호출 비용 절감을 핵심 원칙으로 삼았습니다. scan_stories 는 기본적으로 간결한 출력 (디렉터리 탐색 시 ~80-95% 절약), read_chapter 는 필요에 따라 잘라내기 지원 (이어쓰기 시나리오에서 ~95%+ 절약), stats 는 한 번의 호출로 모든 데이터 확보 (~99%) — 모든 세부 사항이 AI 워크플로우의 토큰 소비를 줄입니다.

기능

MCP 도구

설명

📖 탐색

scan_stories / read_chapter

스토리 라이브러리 나열, 챕터 읽기 (필요에 따라 로드 및 끝부분 잘라내기 지원, 토큰 절약)

✍️ 작성

write_chapter / create_story

새 스토리 생성, 본문 원자적 쓰기 (선택적 쓰기 후 규정 준수 검사)

✅ 관리

edit_config / build / validate

메타데이터 필드 직접 수정, README 재빌드 실행, 구성 유효성 검사

📊 통계

stats

총 단어 수 / 챕터 수 / 시리즈 진행률 / 건강도 확인

# 启动 MCP Server(需在故事仓库根目录;--root 可从任意目录指定仓库)
story mcp-server

💡 자세한 구성과 예시는 docs/mcp.md 를 참조하세요. MCP Server 는 현재 작업 디렉터리의 모든 파일을 읽고 씁니다. 신뢰할 수 있는 저장소에서만 실행하세요.

🎯 미세 조정 데이터 준비 (SFT / Embedding)

스토리 라이브러리의 구조화된 출력은 대규모 언어 모델 훈련 데이터 소스로 자연스럽게 적합합니다. config.json 에는 분류 태그가 포함되어 있고, export json 은 챕터별로 정확하게 슬라이스하며, export embeddings 는 순수 텍스트 블록을 출력합니다. --stdout + Unix 도구 체인과 함께 사용하면 한 줄의 파이프로 표준 미세 조정 형식으로 변환할 수 있습니다:

# 导出为指令微调 JSONL(summary → instruction,正文 → output)
story export json --stdout | jq -c '.stories[] | {messages: [{role: "user", content: .summary}, {role: "assistant", content: .content}]}' > sft_data.jsonl

# 导出为 Embedding 训练格式
story export embeddings --stdout | jq -c '{text: .content, metadata: {title: .title, series: .series}}' > embedding_data.jsonl

# 快速分析数据配比(总字数/章节分布/重复短语)
story stats --json | jq '{words: .totalWords, chapters: .totalChapters, repeated: .analysis.repeated}'

💡 story-cli 는 UTF-8 인코딩 (GBK 자동 감지 경고), 챕터 수준 슬라이스 (의미론적 잘림 방지), 메타데이터 완전성 (type/series/summary 는 자연스럽게 분류 태그로 사용 가능) 을 보장합니다. 추가 정리 스크립트가 필요 없습니다.


🛠️ 주요 명령

명령

설명

story init [--template=story|knowledge|tech]

저장소 초기화 (기본 스토리/지식 베이스/기술 문서 모드)

story new "标题" [--type] [--lang] [--author] [--creator]

새 항목 생성

story build [--validate-only] [--save-counts] [--watch]

README 빌드

story epub "标题" [--all] [--split-by-volume] [--output=dir] [--css=path]

EPUB 내보내기

story export html / txt / json / md / embeddings [--stdout]

다양한 형식 내보내기 (embeddings 는 텍스트 블록 JSONL)

story import json --file=xxx.json

JSON에서 일괄 가져오기

story stats [--json]

창작 통계

story validate [--json]

규정 준수 검사 (Story-Repo 규격)

story link "A" "B" [--remove=...] [--list]

스토리 연관 관리 (약한 연관)

story mcp-server

MCP Server 시작 (AI 연결 진입점)

모든 명령의 별칭, 하위 명령, 매개변수, 분류 설명은 docs/commands.md (중영 이중 언어) 를 참조하세요.

사용자 정의 스토리 유형/상태 및 현지화 태그:

{
  "types": ["original", "fanfic", "translation"],
  "statuses": ["completed", "ongoing", "planned"],
  "typeLabels": { "translation": { "zh": "翻译", "en": "Translation" } }
}

내장 열거형에는 이미 태그가 내장되어 있어 중복 구성이 필요 없습니다. 파일을 삭제하면 기본값으로 돌아갑니다.


📚 문서

문서

중국어

English

내용

디자인 철학

design.md

design.en.md

프로젝트 철학

저장소 규격

specification.md

specification.en.md

데이터 규격

새 콘텐츠 추가 방법

add-story.md

add-story.en.md

디렉터리 규칙

콘텐츠 내보내기

export.md

export.en.md

내보내기 가이드

EPUB / PDF

epub.md

epub.en.md

EPUB 내보내기

CI

ci.md

ci.en.md

GitHub Actions

MCP Server

mcp.md

mcp.en.md

AI 연결 가이드

아키텍처

architecture.md

architecture.en.md

모듈 설계

명령 참조

commands.md

commands.en.md

전체 명령 목록

변경 로그

CHANGELOG.md

CHANGELOG.en.md

변경 기록


⚠️ 인코딩 요구 사항

모든 파일은 UTF-8 인코딩을 사용해야 합니다. GBK/GB2312 가 감지되면 경고하지만 빌드를 차단하지는 않습니다.


🧪 테스트

make test         # 或 pnpm test

550개 이상의 테스트가 모두 통과했습니다. 포함: 스캐너, 시리즈 그룹화, 검증, 템플릿 렌더링, 단어 수 계산, 국제화, README 생성, EPUB 내보내기, CLI 엔드투엔드 (스모크 테스트가 모든 명령을 포함), .storyignore, MCP 프로토콜, JSON 가져오기, GitHub Action 구조, 규정 준수 검사, 연관 제안, 증분 빌드 캐시, embeddings 내보내기 등.


☕ 후원 지원


⚖️ License

MIT


🤝 기여

Issue 제출을 환영합니다 (버그 피드백 / 기능 제안, 양식 템플릿 있음). 코드 기여를 원하시면 CONTRIBUTING.md 를 읽고, ROADMAP.md 에서 프로젝트 방향을 확인하세요.

Available Tools

9 tools
buildA
Idempotent

重建所有 README(等效 story build)。返回构建结果与捕获的输出日志

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate the tool is not read-only, is idempotent, and non-destructive. The description adds that it returns build and captured output but does not elaborate on side effects or state changes beyond 'rebuild'. This is partially covered by annotations, but the description itself adds limited transparency about behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, consisting of two short sentences that convey the action and the return value without unnecessary details. It is well-structured and to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of parameters and output schema, the description adequately explains what the tool does and what it returns. It could specify the exact format or nature of the 'build' output, but for a parameterless tool this is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters in the schema, so coverage is trivially 100%. The baseline for high coverage is 3, and the description adds no parameter-specific details since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool rebuilds all README files, providing a specific verb and resource. It distinguishes itself from sibling tools that handle configuration, validation, statistics, import, story creation, scanning, and chapter reading/writing, which are unrelated to building READMEs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions 'equivalent story build' but does not explicitly specify when to use this tool over alternatives. It lacks guidance on scenarios such as regenerating outdated READMEs or when to prefer this over other operations. The context is implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_storyA

创建一个新故事(文件夹 + config.json + text.md 草稿)

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo故事类型(默认 original)
titleYes故事标题(必填)
seriesNo系列名称
statusNo状态(默认 ongoing)
contentNo初始正文(可选,作为第一章草稿写入)
summaryNo简介
languageNo语言(zh 或 en,默认 zh)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description clearly states it creates a new story with a folder, config.json, and text.md draft, which is a write operation. Annotations already indicate not read-only and not destructive, so no contradiction. However, it doesn't mention idempotency or behavior if the story already exists, leaving some ambiguity. The parenthetical adds useful file structure details beyond the simple purpose, but it doesn't cover failure modes or side effects beyond creating files.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, clear verb, specific output. Zero waste, front-loaded with main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the tool's output (folder + config.json + text.md draft) which is valuable. However, it doesn't mention what happens if the story already exists, or any constraints on naming, or the effect of optional parameters. Given there is no output schema and the tool is a creator, some additional behavioral context would be helpful but not strictly required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover all 7 parameters (coverage 100%), so the description doesn't need to add per-parameter meaning. The description adds high-level context that it creates a draft, but the schema already covers each parameter's purpose. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives (e.g., import_json, build) or any caveats like

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_configA
Idempotent

更新故事 config.json 的元数据字段。可编辑:summary/status/series/seriesOrder/volume/links/author/originalWork/originalAuthor/cover/language/wordCount。字段值传 null 表示移除该可选字段。title/type/created/isMultiChapter 为身份或审计字段,禁止修改。写入前经仓库级 schema 校验,校验失败不写盘。修改后请运行 build 更新 README

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYes要更新的字段(值为 null 时移除该可选字段)
folderYes故事文件夹名(如 01-故事A)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses that writes are preceded by repository-level schema validation, failed validation means no write, and null values remove optional fields. It also states identity/audit fields cannot be modified. This is valuable behavioral detail; no contradiction with annotations was found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and dense, with the purpose in the first sentence and supporting constraints following efficiently. Every sentence adds necessary information without redundancy, making it appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers the essential operational behavior: editable fields, removal semantics, validation guarantees, and the required build step. It does not describe return values or error formats, but the given annotations and schema make the description sufficiently complete for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the input schema already covers parameter names and basics, the fields object is generic and benefits greatly from the description's explicit enumeration of valid field keys, null semantics, and prohibited fields. This adds real meaning beyond the schema's minimal descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action—updating story config.json metadata fields—and enumerates the exact editable fields. It clearly distinguishes this tool from siblings like write_chapter or create_story by scoping to metadata and explicitly listing what can and cannot be changed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: which fields may be edited, which are forbidden, the null-removal behavior, schema validation, and the follow-up requirement to run build. It does not explicitly name alternatives, but the field restrictions and post-condition effectively guide when to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_jsonA

从结构化 JSON 批量导入故事(与 CLI import json 同构)

ParametersJSON Schema
NameRequiredDescriptionDefault
storiesYes故事列表(title 必填,可选 type/status/language/summary/created/chapters)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false, idempotentHint=false, destructiveHint=false, meaning the tool is not read-only, not idempotent, and not destructive. The description does not contradict these, but it also does not add much behavioral context beyond what annotations provide. It does not mention potential side effects, error handling, or whether existing stories are overwritten. Given the annotations are present, the description adds minimal extra value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that clearly states the purpose and the CLI isomorphism. It is front-loaded with the main action and resource, and there is no wasted text. It earns a high score for efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has one parameter with full schema coverage, no output schema, and annotations are present. The description is adequate for a simple import tool, but it could be more complete by mentioning what happens on import (e.g., validation, overwrite behavior) or any prerequisites. Given the simplicity, a 3 is reasonable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%: the 'stories' parameter is described as a list of story objects with required 'title' and optional fields. The description adds the context that it is a batch import and isomorphic with CLI, but does not add further parameter-level detail beyond the schema. Baseline 3 is appropriate since the schema already documents the parameter well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool imports stories from structured JSON, with a specific verb ('import') and resource ('stories'). It also mentions it is isomorphic with the CLI 'import json' command, which helps distinguish it from sibling tools like create_story or scan_stories. However, it could be more explicit about the exact scope (e.g., batch vs single) but the '批量' (batch) is included.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for batch importing stories from JSON, and the mention of CLI isomorphism provides some context. However, it does not explicitly state when to use this tool versus alternatives like create_story (for single story creation) or validate (for validation). No exclusions or alternative tool names are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_chapterA
Read-only

读取指定故事的章节内容(支持按章节索引按需加载)。tailLength 可只返回章节末尾 N 字符用于续写衔接,节省 Token

ParametersJSON Schema
NameRequiredDescriptionDefault
folderYes故事文件夹名(如 01-故事A)
tailLengthNo只返回章节末尾 N 字符(可选;与 chapterIndex 配合使用,节省 Token)
chapterIndexNo章节序号(0-based,可选;不提供则返回全部章节标题列表)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

注解仅有 readOnlyHint=true,描述额外揭示了按需加载和 tailLength 截断尾部内容的行为,并给出了使用目的。未描述返回值结构或缺省行为,但 readOnlyHint 已覆盖安全维度,且未与注解矛盾。

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

两句话,第一句点明核心功能,第二句解释 tailLength 的目的,无冗余信息,结构紧凑且信息密度高。

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

工具复杂度低,Schema 与 readOnlyHint 已覆盖参数及安全语义,描述提供了核心使用上下文。未明示返回格式,但 schema 已说明缺省行为,整体对选择与调用足够完整。

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema 已覆盖全部 3 个参数(100%),基线为 3。描述对 tailLength 补充了“用于续写衔接”这一使用语义,超出 schema 的节省 Token 说明,增加了额外价值。

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

描述明确说明工具读取指定故事的章节内容,使用具体动词“读取”和资源“章节内容”,并支持按章节索引按需加载。与 write_chapter、scan_stories 等写/列工具能清楚区分。

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

描述给出了 tailLength 的明确使用场景(续写衔接、节省 Token),说明按需加载的上下文,但未显式提及与 scan_stories 等替代工具的取舍或排除条件。

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_storiesA
Read-only

列出所有故事及元数据(标题/类型/状态/字数/系列)。默认返回精简列表节省 Token;传 verbose=true 获取完整详情

ParametersJSON Schema
NameRequiredDescriptionDefault
verboseNo是否返回完整元数据(默认 false,仅返回精简列表)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes the safety profile, and the description adds useful context about the default concise response and verbose full-detail behavior. It also clarifies that the tool returns all stories, but it does not disclose pagination, sorting, or potential large-result behavior, so transparency is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the tool's core purpose first and then explains the optional parameter behavior. Every clause earns its place, with no repetition of the schema or annotations and no unnecessary filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple one-parameter schema, the readOnlyHint annotation, and the absence of an output schema, the description adequately covers what is returned (concise list vs. full metadata) and the metadata fields. It could be more explicit about what the concise list contains or how large result sets are handled, but for this complexity level it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully documents the verbose parameter, including its default value and meaning (100% schema coverage). The description adds the token-saving rationale but no additional syntax, format, or edge-case details beyond what the schema provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('列出') and resource ('所有故事'), and enumerates the metadata fields returned (标题/类型/状态/字数/系列). This clearly differentiates it from siblings like read_chapter, write_chapter, and create_story, which operate on individual stories rather than listing all stories.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear guidance on choosing between the default concise output and verbose=true to save tokens. However, it does not explicitly state when to use this tool versus alternative sibling tools, nor does it mention any exclusions or prerequisites, so the intended usage context is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statsA
Read-only

获取故事库写作统计(总字数/章节数/系列分组/健康度/重复短语)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already declares this is a read-only operation, and the description does not contradict it. The description adds context by listing the specific statistics returned, which is useful for anticipating the output, but it discloses no additional behavioral traits (e.g., rate limits, permissions, or response format). With annotations covering safety, the description provides moderate value beyond them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the exact purpose and enumerates the key output categories. Every word earns its place, with no verbose filler or redundant phrasing. It is concisely structured and immediately understandable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (zero parameters, readOnlyHint annotation, no output schema), the description is fully adequate. It lists the five categories of statistics the agent can expect, which compensates for the absence of an output schema. For a stat-fetching tool with no inputs, this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline per the rubric is 4. The description doesn't need to document parameter details since none exist, and the schema coverage is trivially 100% with no fields. The description effectively communicates the fixed output scope, compensating for the lack of an output schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('获取' = get) and resource ('故事库写作统计' = story library writing statistics), and enumerates the specific metric categories (total words, chapter count, series grouping, health, repeated phrases). This clearly distinguishes it from sibling tools like read_chapter or create_story, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies when to use this tool (when writing statistics are needed), but there is no explicit guidance on when not to use it or mention of alternative tools. The decision to use it over siblings is left to the agent based on the clearly stated output scope, but no exclusions or alternatives are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validateA
Read-only

检查仓库合规性(目录命名/必需文件/config schema/编码),等效 CLI story validate

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the scope of checks and CLI equivalence, but does not disclose expected behavior on failure, output format, or side effects. Since readOnlyHint=true is already annotated, the read-only nature is covered; the description adds modest context beyond that but no deeper behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the action, lists the compliance dimensions, and provides a CLI equivalent. Every element adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, zero-parameter, read-only tool, the description covers the core purpose well. However, with no output schema, it omits what the tool returns or how compliance results are reported, which would be useful for an agent deciding next steps after validation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool accepts zero parameters, so schema coverage is effectively 100% and no parameter explanation is needed. A baseline of 4 for 0-param tools is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: checking repository compliance, with concrete areas (directory naming, required files, config/schema, encoding). The CLI equivalence ('story validate') adds a precise reference and differentiates it from sibling tools like build or scan_stories.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used for compliance validation but provides no explicit context about when to run it or when to prefer alternatives. No exclusions or alternative-tool references are given, so usage guidance remains only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_chapterA
Idempotent

将正文写入指定故事(原子写入 text.md)。validate=true 时写入后立即执行仓库合规检查并返回结果(不阻断写入)

ParametersJSON Schema
NameRequiredDescriptionDefault
folderYes故事文件夹名(如 01-故事A)
contentYes要写入的 Markdown 正文
validateNo写后是否执行合规检查(默认 false)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already show non-read-only, idempotent, and non-destructive traits. The description adds atomic-write behavior and the non-blocking validate-after-write behavior, which provide meaningful operational context beyond annotations. No contradiction found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loaded with the primary purpose and atomicity, followed by optional validation behavior. Every word earns its place with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given complete schema coverage, annotations, and moderate complexity, the description is sufficient for correct invocation. It explains the write target and validation behavior, though it does not describe the normal return value; this is acceptable in the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 adds meaning by specifying that content is written to text.md and that validate=true triggers an immediate, non-blocking compliance check, enriching the parameter semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the specific action ('将正文写入指定故事') and the target artifact ('原子写入 text.md'), distinguishing it from sibling tools such as read_chapter, edit_config, and validate. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It does not explicitly state when to use this tool versus alternatives or mention exclusions. It gives useful guidance for the validate flag (non-blocking compliance check), but no comparison with sibling tools or clear when-to-use context.

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.

  1. 9 tool updatesv0.1.0
    • First observedbuild
    • First observedcreate_story
    • First observededit_config
    • First observedimport_json
    • First observedread_chapter
    • First observedscan_stories
    • First observedstats
    • First observedvalidate
    • First observedwrite_chapter

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct operation or resource: creating/importing stories, reading/writing chapters, editing config, validating, building, stats, and scanning. There is no real overlap, and the descriptions clarify boundaries even where purposes are adjacent, such as create_story vs import_json.

Naming Consistency4/5

Most tools follow a clear verb_noun snake_case pattern (create_story, scan_stories, read_chapter, write_chapter, edit_config, import_json). validate, build, and stats are shorter imperative/noun names but are still intuitive and do not break the overall predictability.

Tool Count5/5

Nine tools is well-scoped for a story authoring workflow. Each tool has a clearly defined role, and none feel redundant or unnecessary for the server's purpose.

Completeness3/5

The core authoring loop is covered: create, read/write chapters, edit metadata, validate, build, and get stats. However, there is no delete story/chapter operation and no explicit chapter listing tool, leaving lifecycle management incomplete. Agents could work around some gaps, but deletion is a notable missing capability.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    C
    quality
    D
    maintenance
    Git-backed MCP server for creating and maintaining an Obsidian-style markdown knowledge base with full CRUD, search, and git sync.
    7
    -
  • A
    license
    B
    quality
    A
    maintenance
    Personal multi-LLM memory repository using Markdown as source of truth, SQLite FTS5 for retrieval, and MCP tools for search, context, and write proposals.
    74
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    Repository-native protocol and MCP server for coordinating work items, documentation, changelogs, and project memory between humans and AI agents, using Markdown files in a Git repository as the canonical data source.
    30
    3
    MIT