diff --git a/app/[[...slug]]/page.tsx b/app/[[...slug]]/page.tsx
index 1c390be..8984065 100644
--- a/app/[[...slug]]/page.tsx
+++ b/app/[[...slug]]/page.tsx
@@ -1,14 +1,14 @@
import type { Metadata } from 'next';
import { DocsLayout } from 'fumadocs-ui/layouts/docs';
-import { HomeLayout } from 'fumadocs-ui/layouts/home';
import { DocsPage, DocsBody } from 'fumadocs-ui/page';
import { notFound } from 'next/navigation';
-import { source, mainSource, developmentSource, selfHostedSource } from '@/lib/source';
+import { source } from '@/lib/source';
import { generatePageMetadata, getCanonicalUrl } from '@/lib/seo-utils';
import { getFinalPageTitle } from '@/lib/h1-extractor';
import { readFile } from 'fs/promises';
import { getMDXComponents } from '@/mdx-components';
-import { homeOptions, docsOptions } from '../layout.config';
+import { docsOptions } from '../layout.config';
+import { generateTechArticleSchema, generateBreadcrumbSchema, combineSchemas } from '@/lib/structured-data';
export default async function Page({
params,
@@ -24,53 +24,65 @@ export default async function Page({
const MDX = page.data.body;
- // Determine if this is the root page (no sidebar needed)
- const isRootPage = !slug || slug.length === 0;
+ // Generate structured data for all pages with content
+ let structuredData = '';
+ if (slug && slug.length > 0) {
+ const slugString = slug.join('/');
+ const url = `https://deploystack.io/docs/${slugString}`;
+
+ // Get the final title (same logic as in generateMetadata)
+ let finalTitle = page.data.title;
+ try {
+ const filePath = page.file.path;
+ const absolutePath = `./docs/${filePath}`;
+ const rawContent = await readFile(absolutePath, 'utf-8');
+ finalTitle = getFinalPageTitle(rawContent, page.data.title);
+ } catch (error) {
+ finalTitle = page.data.title;
+ }
- // Use HomeLayout for root page (no sidebar), DocsLayout for all other pages
- if (isRootPage) {
- return (
-
-
-
- );
+ const articleSchema = generateTechArticleSchema({
+ title: finalTitle,
+ description: page.data.description,
+ slug,
+ url,
+ });
+
+ const breadcrumbSchema = generateBreadcrumbSchema(slug);
+ structuredData = combineSchemas(articleSchema, breadcrumbSchema);
}
- // Determine which section we're in and get the appropriate page tree
- const firstSegment = slug[0];
- let pageTree = mainSource.pageTree;
- let navTitle = 'DeployStack Docs';
-
- if (firstSegment === 'development') {
- pageTree = developmentSource.pageTree;
- navTitle = 'Development Docs';
- } else if (firstSegment === 'self-hosted') {
- pageTree = selfHostedSource.pageTree;
- navTitle = 'Self-Hosted Docs';
- }
+ // Always use the unified source pageTree that includes all sections
+ // Instead of switching between different trees, show all sections together
+ const pageTree = source.pageTree;
+ // Always use DocsLayout with sidebar for all pages including root
return (
-
-
-
-
-
-
-
+ <>
+ {structuredData && (
+
+ )}
+
+
+
+
+
+
+
+ >
);
}
diff --git a/app/layout.tsx b/app/layout.tsx
index 1aec7b3..8f776b1 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -1,6 +1,7 @@
import { RootProvider } from 'fumadocs-ui/provider';
import type { ReactNode } from 'react';
import type { Metadata } from 'next';
+import { generateWebSiteSchema, generateOrganizationSchema, combineSchemas } from '@/lib/structured-data';
import './global.css'; // Import global styles
export const metadata: Metadata = {
@@ -25,8 +26,19 @@ export const metadata: Metadata = {
};
export default function Layout({ children }: { children: ReactNode }) {
+ // Generate site-wide structured data
+ const websiteSchema = generateWebSiteSchema();
+ const organizationSchema = generateOrganizationSchema();
+ const structuredData = combineSchemas(websiteSchema, organizationSchema);
+
return (
+
+
+
+
+
+
+Traditional MCP implementation creates significant organizational challenges:
+
+### Configuration Hell
+- **Manual Setup**: Developers spend hours configuring each MCP server with complex JSON files
+- **Environment Variables**: API keys and tokens scattered across local `.env` files and shell configurations
+- **Inconsistent Environments**: "Works on my machine" problems due to configuration drift across team members
+
+### Security & Compliance Gaps
+- **Credential Sprawl**: API keys shared via Slack, email, or committed to version control
+- **Zero Visibility**: Organizations have no insight into which MCP tools are being used or by whom
+- **No Access Control**: Anyone can run any MCP server locally without oversight
+
+### Operational Chaos
+- **Onboarding Friction**: New team members need days to set up all required MCP tools
+- **Tool Discovery**: Developers waste time finding and configuring tools individually
+- **No Standardization**: No central catalog or approved tool list for organizational use
+
+## The Solution: Enterprise Control Plane
+
+
+

+
+
+DeployStack introduces a **Control Plane / Data Plane architecture** that brings enterprise-grade management to the MCP ecosystem while maintaining the performance and flexibility developers expect.
+
+## Core Components
+
+
+ }
+ title="Control Plane"
+ >
+ **cloud.deploystack.io** - Centralized management platform for teams, credentials, and MCP server configurations
+
+
+ }
+ title="Data Plane"
+ >
+ **DeployStack Gateway** - Local secure proxy managing persistent MCP server processes with credential injection
+
+
+ }
+ title="Developer Interface"
+ >
+ **Agent Integration** - VS Code, CLI tools, and other MCP clients connect seamlessly through the gateway
+
+
+
+### Control Plane: cloud.deploystack.io
+
+The cloud-based control plane provides centralized management for all MCP infrastructure:
+
+#### Team & Access Management
+- **Role-Based Access Control**: [Define teams](/teams), [roles, and permissions](/roles) for MCP server access
+- **Centralized User Management**: Single source of truth for team membership and access rights
+- **Policy Enforcement**: Granular control over which teams can access which MCP servers
+
+#### Secure Credential Vault
+- **Encrypted Storage**: All API keys and tokens stored with [enterprise-grade encryption](/security)
+- **Zero-Exposure Model**: Developers never directly handle credentials
+
+#### MCP Server Catalog
+- **Configuration Management**: [Store and manage all MCP server configurations](/mcp-catalog) including commands, arguments, and environment variables
+- **Version Control**: Track changes to MCP server configurations over time (coming soon)
+
+#### Analytics & Governance (Coming soon)
+- **Usage Analytics**: Track which developers use which MCP servers and how frequently
+- **Cost Tracking**: Monitor expensive API usage across teams and optimize spending
+- **Audit Trails**: Complete logging of all MCP server interactions for compliance
+
+### Data Plane: DeployStack Gateway
+
+The local gateway acts as an intelligent proxy and process manager running on each developer's machine:
+
+#### Persistent Process Management
+- **Background Processes**: All configured MCP servers run as [persistent background processes](/development/gateway/process-management) when the gateway starts
+- **Instant Availability**: Tools are immediately available without process spawning delays
+- **Language Agnostic**: Supports MCP servers written in Node.js, Python, Go, Rust, or any language
+
+#### Dual Transport Architecture
+The gateway implements sophisticated transport protocols for maximum compatibility:
+
+**SSE Transport (VS Code Compatibility)**:
+```
+VS Code → GET /sse → DeployStack Gateway
+ ← SSE Stream with session endpoint
+VS Code → POST /message?session=xyz → Gateway → MCP Server (stdio)
+ ← JSON-RPC response via SSE
+```
+
+**stdio Transport (CLI Compatibility)**:
+```
+CLI Tool → DeployStack Gateway → MCP Server (stdio)
+ ← Direct JSON-RPC over stdio
+```
+
+#### Secure Credential Injection
+- **Runtime Injection**: Credentials are injected directly into MCP server process environments at startup
+- **Zero Disk Exposure**: No credentials written to disk in plain text
+- **Process Isolation**: Each MCP server runs in its own isolated environment
+
+## Protocol Flow
+
+### 1. Developer Authentication
+```bash
+deploystack login
+```
+- Gateway authenticates with cloud.deploystack.io using OAuth2
+- Downloads team configurations and access policies
+- Caches encrypted configurations locally
+
+### 2. Gateway Startup
+```bash
+deploystack start
+```
+- **Configuration Sync**: Downloads latest team MCP server configurations
+- **Process Spawning**: Starts all configured MCP servers as background processes
+- **Credential Injection**: Securely injects team credentials into process environments
+- **Service Discovery**: Discovers and caches all available tools from running processes
+- **HTTP Server**: Starts local server at `http://localhost:9095/sse` for client connections
+
+### 3. Client Connection
+**VS Code Configuration**:
+```json
+{
+ "mcpServers": {
+ "deploystack": {
+ "url": "http://localhost:9095/sse"
+ }
+ }
+}
+```
+
+**Connection Flow**:
+1. **SSE Establishment**: VS Code connects to `/sse` endpoint
+2. **Session Creation**: Gateway generates cryptographically secure session ID
+3. **Tool Discovery**: Client calls `tools/list` to discover available MCP servers
+4. **Request Routing**: All tool requests routed through gateway to persistent MCP processes
+
+### 4. Request Processing
+```
+Client Request → Gateway Session Validation → Route to MCP Process → Return Response
+```
+
+## Security Architecture
+
+DeployStack implements enterprise-grade security across all components of the platform. For comprehensive security details including credential management, access control, and compliance features, see our [Security Documentation](/security).
+
+Key security principles:
+- **Zero-Trust Credential Model**: Credentials never stored on developer machines
+- **Process Isolation**: Each MCP server runs in complete isolation
+- **Cryptographic Sessions**: 256-bit entropy for all client connections
+
+## Performance Optimization
+
+### Persistent Process Model
+Unlike on-demand spawning, DeployStack uses persistent background processes:
+
+- **Zero Latency**: All tools immediately available from running processes
+- **Resource Efficiency**: No spawn/cleanup overhead during development workflows
+- **Memory Stability**: Consistent resource usage patterns
+- **Parallel Processing**: Concurrent handling of multiple requests across processes
+
+### Caching Strategy
+DeployStack implements sophisticated caching mechanisms to optimize performance and enable offline operation. For detailed information about the caching architecture, implementation, and team isolation strategies, see our [Gateway Caching System Documentation](/development/gateway/caching-system).
+
+## Enterprise Features
+
+### Organizational Visibility
+- **Real-Time Analytics**: Live dashboard showing MCP server usage across the organization
+- **Cost Optimization**: Track expensive API usage and identify optimization opportunities
+- **Resource Planning**: Understand which tools drive the most value for different teams
+
+### Compliance & Governance
+- **Audit Logging**: Complete trails of all MCP server interactions
+- **Policy Enforcement**: Centralized policies automatically enforced at the gateway level
+- **Access Reviews**: Regular reviews of team access to sensitive MCP servers
+
+### Operational Controls
+- **Centralized Updates**: Push MCP server configuration changes to all team members
+- **Emergency Disable**: Instantly disable problematic MCP servers across the organization
+- **Health Monitoring**: Real-time monitoring of MCP server performance and availability
+
+## Team Context Switching
+
+DeployStack supports multiple team memberships with seamless context switching:
+
+```bash
+# List available teams
+deploystack teams
+
+# Switch to different team
+deploystack teams --switch 2
+```
+
+**Context Switch Process**:
+1. **Graceful Shutdown**: Stop all current team's MCP server processes
+2. **Configuration Refresh**: Download new team's configurations and credentials
+3. **Process Restart**: Start all MCP servers for the new team
+4. **State Synchronization**: Update local cache and runtime state
+
+## Deployment Models
+
+### Cloud-Native (Default)
+- **Control Plane**: Hosted at cloud.deploystack.io
+- **Data Plane**: Local gateway on developer machines
+- **Benefits**: Zero infrastructure management, automatic updates, shared team configurations
+
+### Self-Hosted Enterprise
+- **Control Plane**: Deployed in customer's infrastructure
+- **Data Plane**: Local gateways connect to private control plane
+- **Benefits**: Complete data sovereignty, custom compliance requirements, air-gapped environments
+
+## Development Workflow
+
+### Before DeployStack
+```bash
+# Developer manually configures each MCP server
+1. Find MCP server documentation
+2. Install server individually (npm install @github/mcp)
+3. Obtain API credentials from various sources
+4. Configure complex JSON in VS Code settings
+5. Debug configuration issues
+6. Repeat for each team member
+```
+
+### After DeployStack
+```bash
+# One-time setup for entire team
+1. npm install -g @deploystack/gateway
+2. deploystack login
+3. # Done! All authorized tools available immediately
+```
+
+**VS Code Configuration**:
+```json
+{
+ "mcpServers": {
+ "deploystack": {
+ "url": "http://localhost:9095/sse"
+ }
+ }
+}
+```
+
+## Monitoring & Observability (comming soon)
+
+### Gateway Metrics
+- **Process Health**: Real-time status of all MCP server processes
+- **Request Throughput**: Performance metrics for tool usage
+- **Error Rates**: Failure detection and automatic recovery
+- **Resource Usage**: CPU, memory, and network consumption
+
+### Cloud Metrics
+- **Team Activity**: Organization-wide usage patterns and trends
+- **Cost Analysis**: API usage costs and optimization recommendations
+- **Security Events**: Authentication, authorization, and policy violations
+- **Performance Analytics**: Gateway and MCP server performance across teams
+
+## Benefits Summary
+
+### For Developers
+- **Zero Configuration**: One command setup, then everything works
+- **Instant Access**: All team tools immediately available
+- **Consistent Environment**: Identical setup across all team members
+- **No Credential Management**: Never handle API keys or tokens
+
+### for Organizations
+- **Complete Visibility**: Know what MCP tools are used, by whom, and how often
+- **Security Control**: Centralized credential management and access policies
+- **Cost Optimization**: Track and optimize expensive API usage
+- **Compliance Ready**: Full audit trails and governance controls
+
+### For Administrators
+- **Central Management**: Single dashboard for entire MCP ecosystem
+- **Policy Enforcement**: Granular control over tool access by team and role
+- **Instant Deployment**: Push configuration changes to all team members
+- **Operational Insights**: Real-time monitoring and analytics
+
+
+ **Enterprise Transformation**: DeployStack transforms MCP from individual developer tools into enterprise-ready infrastructure, providing the security, governance, and operational control that organizations need while maintaining the developer experience that teams love.
+
+
+---
+
+**Next Steps**: Explore our [Quick Start Guide](/quick-start) to experience the architecture in action, or dive into the [Development Documentation](/development) to understand implementation details.
diff --git a/docs/development/backend/index.mdx b/docs/development/backend/index.mdx
index 17d46d6..6b4cca0 100644
--- a/docs/development/backend/index.mdx
+++ b/docs/development/backend/index.mdx
@@ -9,7 +9,7 @@ import { Database, Shield, Plug, Settings, Mail, TestTube, Wrench, BookOpen } fr
# DeployStack Backend Development
-The DeployStack backend is a modern, high-performance Node.js application built with **Fastify**, **TypeScript**, and **Drizzle ORM**. It's specifically designed for managing MCP (Model Context Protocol) server deployments with enterprise-grade features including authentication, role-based access control, and an extensible plugin system.
+The DeployStack backend is a modern, high-performance Node.js application built with **Fastify**, **TypeScript**, and **Drizzle ORM**. It's specifically designed for managing MCP (Model Context Protocol) server configurations with enterprise-grade features including authentication, role-based access control, and an extensible plugin system.
## Technology Stack
diff --git a/docs/development/backend/meta.json b/docs/development/backend/meta.json
index 97704e8..6b9020e 100644
--- a/docs/development/backend/meta.json
+++ b/docs/development/backend/meta.json
@@ -2,7 +2,7 @@
"title": "Backend Development",
"description": "Documentation for DeployStack Backend Development",
"icon": "Server",
- "root": true,
+ "root": false,
"pages": [
"..."
]
diff --git a/docs/development/frontend/index.mdx b/docs/development/frontend/index.mdx
index 8f4852f..a0ca6f6 100644
--- a/docs/development/frontend/index.mdx
+++ b/docs/development/frontend/index.mdx
@@ -6,7 +6,7 @@ sidebar: Getting Started
# DeployStack Frontend Development
-The DeployStack frontend is a modern web application built with Vue 3, TypeScript, and Vite, specifically designed for managing MCP (Model Context Protocol) server deployments. This guide covers everything you need to know to develop and contribute to the frontend.
+The DeployStack frontend is a modern web application built with Vue 3, TypeScript, and Vite, specifically designed for managing MCP (Model Context Protocol) server configurations. This guide covers everything you need to know to develop and contribute to the frontend.
## Technology Stack
diff --git a/docs/development/frontend/meta.json b/docs/development/frontend/meta.json
index 644b6a9..75513a8 100644
--- a/docs/development/frontend/meta.json
+++ b/docs/development/frontend/meta.json
@@ -2,7 +2,7 @@
"title": "Frontend Development",
"description": "Documentation for DeployStack Frontend Development",
"icon": "Monitor",
- "root": true,
+ "root": false,
"pages": [
"..."
]
diff --git a/docs/development/gateway/meta.json b/docs/development/gateway/meta.json
index b37fbce..f72ea6f 100644
--- a/docs/development/gateway/meta.json
+++ b/docs/development/gateway/meta.json
@@ -2,7 +2,7 @@
"title": "Gateway Development",
"description": "Documentation for DeployStack Gateway Development",
"icon": "Plug",
- "root": true,
+ "root": false,
"pages": [
"..."
]
diff --git a/docs/development/index.mdx b/docs/development/index.mdx
index 5af8b9e..aa4e461 100644
--- a/docs/development/index.mdx
+++ b/docs/development/index.mdx
@@ -1,6 +1,6 @@
---
title: Development Guide
-description: Complete development documentation for DeployStack - covering frontend, backend, and contribution guidelines for the MCP server deployment platform.
+description: Complete development documentation for DeployStack - covering frontend, backend, and contribution guidelines for the MCP server management platform.
icon: FileCode
---
@@ -9,13 +9,13 @@ import { Code2, Server, GitBranch, Users, Shield } from 'lucide-react';
# DeployStack Development
-Welcome to the DeployStack development documentation! DeployStack is a comprehensive enterprise platform for deploying and managing Model Context Protocol (MCP) servers, featuring a cloud control plane, local gateway proxy, and modern web interface for team-based MCP server orchestration.
+Welcome to the DeployStack development documentation! DeployStack is a comprehensive enterprise platform for managing Model Context Protocol (MCP) servers, featuring a cloud control plane, local gateway proxy, and modern web interface for team-based MCP server orchestration.
## Architecture Overview
DeployStack implements a sophisticated Control Plane / Data Plane architecture for enterprise MCP server management:
-- **Frontend**: Vue 3 + TypeScript web application providing the management interface for MCP server deployments
+- **Frontend**: Vue 3 + TypeScript web application providing the management interface for MCP server configurations
- **Backend**: Fastify-based cloud control plane handling authentication, team management, and configuration distribution
- **Gateway**: Local secure proxy that runs on developer machines, managing MCP server processes and credential injection
- **Shared**: Common utilities and TypeScript types used across all services
diff --git a/docs/development/meta.json b/docs/development/meta.json
index e7b4ccb..0176672 100644
--- a/docs/development/meta.json
+++ b/docs/development/meta.json
@@ -2,6 +2,7 @@
"title": "Development",
"description": "Development documentation for DeployStack",
"icon": "Code",
+ "root": false,
"pages": [
"index",
"---Sections---",
diff --git a/docs/meta.json b/docs/meta.json
index 224bbdc..4119dba 100644
--- a/docs/meta.json
+++ b/docs/meta.json
@@ -3,8 +3,11 @@
"description": "Documentation for DeployStack",
"icon": "DeployStackLogo",
"pages": [
+ "[DeployStackLogo][DeployStack](https://deploystack.io)",
+ "[MessageCircle][Discord](https://discord.com/invite/42Ce3S7b3b)",
"quick-start",
"---General---",
+ "architecture",
"teams",
"roles",
"onboard-new-team-members",
@@ -19,6 +22,17 @@
"github-application",
"github-oauth-setup",
"troubleshooting",
- "local-setup"
+ "local-setup",
+ "---Self Hosted---",
+ "self-hosted/quick-start",
+ "self-hosted/setup",
+ "self-hosted/docker-compose",
+ "self-hosted/upgrade-guide",
+ "self-hosted/database-setup",
+ "---Development---",
+ "development/index",
+ "development/frontend",
+ "development/backend",
+ "development/gateway"
]
}
\ No newline at end of file
diff --git a/docs/onboard-new-team-members.mdx b/docs/onboard-new-team-members.mdx
index 68a8460..0b86c56 100644
--- a/docs/onboard-new-team-members.mdx
+++ b/docs/onboard-new-team-members.mdx
@@ -1,8 +1,220 @@
---
title: Onboard New Team Members
-description: Step-by-step guide to onboard new team members to DeployStack, ensuring they have the necessary access and understanding of the platform.
+description: Step-by-step guide to onboard new team members to your DeployStack team and MCP server environment.
---
+import { Steps, Step } from 'fumadocs-ui/components/steps';
+
# Onboard New Team Members
-lorem ipsum
\ No newline at end of file
+This guide walks you through adding new developers to your existing DeployStack team. Before starting, ensure you already have:
+
+- A configured team with MCP servers set up
+- Team Administrator privileges
+- The new member's email address
+
+## Prerequisites
+
+Before inviting team members, make sure:
+
+- You have Team Administrator or Team Owner privileges
+- Your team MCP servers are properly configured and tested
+- You're not trying to add members to your default team (personal teams don't support additional members)
+
+## Step 1: New Member Account Setup
+
+The new team member needs to complete these steps first:
+
+
+
+ **Create DeployStack Account**
+
+ Go to [cloud.deploystack.io](https://cloud.deploystack.io) and create a new account:
+
+ - Sign up with their email address
+ - Complete email verification if required
+ - Complete the initial account setup
+
+
+
+ **Install DeployStack Gateway**
+
+ Install the gateway globally via npm:
+
+ ```bash
+ # Install the DeployStack Gateway globally
+ npm install -g @deploystack/gateway
+
+ # Verify installation
+ deploystack --version
+ ```
+
+
+
+ **Login to DeployStack**
+
+ Authenticate with your DeployStack account:
+
+ ```bash
+ # Login to DeployStack
+ deploystack login
+
+ # This will open a browser window for authentication
+ # Follow the prompts to complete login
+ ```
+
+
+
+ **Start the Gateway**
+
+ Start the gateway to initialize your environment:
+
+ ```bash
+ # Start the gateway
+ deploystack start
+
+ # Verify gateway is running
+ deploystack status
+ ```
+
+
+
+## Step 2: Invite Team Member
+
+### Add Member to Your Team
+
+1. **Navigate to Teams**: Go to your DeployStack dashboard and click on "Teams"
+2. **Select Your Team**: Find the team you want to add members to and click "Manage"
+3. **Add New Member**: Click "Add Member" and enter the new member's email address
+
+Read more about Roles: [Team Roles](/roles)
+
+## Step 3: Complete Team Setup
+
+After the team invitation is accepted, the new member needs to:
+
+
+
+ **Accept Team Invitation**
+
+ The new member should:
+
+ - Check their DeployStack dashboard for the team invitation
+ - Accept the invitation to join the team
+
+
+
+ **Switch to Team Context**
+
+ Join your team and access shared MCP servers:
+
+ ```bash
+ # List available teams
+ deploystack teams
+
+ # Switch to your team (replace with actual team number)
+ deploystack teams --switch 2
+
+ # Verify team context
+ deploystack status
+ ```
+
+
+
+ **Update MCP Configuration**
+
+ Replace your VS Code MCP configuration with the DeployStack Gateway:
+
+ **Before (Individual MCP Servers):**
+ ```json
+ {
+ "mcpServers": {
+ "brightdata": {
+ "command": "npx",
+ "args": ["@brightdata/mcp"],
+ "env": {
+ "API_TOKEN": "user-managed-token"
+ }
+ },
+ "github": {
+ "command": "npx",
+ "args": ["@github/mcp"],
+ "env": {
+ "GITHUB_TOKEN": "user-managed-token"
+ }
+ }
+ }
+ }
+ ```
+
+ **After (DeployStack Gateway):**
+ ```json
+ {
+ "mcpServers": {
+ "deploystack": {
+ "url": "http://localhost:9095/sse",
+ "name": "DeployStack Gateway",
+ "description": "Enterprise MCP Gateway with team-based access control"
+ }
+ }
+ }
+ ```
+
+
+
+## Step 4: Verify Team Access
+
+### Test MCP Tool Access
+
+```bash
+# List all available team MCP tools
+deploystack mcp
+
+# Verify gateway status with team context
+deploystack status --verbose
+```
+
+## Step 5: Test Team Access
+
+### Verify Team MCP Servers
+
+1. **Open VS Code**: Launch VS Code or restart if already open
+2. **Test MCP Connection**: Use Claude or MCP-compatible tools to verify access
+3. **Check Available Tools**: Confirm all team MCP servers are accessible
+4. **Test Credentials**: Verify that API calls work without manual credential setup
+
+### Confirm Team Resources
+
+- **Team MCP Servers**: Access to all configured team servers
+- **Shared Credentials**: Automatic credential injection (no manual setup required)
+- **Team Environment Variables**: Access to team-wide environment settings
+- **Process History**: View team's MCP server process logs
+
+## Step 6: Team Orientation
+
+### Brief New Members On
+
+**Available MCP Servers:**
+- Which servers are configured for the team
+- What each server is used for
+- Any usage guidelines or best practices
+
+**Team Workflows:**
+- How the team uses MCP tools in development
+- Any specific processes or conventions
+- Who to contact for technical support
+
+**Security Guidelines:**
+- Never manually manage API credentials (handled by DeployStack)
+- Always use the DeployStack Gateway for MCP access
+- Report any authentication or access issues immediately
+
+## Next Steps
+
+Once new team members are successfully onboarded:
+
+- **Share Team Documentation**: Provide any team-specific MCP usage guides
+- **Schedule Training**: Consider hands-on training for complex MCP workflows
+- **Gather Feedback**: Collect feedback on the onboarding process for improvements
+
+New team members should now have secure, credential-free access to all team MCP servers through the DeployStack Gateway, enabling them to be productive immediately without complex setup or credential management.
diff --git a/docs/quick-start.mdx b/docs/quick-start.mdx
index c486a77..8b7380e 100644
--- a/docs/quick-start.mdx
+++ b/docs/quick-start.mdx
@@ -1,6 +1,6 @@
---
title: Quick Start
-description: Get DeployStack running in minutes with Docker Compose or individual Docker containers.
+description: Get started with DeployStack in minutes - create your free account, set up MCP servers, and install the gateway locally.
sidebar: Quick Start
icon: Zap
---
@@ -11,315 +11,349 @@ import { Steps, Step } from 'fumadocs-ui/components/steps';
# Quick Start
-Get DeployStack up and running in minutes. Choose between our recommended Docker Compose setup or individual Docker containers for maximum flexibility.
+Get started with DeployStack in minutes. This guide walks you through creating a free account, configuring your first MCP server, and connecting your development environment.
-## Prerequisites
+## What You'll Accomplish
+
+By the end of this guide, you'll have:
+- A free DeployStack account with team management
+- Your first MCP server configured with secure credentials
+- The DeployStack Gateway running locally
+- VS Code connected to your team's MCP tools
-- **Docker**: [Install Docker](https://docs.docker.com/get-docker/)
-- **Docker Compose**: [Install Docker Compose](https://docs.docker.com/compose/install/)
-- **System Requirements**: 4GB RAM, 20GB disk space
+## Prerequisites
-## Method 1: Docker Compose (Recommended)
+- **Node.js**: [Install Node.js](https://nodejs.org/) (v18 or higher)
+- **VS Code or Cursor**: For MCP tool integration
+- **A few minutes**: This entire setup takes less than 5 minutes
-The fastest way to get DeployStack running with proper networking and persistence.
+## Step 1: Create Your Free Account
- **Download and Start**
+ **Sign Up for DeployStack**
- Run these two commands to get DeployStack running:
+ Visit [cloud.deploystack.io](https://cloud.deploystack.io) and create your free account:
- ```bash
- curl -o docker-compose.yml https://raw.githubusercontent.com/deploystackio/deploystack/main/docker-compose.yml
- DEPLOYSTACK_ENCRYPTION_SECRET=$(openssl rand -hex 16) docker-compose up -d
- ```
+ - Sign up with your email address or GitHub account
+ - Complete email verification if required
+ - You'll automatically get your own default team
+
+
+
+ **Explore Your Dashboard**
+
+ Once logged in, you'll see:
+ - **Teams**: Your personal default team (automatically created)
+ - **MCP Catalog**: Browse available MCP servers
+ - **Team Settings**: Manage your team and credentials
+
+
+
+## Step 2: Configure Your First MCP Server
+
+Let's set up a popular MCP server to get you started quickly.
+
+
+
+ **Browse the MCP Catalog**
+
+ 1. Navigate to the **MCP Catalog** in your dashboard
+ 2. Browse available MCP servers (GitHub, BrightData, Weather, etc.)
+ 3. Click on a server that interests you to see its details
- **Access DeployStack**
+ **Add an MCP Server to Your Team**
- Open your browser and navigate to:
- - **DeployStack Interface**: [http://localhost:8080](http://localhost:8080)
- - **Backend API**: [http://localhost:3000](http://localhost:3000)
+ For this example, let's add the GitHub MCP server:
+
+ 1. Find "GitHub MCP Server" in the catalog
+ 2. Click **"Add to Team"**
+ 3. Select your default team
+ 4. You'll be prompted to add credentials
- **Complete Setup**
+ **Configure Credentials**
+
+ Add your GitHub token securely:
- Follow the on-screen setup wizard to:
- - Create your admin account
- - Configure basic settings
- - Set up your first MCP Server
+ 1. **Create a GitHub Token**: Go to [GitHub Settings > Personal Access Tokens](https://github.com/settings/tokens)
+ 2. **Generate a new token** with appropriate permissions
+ 3. **Add to DeployStack**: Paste the token in the credentials field
+ 4. **Save**: Your credentials are encrypted and stored securely
-### Managing Your Installation
-
-```bash
-# View running services
-docker-compose ps
-
-# View logs
-docker-compose logs
-
-# Stop services
-docker-compose down
-
-# Start services
-docker-compose up -d
-
-# Update to latest version
-docker-compose pull && docker-compose up -d
-```
-
-## Method 2: Individual Docker Containers
+
+ **Security Note**: Your credentials are encrypted and never exposed to your local environment. The DeployStack Gateway injects them securely at runtime.
+
-For more control over the deployment, run frontend and backend containers separately.
+## Step 3: Install and Configure the Gateway
-### Step 1: Generate Encryption Secret
+The DeployStack Gateway runs locally and connects your development tools to your team's MCP servers.
-
-
+
+
+ **Install the Gateway**
+
+ Install the DeployStack Gateway globally via npm:
+
```bash
- # Generate a secure secret
- export DEPLOYSTACK_ENCRYPTION_SECRET=$(openssl rand -hex 16)
- echo "Your encryption secret: $DEPLOYSTACK_ENCRYPTION_SECRET"
+ npm install -g @deploystack/gateway
```
-
-
-
- ```powershell
- # Generate a secure secret
- $env:DEPLOYSTACK_ENCRYPTION_SECRET = -join ((1..32) | ForEach {'{0:X}' -f (Get-Random -Max 16)})
- Write-Host "Your encryption secret: $env:DEPLOYSTACK_ENCRYPTION_SECRET"
+
+ Verify the installation:
+
+ ```bash
+ deploystack --version
```
-
-
-
-
- **Save this secret!** You'll need it for upgrades and configuration changes.
-
-
-### Step 2: Start Backend Service
-
-```bash
-docker run -d \
- --name deploystack-backend \
- -p 3000:3000 \
- -e DEPLOYSTACK_FRONTEND_URL="http://localhost:8080" \
- -e DEPLOYSTACK_ENCRYPTION_SECRET="$DEPLOYSTACK_ENCRYPTION_SECRET" \
- -v deploystack_backend_persistent:/app/persistent_data \
- deploystack/backend:latest
-```
-
-### Step 3: Start Frontend Service
-
-```bash
-docker run -d \
- --name deploystack-frontend \
- -p 8080:80 \
- -e VITE_DEPLOYSTACK_BACKEND_URL="http://localhost:3000" \
- -e VITE_APP_TITLE="DeployStack" \
- deploystack/frontend:latest
-```
-
-### Step 4: Verify Installation
-
-```bash
-# Check if containers are running
-docker ps
-
-# Check backend health
-curl http://localhost:3000/
-
-# Access the interface
-open http://localhost:8080 # macOS
-# or visit http://localhost:8080 in your browser
-```
-
-## Production Deployment
-
-For production deployments on a server or VPS:
-
-### Update Environment Variables
-
-Replace `localhost` with your server's IP address or domain:
-
-
-
- Create a `.env` file:
+
+
+
+ **Login to DeployStack**
+
+ Authenticate with your DeployStack account:
```bash
- # .env file
- DEPLOYSTACK_ENCRYPTION_SECRET=your-generated-secret-here
- DEPLOYSTACK_FRONTEND_URL=http://YOUR_SERVER_IP:8080
- VITE_DEPLOYSTACK_BACKEND_URL=http://YOUR_SERVER_IP:3000
+ deploystack login
```
- Then start with:
+ This will:
+ - Open a browser window for authentication
+ - Download your team's MCP server configurations
+ - Set up secure credential access
+
+
+
+ **Start the Gateway**
+
+ Start the gateway to begin using your MCP servers:
+
```bash
- docker-compose up -d
+ deploystack start
```
-
+
+ The gateway will:
+ - Start all your configured MCP servers as background processes
+ - Expose them at `http://localhost:9095/sse`
+ - Inject credentials securely without exposing them to you
+
-
- Update the Docker run commands:
+
+ **Verify Gateway Status**
+
+ Check that everything is working:
```bash
- # Backend
- docker run -d \
- --name deploystack-backend \
- -p 3000:3000 \
- -e DEPLOYSTACK_FRONTEND_URL="http://YOUR_SERVER_IP:8080" \
- -e DEPLOYSTACK_ENCRYPTION_SECRET="your-secret-here" \
- -v deploystack_backend_persistent:/app/persistent_data \
- deploystack/backend:latest
-
- # Frontend
- docker run -d \
- --name deploystack-frontend \
- -p 8080:80 \
- -e VITE_DEPLOYSTACK_BACKEND_URL="http://YOUR_SERVER_IP:3000" \
- -e VITE_APP_TITLE="DeployStack Production" \
- deploystack/frontend:latest
+ deploystack status
```
-
-
-
-### Firewall Configuration
-
-Ensure your firewall allows traffic on the required ports:
-
-```bash
-# Ubuntu/Debian
-sudo ufw allow 3000 # Backend API
-sudo ufw allow 8080 # Frontend
-
-# CentOS/RHEL
-sudo firewall-cmd --permanent --add-port=3000/tcp
-sudo firewall-cmd --permanent --add-port=8080/tcp
-sudo firewall-cmd --reload
-```
-
-## Environment Variables Reference
-
-### Required Variables
+
+ You should see:
+ - Gateway status: Running
+ - Your team name
+ - List of available MCP servers
+
+
-| Variable | Description | Example |
-|----------|-------------|----------|
-| `DEPLOYSTACK_ENCRYPTION_SECRET` | 32-character secret for encrypting sensitive data | `a1b2c3d4e5f6789...` |
+## Step 4: Connect Your Development Environment
-### Optional Variables
+Now connect VS Code or Cursor to use your team's MCP servers.
-| Variable | Description | Default | Example |
-|----------|-------------|---------|----------|
-| `DEPLOYSTACK_FRONTEND_URL` | URL where frontend is accessible | `http://localhost:8080` | `https://deploystack.company.com` |
-| `VITE_DEPLOYSTACK_BACKEND_URL` | Backend API URL for frontend | `http://localhost:3000` | `https://api.deploystack.company.com` |
-| `VITE_APP_TITLE` | Custom application title | `DeployStack` | `Company DeployStack` |
+
+
+ **Configure VS Code MCP Settings**
+
+ Open your VS Code settings and configure MCP to use the DeployStack Gateway.
+
+ **Location**: `.vscode/settings.json` or global VS Code settings
+
+ **Before** (manual MCP server management):
+ ```json
+ {
+ "mcpServers": {
+ "github": {
+ "command": "npx",
+ "args": ["@github/mcp"],
+ "env": {
+ "GITHUB_TOKEN": "your-token-here"
+ }
+ }
+ }
+ }
+ ```
+
+ **After** (DeployStack Gateway):
+ ```json
+ {
+ "mcpServers": {
+ "deploystack": {
+ "url": "http://localhost:9095/sse",
+ "name": "DeployStack Gateway",
+ "description": "Enterprise MCP Gateway with team-based access control"
+ }
+ }
+ }
+ ```
+
+
+
+ **Test MCP Connection**
+
+ 1. **Restart VS Code** to load the new MCP configuration
+ 2. **Open Claude or compatible MCP client**
+ 3. **Test a tool**: Try using one of your configured MCP servers
+ 4. **Verify**: Tools should work without any manual credential setup
+
+
-## Next Steps
+## Step 5: Explore Your Setup
-Once DeployStack is running:
+Now that everything is connected, explore what you can do:
- **Complete Initial Setup**
+ **List Available Tools**
+
+ See all MCP tools available through your gateway:
- - Create your admin account
- - Configure global settings (email, authentication)
- - Set up user roles and permissions
+ ```bash
+ deploystack mcp
+ ```
+
+ This shows all tools from your team's MCP servers with their descriptions.
- **Deploy Your First MCP Server**
+ **Monitor Gateway Activity**
+
+ View real-time logs and activity:
- - Browse the MCP server catalog
- - Configure credentials and settings
- - Deploy to your preferred cloud provider
+ ```bash
+ deploystack logs
+ ```
+
+ This shows MCP server activity, tool usage, and any issues.
- **Explore Advanced Features**
+ **Manage Your Team**
- - Set up team collaboration
- - Create private MCP server catalogs
- - Configure CI/CD integrations
+ Back in the [DeployStack dashboard](https://cloud.deploystack.io):
+ - Add more MCP servers to your team
+ - Invite team members (if you have a team)
+ - Monitor usage and activity
+ - Manage credentials securely
-## Troubleshooting
+## Common Gateway Commands
-### Common Issues
+Here are the essential commands you'll use regularly:
-#### Port Conflicts
+```bash
+# Check gateway status
+deploystack status
-If ports 3000 or 8080 are already in use:
+# Start the gateway
+deploystack start
-```bash
-# Check what's using the ports
-lsof -i :3000
-lsof -i :8080
+# Stop the gateway
+deploystack stop
+
+# Restart the gateway
+deploystack restart
+
+# View logs
+deploystack logs
-# Use different ports
-docker run -p 3001:3000 ... # Backend on port 3001
-docker run -p 8081:80 ... # Frontend on port 8081
+# List available MCP tools
+deploystack mcp
+
+# Update configurations from cloud
+deploystack sync
+
+# Switch teams (if you have multiple)
+deploystack teams
```
-#### Services Won't Start
+## Multiple Teams
+
+If you're part of multiple teams or create additional teams:
```bash
-# Check container logs
-docker logs deploystack-backend
-docker logs deploystack-frontend
-
-# Check system resources
-docker stats
-df -h # Check disk space
-free -h # Check memory
+# List your teams
+deploystack teams
+
+# Switch to a specific team
+deploystack teams --switch 2
+
+# Check current team context
+deploystack status
```
-#### Can't Access the Interface
+When you switch teams, the gateway automatically:
+- Downloads new team configurations
+- Starts the new team's MCP servers
+- Stops the previous team's servers
+- Updates available tools
-1. **Check if services are running**:
- ```bash
- docker ps
- curl http://localhost:3000/
- ```
+## What's Next?
-2. **Check firewall settings**:
- ```bash
- # Test local connectivity
- telnet localhost 8080
- telnet localhost 3000
- ```
+### Add More MCP Servers
-3. **Check environment variables**:
- ```bash
- docker inspect deploystack-frontend | grep -A 10 Env
- docker inspect deploystack-backend | grep -A 10 Env
- ```
+Expand your toolkit by adding more MCP servers:
+- **BrightData**: Web scraping and data collection
+- **Weather**: Weather information and forecasts
+- **Database**: Connect to your databases
+- **Custom Servers**: Add your own private MCP servers
-### Getting Help
+### Team Collaboration
-If you need assistance:
+If you're working with a team:
+- **[Invite Team Members](/onboard-new-team-members)**: Add developers to your team
+- **[Manage Roles](/roles)**: Set up proper access control
+- **[Team Management](/teams)**: Organize multiple projects
-- **Community**: Join our [Discord](https://discord.gg/UjFWwByB)
-- **Issues**: Report problems on [GitHub](https://github.com/deploystackio/deploystack/issues)
-- **Support**: Contact us for enterprise support options
+## Troubleshooting
-## What's Next?
+### Gateway Won't Start
+
+```bash
+# Check if you're logged in
+deploystack status
-### Learn More
+# Re-login if needed
+deploystack login
-- **[Self-Hosted Documentation](/self-hosted)**: Comprehensive deployment guides
-- **[Local Development](/local-setup)**: Set up development environment
-- **[Global Settings](/global-settings)**: Configure email, auth, and more
-- **[User Roles](/roles)**: Manage team permissions
+# Check for port conflicts
+lsof -i :9095
+```
+
+### MCP Tools Not Working
+
+1. **Check gateway status**:
+ ```bash
+ deploystack status
+ ```
+
+2. **Verify VS Code configuration**:
+ - Ensure the MCP server URL is `http://localhost:9095/sse`
+ - Restart VS Code after configuration changes
-### Deploy MCP Servers
+3. **Check credentials**:
+ - Verify credentials are properly configured in your dashboard
+ - Test credentials directly in the DeployStack interface
-- **[MCP Server Catalog](https://deploystack.io/mcp)**: Browse available servers
+### Need Help?
+
+- **Community**: Join our [Discord](https://discord.gg/42Ce3S7b3b)
+- **Documentation**: Browse our [full documentation](/)
+- **Support**: Contact support for technical issues
---
-**🎉 Congratulations!** You now have DeployStack running. Start deploying MCP servers and streamline your AI agent infrastructure!
+**🎉 Congratulations!** You now have DeployStack configured and running. Your development environment is connected to enterprise-grade MCP management with secure credential handling and team collaboration features.
+
+**Next Steps**: Explore the [MCP Catalog](https://cloud.deploystack.io) to add more tools to your team, or invite colleagues to collaborate on your projects.
diff --git a/docs/roles.mdx b/docs/roles.mdx
index 2c96f77..6e053e0 100644
--- a/docs/roles.mdx
+++ b/docs/roles.mdx
@@ -22,22 +22,22 @@ User roles determine what actions a person can perform in DeployStack. Think of
- Manage roles and permissions
- Access all system features
- Manage all teams
-- View cloud credentials metadata across all teams (no credential values shown)
+- View MCP server credentials metadata across all teams (no credential values shown)
- **MCP Catalog**: Full management of global MCP servers and categories
- **MCP Oversight**: View all team MCP servers across the platform (read-only)
**Important**: The first person to register automatically becomes a Global Administrator.
-**Note**: Global Administrators can see that teams have cloud credentials but cannot view the actual credential values for security reasons.
+**Note**: Global Administrators can see that teams have MCP server credentials but cannot view the actual credential values for security reasons.
### Global User
-**Who needs this**: Regular users who want to deploy applications.
+**Who needs this**: Regular users who want to configure MCP servers.
**What they can do**:
- View and edit their own profile
-- Create up to 3 teams
+- Create multiple teams
- Manage their own teams
-- Deploy applications through their teams
+- Configure MCP servers through their teams
- **MCP Catalog**: Browse and view global MCP servers only
**Note**: This is the default role for new users.
@@ -48,11 +48,11 @@ User roles determine what actions a person can perform in DeployStack. Think of
**What they can do**:
- Manage their team's settings
- View team members
-- **Add new members to their teams** (up to 3 members total)
+- **Add new members to their teams**
- **Change member roles** (promote team_user to team_admin, or demote)
- **Remove team members** (except team owners)
- **Transfer team ownership** to another team member
-- Manage team deployments
+- Manage team MCP server configurations
- Delete teams they own (except default teams)
- **MCP Catalog**: View global servers + full management of team MCP servers
@@ -79,7 +79,6 @@ The following table shows exactly what each role can do with team member managem
- **Team admins** can only manage team_users, not other team_admins or owners
- **Team owners** have full control over their teams (except default teams)
- **Global admins** can override most restrictions but still cannot modify default teams
-- **3-member limit** applies to all teams (owner + 2 additional members maximum)
## MCP Catalog Permissions
@@ -100,7 +99,7 @@ The MCP (Model Context Protocol) Catalog has specific permissions based on your
- **Team Isolation**: Teams can only manage their own servers, not other teams' servers
### Team User
-**Who needs this**: Basic team members who participate in deployments.
+**Who needs this**: Basic team members who participate in MCP server configuration.
**What they can do**:
- View team information
@@ -112,13 +111,13 @@ The MCP (Model Context Protocol) Catalog has specific permissions based on your
## Understanding Teams
-Teams are groups where users organize their deployment projects. Here's how teams work:
+Teams are groups where users organize their MCP server configurations. Here's how teams work:
### Team Basics
-- **Automatic Team**: Every user gets their own team when they register
-- **Team Limit**: Users can create up to 3 teams total
+- **Automatic Team**: Every user gets their own default team when they register
+- **Multi-User Support**: Teams support multiple members with role-based access control
- **Team Owner**: The person who created the team has full control
-- **Single User Teams**: Currently, each team has one user (multi-user teams coming soon)
+- **Default Team Protection**: Your personal default team cannot have additional members added
### Team Management
- **Create Teams**: Use descriptive names for your different projects
@@ -134,13 +133,13 @@ Teams are groups where users organize their deployment projects. Here's how team
### Small Team
- **Administrator**: One person manages the system and users
-- **Team Members**: Everyone else is a Global User with their own teams
-- **Collaboration**: Users can share deployment information outside the system
+- **Team Members**: Everyone else is a Global User who can join teams
+- **Collaboration**: Users can collaborate within shared teams
### Organization
- **System Admin**: Global Administrator manages the DeployStack installation
- **Project Leads**: Team Administrators manage specific project teams
-- **Developers**: Global Users participate in deployments
+- **Developers**: Global Users participate in team configurations
## Managing User Roles
@@ -183,8 +182,7 @@ All users can:
- **Delete teams**: Remove teams you no longer need
### Team Limitations
-- **3 Team Maximum**: You can only create 3 teams total
-- **One User per Team**: Teams currently support single users
+- **Default Team Protection**: Your personal default team cannot have additional members
- **Owner Control**: Only team owners can modify team settings
## Security and Access Control
@@ -209,7 +207,7 @@ All users can:
### Can't Create Teams
**Problem**: "Create Team button is disabled"
-**Solution**: You may have reached the 3-team limit. Delete unused teams or contact your administrator.
+**Solution**: Contact your administrator if you're unable to create teams.
### Can't Change Role
**Problem**: "I want to be an administrator"
diff --git a/docs/self-hosted/database-setup.mdx b/docs/self-hosted/database-setup.mdx
index b79122c..5758585 100644
--- a/docs/self-hosted/database-setup.mdx
+++ b/docs/self-hosted/database-setup.mdx
@@ -1,6 +1,8 @@
---
title: Database Setup for Self-Hosting
description: Step-by-step guide to configure your database when self-hosting DeployStack - designed for non-technical users.
+Sidebar: Database Setup
+Icon: Database
---
# Database Setup for Self-Hosting
diff --git a/docs/self-hosted/meta.json b/docs/self-hosted/meta.json
index 1eed4b1..af1e00a 100644
--- a/docs/self-hosted/meta.json
+++ b/docs/self-hosted/meta.json
@@ -1,8 +1,5 @@
{
"title": "Self Hosted",
"description": "Self-hosted DeployStack",
- "icon": "DeployStackLogo",
- "pages": [
- "..."
- ]
+ "root": false
}
diff --git a/docs/self-hosted/quick-start.mdx b/docs/self-hosted/quick-start.mdx
new file mode 100644
index 0000000..c486a77
--- /dev/null
+++ b/docs/self-hosted/quick-start.mdx
@@ -0,0 +1,325 @@
+---
+title: Quick Start
+description: Get DeployStack running in minutes with Docker Compose or individual Docker containers.
+sidebar: Quick Start
+icon: Zap
+---
+
+import { Callout } from 'fumadocs-ui/components/callout';
+import { Tabs, Tab } from 'fumadocs-ui/components/tabs';
+import { Steps, Step } from 'fumadocs-ui/components/steps';
+
+# Quick Start
+
+Get DeployStack up and running in minutes. Choose between our recommended Docker Compose setup or individual Docker containers for maximum flexibility.
+
+## Prerequisites
+
+- **Docker**: [Install Docker](https://docs.docker.com/get-docker/)
+- **Docker Compose**: [Install Docker Compose](https://docs.docker.com/compose/install/)
+- **System Requirements**: 4GB RAM, 20GB disk space
+
+## Method 1: Docker Compose (Recommended)
+
+The fastest way to get DeployStack running with proper networking and persistence.
+
+
+
+ **Download and Start**
+
+ Run these two commands to get DeployStack running:
+
+ ```bash
+ curl -o docker-compose.yml https://raw.githubusercontent.com/deploystackio/deploystack/main/docker-compose.yml
+ DEPLOYSTACK_ENCRYPTION_SECRET=$(openssl rand -hex 16) docker-compose up -d
+ ```
+
+
+
+ **Access DeployStack**
+
+ Open your browser and navigate to:
+ - **DeployStack Interface**: [http://localhost:8080](http://localhost:8080)
+ - **Backend API**: [http://localhost:3000](http://localhost:3000)
+
+
+
+ **Complete Setup**
+
+ Follow the on-screen setup wizard to:
+ - Create your admin account
+ - Configure basic settings
+ - Set up your first MCP Server
+
+
+
+### Managing Your Installation
+
+```bash
+# View running services
+docker-compose ps
+
+# View logs
+docker-compose logs
+
+# Stop services
+docker-compose down
+
+# Start services
+docker-compose up -d
+
+# Update to latest version
+docker-compose pull && docker-compose up -d
+```
+
+## Method 2: Individual Docker Containers
+
+For more control over the deployment, run frontend and backend containers separately.
+
+### Step 1: Generate Encryption Secret
+
+
+
+ ```bash
+ # Generate a secure secret
+ export DEPLOYSTACK_ENCRYPTION_SECRET=$(openssl rand -hex 16)
+ echo "Your encryption secret: $DEPLOYSTACK_ENCRYPTION_SECRET"
+ ```
+
+
+
+ ```powershell
+ # Generate a secure secret
+ $env:DEPLOYSTACK_ENCRYPTION_SECRET = -join ((1..32) | ForEach {'{0:X}' -f (Get-Random -Max 16)})
+ Write-Host "Your encryption secret: $env:DEPLOYSTACK_ENCRYPTION_SECRET"
+ ```
+
+
+
+
+ **Save this secret!** You'll need it for upgrades and configuration changes.
+
+
+### Step 2: Start Backend Service
+
+```bash
+docker run -d \
+ --name deploystack-backend \
+ -p 3000:3000 \
+ -e DEPLOYSTACK_FRONTEND_URL="http://localhost:8080" \
+ -e DEPLOYSTACK_ENCRYPTION_SECRET="$DEPLOYSTACK_ENCRYPTION_SECRET" \
+ -v deploystack_backend_persistent:/app/persistent_data \
+ deploystack/backend:latest
+```
+
+### Step 3: Start Frontend Service
+
+```bash
+docker run -d \
+ --name deploystack-frontend \
+ -p 8080:80 \
+ -e VITE_DEPLOYSTACK_BACKEND_URL="http://localhost:3000" \
+ -e VITE_APP_TITLE="DeployStack" \
+ deploystack/frontend:latest
+```
+
+### Step 4: Verify Installation
+
+```bash
+# Check if containers are running
+docker ps
+
+# Check backend health
+curl http://localhost:3000/
+
+# Access the interface
+open http://localhost:8080 # macOS
+# or visit http://localhost:8080 in your browser
+```
+
+## Production Deployment
+
+For production deployments on a server or VPS:
+
+### Update Environment Variables
+
+Replace `localhost` with your server's IP address or domain:
+
+
+
+ Create a `.env` file:
+
+ ```bash
+ # .env file
+ DEPLOYSTACK_ENCRYPTION_SECRET=your-generated-secret-here
+ DEPLOYSTACK_FRONTEND_URL=http://YOUR_SERVER_IP:8080
+ VITE_DEPLOYSTACK_BACKEND_URL=http://YOUR_SERVER_IP:3000
+ ```
+
+ Then start with:
+ ```bash
+ docker-compose up -d
+ ```
+
+
+
+ Update the Docker run commands:
+
+ ```bash
+ # Backend
+ docker run -d \
+ --name deploystack-backend \
+ -p 3000:3000 \
+ -e DEPLOYSTACK_FRONTEND_URL="http://YOUR_SERVER_IP:8080" \
+ -e DEPLOYSTACK_ENCRYPTION_SECRET="your-secret-here" \
+ -v deploystack_backend_persistent:/app/persistent_data \
+ deploystack/backend:latest
+
+ # Frontend
+ docker run -d \
+ --name deploystack-frontend \
+ -p 8080:80 \
+ -e VITE_DEPLOYSTACK_BACKEND_URL="http://YOUR_SERVER_IP:3000" \
+ -e VITE_APP_TITLE="DeployStack Production" \
+ deploystack/frontend:latest
+ ```
+
+
+
+### Firewall Configuration
+
+Ensure your firewall allows traffic on the required ports:
+
+```bash
+# Ubuntu/Debian
+sudo ufw allow 3000 # Backend API
+sudo ufw allow 8080 # Frontend
+
+# CentOS/RHEL
+sudo firewall-cmd --permanent --add-port=3000/tcp
+sudo firewall-cmd --permanent --add-port=8080/tcp
+sudo firewall-cmd --reload
+```
+
+## Environment Variables Reference
+
+### Required Variables
+
+| Variable | Description | Example |
+|----------|-------------|----------|
+| `DEPLOYSTACK_ENCRYPTION_SECRET` | 32-character secret for encrypting sensitive data | `a1b2c3d4e5f6789...` |
+
+### Optional Variables
+
+| Variable | Description | Default | Example |
+|----------|-------------|---------|----------|
+| `DEPLOYSTACK_FRONTEND_URL` | URL where frontend is accessible | `http://localhost:8080` | `https://deploystack.company.com` |
+| `VITE_DEPLOYSTACK_BACKEND_URL` | Backend API URL for frontend | `http://localhost:3000` | `https://api.deploystack.company.com` |
+| `VITE_APP_TITLE` | Custom application title | `DeployStack` | `Company DeployStack` |
+
+## Next Steps
+
+Once DeployStack is running:
+
+
+
+ **Complete Initial Setup**
+
+ - Create your admin account
+ - Configure global settings (email, authentication)
+ - Set up user roles and permissions
+
+
+
+ **Deploy Your First MCP Server**
+
+ - Browse the MCP server catalog
+ - Configure credentials and settings
+ - Deploy to your preferred cloud provider
+
+
+
+ **Explore Advanced Features**
+
+ - Set up team collaboration
+ - Create private MCP server catalogs
+ - Configure CI/CD integrations
+
+
+
+## Troubleshooting
+
+### Common Issues
+
+#### Port Conflicts
+
+If ports 3000 or 8080 are already in use:
+
+```bash
+# Check what's using the ports
+lsof -i :3000
+lsof -i :8080
+
+# Use different ports
+docker run -p 3001:3000 ... # Backend on port 3001
+docker run -p 8081:80 ... # Frontend on port 8081
+```
+
+#### Services Won't Start
+
+```bash
+# Check container logs
+docker logs deploystack-backend
+docker logs deploystack-frontend
+
+# Check system resources
+docker stats
+df -h # Check disk space
+free -h # Check memory
+```
+
+#### Can't Access the Interface
+
+1. **Check if services are running**:
+ ```bash
+ docker ps
+ curl http://localhost:3000/
+ ```
+
+2. **Check firewall settings**:
+ ```bash
+ # Test local connectivity
+ telnet localhost 8080
+ telnet localhost 3000
+ ```
+
+3. **Check environment variables**:
+ ```bash
+ docker inspect deploystack-frontend | grep -A 10 Env
+ docker inspect deploystack-backend | grep -A 10 Env
+ ```
+
+### Getting Help
+
+If you need assistance:
+
+- **Community**: Join our [Discord](https://discord.gg/UjFWwByB)
+- **Issues**: Report problems on [GitHub](https://github.com/deploystackio/deploystack/issues)
+- **Support**: Contact us for enterprise support options
+
+## What's Next?
+
+### Learn More
+
+- **[Self-Hosted Documentation](/self-hosted)**: Comprehensive deployment guides
+- **[Local Development](/local-setup)**: Set up development environment
+- **[Global Settings](/global-settings)**: Configure email, auth, and more
+- **[User Roles](/roles)**: Manage team permissions
+
+### Deploy MCP Servers
+
+- **[MCP Server Catalog](https://deploystack.io/mcp)**: Browse available servers
+
+---
+
+**🎉 Congratulations!** You now have DeployStack running. Start deploying MCP servers and streamline your AI agent infrastructure!
diff --git a/docs/teams.mdx b/docs/teams.mdx
index fb0c8c2..7fbe20a 100644
--- a/docs/teams.mdx
+++ b/docs/teams.mdx
@@ -1,25 +1,25 @@
---
title: Teams Structure in DeployStack
-description: Organize your MCP server deployments with teams - your workspace for managing servers, credentials, and environment variables in DeployStack.
+description: Organize your MCP server management with teams - your workspace for managing servers, credentials, and environment variables in DeployStack.
sidebar: Teams
---
# Teams
-Teams are the organizational foundation of DeployStack, serving as dedicated workspaces where you manage all your MCP server deployments, cloud provider credentials, and environment variables. Think of teams as isolated containers that keep your deployment resources organized and secure.
+Teams are the organizational foundation of DeployStack, serving as dedicated workspaces where you manage all your MCP server configurations, cloud provider credentials, and environment variables. Think of teams as isolated containers that keep your team resources organized and secure.
## Overview
In DeployStack, teams provide:
-- **Isolated Workspaces**: Each team maintains its own separate environment for deployments
+- **Isolated Workspaces**: Each team maintains its own separate environment for MCP server management
- **Resource Organization**: All your MCP servers, credentials, and settings are organized within teams
-- **Access Control**: Team-based permissions ensure secure access to your deployment resources
-- **Multi-Project Support**: Create up to 3 teams to organize different projects or environments
+- **Access Control**: Team-based permissions ensure secure access to your team resources
+- **Multi-Project Support**: Create multiple teams to organize different projects or environments
- **Team Collaboration**: Teams support multiple members with role-based access control
- **Default Team Protection**: Your personal default team cannot have additional members added
-Every team acts as a complete deployment environment, containing everything needed to deploy and manage MCP servers across various cloud providers.
+Every team acts as a complete team environment, containing everything needed to configure and manage MCP servers through the DeployStack Gateway.
## Getting Started with Teams
@@ -32,35 +32,35 @@ When you register for DeployStack, a default team is automatically created for y
- **Description**: Automatically set as "[username]'s team"
- **Role**: You become the Team Administrator with full control
-This default team is immediately ready for use - you can start deploying MCP servers right away.
+This default team is immediately ready for use - you can start configuring MCP servers right away.
-### Team Limits
+### Additional Teams
-Each user can create and manage up to **3 teams total**, including your default team. This means you can create 2 additional teams beyond your automatically created default team.
+You can create additional teams beyond your automatically created default team to organize different projects or environments.
## What Teams Contain
-Teams serve as comprehensive containers for all your deployment resources:
+Teams serve as comprehensive containers for all your team resources:
### MCP Server Settings
- **Team MCP Servers**: Private MCP servers visible only to your team members
-- **Global MCP Server Access**: Browse and deploy community-wide MCP servers
+- **Global MCP Server Access**: Browse and use community-wide MCP servers
- **Server Management**: Team administrators can create, edit, and delete team servers
- **Version Control**: Track different versions of your team's MCP servers
- **GitHub Integration**: Automatic synchronization with GitHub repositories (see [GitHub App Integration Guide](/github-application))
- **Custom Configurations**: Team-specific server settings and parameters
-- **Deployment History**: Complete logs and monitoring data for team deployments
+- **Process History**: Complete logs and monitoring data for team MCP servers
-### Cloud Provider Credentials
-- **local MCP Servers**: Credentials for local MCP environments
-- **Google Cloud**: API tokens and service configurations
+### MCP Server Credentials
+- **API Keys and Tokens**: Secure storage for MCP server authentication
+- **Service Credentials**: Authentication tokens for various MCP server integrations
### Global Environment Variables
- **Node.js Environment Variables**: Custom env vars for Node.js-based MCP servers
- **Reusable Variables**: Environment variables that can be applied across multiple servers
- **Secure Storage**: All environment variables are encrypted and securely stored
-These global environment variables allow you to define common settings once and apply them to multiple MCP servers within the same team, streamlining your deployment process.
+These global environment variables allow you to define common settings once and apply them to multiple MCP servers within the same team, streamlining your MCP server management.
## Team Management
@@ -94,7 +94,7 @@ To create a new team:
3. Provide a team name and optional description
4. The system automatically generates a unique URL-friendly slug
-**Note**: You can only create teams if you haven't reached the 3-team limit.
+
### Editing Team Details
@@ -141,7 +141,6 @@ The interface provides clear visual feedback:
DeployStack teams support **multi-user collaboration** with role-based access control:
-- Teams can have up to **3 members maximum**
- Each team has one **owner** who created the team
- Team members can have different roles with specific permissions
- **Default teams are personal** - no additional members can be added to your default team
@@ -152,7 +151,7 @@ Teams support two distinct roles with different capabilities:
#### Team Administrator
- **Full team management**: Can add/remove members, change roles, transfer ownership
-- **Resource access**: Full access to all team resources and deployments
+- **Resource access**: Full access to all team resources and MCP servers
- **Team settings**: Can modify team name, description, and all configurations
- **Member management**: Can promote team users to admins or demote admins to users
@@ -176,7 +175,6 @@ Team administrators can add new members to their teams (except default teams):
5. **Send Invitation**: The user will be notified and added to the team
**Limitations**:
-- **Maximum 3 members** per team (including the owner)
- **Default teams**: Cannot add members to your personal default team
- **Existing users only**: Can only add users who already have DeployStack accounts
@@ -233,7 +231,7 @@ These restrictions ensure that every user always has a personal, private team fo
Each team maintains complete isolation:
-- **Separate Credentials**: Cloud provider credentials are team-specific
+- **Separate Credentials**: MCP server credentials are team-specific
- **Independent Servers**: MCP servers in one team don't affect others
- **Isolated Variables**: Environment variables are scoped to individual teams
- **Secure Boundaries**: No cross-team access to resources
@@ -255,7 +253,7 @@ Each team maintains complete isolation:
#### Deleting a Team (Non-Default Only)
-1. **Prepare the Team**: Remove all MCP servers and configurations
+1. **Prepare the Team**: Remove all MCP server configurations
2. **Access Management**: Click "Manage" on the team you want to delete
3. **Find Danger Zone**: Scroll down to the "Danger Zone" section
4. **Click Delete**: Click the "Delete Team" button
@@ -267,7 +265,7 @@ Each team maintains complete isolation:
- **Default Team Badge**: Your original team shows a "Default Team" badge
- **Lock Icons**: Indicate fields that cannot be edited
-- **Member Count**: Shows how many users are in each team (currently always 1)
+- **Member Count**: Shows how many users are in each team
- **Last Updated**: Displays when the team was last modified
### Switching Between Teams
@@ -285,9 +283,9 @@ For each team, you can:
- **Update Team Name**: Modify the display name
- **Edit Description**: Change or add team descriptions
-- **Manage Credentials**: Add, update, or remove cloud provider credentials
+- **Manage Credentials**: Add, update, or remove MCP server credentials
- **Configure Variables**: Set up global environment variables
-- **Monitor Deployments**: View all MCP servers and their status
+- **Monitor MCP Servers**: View all MCP servers and their status
### Understanding Team Slugs
@@ -314,7 +312,7 @@ Team slugs serve as unique identifiers:
For non-default teams, multiple safety measures protect against accidental deletion:
-1. **Active Server Check**: Teams with active MCP servers **cannot be deleted**
+1. **Active Server Check**: Teams with configured MCP servers **cannot be deleted**
2. **Confirmation Dialog**: A modal dialog requires explicit confirmation
3. **Clear Warning**: The interface clearly explains the consequences
4. **Two-Step Process**: You must first remove all servers, then confirm deletion
@@ -323,7 +321,7 @@ For non-default teams, multiple safety measures protect against accidental delet
To delete a non-default team, you must:
-1. **Stop All Running MCP Servers**: Ensure no servers are currently deployed or running
+1. **Stop All Running MCP Servers**: Ensure no servers are currently configured or running
2. **Remove All Server Configurations**: Delete all MCP server settings and configurations
3. **Access Danger Zone**: Navigate to the "Danger Zone" section in team management
4. **Confirm Deletion**: Click delete and confirm in the popup dialog
@@ -332,10 +330,10 @@ To delete a non-default team, you must:
When you delete a team, you lose **everything** associated with it:
-- **All MCP Server Settings**: Complete server configurations and deployment history
-- **All Cloud Provider Credentials**: Stored API keys, tokens, and authentication data
+- **All MCP Server Settings**: Complete server configurations and process history
+- **All MCP Server Credentials**: Stored API keys, tokens, and authentication data
- **All Global Environment Variables**: Custom environment settings and variables
-- **Complete Deployment History**: Logs, monitoring data, and historical information
+- **Complete Process History**: Logs, monitoring data, and historical information
### No Recovery Options
@@ -364,16 +362,16 @@ Global administrators have enhanced visibility into all teams across the system:
- **`teams.delete`**: Delete teams (after removing all servers)
- **`teams.manage`**: Full team management capabilities
-### Deployment Capabilities
+### MCP Server Management Capabilities
Your team role affects your ability to:
-- Deploy new MCP servers
+- Configure new MCP servers
- Modify server configurations
-- Manage cloud provider credentials
+- Manage MCP server credentials
- Set up environment variables
-- Monitor deployment status
-- Access deployment logs
+- Monitor MCP server status
+- Access process logs
## Getting the Most from Teams
@@ -387,9 +385,9 @@ Consider creating separate teams for:
Within each team:
-- **Group Related Servers**: Deploy related MCP servers in the same team
-- **Shared Credentials**: Use the same cloud provider credentials across servers
+- **Group Related Servers**: Configure related MCP servers in the same team
+- **Shared Credentials**: Use the same MCP server credentials across servers
- **Common Variables**: Leverage global environment variables for consistency
- **Logical Organization**: Use descriptive names and descriptions
-Teams provide the foundation for organized, secure, and efficient MCP server deployment in DeployStack. By understanding how teams work, you can effectively manage your deployment resources and maintain clean separation between different projects and environments.
+Teams provide the foundation for organized, secure, and efficient MCP server management in DeployStack. By understanding how teams work, you can effectively manage your team resources and maintain clean separation between different projects and environments.
diff --git a/lib/components/DeployStackLogo.tsx b/lib/components/DeployStackLogo.tsx
index ff812c1..5b009e3 100644
--- a/lib/components/DeployStackLogo.tsx
+++ b/lib/components/DeployStackLogo.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import Image from 'next/image';
-export const DeployStackLogo: React.FC<{ className?: string }> = ({ className = "w-6 h-6" }) => {
+export const DeployStackLogo: React.FC<{ className?: string }> = ({ className = "w-4 h-4" }) => {
return (
{
- const path = doc._file.path;
- return !path.startsWith('development/') && !path.startsWith('self-hosted/');
-});
-
-const mainMeta = allMeta.filter((meta: any) => {
- const path = meta._file.path;
- return !path.startsWith('development/') && !path.startsWith('self-hosted/');
-});
+// Main docs (include all files for complete control via meta.json)
+const mainDocs = allDocs; // Include everything
-// Development docs - keep the full path
-const developmentDocs = allDocs.filter((doc: any) =>
- doc._file.path.startsWith('development/')
-);
+const mainMeta = allMeta; // Include everything
-const developmentMeta = allMeta.filter((meta: any) =>
- meta._file.path.startsWith('development/')
-);
+// Development docs are now included in mainSource
-// Self-hosted docs - keep the full path
-const selfHostedDocs = allDocs.filter((doc: any) =>
- doc._file.path.startsWith('self-hosted/')
-);
+// Self-hosted docs are now included in mainSource
-const selfHostedMeta = allMeta.filter((meta: any) =>
- meta._file.path.startsWith('self-hosted/')
-);
-
-// Create separate sources for each section
+// Create main source with all content
export const mainSource = loader({
baseUrl: '/',
source: createMDXSource(mainDocs, mainMeta),
icon: createIconHandler(),
});
-// For development and self-hosted, we keep the full path structure
-export const developmentSource = loader({
- baseUrl: '/', // Changed from '/development' to '/'
- source: createMDXSource(developmentDocs, developmentMeta),
- icon: createIconHandler(),
-});
+// developmentSource removed - development content is now in mainSource
-export const selfHostedSource = loader({
- baseUrl: '/', // Changed from '/self-hosted' to '/'
- source: createMDXSource(selfHostedDocs, selfHostedMeta),
- icon: createIconHandler(),
-});
+// selfHostedSource removed - self-hosted content is now in mainSource
// Unified source for backward compatibility and dynamic usage
export const source = {
getPage(slug?: string[], locale?: string) {
- if (!slug || slug.length === 0) return mainSource.getPage(slug, locale);
-
- const firstSegment = slug[0];
-
- // For development section, use the full slug path
- if (firstSegment === 'development') {
- return developmentSource.getPage(slug, locale);
- }
-
- // For self-hosted section, use the full slug path
- if (firstSegment === 'self-hosted') {
- return selfHostedSource.getPage(slug, locale);
- }
-
- // For main docs, use as-is
return mainSource.getPage(slug, locale);
},
getPages(locale?: string) {
- return [
- ...mainSource.getPages(locale),
- ...developmentSource.getPages(locale),
- ...selfHostedSource.getPages(locale),
- ];
+ return mainSource.getPages(locale);
},
generateParams() {
- // Get params from all sources
- const mainParams = mainSource.generateParams();
- const devParams = developmentSource.generateParams();
- const selfParams = selfHostedSource.generateParams();
-
- return [
- ...mainParams,
- ...devParams,
- ...selfParams,
- ];
+ return mainSource.generateParams();
},
// Get appropriate page tree based on current path
getPageTree(path?: string) {
- if (path?.startsWith('/development')) return developmentSource.pageTree;
- if (path?.startsWith('/self-hosted')) return selfHostedSource.pageTree;
return mainSource.pageTree;
},
- // Default page tree for compatibility
- pageTree: mainSource.pageTree,
+ // Return the main page tree directly
+ get pageTree() {
+ return mainSource.pageTree;
+ },
};
diff --git a/lib/structured-data.ts b/lib/structured-data.ts
new file mode 100644
index 0000000..b8e5854
--- /dev/null
+++ b/lib/structured-data.ts
@@ -0,0 +1,178 @@
+import type { WithContext, WebSite, Organization, TechArticle, BreadcrumbList } from 'schema-dts';
+
+// Base organization data for DeployStack
+const DEPLOYSTACK_ORG: WithContext = {
+ '@context': 'https://schema.org',
+ '@type': 'Organization',
+ name: 'DeployStack',
+ url: 'https://deploystack.io',
+ logo: 'https://deploystack.io/logo-deploystack.png',
+ description: 'The Complete MCP Management Platform',
+ sameAs: [
+ 'https://github.com/deploystackio',
+ ],
+};
+
+// Website schema for the documentation site
+export function generateWebSiteSchema(): WithContext {
+ return {
+ '@context': 'https://schema.org',
+ '@type': 'WebSite',
+ name: 'DeployStack Documentation',
+ description: 'Complete documentation for DeployStack - The MCP Management Platform',
+ url: 'https://docs.deploystack.io',
+ publisher: {
+ '@type': 'Organization',
+ name: 'DeployStack',
+ url: 'https://deploystack.io',
+ },
+ inLanguage: 'en',
+ potentialAction: {
+ '@type': 'SearchAction',
+ target: {
+ '@type': 'EntryPoint',
+ urlTemplate: 'https://docs.deploystack.io?search={search_term_string}',
+ },
+ 'query-input': 'required name=search_term_string',
+ } as any,
+ };
+}
+
+// Organization schema
+export function generateOrganizationSchema(): WithContext {
+ return DEPLOYSTACK_ORG;
+}
+
+// Generate breadcrumb schema from slug path
+export function generateBreadcrumbSchema(slug: string[]): WithContext {
+ const items = [
+ {
+ '@type': 'ListItem' as const,
+ position: 1,
+ name: 'Documentation',
+ item: 'https://docs.deploystack.io/',
+ },
+ ];
+
+ let currentPath = '';
+ slug.forEach((segment, index) => {
+ currentPath += `/${segment}`;
+ items.push({
+ '@type': 'ListItem' as const,
+ position: index + 2,
+ name: formatSegmentName(segment),
+ item: `https://docs.deploystack.io${currentPath}`,
+ });
+ });
+
+ return {
+ '@context': 'https://schema.org',
+ '@type': 'BreadcrumbList',
+ itemListElement: items,
+ };
+}
+
+// Generate technical article schema for documentation pages
+export function generateTechArticleSchema({
+ title,
+ description,
+ slug,
+ url,
+ dateModified,
+ datePublished,
+}: {
+ title: string;
+ description?: string;
+ slug: string[];
+ url: string;
+ dateModified?: string;
+ datePublished?: string;
+}): WithContext {
+ const article: WithContext = {
+ '@context': 'https://schema.org',
+ '@type': 'TechArticle',
+ headline: title,
+ name: title,
+ description: description || `DeployStack documentation: ${title}`,
+ url,
+ publisher: DEPLOYSTACK_ORG,
+ author: {
+ '@type': 'Organization',
+ name: 'DeployStack Team',
+ url: 'https://deploystack.io',
+ },
+ inLanguage: 'en',
+ about: {
+ '@type': 'Thing',
+ name: 'MCP Management Platform',
+ description: 'Model Context Protocol management and deployment tools',
+ },
+ audience: {
+ '@type': 'Audience',
+ audienceType: 'Developers',
+ },
+ genre: 'Technical Documentation',
+ keywords: generateKeywords(slug, title),
+ };
+
+ // Add dates if available
+ if (datePublished) {
+ article.datePublished = datePublished;
+ }
+ if (dateModified) {
+ article.dateModified = dateModified;
+ }
+
+ return article;
+}
+
+// Helper function to format segment names for breadcrumbs
+function formatSegmentName(segment: string): string {
+ return segment
+ .split('-')
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
+ .join(' ');
+}
+
+// Generate relevant keywords based on slug and title
+function generateKeywords(slug: string[], title: string): string {
+ const baseKeywords = ['DeployStack', 'MCP', 'Model Context Protocol', 'Documentation'];
+
+ // Add section-specific keywords
+ if (slug.includes('development')) {
+ baseKeywords.push('Development', 'API', 'SDK');
+ }
+ if (slug.includes('self-hosted')) {
+ baseKeywords.push('Self-hosted', 'Installation', 'Setup');
+ }
+ if (slug.includes('backend')) {
+ baseKeywords.push('Backend', 'Server', 'Database');
+ }
+ if (slug.includes('frontend')) {
+ baseKeywords.push('Frontend', 'UI', 'React');
+ }
+ if (slug.includes('gateway')) {
+ baseKeywords.push('Gateway', 'API Gateway', 'Proxy');
+ }
+
+ // Add words from title
+ const titleWords = title.toLowerCase().split(/\s+/).filter(word => word.length > 3);
+ baseKeywords.push(...titleWords);
+
+ return baseKeywords.join(', ');
+}
+
+// Combine multiple schemas into a single JSON-LD script
+export function combineSchemas(...schemas: WithContext[]): string {
+ if (schemas.length === 1) {
+ return JSON.stringify(schemas[0], null, 2);
+ }
+
+ return JSON.stringify({
+ '@context': 'https://schema.org',
+ '@graph': schemas.map(schema => {
+ const { '@context': _, ...rest } = schema;
+ return rest;
+ }),
+ }, null, 2);
+}
diff --git a/package-lock.json b/package-lock.json
index 4d2e3ae..7928181 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,7 +18,8 @@
"next": "^15.4.5",
"node-fetch": "^3.3.2",
"react": "^19.1.0",
- "react-dom": "^19.1.0"
+ "react-dom": "^19.1.0",
+ "schema-dts": "^1.1.5"
},
"devDependencies": {
"@semantic-release/github": "^11.0.3",
@@ -12262,6 +12263,12 @@
"integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
"license": "MIT"
},
+ "node_modules/schema-dts": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz",
+ "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==",
+ "license": "Apache-2.0"
+ },
"node_modules/scroll-into-view-if-needed": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz",
diff --git a/package.json b/package.json
index c06c784..6c137b0 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,8 @@
"next": "^15.4.5",
"node-fetch": "^3.3.2",
"react": "^19.1.0",
- "react-dom": "^19.1.0"
+ "react-dom": "^19.1.0",
+ "schema-dts": "^1.1.5"
},
"devDependencies": {
"@semantic-release/github": "^11.0.3",