gitextract_h7f056_g/ ├── .chainsaw.yaml ├── .claude/ │ ├── agents/ │ │ ├── bug-triage.md │ │ ├── code-reviewer.md │ │ ├── documentation-writer.md │ │ ├── golang-code-writer.md │ │ ├── kubernetes-expert.md │ │ ├── mcp-protocol-expert.md │ │ ├── oauth-expert.md │ │ ├── security-advisor.md │ │ ├── site-reliability-engineer.md │ │ ├── tech-lead-orchestrator.md │ │ ├── toolhive-expert.md │ │ └── unit-test-writer.md │ ├── rules/ │ │ ├── cli-commands.md │ │ ├── go-style.md │ │ ├── operator.md │ │ ├── pr-creation.md │ │ ├── security.md │ │ ├── testing.md │ │ └── vmcp-anti-patterns.md │ ├── settings.json │ └── skills/ │ ├── add-rule/ │ │ └── SKILL.md │ ├── check-contribution/ │ │ └── SKILL.md │ ├── code-review-assist/ │ │ └── SKILL.md │ ├── deflake/ │ │ ├── SKILL.md │ │ └── collect-flakes.py │ ├── deploy-otel/ │ │ └── SKILL.md │ ├── deploying-vmcp-locally/ │ │ └── SKILL.md │ ├── doc-review/ │ │ ├── CHECKING.md │ │ ├── EXAMPLES.md │ │ └── SKILL.md │ ├── implement-story/ │ │ └── SKILL.md │ ├── pr-review/ │ │ ├── EXAMPLES-INLINE.md │ │ ├── EXAMPLES-REPLY.md │ │ └── SKILL.md │ ├── release-notes/ │ │ ├── SKILL.md │ │ └── TEMPLATE.md │ ├── split-pr/ │ │ └── SKILL.md │ ├── toolhive-release/ │ │ ├── SKILL.md │ │ └── references/ │ │ └── WORKFLOW-REFERENCE.md │ └── vmcp-review/ │ └── SKILL.md ├── .codespellrc ├── .gitattributes ├── .github/ │ ├── CODEOWNERS │ ├── ISSUE_TEMPLATE/ │ │ ├── kubernetes-issue.md │ │ └── report_bug.md │ ├── actions/ │ │ └── compute-version/ │ │ └── action.yml │ ├── ko-ci.yml │ ├── license-header.txt │ ├── pull_request_template.md │ └── workflows/ │ ├── api-compat-noop.yml │ ├── api-compat.yml │ ├── claude.yml │ ├── create-release-pr.yml │ ├── create-release-tag.yml │ ├── e2e-tests.yml │ ├── helm-charts-test.yml │ ├── helm-publish.yml │ ├── image-build-and-publish.yml │ ├── issue-triage.yml │ ├── license-headers.yml │ ├── lint.yml │ ├── operator-ci.yml │ ├── pr-size-justification-template.md │ ├── pr-size-label-apply.yml │ ├── pr-size-labeler.yml │ ├── releaser.yml │ ├── renovate-config-validation.yml │ ├── run-on-main.yml │ ├── run-on-pr.yml │ ├── security-scan.yml │ ├── skills-build-and-publish.yml │ ├── spellcheck.yml │ ├── test-e2e-lifecycle.yml │ ├── test.yml │ ├── verify-docgen.yml │ └── verify-gen.yml ├── .gitignore ├── .golangci.yml ├── .goreleaser.yaml ├── .pre-commit-config.yaml ├── CLAUDE.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── MAINTAINERS.md ├── PROJECT ├── README.md ├── SECURITY.md ├── Taskfile.yml ├── VERSION ├── cmd/ │ ├── help/ │ │ ├── main.go │ │ └── verify.sh │ ├── thv/ │ │ ├── app/ │ │ │ ├── auth_flags.go │ │ │ ├── build.go │ │ │ ├── client.go │ │ │ ├── commands.go │ │ │ ├── common.go │ │ │ ├── common_test.go │ │ │ ├── config.go │ │ │ ├── config_buildauthfile.go │ │ │ ├── config_buildenv.go │ │ │ ├── config_registryauth.go │ │ │ ├── constants.go │ │ │ ├── export.go │ │ │ ├── flag_helpers.go │ │ │ ├── group.go │ │ │ ├── header_flags.go │ │ │ ├── header_flags_test.go │ │ │ ├── inspector/ │ │ │ │ └── version.go │ │ │ ├── inspector.go │ │ │ ├── inspector_test.go │ │ │ ├── list.go │ │ │ ├── llm.go │ │ │ ├── llm_test.go │ │ │ ├── logs.go │ │ │ ├── mcp.go │ │ │ ├── mcp_serve.go │ │ │ ├── otel.go │ │ │ ├── proxy.go │ │ │ ├── proxy_stdio.go │ │ │ ├── proxy_tunnel.go │ │ │ ├── registry.go │ │ │ ├── registry_convert.go │ │ │ ├── registry_convert_test.go │ │ │ ├── registry_login.go │ │ │ ├── registry_logout.go │ │ │ ├── restart.go │ │ │ ├── rm.go │ │ │ ├── run.go │ │ │ ├── run_flags.go │ │ │ ├── run_flags_test.go │ │ │ ├── run_test.go │ │ │ ├── runtime.go │ │ │ ├── search.go │ │ │ ├── secret.go │ │ │ ├── secret_test.go │ │ │ ├── server.go │ │ │ ├── skill.go │ │ │ ├── skill_build.go │ │ │ ├── skill_builds.go │ │ │ ├── skill_builds_remove.go │ │ │ ├── skill_helpers.go │ │ │ ├── skill_info.go │ │ │ ├── skill_install.go │ │ │ ├── skill_list.go │ │ │ ├── skill_push.go │ │ │ ├── skill_uninstall.go │ │ │ ├── skill_validate.go │ │ │ ├── status.go │ │ │ ├── status_test.go │ │ │ ├── stop.go │ │ │ ├── tui.go │ │ │ ├── ui/ │ │ │ │ ├── clients_setup.go │ │ │ │ ├── clients_setup_test.go │ │ │ │ ├── clients_status.go │ │ │ │ ├── help.go │ │ │ │ ├── log_handler.go │ │ │ │ ├── selected_groups_test.go │ │ │ │ ├── spinner.go │ │ │ │ └── styles.go │ │ │ ├── version.go │ │ │ ├── vmcp.go │ │ │ └── vmcp_test.go │ │ └── main.go │ ├── thv-operator/ │ │ ├── DESIGN.md │ │ ├── README.md │ │ ├── REGISTRY.md │ │ ├── Taskfile.yml │ │ ├── api/ │ │ │ ├── v1alpha1/ │ │ │ │ ├── doc.go │ │ │ │ ├── groupversion_info.go │ │ │ │ ├── types.go │ │ │ │ └── zz_generated.deepcopy.go │ │ │ └── v1beta1/ │ │ │ ├── conditions.go │ │ │ ├── embeddingserver_types.go │ │ │ ├── groupversion_info.go │ │ │ ├── mcpexternalauthconfig_types.go │ │ │ ├── mcpexternalauthconfig_types_test.go │ │ │ ├── mcpgroup_types.go │ │ │ ├── mcpoidcconfig_types.go │ │ │ ├── mcpregistry_parse_test.go │ │ │ ├── mcpregistry_types.go │ │ │ ├── mcpremoteproxy_types.go │ │ │ ├── mcpserver_types.go │ │ │ ├── mcpserver_types_test.go │ │ │ ├── mcpserverentry_types.go │ │ │ ├── mcptelemetryconfig_types.go │ │ │ ├── mcptelemetryconfig_types_test.go │ │ │ ├── toolconfig_types.go │ │ │ ├── virtualmcpcompositetooldefinition_types.go │ │ │ ├── virtualmcpserver_types.go │ │ │ ├── virtualmcpserver_types_test.go │ │ │ └── zz_generated.deepcopy.go │ │ ├── config/ │ │ │ └── webhook/ │ │ │ └── manifests.yaml │ │ ├── controllers/ │ │ │ ├── embeddingserver_controller.go │ │ │ ├── embeddingserver_controller_test.go │ │ │ ├── embeddingserver_default_imagepullsecrets_test.go │ │ │ ├── helpers_test.go │ │ │ ├── mcpexternalauthconfig_controller.go │ │ │ ├── mcpexternalauthconfig_controller_test.go │ │ │ ├── mcpgroup_controller.go │ │ │ ├── mcpgroup_controller_test.go │ │ │ ├── mcpoidcconfig_controller.go │ │ │ ├── mcpoidcconfig_controller_test.go │ │ │ ├── mcpregistry_controller.go │ │ │ ├── mcpregistry_controller_test.go │ │ │ ├── mcpremoteproxy_authserverref_test.go │ │ │ ├── mcpremoteproxy_controller.go │ │ │ ├── mcpremoteproxy_controller_test.go │ │ │ ├── mcpremoteproxy_default_imagepullsecrets_test.go │ │ │ ├── mcpremoteproxy_deployment.go │ │ │ ├── mcpremoteproxy_deployment_test.go │ │ │ ├── mcpremoteproxy_reconciler_test.go │ │ │ ├── mcpremoteproxy_runconfig.go │ │ │ ├── mcpremoteproxy_runconfig_test.go │ │ │ ├── mcpremoteproxy_telemetryconfig_test.go │ │ │ ├── mcpserver_authserverref_test.go │ │ │ ├── mcpserver_authz_test.go │ │ │ ├── mcpserver_controller.go │ │ │ ├── mcpserver_default_imagepullsecrets_test.go │ │ │ ├── mcpserver_externalauth_runconfig_test.go │ │ │ ├── mcpserver_externalauth_test.go │ │ │ ├── mcpserver_groupref_test.go │ │ │ ├── mcpserver_invalid_podtemplate_reconcile_test.go │ │ │ ├── mcpserver_oidcconfig_test.go │ │ │ ├── mcpserver_platform_test.go │ │ │ ├── mcpserver_pod_template_test.go │ │ │ ├── mcpserver_podtemplatespec_builder_test.go │ │ │ ├── mcpserver_rbac_test.go │ │ │ ├── mcpserver_replicas_test.go │ │ │ ├── mcpserver_resource_overrides_test.go │ │ │ ├── mcpserver_restart_test.go │ │ │ ├── mcpserver_runconfig.go │ │ │ ├── mcpserver_runconfig_test.go │ │ │ ├── mcpserver_spec_patch_test.go │ │ │ ├── mcpserver_telemetry_cabundle_test.go │ │ │ ├── mcpserver_telemetryconfig.go │ │ │ ├── mcpserver_telemetryconfig_test.go │ │ │ ├── mcpserver_test_helpers_test.go │ │ │ ├── mcpserverentry_controller.go │ │ │ ├── mcpserverentry_controller_test.go │ │ │ ├── mcptelemetryconfig_controller.go │ │ │ ├── mcptelemetryconfig_controller_test.go │ │ │ ├── toolconfig_controller.go │ │ │ ├── toolconfig_controller_edge_cases_test.go │ │ │ ├── toolconfig_controller_test.go │ │ │ ├── virtualmcpserver_controller.go │ │ │ ├── virtualmcpserver_controller_test.go │ │ │ ├── virtualmcpserver_default_imagepullsecrets_test.go │ │ │ ├── virtualmcpserver_deployment.go │ │ │ ├── virtualmcpserver_deployment_test.go │ │ │ ├── virtualmcpserver_embedding.go │ │ │ ├── virtualmcpserver_externalauth_test.go │ │ │ ├── virtualmcpserver_hmac_secret_test.go │ │ │ ├── virtualmcpserver_podtemplatespec_reconcile_test.go │ │ │ ├── virtualmcpserver_podtemplatespec_test.go │ │ │ ├── virtualmcpserver_telemetryconfig.go │ │ │ ├── virtualmcpserver_telemetryconfig_test.go │ │ │ ├── virtualmcpserver_vmcpconfig.go │ │ │ ├── virtualmcpserver_vmcpconfig_test.go │ │ │ └── virtualmcpserver_watch_test.go │ │ ├── main.go │ │ ├── main_test.go │ │ ├── pkg/ │ │ │ ├── controllerutil/ │ │ │ │ ├── authserver.go │ │ │ │ ├── authserver_test.go │ │ │ │ ├── authz.go │ │ │ │ ├── authz_test.go │ │ │ │ ├── config.go │ │ │ │ ├── config_test.go │ │ │ │ ├── doc.go │ │ │ │ ├── externalauth.go │ │ │ │ ├── externalauth_test.go │ │ │ │ ├── maps.go │ │ │ │ ├── maps_test.go │ │ │ │ ├── oidc.go │ │ │ │ ├── oidc_test.go │ │ │ │ ├── oidc_volumes.go │ │ │ │ ├── patch.go │ │ │ │ ├── patch_test.go │ │ │ │ ├── platform.go │ │ │ │ ├── podtemplatespec_builder.go │ │ │ │ ├── podtemplatespec_builder_test.go │ │ │ │ ├── podtemplatespec_patch.go │ │ │ │ ├── podtemplatespec_patch_test.go │ │ │ │ ├── resources.go │ │ │ │ ├── resources_test.go │ │ │ │ ├── status.go │ │ │ │ ├── status_test.go │ │ │ │ ├── telemetry.go │ │ │ │ ├── telemetry_test.go │ │ │ │ ├── telemetry_volumes.go │ │ │ │ ├── telemetry_volumes_test.go │ │ │ │ ├── tokenexchange.go │ │ │ │ ├── tools_config.go │ │ │ │ └── tools_config_test.go │ │ │ ├── httpclient/ │ │ │ │ ├── client.go │ │ │ │ └── client_test.go │ │ │ ├── imagepullsecrets/ │ │ │ │ ├── defaults.go │ │ │ │ └── defaults_test.go │ │ │ ├── kubernetes/ │ │ │ │ ├── client.go │ │ │ │ ├── configmaps/ │ │ │ │ │ ├── configmaps.go │ │ │ │ │ ├── configmaps_test.go │ │ │ │ │ └── doc.go │ │ │ │ ├── doc.go │ │ │ │ ├── rbac/ │ │ │ │ │ ├── doc.go │ │ │ │ │ ├── rbac.go │ │ │ │ │ └── rbac_test.go │ │ │ │ └── secrets/ │ │ │ │ ├── doc.go │ │ │ │ ├── secrets.go │ │ │ │ └── secrets_test.go │ │ │ ├── oidc/ │ │ │ │ ├── mocks/ │ │ │ │ │ └── mock_resolver.go │ │ │ │ ├── resolver.go │ │ │ │ └── resolver_configref_test.go │ │ │ ├── registryapi/ │ │ │ │ ├── config/ │ │ │ │ │ ├── config.go │ │ │ │ │ ├── raw_config.go │ │ │ │ │ └── raw_config_test.go │ │ │ │ ├── deployment.go │ │ │ │ ├── deployment_test.go │ │ │ │ ├── manager.go │ │ │ │ ├── manager_test.go │ │ │ │ ├── mocks/ │ │ │ │ │ └── mock_manager.go │ │ │ │ ├── podtemplatespec.go │ │ │ │ ├── podtemplatespec_test.go │ │ │ │ ├── rbac.go │ │ │ │ ├── rbac_test.go │ │ │ │ ├── service.go │ │ │ │ ├── service_test.go │ │ │ │ ├── types.go │ │ │ │ └── types_test.go │ │ │ ├── runconfig/ │ │ │ │ ├── audit.go │ │ │ │ ├── audit_test.go │ │ │ │ ├── configmap/ │ │ │ │ │ └── checksum/ │ │ │ │ │ ├── checksum.go │ │ │ │ │ └── checksum_test.go │ │ │ │ ├── telemetry.go │ │ │ │ └── telemetry_test.go │ │ │ ├── spectoconfig/ │ │ │ │ ├── telemetry.go │ │ │ │ └── telemetry_test.go │ │ │ ├── validation/ │ │ │ │ ├── cedar_validation.go │ │ │ │ ├── cedar_validation_test.go │ │ │ │ ├── oidc_validation.go │ │ │ │ ├── oidc_validation_test.go │ │ │ │ ├── telemetry_validation.go │ │ │ │ ├── url_validation.go │ │ │ │ └── url_validation_test.go │ │ │ ├── virtualmcpserverstatus/ │ │ │ │ ├── collector.go │ │ │ │ ├── collector_test.go │ │ │ │ ├── mocks/ │ │ │ │ │ └── mock_collector.go │ │ │ │ └── types.go │ │ │ └── vmcpconfig/ │ │ │ ├── converter.go │ │ │ ├── converter_test.go │ │ │ └── validator.go │ │ └── test-integration/ │ │ ├── embedding-server/ │ │ │ ├── embeddingserver_creation_test.go │ │ │ ├── embeddingserver_update_test.go │ │ │ └── suite_test.go │ │ ├── mcp-external-auth/ │ │ │ ├── mcpexternalauthconfig_controller_integration_test.go │ │ │ └── suite_test.go │ │ ├── mcp-group/ │ │ │ ├── mcpgroup_controller_integration_test.go │ │ │ └── suite_test.go │ │ ├── mcp-oidc-config/ │ │ │ ├── mcpoidcconfig_controller_integration_test.go │ │ │ ├── mcpoidcconfig_mcpremoteproxy_integration_test.go │ │ │ ├── mcpoidcconfig_mcpserver_integration_test.go │ │ │ ├── mcpoidcconfig_virtualmcpserver_integration_test.go │ │ │ └── suite_test.go │ │ ├── mcp-registry/ │ │ │ ├── configmap_helpers.go │ │ │ ├── deployment_update_test.go │ │ │ ├── doc.go │ │ │ ├── k8s_helpers.go │ │ │ ├── registry_helpers.go │ │ │ ├── registry_lifecycle_test.go │ │ │ ├── registry_server_rbac_test.go │ │ │ ├── registryserver_config_test.go │ │ │ ├── status_helpers.go │ │ │ ├── suite_test.go │ │ │ └── timing_helpers.go │ │ ├── mcp-remote-proxy/ │ │ │ ├── k8s_helpers.go │ │ │ ├── mcpremoteproxy_authserverref_integration_test.go │ │ │ ├── mcpremoteproxy_controller_integration_test.go │ │ │ ├── mcpremoteproxy_imagepullsecrets_drift_test.go │ │ │ ├── mcpremoteproxy_validation_integration_test.go │ │ │ ├── remoteproxy_helpers.go │ │ │ ├── status_helpers.go │ │ │ └── suite_test.go │ │ ├── mcp-server/ │ │ │ ├── mcpserver_authserverref_integration_test.go │ │ │ ├── mcpserver_cel_validation_integration_test.go │ │ │ ├── mcpserver_controller_integration_test.go │ │ │ ├── mcpserver_imagepullsecrets_drift_test.go │ │ │ ├── mcpserver_runconfig_integration_test.go │ │ │ ├── mcpserver_sessionstorage_cel_test.go │ │ │ ├── mcpserver_spec_patch_integration_test.go │ │ │ └── suite_test.go │ │ ├── mcp-telemetry-config/ │ │ │ ├── mcptelemetryconfig_controller_integration_test.go │ │ │ └── suite_test.go │ │ ├── mcp-toolconfig/ │ │ │ ├── mcptoolconfig_controller_integration_test.go │ │ │ └── suite_test.go │ │ └── virtualmcp/ │ │ ├── suite_test.go │ │ ├── virtualmcpserver_compositetool_watch_test.go │ │ ├── virtualmcpserver_elicitation_integration_test.go │ │ ├── virtualmcpserver_externalauth_watch_test.go │ │ ├── virtualmcpserver_imagepullsecrets_integration_test.go │ │ ├── virtualmcpserver_podtemplatespec_integration_test.go │ │ ├── virtualmcpserver_replicas_integration_test.go │ │ ├── virtualmcpserver_sessionstorage_cel_test.go │ │ └── virtualmcpserver_telemetryconfig_integration_test.go │ ├── thv-proxyrunner/ │ │ ├── app/ │ │ │ ├── commands.go │ │ │ └── run.go │ │ └── main.go │ └── vmcp/ │ ├── README.md │ ├── app/ │ │ └── commands.go │ └── main.go ├── codecov.yaml ├── config/ │ └── webhook/ │ └── manifests.yaml ├── containers/ │ └── egress-proxy/ │ └── Dockerfile ├── copilot_instructions.md ├── cr.yaml ├── ct.yaml ├── dco.md ├── deploy/ │ ├── charts/ │ │ ├── _templates.gotmpl │ │ ├── operator/ │ │ │ ├── .helmignore │ │ │ ├── CONTRIBUTING.md │ │ │ ├── Chart.yaml │ │ │ ├── README.md │ │ │ ├── README.md.gotmpl │ │ │ ├── ci/ │ │ │ │ ├── autoScalingEnabled-values.yaml │ │ │ │ ├── default-values.yaml │ │ │ │ ├── extraEnvVars-values.yaml │ │ │ │ ├── extraPodAndContainerSecurityContext-values.yaml │ │ │ │ ├── extraPodAnnotationsAndLabels-values.yaml │ │ │ │ └── extraVolumes-values.yaml │ │ │ ├── templates/ │ │ │ │ ├── _helpers.tpl │ │ │ │ ├── clusterrole/ │ │ │ │ │ ├── role.yaml │ │ │ │ │ └── rolebinding.yaml │ │ │ │ ├── deployment.yaml │ │ │ │ ├── hpa.yaml │ │ │ │ ├── leader-election-role.yaml │ │ │ │ └── serviceaccount.yaml │ │ │ └── values.yaml │ │ └── operator-crds/ │ │ ├── .helmignore │ │ ├── CONTRIBUTING.md │ │ ├── Chart.yaml │ │ ├── README.md │ │ ├── README.md.gotmpl │ │ ├── ci/ │ │ │ └── default-values.yaml │ │ ├── files/ │ │ │ └── crds/ │ │ │ ├── toolhive.stacklok.dev_embeddingservers.yaml │ │ │ ├── toolhive.stacklok.dev_mcpexternalauthconfigs.yaml │ │ │ ├── toolhive.stacklok.dev_mcpgroups.yaml │ │ │ ├── toolhive.stacklok.dev_mcpoidcconfigs.yaml │ │ │ ├── toolhive.stacklok.dev_mcpregistries.yaml │ │ │ ├── toolhive.stacklok.dev_mcpremoteproxies.yaml │ │ │ ├── toolhive.stacklok.dev_mcpserverentries.yaml │ │ │ ├── toolhive.stacklok.dev_mcpservers.yaml │ │ │ ├── toolhive.stacklok.dev_mcptelemetryconfigs.yaml │ │ │ ├── toolhive.stacklok.dev_mcptoolconfigs.yaml │ │ │ ├── toolhive.stacklok.dev_virtualmcpcompositetooldefinitions.yaml │ │ │ └── toolhive.stacklok.dev_virtualmcpservers.yaml │ │ ├── templates/ │ │ │ ├── toolhive.stacklok.dev_embeddingservers.yaml │ │ │ ├── toolhive.stacklok.dev_mcpexternalauthconfigs.yaml │ │ │ ├── toolhive.stacklok.dev_mcpgroups.yaml │ │ │ ├── toolhive.stacklok.dev_mcpoidcconfigs.yaml │ │ │ ├── toolhive.stacklok.dev_mcpregistries.yaml │ │ │ ├── toolhive.stacklok.dev_mcpremoteproxies.yaml │ │ │ ├── toolhive.stacklok.dev_mcpserverentries.yaml │ │ │ ├── toolhive.stacklok.dev_mcpservers.yaml │ │ │ ├── toolhive.stacklok.dev_mcptelemetryconfigs.yaml │ │ │ ├── toolhive.stacklok.dev_mcptoolconfigs.yaml │ │ │ ├── toolhive.stacklok.dev_virtualmcpcompositetooldefinitions.yaml │ │ │ └── toolhive.stacklok.dev_virtualmcpservers.yaml │ │ └── values.yaml │ └── keycloak/ │ ├── README.md │ ├── keycloak-dev.yaml │ ├── mcpserver-with-auth.yaml │ └── setup-realm.sh ├── docs/ │ ├── README.md │ ├── arch/ │ │ ├── 00-overview.md │ │ ├── 01-deployment-modes.md │ │ ├── 02-core-concepts.md │ │ ├── 03-transport-architecture.md │ │ ├── 04-secrets-management.md │ │ ├── 05-runconfig-and-permissions.md │ │ ├── 06-registry-system.md │ │ ├── 07-groups.md │ │ ├── 08-workloads-lifecycle.md │ │ ├── 09-operator-architecture.md │ │ ├── 10-virtual-mcp-architecture.md │ │ ├── 11-auth-server-storage.md │ │ ├── 12-skills-system.md │ │ ├── 13-vmcp-scalability.md │ │ ├── README.md │ │ ├── vmcp-library.md │ │ └── vmcp-local.md │ ├── authz.md │ ├── cli/ │ │ ├── thv.md │ │ ├── thv_build.md │ │ ├── thv_client.md │ │ ├── thv_client_list-registered.md │ │ ├── thv_client_register.md │ │ ├── thv_client_remove.md │ │ ├── thv_client_setup.md │ │ ├── thv_client_status.md │ │ ├── thv_config.md │ │ ├── thv_config_get-build-auth-file.md │ │ ├── thv_config_get-build-env.md │ │ ├── thv_config_get-ca-cert.md │ │ ├── thv_config_get-registry.md │ │ ├── thv_config_otel.md │ │ ├── thv_config_otel_get-enable-prometheus-metrics-path.md │ │ ├── thv_config_otel_get-endpoint.md │ │ ├── thv_config_otel_get-env-vars.md │ │ ├── thv_config_otel_get-insecure.md │ │ ├── thv_config_otel_get-metrics-enabled.md │ │ ├── thv_config_otel_get-sampling-rate.md │ │ ├── thv_config_otel_get-tracing-enabled.md │ │ ├── thv_config_otel_set-enable-prometheus-metrics-path.md │ │ ├── thv_config_otel_set-endpoint.md │ │ ├── thv_config_otel_set-env-vars.md │ │ ├── thv_config_otel_set-insecure.md │ │ ├── thv_config_otel_set-metrics-enabled.md │ │ ├── thv_config_otel_set-sampling-rate.md │ │ ├── thv_config_otel_set-tracing-enabled.md │ │ ├── thv_config_otel_unset-enable-prometheus-metrics-path.md │ │ ├── thv_config_otel_unset-endpoint.md │ │ ├── thv_config_otel_unset-env-vars.md │ │ ├── thv_config_otel_unset-insecure.md │ │ ├── thv_config_otel_unset-metrics-enabled.md │ │ ├── thv_config_otel_unset-sampling-rate.md │ │ ├── thv_config_otel_unset-tracing-enabled.md │ │ ├── thv_config_set-build-auth-file.md │ │ ├── thv_config_set-build-env.md │ │ ├── thv_config_set-ca-cert.md │ │ ├── thv_config_set-registry.md │ │ ├── thv_config_unset-build-auth-file.md │ │ ├── thv_config_unset-build-env.md │ │ ├── thv_config_unset-ca-cert.md │ │ ├── thv_config_unset-registry.md │ │ ├── thv_config_usage-metrics.md │ │ ├── thv_export.md │ │ ├── thv_group.md │ │ ├── thv_group_create.md │ │ ├── thv_group_list.md │ │ ├── thv_group_rm.md │ │ ├── thv_inspector.md │ │ ├── thv_list.md │ │ ├── thv_logs.md │ │ ├── thv_logs_prune.md │ │ ├── thv_mcp.md │ │ ├── thv_mcp_list.md │ │ ├── thv_mcp_list_prompts.md │ │ ├── thv_mcp_list_resources.md │ │ ├── thv_mcp_list_tools.md │ │ ├── thv_mcp_serve.md │ │ ├── thv_proxy.md │ │ ├── thv_proxy_stdio.md │ │ ├── thv_proxy_tunnel.md │ │ ├── thv_registry.md │ │ ├── thv_registry_convert.md │ │ ├── thv_registry_info.md │ │ ├── thv_registry_list.md │ │ ├── thv_registry_login.md │ │ ├── thv_registry_logout.md │ │ ├── thv_rm.md │ │ ├── thv_run.md │ │ ├── thv_runtime.md │ │ ├── thv_runtime_check.md │ │ ├── thv_search.md │ │ ├── thv_secret.md │ │ ├── thv_secret_delete.md │ │ ├── thv_secret_get.md │ │ ├── thv_secret_list.md │ │ ├── thv_secret_provider.md │ │ ├── thv_secret_reset-keyring.md │ │ ├── thv_secret_set.md │ │ ├── thv_secret_setup.md │ │ ├── thv_serve.md │ │ ├── thv_skill.md │ │ ├── thv_skill_build.md │ │ ├── thv_skill_builds.md │ │ ├── thv_skill_builds_remove.md │ │ ├── thv_skill_info.md │ │ ├── thv_skill_install.md │ │ ├── thv_skill_list.md │ │ ├── thv_skill_push.md │ │ ├── thv_skill_uninstall.md │ │ ├── thv_skill_validate.md │ │ ├── thv_start.md │ │ ├── thv_status.md │ │ ├── thv_stop.md │ │ ├── thv_tui.md │ │ ├── thv_version.md │ │ ├── thv_vmcp.md │ │ ├── thv_vmcp_init.md │ │ ├── thv_vmcp_serve.md │ │ └── thv_vmcp_validate.md │ ├── cli-best-practices.md │ ├── error-handling.md │ ├── examples/ │ │ ├── webhooks.json │ │ └── webhooks.yaml │ ├── kind/ │ │ ├── deploying-mcp-server-with-operator.md │ │ ├── deploying-toolhive-operator.md │ │ ├── ingress-port-forward.md │ │ ├── ingress.md │ │ └── setup-kind-cluster.md │ ├── logging.md │ ├── middleware.md │ ├── observability.md │ ├── operator/ │ │ ├── advanced-workflow-patterns.md │ │ ├── composite-tools-quick-reference.md │ │ ├── crd-api.md │ │ ├── crd-ref-config.yaml │ │ ├── restart-annotation.md │ │ ├── templates/ │ │ │ └── markdown/ │ │ │ ├── gv_details.tpl │ │ │ ├── gv_list.tpl │ │ │ ├── type.tpl │ │ │ └── type_members.tpl │ │ ├── toolconfig-reconciliation.md │ │ ├── virtualmcpcompositetooldefinition-guide.md │ │ ├── virtualmcpserver-api.md │ │ ├── virtualmcpserver-kubernetes-guide.md │ │ └── virtualmcpserver-observability.md │ ├── proposals/ │ │ └── README.md │ ├── redis-storage.md │ ├── registry/ │ │ ├── heuristics.md │ │ ├── management.md │ │ └── schema.md │ ├── remote-mcp-authentication.md │ ├── runtime-implementation-guide.md │ ├── runtime-version-customization.md │ ├── server/ │ │ ├── README.md │ │ ├── docs.go │ │ ├── swagger.json │ │ └── swagger.yaml │ └── telemetry-migration-guide.md ├── examples/ │ ├── authz-config-with-entities.json │ ├── authz-config.json │ ├── authz-httpv1-config.yaml │ ├── mcpserver-with-audit.yaml │ ├── operator/ │ │ ├── embedding-servers/ │ │ │ ├── README.md │ │ │ ├── basic-embedding.yaml │ │ │ ├── embedding-advanced.yaml │ │ │ └── embedding-with-cache.yaml │ │ ├── external-auth/ │ │ │ ├── complete_example.yaml │ │ │ ├── mcpexternalauthconfig_basic.yaml │ │ │ ├── mcpexternalauthconfig_minimal.yaml │ │ │ ├── mcpremoteproxy_with_bearer_token.yaml │ │ │ └── mcpserver_with_external_auth.yaml │ │ ├── mcp-registries/ │ │ │ ├── mcpregistry-configyaml-api.yaml │ │ │ ├── mcpregistry-configyaml-configmap.yaml │ │ │ ├── mcpregistry-configyaml-git-auth.yaml │ │ │ ├── mcpregistry-configyaml-minimal.yaml │ │ │ ├── mcpregistry-configyaml-oauth.yaml │ │ │ └── mcpregistry-configyaml-pgpass.yaml │ │ ├── mcp-server-entries/ │ │ │ ├── mcpserverentry_basic.yaml │ │ │ ├── mcpserverentry_mixed_group.yaml │ │ │ ├── mcpserverentry_with_ca_bundle.yaml │ │ │ ├── mcpserverentry_with_header_forward.yaml │ │ │ └── mcpserverentry_with_token_exchange.yaml │ │ ├── mcp-servers/ │ │ │ ├── mcpremoteproxy_with_oidcconfig_ref.yaml │ │ │ ├── mcpserver_fetch.yaml │ │ │ ├── mcpserver_fetch_otel.yaml │ │ │ ├── mcpserver_fetch_tools_filter.yaml │ │ │ ├── mcpserver_github.yaml │ │ │ ├── mcpserver_mkp.yaml │ │ │ ├── mcpserver_with_oidcconfig_ref.yaml │ │ │ ├── mcpserver_with_pod_template.yaml │ │ │ ├── mcpserver_with_resource_overrides.yaml │ │ │ ├── mcpserver_with_restart_strategy.yaml │ │ │ ├── mcpserver_yardstick_sse.yaml │ │ │ ├── mcpserver_yardstick_stdio.yaml │ │ │ └── mcpserver_yardstick_streamablehttp.yaml │ │ ├── redis-storage/ │ │ │ ├── mcpexternalauthconfig-redis-storage.yaml │ │ │ ├── redis-credentials.yaml │ │ │ ├── redis-failover.yaml │ │ │ └── sentinel-service.yaml │ │ ├── tool-configs/ │ │ │ ├── toolconfig_basic.yaml │ │ │ └── toolconfig_with_overrides.yaml │ │ ├── vault/ │ │ │ ├── mcpserver-github-with-vault.yaml │ │ │ └── setup-vault-dev.sh │ │ └── virtual-mcps/ │ │ ├── composite_tool_complex.yaml │ │ ├── composite_tool_simple.yaml │ │ ├── composite_tool_with_elicitations.yaml │ │ ├── vmcp_conflict_resolution.yaml │ │ ├── vmcp_inline_incoming_auth.yaml │ │ ├── vmcp_optimizer_all_options.yaml │ │ ├── vmcp_optimizer_quickstart.yaml │ │ ├── vmcp_production_full.yaml │ │ ├── vmcp_simple_discovered.yaml │ │ ├── vmcp_with_oidcconfig_ref.yaml │ │ └── vmcp_with_telemetry_ref.yaml │ ├── otel/ │ │ ├── README.md │ │ ├── grafana-dashboards/ │ │ │ ├── toolhive-cli-mcp-grafana-dashboard-otel-scrape.json │ │ │ ├── toolhive-mcp-grafana-dashboard-otel-remotewrite.json │ │ │ ├── toolhive-mcp-grafana-dashboard-otel-scrape.json │ │ │ └── toolhive-mcp-otel-semconv-dashboard.json │ │ ├── otel-values.yaml │ │ ├── prometheus-stack-values.yaml │ │ └── tempo-values.yaml │ ├── registry-with-remote-servers.json │ └── vmcp-config.yaml ├── go.mod ├── go.sum ├── hack/ │ └── boilerplate.go.txt ├── pkg/ │ ├── api/ │ │ ├── docs.go │ │ ├── errors/ │ │ │ ├── handler.go │ │ │ └── handler_test.go │ │ ├── openapi.go │ │ ├── request_size_test.go │ │ ├── scalar.go │ │ ├── server.go │ │ ├── server_test.go │ │ └── v1/ │ │ ├── clients.go │ │ ├── discovery.go │ │ ├── groups.go │ │ ├── groups_test.go │ │ ├── healthcheck.go │ │ ├── healthcheck_test.go │ │ ├── registry.go │ │ ├── registry_factory_test.go │ │ ├── registry_test.go │ │ ├── registry_timeout_test.go │ │ ├── registry_v01.go │ │ ├── registry_v01_servers.go │ │ ├── registry_v01_servers_test.go │ │ ├── registry_v01_skills.go │ │ ├── registry_v01_skills_test.go │ │ ├── secrets.go │ │ ├── secrets_test.go │ │ ├── skills.go │ │ ├── skills_test.go │ │ ├── skills_types.go │ │ ├── version.go │ │ ├── version_test.go │ │ ├── workload_service.go │ │ ├── workload_service_test.go │ │ ├── workload_types.go │ │ ├── workloads.go │ │ ├── workloads_test.go │ │ └── workloads_types_test.go │ ├── audit/ │ │ ├── auditor.go │ │ ├── auditor_test.go │ │ ├── backend_info_test.go │ │ ├── config.go │ │ ├── config_test.go │ │ ├── doc.go │ │ ├── event.go │ │ ├── event_test.go │ │ ├── mcp_events.go │ │ ├── middleware.go │ │ ├── middleware_test.go │ │ ├── workflow_auditor.go │ │ ├── workflow_auditor_test.go │ │ └── zz_generated.deepcopy.go │ ├── auth/ │ │ ├── anonymous.go │ │ ├── anonymous_test.go │ │ ├── awssts/ │ │ │ ├── config.go │ │ │ ├── errors.go │ │ │ ├── exchange.go │ │ │ ├── exchange_test.go │ │ │ ├── middleware.go │ │ │ ├── middleware_test.go │ │ │ ├── role_mapper.go │ │ │ ├── role_mapper_test.go │ │ │ ├── signer.go │ │ │ └── signer_test.go │ │ ├── context.go │ │ ├── context_test.go │ │ ├── discovery/ │ │ │ ├── dcr_request.go │ │ │ ├── discovery.go │ │ │ ├── discovery_test.go │ │ │ └── resource_metadata_test.go │ │ ├── github_provider.go │ │ ├── github_provider_test.go │ │ ├── identity.go │ │ ├── identity_test.go │ │ ├── local.go │ │ ├── local_test.go │ │ ├── middleware.go │ │ ├── middleware_test.go │ │ ├── monitored_token_source.go │ │ ├── monitored_token_source_test.go │ │ ├── oauth/ │ │ │ ├── flow.go │ │ │ ├── flow_test.go │ │ │ ├── manual.go │ │ │ ├── manual_test.go │ │ │ ├── non_caching_refresher.go │ │ │ ├── oidc.go │ │ │ ├── oidc_test.go │ │ │ ├── resource_token_source.go │ │ │ └── resource_token_source_test.go │ │ ├── remote/ │ │ │ ├── bearer_token_source.go │ │ │ ├── bearer_token_source_test.go │ │ │ ├── config.go │ │ │ ├── config_test.go │ │ │ ├── doc.go │ │ │ ├── handler.go │ │ │ ├── handler_test.go │ │ │ ├── handler_test_helpers_test.go │ │ │ ├── persisting_token_source.go │ │ │ └── persisting_token_source_test.go │ │ ├── secrets/ │ │ │ ├── secrets.go │ │ │ └── secrets_test.go │ │ ├── token.go │ │ ├── token_test.go │ │ ├── tokenexchange/ │ │ │ ├── exchange.go │ │ │ ├── exchange_test.go │ │ │ ├── middleware.go │ │ │ └── middleware_test.go │ │ ├── tokensource/ │ │ │ ├── preemptive_test.go │ │ │ ├── tokensource.go │ │ │ └── tokensource_test.go │ │ ├── upstreamswap/ │ │ │ ├── middleware.go │ │ │ └── middleware_test.go │ │ ├── upstreamtoken/ │ │ │ ├── errors.go │ │ │ ├── mocks/ │ │ │ │ └── mock_token_reader.go │ │ │ ├── service.go │ │ │ ├── service_test.go │ │ │ └── types.go │ │ ├── utils.go │ │ ├── utils_test.go │ │ ├── well_known.go │ │ └── well_known_test.go │ ├── authserver/ │ │ ├── config.go │ │ ├── config_test.go │ │ ├── docs.go │ │ ├── integration_test.go │ │ ├── oauthparams/ │ │ │ └── reserved.go │ │ ├── refresher.go │ │ ├── refresher_test.go │ │ ├── runner/ │ │ │ ├── dcr.go │ │ │ ├── dcr_store.go │ │ │ ├── dcr_store_test.go │ │ │ ├── dcr_test.go │ │ │ ├── embeddedauthserver.go │ │ │ ├── embeddedauthserver_test.go │ │ │ └── redis_tls_test.go │ │ ├── server/ │ │ │ ├── audience.go │ │ │ ├── audience_test.go │ │ │ ├── crypto/ │ │ │ │ ├── keys.go │ │ │ │ ├── keys_test.go │ │ │ │ ├── pkce.go │ │ │ │ └── pkce_test.go │ │ │ ├── doc.go │ │ │ ├── handlers/ │ │ │ │ ├── authorize.go │ │ │ │ ├── authorize_test.go │ │ │ │ ├── callback.go │ │ │ │ ├── callback_test.go │ │ │ │ ├── dcr.go │ │ │ │ ├── dcr_test.go │ │ │ │ ├── discovery.go │ │ │ │ ├── doc.go │ │ │ │ ├── handler.go │ │ │ │ ├── handler_chain_test.go │ │ │ │ ├── handlers_test.go │ │ │ │ ├── helpers_test.go │ │ │ │ ├── token.go │ │ │ │ ├── token_test.go │ │ │ │ ├── user.go │ │ │ │ └── user_test.go │ │ │ ├── keys/ │ │ │ │ ├── config.go │ │ │ │ ├── mocks/ │ │ │ │ │ └── mock_provider.go │ │ │ │ ├── provider.go │ │ │ │ ├── provider_test.go │ │ │ │ └── types.go │ │ │ ├── provider.go │ │ │ ├── provider_test.go │ │ │ ├── registration/ │ │ │ │ ├── client.go │ │ │ │ ├── client_test.go │ │ │ │ ├── dcr.go │ │ │ │ └── dcr_test.go │ │ │ └── session/ │ │ │ ├── session.go │ │ │ └── session_test.go │ │ ├── server.go │ │ ├── server_impl.go │ │ ├── server_test.go │ │ ├── storage/ │ │ │ ├── config.go │ │ │ ├── doc.go │ │ │ ├── memory.go │ │ │ ├── memory_test.go │ │ │ ├── mocks/ │ │ │ │ └── mock_storage.go │ │ │ ├── redis.go │ │ │ ├── redis_integration_test.go │ │ │ ├── redis_keys.go │ │ │ ├── redis_migrate.go │ │ │ ├── redis_test.go │ │ │ ├── redis_tls_test.go │ │ │ ├── types.go │ │ │ └── types_test.go │ │ └── upstream/ │ │ ├── doc.go │ │ ├── mocks/ │ │ │ └── mock_provider.go │ │ ├── oauth2.go │ │ ├── oauth2_test.go │ │ ├── oidc.go │ │ ├── oidc_test.go │ │ ├── token_exchange.go │ │ ├── token_exchange_test.go │ │ ├── tokens.go │ │ ├── tokens_test.go │ │ ├── types.go │ │ ├── userinfo_config.go │ │ └── userinfo_config_test.go │ ├── authz/ │ │ ├── annotation_cache.go │ │ ├── annotation_cache_test.go │ │ ├── authorizers/ │ │ │ ├── annotations.go │ │ │ ├── annotations_test.go │ │ │ ├── cedar/ │ │ │ │ ├── annotations_integration_test.go │ │ │ │ ├── annotations_override_test.go │ │ │ │ ├── core.go │ │ │ │ ├── core_test.go │ │ │ │ ├── entity.go │ │ │ │ ├── entity_test.go │ │ │ │ └── record_test.go │ │ │ ├── config.go │ │ │ ├── config_test.go │ │ │ ├── core.go │ │ │ ├── http/ │ │ │ │ ├── claim_mapper.go │ │ │ │ ├── claim_mapper_test.go │ │ │ │ ├── config.go │ │ │ │ ├── config_test.go │ │ │ │ ├── core.go │ │ │ │ ├── core_test.go │ │ │ │ ├── enrichment_test.go │ │ │ │ ├── http_client.go │ │ │ │ ├── http_client_test.go │ │ │ │ ├── integration_test.go │ │ │ │ ├── porc.go │ │ │ │ └── porc_test.go │ │ │ ├── registry.go │ │ │ └── registry_test.go │ │ ├── authorizers.go │ │ ├── config.go │ │ ├── config_test.go │ │ ├── integration_test.go │ │ ├── middleware.go │ │ ├── middleware_test.go │ │ ├── response_filter.go │ │ ├── response_filter_test.go │ │ ├── tool_filter.go │ │ └── tool_filter_test.go │ ├── cache/ │ │ ├── validating_cache.go │ │ └── validating_cache_test.go │ ├── certs/ │ │ ├── validation.go │ │ └── validation_test.go │ ├── cli/ │ │ ├── tools_override.go │ │ └── tools_override_test.go │ ├── client/ │ │ ├── config.go │ │ ├── config_editor.go │ │ ├── config_editor_test.go │ │ ├── config_test.go │ │ ├── converter.go │ │ ├── converter_test.go │ │ ├── discovery.go │ │ ├── discovery_test.go │ │ ├── filter.go │ │ ├── filter_test.go │ │ ├── llm_gateway.go │ │ ├── llm_gateway_test.go │ │ ├── manager.go │ │ ├── mocks/ │ │ │ └── mock_manager.go │ │ ├── skills.go │ │ ├── skills_test.go │ │ └── test_support.go │ ├── config/ │ │ ├── buildauthfile.go │ │ ├── buildauthfile_test.go │ │ ├── buildenv.go │ │ ├── buildenv_test.go │ │ ├── cacert.go │ │ ├── cacert_test.go │ │ ├── config.go │ │ ├── config_test.go │ │ ├── errors.go │ │ ├── errors_test.go │ │ ├── factory.go │ │ ├── factory_test.go │ │ ├── interface.go │ │ ├── interface_test.go │ │ ├── mocks/ │ │ │ └── mock_provider.go │ │ ├── registry.go │ │ ├── registry_test.go │ │ ├── singleton.go │ │ ├── validation.go │ │ └── validation_test.go │ ├── container/ │ │ ├── docker/ │ │ │ ├── client.go │ │ │ ├── client_config_test.go │ │ │ ├── client_create_test.go │ │ │ ├── client_deploy_test.go │ │ │ ├── client_final_port_linux.go │ │ │ ├── client_final_port_other.go │ │ │ ├── client_helpers_test.go │ │ │ ├── client_info_test.go │ │ │ ├── client_list_test.go │ │ │ ├── client_partial_match_test.go │ │ │ ├── client_stop_test.go │ │ │ ├── errors.go │ │ │ ├── mocks_test.go │ │ │ ├── register.go │ │ │ ├── sdk/ │ │ │ │ ├── client_unix.go │ │ │ │ ├── client_unix_test.go │ │ │ │ ├── client_windows.go │ │ │ │ └── factory.go │ │ │ ├── squid.go │ │ │ └── squid_test.go │ │ ├── factory.go │ │ ├── factory_test.go │ │ ├── images/ │ │ │ ├── image.go │ │ │ ├── keychain.go │ │ │ └── registry.go │ │ ├── kubernetes/ │ │ │ ├── client.go │ │ │ ├── client_test.go │ │ │ ├── common.go │ │ │ ├── common_test.go │ │ │ ├── configmap.go │ │ │ ├── configmap_test.go │ │ │ ├── mocks/ │ │ │ │ └── mock_configmap.go │ │ │ ├── register.go │ │ │ ├── security.go │ │ │ └── security_test.go │ │ ├── name.go │ │ ├── name_test.go │ │ ├── runtime/ │ │ │ ├── errors.go │ │ │ ├── errors_test.go │ │ │ ├── mocks/ │ │ │ │ └── mock_runtime.go │ │ │ ├── monitor.go │ │ │ ├── monitor_test.go │ │ │ ├── registry.go │ │ │ ├── registry_test.go │ │ │ └── types.go │ │ ├── runtimes.go │ │ └── templates/ │ │ ├── go.tmpl │ │ ├── npx.tmpl │ │ ├── runtime_config.go │ │ ├── runtime_config_test.go │ │ ├── templates.go │ │ ├── templates_test.go │ │ └── uvx.tmpl │ ├── core/ │ │ ├── workload.go │ │ └── workload_test.go │ ├── desktop/ │ │ ├── marker.go │ │ ├── types.go │ │ ├── validation.go │ │ └── validation_test.go │ ├── environment/ │ │ ├── environment.go │ │ └── environment_test.go │ ├── export/ │ │ ├── k8s.go │ │ └── k8s_test.go │ ├── fileutils/ │ │ ├── atomic.go │ │ ├── atomic_test.go │ │ ├── contained.go │ │ ├── lock.go │ │ ├── validation.go │ │ └── validation_test.go │ ├── foreach/ │ │ ├── foreach.go │ │ └── foreach_test.go │ ├── git/ │ │ ├── client.go │ │ ├── client_test.go │ │ ├── doc.go │ │ ├── fs.go │ │ ├── integration_test.go │ │ └── types.go │ ├── groups/ │ │ ├── cli_manager.go │ │ ├── cli_manager_test.go │ │ ├── crd_manager.go │ │ ├── crd_manager_test.go │ │ ├── errors.go │ │ ├── group.go │ │ ├── manager.go │ │ ├── mocks/ │ │ │ └── mock_manager.go │ │ ├── skills.go │ │ └── skills_test.go │ ├── healthcheck/ │ │ ├── healthcheck.go │ │ └── healthcheck_test.go │ ├── ignore/ │ │ ├── processor.go │ │ └── processor_test.go │ ├── json/ │ │ └── any.go │ ├── k8s/ │ │ ├── client.go │ │ ├── client_test.go │ │ ├── config.go │ │ ├── config_test.go │ │ ├── doc.go │ │ ├── namespace.go │ │ ├── namespace_test.go │ │ └── test_helpers.go │ ├── labels/ │ │ ├── labels.go │ │ └── labels_test.go │ ├── llm/ │ │ ├── config.go │ │ ├── config_test.go │ │ ├── doc.go │ │ ├── manage.go │ │ ├── manage_test.go │ │ ├── proxy/ │ │ │ ├── proxy.go │ │ │ └── proxy_test.go │ │ ├── setup.go │ │ ├── setup_test.go │ │ ├── tokensource.go │ │ └── tokensource_test.go │ ├── llmgateway/ │ │ └── config.go │ ├── lockfile/ │ │ ├── cleanup.go │ │ └── cleanup_test.go │ ├── mcp/ │ │ ├── client/ │ │ │ └── client.go │ │ ├── middleware.go │ │ ├── middleware_test.go │ │ ├── parser.go │ │ ├── parser_integration_test.go │ │ ├── parser_test.go │ │ ├── response.go │ │ ├── response_test.go │ │ ├── server/ │ │ │ ├── get_server_logs.go │ │ │ ├── handler.go │ │ │ ├── handler_mock_test.go │ │ │ ├── handler_test.go │ │ │ ├── list_secrets.go │ │ │ ├── list_secrets_test.go │ │ │ ├── list_servers.go │ │ │ ├── remove_server.go │ │ │ ├── run_server.go │ │ │ ├── search_registry.go │ │ │ ├── server.go │ │ │ ├── server_test.go │ │ │ ├── set_secret.go │ │ │ ├── set_secret_test.go │ │ │ └── stop_server.go │ │ ├── tool_filter.go │ │ ├── tool_filter_test.go │ │ ├── tool_middleware_test.go │ │ ├── utils.go │ │ └── utils_test.go │ ├── migration/ │ │ ├── middleware_telemetry.go │ │ ├── migration.go │ │ ├── secret_scope.go │ │ ├── telemetry_config.go │ │ └── telemetry_config_test.go │ ├── networking/ │ │ ├── fetch.go │ │ ├── fetch_test.go │ │ ├── http_client.go │ │ ├── http_client_test.go │ │ ├── http_error.go │ │ ├── http_error_test.go │ │ ├── port.go │ │ ├── port_test.go │ │ ├── utilities.go │ │ └── utilities_test.go │ ├── oauthproto/ │ │ ├── cimd.go │ │ ├── cimd_test.go │ │ ├── constants.go │ │ ├── dcr.go │ │ ├── dcr_test.go │ │ ├── discovery.go │ │ ├── discovery_test.go │ │ ├── doc.go │ │ ├── errors.go │ │ ├── grants.go │ │ ├── grants_test.go │ │ ├── locality.go │ │ ├── oauthtest/ │ │ │ └── fixtures.go │ │ ├── redirect.go │ │ └── redirect_test.go │ ├── oidc/ │ │ ├── clientconfig.go │ │ └── doc.go │ ├── operator/ │ │ ├── accessors/ │ │ │ ├── mcpserver_accessor.go │ │ │ └── mcpserver_accessor_test.go │ │ └── telemetry/ │ │ ├── telemetry.go │ │ └── telemetry_test.go │ ├── process/ │ │ ├── detached.go │ │ ├── find_unix.go │ │ ├── find_windows.go │ │ ├── kill_unix.go │ │ ├── kill_windows.go │ │ ├── pid_validation_test.go │ │ ├── toolhive_proxy.go │ │ ├── toolhive_proxy_test.go │ │ ├── wait.go │ │ └── wait_test.go │ ├── ratelimit/ │ │ ├── internal/ │ │ │ └── bucket/ │ │ │ ├── bucket.go │ │ │ └── bucket_test.go │ │ ├── limiter.go │ │ ├── limiter_test.go │ │ ├── middleware.go │ │ └── middleware_test.go │ ├── recovery/ │ │ ├── recovery.go │ │ └── recovery_test.go │ ├── registry/ │ │ ├── api/ │ │ │ ├── client.go │ │ │ ├── shared.go │ │ │ ├── skills_client.go │ │ │ └── skills_client_test.go │ │ ├── auth/ │ │ │ ├── auth.go │ │ │ ├── auth_test.go │ │ │ ├── cache.go │ │ │ ├── helpers_test.go │ │ │ ├── issuer_validation.go │ │ │ ├── login.go │ │ │ ├── login_test.go │ │ │ ├── transport.go │ │ │ └── transport_test.go │ │ ├── auth_manager.go │ │ ├── auth_manager_test.go │ │ ├── convert.go │ │ ├── convert_test.go │ │ ├── errors.go │ │ ├── errors_test.go │ │ ├── factory.go │ │ ├── factory_test.go │ │ ├── legacyhint/ │ │ │ ├── legacyhint.go │ │ │ └── legacyhint_test.go │ │ ├── mocks/ │ │ │ ├── mock_provider.go │ │ │ └── mock_service.go │ │ ├── policy_gate.go │ │ ├── policy_gate_test.go │ │ ├── provider.go │ │ ├── provider_api.go │ │ ├── provider_base.go │ │ ├── provider_cached.go │ │ ├── provider_cached_authbug_test.go │ │ ├── provider_local.go │ │ ├── provider_remote.go │ │ ├── provider_test.go │ │ ├── schema_validation_test.go │ │ ├── service.go │ │ ├── service_test.go │ │ ├── types_test.go │ │ └── upstream_parser.go │ ├── runner/ │ │ ├── config.go │ │ ├── config_builder.go │ │ ├── config_builder_test.go │ │ ├── config_env_files_test.go │ │ ├── config_test.go │ │ ├── env.go │ │ ├── env_files.go │ │ ├── env_files_test.go │ │ ├── middleware.go │ │ ├── middleware_test.go │ │ ├── permissions.go │ │ ├── permissions_test.go │ │ ├── policy_gate.go │ │ ├── policy_gate_test.go │ │ ├── protocol.go │ │ ├── protocol_test.go │ │ ├── retriever/ │ │ │ ├── retriever.go │ │ │ └── retriever_test.go │ │ ├── runner.go │ │ ├── runner_test.go │ │ └── webhook_integration_test.go │ ├── runtime/ │ │ └── setup.go │ ├── script/ │ │ ├── description.go │ │ ├── description_test.go │ │ ├── executor.go │ │ ├── internal/ │ │ │ ├── builtins/ │ │ │ │ ├── builtins.go │ │ │ │ ├── builtins_test.go │ │ │ │ ├── calltool.go │ │ │ │ ├── parallel.go │ │ │ │ └── tools.go │ │ │ ├── conversions/ │ │ │ │ ├── result.go │ │ │ │ ├── result_test.go │ │ │ │ ├── starlark.go │ │ │ │ ├── starlark_test.go │ │ │ │ ├── toolname.go │ │ │ │ └── toolname_test.go │ │ │ └── core/ │ │ │ ├── execute.go │ │ │ └── execute_test.go │ │ ├── script.go │ │ └── script_test.go │ ├── secrets/ │ │ ├── 1password.go │ │ ├── 1password_test.go │ │ ├── aes/ │ │ │ ├── aes.go │ │ │ └── aes_test.go │ │ ├── clients/ │ │ │ ├── 1password.go │ │ │ └── mocks/ │ │ │ └── mock_onepassword.go │ │ ├── concurrency_test.go │ │ ├── encrypted.go │ │ ├── encrypted_test.go │ │ ├── environment.go │ │ ├── environment_test.go │ │ ├── factory.go │ │ ├── factory_test.go │ │ ├── fallback.go │ │ ├── fallback_test.go │ │ ├── integration_test.go │ │ ├── keyring/ │ │ │ ├── composite.go │ │ │ ├── composite_test.go │ │ │ ├── dbus_wrapper.go │ │ │ ├── interface.go │ │ │ ├── keyctl_linux.go │ │ │ ├── keyctl_linux_test.go │ │ │ ├── keyctl_other.go │ │ │ └── utils.go │ │ ├── migration.go │ │ ├── migration_test.go │ │ ├── mocks/ │ │ │ ├── mock_onepassword.go │ │ │ └── mock_provider.go │ │ ├── scoped.go │ │ ├── scoped_test.go │ │ ├── types.go │ │ └── types_test.go │ ├── security/ │ │ ├── security.go │ │ └── security_test.go │ ├── sentry/ │ │ ├── sentry.go │ │ └── sentry_test.go │ ├── server/ │ │ └── discovery/ │ │ ├── discover.go │ │ ├── discover_test.go │ │ ├── discovery.go │ │ ├── discovery_test.go │ │ ├── health.go │ │ └── health_test.go │ ├── skills/ │ │ ├── client/ │ │ │ ├── client.go │ │ │ ├── client_test.go │ │ │ └── dto.go │ │ ├── gitresolver/ │ │ │ ├── auth.go │ │ │ ├── auth_test.go │ │ │ ├── mocks/ │ │ │ │ └── mock_resolver.go │ │ │ ├── reference.go │ │ │ ├── reference_test.go │ │ │ ├── resolver.go │ │ │ ├── resolver_test.go │ │ │ ├── writer.go │ │ │ └── writer_test.go │ │ ├── installer.go │ │ ├── installer_test.go │ │ ├── mocks/ │ │ │ ├── mock_path_resolver.go │ │ │ └── mock_service.go │ │ ├── options.go │ │ ├── parser.go │ │ ├── parser_test.go │ │ ├── project_root.go │ │ ├── project_root_test.go │ │ ├── service.go │ │ ├── skillsvc/ │ │ │ ├── build.go │ │ │ ├── build_test.go │ │ │ ├── clients.go │ │ │ ├── content.go │ │ │ ├── content_test.go │ │ │ ├── info_test.go │ │ │ ├── install.go │ │ │ ├── install_extraction.go │ │ │ ├── install_git.go │ │ │ ├── install_git_test.go │ │ │ ├── install_oci.go │ │ │ ├── install_oci_test.go │ │ │ ├── install_registry_test.go │ │ │ ├── install_test.go │ │ │ ├── list.go │ │ │ ├── local_build_marker.go │ │ │ ├── oci.go │ │ │ ├── oci_test.go │ │ │ ├── pull_errors.go │ │ │ ├── pull_errors_test.go │ │ │ ├── registry.go │ │ │ ├── scope.go │ │ │ ├── service.go │ │ │ ├── service_test.go │ │ │ ├── testhelpers_test.go │ │ │ ├── uninstall.go │ │ │ └── uninstall_test.go │ │ ├── types.go │ │ ├── validator.go │ │ └── validator_test.go │ ├── state/ │ │ ├── factory.go │ │ ├── factory_test.go │ │ ├── interface.go │ │ ├── kubernetes.go │ │ ├── kubernetes_test.go │ │ ├── local.go │ │ ├── mocks/ │ │ │ └── mock_store.go │ │ └── runconfig.go │ ├── storage/ │ │ ├── errors.go │ │ ├── interfaces.go │ │ ├── mocks/ │ │ │ └── mock_skill_store.go │ │ ├── noop.go │ │ ├── noop_test.go │ │ └── sqlite/ │ │ ├── db.go │ │ ├── db_test.go │ │ ├── factory.go │ │ ├── factory_test.go │ │ ├── migrations/ │ │ │ └── 001_create_entries_and_skills.sql │ │ ├── migrations.go │ │ ├── migrations_test.go │ │ ├── skill_store.go │ │ └── skill_store_test.go │ ├── syncutil/ │ │ ├── atmost.go │ │ └── atmost_test.go │ ├── telemetry/ │ │ ├── attributes.go │ │ ├── attributes_test.go │ │ ├── config.go │ │ ├── config_test.go │ │ ├── doc.go │ │ ├── integration_test.go │ │ ├── middleware.go │ │ ├── middleware_sse_test.go │ │ ├── middleware_test.go │ │ ├── propagation.go │ │ ├── propagation_test.go │ │ ├── providers/ │ │ │ ├── otlp/ │ │ │ │ ├── config.go │ │ │ │ ├── endpoint.go │ │ │ │ ├── endpoint_test.go │ │ │ │ ├── logging.go │ │ │ │ ├── metrics.go │ │ │ │ ├── metrics_test.go │ │ │ │ ├── tls.go │ │ │ │ ├── tls_test.go │ │ │ │ ├── tracing.go │ │ │ │ └── tracing_test.go │ │ │ ├── prometheus/ │ │ │ │ ├── prometheus.go │ │ │ │ └── prometheus_test.go │ │ │ ├── providers.go │ │ │ ├── providers_strategy.go │ │ │ ├── providers_strategy_test.go │ │ │ ├── providers_test.go │ │ │ └── unified_test.go │ │ ├── registry.go │ │ ├── registry_test.go │ │ ├── serve.go │ │ └── zz_generated.deepcopy.go │ ├── templates/ │ │ ├── funcs.go │ │ ├── references.go │ │ └── references_test.go │ ├── transport/ │ │ ├── bridge.go │ │ ├── errors/ │ │ │ ├── errors.go │ │ │ └── errors_test.go │ │ ├── factory.go │ │ ├── http.go │ │ ├── http_remote_query_test.go │ │ ├── http_test.go │ │ ├── middleware/ │ │ │ ├── header_forward.go │ │ │ ├── header_forward_test.go │ │ │ ├── token_injection.go │ │ │ ├── token_injection_test.go │ │ │ ├── write_timeout.go │ │ │ └── write_timeout_test.go │ │ ├── proxy/ │ │ │ ├── httpsse/ │ │ │ │ ├── http_proxy.go │ │ │ │ ├── http_proxy_integration_test.go │ │ │ │ ├── http_proxy_test.go │ │ │ │ └── pinger.go │ │ │ ├── socket/ │ │ │ │ ├── socket_unix.go │ │ │ │ └── socket_windows.go │ │ │ ├── streamable/ │ │ │ │ ├── dispatcher.go │ │ │ │ ├── streamable_proxy.go │ │ │ │ ├── streamable_proxy_integration_test.go │ │ │ │ ├── streamable_proxy_mcp_client_integration_test.go │ │ │ │ ├── streamable_proxy_spec_test.go │ │ │ │ ├── streamable_proxy_test.go │ │ │ │ └── utils.go │ │ │ └── transparent/ │ │ │ ├── backend_recovery_test.go │ │ │ ├── backend_routing_test.go │ │ │ ├── delete_session_test.go │ │ │ ├── method_gate_test.go │ │ │ ├── pinger.go │ │ │ ├── pinger_test.go │ │ │ ├── redirect_test.go │ │ │ ├── remote_path_test.go │ │ │ ├── response_processor.go │ │ │ ├── session_id.go │ │ │ ├── session_id_test.go │ │ │ ├── sse_response_processor.go │ │ │ ├── transparent_proxy.go │ │ │ └── transparent_test.go │ │ ├── session/ │ │ │ ├── errors.go │ │ │ ├── jsonrpc_errors.go │ │ │ ├── jsonrpc_errors_test.go │ │ │ ├── manager.go │ │ │ ├── manager_redis_test.go │ │ │ ├── manager_test.go │ │ │ ├── proxy_session.go │ │ │ ├── redis_config.go │ │ │ ├── serialization.go │ │ │ ├── serialization_test.go │ │ │ ├── session_data_storage.go │ │ │ ├── session_data_storage_local.go │ │ │ ├── session_data_storage_redis.go │ │ │ ├── session_data_storage_test.go │ │ │ ├── sse_session.go │ │ │ ├── storage.go │ │ │ ├── storage_local.go │ │ │ ├── storage_redis.go │ │ │ ├── storage_redis_test.go │ │ │ ├── storage_test.go │ │ │ └── streamable_session.go │ │ ├── ssecommon/ │ │ │ ├── sse_common.go │ │ │ └── sse_common_test.go │ │ ├── stdio.go │ │ ├── stdio_test.go │ │ ├── streamable/ │ │ │ └── streamable.go │ │ ├── tunnel/ │ │ │ └── ngrok/ │ │ │ └── tunnel_provider.go │ │ ├── types/ │ │ │ ├── mocks/ │ │ │ │ ├── mock_transport.go │ │ │ │ └── mock_tunnel_provider.go │ │ │ ├── transport.go │ │ │ ├── transport_test.go │ │ │ └── tunnel.go │ │ ├── url.go │ │ └── url_test.go │ ├── tui/ │ │ ├── actions.go │ │ ├── form_helpers.go │ │ ├── form_helpers_test.go │ │ ├── helpers_test.go │ │ ├── init.go │ │ ├── inspector.go │ │ ├── inspector_test.go │ │ ├── json_tree.go │ │ ├── json_tree_test.go │ │ ├── keys.go │ │ ├── logformat.go │ │ ├── logformat_test.go │ │ ├── logs.go │ │ ├── logs_test.go │ │ ├── main_test.go │ │ ├── model.go │ │ ├── proxylogs.go │ │ ├── registry.go │ │ ├── registry_test.go │ │ ├── search_test.go │ │ ├── tools.go │ │ ├── update.go │ │ ├── update_inspector.go │ │ ├── update_navigation.go │ │ ├── update_registry.go │ │ ├── update_search.go │ │ ├── view.go │ │ ├── view_helpers.go │ │ ├── view_info.go │ │ ├── view_inspector.go │ │ ├── view_registry.go │ │ └── view_statusbar.go │ ├── updates/ │ │ ├── checker.go │ │ ├── checker_test.go │ │ ├── client.go │ │ └── client_test.go │ ├── usagemetrics/ │ │ ├── client.go │ │ ├── client_test.go │ │ ├── collector.go │ │ ├── collector_test.go │ │ ├── middleware.go │ │ ├── middleware_test.go │ │ └── types.go │ ├── versions/ │ │ ├── version.go │ │ └── version_test.go │ ├── vmcp/ │ │ ├── aggregator/ │ │ │ ├── aggregator.go │ │ │ ├── conflict_resolver.go │ │ │ ├── conflict_resolver_test.go │ │ │ ├── default_aggregator.go │ │ │ ├── default_aggregator_test.go │ │ │ ├── discoverer.go │ │ │ ├── discoverer_test.go │ │ │ ├── manual_resolver.go │ │ │ ├── mocks/ │ │ │ │ └── mock_interfaces.go │ │ │ ├── prefix_resolver.go │ │ │ ├── priority_resolver.go │ │ │ ├── testhelpers_annotations_test.go │ │ │ ├── testhelpers_test.go │ │ │ ├── tool_adapter.go │ │ │ ├── tool_adapter_annotations_test.go │ │ │ └── tool_adapter_test.go │ │ ├── auth/ │ │ │ ├── auth.go │ │ │ ├── converters/ │ │ │ │ ├── aws_sts.go │ │ │ │ ├── aws_sts_test.go │ │ │ │ ├── external_auth_config.go │ │ │ │ ├── header_injection.go │ │ │ │ ├── header_injection_test.go │ │ │ │ ├── interface.go │ │ │ │ ├── registry_test.go │ │ │ │ ├── token_exchange.go │ │ │ │ ├── token_exchange_test.go │ │ │ │ ├── unauthenticated.go │ │ │ │ ├── unauthenticated_test.go │ │ │ │ ├── upstream_inject.go │ │ │ │ └── upstream_inject_test.go │ │ │ ├── factory/ │ │ │ │ ├── authz_not_wired_test.go │ │ │ │ ├── incoming.go │ │ │ │ ├── incoming_keyprovider_test.go │ │ │ │ ├── incoming_test.go │ │ │ │ ├── incoming_upstream_test.go │ │ │ │ ├── integration_test.go │ │ │ │ ├── outgoing.go │ │ │ │ └── outgoing_test.go │ │ │ ├── mocks/ │ │ │ │ └── mock_strategy.go │ │ │ ├── outgoing_registry.go │ │ │ ├── outgoing_registry_test.go │ │ │ ├── strategies/ │ │ │ │ ├── aws_sts.go │ │ │ │ ├── aws_sts_test.go │ │ │ │ ├── constants.go │ │ │ │ ├── header_injection.go │ │ │ │ ├── header_injection_test.go │ │ │ │ ├── tokenexchange.go │ │ │ │ ├── tokenexchange_test.go │ │ │ │ ├── unauthenticated.go │ │ │ │ ├── unauthenticated_test.go │ │ │ │ ├── upstream_inject.go │ │ │ │ └── upstream_inject_test.go │ │ │ └── types/ │ │ │ ├── doc.go │ │ │ ├── types.go │ │ │ └── zz_generated.deepcopy.go │ │ ├── cache/ │ │ │ ├── cache.go │ │ │ └── cache_test.go │ │ ├── cli/ │ │ │ ├── auth_server_config_test.go │ │ │ ├── embedding_manager.go │ │ │ ├── embedding_manager_test.go │ │ │ ├── init.go │ │ │ ├── init_test.go │ │ │ ├── mocks/ │ │ │ │ └── mock_container_factory.go │ │ │ ├── optimizer_wiring_test.go │ │ │ ├── serve.go │ │ │ ├── serve_test.go │ │ │ ├── validate.go │ │ │ └── validate_test.go │ │ ├── client/ │ │ │ ├── auth_propagation_integration_test.go │ │ │ ├── client.go │ │ │ ├── client_test.go │ │ │ ├── meta_integration_test.go │ │ │ └── mocks/ │ │ │ └── mock_outgoing_registry.go │ │ ├── composer/ │ │ │ ├── composer.go │ │ │ ├── composite_output_integration_test.go │ │ │ ├── dag_executor.go │ │ │ ├── dag_executor_test.go │ │ │ ├── elicitation_handler.go │ │ │ ├── elicitation_handler_test.go │ │ │ ├── elicitation_integration_test.go │ │ │ ├── foreach_test.go │ │ │ ├── mocks/ │ │ │ │ └── mock_sdk_elicitation_requester.go │ │ │ ├── output_constructor.go │ │ │ ├── output_constructor_test.go │ │ │ ├── output_validator.go │ │ │ ├── output_validator_test.go │ │ │ ├── security_test.go │ │ │ ├── state_store.go │ │ │ ├── state_store_test.go │ │ │ ├── template_expander.go │ │ │ ├── template_expander_test.go │ │ │ ├── testhelpers_test.go │ │ │ ├── workflow_audit_integration_test.go │ │ │ ├── workflow_context.go │ │ │ ├── workflow_engine.go │ │ │ ├── workflow_engine_test.go │ │ │ ├── workflow_errors.go │ │ │ ├── workflow_state_store.go │ │ │ └── workflow_state_store_test.go │ │ ├── config/ │ │ │ ├── composite_validation.go │ │ │ ├── composite_validation_test.go │ │ │ ├── config.go │ │ │ ├── config_test.go │ │ │ ├── crd_cli_roundtrip_test.go │ │ │ ├── defaults.go │ │ │ ├── defaults_test.go │ │ │ ├── doc.go │ │ │ ├── foreach_validation_test.go │ │ │ ├── validator.go │ │ │ ├── validator_test.go │ │ │ ├── yaml_loader.go │ │ │ ├── yaml_loader_test.go │ │ │ ├── yaml_loader_transform_test.go │ │ │ └── zz_generated.deepcopy.go │ │ ├── conversion/ │ │ │ ├── content.go │ │ │ ├── content_test.go │ │ │ ├── conversion_test.go │ │ │ └── meta.go │ │ ├── discovery/ │ │ │ ├── context.go │ │ │ ├── context_test.go │ │ │ ├── manager.go │ │ │ ├── manager_test.go │ │ │ ├── middleware.go │ │ │ ├── middleware_test.go │ │ │ └── mocks/ │ │ │ └── mock_manager.go │ │ ├── doc.go │ │ ├── errors.go │ │ ├── health/ │ │ │ ├── checker.go │ │ │ ├── checker_test.go │ │ │ ├── circuit_breaker.go │ │ │ ├── circuit_breaker_test.go │ │ │ ├── context/ │ │ │ │ ├── context.go │ │ │ │ └── context_test.go │ │ │ ├── monitor.go │ │ │ ├── monitor_test.go │ │ │ ├── status.go │ │ │ ├── status_builder_test.go │ │ │ └── status_test.go │ │ ├── internal/ │ │ │ └── compositetools/ │ │ │ ├── decorator.go │ │ │ ├── decorator_test.go │ │ │ ├── workflow_converter.go │ │ │ └── workflow_converter_test.go │ │ ├── k8s/ │ │ │ ├── backend_reconciler.go │ │ │ ├── backend_reconciler_integration_test.go │ │ │ ├── backend_reconciler_test.go │ │ │ ├── manager.go │ │ │ └── manager_test.go │ │ ├── mocks/ │ │ │ ├── mock_backend_client.go │ │ │ └── mock_registry.go │ │ ├── optimizer/ │ │ │ ├── internal/ │ │ │ │ ├── similarity/ │ │ │ │ │ ├── cosine.go │ │ │ │ │ ├── cosine_bench_test.go │ │ │ │ │ ├── cosine_test.go │ │ │ │ │ ├── tei_client.go │ │ │ │ │ └── tei_client_test.go │ │ │ │ ├── tokencounter/ │ │ │ │ │ ├── counter.go │ │ │ │ │ └── counter_test.go │ │ │ │ ├── toolstore/ │ │ │ │ │ ├── schema.sql │ │ │ │ │ ├── sqlite_store.go │ │ │ │ │ ├── sqlite_store_bench_test.go │ │ │ │ │ └── sqlite_store_test.go │ │ │ │ └── types/ │ │ │ │ ├── mocks/ │ │ │ │ │ └── mock_types.go │ │ │ │ └── types.go │ │ │ ├── optimizer.go │ │ │ └── optimizer_test.go │ │ ├── registry.go │ │ ├── registry_test.go │ │ ├── router/ │ │ │ ├── default_router.go │ │ │ ├── default_router_test.go │ │ │ ├── mocks/ │ │ │ │ └── mock_router.go │ │ │ ├── router.go │ │ │ ├── session_router.go │ │ │ └── session_router_test.go │ │ ├── schema/ │ │ │ ├── array.go │ │ │ ├── object.go │ │ │ ├── primitive.go │ │ │ ├── reflect.go │ │ │ ├── reflect_test.go │ │ │ ├── schema.go │ │ │ └── schema_test.go │ │ ├── server/ │ │ │ ├── adapter/ │ │ │ │ ├── capability_adapter.go │ │ │ │ ├── capability_adapter_annotations_test.go │ │ │ │ ├── capability_adapter_test.go │ │ │ │ ├── handler_factory.go │ │ │ │ ├── handler_factory_test.go │ │ │ │ └── mocks/ │ │ │ │ └── mock_handler_factory.go │ │ │ ├── annotation_enrichment.go │ │ │ ├── annotation_enrichment_test.go │ │ │ ├── backend_enrichment.go │ │ │ ├── backend_enrichment_test.go │ │ │ ├── health_monitoring_test.go │ │ │ ├── health_test.go │ │ │ ├── integration_test.go │ │ │ ├── mocks/ │ │ │ │ └── mock_watcher.go │ │ │ ├── readiness_test.go │ │ │ ├── sdk_elicitation_adapter.go │ │ │ ├── sdk_elicitation_adapter_test.go │ │ │ ├── server.go │ │ │ ├── server_test.go │ │ │ ├── session_management_integration_test.go │ │ │ ├── session_management_realbackend_integration_test.go │ │ │ ├── session_manager_interface.go │ │ │ ├── sessionmanager/ │ │ │ │ ├── factory.go │ │ │ │ ├── horizontal_scaling_integration_test.go │ │ │ │ ├── session_manager.go │ │ │ │ ├── session_manager_test.go │ │ │ │ └── telemetry_test.go │ │ │ ├── status.go │ │ │ ├── status_reporting.go │ │ │ ├── status_reporting_test.go │ │ │ ├── status_test.go │ │ │ ├── telemetry.go │ │ │ ├── telemetry_integration_test.go │ │ │ ├── telemetry_test.go │ │ │ ├── testfactory_test.go │ │ │ ├── testutil_test.go │ │ │ ├── workflow_converter.go │ │ │ ├── workflow_converter_test.go │ │ │ └── write_timeout_integration_test.go │ │ ├── session/ │ │ │ ├── admission.go │ │ │ ├── admission_test.go │ │ │ ├── connector_integration_test.go │ │ │ ├── decorating_factory.go │ │ │ ├── decorating_factory_test.go │ │ │ ├── default_session.go │ │ │ ├── default_session_test.go │ │ │ ├── factory.go │ │ │ ├── factory_metadata_test.go │ │ │ ├── internal/ │ │ │ │ ├── backend/ │ │ │ │ │ ├── mcp_session.go │ │ │ │ │ ├── mcp_session_test.go │ │ │ │ │ ├── roundtripper_test.go │ │ │ │ │ └── session.go │ │ │ │ └── security/ │ │ │ │ ├── hijack_prevention_test.go │ │ │ │ ├── restore_test.go │ │ │ │ ├── security.go │ │ │ │ └── security_test.go │ │ │ ├── mocks/ │ │ │ │ └── mock_factory.go │ │ │ ├── optimizerdec/ │ │ │ │ ├── decorator.go │ │ │ │ └── decorator_test.go │ │ │ ├── session.go │ │ │ ├── token_binding_test.go │ │ │ └── types/ │ │ │ ├── mocks/ │ │ │ │ └── mock_session.go │ │ │ └── session.go │ │ ├── status/ │ │ │ ├── doc.go │ │ │ ├── factory.go │ │ │ ├── factory_test.go │ │ │ ├── helpers.go │ │ │ ├── k8s_reporter.go │ │ │ ├── k8s_reporter_test.go │ │ │ ├── logging_reporter.go │ │ │ ├── logging_reporter_test.go │ │ │ └── reporter.go │ │ ├── types.go │ │ ├── types_test.go │ │ └── workloads/ │ │ ├── discoverer.go │ │ ├── k8s.go │ │ ├── k8s_test.go │ │ └── mocks/ │ │ └── mock_discoverer.go │ ├── webhook/ │ │ ├── client.go │ │ ├── client_test.go │ │ ├── config.go │ │ ├── config_test.go │ │ ├── errors.go │ │ ├── errors_test.go │ │ ├── mutating/ │ │ │ ├── config.go │ │ │ ├── middleware.go │ │ │ ├── middleware_test.go │ │ │ ├── patch.go │ │ │ └── patch_test.go │ │ ├── signing.go │ │ ├── signing_test.go │ │ ├── types.go │ │ ├── types_test.go │ │ └── validating/ │ │ ├── config.go │ │ ├── middleware.go │ │ └── middleware_test.go │ └── workloads/ │ ├── discoverer_adapter.go │ ├── discoverer_adapter_test.go │ ├── filter.go │ ├── filter_test.go │ ├── manager.go │ ├── manager_test.go │ ├── mocks/ │ │ └── mock_manager.go │ ├── statuses/ │ │ ├── file_status.go │ │ ├── file_status_test.go │ │ ├── mocks/ │ │ │ └── mock_status_manager.go │ │ ├── noop.go │ │ ├── pid.go │ │ ├── pid_test.go │ │ ├── status.go │ │ └── status_test.go │ ├── sysproc_unix.go │ ├── sysproc_windows.go │ └── types/ │ ├── effective_transport_test.go │ ├── errors/ │ │ └── errors.go │ ├── labels.go │ ├── labels_test.go │ ├── types.go │ ├── validate.go │ ├── validate_test.go │ └── workload_test.go ├── renovate.json ├── skills/ │ └── toolhive-cli-user/ │ ├── SKILL.md │ └── references/ │ ├── COMMANDS.md │ └── EXAMPLES.md └── test/ ├── e2e/ │ ├── README.md │ ├── api_clients_test.go │ ├── api_clients_validation_test.go │ ├── api_discovery_test.go │ ├── api_groups_test.go │ ├── api_healthcheck_test.go │ ├── api_helpers.go │ ├── api_registry_test.go │ ├── api_secrets_test.go │ ├── api_skills_git_test.go │ ├── api_skills_test.go │ ├── api_version_test.go │ ├── api_workload_lifecycle_test.go │ ├── api_workloads_test.go │ ├── audit_middleware_e2e_test.go │ ├── chainsaw/ │ │ └── operator/ │ │ ├── multi-tenancy/ │ │ │ ├── cleanup/ │ │ │ │ ├── assert-crd.yaml │ │ │ │ ├── assert-operator-ready.yaml │ │ │ │ └── chainsaw-test.yaml │ │ │ ├── setup/ │ │ │ │ ├── assert-crd.yaml │ │ │ │ ├── assert-operator-ready.yaml │ │ │ │ ├── assert-rbac-clusterrole.yaml │ │ │ │ ├── assert-rbac-rolebinding-ns-1.yaml │ │ │ │ ├── assert-rbac-rolebinding-ns-2.yaml │ │ │ │ ├── assert-rbac-serviceaccount.yaml │ │ │ │ ├── chainsaw-test.yaml │ │ │ │ └── namespace.yaml │ │ │ └── test-scenarios/ │ │ │ ├── common/ │ │ │ │ ├── assert-proxy-svc-loadbalancer-ip.yaml │ │ │ │ ├── proxy-svc-loadbalancer.yaml │ │ │ │ ├── proxyrunner-role.yaml │ │ │ │ ├── proxyrunner-rolebinding.yaml │ │ │ │ └── proxyrunner-serviceaccount.yaml │ │ │ ├── embeddingserver/ │ │ │ │ ├── assert-deployment-ns1-running.yaml │ │ │ │ ├── assert-deployment-ns2-running.yaml │ │ │ │ ├── assert-embeddingserver-ns1-running.yaml │ │ │ │ ├── assert-embeddingserver-ns2-running.yaml │ │ │ │ ├── assert-service-ns1-created.yaml │ │ │ │ ├── assert-service-ns2-created.yaml │ │ │ │ ├── chainsaw-test.yaml │ │ │ │ ├── embeddingserver-ns1.yaml │ │ │ │ ├── embeddingserver-ns2.yaml │ │ │ │ ├── namespace-1.yaml │ │ │ │ └── namespace-2.yaml │ │ │ ├── sse/ │ │ │ │ ├── assert-mcpserver-headless-svc.yaml │ │ │ │ ├── assert-mcpserver-pod-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-svc.yaml │ │ │ │ ├── assert-mcpserver-running.yaml │ │ │ │ ├── assert-mcpserver-svc.yaml │ │ │ │ ├── chainsaw-test.yaml │ │ │ │ └── mcpserver.yaml │ │ │ ├── stdio/ │ │ │ │ ├── assert-mcpserver-pod-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-svc.yaml │ │ │ │ ├── assert-mcpserver-running.yaml │ │ │ │ ├── chainsaw-test.yaml │ │ │ │ └── mcpserver.yaml │ │ │ ├── stdio-streamable-http/ │ │ │ │ ├── assert-mcpserver-pod-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-svc.yaml │ │ │ │ ├── assert-mcpserver-running.yaml │ │ │ │ ├── chainsaw-test.yaml │ │ │ │ └── mcpserver.yaml │ │ │ └── streamable-http/ │ │ │ ├── assert-mcpserver-headless-svc.yaml │ │ │ ├── assert-mcpserver-pod-running.yaml │ │ │ ├── assert-mcpserver-proxy-runner-running.yaml │ │ │ ├── assert-mcpserver-proxy-runner-svc.yaml │ │ │ ├── assert-mcpserver-running.yaml │ │ │ ├── assert-mcpserver-svc.yaml │ │ │ ├── chainsaw-test.yaml │ │ │ └── mcpserver.yaml │ │ ├── single-tenancy/ │ │ │ ├── cleanup/ │ │ │ │ ├── assert-crd.yaml │ │ │ │ ├── assert-operator-ready.yaml │ │ │ │ └── chainsaw-test.yaml │ │ │ ├── setup/ │ │ │ │ ├── assert-crd.yaml │ │ │ │ ├── assert-operator-ready.yaml │ │ │ │ ├── assert-rbac-clusterrole.yaml │ │ │ │ ├── assert-rbac-clusterrolebinding.yaml │ │ │ │ ├── assert-rbac-serviceaccount.yaml │ │ │ │ └── chainsaw-test.yaml │ │ │ └── test-scenarios/ │ │ │ ├── common/ │ │ │ │ ├── assert-proxy-svc-loadbalancer-ip.yaml │ │ │ │ ├── proxy-svc-loadbalancer.yaml │ │ │ │ ├── proxyrunner-role.yaml │ │ │ │ ├── proxyrunner-rolebinding.yaml │ │ │ │ └── proxyrunner-serviceaccount.yaml │ │ │ ├── embeddingserver/ │ │ │ │ ├── basic/ │ │ │ │ │ ├── assert-deployment-running.yaml │ │ │ │ │ ├── assert-embeddingserver-running.yaml │ │ │ │ │ ├── assert-service-created.yaml │ │ │ │ │ ├── chainsaw-test.yaml │ │ │ │ │ └── embeddingserver.yaml │ │ │ │ ├── lifecycle/ │ │ │ │ │ ├── assert-deployment-running.yaml │ │ │ │ │ ├── assert-deployment-scaled.yaml │ │ │ │ │ ├── assert-embeddingserver-running.yaml │ │ │ │ │ ├── assert-embeddingserver-scaled.yaml │ │ │ │ │ ├── assert-service-created.yaml │ │ │ │ │ ├── chainsaw-test.yaml │ │ │ │ │ ├── embeddingserver-initial.yaml │ │ │ │ │ ├── embeddingserver-scaled.yaml │ │ │ │ │ └── embeddingserver-updated-env.yaml │ │ │ │ └── with-cache/ │ │ │ │ ├── assert-deployment-running.yaml │ │ │ │ ├── assert-embeddingserver-running.yaml │ │ │ │ ├── assert-pvc-created.yaml │ │ │ │ ├── assert-service-created.yaml │ │ │ │ ├── chainsaw-test.yaml │ │ │ │ └── embeddingserver.yaml │ │ │ ├── pod-annotations/ │ │ │ │ ├── assert-mcpserver-pod-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-running.yaml │ │ │ │ ├── assert-mcpserver-running.yaml │ │ │ │ ├── assert-pod-annotations.yaml │ │ │ │ ├── chainsaw-test.yaml │ │ │ │ └── mcpserver.yaml │ │ │ ├── sse/ │ │ │ │ ├── assert-mcpserver-headless-svc.yaml │ │ │ │ ├── assert-mcpserver-pod-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-svc.yaml │ │ │ │ ├── assert-mcpserver-running.yaml │ │ │ │ ├── assert-mcpserver-svc.yaml │ │ │ │ ├── chainsaw-test.yaml │ │ │ │ ├── mcpserver.yaml │ │ │ │ └── serviceaccount.yaml │ │ │ ├── stdio/ │ │ │ │ ├── assert-mcpserver-pod-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-svc.yaml │ │ │ │ ├── assert-mcpserver-running.yaml │ │ │ │ ├── chainsaw-test.yaml │ │ │ │ └── mcpserver.yaml │ │ │ ├── stdio-streamable-http/ │ │ │ │ ├── assert-mcpserver-pod-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-svc.yaml │ │ │ │ ├── assert-mcpserver-running.yaml │ │ │ │ ├── chainsaw-test.yaml │ │ │ │ └── mcpserver.yaml │ │ │ ├── streamable-http/ │ │ │ │ ├── assert-mcpserver-headless-svc.yaml │ │ │ │ ├── assert-mcpserver-pod-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-running.yaml │ │ │ │ ├── assert-mcpserver-proxy-runner-svc.yaml │ │ │ │ ├── assert-mcpserver-running.yaml │ │ │ │ ├── assert-mcpserver-svc.yaml │ │ │ │ ├── chainsaw-test.yaml │ │ │ │ └── mcpserver.yaml │ │ │ └── vmcp/ │ │ │ ├── assert-oidc-security.yaml │ │ │ ├── assert-vmcp-configmap.yaml │ │ │ ├── assert-vmcp-deployment.yaml │ │ │ ├── assert-vmcp-service.yaml │ │ │ ├── assert-vmcp-status-ready.yaml │ │ │ ├── audit-chainsaw-test.yaml │ │ │ ├── basic/ │ │ │ │ └── chainsaw-test.yaml │ │ │ ├── chainsaw-test.yaml │ │ │ ├── controller-chainsaw-test.yaml │ │ │ ├── mcpgroup-controller.yaml │ │ │ ├── oidc-client-secret.yaml │ │ │ ├── vmcp-controller.yaml │ │ │ ├── vmcp-oidc-config.yaml │ │ │ └── vmcp-with-oidc.yaml │ │ └── validation/ │ │ ├── mcpexternalauthconfig/ │ │ │ └── chainsaw-test.yaml │ │ └── virtualmcpserver/ │ │ └── chainsaw-test.yaml │ ├── cimd_auth_helpers_test.go │ ├── cimd_auth_test.go │ ├── cli_llm_all_clients_test.go │ ├── cli_llm_config_test.go │ ├── cli_llm_setup_test.go │ ├── cli_registry_convert_test.go │ ├── cli_secrets_scoped_test.go │ ├── cli_skills_test.go │ ├── client_test.go │ ├── desktop_validation_test.go │ ├── e2e_suite_test.go │ ├── export_test.go │ ├── fetch_mcp_server_test.go │ ├── group_list_e2e_test.go │ ├── group_rm_test.go │ ├── group_test.go │ ├── health_check_zombie_test.go │ ├── helpers.go │ ├── http_pdp_authz_test.go │ ├── images/ │ │ └── images.go │ ├── inspector_autocleanup_test.go │ ├── inspector_test.go │ ├── list_group_e2e_test.go │ ├── llm_gateway_mock.go │ ├── mcp_client_helpers.go │ ├── network_isolation_test.go │ ├── oidc_mock.go │ ├── osv_authz_test.go │ ├── osv_mcp_server_test.go │ ├── osv_streamable_http_mcp_server_test.go │ ├── protocol_builds_e2e_test.go │ ├── proxy_oauth_test.go │ ├── proxy_stdio_test.go │ ├── proxy_tunnel_e2e_test.go │ ├── proxyrunner_graceful_shutdown_test.go │ ├── remote_mcp_query_params_test.go │ ├── remote_mcp_server_test.go │ ├── restart_test.go │ ├── restart_zombie_test.go │ ├── rm_group_test.go │ ├── run_tests.bat │ ├── run_tests.sh │ ├── sse_endpoint_rewrite_test.go │ ├── stateless_proxy_test.go │ ├── status_test.go │ ├── stdio_proxy_over_streamable_http_mcp_server_test.go │ ├── telemetry_metrics_validation_e2e_test.go │ ├── telemetry_middleware_e2e_test.go │ ├── thv-operator/ │ │ ├── acceptance_tests/ │ │ │ ├── helpers.go │ │ │ ├── ratelimit_test.go │ │ │ └── suite_test.go │ │ ├── kind-config.yaml │ │ ├── testutil/ │ │ │ ├── k8s.go │ │ │ └── oidc.go │ │ └── virtualmcp/ │ │ ├── README.md │ │ ├── helpers.go │ │ ├── mcpserver_scaling_test.go │ │ ├── suite_test.go │ │ ├── virtualmcp_aggregation_filtering_test.go │ │ ├── virtualmcp_aggregation_overrides_test.go │ │ ├── virtualmcp_auth_discovery_test.go │ │ ├── virtualmcp_authserver_config_test.go │ │ ├── virtualmcp_circuit_breaker_test.go │ │ ├── virtualmcp_composite_defaultresults_test.go │ │ ├── virtualmcp_composite_hidden_tools_test.go │ │ ├── virtualmcp_composite_parallel_test.go │ │ ├── virtualmcp_composite_referenced_test.go │ │ ├── virtualmcp_composite_sequential_test.go │ │ ├── virtualmcp_composite_validation_test.go │ │ ├── virtualmcp_conflict_resolution_test.go │ │ ├── virtualmcp_discovered_mode_test.go │ │ ├── virtualmcp_excludeall_global_test.go │ │ ├── virtualmcp_external_auth_test.go │ │ ├── virtualmcp_optimizer_circuit_breaker_test.go │ │ ├── virtualmcp_optimizer_composite_test.go │ │ ├── virtualmcp_optimizer_multibackend_test.go │ │ ├── virtualmcp_optimizer_test.go │ │ ├── virtualmcp_redis_session_test.go │ │ ├── virtualmcp_session_management_test.go │ │ ├── virtualmcp_telemetry_test.go │ │ ├── virtualmcp_toolconfig_test.go │ │ ├── virtualmcp_yardstick_base_test.go │ │ ├── virtualmcpserver_scaling_test.go │ │ └── wait_for_tools_helpers.go │ ├── thvignore_test.go │ ├── unhealthy_workload_test.go │ ├── vmcp_cli_features_test.go │ ├── vmcp_cli_helpers_test.go │ ├── vmcp_cli_test.go │ ├── vmcp_infra_features_test.go │ └── vmcp_optimizer_test.go ├── integration/ │ ├── authserver/ │ │ ├── authserver_integration_test.go │ │ ├── helpers/ │ │ │ ├── authserver.go │ │ │ ├── http_client.go │ │ │ └── mock_upstream.go │ │ └── runner_integration_test.go │ └── vmcp/ │ ├── helpers/ │ │ ├── backend.go │ │ ├── helpers_test.go │ │ ├── mcp_client.go │ │ └── vmcp_server.go │ ├── vmcp_integration_test.go │ └── vmcp_typing_integration_test.go └── testkit/ ├── sse_server.go ├── streamable_server.go ├── testkit.go └── testkit_test.go