Skip to main content
Glama
integration-testing.md6.36 kB
# Integration Testing This project ships with end-to-end integration tests that prove an MCP agent can connect to a live Kubernetes cluster, discover the generated tools, and execute operations. The tests are designed for manual validation on a developer workstation and CI automation. --- ## Table of Contents - [Requirements](#requirements) - [Claude Agent SDK Integration Test](#claude-agent-sdk-integration-test) - [Running the Test](#running-the-test) - [Environment Variables](#environment-variables) - [What the Runner Does](#what-the-runner-does) - [Debugging Tips](#debugging-tips) - [Container Integration Tests](#container-integration-tests) - [Running Container Tests](#running-container-tests) - [Test Files](#test-files) - [What the Test Does](#what-the-test-does) - [Container Test Environment Variables](#container-test-environment-variables) - [Artifacts](#artifacts) --- ## Requirements - Docker Engine (the KIND nodes run as Docker containers) - `kind`, `kubectl`, `npm`, and `npx` available on your `PATH` - `tsx` (installed automatically with project dependencies) - A working Anthropic API configuration (e.g., `ANTHROPIC_API_KEY` already set) - macOS or Linux host with permissions to run Docker > **Note:** Authentication is **not** validated by these scripts - they assume your CLI environment is already authorized before executing any calls. --- ## Claude Agent SDK Integration Test The Claude Agent SDK integration test provisions a disposable KIND cluster, runs the MCP server against it, and drives Claude via the TypeScript Agent SDK so the whole stack is exercised together. ### Running the Test ```bash npm run test:integration ``` ### Environment Variables | Variable | Default | Description | |----------|---------|-------------| | `CLUSTER_NAME` | `mcp-int` | KIND cluster name | | `KIND_BIN` | `kind` | Custom path to the `kind` binary | | `KUBECTL_BIN` | `kubectl` | Custom path to `kubectl` | | `CLAUDE_INT_MODEL` | *(unset)* | Optional override for the Claude model | All generated artifacts (kubeconfig, Claude response JSON, logs) live under `artifacts/integration/`. ### What the Runner Does The `scripts/integration/run-kind-integration.sh` script performs the following: 1. **Cluster Setup** - Spins up a KIND cluster (`kind create cluster --name $CLUSTER_NAME`) 2. **Deploy Workloads** - Applies `tests/fixtures/sample-workload.yaml`, which creates a namespace plus a two-replica StatefulSet so pod names are deterministic 3. **Wait for Ready** - Waits until both pods in `demo-int` are Ready 4. **Build** - Builds the MCP server (`npm run build`) 5. **Run Claude Driver** - Invokes `scripts/integration/claude-driver.ts`, which: - Uses the TypeScript Agent SDK to start the MCP server via stdio transport, attaching Claude to it with the structured-output schema - Runs in bypass-permissions mode so no manual approvals are needed - Prompts Claude to list the pods in `demo-int` and forces JSON output - Writes the structured output to `artifacts/integration/claude-output.json` - When run with `npm run test:integration -- --verbose`, streams key SDK events (tool calls, thinking updates, final result) to the console for debugging 6. **Verify Output** - Runs `scripts/integration/verify-claude-output.ts` to ensure Claude reported both StatefulSet pods (`demo-nginx-0`, `demo-nginx-1`) 7. **Cleanup** - Tears everything down by deleting the KIND cluster If any step fails, the script aborts immediately and still attempts to delete the cluster. ### Debugging Tips - Logs from the runner stream to stdout; rerun with `bash -x` for more detail - KIND clusters stick around only if teardown fails. Inspect them with `kind get clusters` or delete manually via `kind delete cluster --name mcp-int` - The Claude driver writes progress to stdout - review `artifacts/integration/` whenever verification fails > **Note:** CI currently skips this workflow; it is intended for manual validation on a developer workstation. --- ## Container Integration Tests The project also includes automated container integration tests that run in CI. These tests verify the sandbox-server works correctly when deployed as a container in a Kubernetes cluster. ### Running Container Tests ```bash ./scripts/integration/run-container-integration.sh ``` Or with a custom local port (to avoid conflicts): ```bash LOCAL_PORT=50053 ./scripts/integration/run-container-integration.sh ``` ### Test Files | File | Description | |------|-------------| | `scripts/integration/run-container-integration.sh` | Creates KIND cluster, builds/loads Docker image, deploys, and runs tests | | `scripts/integration/container-tests.ts` | TypeScript tests for health check, code execution, K8s API access, caching, and error handling | | `.github/workflows/ci.yml` | The `container-integration` job | ### What the Test Does 1. **Create Cluster** - Creates a KIND cluster (`sandbox-int`) 2. **Build Image** - Builds the sandbox-server Docker image 3. **Load and Deploy** - Loads the image into KIND and deploys using K8s manifests 4. **Port Forward** - Sets up port-forwarding to the sandbox-server service 5. **Run Test Suite** - Verifies: - Health check returns healthy with `inClusterContext` - Simple code and TypeScript execution - Kubernetes API access (list namespaces, list pods) - Script caching - Error and timeout handling 6. **Cleanup** - Cleans up the KIND cluster ### Container Test Environment Variables | Variable | Default | Description | |----------|---------|-------------| | `CLUSTER_NAME` | `sandbox-int` | KIND cluster name for container tests | | `LOCAL_PORT` | `50052` | Local port for port-forwarding (avoids conflicts) | | `KIND_BIN` | `kind` | Custom path to the `kind` binary | | `KUBECTL_BIN` | `kubectl` | Custom path to `kubectl` | ### Artifacts Container integration test artifacts are stored in `artifacts/container-integration/`: | Artifact | Description | |----------|-------------| | `kubeconfig` | Kubeconfig for the test cluster | | `deployment.yaml` | The actual manifest applied to the cluster | --- ## Related Documentation - [gRPC Sandbox Architecture](grpc-sandbox-architecture.md) - Architecture details for the sandbox server being tested - [searchTools Reference](search-tools.md) - Documentation for the API discovery tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/harche/ProDisco'

If you have feedback or need assistance with the MCP directory API, please join our Discord server