Add API documentation with GitHub Pages deployment (#1109)

Co-authored-by: Konstantin Konstantinov <konstantin@mach5technology.com>
This commit is contained in:
Jonathan Hefner 2026-01-20 09:22:24 -06:00 • committed by GitHub
commit 25f288be1b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 11403 additions and 2391 deletions

5
.github/pages/_config.yml vendored Normal file
View file

@ -0,0 +1,5 @@
title: '@modelcontextprotocol/sdk'
# Include generated files and directories which may start with underscores
include:
- '_*'

175
.github/pages/index.html vendored Normal file
View file

@ -0,0 +1,175 @@
---
# Jekyll front matter to enable Liquid templating
---
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>MCP TypeScript SDK - API Documentation</title>
<meta http-equiv="refresh" content="1; url={{ site.data.latest_version }}/" />
<link rel="canonical" href="{{ site.data.latest_version }}/" />
<style>
* {
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 2rem;
line-height: 1.6;
color: #333;
}
h1 {
color: #1a1a1a;
border-bottom: 2px solid #eee;
padding-bottom: 0.5rem;
}
h2 {
color: #444;
margin-top: 2rem;
}
a {
color: #0066cc;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.redirect-notice {
background: #f0f7ff;
border: 1px solid #cce0ff;
border-radius: 6px;
padding: 1rem;
margin-bottom: 2rem;
}
.versions-table {
width: 100%;
border-collapse: collapse;
margin: 1rem 0;
}
.versions-table th,
.versions-table td {
text-align: left;
padding: 0.75rem;
border-bottom: 1px solid #eee;
}
.versions-table th {
background: #f5f5f5;
font-weight: 600;
}
.package-versions {
display: none;
background: #fafafa;
border-radius: 6px;
padding: 1rem;
margin-top: 1rem;
}
.package-versions.loaded {
display: block;
}
.package-list {
list-style: none;
padding: 0;
margin: 0;
}
.package-list li {
padding: 0.25rem 0;
font-family: monospace;
font-size: 0.9rem;
}
.package-name {
color: #666;
}
.package-version {
color: #0066cc;
font-weight: 500;
}
@media (prefers-color-scheme: dark) {
body {
background: #1a1a1a;
color: #e0e0e0;
}
h1 {
color: #fff;
border-bottom-color: #333;
}
h2 {
color: #ccc;
}
a {
color: #66b3ff;
}
.redirect-notice {
background: #1a2a3a;
border-color: #2a4a6a;
}
.versions-table th {
background: #2a2a2a;
}
.versions-table td,
.versions-table th {
border-bottom-color: #333;
}
.package-versions {
background: #2a2a2a;
}
.package-name {
color: #999;
}
}
</style>
</head>
<body>
<h1>MCP TypeScript SDK</h1>
<div class="redirect-notice">
<p>Redirecting to <a href="{{ site.data.latest_version }}/">latest documentation ({{ site.data.latest_version }})</a>...</p>
</div>
<h2>Package Versions</h2>
<div id="package-versions" class="package-versions">
<p>Loading package versions...</p>
</div>
<h2>All Documentation Versions</h2>
<p>Select a version to view its API documentation:</p>
<ul id="versions-list">
<li><a href="{{ site.data.latest_version }}/">{{ site.data.latest_version }}</a> (latest)</li>
</ul>
<script>
// Redirect to latest version
setTimeout(function() {
window.location.href = '{{ site.data.latest_version }}/';
}, 1000);
// Load and display package versions from versions.json
fetch('{{ site.data.latest_version }}/versions.json')
.then(function(response) {
if (!response.ok) throw new Error('versions.json not found');
return response.json();
})
.then(function(data) {
var container = document.getElementById('package-versions');
var html = '<p>Packages included in the latest documentation:</p><ul class="package-list">';
for (var pkg in data.packages) {
html += '<li><span class="package-name">' + pkg + '</span>: <span class="package-version">' + data.packages[pkg] + '</span></li>';
}
html += '</ul>';
html += '<p style="font-size: 0.85rem; color: #666; margin-top: 1rem;">Generated from tag: ' + data.generated_from_tag + '</p>';
container.innerHTML = html;
container.classList.add('loaded');
})
.catch(function(err) {
// versions.json may not exist for older docs
document.getElementById('package-versions').style.display = 'none';
});
</script>
</body>
</html>

View file

@ -108,3 +108,42 @@ jobs:
- run: pnpm publish --provenance --access public ${{ steps.npm-tag.outputs.tag }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
# Generates API documentation for GitHub Pages on any release
# Supports both simple tags (v1.2.3) and package-scoped tags (@scope/package@1.2.3)
publish-gh-pages:
runs-on: ubuntu-latest
if: github.event_name == 'release'
needs: [publish]
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for all branches and tags
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
run_install: false
- uses: actions/setup-node@v4
with:
node-version: 24
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Install dependencies
run: pnpm install
- name: Configure Git
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
- name: Generate documentation
run: ./scripts/generate-gh-pages.sh "${{ github.ref_name }}"
- name: Push to gh-pages
run: git push origin gh-pages