FastMCP Test Server
fastmcp/standalone
Deterministic MCP server over Streamable HTTP for testing MCP proxies and gateways
Deploys a small FastMCP server into a local Kind cluster, built for testing anything that sits in front of an MCP server — proxies, gateways, catalogs. It speaks Streamable HTTP and exposes tools, resources, and prompts, with deterministic behavior: the same call always returns the same result.
- Endpoint:
http://localhost:30800/mcpfrom the host,http://fastmcp:8000/mcpfrom inside the cluster. - Tools:
echo,add,multiply,to_upper,concat,word_count,reverse— trim the roster with thetoolsvariable. - Authentication is off by default; set the
authTokenvariable to require a static bearer token.
Install gck#
go install github.com/gravitee-io-labs/gck@latest
For other installation methods, see Installation .
Usage#
Create#
gck create --from fastmcp/standalone
Cleanup#
gck delete
Quick Start#
Run an MCP handshake:
curl -s http://localhost:30800/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"quickstart","version":"1.0"}}}' -i
The response carries an mcp-session-id header; pass it back on subsequent
calls (tools/list, tools/call, resources/list, prompts/list).
To require authentication, deploy with a token — unauthenticated requests
are then rejected with 401:
gck create --from fastmcp/standalone --set authToken=my-secret
The server also serves plain HTTP endpoints next to /mcp:
GET /health— liveness, returns the instance name.POST /admin/tools/hidden_tool/enable(and/disable) — reveals a dormanthidden_toolat runtime, so a test can observe a new upstream tool appearing without redeploying anything.
Testing something that fronts several MCP servers at once? Compose this context with another server product:
gck create --from fastmcp/standalone --from ibm/fast-time-server
Endpoints
Services this context exposes on your machine after gck create, including the ones it inherits from the contexts it composes. Rows marked with a flag only exist when you pass it.
| Service | URL | Notes | From |
|---|---|---|---|
| FastMCP | http://localhost:30800/mcp | fastmcp/standalone |
Variables
Template variables overridable with --set. Use --set path.segments.var=value to target a specific context in the composition chain.
| Variable | Default | Origin | Description |
|---|---|---|---|
clusterName | fastmcp-standalone | fastmcp/standalone | Name of the Kind cluster |
imageRepository | python | fastmcp/standalone | Python Docker image repository used to run the server |
imageTag | 3.14-slim | fastmcp/standalone | Python Docker image tag |
fastmcpVersion | 2.14.7 | fastmcp/standalone | FastMCP version the server is built on, installed at startup |
authToken | (empty) | fastmcp/standalone | Static bearer token callers must present; empty disables authentication |
tools | (empty) | fastmcp/standalone | Comma-separated roster of tools to expose; empty exposes every tool |