Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
34 changes: 6 additions & 28 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,11 @@ on:
- main

permissions:
contents: write
issues: write
pull-requests: write
contents: read

jobs:
lint_build:
name: Run ESLint
lint_and_validate:
name: Lint and Validate Documentation
runs-on: ubuntu-latest

steps:
Expand All @@ -30,28 +28,8 @@ jobs:
- name: Install Dependencies
run: npm ci

- name: Run Markdown ESLint
- name: Run Markdown Linting
run: npm run lint:md

- name: Run Lint Links
run: npm run lint:links

release:
name: Run Release
runs-on: ubuntu-latest
needs: lint_build

steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm audit signatures
- name: Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: npm run semantic-release
- name: Validate Links
run: npm run lint:links
14 changes: 13 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ mintlify dev
```

The local server provides:

- Hot reloading for instant content updates
- Navigation preview
- Component rendering
Expand Down Expand Up @@ -96,6 +97,7 @@ More content here...
Mintlify provides built-in components for enhanced documentation:

**Callouts:**

```mdx
<Note>General information</Note>
<Info>Important information</Info>
Expand All @@ -106,6 +108,7 @@ Mintlify provides built-in components for enhanced documentation:
```

**Code Groups:**

```mdx
<CodeGroup>
`\`\`bash macOS/Linux
Expand All @@ -118,8 +121,8 @@ npm install
</CodeGroup>
```


**Cards:**

```mdx
<CardGroup cols={2}>
<Card title="Getting Started" icon="rocket" href="/general/quick-start">
Expand All @@ -132,6 +135,7 @@ npm install
```

**Steps:**

```mdx
<Steps>
<Step title="Install Dependencies">
Expand All @@ -155,26 +159,31 @@ Navigation is controlled via `docs.json`:
- **Pages**: Individual documentation pages

To add a new page:

1. Create the `.mdx` file in the appropriate directory
2. Add the page path to `docs.json` under the relevant group
3. Test locally with `mintlify dev`

### Content Guidelines

**File Naming:**

- Use kebab-case: `my-new-page.mdx`
- Index files represent the directory: `index.mdx`

**Links:**

- Use absolute paths from documentation root: `/development/backend/api/index`
- Mintlify automatically handles `.mdx` extensions

**Images:**

- Store in `assets/images/` with logical subdirectories
- Reference with absolute paths: `/assets/images/logo/dark.webp`
- Optimize images before committing (compress file sizes)

**Frontmatter:**

```yaml
---
title: Page Title (required)
Expand Down Expand Up @@ -214,19 +223,22 @@ description: Page description for SEO (required)
### Documentation Standards

**Writing Style:**

- Write in clear, concise language
- Use active voice
- Address the reader directly ("you")
- Avoid jargon without explanation
- Include code examples where helpful

**Code Examples:**

- Include complete, working examples
- Add comments for clarity
- Show expected output when relevant
- Test all code before committing

**Structure:**

- Start with overview/introduction
- Progress from basic to advanced
- Use descriptive section headers
Expand Down
55 changes: 46 additions & 9 deletions check-links.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,12 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
const IGNORED_URLS = [
'https://deploystack.io',
'https://deploystack.io/*',
'https://cloud.deploystack.io'
'https://cloud.deploystack.io',
'https://docs.deploystack.io',
'https://mintlify.com',
'https://mintlify.com/*',
'https://discord.gg/',
'https://discord.gg/*'
];

// Check if a URL should be ignored
Expand Down Expand Up @@ -55,19 +60,19 @@ const checkLocalFile = (linkPath, filePath) => {
if (linkPath.startsWith('/') && !linkPath.startsWith('//') && !linkPath.startsWith('http')) {
// Remove hash fragment before checking file existence
const [baseUrl] = linkPath.split('#');

// Map the URL to the actual file location
// Since our URLs are now root-level but files are in docs/
const actualFilePath = path.join(process.cwd(), 'docs', baseUrl.substring(1));
// Files are in the root directory structure
const actualFilePath = path.join(process.cwd(), baseUrl.substring(1));

// Try both .mdx and .md extensions
const possiblePaths = [
actualFilePath + '.mdx',
actualFilePath + '.md',
path.join(actualFilePath, 'index.mdx'),
path.join(actualFilePath, 'index.md')
];

for (const possiblePath of possiblePaths) {
try {
fs.accessSync(possiblePath, fs.constants.F_OK);
Expand All @@ -77,7 +82,7 @@ const checkLocalFile = (linkPath, filePath) => {
// Continue to next possible path
}
}

console.log(` ❌ ${linkPath} → File not found (checked: ${possiblePaths.map(p => path.relative(process.cwd(), p)).join(', ')})`);
return false;
}
Expand Down Expand Up @@ -189,9 +194,41 @@ const processDirectory = async (dir) => {
return allValid;
};

// Start processing
// Directories to skip during scanning
const SKIP_DIRS = ['node_modules', '.git', '.next', 'out', '.github', '.source'];

// Modified processDirectory to skip certain directories
const shouldSkipDirectory = (dirName) => {
return SKIP_DIRS.includes(dirName);
};

// Start processing from current directory
console.log('📝 Checking markdown links...\n');
processDirectory('docs').then(allValid => {

const scanDirectory = async (dir) => {
let allValid = true;
const files = fs.readdirSync(dir);

for (const file of files) {
const filePath = path.join(dir, file);
const stat = fs.statSync(filePath);

if (stat.isDirectory()) {
// Skip certain directories
if (!shouldSkipDirectory(file)) {
const isValid = await processDirectory(filePath);
if (!isValid) allValid = false;
}
} else if (file.endsWith('.md') || file.endsWith('.mdx')) {
const isValid = await processFile(filePath);
if (!isValid) allValid = false;
}
}

return allValid;
};

scanDirectory(process.cwd()).then(allValid => {
if (!allValid) {
console.log('❌ Some links are invalid!');
process.exit(1);
Expand Down
4 changes: 4 additions & 0 deletions context7.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"url": "https://context7.com/deploystackio/documentation",
"public_key": "pk_ElwBaquFd3aorFHMpJAin"
}
2 changes: 1 addition & 1 deletion development/backend/auth.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description: Technical documentation for the DeployStack backend authentication
---


This document provides technical details about the DeployStack backend authentication system implementation. For user-facing authentication configuration, see [Authentication Methods](/auth). For OAuth provider implementation details, see [OAuth Provider Implementation](/development/backend/oauth-providers) and [OAuth2 Server Implementation](/development/backend/oauth2-server).
This document provides technical details about the DeployStack backend authentication system implementation. For user-facing authentication configuration, see [Authentication Methods](/general/auth). For OAuth provider implementation details, see [OAuth Provider Implementation](/development/backend/oauth-providers) and [OAuth2 Server Implementation](/development/backend/oauth2-server).

## Architecture Overview

Expand Down
8 changes: 4 additions & 4 deletions development/backend/mcp-configuration-architecture.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -416,9 +416,9 @@ For specific implementation details:
- [Backend API](/development/backend/api/) - Complete API endpoint documentation
- [Database Schema](/development/backend/database/) - Database structure and relationships
- [Job Queue System](/development/backend/job-queue) - Background job processing for registry sync
- [Teams](/teams) - Team management and structure
- [MCP Configuration System](/mcp-configuration) - User-facing configuration guide
- [MCP Installation](/mcp-installation) - Installation and team setup
- [MCP Catalog](/mcp-catalog) - Official registry integration details
- [Teams](/general/teams) - Team management and structure
- [MCP Configuration System](/general/mcp-configuration) - User-facing configuration guide
- [MCP Installation](/general/mcp-installation) - Installation and team setup
- [MCP Catalog](/general/mcp-catalog) - Official registry integration details

The three-tier configuration architecture provides a robust foundation for managing complex MCP server configurations in multi-user team environments while maintaining security, flexibility, and ease of use. The system seamlessly handles both manually created custom servers and automatically synced official registry servers.
2 changes: 1 addition & 1 deletion development/backend/oauth-providers.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -282,4 +282,4 @@ Frontend checks provider status to show login buttons:
- [OAuth2 Server Implementation](/development/backend/oauth2-server) - OAuth2 server for API access
- [Security Policy](/development/backend/security) - Security implementation details
- [Global Settings](/development/backend/global-settings) - Configuration management
- [GitHub OAuth Setup](/github-oauth-setup) - User-facing GitHub OAuth setup guide
- [GitHub OAuth Setup](/general/github-oauth-setup) - User-facing GitHub OAuth setup guide
2 changes: 1 addition & 1 deletion development/frontend/architecture.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -580,7 +580,7 @@ export function createColumns(): ColumnDef[] {

### Table Components

For table implementations, use the shadcn-vue Table components as documented in the [Table Design System](/development/frontend/ui/-table). Never use raw HTML table elements.
For table implementations, use the shadcn-vue Table components as documented in the [Table Design System](/development/frontend/ui/design-system-table). Never use raw HTML table elements.

## Component Communication Patterns

Expand Down
6 changes: 3 additions & 3 deletions development/frontend/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -67,15 +67,15 @@ The frontend follows a feature-based modular architecture with clear separation

For comprehensive component development guidelines, including Vue SFC best practices, component structure patterns, and implementation standards, see the [Frontend Architecture - Component Implementation Standards](/development/frontend/architecture#component-implementation-standards) section.

For table-specific implementations, refer to the [Table Design System](/development/frontend/ui/-table) guide.
For table-specific implementations, refer to the [Table Design System](/development/frontend/ui/design-system-table) guide.

## UI Components and Styling

The frontend uses **TailwindCSS** for styling with **shadcn-vue** component library for consistent UI elements. For comprehensive styling guidelines, component patterns, and design standards, see the [UI Design System](/development/frontend/ui/) documentation.

### ⚠️ **Mandatory Design Patterns**

All structured information displays must follow the **[Structured Data Display Pattern](/development/frontend/ui/-structured-data)**. This includes:
All structured information displays must follow the **[Structured Data Display Pattern](/development/frontend/ui/design-system-structured-data)**. This includes:
- User profiles and settings
- Form layouts
- Configuration displays
Expand Down Expand Up @@ -125,7 +125,7 @@ Continue reading the detailed guides:

- [Frontend Architecture](/development/frontend/architecture) - Application architecture, patterns, and development principles
- [UI Design System](/development/frontend/ui/) - Component patterns, styling guidelines, and design standards
- **[Structured Data Display Pattern](/development/frontend/ui/-structured-data)** - **Mandatory pattern** for consistent information display
- **[Structured Data Display Pattern](/development/frontend/ui/design-system-structured-data)** - **Mandatory pattern** for consistent information display
- [Environment Variables](/development/frontend/environment-variables) - Complete environment configuration guide
- [Global Event Bus](/development/frontend/event-bus) - Cross-component communication system
- [Internationalization (i18n)](/development/frontend/internationalization) - Multi-language support
Expand Down
4 changes: 2 additions & 2 deletions development/frontend/ui/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -167,9 +167,9 @@ This hierarchy is a **design system requirement** and must be followed consisten

## Data Tables

For data table implementation, see the dedicated [Table Design System](/development/frontend/ui/-table) guide.
For data table implementation, see the dedicated [Table Design System](/development/frontend/ui/design-system-table) guide.

For pagination implementation, see the [Pagination Implementation Guide](/development/frontend/ui/-pagination).
For pagination implementation, see the [Pagination Implementation Guide](/development/frontend/ui/design-system-pagination).

## Badge Design Patterns

Expand Down
2 changes: 1 addition & 1 deletion development/satellite/backend-communication.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ See `services/backend/src/db/schema.ts` for complete schema definitions.
4. Backend consumes single-use token and issues permanent API key
5. Satellite stores API key securely for ongoing communication

For detailed token validation process, see [Registration Security](/development/backend/satellite-communication#satellite-pairing-process).
For detailed token validation process, see [Registration Security](/development/backend/satellite/communication#satellite-pairing-process).

**Ongoing Operations:**
1. All requests include `Authorization: Bearer {api_key}`
Expand Down
4 changes: 2 additions & 2 deletions development/satellite/mcp-server-token-injection.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ private isCacheValid(cachedAt: number, expiresAt: string | null): boolean {

### Tool Execution Injection

**File**: [services/satellite/src/core/mcp-server-wrapper.ts](https://github.com/deploystackio/deploystack/blob/main/services/satellite/src/core/mcp-server-wrapper.ts:711-760)
**File**: [services/satellite/src/core/mcp-server-wrapper.ts](https://github.com/deploystackio/deploystack/blob/main/services/satellite/src/core/mcp-server-wrapper.ts)

**Purpose**: Injects OAuth tokens when executing tools on HTTP/SSE MCP servers.

Expand Down Expand Up @@ -438,7 +438,7 @@ async handleHttpToolCall(serverName: string, originalToolName: string, args: unk

### Tool Discovery Injection

**File**: [services/satellite/src/services/remote-tool-discovery-manager.ts](https://github.com/deploystackio/deploystack/blob/main/services/satellite/src/services/remote-tool-discovery-manager.ts:376-440)
**File**: [services/satellite/src/services/remote-tool-discovery-manager.ts](https://github.com/deploystackio/deploystack/blob/main/services/satellite/src/services/remote-tool-discovery-manager.ts)

**Purpose**: Injects OAuth tokens when discovering available tools from HTTP/SSE MCP servers.

Expand Down
2 changes: 1 addition & 1 deletion development/satellite/registration.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ Satellites require registration tokens generated by administrators:
- Scope: Can register team satellites for specific team only
- Expiration: 24 hours (configurable)

For token generation APIs, see [Satellite Communication - Registration Tokens](/development/backend/satellite-communication#satellite-pairing-process).
For token generation APIs, see [Satellite Communication - Registration Tokens](/development/backend/satellite/communication#satellite-pairing-process).

### Security Model

Expand Down
10 changes: 5 additions & 5 deletions general/architecture.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -77,16 +77,16 @@ DeployStack introduces a **Control Plane / Satellite architecture** that brings
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
- **Role-Based Access Control**: [Define teams](/general/teams), [roles, and permissions](/general/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)
- **Encrypted Storage**: All API keys and tokens stored with [enterprise-grade encryption](/general/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
- **Configuration Management**: [Store and manage all MCP server configurations](/general/mcp-catalog) including commands, arguments, and environment variables
- **Version Control**: Track changes to MCP server configurations over time (coming soon)

#### Analytics & Governance (Coming soon)
Expand Down Expand Up @@ -153,7 +153,7 @@ Client Request → OAuth Validation → Team Authorization → Satellite MCP Pro

## 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).
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](/general/security).

Key security principles:
- **OAuth Bearer Token Authentication**: Standard OAuth flow with secure credential management
Expand Down Expand Up @@ -289,4 +289,4 @@ DeployStack supports multiple team memberships with instant context switching:

---

**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.
**Next Steps**: Explore our [Quick Start Guide](/general/quick-start) to experience the architecture in action, or dive into the [Development Documentation](/development) to understand implementation details.
2 changes: 1 addition & 1 deletion general/auth.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -228,4 +228,4 @@ For developers and integrations, DeployStack provides REST API endpoints for aut

---

For technical implementation details, see the [Backend Authentication Documentation](/development/backend/api/) and [Global Settings Management](/global-settings).
For technical implementation details, see the [Backend Authentication Documentation](/development/backend/api/) and [Global Settings Management](/general/global-settings).
Loading