Skip to content
Closed
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
2 changes: 1 addition & 1 deletion .github/upstream-projects.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ projects:

- id: toolhive
repo: stacklok/toolhive
version: v0.22.0
version: v0.23.1
# toolhive is a monorepo covering the CLI, the Kubernetes
# operator, and the vMCP gateway. It also introduces cross-
# cutting features that land in concepts/, integrations/,
Expand Down
5 changes: 3 additions & 2 deletions docs/toolhive/guides-cli/build-containers.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ thv build --tag mcp-servers/git-server:stable uvx://mcp-server-git
Use the built image in your Kubernetes manifests:

```yaml
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
name: git-server
Expand Down Expand Up @@ -263,7 +263,7 @@ you need to pre-build containers before deploying them.
3. **Deploy to Kubernetes** using the pre-built image:

```yaml
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
name: git-server
Expand Down Expand Up @@ -499,3 +499,4 @@ If your custom package registry configuration isn't being applied:
container build environment

</details>

27 changes: 14 additions & 13 deletions docs/toolhive/guides-k8s/auth-k8s.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ isolation.
<TabItem value="inline" label="External IdP" default>

```yaml title="shared-oidc-config.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPOIDCConfig
metadata:
name: production-oidc
Expand All @@ -127,7 +127,7 @@ spec:
<TabItem value="k8s" label="Kubernetes service account">

```yaml title="k8s-oidc-config.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPOIDCConfig
metadata:
name: k8s-sa-oidc
Expand All @@ -154,7 +154,7 @@ Use `oidcConfigRef` instead of inline `oidcConfig`. Each server must set a
unique `audience` to prevent token replay across servers:

```yaml title="mcp-server-shared-oidc.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
name: weather-server
Expand Down Expand Up @@ -217,7 +217,7 @@ settings, and an `MCPServer` resource that references it. The ToolHive proxy
handles authentication before forwarding requests to the MCP server.

```yaml title="mcp-server-external-auth.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPOIDCConfig
metadata:
name: external-oidc
Expand All @@ -229,7 +229,7 @@ spec:
clientId: 'your-client-id'
jwksUrl: 'https://your-oidc-issuer.com/path/to/jwks'
---
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
name: weather-server-external
Expand Down Expand Up @@ -310,7 +310,7 @@ Create an `MCPOIDCConfig` resource for Kubernetes service account authentication
and an `MCPServer` that references it:

```yaml title="mcp-server-k8s-auth.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPOIDCConfig
metadata:
name: k8s-sa-oidc
Expand All @@ -321,7 +321,7 @@ spec:
serviceAccount: 'mcp-client'
namespace: 'client-apps'
---
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
name: weather-server-k8s
Expand Down Expand Up @@ -499,7 +499,7 @@ Create an `MCPExternalAuthConfig` resource with the `embeddedAuthServer` type.
This example configures an OIDC upstream provider (the most common case):

```yaml title="embedded-auth-config.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPExternalAuthConfig
metadata:
name: embedded-auth-server
Expand Down Expand Up @@ -562,7 +562,7 @@ authorization server itself. The MCPOIDCConfig issuer must match the `issuer` in
your `MCPExternalAuthConfig`.

```yaml title="mcp-server-embedded-auth.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPOIDCConfig
metadata:
name: embedded-auth-oidc
Expand All @@ -573,7 +573,7 @@ spec:
# This must match the embedded authorization server issuer url
issuer: 'https://mcp.example.com'
---
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
name: weather-server-embedded
Expand Down Expand Up @@ -690,7 +690,7 @@ for providers like GitHub that use OAuth 2.0 but don't implement the full OIDC
specification.

```yaml title="embedded-auth-oauth2-config.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPExternalAuthConfig
metadata:
name: embedded-auth-oauth2
Expand Down Expand Up @@ -836,7 +836,7 @@ kubectl apply -f authz-configmap.yaml
Add the authorization configuration to your `MCPServer` resources:

```yaml title="mcp-server-with-authz.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPOIDCConfig
metadata:
name: k8s-sa-authz-oidc
Expand All @@ -847,7 +847,7 @@ spec:
serviceAccount: 'mcp-client'
namespace: 'client-apps'
---
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
name: weather-server-with-authz
Expand Down Expand Up @@ -1057,3 +1057,4 @@ kubectl logs -n toolhive-system -l app.kubernetes.io/name=weather-server-k8s
MCP server

</details>

7 changes: 4 additions & 3 deletions docs/toolhive/guides-k8s/connect-clients.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ First, ensure you have an MCP server deployed. This example uses the `fetch`
server:

```yaml title="fetch-server.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
name: fetch
Expand Down Expand Up @@ -235,7 +235,7 @@ First, in the MCPServer spec for each server, ensure the `resourceUrl` property
is set to the full client-facing URL via `oidcConfigRef`:

```yaml title="fetch-server-oauth.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
# ...
spec:
Expand Down Expand Up @@ -493,7 +493,7 @@ First, in the MCPServer spec for each server, ensure the `resourceUrl` property
is set to the full client-facing URL via `oidcConfigRef`:

```yaml title="fetch-server-oauth.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
# ...
spec:
Expand Down Expand Up @@ -1098,3 +1098,4 @@ Solutions:
- Test connectivity using a debug pod in the app namespace

</details>

17 changes: 9 additions & 8 deletions docs/toolhive/guides-k8s/customize-tools.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ descriptions. You reference the configuration from an MCPServer using the
This example exposes only three tools on a server:

```yaml title="toolconfig-basic.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPToolConfig
metadata:
name: basic-tool-filter
Expand Down Expand Up @@ -51,7 +51,7 @@ scopes (for example, separate GitHub orgs, repos, or environments). Renaming
tools makes intent obvious and helps prevent mistakes.

```yaml title="toolconfig-with-overrides.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPToolConfig
metadata:
name: github-tools-config
Expand Down Expand Up @@ -112,7 +112,7 @@ resource.
<TabItem value="mcpserver" label="MCPServer" default>

```yaml {10-11} title="mcpserver-with-toolconfig.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
name: github
Expand All @@ -130,7 +130,7 @@ spec:
<TabItem value="mcpremoteproxy" label="MCPRemoteProxy">

```yaml {10-11} title="mcpremoteproxy-with-toolconfig.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPRemoteProxy
metadata:
name: github
Expand Down Expand Up @@ -161,7 +161,7 @@ Run the GitHub MCP twice, once per organization, and rename tools so intent is
clear to clients.

```yaml title="github-org-scoped-tools.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPToolConfig
metadata:
name: github-acme-tools
Expand All @@ -176,7 +176,7 @@ spec:
get_pull_request:
name: github_acme_get_pr
---
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPToolConfig
metadata:
name: github-foocorp-tools
Expand All @@ -191,7 +191,7 @@ spec:
get_pull_request:
name: github_foocorp_get_pr
---
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
name: github-acme
Expand All @@ -204,7 +204,7 @@ spec:
toolConfigRef:
name: github-acme-tools
---
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
name: github-foocorp
Expand Down Expand Up @@ -244,3 +244,4 @@ kubectl -n toolhive-system get mcpserver github -o yaml
- See the [Kubernetes CRD reference](../reference/crds/mcptoolconfig.mdx) for
the full MCPToolConfig and MCPServerSpec schemas.
- Learn how to [run the MKP server in Kubernetes](../guides-mcp/k8s.mdx).

7 changes: 4 additions & 3 deletions docs/toolhive/guides-k8s/logging.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ your MCP server manifest:
<TabItem value="mcpserver" label="MCPServer" default>

```yaml {11-12}
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServer
metadata:
name: <SERVER_NAME>
Expand All @@ -102,7 +102,7 @@ spec:
<TabItem value="mcpremoteproxy" label="MCPRemoteProxy">

```yaml {11-12}
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPRemoteProxy
metadata:
name: <SERVER_NAME>
Expand All @@ -120,7 +120,7 @@ spec:
<TabItem value="virtualmcpserver" label="VirtualMCPServer">

```yaml {11-14}
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: VirtualMCPServer
metadata:
name: <SERVER_NAME>
Expand Down Expand Up @@ -411,3 +411,4 @@ rules:
complete monitoring picture
- Check the [Kubernetes CRD reference](../reference/crds/index.mdx) for complete
configuration options

19 changes: 10 additions & 9 deletions docs/toolhive/guides-k8s/mcp-server-entry.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ MCPServerEntry resources must be part of an MCPGroup. Create the group first if
it doesn't exist:

```yaml title="my-group.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPGroup
metadata:
name: my-group
Expand All @@ -91,7 +91,7 @@ spec:
Then create a basic MCPServerEntry:

```yaml title="my-entry.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServerEntry
metadata:
name: my-remote-tool
Expand Down Expand Up @@ -142,7 +142,7 @@ exchange. The MCPExternalAuthConfig must exist in the same namespace as the
MCPServerEntry.

```yaml title="auth-entry.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPExternalAuthConfig
metadata:
name: my-auth-config
Expand All @@ -157,7 +157,7 @@ spec:
key: client-secret
audience: https://mcp.example.com
---
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServerEntry
metadata:
name: internal-tool
Expand Down Expand Up @@ -191,7 +191,7 @@ kubectl create configmap internal-ca-bundle \
Then reference it in the MCPServerEntry:

```yaml title="tls-entry.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServerEntry
metadata:
name: internal-tool
Expand All @@ -216,7 +216,7 @@ keys, or other purposes. Use the `headerForward` field to inject headers into
requests forwarded to the remote server.

```yaml title="header-entry.yaml"
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServerEntry
metadata:
name: my-remote-tool
Expand Down Expand Up @@ -246,7 +246,7 @@ it must already exist or be created separately:
```yaml title="complete-entry.yaml"
---
# 1. Create the MCPGroup
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPGroup
metadata:
name: engineering-tools
Expand All @@ -256,7 +256,7 @@ spec:

---
# 2. Create authentication config for token exchange
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPExternalAuthConfig
metadata:
name: remote-auth
Expand All @@ -273,7 +273,7 @@ spec:

---
# 3. Create the MCPServerEntry
apiVersion: toolhive.stacklok.dev/v1alpha1
apiVersion: toolhive.stacklok.dev/v1beta1
kind: MCPServerEntry
metadata:
name: partner-tools
Expand Down Expand Up @@ -463,3 +463,4 @@ Common causes:
server's actual transport protocol

</details>

Loading
Loading