Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
1be8cab
docs: refactor MCP Mesh to decocms branding
tlgimenes Feb 9, 2026
a1dab27
docs: refactor agents/gateways terminology to Virtual MCPs
tlgimenes Feb 9, 2026
c52ab31
docs: document virtual MCPs with narrative structure
tlgimenes Feb 9, 2026
c756eeb
docs: simplify virtual MCPs configuration section
tlgimenes Feb 9, 2026
20ccfd2
docs: document MCP Mesh projects concept
tlgimenes Feb 9, 2026
84544cd
docs: document agents as single-purpose virtual MCPs
tlgimenes Feb 9, 2026
e6b5221
docs: document decopilot scope concept
tlgimenes Feb 9, 2026
0f3253d
docs: document decopilot overview with Claude Code comparison
tlgimenes Feb 9, 2026
c9d28bd
docs: document decopilot core architecture
tlgimenes Feb 9, 2026
c545b60
docs: document decopilot context management
tlgimenes Feb 9, 2026
980eece
docs: document decopilot built-in tools
tlgimenes Feb 9, 2026
88ec04a
docs: document decopilot agent spawning mechanism
tlgimenes Feb 9, 2026
22eb64e
docs: restructure agents.mdx to match projects.mdx concise style
tlgimenes Feb 10, 2026
42d9c19
docs: make agents.mdx more user-friendly
tlgimenes Feb 10, 2026
32cdea4
docs: align agents with SKILL.md pattern and clarify fields
tlgimenes Feb 10, 2026
8fb6cf8
docs: replace MCP Mesh with decocms in agents.mdx
tlgimenes Feb 10, 2026
df4fdf3
docs: implement decopilot documentation improvements plan
tlgimenes Feb 10, 2026
4afc18b
docs(decopilot): improve overview scopes section for clarity
tlgimenes Feb 10, 2026
6b85c2b
docs(decopilot): add scope-specific context loading section
tlgimenes Feb 10, 2026
cd7a62a
docs(nav): reorder decopilot menu to match overview structure
tlgimenes Feb 10, 2026
aa16d7e
docs: implement comprehensive documentation restructuring
tlgimenes Feb 10, 2026
11a3ff9
docs(decopilot): simplify page titles and update cross-references
tlgimenes Feb 10, 2026
d54e613
docs(decopilot): simplify scopes page for non-technical users
tlgimenes Feb 10, 2026
b3bfb0e
docs(api): add decopilot built-in tools reference
tlgimenes Feb 10, 2026
283c5a4
docs(decopilot): simplify context page for non-technical users
tlgimenes Feb 10, 2026
3e8045e
docs(decopilot): simplify tasks page for non-technical users
tlgimenes Feb 10, 2026
03dc539
docs(decopilot): simplify tools page for non-technical users
tlgimenes Feb 10, 2026
bcbf8f6
docs(decopilot): remove architecture page
tlgimenes Feb 10, 2026
b65d011
docs(nav): restructure documentation navigation and ordering
tlgimenes Feb 10, 2026
c860ece
docs(structure): consolidate authentication and deployment content
tlgimenes Feb 10, 2026
f324819
docs(self-hosting): add comprehensive self-hosting guides
tlgimenes Feb 10, 2026
02e4eda
docs(api): restructure API reference documentation
tlgimenes Feb 10, 2026
197b4b8
docs(content): update core documentation pages
tlgimenes Feb 10, 2026
acfc805
docs(branding): update decocms to deco CMS throughout documentation
tlgimenes Feb 10, 2026
0a57ede
docs(decopilot): update branding in quickstart and tasks pages
tlgimenes Feb 10, 2026
4a93b28
docs: finalize branding updates across remaining pages
tlgimenes Feb 10, 2026
c0182e0
docs(api): restructure API reference navigation and add connection pr…
tlgimenes Feb 10, 2026
b54e718
docs(api): update built-in tools with correct parameter signatures
tlgimenes Feb 10, 2026
d3d54c0
docs(decopilot): update code examples with correct resource_read sign…
tlgimenes Feb 10, 2026
b1e2e8b
docs: update branding and fix minor inconsistencies
tlgimenes Feb 10, 2026
7ba96e5
Update apps/docs/client/src/content/en/mcp-mesh/quickstart.mdx
tlgimenes Feb 10, 2026
6c17bae
fix(docs): resolve SSR hydration issues and improve sidebar structure
tlgimenes Feb 10, 2026
1b73bcd
fix(docs): add React keys to hydrated components in DocsLayout
tlgimenes Feb 10, 2026
0a31922
docs: change landing page redirect to quickstart
tlgimenes Feb 10, 2026
2f186de
wip quickstart
tlgimenes Feb 10, 2026
126215e
docs(examples): update documentation examples to focus on e-commerce …
tlgimenes Feb 10, 2026
cf3bf3f
docs: add decopilot quickstart redesign plan
tlgimenes Feb 10, 2026
931e4ed
docs(quickstart): redesign decopilot quickstart for non-technical users
tlgimenes Feb 10, 2026
06716ef
docs(decopilot): update examples to use e-commerce scenarios
tlgimenes Feb 10, 2026
983d402
docs(api-reference): update built-in tools examples to e-commerce con…
tlgimenes Feb 10, 2026
6cc5355
docs: remove completed quickstart redesign plan
tlgimenes Feb 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

This file provides guidance when working with code in this repository, including for Claude Code (claude.ai/code) and other AI coding assistants.

## Documentation Philosophy

**IMPORTANT**: The documentation in `apps/docs/` describes the **intended system design and behavior**, not necessarily the current implementation state. Documentation represents the target architecture and how the system should work, serving as both specification and aspiration. When implementation and documentation differ, the documentation defines the goal, not a bug to be "fixed" in the docs.

## Overview

MCP Mesh is an open-source control plane for Model Context Protocol (MCP) traffic. It provides a unified layer for authentication, routing, and observability between MCP clients (Cursor, Claude, VS Code) and MCP servers. The system is built as a monorepo using Bun workspaces with TypeScript, Hono (API), and React 19 (UI).
Expand Down
143 changes: 111 additions & 32 deletions apps/docs/client/src/components/ui/Sidebar.astro
Original file line number Diff line number Diff line change
Expand Up @@ -51,34 +51,45 @@ function buildTree(docs: any[]): TreeNode[] {
// Sort the tree for consistent ordering
const sortTree = (nodes: TreeNode[]): TreeNode[] => {
const sorted = nodes.sort((a, b) => {
// Special case: api-reference should come after folders
if (a.name === "api-reference" && b.type === "folder") {
return 1; // api-reference comes after folders
}
if (b.name === "api-reference" && a.type === "folder") {
return -1; // folders come before api-reference
}

// First sort by type: files before folders
if (a.type !== b.type) {
return a.type === "file" ? -1 : 1;
}

// For files only - custom ordering
if (a.type === "file" && b.type === "file") {
// Force introduction to be first
if (a.name.includes("introduction")) return -1;
if (b.name.includes("introduction")) return 1;

// Get parent folder to determine which order to use
const parentPath = a.path[a.path.length - 2];

// Custom order for MCP Mesh top-level pages
// Custom order for decocms top-level pages
if (parentPath === "mcp-mesh") {
// NOTE: doc IDs do not include ".mdx" (e.g. "overview", not "overview.mdx")
// Order follows: Quickstart → Overview → Core Concepts → Working with MCP → Monitoring → User Management → Reference
const mcpMeshOrder = [
"overview",
// Quickstart & Overview
"quickstart",
"overview",
// Core Concepts
"concepts",
"connect-clients",
"authentication",
"authorization-and-roles",
"mcp-servers",
"mcp-gateways",
"api-keys",
// Working with MCP
"connections",
"virtual-mcps",
"projects",
"agents",
// Monitoring & Observability
"monitoring",
// User Management
"api-keys",
"user-management",
// Reference
"api-reference",
];
const aIndex = mcpMeshOrder.indexOf(a.name);
Expand All @@ -90,6 +101,26 @@ function buildTree(docs: any[]): TreeNode[] {
if (bIndex !== -1) return 1;
}

// Custom order for decopilot subfolder
if (parentPath === "decopilot") {
const decopilotOrder = [
"overview",
"quickstart",
"context",
"tasks-and-spawning",
"tools",
"scopes",
"architecture",
];
const aIndex = decopilotOrder.indexOf(a.name);
const bIndex = decopilotOrder.indexOf(b.name);
if (aIndex !== -1 && bIndex !== -1) {
return aIndex - bIndex;
}
if (aIndex !== -1) return -1;
if (bIndex !== -1) return 1;
}

// Custom order for no-code-guides files
if (parentPath === "no-code-guides") {
const noCodeOrder = ["creating-tools", "creating-agents"];
Expand Down Expand Up @@ -120,10 +151,54 @@ function buildTree(docs: any[]): TreeNode[] {
if (bIndex !== -1) return 1;
}

// Custom order for MCP Mesh deploy docs
// Custom order for self-hosting section
if (parentPath === "self-hosting") {
const selfHostingOrder = ["quickstart", "authentication"];
const aIndex = selfHostingOrder.indexOf(a.name);
const bIndex = selfHostingOrder.indexOf(b.name);
if (aIndex !== -1 && bIndex !== -1) {
return aIndex - bIndex;
}
if (aIndex !== -1) return -1;
if (bIndex !== -1) return 1;
}

// Custom order for api-reference section
if (parentPath === "api-reference") {
const apiRefOrder = ["built-in-tools"];
const aIndex = apiRefOrder.indexOf(a.name);
const bIndex = apiRefOrder.indexOf(b.name);
if (aIndex !== -1 && bIndex !== -1) {
return aIndex - bIndex;
}
if (aIndex !== -1) return -1;
if (bIndex !== -1) return 1;
}

// Custom order for built-in-tools section
if (parentPath === "built-in-tools") {
const builtInToolsOrder = [
"tool-search",
"tool-enable",
"agent-search",
"subtask-run",
"user-ask",
"resource-read",
"prompt-read",
];
const aIndex = builtInToolsOrder.indexOf(a.name);
const bIndex = builtInToolsOrder.indexOf(b.name);
if (aIndex !== -1 && bIndex !== -1) {
return aIndex - bIndex;
}
if (aIndex !== -1) return -1;
if (bIndex !== -1) return 1;
}

// Custom order for deploy docs (now under self-hosting)
const rootPath = a.path[0];
if (rootPath === "mcp-mesh" && parentPath === "deploy") {
const deployOrder = ["local-docker-compose", "kubernetes-helm-chart"];
const deployOrder = ["docker-compose", "kubernetes"];
const aIndex = deployOrder.indexOf(a.name);
const bIndex = deployOrder.indexOf(b.name);
if (aIndex !== -1 && bIndex !== -1) {
Expand All @@ -137,12 +212,14 @@ function buildTree(docs: any[]): TreeNode[] {
// For folders - custom ordering
if (a.type === "folder" && b.type === "folder") {
const folderOrder: Record<string, number> = {
// Put Mesh docs first
"mcp-mesh": 0,
"getting-started": 1,
"no-code-guides": 2,
"full-code-guides": 3,
"mcp-studio": 4,
// Order follows improved information architecture
"mcp-mesh": 0, // decocms docs (main product)
"getting-started": 1, // Getting Started (after intro)
decopilot: 2, // Decopilot (elevated section within mcp-mesh)
"self-hosting": 3, // Self-hosting section
deploy: 4, // Deploy section (under self-hosting)
"no-code-guides": 5, // Legacy admin guides
"full-code-guides": 6, // Legacy admin guides
};

const aOrder = folderOrder[a.name] ?? Number.POSITIVE_INFINITY;
Expand Down Expand Up @@ -180,10 +257,7 @@ function groupLegacyAdminSections(nodes: TreeNode[]): TreeNode[] {
const folders = nodes.filter((n) => n.type === "folder");

const mcpMesh = folders.find((f) => f.name === "mcp-mesh");
const mcpStudio = folders.find((f) => f.name === "mcp-studio");
const legacyChildren = folders.filter(
(f) => f.name !== "mcp-mesh" && f.name !== "mcp-studio",
);
const legacyChildren = folders.filter((f) => f.name !== "mcp-mesh");

const legacyFolder: TreeNode | null =
legacyChildren.length > 0
Expand All @@ -198,16 +272,21 @@ function groupLegacyAdminSections(nodes: TreeNode[]): TreeNode[] {
}
: null;

// Make "Introduction" the primary entry point, then product docs.
const introduction = files.find((f) => f.name === "introduction");
const otherFiles = files.filter((f) => f.name !== "introduction");

// Flatten mcp-mesh folder - bring its children to the top level
// mcp-mesh children will be shown at the top level
const next: TreeNode[] = [];
if (introduction) next.push(introduction);
if (mcpMesh) next.push(mcpMesh);
if (mcpStudio) next.push(mcpStudio);
next.push(...otherFiles);

// Add all mcp-mesh children directly at top level (order controlled by mcpMeshOrder array)
if (mcpMesh && mcpMesh.children.length > 0) {
next.push(...mcpMesh.children);
}

// Add any other top-level files
next.push(...files);

// Add legacy admin section at the end
if (legacyFolder) next.push(legacyFolder);

return next;
}

Expand Down
Loading