Skip to main content
Glama

MCP Novel Assistant

by zb2947244682

MCP Novel Assistant - 小说管理助手

基于Model Context Protocol (MCP)的小说管理工具,使用SQLite数据库存储小说信息。

🎉 项目状态

✅ 已完成功能

  • 完整的数据库结构设计(17个表 + 4个视图)
  • 9个 MCP 工具(数据库管理、SQL操作、小说管理、人物管理、地点管理、分卷管理、章节管理、事件管理、冲突检测、纲要生成)
  • 可靠的数据库初始化系统
  • 智能数据导出功能
  • 完整的示例数据创建
  • 所有功能通过 MCP 工具测试验证

🔧 技术特性

  • 使用 Zod 进行参数验证
  • 支持复杂的表关系和外键约束
  • 智能冲突检测系统
  • 自动纲要生成功能
  • 完整的日志记录系统

功能特性

数据库管理 (dbHelper)

  • 自动创建目录和数据库
  • 连接、断开、初始化数据库
  • 智能导出数据为Markdown格式
  • 支持完整的表结构文档生成
  • 包含详细的字段注释和表关系说明
  • 可靠的数据库初始化,确保使用最新表结构

SQL操作 (sqlHelper)

  • 增删改查操作
  • 批量操作和事务处理
  • 支持独立数据库连接

小说管理 (novelHelper)

  • 小说的增删改查操作
  • 支持按名称、作者、类型等字段搜索
  • 分页查询和列表展示
  • 完整的小说信息管理

人物管理 (characterHelper)

  • 人物的增删改查操作
  • 支持按姓名、重要性等级等字段搜索
  • 完整的人物属性管理(性别、年龄、性格、冲突等)
  • 人物关系管理

地点管理 (locationHelper)

  • 地点的增删改查操作
  • 支持按名称、类型等字段搜索
  • 完整的地点属性管理(类型、氛围、气候等)
  • 地点关系管理

分卷管理 (volumeHelper)

  • 分卷的增删改查操作
  • 支持按名称等字段搜索
  • 分卷顺序管理

章节管理 (chapterHelper)

  • 章节的增删改查操作
  • 支持按名称、状态等字段搜索
  • 章节状态管理(未完成/已完成)

事件管理 (eventHelper)

  • 事件的增删改查操作
  • 支持按名称、类型、重要性等级等字段搜索
  • 完整的事件属性管理(类型、情感基调、后果等)

冲突检测 (conflictDetectionHelper)

  • 检测时间冲突(时间段重叠等)
  • 检测人物存在冲突(开篇不存在但出现在事件中)
  • 检测地点存在冲突
  • 检测事件逻辑冲突

纲要生成 (outlineGeneratorHelper)

  • 生成章节细纲
  • 生成分卷总纲
  • 生成小说总纲
  • 导出纲要到Markdown文件

完整的小说结构管理

  • 分层结构管理: 小说 → 分卷 → 章节 → 事件
  • 时间线管理: 世界 → 时期 → 时间段 → 事件
  • 人物管理: 支持人物出场/离场权重控制,开篇存在状态
  • 人物属性: 性别、年龄、性格、外在冲突、内在冲突、外貌、职业、重要性等级、人物弧线、动机、恐惧
  • 人物关系: 有方向性的社会关系(如A是B的父亲,B是A的儿子)
  • 双向亲密度系统: 支持A对B和B对A的双向亲密度和关系类型
  • 地点管理: 事件发生地点管理,支持地点类型、氛围、气候、层级关系
  • 物品道具管理: 支持物品的创建、获取、使用、丢失等状态跟踪
  • 情节线索管理: 支持多条情节线索的并行发展
  • 人物发展轨迹: 记录人物在不同时期的发展变化
  • 地点关系管理: 管理地点之间的空间关系
  • 内容管理: 叙事风格、主题思想、背景设定、故事主线、结局走向、核心冲突
  • 全局字数管理: 统一设置每章节的预计字数
  • 章节状态管理: 简化的完成/未完成状态

高级功能特性

数据库视图系统
  • 存在状态视图: 动态计算人物和地点在各时间段的存在状态
  • 出场统计视图: 分析人物出场频率和重要性
  • 情节密度视图: 分析各时间段的情节密度分布
智能分析功能
  • 人物关系分析: 支持复杂的人物关系网络分析
  • 情节线索跟踪: 多条情节线索的并行发展管理
  • 人物发展轨迹: 记录和分析人物成长变化
  • 地点关系管理: 空间关系的层次化管理
纲要生成支持
  • 章节细纲: 基于章节-事件关系生成详细章节大纲
  • 分卷总纲: 基于分卷结构生成分卷总纲
  • 小说总纲: 基于完整结构生成小说总纲
  • 字数规划: 全局统一的字数管理和进度跟踪

日志系统

  • 自动记录所有操作
  • 分级日志:info、debug、error、warn
  • 存储到数据库目录

工具说明

dbHelper

参数:

  • targetDirectory: 数据库目录路径
  • operation: connect|disconnect|init|export

示例:

# 连接数据库 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name dbHelper \ --tool-arg targetDirectory=./test \ --tool-arg operation=connect # 导出数据(生成完整的数据库结构文档) npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name dbHelper \ --tool-arg targetDirectory=./test \ --tool-arg operation=export

sqlHelper

参数:

  • operation: select|insert|update|delete|batch|transaction
  • sql: SQL语句
  • params: 参数数组
  • databasePath: 数据库路径

示例:

# 查询数据 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name sqlHelper \ --tool-arg operation=select \ --tool-arg sql="SELECT * FROM novels" \ --tool-arg databasePath=./test/data.db # 插入数据 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name sqlHelper \ --tool-arg operation=insert \ --tool-arg sql="INSERT INTO novels (name, author) VALUES (?, ?)" \ --tool-arg params='["小说名称", "作者名称"]' \ --tool-arg databasePath=./test/data.db

novelHelper

参数:

  • operation: create|read|update|delete|list|search
  • novelId: 小说ID(用于读取、更新、删除)
  • name: 小说名称
  • description: 小说简介
  • volumeCount: 卷数
  • chapterCount: 章节数
  • novelType: 小说类型
  • author: 作者
  • narrativeStyle: 叙事风格
  • theme: 主题思想
  • backgroundSetting: 背景设定
  • mainStoryline: 故事主线
  • endingDirection: 结局走向
  • coreConflict: 核心冲突
  • targetWordCount: 每章节预计字数
  • searchKeyword: 搜索关键词
  • searchField: 搜索字段(name|author|description|novel_type)
  • limit: 返回结果数量限制(默认50)
  • offset: 结果偏移量(默认0)

示例:

# 创建小说 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name novelHelper \ --tool-arg operation=create \ --tool-arg name="《修仙传奇》" \ --tool-arg author="AI助手" \ --tool-arg description="一部关于现代青年意外穿越到修仙世界的奇幻小说" \ --tool-arg novelType="玄幻修仙" \ --tool-arg narrativeStyle="第三人称全知视角" \ --tool-arg theme="成长与救赎" \ --tool-arg backgroundSetting="现代都市与修仙世界的碰撞" \ --tool-arg mainStoryline="现代青年林轩意外获得修仙传承,在都市中修炼成仙的故事" \ --tool-arg endingDirection="开放式结局,主角成为都市修仙者" \ --tool-arg coreConflict="现代科技与修仙文明的冲突" \ --tool-arg volumeCount=3 \ --tool-arg chapterCount=30 \ --tool-arg targetWordCount=3000 # 读取小说 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name novelHelper \ --tool-arg operation=read \ --tool-arg novelId=1 # 搜索小说 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name novelHelper \ --tool-arg operation=search \ --tool-arg searchKeyword="修仙" \ --tool-arg searchField=name

characterHelper

参数:

  • operation: create|read|update|delete|list|search
  • characterId: 人物ID(用于读取、更新、删除)
  • novelId: 所属小说ID
  • name: 人物姓名
  • description: 人物描述
  • gender: 性别(男/女/其他/未知)
  • age: 年龄
  • personality: 性格描述
  • externalConflict: 外在冲突
  • internalConflict: 内在冲突
  • appearance: 外貌描述
  • occupation: 职业
  • importanceLevel: 重要性等级(主角/重要配角/配角/龙套)
  • characterArc: 人物弧线
  • motivation: 动机
  • fear: 恐惧
  • existsAtStart: 开篇是否存在
  • searchKeyword: 搜索关键词
  • searchField: 搜索字段
  • limit: 返回结果数量限制(默认50)
  • offset: 结果偏移量(默认0)

示例:

# 创建人物 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name characterHelper \ --tool-arg operation=create \ --tool-arg novelId=1 \ --tool-arg name="林轩" \ --tool-arg description="现代青年,意外获得修仙传承" \ --tool-arg gender="男" \ --tool-arg age=25 \ --tool-arg personality="善良、勇敢、有正义感" \ --tool-arg importanceLevel="主角" \ --tool-arg existsAtStart=true # 搜索人物 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name characterHelper \ --tool-arg operation=search \ --tool-arg novelId=1 \ --tool-arg searchKeyword="林轩"

locationHelper

参数:

  • operation: create|read|update|delete|list|search
  • locationId: 地点ID(用于读取、更新、删除)
  • novelId: 所属小说ID
  • name: 地点名称
  • description: 地点描述
  • locationType: 地点类型(城市/乡村/山脉/森林/海洋/建筑/其他)
  • atmosphere: 氛围
  • climate: 气候
  • parentLocationId: 父地点ID
  • existsAtStart: 开篇是否存在
  • searchKeyword: 搜索关键词
  • searchField: 搜索字段
  • limit: 返回结果数量限制(默认50)
  • offset: 结果偏移量(默认0)

示例:

# 创建地点 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name locationHelper \ --tool-arg operation=create \ --tool-arg novelId=1 \ --tool-arg name="东海市" \ --tool-arg description="现代都市,林轩生活的地方" \ --tool-arg locationType="城市" \ --tool-arg atmosphere="繁华现代" \ --tool-arg existsAtStart=true

volumeHelper

参数:

  • operation: create|read|update|delete|list|search
  • volumeId: 分卷ID(用于读取、更新、删除)
  • novelId: 所属小说ID
  • name: 分卷名称
  • description: 分卷描述
  • orderIndex: 分卷顺序
  • searchKeyword: 搜索关键词
  • searchField: 搜索字段
  • limit: 返回结果数量限制(默认50)
  • offset: 结果偏移量(默认0)

示例:

# 创建分卷 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name volumeHelper \ --tool-arg operation=create \ --tool-arg novelId=1 \ --tool-arg name="第一卷:初入修仙" \ --tool-arg description="林轩意外获得修仙传承,开始修炼之路" \ --tool-arg orderIndex=1

chapterHelper

参数:

  • operation: create|read|update|delete|list|search
  • chapterId: 章节ID(用于读取、更新、删除)
  • volumeId: 所属分卷ID
  • name: 章节名称
  • description: 章节描述
  • orderIndex: 章节顺序
  • status: 章节状态(未完成/已完成)
  • searchKeyword: 搜索关键词
  • searchField: 搜索字段
  • limit: 返回结果数量限制(默认50)
  • offset: 结果偏移量(默认0)

示例:

# 创建章节 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name chapterHelper \ --tool-arg operation=create \ --tool-arg volumeId=1 \ --tool-arg name="第一章:意外传承" \ --tool-arg description="林轩意外获得修仙传承" \ --tool-arg orderIndex=1

eventHelper

参数:

  • operation: create|read|update|delete|list|search
  • eventId: 事件ID(用于读取、更新、删除)
  • timeSegmentId: 所属时间段ID
  • locationId: 发生地点ID
  • name: 事件名称
  • plot: 情节描述
  • eventType: 事件类型(战斗/对话/探索/情感/转折/日常/其他)
  • importanceLevel: 重要性等级(1-10)
  • emotionalTone: 情感基调(紧张/悲伤/欢乐/愤怒/恐惧/平静/其他)
  • consequences: 后果描述
  • orderIndex: 事件顺序
  • searchKeyword: 搜索关键词
  • searchField: 搜索字段
  • limit: 返回结果数量限制(默认50)
  • offset: 结果偏移量(默认0)

示例:

# 创建事件 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name eventHelper \ --tool-arg operation=create \ --tool-arg timeSegmentId=1 \ --tool-arg locationId=1 \ --tool-arg name="意外传承" \ --tool-arg plot="林轩在古董市场意外获得一枚古玉,古玉中蕴含修仙传承" \ --tool-arg eventType="转折" \ --tool-arg importanceLevel=10 \ --tool-arg emotionalTone="其他" \ --tool-arg consequences="林轩获得修仙能力,人生轨迹彻底改变" \ --tool-arg orderIndex=1

conflictDetectionHelper

参数:

  • operation: check_all|check_time|check_character|check_location|check_event
  • novelId: 小说ID
  • characterId: 人物ID(用于特定人物检测)
  • locationId: 地点ID(用于特定地点检测)
  • eventId: 事件ID(用于特定事件检测)
  • databasePath: 数据库路径

示例:

# 检测所有冲突 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name conflictDetectionHelper \ --tool-arg operation=check_all \ --tool-arg novelId=1 \ --tool-arg databasePath=./test2/data.db # 检测时间冲突 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name conflictDetectionHelper \ --tool-arg operation=check_time \ --tool-arg novelId=1 \ --tool-arg databasePath=./test2/data.db

outlineGeneratorHelper

参数:

  • operation: generate_chapter|generate_volume|generate_novel|export_chapter
  • chapterId: 章节ID(用于生成章节细纲)
  • volumeId: 分卷ID(用于生成分卷总纲)
  • novelId: 小说ID(用于生成小说总纲)
  • outputDir: 输出目录
  • databasePath: 数据库路径

示例:

# 生成章节细纲 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name outlineGeneratorHelper \ --tool-arg operation=generate_chapter \ --tool-arg chapterId=1 \ --tool-arg outputDir=./test2/export \ --tool-arg databasePath=./test2/data.db # 生成分卷总纲 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name outlineGeneratorHelper \ --tool-arg operation=generate_volume \ --tool-arg volumeId=1 \ --tool-arg outputDir=./test2/export \ --tool-arg databasePath=./test2/data.db # 生成小说总纲 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name outlineGeneratorHelper \ --tool-arg operation=generate_novel \ --tool-arg novelId=1 \ --tool-arg outputDir=./test2/export \ --tool-arg databasePath=./test2/data.db

数据库结构

核心表结构

novels (小说表)
字段类型说明
idINTEGER主键
nameTEXT小说名称
descriptionTEXT简介
volume_countINTEGER卷数
chapter_countINTEGER章节数
novel_typeTEXT类型
authorTEXT作者
narrative_styleTEXT叙事风格
themeTEXT主题思想
background_settingTEXT背景设定
main_storylineTEXT故事主线
ending_directionTEXT结局走向
core_conflictTEXT核心冲突
volume_name_lengthINTEGER卷名称长度(默认5)
chapter_name_lengthINTEGER章节名称长度(默认7)
target_word_countINTEGER每章节预计字数(默认3000)
created_atDATETIME创建时间
updated_atDATETIME更新时间
volumes (分卷表)
字段类型说明
idINTEGER主键
novel_idINTEGER所属小说ID(外键)
nameTEXT分卷名称
descriptionTEXT分卷描述
order_indexINTEGER分卷顺序
created_atDATETIME创建时间
updated_atDATETIME更新时间
chapters (章节表)
字段类型说明
idINTEGER主键
volume_idINTEGER所属分卷ID(外键)
nameTEXT章节名称
descriptionTEXT章节描述
order_indexINTEGER章节顺序
statusTEXT章节状态(未完成/已完成)
created_atDATETIME创建时间
updated_atDATETIME更新时间
characters (人物表)
字段类型说明
idINTEGER主键
novel_idINTEGER所属小说ID(外键)
nameTEXT人物姓名
descriptionTEXT人物描述
genderTEXT性别(男/女/其他/未知)
ageINTEGER年龄
personalityTEXT性格描述
external_conflictTEXT外在冲突(与外部环境的矛盾)
internal_conflictTEXT内在冲突(内心的矛盾斗争)
appearanceTEXT外貌描述
occupationTEXT职业
importance_levelINTEGER重要性等级(1-10)
character_arcTEXT人物弧线
motivationTEXT动机
fearTEXT恐惧
exists_at_startBOOLEAN开篇是否存在(默认1)
created_atDATETIME创建时间
updated_atDATETIME更新时间
时间线管理表
  • worlds (世界表) - 小说中的世界设定
  • periods (时期表) - 世界中的不同时期(如远古、现代、清朝等)
  • time_segments (时间段表) - 时期下的时间段和时间点
  • events (事件表) - 具体事件,发生在特定时间段和地点
实体管理表
  • characters (人物表) - 小说中的所有人物
  • locations (地点表) - 小说中的所有地点
  • items (物品道具表) - 小说中的物品和道具
关系管理表
  • event_characters (事件-人物关系表) - 记录人物在事件中的出场/离场
  • character_relationships (人物关系表) - 记录人物之间的社会关系和双向亲密度
  • event_entity_status (事件实体状态表) - 记录人物/地点在事件中的进入/离开状态
  • chapter_events (章节-事件关系表) - 记录章节包含的事件及其顺序
辅助管理表
  • plot_threads (情节线索表) - 管理多条情节线索的并行发展
  • character_development (人物发展轨迹表) - 记录人物在不同时期的发展变化
  • location_relationships (地点关系表) - 管理地点之间的空间关系
分析视图
  • character_existence_view - 人物存在状态视图
  • location_existence_view - 地点存在状态视图
  • character_appearance_stats - 人物出场统计视图
  • plot_density - 情节密度分析视图

表关系图

novels (小说) ├── volumes (分卷) │ └── chapters (章节) │ └── chapter_events (章节-事件关系) ├── characters (人物) │ ├── character_relationships (人物关系+双向亲密度) │ └── character_development (人物发展轨迹) ├── locations (地点) │ └── location_relationships (地点关系) ├── worlds (世界) │ └── periods (时期) │ └── time_segments (时间段) │ └── events (事件) │ ├── event_characters (事件-人物关系) │ └── event_entity_status (事件实体状态) ├── items (物品道具) └── plot_threads (情节线索)

导出功能

数据库支持完整的结构导出,生成以下文件:

  • 01_数据库总结构.md - 完整的表结构和关系说明
  • 02_novels.md18_location_relationships.md - 各表的数据文件(按固定顺序)

导出文件顺序

  1. 01_数据库总结构.md - 完整的表结构和关系说明
  2. 02_novels.md - 小说表
  3. 03_volumes.md - 分卷表
  4. 04_chapters.md - 章节表
  5. 05_characters.md - 人物表
  6. 06_locations.md - 地点表
  7. 07_worlds.md - 世界表
  8. 08_periods.md - 时期表
  9. 09_time_segments.md - 时间段表
  10. 10_events.md - 事件表
  11. 11_event_characters.md - 事件-人物关系表
  12. 12_character_relationships.md - 人物关系表
  13. 13_event_entity_status.md - 事件实体状态表
  14. 14_chapter_events.md - 章节-事件关系表
  15. 15_items.md - 物品道具表
  16. 16_plot_threads.md - 情节线索表
  17. 17_character_development.md - 人物发展轨迹表
  18. 18_location_relationships.md - 地点关系表

安装使用

# 安装依赖 npm install # 启动服务器 node index.js # 列出工具 npx @modelcontextprotocol/inspector --cli node index.js --method tools/list

文件结构

MCPNovelAssistant/ ├── index.js # 主服务器 ├── registrar.js # 工具注册 ├── package.json # 项目配置 ├── tools/ │ ├── dbTool.js # 数据库管理工具 │ ├── sqlTool.js # SQL操作工具 │ ├── novelTool.js # 小说管理工具 │ ├── characterTool.js # 人物管理工具 │ ├── locationTool.js # 地点管理工具 │ ├── volumeTool.js # 分卷管理工具 │ ├── chapterTool.js # 章节管理工具 │ ├── eventTool.js # 事件管理工具 │ ├── conflictDetectionTool.js # 冲突检测工具 │ ├── outlineGeneratorTool.js # 纲要生成工具 │ └── logTool.js # 日志系统 ├── utils/ │ └── databaseSchema.js # 数据库结构定义 ├── test/ # 测试数据目录 │ ├── data.db # 数据库文件 │ ├── export/ # 导出目录 │ │ ├── 01_数据库总结构.md # 完整的表结构和关系说明 │ │ ├── 02_novels.md # 小说表数据 │ │ ├── 03_volumes.md # 分卷表数据 │ │ ├── 04_chapters.md # 章节表数据 │ │ ├── 05_characters.md # 人物表数据 │ │ ├── 06_locations.md # 地点表数据 │ │ ├── 07_worlds.md # 世界表数据 │ │ ├── 08_periods.md # 时期表数据 │ │ ├── 09_time_segments.md # 时间段表数据 │ │ ├── 10_events.md # 事件表数据 │ │ ├── 11_event_characters.md # 事件-人物关系表数据 │ │ ├── 12_character_relationships.md # 人物关系表数据 │ │ ├── 13_event_entity_status.md # 事件实体状态表数据 │ │ ├── 14_chapter_events.md # 章节-事件关系表数据 │ │ ├── 15_items.md # 物品道具表数据 │ │ ├── 16_plot_threads.md # 情节线索表数据 │ │ ├── 17_character_development.md # 人物发展轨迹表数据 │ │ └── 18_location_relationships.md # 地点关系表数据 │ └── *.txt # 日志文件 └── test2/ # 第二个测试数据目录 ├── data.db # 数据库文件 ├── export/ # 导出目录 └── *.txt # 日志文件

返回格式

所有工具返回MCP标准格式:

{ "content": [ { "type": "text", "text": "操作结果" } ] }

快速开始

1. 初始化数据库

# 初始化数据库 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name dbHelper \ --tool-arg targetDirectory=./my_novel \ --tool-arg operation=init

2. 创建小说

# 创建小说 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name novelHelper \ --tool-arg operation=create \ --tool-arg name="我的小说" \ --tool-arg author="作者名" \ --tool-arg novelType="玄幻" \ --tool-arg databasePath=./my_novel/data.db

3. 创建人物

# 创建主角 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name characterHelper \ --tool-arg operation=create \ --tool-arg novelId=1 \ --tool-arg name="主角" \ --tool-arg importanceLevel="主角" \ --tool-arg databasePath=./my_novel/data.db

4. 导出数据

# 导出所有数据 npx @modelcontextprotocol/inspector --cli node index.js --method tools/call \ --tool-name dbHelper \ --tool-arg targetDirectory=./my_novel \ --tool-arg operation=export

开发说明

在你开发的时候,如果context7可用,请善用context7查询文档。

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zb2947244682/MCPNovelAssistant'

If you have feedback or need assistance with the MCP directory API, please join our Discord server