"""Prompts primitive (lowlevel API): hand-built Prompt descriptors, GetPromptResult, completion.""" from typing import Any import mcp_types as types from mcp.server.context import ServerRequestContext from mcp.server.lowlevel import Server from stories._hosting import run_server_from_args LANGUAGES = ["python", "pytorch", "rust", "go", "typescript"] PROMPTS = [ types.Prompt( name="greet", title="Greeting", description="Ask the model to greet someone by name.", arguments=[types.PromptArgument(name="name", required=True)], ), types.Prompt( name="code_review", title="Code Review", description="Ask the model to review a code snippet.", arguments=[ types.PromptArgument(name="language", required=True), types.PromptArgument(name="code", required=True), ], ), ] def build_server() -> Server[Any]: async def list_prompts( ctx: ServerRequestContext[Any], params: types.PaginatedRequestParams | None ) -> types.ListPromptsResult: return types.ListPromptsResult(prompts=PROMPTS) async def get_prompt(ctx: ServerRequestContext[Any], params: types.GetPromptRequestParams) -> types.GetPromptResult: args = params.arguments or {} if params.name == "greet": return types.GetPromptResult( description="Ask the model to greet someone by name.", messages=[ types.PromptMessage( role="user", content=types.TextContent(text=f"Write a one-line greeting for {args['name']}."), ) ], ) if params.name == "code_review": return types.GetPromptResult( description="Ask the model to review a code snippet.", messages=[ types.PromptMessage( role="user", content=types.TextContent( text=f"Review this {args['language']} code for bugs and idioms:\n\n{args['code']}" ), ), types.PromptMessage( role="assistant", content=types.TextContent(text="I'll review it. Let me read through the code first."), ), ], ) raise NotImplementedError async def completion(ctx: ServerRequestContext[Any], params: types.CompleteRequestParams) -> types.CompleteResult: if ( isinstance(params.ref, types.PromptReference) and params.ref.name == "code_review" and params.argument.name == "language" ): matches = [lang for lang in LANGUAGES if lang.startswith(params.argument.value)] return types.CompleteResult(completion=types.Completion(values=matches, total=len(matches), has_more=False)) return types.CompleteResult(completion=types.Completion(values=[])) return Server( "prompts-example", on_list_prompts=list_prompts, on_get_prompt=get_prompt, on_completion=completion, ) if __name__ == "__main__": run_server_from_args(build_server)