github analyzed 94c580e

mgprona/MennzLore

github

แปลงนิยาย public-domain เป็น lorebook มีโครงสร้าง — fast, deterministic, MCP-native. Extract deep structured lorebooks from novels via 26 MCP tools.

maintainer
mgprona
license
first seen
2026-06-14
last seen
2026-06-14
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 30 tools
transport counts 30 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • acquire_by_id

    1

  • acquire_by_title

    1

  • acquire_epub

    1

  • analyze_architect

    Phase 4 Pass 1.1

  • analyze_chronicler

    Phase 4 Pass 1.3

  • analyze_profiler

    Phase 4 Pass 1.2

  • analyze_youtube_playlist

    สแกน YouTube playlist ว่ามี subtitle หรือไม่

  • assemble_lorebook_tool

    14

  • auto_verify_names

    3

  • build_entity_registry_tool

    10

  • extract_global_lore

    Phase 3

  • generate_hybrid_notes_tool

    9

  • generate_storyboard_tool

    สร้างภาพผ่าน OpenRouter

  • merge_micro_facts

    5

  • open_dashboard_tool

    เปิด world explorer dashboard ที่ localhost:8000

  • query_knowledge_graph

    11

  • query_lore_semantic_tool

    13

  • query_past_lore_tool

    RAG ค้นหาข้อมูลจากตอนก่อนหน้า

  • query_saga_rag

    ค้นหาข้ามเล่มผ่าน semantic search

  • render_map_tool

    7

  • render_production_tool

    6

  • render_relationships_tool

    8

  • render_timeline_tool

    12

  • run_full_pipeline

    5–14

  • run_saga_assembly

    ประกอบ saga lorebook หลายเล่ม

  • run_youtube_acquisition

    ดึง transcript/STT จาก YouTube (Whisper)

  • sa_combined

    Phase 4 2-Pass

  • sa_lore

    Phase 4 2-Pass

  • save_global_lore

    3

  • split_into_chapters

    2

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 94c580e · analyzer v18 · 2h ago

skills & prompt files 7

code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

filesystem 30

  • fs mgprona-MennzLore-94c580e/engine/acquire_se.py :22 import shutil
  • fs mgprona-MennzLore-94c580e/engine/assemble_generic.py :306 with open(prompt_path, "r", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/assemble_production_generic.py :189 with open(path, encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/chart_render_generic.py :33 with open(_GAZETTEER_PATH, encoding="utf-8") as _f:
  • fs mgprona-MennzLore-94c580e/engine/dashboard_server.py :16 from pathlib import Path
  • fs mgprona-MennzLore-94c580e/engine/entity_registry.py :196 with open(gl_path, "r", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/fetch_epub.py :20 from pathlib import Path
  • fs mgprona-MennzLore-94c580e/engine/fetch_raw.py :179 with open(raw_path, "wb") as f:
  • fs mgprona-MennzLore-94c580e/engine/generate_schemas.py :23 with open(filepath, "w", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/hybrid_notes.py :96 with open(path, "r", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/image_generator.py :99 with open(dest_path, "wb") as f:
  • fs mgprona-MennzLore-94c580e/engine/knowledge_graph.py :132 with open(gl_path, "r", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/merge_to_micro_facts.py :197 with open(clean_chapter_path, "r", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/phase3_auto_verify.py :33 with open(path, encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/phase3_global_lore.py :132 with open(p, encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/pipeline_state.py :36 with open(self.path, encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/rag_memory.py :36 with open(fpath, "r", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/relationship_graph.py :231 with open(fpath, "r", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/saga_assembler.py :223 with open(out_path, "w", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/saga_rag_memory.py :42 with open(fpath, "r", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/split_chapters.py :198 with open(raw_path, encoding="utf-8", errors="replace") as f:
  • fs mgprona-MennzLore-94c580e/engine/timeline_render.py :39 with open(path, "r", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/translate_raw.py :204 with open(fpath, "r", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/utils.py :12 with open(file_path, "r", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/vector_rag.py :228 with open(fpath, "r", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/verify_names.py :42 with open(name_map_path, "r", encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/engine/youtube_acquire.py :212 with open(mp3_path, "rb") as f:
  • fs mgprona-MennzLore-94c580e/install.py :27 import shutil
  • fs mgprona-MennzLore-94c580e/mcp_server/server.py :48 with open(cache_path, encoding="utf-8") as f:
  • fs mgprona-MennzLore-94c580e/scripts/compare_baseline.py :4 from pathlib import Path

shell / exec 4

  • shell mgprona-MennzLore-94c580e/engine/acquire_se.py :23 import subprocess
  • shell mgprona-MennzLore-94c580e/engine/youtube_acquire.py :13 import subprocess
  • shell mgprona-MennzLore-94c580e/install.py :28 import subprocess
  • shell mgprona-MennzLore-94c580e/mcp_server/server.py :13 import subprocess

network 8

  • net mgprona-MennzLore-94c580e/engine/acquire_se.py :56 import urllib.request
  • net mgprona-MennzLore-94c580e/engine/dashboard_server.py :14 import urllib.parse
  • net mgprona-MennzLore-94c580e/engine/fetch_epub.py :21 import urllib.parse
  • net mgprona-MennzLore-94c580e/engine/fetch_raw.py :21 import urllib.parse
  • net mgprona-MennzLore-94c580e/engine/image_generator.py :12 import requests
  • net mgprona-MennzLore-94c580e/engine/translate_raw.py :29 import requests
  • net mgprona-MennzLore-94c580e/engine/youtube_acquire.py :14 import requests
  • net mgprona-MennzLore-94c580e/mcp_server/server.py :14 import socket

secrets 6

  • secrets mgprona-MennzLore-94c580e/engine/assemble_generic.py :949 api_key = os.environ.get("OPENROUTER_API_KEY")
  • secrets mgprona-MennzLore-94c580e/engine/image_generator.py :115 api_key = os.environ.get("OPENROUTER_API_KEY")
  • secrets mgprona-MennzLore-94c580e/engine/translate_raw.py :423 api_key = os.environ.get("OPENROUTER_API_KEY")
  • secrets mgprona-MennzLore-94c580e/engine/youtube_acquire.py :306 api_key = os.environ.get("OPENROUTER_API_KEY")
  • secrets mgprona-MennzLore-94c580e/install.py :659 env_key = os.environ.get("OPENROUTER_API_KEY")
  • secrets mgprona-MennzLore-94c580e/mcp_server/server.py :690 if not os.environ.get("OPENAI_API_KEY"):

database 1

  • db mgprona-MennzLore-94c580e/engine/knowledge_graph.py :32 import sqlite3

tool registrations 27

  • verify_character_names mgprona-MennzLore-94c580e/mcp_server/server.py :127
  • merge_micro_facts mgprona-MennzLore-94c580e/mcp_server/server.py :142
  • assemble_lorebook_tool mgprona-MennzLore-94c580e/mcp_server/server.py :160
  • render_production_tool mgprona-MennzLore-94c580e/mcp_server/server.py :177
  • render_map_tool mgprona-MennzLore-94c580e/mcp_server/server.py :195
  • open_dashboard_tool mgprona-MennzLore-94c580e/mcp_server/server.py :213
  • query_past_lore_tool mgprona-MennzLore-94c580e/mcp_server/server.py :240
  • render_relationships_tool mgprona-MennzLore-94c580e/mcp_server/server.py :257
  • generate_hybrid_notes_tool mgprona-MennzLore-94c580e/mcp_server/server.py :275
  • build_entity_registry_tool mgprona-MennzLore-94c580e/mcp_server/server.py :295
  • query_knowledge_graph mgprona-MennzLore-94c580e/mcp_server/server.py :314
  • render_timeline_tool mgprona-MennzLore-94c580e/mcp_server/server.py :366
  • query_lore_semantic_tool mgprona-MennzLore-94c580e/mcp_server/server.py :385
  • generate_storyboard_tool mgprona-MennzLore-94c580e/mcp_server/server.py :406
  • analyze_youtube_playlist mgprona-MennzLore-94c580e/mcp_server/server.py :429
  • run_youtube_acquisition mgprona-MennzLore-94c580e/mcp_server/server.py :461
  • acquire_epub mgprona-MennzLore-94c580e/mcp_server/server.py :480
  • acquire_by_id mgprona-MennzLore-94c580e/mcp_server/server.py :508
  • acquire_se mgprona-MennzLore-94c580e/mcp_server/server.py :527
  • acquire_by_title mgprona-MennzLore-94c580e/mcp_server/server.py :560
  • split_into_chapters mgprona-MennzLore-94c580e/mcp_server/server.py :593
  • save_global_lore mgprona-MennzLore-94c580e/mcp_server/server.py :634
  • run_global_lore mgprona-MennzLore-94c580e/mcp_server/server.py :675
  • auto_verify_names mgprona-MennzLore-94c580e/mcp_server/server.py :704
  • run_saga_assembly mgprona-MennzLore-94c580e/mcp_server/server.py :724
  • query_saga_rag mgprona-MennzLore-94c580e/mcp_server/server.py :748
  • run_full_pipeline mgprona-MennzLore-94c580e/mcp_server/server.py :841

declared dependencies 6

  • pydantic@>=2.0,<3.0
  • fastmcp@>=0.1.0,<1.0
  • requests@>=2.31.0,<3.0
  • pyyaml@>=6.0,<7.0
  • yt-dlp@>=2023.0.0
  • youtube-transcript-api@>=0.6.0