All entries

    MCP Tools Need More Than a Login: Designing Coach Access

    Authentication identifies a caller. Authorisation determines whose records they may read or change, including role, relationship and history boundaries.

    Role-based software access console with permitted and denied record paths, overlooking futuristic Paris
    GPT-generated technical pixel-art illustration with a futuristic city backdrop. Conceptual engineering imagery, not a product screenshot or measured result.

    Connecting an application to an AI chat is exciting because the interface becomes conversational. It is also easy to focus on tool names before answering a more fundamental question: whose data can this caller reach? UltraFit360 has distinct client and coach workflows, and the coach integration’s documented design makes that separation explicit. A login alone does not establish permission to inspect another person’s history or change their plan. This article explains the product-level boundaries behind a trustworthy integration without publishing our private tool definitions, internal endpoints or token handling.

    Identity answers only the first question

    Authentication establishes an identity under a particular credential. It does not by itself establish that the person is a coach, belongs to an organisation or has an accepted relationship with the requested client. Treating those questions as equivalent creates a product that can look correct in a single-account demo and fail as soon as multiple roles exist.

    A useful operation begins by determining the caller and then resolving the specific permission. The result should not depend on a model politely following an instruction. The application must enforce the boundary even when an operation is called directly or the assistant chooses an unexpected sequence.

    Tool discovery is not access control

    Separating client and coach tool surfaces helps each audience understand the available tasks. It also reduces accidental confusion about what a tool is intended to do. But hiding a tool from a menu is not sufficient enforcement; the server still needs to reject an unauthorised caller.

    This distinction resembles frontend navigation. A sub-coach may not see an organisation-wide page, but removing its link does not protect the underlying data. The same principle applies when the interface is a language model. Discoverability is a usability choice. The service must remain the source of permission.

    Relationships can change after login

    An invitation, a pending connection and an accepted coaching relationship represent different states. A coach who has merely invited someone should not automatically gain access to that person’s history. An archived relationship may need a different policy from an active one.

    The documented coach integration uses accepted relationships and role-aware access rather than assuming that a known client identifier is enough. This is a general pattern: resolve access at the time of the operation and make the relationship state explicit. A credential issued earlier should not freeze a business relationship forever.

    History access has a time boundary too

    A newly accepted relationship does not necessarily justify reading everything a person recorded before it began. A product can choose a coaching start date as the lower bound for visible history. That decision should be consistent across the portal and conversational tools.

    The frontend then needs to communicate the boundary honestly. An empty history may mean no records fall within the permitted period, not that the person never logged anything. A helpful answer explains the available scope instead of inventing missing context. The point is not to reveal internal access rules in detail; it is to make the user-facing meaning understandable.

    EXPLAINED / SEQUENCE

    A login is the start of the permission check

    Resolve business permissions when the operation runs, not only when the credential was issued.

    Operation-time checks

    1. Identify the caller

      Establish the authenticated identity.

    2. Resolve role and relationship

      A pending invitation is not an accepted coaching relationship.

    3. Bound the visible records

      Apply the permitted history window and resource scope.

    4. Enforce the operation

      Reject unauthorised reads or writes even if a tool was visible to the model.

    THE KEY DISTINCTION

    Tool discovery helps usability; the server must enforce access. Recheck relevant conditions before committing a change.

    A public teaching flow. It deliberately omits internal role names, payloads, identifiers and permission-query details.

    Preview and confirmation need careful wording

    For changes that affect a client, a preview can show the proposed edit before commitment. That is useful even when the operation is relatively small because it surfaces misunderstandings before they become saved state. The preview must still be bound to the intended resource and revalidated when executed.

    An important limitation in the documented integration is that confirmation inside the same AI conversation is not an independent approval channel. The host model may participate in generating the next tool call. I would never describe that mechanism as equivalent to a separate human-controlled approval interface unless the application actually enforces such a boundary.

    Keep public examples independent

    A teaching matrix can use fictional people: one coach, a teammate, an accepted client and a pending invitation. Explain which kinds of task should be available and why. There is no need to publish actual record identifiers, tool schemas or production routing details to make the lesson concrete.

    A useful example also includes refusal. “I cannot access that client under this account” is a valid product outcome, not a failure to be hidden. A refusal should avoid revealing whether an unrelated person exists. The assistant can explain the next authorised step without leaking information about another account.

    Transport security and product permissions complement each other

    The MCP specification discusses security considerations such as binding credentials to intended resources and avoiding unsafe token handling. Those protocol concerns matter, but they do not replace business-level access rules. Correctly transported credentials can still be applied to an incorrectly authorised operation.

    Conversely, a well-designed relationship model does not justify improvising an OAuth flow. Follow the current protocol and client documentation for transport and authorisation mechanics. Keep those responsibilities separate enough to test independently. This article discusses the design principles, not a certification of every supported chat client or integration version.

    Test transitions rather than only happy paths

    A useful test set includes a pending invitation, an accepted relationship, an archived connection, a role change and a request outside the visible history period. It should exercise both reads and writes. The important question is whether the same boundary holds when the interface changes.

    I would also test that a preview does not silently grant later access after a relationship is revoked. Approval and permission are separate checks. The operation may have been understandable and previously allowed, yet no longer be authorised when execution occurs. That is a normal lifecycle event that a trustworthy product needs to handle.

    Questions worth asking

    Does a signed-in coach automatically see every organisation client? Only if the product’s role policy explicitly permits it. Team membership, head-coach powers and assigned-client access should be defined rather than inferred from a label.

    Can I enforce permissions in a prompt? A prompt can explain expected behaviour, but the application must enforce the actual boundary. The model should not be the only defence between unrelated accounts.

    Should every user-facing action become an MCP tool? Not necessarily. Expose operations that have clear inputs, useful outcomes and enforceable permissions. A smaller, understandable tool surface can be easier to use and review than a complete mirror of every internal method.

    FURTHER READING

    Sources

    Technical references checked .

    END OF ENTRY / 14
    BEHIND THE JOURNAL

    Eeshan Singh

    I’m Eeshan Singh Pokharia, an AI Full Stack Developer and CoFounder of UltraFit360. I work across AI features, full-stack product development, and web and mobile experiences—from Figma and frontend interactions to the systems behind them.

    I design interfaces for both individuals and coaches, so the difference between “my record” and “a client I am allowed to support” is central to the product. This entry explains that relationship without exposing the private integration surface.

    Meet the author