Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
Split Markdown into chunks by heading. Each chunk keeps its heading path and line numbers.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
Necesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"md-chunk-lite": {
"command": "uvx",
"args": [
"md-chunk-lite",
"mcp"
]
}
}
}Ejecuta esto en tu terminal
claude mcp add md-chunk-lite -- uvx md-chunk-lite mcpPégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"md-chunk-lite": {
"command": "uvx",
"args": [
"md-chunk-lite",
"mcp"
]
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"md-chunk-lite": {
"type": "stdio",
"command": "uvx",
"args": [
"md-chunk-lite",
"mcp"
]
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
Esta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub tidybytetools, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (1.0.0) llegó al registro hace 3 días.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Python (uv) en tu computadora.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, SwarmMemo
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
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.
Talk with agent swarms: rooms, private messages and paid tasks for AI agents
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
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.