deploying-vmcp-locally
Deploys a VirtualMCPServer configuration locally for manual testing and verification
Install
mkdir -p .claude/skills/deploying-vmcp-locally && curl -L -o skill.zip "https://mcp.directory/api/skills/download/5349" && unzip -o skill.zip -d .claude/skills/deploying-vmcp-locally && rm skill.zipInstalls to .claude/skills/deploying-vmcp-locally
About this skill
Deploying vMCP Locally
This skill helps you deploy and test VirtualMCPServer configurations in a local Kind cluster for manual verification.
Prerequisites
Before using this skill, ensure you have:
- Kind installed
- kubectl installed
- Task installed
- Helm installed
- A cloned copy of the toolhive repository
Instructions
1. Set up the local cluster
If no Kind cluster exists, create one with the ToolHive operator:
# From the toolhive repository root
task kind-with-toolhive-operator
This creates a Kind cluster named toolhive with:
- Nginx ingress controller
- ToolHive CRDs installed
- ToolHive operator deployed
2. For development/testing with local changes
If you need to test local code changes:
# Set up cluster with e2e port mappings
task kind-setup-e2e
# Install CRDs
task operator-install-crds
# Build and deploy local operator image
task operator-deploy-local
3. Apply the VirtualMCPServer configuration
Apply the YAML configuration you want to test:
kubectl apply -f <path-to-vmcp-yaml> --kubeconfig kconfig.yaml
4. Verify deployment
Check the VirtualMCPServer status:
# List all VirtualMCPServers
kubectl get virtualmcpserver --kubeconfig kconfig.yaml
# Get detailed status
kubectl get virtualmcpserver <name> -o yaml --kubeconfig kconfig.yaml
# Check operator logs for issues
kubectl logs -n toolhive-system -l app.kubernetes.io/name=thv-operator --kubeconfig kconfig.yaml
5. Test the vMCP endpoint
For NodePort service type (useful for local testing):
# Get the NodePort
kubectl get svc vmcp-<name> -o jsonpath='{.spec.ports[0].nodePort}' --kubeconfig kconfig.yaml
# Test the endpoint (port will be on localhost when using kind-setup-e2e)
curl http://localhost:<nodeport>/mcp
For ClusterIP (default), use port-forward:
kubectl port-forward svc/vmcp-<name> 4483:4483 --kubeconfig kconfig.yaml
curl http://localhost:4483/mcp
6. Test MCP protocol
Use an MCP client to verify tool discovery and execution:
# Initialize MCP session
curl -X POST http://localhost:<port>/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "initialize", "params": {"protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "test", "version": "1.0"}}, "id": 1}'
# List tools
curl -X POST http://localhost:<port>/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "method": "tools/list", "id": 2}'
7. Clean up
When done testing:
# Remove specific resources
kubectl delete -f <path-to-vmcp-yaml> --kubeconfig kconfig.yaml
# Or destroy the entire cluster
task kind-destroy
Example YAML files
Reference example configurations are in examples/operator/virtual-mcps/:
| File | Description |
|---|---|
vmcp_simple_discovered.yaml | Basic discovered mode configuration |
vmcp_conflict_resolution.yaml | Tool conflict handling strategies |
vmcp_inline_incoming_auth.yaml | Inline authentication configuration |
vmcp_production_full.yaml | Full production configuration |
composite_tool_simple.yaml | Simple composite tool workflow |
composite_tool_complex.yaml | Complex multi-step workflows |
composite_tool_with_elicitations.yaml | Workflows with user prompts |
Troubleshooting
VirtualMCPServer stuck in Pending phase
Check that:
- The MCPGroup exists and is Ready
- All backend MCPServers in the group are Running
- The operator has permissions to create the vMCP deployment
kubectl describe virtualmcpserver <name> --kubeconfig kconfig.yaml
kubectl get mcpgroup --kubeconfig kconfig.yaml
kubectl get mcpserver --kubeconfig kconfig.yaml
Backend servers not discovered
Verify backend servers have the correct groupRef:
kubectl get mcpserver -o custom-columns=NAME:.metadata.name,GROUP:.spec.groupRef --kubeconfig kconfig.yaml
Authentication issues
For testing, use anonymous auth:
incomingAuth:
type: anonymous
authzConfig:
type: inline
inline:
policies:
- 'permit(principal, action, resource);'
More by stacklok
View all skills by stacklok →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
fastapi-templates
wshobson
Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.
Related MCP Servers
Browse all serversSeamlessly connect Hugging Face Spaces with your AI assistants for instant access to powerful AI models—no manual setup
Easily connect to your Local by Flywheel WordPress databases. Effortless setup, no manual config—ideal for WordPress dev
Extend your developer tools with GitHub MCP Server for advanced automation, supporting GitHub Student and student packag
Validate Oh My Posh theme configurations quickly and reliably against the official schema to ensure error-free prompts a
Vizro creates and validates data-visualization dashboards from natural language, auto-generating chart code and interact
Basic Memory is a knowledge management system that builds a persistent semantic graph in markdown, locally and securely.
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.