PrefectHQ/fastmcp · error · NotFoundError
Unknown prompt: {name!r}
Error message
Unknown prompt: {name!r} What it means
FastMCP raises NotFoundError("Unknown prompt: {name!r}") from render_prompt when get_prompt returns None — no registered prompt matches the name (or it was disabled/filtered by transforms/middleware). This is the standard MCP 'not found' signal for prompts/get.
Source
Thrown at fastmcp_slim/fastmcp/server/server.py:1777
context.message.arguments,
version=version,
run_middleware=False,
),
)
# Core logic: find and render prompt (providers queried in parallel)
# Use get_prompt to apply transforms and filter disabled
with server_span(
f"prompts/get {name}",
"prompts/get",
self.name,
"prompt",
name,
prompt_name=name,
) as span:
prompt = await self.get_prompt(name, version=version)
if prompt is None:
raise NotFoundError(f"Unknown prompt: {name!r}")
span.set_attributes(prompt.get_span_attributes())
try:
return await prompt._render(arguments)
except FastMCPError as e:
logger.log(
e.log_level, f"Error rendering prompt {name!r}", exc_info=True
)
raise
except MCPError:
logger.exception(f"Error rendering prompt {name!r}")
raise
except Exception as e:
logger.exception(f"Error rendering prompt {name!r}")
if self._mask_error_details:
raise PromptError(f"Error rendering prompt {name!r}") from e
raise PromptError(f"Error rendering prompt {name!r}: {e}") from e
def add_tool(self, tool: Tool | Callable[..., Any]) -> Tool:View on GitHub (pinned to 1f02114297)
Solutions
- List available prompts (`await server.get_prompts()` / client.list_prompts) and use an exact registered name.
- Fix the name/typo in the caller.
- Register the prompt or re-enable it if it was disabled/removed by transforms.
- Check middleware that may be filtering prompts/get requests.
Example fix
// before
result = await client.get_prompt("sumarize_document") # typo
// after
prompts = await client.list_prompts()
result = await client.get_prompt("summarize_document") Defensive patterns
Strategy: validation
Validate before calling
names = {p.name for p in await client.list_prompts()}
if name not in names:
raise ValueError(f"{name!r} not registered; available: {sorted(names)}")
result = await client.get_prompt(name) Try / catch
try:
result = await client.get_prompt(name, arguments=args)
except NotFoundError:
print(f"Prompt {name!r} unknown — call client.list_prompts() to see registered names") Prevention
- Copy prompt names from list_prompts output rather than retyping them.
- Keep client and server prompt registries in sync during refactors.
- Use consistent lowercase snake_case naming for prompts.
- Remember disabled/transformed prompts won't resolve even if defined in code.
When it happens
Trigger: `render_prompt(name)` or client.get_prompt(name) with a name that was never registered, a typo, a prompt removed/disabled, or a name filtered out by provider routing or middleware.
Common situations: Typo in prompt name; client connecting to a server that doesn't define the prompt; prompt removed after refactor; casing mismatch ('Summarize' vs 'summarize'); calling render before the decorator registration completes.
Related errors
- Unknown resource: {uri!r}
- Unknown resource: {uri!r} version {version!r}
- INVALID_PARAMS
- The client negotiated a modern protocol era (server/discover
- logging/setLevel is not available on MCP 2026-07-28 connecti
AI-assisted analysis of PrefectHQ/fastmcp@1f02114297 (2026-08-29).
Data as JSON: /api/errors/33d9a92bae58950c.
Report an issue: GitHub.