Skip to content

Commit ffca1ec

Browse files
author
Dev Agent Amelia
committed
feat: VitePress docs redesign — homepage, interactive demo, CSS polish, llms.txt
1 parent dda24de commit ffca1ec

34 files changed

Lines changed: 5345 additions & 211 deletions

.github/workflows/pages.yml

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,28 @@ jobs:
2626
- name: Checkout
2727
uses: actions/checkout@v4
2828

29-
- name: Setup Pages
30-
uses: actions/configure-pages@v5
31-
32-
- name: Build with Jekyll
33-
uses: actions/jekyll-build-pages@v1
29+
- name: Setup Node.js
30+
uses: actions/setup-node@v4
3431
with:
35-
source: ./docs
36-
destination: ./_site
32+
node-version: '20'
33+
cache: 'npm'
34+
cache-dependency-path: docs/package-lock.json
35+
36+
- name: Copy logo to public
37+
run: mkdir -p docs/public && cp assets/logo.webp docs/public/logo.webp
38+
39+
- name: Install docs dependencies
40+
run: npm install
41+
working-directory: docs
42+
43+
- name: Build VitePress site
44+
run: npm run build
45+
working-directory: docs
3746

3847
- name: Upload artifact
3948
uses: actions/upload-pages-artifact@v3
49+
with:
50+
path: docs/.vitepress/dist
4051

4152
deploy:
4253
environment:

docs/.vitepress/config.mts

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
import { defineConfig } from "vitepress";
2+
3+
export default defineConfig({
4+
title: "MCP Dataverse",
5+
description:
6+
"The most complete MCP server for Microsoft Dataverse — 79 tools, multi-mode auth, works with VS Code, Claude, Cursor & more.",
7+
base: "/mcp-dataverse/",
8+
9+
appearance: true,
10+
11+
head: [
12+
["link", { rel: "icon", href: "/mcp-dataverse/logo.webp" }],
13+
["meta", { name: "og:title", content: "MCP Dataverse" }],
14+
[
15+
"meta",
16+
{
17+
name: "og:description",
18+
content: "The most complete MCP server for Microsoft Dataverse",
19+
},
20+
],
21+
[
22+
"meta",
23+
{
24+
name: "og:image",
25+
content: "https://codeurali.github.io/mcp-dataverse/logo.webp",
26+
},
27+
],
28+
["meta", { name: "twitter:card", content: "summary_large_image" }],
29+
],
30+
31+
themeConfig: {
32+
siteTitle: "MCP Dataverse",
33+
34+
nav: [
35+
{ text: "Home", link: "/" },
36+
{ text: "Getting Started", link: "/getting-started" },
37+
{ text: "Capabilities", link: "/capabilities" },
38+
{
39+
text: "Docs",
40+
items: [
41+
{ text: "Authentication", link: "/authentication/" },
42+
{ text: "Multi-Client Setup", link: "/multi-client-setup" },
43+
{ text: "Use Cases", link: "/use-cases/" },
44+
{ text: "Roadmap", link: "/roadmap" },
45+
],
46+
},
47+
{ text: "Community", link: "/community" },
48+
],
49+
50+
sidebar: [
51+
{
52+
text: "Getting Started",
53+
collapsed: false,
54+
items: [{ text: "Installation & Setup", link: "/getting-started" }],
55+
},
56+
{
57+
text: "Authentication",
58+
collapsed: true,
59+
items: [
60+
{ text: "Overview", link: "/authentication/" },
61+
{ text: "Local (Interactive)", link: "/authentication/local" },
62+
{
63+
text: "Service Principal",
64+
link: "/authentication/service-principal",
65+
},
66+
{ text: "Hosted / Managed Identity", link: "/authentication/hosted" },
67+
],
68+
},
69+
{
70+
text: "Use Cases",
71+
collapsed: true,
72+
items: [
73+
{ text: "Overview", link: "/use-cases/" },
74+
{ text: "Querying Data", link: "/use-cases/querying-data" },
75+
{ text: "Managing Records", link: "/use-cases/managing-records" },
76+
{ text: "Inspecting Schema", link: "/use-cases/inspecting-schema" },
77+
{ text: "Delta Sync", link: "/use-cases/delta-sync" },
78+
{
79+
text: "Solutions & Customizations",
80+
link: "/use-cases/solutions-and-customizations",
81+
},
82+
],
83+
},
84+
{
85+
text: "Multi-Client Setup",
86+
collapsed: true,
87+
items: [{ text: "Multi-Client Setup", link: "/multi-client-setup" }],
88+
},
89+
{
90+
text: "Reference",
91+
collapsed: true,
92+
items: [
93+
{ text: "All Capabilities", link: "/capabilities" },
94+
{ text: "Roadmap", link: "/roadmap" },
95+
{ text: "Issues & Support", link: "/issues" },
96+
{ text: "Community", link: "/community" },
97+
],
98+
},
99+
],
100+
101+
socialLinks: [
102+
{ icon: "github", link: "https://github.com/codeurali/mcp-dataverse" },
103+
{
104+
icon: {
105+
svg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>npm</title><path d="M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z"/></svg>',
106+
},
107+
link: "https://www.npmjs.com/package/mcp-dataverse",
108+
},
109+
],
110+
111+
editLink: {
112+
pattern:
113+
"https://github.com/codeurali/mcp-dataverse/edit/master/docs/:path",
114+
text: "Edit this page on GitHub",
115+
},
116+
117+
search: {
118+
provider: "local",
119+
},
120+
121+
footer: {
122+
copyright:
123+
'Copyright © 2026 <a href="https://www.linkedin.com/in/alitaggaz/">Ali Taggaz</a>',
124+
},
125+
},
126+
127+
markdown: {
128+
lineNumbers: true,
129+
},
130+
});

docs/.vitepress/theme/Layout.vue

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<script setup lang="ts">
2+
import DefaultTheme from 'vitepress/theme'
3+
import LlmToggle from './components/LlmToggle.vue'
4+
5+
const { Layout } = DefaultTheme
6+
</script>
7+
8+
<template>
9+
<Layout>
10+
<template #nav-bar-content-after>
11+
<LlmToggle />
12+
</template>
13+
</Layout>
14+
</template>
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<template>
2+
<span class="brand-logo" :style="{ width: size + 'px', height: size + 'px' }">
3+
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
4+
<defs>
5+
<linearGradient :id="gradId" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse">
6+
<stop offset="0" stop-color="#8b9aff" />
7+
<stop offset="0.55" stop-color="#5168ff" />
8+
<stop offset="1" stop-color="#38d3f0" />
9+
</linearGradient>
10+
</defs>
11+
<!-- Hex shield -->
12+
<path
13+
d="M32 3.5 56.5 17v30L32 60.5 7.5 47V17L32 3.5Z"
14+
fill="none"
15+
:stroke="`url(#${gradId})`"
16+
stroke-width="2.5"
17+
stroke-linejoin="round"
18+
/>
19+
<!-- Inner data nodes (network) -->
20+
<circle cx="22" cy="24" r="3.2" :fill="`url(#${gradId})`" />
21+
<circle cx="42" cy="24" r="3.2" :fill="`url(#${gradId})`" />
22+
<circle cx="32" cy="42" r="3.2" :fill="`url(#${gradId})`" />
23+
<circle cx="32" cy="14" r="3.2" :fill="`url(#${gradId})`" />
24+
<!-- Connection lines -->
25+
<path
26+
d="M32 14 L22 24 M32 14 L42 24 M22 24 L32 42 M42 24 L32 42 M22 24 L42 24"
27+
:stroke="`url(#${gradId})`"
28+
stroke-width="1.6"
29+
stroke-linecap="round"
30+
opacity="0.85"
31+
/>
32+
</svg>
33+
</span>
34+
</template>
35+
36+
<script setup lang="ts">
37+
import { computed } from 'vue'
38+
39+
const props = defineProps<{ size?: number }>()
40+
const size = computed(() => props.size ?? 48)
41+
const gradId = `brand-grad-${Math.random().toString(36).slice(2, 9)}`
42+
</script>

0 commit comments

Comments
 (0)