doc-template-mcp
You can use this MCP server to turn Obsidian Markdown into styled doc-template HTML documents and publish them.
list_themes – list available color themes/IDs to use in rendering.
get_starter – fetch a starter Markdown document (plan or research) with syntax guide.
render_document – render a Markdown string to a standalone HTML file; optional theme, output path, overwrite, canonical URL.
render_file – render a .md file to same-name .html beside it; only overwrites if allowed.
publish_document – upload a rendered HTML to GitHub Pages (via DOC_TEMPLATE_PAGES_REPO) and return its public URL.
Allows publishing generated HTML documents to GitHub Pages from a GitHub repository and returns the public URL.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@doc-template-mcp이 Markdown 파일을 기획 문서 HTML로 만들어 주고, 테마는 t3로 해줘."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
doc-template
옵시디언 Markdown 한 파일을 기획·리서치 문서 HTML로 만듭니다. 라이트·다크, PC·모바일, 인쇄를 지원하고, 터미널·Claude Code·Codex·Claude 앱에서 같은 도구로 씁니다.
표지와 띠지(결론 한 줄 + 바뀌는 것·대가·뒤집힐 조건)로 첫 화면에서 결론이 읽힙니다.
본문 폭은 한글 한 줄 36자 안팎(36em), 행간 1.7입니다. 절 사이에는 타공 헤어라인이 들어갑니다.
색은 머리말 한 줄로 고릅니다. 다이칸야마 츠타야 서점이 소개한 책 표지에서 뽑은 여섯 배색, 흑백(검정·흰색 두 색만), 한 가지 색 모드가 있습니다.
정하지 않은 것은 본문에 이름표로 흩지 않고 결정 모음 한 곳에 모읍니다. 옵시디언 접이 상자(
> [!decide]- 질문)로 쓰면 표지 아래 「정하지 않은 것 N가지 · 모아 보기」 줄과, 관련 절 머리의 「정할 것 N」 표시가 자동으로 붙습니다.머리의 문서 번호와 메타의 상위 문서에 적은 티켓 번호(CCO-121 등)는 머리말
jira:주소로 자동 링크됩니다.유형이 넷입니다. 위에서 아래로 읽는 기획(plan)·리서치(research), 기간을 훑고 날짜로 찾아가는 일정표(schedule) — 국면 카드·고정 2주 달력(오늘 표시)·운영 흐름과 부스팅 두 열·서랍 레이어, 조건으로 걸러 찾는 목록(catalog) — 상단에 고정되는 필터 줄·검색·건수·핵심 열만·그룹 접기.
doc-template starter schedule처럼 뼈대를 받아 씁니다.구조 점검이 들어 있습니다. 결론을 맨 위에, 소제목은 결론 문장으로, 한 문서 한 독자 같은 원칙(가이드)을
review가 점수와 고칠 점으로 알려 줍니다.
설치
uv가 필요합니다. 없으면 먼저 설치합니다.
curl -LsSf https://astral.sh/uv/install.sh | sh # 또는 brew install uv
uv tool install git+https://github.com/euna-source/doc-templatedoc-template(터미널 명령)과 doc-template-mcp(MCP 서버) 두 명령이 생깁니다. 업데이트는 uv tool upgrade doc-template 한 줄입니다.
Claude Code
claude mcp add doc-template -s user -- doc-template-mcpCodex
codex mcp add doc-template -- doc-template-mcpClaude 앱(데스크톱)
설정 → 개발자 → 설정 편집에서 claude_desktop_config.json에 아래를 넣고 앱을 다시 켭니다. command에는 which doc-template-mcp로 나온 전체 경로를 씁니다.
{
"mcpServers": {
"doc-template": { "command": "/Users/<이름>/.local/bin/doc-template-mcp" }
}
}Related MCP server: Little Red Book Card MCP
쓰는 법
AI에게는 이렇게 말하면 됩니다. "doc-template으로 이 내용을 기획 문서로 만들어 줘. 테마는 t1." MCP 도구 순서는 get_guide → get_starter → review_document → render_document입니다.
터미널에서는 이렇습니다.
doc-template starter plan -o 기획.md # 시작 문서
doc-template render 기획.md # 기획.html 생성
doc-template render 기획.md --theme mono # 흑백으로
doc-template review 기획.md # 구조 점검(점수·고칠 점)
doc-template guide # 구조 원칙
doc-template themes # 테마 목록테마
테마 | 이름 | 출처 표지 |
| 서가 전체 · 생성り × 노랑·주홍·초록 | 츠타야 서가 32권의 색 분포 |
| 노랑 한 면 | 『する、しない。』 |
| 흰 바탕 × 주홍 한 색 | 『世界』 junaida |
| 회갈색 × 주홍 | 『信号旗K』 |
| 연둣빛 풀색 | 『&Premium 京都』 |
| 노랑·빨강·남색 | 『いろいろ色のはじまり』 |
| 종이·먹 (v1 기본) | — |
| 흑백 | 검정·흰색 두 색만. 위계는 크기·굵기·선·반전 |
| 한 가지 색 | 고른 색 하나를 절 번호·목차·형광펜·띠지에만 |
모든 테마는 라이트·다크 양쪽에서 글자 대비 4.5:1 이상을 검사합니다.
Markdown 문법 (옵시디언 그대로)
쓰기 | 결과 |
머리말 | 표지·메타·띠지 |
| 번호가 붙은 절. 왼쪽은 목차 이름, 오른쪽은 큰 제목 |
| 형광펜. 절마다 한 구절을 권합니다 |
| 참고·주의·미확인 상자 |
| 다음 행동 목록 |
표, 첫 칸 | 추천 행. 숫자 열이 있거나 다섯 열 이상이면 모바일에서 가로 스크롤, 아니면 카드 |
| 이름표 |
| 요약 수치 |
| 각주와 출처 확인 상태 |
| 이력 |
전체 예시는 doc-template starter plan과 examples/sample-research.md에 있습니다.
공개 배포(선택)
GitHub Pages가 켜진 저장소를 DOC_TEMPLATE_PAGES_REPO=owner/repo로 지정하면 doc-template publish 기획.html 기획-slug로 올리고 공개 URL을 받습니다. gh 로그인이 필요합니다. doc-template이 만든 HTML만 올라가고, 같은 저장소에 동시에 올리면 차례로 처리합니다. 회사 내부 문서는 공개 저장소에 올리지 마세요.
검사
uv run --with-editable . --with playwright python tests/verify_render.py # 11테마 × 4폭 × 2모드
uv run --with-editable . python tests/test_safety.py # 주입·경로·덮어쓰기
uv run --with-editable . python tests/mcp_smoke.py # MCP 도구 호출Available Tools
5 toolsget_starterB
시작 문서(Markdown)와 문법. kind: plan(기획) | research(리서치). 머리말의 theme 한 줄로 색을 고른다.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | plan |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of transparency. It discloses that the starter document uses frontmatter 'theme' to determine colors and that 'kind' selects plan versus research variants. However, it does not explicitly state that this is a safe read-only operation or describe any other behavioral constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded with the core resource, followed by parameter options and a key behavioral detail. Each sentence adds useful information with minimal waste, though the phrasing is terse enough that some meaning requires inference.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and an output schema, the description covers the main information an agent needs: what the tool returns, the supported kinds, and the theme-to-color behavior. It is not fully complete because it lacks usage context relative to siblings, but the tool's low complexity makes this a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so for the only parameter, 'kind', by explaining the two possible values: plan(기획) and research(리서치). This adds meaning not present in the schema, though it omits any nuance about default behavior or how the value affects the returned document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's resource as a starter Markdown document with grammar/syntax, and names the two variants (plan and research). It does not use an explicit verb like 'retrieves', but the tool name 'get_starter' combined with the description makes the purpose clear. It is partially distinguished from siblings by describing starter-document content and theme selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to choose get_starter over sibling tools such as list_themes, render_document, or publish_document. The description implies usage by listing the 'kind' parameter values, but it never states concrete selection criteria or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_themesB
쓸 수 있는 테마와 대표 색. id를 render_document의 theme에 넣는다. 'mono'는 흑백, 'one:#HEX' 또는 'one:t3'는 한 가지 색 모드.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It explains the meaning of special theme values but does not state that this is a read-only operation, whether any authentication is needed, or what the response structure looks like. The agent cannot know side effects or return format from the description alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler. The purpose is stated first, and the special value semantics follow in a compact way. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with no output schema, the description is adequate but leaves the exact return shape unspecified. It mentions themes and representative colors, and the special value syntax, but an agent cannot know whether the response is an array of objects with id/color fields or something else without actually calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description does not need to explain input parameters and instead adds meaning about the values it returns (the theme id formats and their visual meaning), which is useful when passing the id to render_document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool exposes available themes and their representative colors, and connects it to render_document's theme parameter. It is differentiated from sibling rendering/publishing tools by its role as a lookup resource. A more explicit verb like 'lists' would make it 5, but the title already conveys that.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it by saying the id should be placed into render_document's theme parameter. It also documents special value formats ('mono', 'one:#HEX', 'one:t3'), which guides the agent in choosing a theme. However, it does not explicitly state when not to use it or name alternative tools, though this is a simple list operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_documentA
렌더한 HTML을 GitHub Pages 저장소(환경변수 DOC_TEMPLATE_PAGES_REPO)에 올리고 공개 URL을 돌려준다. 외부 공개이므로 사용자 확인 뒤에만 부른다.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| html_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure. It reveals that the action is a publish with external visibility, specifies the repository source via an environment variable, and mentions the return of a public URL. It does not cover failure modes or side effects like overwriting, but the key traits are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no redundant phrasing. The core action is front-loaded, and the mandatory usage warning follows. Every sentence contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main purpose and the decisive safety condition, but it omits parameter semantics and does not specify the response format beyond 'returns a public URL'. For a simple publish operation with two params, it is partially complete but leaves important invocation details to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description gives no explanation of either parameter. While 'html_path' is implicitly the rendered HTML file, 'slug' is completely unexplained, and the schema provides no description either (0% coverage). This is a critical gap for an agent to correctly invoke the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (upload rendered HTML to GitHub Pages), the target repository (via environment variable), and the expected result (returns a public URL). This distinguishes it from sibling tools like render_document or list_themes, which perform different stages of the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit condition for use: only call after user confirmation because the content becomes externally public. This provides clear context and a gate, though it does not name alternatives or state when not to use it, which prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_documentB
옵시디언 Markdown을 문서 템플릿 HTML(한 파일)로 만든다. theme을 비우면 머리말의 theme(없으면 t1). output_path를 비우면 ~/Documents/doc-template/<제목>-<날짜>.html 에 저장한다. 결과에 파일 경로와 대비 검사 결과가 있다.
| Name | Required | Description | Default |
|---|---|---|---|
| theme | No | ||
| markdown | Yes | ||
| overwrite | No | ||
| output_path | No | ||
| canonical_url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does substantial work: it discloses a file-writing side effect with a concrete default output path (~/Documents/doc-template/<제목>-<날짜>.html), the theme fallback chain (param → frontmatter → t1), and that the result includes the file path plus contrast-check output. The main omission is overwrite behavior, which is safety-relevant for a tool that writes to disk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, purpose first, then the two default behaviors, then the result shape. No filler or repetition. The structure is logical and front-loaded, though the two default clauses could have been formatted more explicitly for scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a file-writing tool with zero annotations, no output schema, and 0% schema coverage, the description covers the essentials: core transformation, default paths, and result contents. But it leaves overwrite semantics unexplained (critical for a tool that writes files), canonical_url's role unspecified, and the '대비 검사' (contrast check) vaguely defined. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds genuine semantics for theme (empty → frontmatter → t1) and output_path (empty → default path), which is valuable. However, overwrite and canonical_url are never mentioned, and markdown is only loosely characterized as 'Obsidian Markdown.' The compensation is partial, not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Korean description states a specific verb and resource: '옵시디언 Markdown을 문서 템플릿 HTML(한 파일)로 만든다' (creates Obsidian Markdown into a single document-template HTML file). The input, output, and file format are all concrete. It doesn't explicitly differentiate from the sibling render_file, but the core purpose is unambiguous and distinct from list_themes, get_starter, and publish_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus its four siblings, especially render_file, which likely overlaps. The description explains default-value behaviors (empty theme, empty output_path) but never states selection criteria, exclusions, or a 'use render_file instead when...' condition. An agent must infer the boundary between render_document and render_file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_fileB
Markdown(.md) 파일을 읽어 같은 폴더에 같은 이름의 .html로 렌더한다. 같은 이름의 HTML이 있으면 overwrite=True일 때만 덮어쓴다.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| theme | No | ||
| overwrite | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral burden. It clearly discloses the side effect of writing an HTML file and the overwrite condition (only when overwrite=True). However, it omits other behavioral details such as permissions, return behavior, or effects on the original file.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that front-load the core action and then add the important overwrite caveat. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters, no output schema, and no annotations, the description is incomplete. It explains the core conversion and overwrite behavior but leaves theme semantics, return values, and tool selection context unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needs to compensate for under-documented parameters. It adds meaning for overwrite by stating it controls overwriting existing HTML, but it does not clarify the path format or the allowed theme values, leaving those parameters ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a Markdown file and renders it to an HTML file in the same folder with the same name. It is specific about verb, resource, and output, though it does not explicitly differentiate itself from sibling render_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use render_file versus the sibling tools list_themes, get_starter, render_document, or publish_document. The overwrite behavior is explained, but it is parameter behavior, not usage selection.
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.
5 tool updates
v0.1.2- First observed
get_starter - First observed
list_themes - First observed
publish_document - First observed
render_document - First observed
render_file
TDQS
Scored across 5 tools
Each tool maps to a distinct stage in the template workflow: theme discovery, starter retrieval, rendering from Markdown text, rendering from a file, and publishing. Despite render_document and render_file both producing HTML, their input modes are clearly separated and the names reinforce the difference.
All five tool names follow the same snake_case verb_noun pattern: list_themes, get_starter, render_document, render_file, publish_document. The verbs match their actions consistently and no mixed naming conventions appear.
Five tools is a well-scoped size for this server's purpose. Each tool covers a necessary step without redundancy, and there is no bloat from dozens of near-duplicate operations.
The tool surface covers the full workflow: discovering themes, obtaining a starter template, rendering Markdown from text or a file, and publishing to GitHub Pages. There are no obvious dead ends or missing core operations within the stated domain.
Maintenance
Related MCP Connectors
Use your own Word templates to convert Markdown → DOCX/PDF/HTML from any MCP-compatible AI.
- blinkpdfOAuthio.blinkpdf
Render Markdown and LLM output into accessible PDF/UA-1 PDFs. No headless Chromium.
Publish an HTML document as a link anyone can open in one tap, plus PDF, image and Word export.
The document publishing layer for AI tools. Convert markdown to 6 destinations, 62 templates.
Related MCP Servers
- AlicenseAqualityDmaintenanceConverts Markdown documents to PDF files with support for syntax highlighting, custom styling, Mermaid diagrams, optional page numbers, and configurable watermarks.129 npmMIT
- AlicenseBqualityDmaintenanceConverts Markdown documents into beautifully styled knowledge cards with 18 different themes and generates them as HTML or image files (PNG/JPEG) in various sizes.38 npm4MIT
- AlicenseNot gradedqualityFmaintenanceConverts markdown files into professional PDF documents with automatic table of contents and interactive navigation.8MIT
- FlicenseAqualityDmaintenanceConverts JSON/CSV Markdown content into interactive flashcard pages with multiple templates, PDF export, and voice support for language learning.4-