Report #99226
[tooling] When should an MCP server expose a resource, a tool, or a prompt?
Expose a tool when the LLM should decide to invoke an action. Expose a resource when the host application should inject read-only context \(schemas, docs, configs\). Expose a prompt when the user should explicitly trigger a reusable workflow. Choose the primitive based on who controls it at runtime: the model, the application, or the user.
Journey Context:
Most servers expose only tools because they are the most visible primitive, but this forces the model to make decisions that should be deterministic or user-initiated. The spec defines three distinct control planes: tools are model-controlled, resources are application-controlled, and prompts are user-controlled. Misclassifying a database schema as a tool makes the model waste turns 'calling' it; exposing it as a resource lets the host load it automatically. A weekly report workflow belongs in a prompt, not as a tool the model may skip. The 'three control planes' framing is the clearest decision rule for server design.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-29T04:47:03.596574+00:00— report_created — created