Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Split Markdown into chunks by heading. Each chunk keeps its heading path and line numbers.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"md-chunk-lite": {
"command": "uvx",
"args": [
"md-chunk-lite",
"mcp"
]
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add md-chunk-lite -- uvx md-chunk-lite mcpวางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"md-chunk-lite": {
"command": "uvx",
"args": [
"md-chunk-lite",
"mcp"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"md-chunk-lite": {
"type": "stdio",
"command": "uvx",
"args": [
"md-chunk-lite",
"mcp"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub tidybytetools ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.0.0) เข้า registry เมื่อวานซืน
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Master CSS
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Inspect Master CSS classes, generated CSS, and project stylesheets from your AI client.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
Free tool that splits Markdown into chunks by heading. Every chunk knows its heading path and the line numbers it came from. Need PDF, Word or web page files turned into chunks (with page numbers for PDFs), or whole folders? The paid doc2md does that: [doc2md on Gumroad](https://tidybyte.gumroad.com/l/frlkv)
Good for AI search (RAG), embeddings, and docs bots. Plain code, not AI, so the same file always gives the same chunks. Runs on your own computer. MIT license. Python 3.10 or newer, on Windows, Mac and Linux.
pip install md-chunk-lite
Or use pipx, which keeps it in its own space:
pipx install md-chunk-lite
Want the newest code from GitHub instead?
pip install git+https://github.com/tidybytetools/md-chunk-lite
md-chunk-lite guide.md # writes guide.chunks.jsonl
md-chunk-lite docs/*.md -o all.jsonl # many files into one file md-chunk-lite guide.md -o - # print the chunks on screen md-chunk-lite guide.md --max-chars 800 # smaller chunks md-chunk-lite guide.md --outline # just show the headings cat guide.md | md-chunk-lite - # read from stdin
Example run:
Saved: guide.chunks.jsonl (7 chunks, biggest 151 chars)
Each line of the .jsonl file is one chunk:
{
"id": "guide.md#3", "source": "guide.md", "index": 3, "heading_path": ["Garden Guide", "Planting", "Tomatoes"], "heading_level": 3, "anchor": "tomatoes", "start_line": 16, "end_line": 24, "part": 1, "parts": 1, "chars": 151, "text": "### Tomatoes\n\nPlant tomatoes after the last frost. Give them sun.\n\n`python\n..." }
heading_path: all the headings above this chunk, from the top.anchor: the #link GitHub makes for that heading, so you can link straight to it.start_line and end_line: where the chunk is in the file (the first line is 1).part and parts: a big section is split into parts. part 2, parts 3 means the 2nd of 3.chars: how long text is.--outline prints the headings:
Garden Guide [line 8, #garden-guide, 14 chars]
Tools [line 10, #tools, 47 chars] Planting [line 14, #planting, 11 chars] Tomatoes [line 16, #tomatoes, 151 chars]
When you run it in a terminal it ends with one short line about the paid doc2md. --quiet turns it off, and it never shows when output is piped or redirected.
` fence again, with the same language.heading_path of the chunks under it.It knows # headings and underlined headings (=== and ---). It skips headings inside code blocks and YAML front matter (the --- block at the very top).
Options:
--max-chars N: biggest chunk, in characters (default 1500, smallest 200). About 4 characters make 1 token in English.--overlap-chars N: when a section is split, start each part with up to N characters from the end of the part before it (default 0). It is never added inside a code block or table, and never between two different sections.--prefix-path: start each chunk's text with its heading path, like Garden Guide > Planting > Tomatoes. This often helps search. It counts toward --max-chars.--json: print one JSON object for scripts and AI agents instead of saving a file.docs/*.md). The paid doc2md walks whole folders.| md-chunk-lite (free) | doc2md (paid) | |
|---|---|---|
| Reads | Markdown and text files | PDF, Word (.docx) and HTML |
| Chunks with the heading path | yes | yes |
| Line numbers and anchors | yes | no (page numbers for PDFs instead) |
| Rough token count on each chunk | no | yes |
| Whole folders, sub-folders too | no | yes |
| MCP server | yes | no |
Pick what fits you. If you already use LangChain, its MarkdownHeaderTextSplitter also splits by heading. Chonkie and semchunk split any text by token count. md-chunk-lite is small, MIT, has no AI or tokenizer parts, gives you line numbers and anchors, and has an MCP server built in.
There is a small free MCP server built in. It needs uv.
Run it by hand to check it starts (it waits quietly for an app to talk to it):
uvx md-chunk-lite mcp
Claude Desktop (claude_desktop_config.json) or Cursor (~/.cursor/mcp.json):
{
"mcpServers": { "md-chunk-lite": { "command": "uvx", "args": ["md-chunk-lite", "mcp"] } } }
uvx --from md-chunk-lite md-chunk-lite-mcp starts the same server.
Tools (each one takes a file path or Markdown text):
| Tool | What it does | Changes files? |
|---|---|---|
chunk_markdown | Splits into chunks. Returns 100 at a time; use start for more. | No |
outline_markdown | Lists the headings with line numbers and anchors. | No |
get_section | Gets one section by heading or anchor. | No |
save_chunks_jsonl | Saves the chunks to a .jsonl file. | Writes one .jsonl file (replaces it if it is there) |
None of them use the internet.
Chunk your docs on every push, so your AI search or docs bot always gets fresh chunks. It also warns you when a section is too big for one chunk, right on the line in the pull request.
name: Docs chunks
on: [push, pull_request] permissions: contents: read jobs: chunks: runs-on: ubuntu-latest steps:
Want a big section to fail the check instead of just warn? Add fail-on-split: "true".
It runs the code in the same tag you pick, with only Python's standard library. No API key, no account, and nothing is sent outside GitHub. It works on Linux, Windows and Mac runners.
| Input | Default | What it does |
|---|---|---|
files | **/*.md | Which files to read. Glob patterns, one per line or split by commas. |
exclude | node_modules/**, **/node_modules/**, vendor/** | Patterns to skip. |
max-chars | 1500 | Biggest chunk, in characters (200 or more). |
overlap-chars | 0 | Characters from the part before to repeat at the start of the next part. |
prefix-path | false | Start each chunk's text with its heading path. |
output | md-chunks.jsonl | Where to save the chunks. |
fail-on-split | false | Fail when a section is too big for one chunk. |
fail-if-no-files | true | Fail when no files match. |
artifact-name | (empty) | If set, upload the JSONL as an artifact with this name. |
python-version | (empty) | Python to set up. Empty uses the runner's Python (3.10 or newer). |
| Output | What it is |
|---|---|
files | How many files were read. |
chunks | How many chunks were made. |
biggest | Size of the biggest chunk, in characters. |
split-sections | How many sections were too big and got split. |
output | Path of the JSONL file. |
The run page also gets a short report: chunks per file, and a list of every section that got split, with its line number.
outline_markdown and get_section to read just one part of a long file.max_chars (default 1500), overlap_chars (default 0) and prefix_path (default false).id, source, index, heading_path, heading_level, anchor, start_line, end_line, part, parts, chars, text.{"ok": false, "error": ...} with --json). See also llms.txt.from md_chunk_lite import chunk_file, chunk_markdown, outline, get_section
chunks = chunk_file("guide.md", max_chars=1000) for c in chunks: print(c["heading_path"], c["start_line"], c["end_line"])
install = get_section(open("README.md").read(), heading="Install")
The chunker file uses only Python's standard library. Installing with pip also adds the mcp package for the MCP server.
pip install "mcp>=1.10,<2"
python3 -m unittest discover -s tests
The MCP tests are skipped if mcp is not installed.
MIT. See LICENSE.