Product
Designing for Clients You Do Not Control
This article explains how the BRAWLER AI MCP server is designed for third party clients with different interfaces.

Building a feature inside your own app gives you control over the whole conversation. You choose the button label, the order of the fields, the confirmation screen, and the error message. You can stop a user before a vague request becomes a bad action.
By contrast, the BRAWLER AI MCP server operates under a different constraint. Its tools can be called from AI clients built by someone else. The server does not control how those clients render a result, when they retry a request, or how their users describe what they want.
That means the server has to carry the meaning.
Start with tool descriptions. A tool name can only do so much. The description needs to say what the tool actually reads or changes, what input it expects, and where its boundaries are. If a tool retrieves training sessions, it should not be described as general coaching. If it prepares a journal entry, it should not sound as if the entry has already been saved.
This precision is not documentation polish. AI clients use those descriptions to decide which action fits a request. A vague description invites the model to guess. A precise description gives it a smaller, more honest decision space.
Annotations matter for the same reason. The server should identify which actions are read-only and which can alter a record. A client may use that information to choose its presentation or confirmation behavior. Even when a client handles the distinction imperfectly, the server has stated the contract clearly.
For a training journal, the read and write boundary is especially important. Asking what you trained recently is a lookup. Adding a round against a partner changes your history. Those actions should never be presented as equivalent just because both began with a sentence in a chat box.
Responses also have to survive paraphrase.
An MCP response may not appear to you exactly as the server produced it. A model might summarize the result, reorder details, or combine it with other context. So the response should make key facts hard to lose. It should distinguish recorded evidence from interpretation. It should name relevant session structure. It should state when a proposed change still requires confirmation.
Suppose you ask why your guard retention has felt worse. The server can return sessions, positions, and observations that bear on the question. The client may turn those facts into a concise answer. If the response clearly labels what came from your journal and what is an inference, the paraphrase has a better chance of remaining honest.
Errors need the same treatment. "Something went wrong" is nearly useless to a client and frustrating to you. A useful error says whether required information is missing, authorization needs attention, or a requested action is not available. It should help the client recover without encouraging it to invent a result.
Retries are another reason to design defensively. The server cannot assume a client will call an action only once. Network interruptions and agent behavior can produce repeated requests. Read operations can usually tolerate repetition. Write operations need staging and explicit confirmation so a retry does not quietly create duplicate history or apply an unintended change.
User phrasing is the least controllable input of all. Practitioners do not speak in database schemas. You say, "I kept getting folded from headquarters," not, "Filter my rounds by a standardized position identifier." The client translates natural language into a tool request, but the server must still validate what arrives. It should not treat a confident model interpretation as proof that every required detail is known.
This is where directness serves the practitioner. Clear descriptions, explicit annotations, structured responses, and guarded writes may sound like backend concerns. Their practical effect is consistency. You should receive the same basic truth about what was read, what was inferred, and what might change, even when the surrounding client behaves differently.
Consistency does not mean identical wording or identical screens. Those belong to the client. It means the server keeps its promises at the protocol boundary. A read stays a read. A proposed write stays pending until confirmed. Missing evidence remains missing. A client cannot make the underlying action safer by sounding reassuring, so the server must be safe without relying on tone.
This approach also keeps expectations honest. The BRAWLER AI MCP server is live for paid subscribers through direct connector setup. Directory listing and marketplace approval are still pending. Direct availability does not establish a directory, marketplace, or official support claim for any particular client.
Designing for clients you do not control is mostly the discipline of refusing hidden assumptions. The BRAWLER AI MCP server says what its tools do, marks their effects, and returns information that can withstand an AI model explaining it in different words. For you, that means your training history should behave like the same record wherever a capable client asks about it.


