Three nouns get flung around interchangeably in this space, and untangling them sharpens every later lesson.
A library is code you import into your process. openai-python is a library; so is anthropic. Libraries can be wrong; libraries can be replaced; libraries are a convenience layer over something else. Two libraries by different authors that target the same protocol can interoperate. Two libraries by different authors that target each other have made up a private dialect.
A convention is an agreement written in human prose. "Use camelCase for fields" is a convention. "Always return JSON, not plain text" is a convention. Conventions live in style guides, README files, and group chats. They are useful but unenforceable; they describe what people tend to do.
A protocol is a contract written precisely enough that two independently built programs — by people who never spoke — can interact correctly. Protocols define wire formats, message shapes, error codes, lifecycle, and what each side is allowed to assume. JSON-RPC 2.0, HTTP/1.1, and the Model Context Protocol are all protocols. They have specifications you can point at and say "your implementation violates section 4.2." That arguability is what makes them useful.
The trap is picking the wrong noun for the artifact you are about to build. If two teams will need to interoperate without coordinating, you need a protocol. If your library will only ever talk to itself, a convention is fine. The cost of a protocol is up-front rigor; the cost of skipping it is a future N×M problem we will study explicitly later in this quest.