{"record":{"id":"db881103b15a77c7","repo":"PrefectHQ/fastmcp","slug":"template-uri-template-r-not-found","errorCode":null,"errorMessage":"Template {uri_template!r} not found","messagePattern":"Template (.+?) not found","errorType":"exception","errorClass":"KeyError","httpStatus":null,"severity":"error","filePath":"fastmcp_slim/fastmcp/server/providers/local_provider/local_provider.py","lineNumber":303,"sourceCode":"    def remove_template(self, uri_template: str, version: str | None = None) -> None:\n        \"\"\"Remove resource template(s) from this provider's storage.\n\n        Args:\n            uri_template: The template URI pattern.\n            version: If None, removes ALL versions. If specified, removes only that version.\n\n        Raises:\n            KeyError: If no matching template is found.\n        \"\"\"\n        if version is None:\n            # Remove all versions\n            keys_to_remove = [\n                k\n                for k, c in self._components.items()\n                if isinstance(c, ResourceTemplate) and c.uri_template == uri_template\n            ]\n            if not keys_to_remove:\n                raise KeyError(f\"Template {uri_template!r} not found\")\n            for key in keys_to_remove:\n                self._remove_component(key)\n        else:\n            # Remove specific version\n            key = f\"{ResourceTemplate.make_key(uri_template)}@{version}\"\n            if key not in self._components:\n                raise KeyError(\n                    f\"Template {uri_template!r} version {version!r} not found\"\n                )\n            self._remove_component(key)\n\n    def remove_prompt(self, name: str, version: str | None = None) -> None:\n        \"\"\"Remove prompt(s) from this provider's storage.\n\n        Args:\n            name: The prompt name.\n            version: If None, removes ALL versions. If specified, removes only that version.\n","sourceCodeStart":285,"sourceCodeEnd":321,"githubUrl":"https://github.com/PrefectHQ/fastmcp/blob/1f021142978e0861cd910c8df4e8074bc7cf3978/fastmcp_slim/fastmcp/server/providers/local_provider/local_provider.py#L285-L321","documentation":"remove_template(uri_template, version=None) matches ResourceTemplate components by their exact uri_template string; with no match it raises KeyError(f\"Template {uri_template!r} not found\"). Note the match is against the pattern itself, not concrete URIs derived from it.","triggerScenarios":"provider.remove_template(\"weather://{city}\") where the template was registered with a different pattern string (different placeholder names, braces style, or path) or was never added to this provider.","commonSituations":"Pattern-string drift after refactoring placeholder names ({city} vs {location}); attempting removal with a concrete URI instead of the template pattern; template registered on another provider.","solutions":["Pass the exact pattern string used at registration, placeholders included","List registered ResourceTemplates and copy the uri_template verbatim","Catch KeyError for idempotent teardown"],"exampleFix":"// before\nprovider.remove_template(\"weather/{city}\")  # registered as \"weather://{city}\"\n// after\nprovider.remove_template(\"weather://{city}\")","handlingStrategy":"validation","validationCode":"patterns = {c.uri_template for c in provider._components.values()\n            if isinstance(c, ResourceTemplate)}\nif \"weather://{city}\" not in patterns:\n    return","typeGuard":"def template_exists(provider, uri_template: str) -> bool:\n    return any(isinstance(c, ResourceTemplate) and c.uri_template == uri_template\n               for c in provider._components.values())","tryCatchPattern":"try:\n    provider.remove_template(\"weather://{city}\")\nexcept KeyError:\n    pass  # template not registered","preventionTips":["Pass the verbatim registration pattern, including placeholders like {city}","Never pass a concrete URI where the pattern is expected","Store template patterns as constants reused at removal"],"tags":["keyerror","resource-template","uri-template","removal"],"backgroundTag":"component-key-not-found","analyzedSha":"1f021142978e0861cd910c8df4e8074bc7cf3978","analyzedAt":"2026-08-29T14:31:16.082Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}