Governing Multiple APIs with a Single OpenAPI Style Guide
Quick answer: A style guide is only useful when it is executable and shared. Encode naming, versioning, and error conventions as rules that a CI check runs against every API,
Read articleThe Powerduck Blog
Product updates, engineering notes, and guides for designing, debugging, testing, mocking, and serving MCP tools from one OpenAPI spec.
Browse the guidesQuick answer: A style guide is only useful when it is executable and shared. Encode naming, versioning, and error conventions as rules that a CI check runs against every API,
Read articleQuick answer: The OpenAPI contract is language-neutral; the prose around it is not. Translate the human-facing descriptions, not the structural schema, and keep every locale pulling from the same source
Read articleQuick answer: A client's cookie jar is convenient but implicit: it stores and resends session cookies automatically, which makes an authenticated flow look effortless while hiding the actual
Read articleQuick answer: If your API client refuses to work without signing into a cloud account, you have handed a core part of your workflow to a network round trip you
Read articleQuick answer: An MCP tool is a piece of code that can read and act on real data, so it deserves the same security review as any service you deploy.
Read articleQuick answer: If your agent has a working MCP tool for an API but the model still hand-writes a fetch, the failure is usually one of three things: the tool&
Read articleQuick answer: An API environment is just a named set of variables: base URLs, credentials, and feature flags. Keeping those in plain, version-controlled files instead of cloud workspaces gives you
Read articleQuick answer: Webhooks and callbacks are HTTP requests your service makes, not ones it receives, and they deserve the same contract discipline as inbound operations. Define their payloads, signing, and
Read articleQuick answer: The readOnly and writeOnly keywords exist precisely so a generator can split one schema into the shape a client receives and the shape it sends. If your generated
Read articleQuick answer: An MCP tool should return a structured, machine-readable error when something goes wrong, not let a raw exception bubble up. The agent calling the tool has to decide
Read articleQuick answer: Randomized test data is a good idea; an unseeded random generator is not. Without a fixed seed, every run explores a different input, and when a failure occurs
Read articleQuick answer: Mocking a Server-Sent Events endpoint is not the same as returning a list. The value under test is the stream over time: the framing of each event, the
Read article