Skip to content

Commit 5b12e01

Browse files
authored
Merge pull request #196 from posit-dev/enh-mcp-docs
enh: clean up MCP docs pages
2 parents f728085 + f5c3a2f commit 5b12e01

5 files changed

Lines changed: 135 additions & 63 deletions

File tree

great_docs/_mcp_docs.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -597,16 +597,16 @@ def _generate_mcp_index_page(
597597
f'<span class="mcp-tile-label">{get_translation("mcp_prompts", language)}</span>'
598598
f'<span class="mcp-tile-count">{n_prompts}</span></span>'
599599
)
600-
lines.append(
601-
f'<span class="mcp-tile mcp-tile-completions">'
602-
f'<span class="mcp-tile-label">{get_translation("mcp_completions", language)}</span>'
603-
f'<span class="mcp-tile-count">{completions_mark}</span></span>'
604-
)
605600
lines.append(
606601
f'<span class="mcp-tile mcp-tile-instructions">'
607602
f'<span class="mcp-tile-label">{get_translation("mcp_instructions", language)}</span>'
608603
f'<span class="mcp-tile-count">{instructions_mark}</span></span>'
609604
)
605+
lines.append(
606+
f'<span class="mcp-tile mcp-tile-completions">'
607+
f'<span class="mcp-tile-label">{get_translation("mcp_completions", language)}</span>'
608+
f'<span class="mcp-tile-count">{completions_mark}</span></span>'
609+
)
610610
lines.append("</div>")
611611
lines.append("")
612612

great_docs/_translations.py

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6178,31 +6178,31 @@
61786178
"he": "משאבים",
61796179
},
61806180
"mcp_resource_templates": {
6181-
"en": "Resource Templates",
6182-
"fr": "Modèles de ressources",
6183-
"de": "Ressourcenvorlagen",
6184-
"es": "Plantillas de recursos",
6185-
"pt": "Modelos de recursos",
6186-
"it": "Modelli di risorse",
6187-
"nl": "Bronsjablonen",
6188-
"ja": "リソーステンプレート",
6189-
"ko": "리소스 템플릿",
6190-
"zh-Hans": "资源模板",
6191-
"zh-Hant": "資源模板",
6192-
"ru": "Шаблоны ресурсов",
6193-
"pl": "Szablony zasobów",
6194-
"tr": "Kaynak şablonları",
6195-
"sv": "Resursmallar",
6196-
"da": "Ressourceskabeloner",
6197-
"nb": "Ressursmaler",
6198-
"is": "Auðlindasniðmát",
6199-
"fi": "Resurssipohjat",
6200-
"cs": "Šablony zdrojů",
6201-
"ro": "Șabloane de resurse",
6202-
"el": "Πρότυπα πόρων",
6203-
"hi": "संसाधन टेम्प्लेट",
6204-
"ar": "قوالب الموارد",
6205-
"he": "תבניות משאבים",
6181+
"en": "Templates",
6182+
"fr": "Modèles",
6183+
"de": "Vorlagen",
6184+
"es": "Plantillas",
6185+
"pt": "Modelos",
6186+
"it": "Modelli",
6187+
"nl": "Sjablonen",
6188+
"ja": "テンプレート",
6189+
"ko": "템플릿",
6190+
"zh-Hans": "模板",
6191+
"zh-Hant": "模板",
6192+
"ru": "Шаблоны",
6193+
"pl": "Szablony",
6194+
"tr": "Şablonlar",
6195+
"sv": "Mallar",
6196+
"da": "Skabeloner",
6197+
"nb": "Maler",
6198+
"is": "Sniðmát",
6199+
"fi": "Pohjat",
6200+
"cs": "Šablony",
6201+
"ro": "Șabloane",
6202+
"el": "Πρότυπα",
6203+
"hi": "टेम्प्लेट",
6204+
"ar": "قوالب",
6205+
"he": "תבניות",
62066206
},
62076207
"mcp_prompts": {
62086208
"en": "Prompts",

great_docs/assets/great-docs.scss

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ $label-constant-color: mix($primary, $orange-500, 20%);
2121
$label-typealias-color: mix($primary, $yellow-500, 20%);
2222
$label-cli-color: mix($primary, $green-600, 20%);
2323
$label-cli-group-color: mix($primary, $green-600, 20%);
24-
$label-mcp-tool-color: mix($primary, $purple-600, 20%);
25-
$label-mcp-resource-color: mix($primary, $teal-500, 20%);
26-
$label-mcp-resource-template-color: mix($primary, $teal-500, 20%);
27-
$label-mcp-prompt-color: mix($primary, $orange-400, 20%);
24+
$label-mcp-tool-color: #e6194B;
25+
$label-mcp-resource-color: #3cb44b;
26+
$label-mcp-resource-template-color: #f032e6;
27+
$label-mcp-prompt-color: #4363d8;
2828
$label-mcp-color: mix($primary, $purple-600, 20%);
2929

3030
$signature-background-color: shade-color(tint-color($primary, 96%), 2%);
@@ -601,8 +601,8 @@ $method-like-labels: (method, classmethod, staticmethod);
601601
}
602602

603603
// MCP capability tiles
604-
$label-mcp-completions-color: mix($primary, $indigo-400, 20%);
605-
$label-mcp-instructions-color: mix($primary, $pink-500, 20%);
604+
$label-mcp-completions-color: #911eb4;
605+
$label-mcp-instructions-color: #f58231;
606606

607607
.mcp-capability-tiles {
608608
max-width: 28rem;
@@ -613,6 +613,7 @@ $label-mcp-instructions-color: mix($primary, $pink-500, 20%);
613613
grid-template-columns: 1fr 1fr;
614614
gap: 0.5rem;
615615
margin: 0;
616+
padding-top: 10px;
616617
}
617618
}
618619

@@ -638,39 +639,39 @@ $label-mcp-instructions-color: mix($primary, $pink-500, 20%);
638639
}
639640

640641
.mcp-tile-tools {
641-
color: $label-mcp-tool-color;
642-
border-color: $label-mcp-tool-color;
643-
background-color: tint-color($label-mcp-tool-color, 92%);
642+
color: #e6194B;
643+
border-color: #e6194B;
644+
background-color: tint-color(#e6194B, 92%);
644645
}
645646

646647
.mcp-tile-resources {
647-
color: $label-mcp-resource-color;
648-
border-color: $label-mcp-resource-color;
649-
background-color: tint-color($label-mcp-resource-color, 92%);
648+
color: #3cb44b;
649+
border-color: #3cb44b;
650+
background-color: tint-color(#3cb44b, 92%);
650651
}
651652

652653
.mcp-tile-templates {
653-
color: $label-mcp-resource-template-color;
654-
border-color: $label-mcp-resource-template-color;
655-
background-color: tint-color($label-mcp-resource-template-color, 92%);
654+
color: #f032e6;
655+
border-color: #f032e6;
656+
background-color: tint-color(#f032e6, 92%);
656657
}
657658

658659
.mcp-tile-prompts {
659-
color: $label-mcp-prompt-color;
660-
border-color: $label-mcp-prompt-color;
661-
background-color: tint-color($label-mcp-prompt-color, 92%);
660+
color: #4363d8;
661+
border-color: #4363d8;
662+
background-color: tint-color(#4363d8, 92%);
662663
}
663664

664-
.mcp-tile-completions {
665-
color: $label-mcp-completions-color;
666-
border-color: $label-mcp-completions-color;
667-
background-color: tint-color($label-mcp-completions-color, 92%);
665+
.mcp-tile-instructions {
666+
color: #f58231;
667+
border-color: #f58231;
668+
background-color: tint-color(#f58231, 92%);
668669
}
669670

670-
.mcp-tile-instructions {
671-
color: $label-mcp-instructions-color;
672-
border-color: $label-mcp-instructions-color;
673-
background-color: tint-color($label-mcp-instructions-color, 92%);
671+
.mcp-tile-completions {
672+
color: #911eb4;
673+
border-color: #911eb4;
674+
background-color: tint-color(#911eb4, 92%);
674675
}
675676

676677
// Adorn callables with ()
@@ -1947,7 +1948,7 @@ div.sourceCode:hover > .gd-code-nav .gd-code-copy,
19471948
gap: 0;
19481949
padding-top: 0;
19491950
padding-left: 0.5rem;
1950-
color: #6c757d;
1951+
color: #212529;
19511952
white-space: nowrap;
19521953
overflow: hidden;
19531954
text-overflow: ellipsis;

great_docs/assets/keyboard-nav.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -469,10 +469,11 @@
469469
var item = items[i];
470470
if (item.section && item.section !== currentSection) {
471471
currentSection = item.section;
472+
// Section text comes from innerHTML (already HTML-safe), so
473+
// insert directly without escaping to avoid double-encoding
474+
// entities like &amp; → &amp;amp;
472475
html += '<li class="gd-menu-section" aria-hidden="true">' +
473-
(typeof currentSection === 'string' && currentSection.indexOf('<') !== -1
474-
? currentSection
475-
: escapeHtml(currentSection)) + '</li>';
476+
currentSection + '</li>';
476477
}
477478
var activeClass = item.active ? ' gd-menu-item-active' : '';
478479
var label = item.html || escapeHtml(item.text);

great_docs/assets/post-render.py

Lines changed: 73 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2958,9 +2958,14 @@ def convert_table_to_dl(match):
29582958
# Translate renderer-rendered headings, TOC, and sidebar on the index page
29592959
content = translate_renderer_headings(content)
29602960

2961-
# Replace breadcrumb with a "Reference" title bar label
2962-
_reference_label = _t("reference", "Reference")
2963-
_ref_idx_title = f'<h1 class="quarto-secondary-nav-title no-breadcrumbs gd-ref-title">{html.escape(_reference_label)}</h1>'
2961+
# Replace breadcrumb with an "API / Index" title bar label
2962+
_ref_idx_title = (
2963+
'<h1 class="quarto-secondary-nav-title no-breadcrumbs gd-ref-title">'
2964+
'<span class="gd-ref-title-prefix">API</span>'
2965+
'<span class="gd-ref-title-sep">/</span>'
2966+
'<span class="gd-ref-title-name">Index</span>'
2967+
"</h1>"
2968+
)
29642969
_bc_pat = r'<nav class="quarto-page-breadcrumbs[^"]*"[^>]*>.*?</nav>'
29652970
content = re.sub(_bc_pat, _ref_idx_title, content, flags=re.DOTALL)
29662971

@@ -2972,6 +2977,71 @@ def convert_table_to_dl(match):
29722977
print(f"Index file not found: {index_file}")
29732978

29742979

2980+
# Modify the MCP index page to replace breadcrumbs with a styled title
2981+
mcp_index_file = "_site/reference/mcp/index.html"
2982+
if os.path.exists(mcp_index_file):
2983+
print(f"Processing MCP index file: {mcp_index_file}")
2984+
with open(mcp_index_file, "r", encoding="utf-8") as file:
2985+
content = file.read()
2986+
2987+
_mcp_idx_title = (
2988+
'<h1 class="quarto-secondary-nav-title no-breadcrumbs gd-ref-title">'
2989+
'<span class="gd-ref-title-prefix">MCP</span>'
2990+
'<span class="gd-ref-title-sep">/</span>'
2991+
'<span class="gd-ref-title-name">Index</span>'
2992+
"</h1>"
2993+
)
2994+
_bc_pat = r'<nav class="quarto-page-breadcrumbs[^"]*"[^>]*>.*?</nav>'
2995+
content = re.sub(_bc_pat, _mcp_idx_title, content, flags=re.DOTALL)
2996+
2997+
with open(mcp_index_file, "w", encoding="utf-8") as file:
2998+
file.write(content)
2999+
3000+
print("MCP index file processing complete")
3001+
else:
3002+
print(f"MCP index file not found: {mcp_index_file}")
3003+
3004+
3005+
# Process individual MCP reference pages (tools, resources, prompts) to add
3006+
# "MCP / object_name" title bar in the secondary nav
3007+
mcp_html_files = [
3008+
f for f in glob.glob("_site/reference/mcp/*.html") if os.path.basename(f) != "index.html"
3009+
]
3010+
3011+
if mcp_html_files:
3012+
print(f"Processing {len(mcp_html_files)} MCP reference pages...")
3013+
3014+
for html_file in mcp_html_files:
3015+
with open(html_file, "r", encoding="utf-8") as file:
3016+
content = file.read()
3017+
3018+
# Extract the display name from the doc-object-name span
3019+
_obj_name_match = re.search(r'<span class="doc-object-name[^"]*">([^<]+)</span>', content)
3020+
_mcp_name = (
3021+
_obj_name_match.group(1)
3022+
if _obj_name_match
3023+
else os.path.basename(html_file).replace(".html", "")
3024+
)
3025+
3026+
_mcp_title_html = (
3027+
f'<h1 class="quarto-secondary-nav-title no-breadcrumbs gd-ref-title">'
3028+
f'<span class="gd-ref-title-prefix">MCP</span>'
3029+
f'<span class="gd-ref-title-sep">/</span>'
3030+
f'<span class="gd-ref-title-name">{html.escape(_mcp_name)}</span>'
3031+
f"</h1>"
3032+
)
3033+
3034+
# MCP pages use bread-crumbs: false, so Quarto renders the title inside
3035+
# an h1.quarto-secondary-nav-title.no-breadcrumbs element
3036+
_h1_pat = r'<h1 class="quarto-secondary-nav-title no-breadcrumbs[^"]*">.*?</h1>'
3037+
content = re.sub(_h1_pat, _mcp_title_html, content, count=1, flags=re.DOTALL)
3038+
3039+
with open(html_file, "w", encoding="utf-8") as file:
3040+
file.write(content)
3041+
3042+
print(f"Styled {len(mcp_html_files)} MCP reference page titles")
3043+
3044+
29753045
# Update quarto-secondary-nav-title to display "User Guide" text
29763046
# This improves the mobile navigation by making it clear what the sidebar toggle reveals
29773047
all_html_files = glob.glob("_site/**/*.html", recursive=True)

0 commit comments

Comments
 (0)