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
65 changes: 29 additions & 36 deletions docs/toolhive/enterprise/index.mdx → docs/toolhive/enterprise.mdx
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
---
title: Stacklok Enterprise
description: Stacklok Enterprise offerings for ToolHive
hide_title: false
---

import HubSpotForm from '@site/src/components/HubSpotForm';
import Heading from '@theme/Heading';
import BrandedList from '@site/src/components/BrandedList';

<Heading as='h2'>
A hardened and production-ready distribution of ToolHive Community
</Heading>

<h2>A hardened and production-ready distribution of ToolHive Community</h2>
Securely scale MCP servers across your enterprise with Stacklok Enterprise's
signed binaries, hardened images, formal semantic versioning, backported
security patches, and turnkey identity provider integrations. Kubernetes native
and LLM agnostic. Self-hosted in your environment, governed by your policies, no
vendor lock-in.

<HubSpotForm
anchorId='schedule-a-demo'
title='Schedule a Demo'
title='Schedule a demo'
subtitle='See how teams go from evaluation to production in under 60 days'
portalId='42544743'
formId='9e42c0ba-c41b-4d22-bacc-86d75854da06'
Expand All @@ -36,34 +41,22 @@ vendor lock-in.

Teams typically move to Stacklok Enterprise when they hit one of these walls:

<ul className='stacklok-icon-list'>
<li>
Developers are bringing their own MCP servers to work — shadow AI is
spreading and there is no central control
</li>
<li>
Your organization has multiple coding assistants and AI agents that need
access to business context
</li>
<li>
Your security or compliance team is asking how MCP servers are
authenticated, audited, and patched
</li>
<li>
You need SSO and IdP integration (Okta, Entra ID) across your organization
</li>
<li>
You are running MCP in production and need SLA-backed support for incidents
</li>
<li>
You need centralized governance and policy enforcement across multiple teams
or business units
</li>
<li>
Your environment requires a semantically versioned, supply-chain-attested
distribution rather than continuous rolling release
</li>
</ul>
<BrandedList>

- Developers are bringing their own MCP servers to work — shadow AI is spreading
and there is no central control
- Your organization has multiple coding assistants and AI agents that need
access to business context
- Your security or compliance team is asking how MCP servers are authenticated,
audited, and patched
- You need SSO and IdP integration (Okta, Entra ID) across your organization
- You are running MCP in production and need SLA-backed support for incidents
- You need centralized governance and policy enforcement across multiple teams
or business units
- Your environment requires a semantically versioned, supply-chain-attested
distribution rather than continuous rolling release

</BrandedList>

Recognizing these challenges in your organization?
[Schedule a demo](#schedule-a-demo) to see how Stacklok Enterprise addresses
Expand Down Expand Up @@ -94,7 +87,7 @@ them.
| Hardened container base images (Chainguard or equiv.) | — | ✓ |
| Proactive notification of vulnerabilities | — | ✓ |
| CVEs addressed within SLO with responsible disclosure | — | ✓ |
| All Sev 03 vulnerabilities backported as patch updates | — | ✓ |
| All Sev 0-3 vulnerabilities backported as patch updates | — | ✓ |

### Auth, identity & governance

Expand Down Expand Up @@ -285,7 +278,7 @@ by running each server in its own container with least-privilege permissions,
encrypting credentials at rest, and tracing every tool call via OpenTelemetry.
Stacklok Enterprise adds centralized governance, IdP-backed authentication, and
audit logging for teams running MCP at scale across their organization.
[Explore the core concepts](../concepts) to dig deeper into how ToolHive works.
[Explore the core concepts](./concepts/) to dig deeper into how ToolHive works.

</details>

Expand All @@ -297,7 +290,7 @@ MCP. This includes Claude Code, GitHub Copilot, Cursor, Windsurf, VS Code, Zed,
Cline, Continue, Roo Code, Goose, LM Studio, OpenAI Codex, and many more. Most
clients support automatic configuration so developers can connect without manual
setup.
[See the full client compatibility reference](../reference/client-compatibility)
[See the full client compatibility reference](./reference/client-compatibility.mdx)
for the complete list.

</details>
Expand All @@ -310,7 +303,7 @@ servers maintained by Stacklok. From there, you have full control to add your
own servers from public package managers, Docker images, remote URLs, or build a
private registry tailored to your organization. You are never limited to
Stacklok's catalog.
[See how to run MCP servers in Kubernetes](../guides-k8s/run-mcp-k8s) for the
[See how to run MCP servers in Kubernetes](./guides-k8s/run-mcp-k8s.mdx) for the
full details.

</details>
Expand All @@ -324,6 +317,6 @@ full details.
ToolHive Community is free, open source, and the best way to evaluate MCP before
moving to production.

[Get started with ToolHive Community →](/toolhive)
[Get started with ToolHive Community →](./index.mdx)

:::
10 changes: 4 additions & 6 deletions docs/toolhive/support.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,7 @@ This information helps the team diagnose and fix issues more quickly.

## Enterprise support

For organizations that need dedicated support, custom integrations, or
assistance with large-scale deployments, enterprise support is available. Learn
more about the Stacklok MCP Platform and enterprise offerings on the
[Stacklok website](https://stacklok.com/platform/) or
[request a demo](https://stacklok.com/demo/) to see how the platform can meet
your organization's needs.
For organizations that need an enterprise distribution of ToolHive with
dedicated support, custom integrations, or assistance with large-scale
deployments, see the [Stacklok Enterprise](./enterprise.mdx) page to learn more
and get in touch.
2 changes: 1 addition & 1 deletion docusaurus.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ const config: Config = {
position: 'left',
},
{
to: '/toolhive/enterprise',
to: 'toolhive/enterprise',
label: 'Enterprise',
position: 'left',
},
Expand Down
2 changes: 1 addition & 1 deletion sidebars.ts
Original file line number Diff line number Diff line change
Expand Up @@ -280,10 +280,10 @@ const sidebars: SidebarsConfig = {
items: [{ type: 'autogenerated', dirName: 'toolhive/guides-mcp' }],
},

'toolhive/enterprise/index',
'toolhive/reference/client-compatibility',
'toolhive/reference/index',
'toolhive/faq',
'toolhive/enterprise',
'toolhive/support',
'toolhive/contributing',
],
Expand Down
26 changes: 26 additions & 0 deletions src/components/BrandedList/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// SPDX-FileCopyrightText: Copyright 2026 Stacklok, Inc.
// SPDX-License-Identifier: Apache-2.0

/*
* Renders a markdown unordered list with the Stacklok brand symbol as the
* bullet icon. Use as a block wrapper around a standard markdown list in MDX:
*
* <BrandedList>
* - item one
* - item two
* </BrandedList>
*
* MDX processes the markdown into a <ul> inside the wrapper <div>, which the
* CSS module targets via `.list ul li`.
*/

import React, { ReactNode } from 'react';
import styles from './styles.module.css';

interface BrandedListProps {
children: ReactNode;
}

export default function BrandedList({ children }: BrandedListProps) {
return <div className={styles.list}>{children}</div>;
}
35 changes: 35 additions & 0 deletions src/components/BrandedList/styles.module.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
SPDX-FileCopyrightText: Copyright 2026 Stacklok, Inc.
SPDX-License-Identifier: Apache-2.0
*/

.list ul {
list-style: none;
padding-left: 0;
}

.list ul li {
display: flex;
align-items: center;
gap: 0.5rem;
margin-bottom: 0.75rem;
}

.list ul li p {
margin: 0;
}

.list ul li::before {
content: '';
background-image: url('/img/logos/stacklok-symbol-light-green.svg');
background-size: contain;
background-repeat: no-repeat;
height: 1rem;
width: 1rem;
flex-shrink: 0;
display: inline-block;
}

:global([data-theme='light']) .list ul li::before {
background-image: url('/img/logos/stacklok-symbol-dark-green.svg');
}
32 changes: 26 additions & 6 deletions src/components/HubSpotForm/index.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,21 @@
// SPDX-FileCopyrightText: Copyright 2025 Stacklok, Inc.
// SPDX-FileCopyrightText: Copyright 2026 Stacklok, Inc.
// SPDX-License-Identifier: Apache-2.0

/*
* Renders an embedded HubSpot form using the HubSpot Forms API. The embed
* script is loaded lazily on mount and shared across multiple instances on the
* same page. Tracks submission state to trigger HubSpot's own confirmation
* message in place of the form.
*
* When `title` is provided, the form is wrapped in a branded card with an
* optional `subtitle`. Supply `anchorId` to make the title a named anchor
* target for in-page links (e.g. a CTA linking to "#schedule-a-demo").
* The title renders as a `<Heading>` so Docusaurus recognizes the anchor
* during its build-time link validation.
*/

import React, { useEffect, useRef, useState } from 'react';
import Heading from '@theme/Heading';

interface HubSpotFormProps {
portalId: string;
Expand Down Expand Up @@ -72,7 +86,6 @@ export default function HubSpotForm({
return (
<div style={{ textAlign: 'center' }}>
<div
id={anchorId}
style={{
textAlign: 'center',
backgroundColor: 'var(--stacklok-green-leaf)',
Expand All @@ -81,14 +94,21 @@ export default function HubSpotForm({
borderRadius: '24px',
display: 'inline-block',
width: 'auto',
scrollMarginTop: anchorId ? '7rem' : undefined,
}}
>
<span
style={{ display: 'block', fontWeight: '700', fontSize: '1.25rem' }}
<Heading
as='h2'
id={anchorId}
style={{
display: 'block',
fontWeight: '700',
fontSize: '1.25rem',
color: 'inherit',
scrollMarginTop: anchorId ? '9rem' : undefined,
}}
>
{title}
</span>
</Heading>
{subtitle && (
<span
style={{
Expand Down
29 changes: 0 additions & 29 deletions src/css/custom.css
Original file line number Diff line number Diff line change
Expand Up @@ -443,35 +443,6 @@ details summary:hover {
color: var(--ifm-color-primary);
}

/* Icon bullet list using the Stacklok brand symbol as a custom bullet */
.stacklok-icon-list {
list-style: none;
padding-left: 0;
}

.stacklok-icon-list li {
display: flex;
align-items: flex-start;
gap: 0.5rem;
margin-bottom: 0.75rem;
}

.stacklok-icon-list li::before {
content: '';
background-image: url('/img/logos/stacklok-symbol-light-green.svg');
background-size: contain;
background-repeat: no-repeat;
height: 1rem;
width: 1rem;
margin-top: 0.2rem;
flex-shrink: 0;
display: inline-block;
}

[data-theme='light'] .stacklok-icon-list li::before {
background-image: url('/img/logos/stacklok-symbol-dark-green.svg');
}

/* HubSpot form styling for Enterprise page */

.hs-form-private .hs-input {
Expand Down
Loading