Skip to content

Commit ddfc06f

Browse files
ChrisJBurnsclaudedanbarr
authored andcommitted
Add documentation for ToolHive v0.20.0 (#715)
* Add documentation for ToolHive v0.20.0 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Fix MCPTelemetryConfig example and add CRD spec admonitions Address review feedback: - Fix API group from .com to .dev in MCPTelemetryConfig example - Use correct nested openTelemetry/prometheus spec structure - Move serviceName from MCPTelemetryConfig to telemetryConfigRef - Soften rolling update claim (remove specific TelemetryConfigHash reference) - Add admonition noting telemetryConfigRef is a v0.20.0 feature - Add admonition noting groupRef struct change is a v0.20.0 feature Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Remove weekly product update blog post Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Update docs/toolhive/guides-vmcp/configuration.mdx Co-authored-by: Dan Barr <danbarr@users.noreply.github.com> * Remove deprecated inline telemetry docs and groupRef info note Address PR review feedback: - Remove "two ways" framing and deprecated inline telemetry config section, keeping only the shared MCPTelemetryConfig approach - Update config table and Jaeger example to use new field paths - Remove groupRef v0.20.0 info note from configuration page since CRD ref and migration guide already cover this Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: Dan Barr <danbarr@users.noreply.github.com>
1 parent c14aa3e commit ddfc06f

14 files changed

Lines changed: 179 additions & 88 deletions

docs/toolhive/guides-cli/run-mcp-servers.mdx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,21 @@ uses Server-Sent Events (SSE), specify the transport flag:
648648
thv run https://api.example.com/sse --transport sse
649649
```
650650

651+
#### Stateless remote servers
652+
653+
Some remote MCP servers only accept POST requests and don't support SSE streams.
654+
For these servers, use the `--stateless` flag:
655+
656+
```bash
657+
thv run https://example.com/mcp --name my-server --transport streamable-http --stateless
658+
```
659+
660+
When `--stateless` is set:
661+
662+
- GET, HEAD, and DELETE requests return HTTP 405 at the proxy instead of being
663+
forwarded to the remote server
664+
- Health checks use a POST-based JSON-RPC ping instead of SSE
665+
651666
:::info[What's happening?]
652667

653668
When you run a remote MCP server, ToolHive:
@@ -727,6 +742,24 @@ thv run https://api.example.com/mcp \
727742
--remote-auth-scopes read,write,admin
728743
```
729744

745+
#### Non-standard OAuth scope parameter name
746+
747+
Some OAuth providers use a non-standard query parameter name for scopes in the
748+
authorization URL. For example, Slack uses `user_scope` instead of the standard
749+
`scope` parameter. Use the `--remote-auth-scope-param-name` flag to override the
750+
parameter name:
751+
752+
```bash
753+
thv run https://mcp.slack.com/mcp \
754+
--name slack \
755+
--transport streamable-http \
756+
--remote-auth-client-id <CLIENT_ID> \
757+
--remote-auth-callback-port 3118 \
758+
--remote-auth-authorize-url "https://slack.com/oauth/v2_user/authorize" \
759+
--remote-auth-token-url "https://slack.com/api/oauth.v2.user.access" \
760+
--remote-auth-scope-param-name user_scope
761+
```
762+
730763
#### Resource indicator (RFC 8707)
731764

732765
When authenticating to remote MCP servers, you can specify a resource indicator

docs/toolhive/guides-k8s/logging.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,9 @@ metadata:
126126
name: <SERVER_NAME>
127127
namespace: toolhive-system
128128
spec:
129+
groupRef:
130+
name: <GROUP_NAME>
129131
config:
130-
groupRef: <GROUP_NAME>
131-
132132
# Enable audit logging
133133
audit:
134134
enabled: true

docs/toolhive/guides-k8s/mcp-server-entry.mdx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ metadata:
9898
name: my-remote-tool
9999
namespace: toolhive-system
100100
spec:
101-
groupRef: my-group
101+
groupRef:
102+
name: my-group
102103
remoteURL: https://mcp.example.com/mcp
103104
transport: streamable-http
104105
```
@@ -163,7 +164,8 @@ metadata:
163164
name: internal-tool
164165
namespace: toolhive-system
165166
spec:
166-
groupRef: my-group
167+
groupRef:
168+
name: my-group
167169
remoteURL: https://internal-mcp.corp.example.com/mcp
168170
transport: streamable-http
169171
# highlight-next-line
@@ -196,7 +198,8 @@ metadata:
196198
name: internal-tool
197199
namespace: toolhive-system
198200
spec:
199-
groupRef: my-group
201+
groupRef:
202+
name: my-group
200203
remoteURL: https://internal-mcp.corp.example.com/mcp
201204
transport: streamable-http
202205
# highlight-start
@@ -220,7 +223,8 @@ metadata:
220223
name: my-remote-tool
221224
namespace: toolhive-system
222225
spec:
223-
groupRef: my-group
226+
groupRef:
227+
name: my-group
224228
remoteURL: https://mcp.example.com/mcp
225229
transport: streamable-http
226230
# highlight-start
@@ -276,7 +280,8 @@ metadata:
276280
name: partner-tools
277281
namespace: toolhive-system
278282
spec:
279-
groupRef: engineering-tools
283+
groupRef:
284+
name: engineering-tools
280285
remoteURL: https://mcp.partner.example.com/mcp
281286
transport: streamable-http
282287
externalAuthConfigRef:

docs/toolhive/guides-vmcp/audit-logging.mdx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ metadata:
2828
name: my-vmcp
2929
namespace: toolhive-system
3030
spec:
31+
groupRef:
32+
name: my-group
3133
config:
32-
groupRef: my-group
3334
# highlight-start
3435
audit:
3536
enabled: true

docs/toolhive/guides-vmcp/authentication.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -522,8 +522,8 @@ metadata:
522522
name: my-vmcp
523523
namespace: toolhive-system
524524
spec:
525-
config:
526-
groupRef: my-backends
525+
groupRef:
526+
name: my-backends
527527
# highlight-start
528528
authServerConfig:
529529
issuer: https://auth.example.com

docs/toolhive/guides-vmcp/backend-discovery.mdx

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ metadata:
7878
name: my-vmcp
7979
namespace: toolhive-system
8080
spec:
81-
config:
82-
groupRef: my-group
81+
groupRef:
82+
name: my-group
8383
incomingAuth:
8484
type: anonymous
8585
outgoingAuth:
@@ -144,8 +144,9 @@ metadata:
144144
name: my-vmcp
145145
namespace: toolhive-system
146146
spec:
147+
groupRef:
148+
name: my-group
147149
config:
148-
groupRef: my-group
149150
# highlight-start
150151
backends:
151152
- name: github-mcp
@@ -336,8 +337,9 @@ restarting the vMCP pod.
336337

337338
```yaml
338339
spec:
340+
groupRef:
341+
name: my-group
339342
config:
340-
groupRef: my-group
341343
backends:
342344
- name: github-mcp
343345
url: http://github-mcp.toolhive-system.svc.cluster.local:8080
@@ -361,9 +363,9 @@ restarting the vMCP pod.
361363

362364
```yaml
363365
spec:
364-
config:
365-
groupRef: my-group
366-
# Remove backends array
366+
groupRef:
367+
name: my-group
368+
# Remove config.backends array if present
367369
outgoingAuth:
368370
source: discovered
369371
```
@@ -420,7 +422,8 @@ metadata:
420422
name: github-mcp
421423
namespace: toolhive-system
422424
spec:
423-
groupRef: engineering-tools
425+
groupRef:
426+
name: engineering-tools
424427
image: ghcr.io/example/github-mcp-server:v1.2.3
425428
transport: sse
426429
externalAuthConfigRef:
@@ -434,8 +437,8 @@ metadata:
434437
name: engineering-vmcp
435438
namespace: toolhive-system
436439
spec:
437-
config:
438-
groupRef: engineering-tools
440+
groupRef:
441+
name: engineering-tools
439442
incomingAuth:
440443
type: oidc
441444
oidc:

docs/toolhive/guides-vmcp/composite-tools.mdx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,9 @@ metadata:
4444
spec:
4545
incomingAuth:
4646
type: anonymous
47+
groupRef:
48+
name: my-tools
4749
config:
48-
groupRef: my-tools
4950
# ... other configuration ...
5051
compositeTools:
5152
- name: my_workflow
@@ -667,8 +668,9 @@ metadata:
667668
spec:
668669
incomingAuth:
669670
type: anonymous
671+
groupRef:
672+
name: research-tools
670673
config:
671-
groupRef: research-tools
672674
aggregation:
673675
conflictResolution: prefix
674676
conflictResolutionConfig:
@@ -718,8 +720,9 @@ spec:
718720

719721
```yaml title="VirtualMCPServer resource"
720722
spec:
723+
groupRef:
724+
name: my-tools
721725
config:
722-
groupRef: my-tools
723726
compositeToolRefs:
724727
- name: my-reusable-workflow
725728
- name: another-workflow

docs/toolhive/guides-vmcp/configuration.mdx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ metadata:
4545
name: fetch
4646
namespace: toolhive-system
4747
spec:
48-
groupRef: my-group # Reference to the MCPGroup
48+
groupRef:
49+
name: my-group # Reference to the MCPGroup
4950
image: ghcr.io/stackloklabs/gofetch/server
5051
transport: streamable-http
5152
```
@@ -62,7 +63,8 @@ metadata:
6263
name: context7-proxy
6364
namespace: toolhive-system
6465
spec:
65-
groupRef: my-group # Reference to the MCPGroup
66+
groupRef:
67+
name: my-group # Reference to the MCPGroup
6668
remoteURL: https://mcp.context7.com/mcp
6769
transport: streamable-http
6870
proxyPort: 8080
@@ -102,7 +104,8 @@ metadata:
102104
name: my-remote-tool
103105
namespace: toolhive-system
104106
spec:
105-
groupRef: my-group # Reference to the MCPGroup
107+
groupRef:
108+
name: my-group # Reference to the MCPGroup
106109
remoteURL: https://mcp.example.com/mcp
107110
transport: streamable-http # or sse
108111
```
@@ -114,7 +117,7 @@ custom headers, and SSRF protection details, see
114117
## Create a VirtualMCPServer
115118

116119
At minimum, a VirtualMCPServer requires a reference to an MCPGroup (via
117-
`config.groupRef`) and an authentication type:
120+
`groupRef`) and an authentication type:
118121

119122
```yaml
120123
apiVersion: toolhive.stacklok.dev/v1alpha1
@@ -123,8 +126,8 @@ metadata:
123126
name: my-vmcp
124127
namespace: toolhive-system
125128
spec:
126-
config:
127-
groupRef: my-group
129+
groupRef:
130+
name: my-group
128131
incomingAuth:
129132
type: anonymous # Disables authentication; do not use in production
130133
```
@@ -202,8 +205,9 @@ metadata:
202205
name: my-vmcp
203206
namespace: toolhive-system
204207
spec:
208+
groupRef:
209+
name: my-group
205210
config:
206-
groupRef: my-group
207211
operational:
208212
failureHandling:
209213
# Health check interval (how often to check each backend)

docs/toolhive/guides-vmcp/failure-handling.mdx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,9 @@ metadata:
7373
name: my-vmcp
7474
namespace: toolhive-system
7575
spec:
76+
groupRef:
77+
name: my-group
7678
config:
77-
groupRef: my-group
7879
# highlight-start
7980
operational:
8081
failureHandling:
@@ -136,8 +137,9 @@ metadata:
136137
name: my-vmcp
137138
namespace: toolhive-system
138139
spec:
140+
groupRef:
141+
name: my-group
139142
config:
140-
groupRef: my-group
141143
operational:
142144
failureHandling:
143145
# highlight-next-line
@@ -269,8 +271,9 @@ metadata:
269271
name: production-vmcp
270272
namespace: toolhive-system
271273
spec:
274+
groupRef:
275+
name: production-backends
272276
config:
273-
groupRef: production-backends
274277
operational:
275278
failureHandling:
276279
# Check every 10 seconds
@@ -303,8 +306,9 @@ metadata:
303306
name: dev-vmcp
304307
namespace: toolhive-system
305308
spec:
309+
groupRef:
310+
name: dev-backends
306311
config:
307-
groupRef: dev-backends
308312
operational:
309313
failureHandling:
310314
healthCheckInterval: 30s

docs/toolhive/guides-vmcp/optimizer.mdx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ spec:
108108
embeddingServerRef:
109109
name: my-embedding
110110
# highlight-end
111-
config:
112-
groupRef: my-group
111+
groupRef:
112+
name: my-group
113113
incomingAuth:
114114
type: anonymous
115115
```
@@ -191,8 +191,9 @@ in your VirtualMCPServer resource:
191191

192192
```yaml title="VirtualMCPServer resource"
193193
spec:
194+
groupRef:
195+
name: my-group
194196
config:
195-
groupRef: my-group
196197
# highlight-start
197198
optimizer:
198199
embeddingServiceTimeout: 30s
@@ -289,8 +290,9 @@ metadata:
289290
spec:
290291
embeddingServerRef:
291292
name: full-embedding
293+
groupRef:
294+
name: my-tools
292295
config:
293-
groupRef: my-tools
294296
optimizer:
295297
embeddingServiceTimeout: 15s
296298
maxToolsToReturn: 10

0 commit comments

Comments
 (0)