Skip to main content
Ask Titan Engineering Deep Dive · Part 3 of 7

How we control which tools an AI agent is allowed to use

Ask Titan discovers capabilities through MCP, resolves application policy for the current user, and binds only the permitted tool set to the orchestrator model. Discovery and authorization remain separate concerns.

Enterprise AI MCP Tool authorization LangGraph Least privilege
Capability authorization
before model binding
MCP catalog
SQL Agent
Finance
Documents

Everything currently exposed through MCP

Policy resolver
calculate intersection
Control plane
Capability grants
managed through Titan Webadmin
Model view
SQL Agent
Documents

Only permitted schemas are bound

Authorization boundary
Discovered does not mean permitted.

Ask Titan Engineering Deep Dive

Seven articles, one architecture

Part 3 examines the tool authorization boundary introduced in the orchestration layer. The series continues through Power BI and DAX, conversation context, document retrieval and answer traceability.

The engineering problem

Tool discovery is not authorization

An MCP client can discover a catalog of capabilities. That catalog answers a technical question: what tools does this capability service expose? It does not answer the application question Ask Titan still has to resolve: which of those tools should this user be able to place in front of the model?

We keep that decision in application code. The model is allowed to choose among a permitted set. It is not asked to decide which capabilities it is permitted to use.

Discovery

What exists?

Load the current capability catalog and tool schemas exposed through MCP.

Authorization

What is permitted?

Resolve policy for the validated identity and calculate the effective tool set in application code.

Model binding

What can the model choose?

Bind only the effective tool schemas so unavailable capabilities never become normal choices for that model call.

Principle: capability discovery describes the catalog. Authorization determines the model's effective capability surface.

One request through the boundary

Resolve access before the model sees a tool schema

Ask Titan validates the request identity, discovers the current MCP capability catalog and resolves the configured capability grants. The runtime policy resolver calculates the effective tool set before the orchestrator is built and any tool schemas are bound to the model.

Ask Titan capability authorization flow A validated request identity, the discovered MCP capability catalog and capability grants configured through Titan Webadmin feed the runtime policy resolver. The resolver calculates the effective permitted tool set. Only permitted tool schemas are then available to the orchestrator model. Discovered but unauthorized tools are excluded before model binding. REQUEST IDENTITY MCP CATALOG APPLICATION POLICY EFFECTIVE TOOLS MODEL 01 · IDENTITY Validated user trusted request identity DISCOVERED TOOL SQL Agent DISCOVERED TOOL Finance DISCOVERED TOOL Documents 02 · POLICY Resolve access request identity discovered tools capability grants calculate intersection PERMITTED SQL Agent EXCLUDED Finance PERMITTED Documents 03 · BIND Model sees only permitted schemas CONTROL PLANE Capability grants service managed through Titan Webadmin Effective tools = discovered capabilities ∩ grants Unauthorized capabilities never reach model binding.

Step 1 · calculate the effective set

Authorization is an intersection. Not a prompt instruction

Ask Titan resolves tool access from application policy and compares those grants with the tools currently available through MCP. A grant alone is not enough if the capability no longer exists. Discovery alone is not enough if the current identity is not permitted to use it.

01

Start from validated identity

Resolve policy only after the application has a trusted identity for the request.

02

Load application grants

Use stable capability identifiers to determine the tools permitted for that identity, including any explicit baseline policy.

03

Intersect with discovery

Only tools that are both currently discoverable and permitted become part of the effective set.

Simplified authorization pattern
available_tools = await discover_mcp_tools()
user_grants = await resolve_policy(identity)

allowed_names = unique([
    *user_grants,
    *baseline_capabilities,
])

effective_tools = [
    tool
    for tool in available_tools
    if tool.name in allowed_names
]
DiscoveredGranted by policyEffective result
YesYesBind the tool
YesNoExclude it
NoYesUnavailable; do not bind

Step 2 · bind the model

Do not show the model tools it should not use

Tool calling works from schemas supplied to the model. In Ask Titan, the orchestrator graph is created with the effective tool set and the same set is bound to the model. A disallowed capability is therefore not a normal candidate for model selection in that request.

What the model receives

A deliberately reduced capability surface

Bound

Permitted capability schema

Name, description and input schema are available for model tool selection.

Not bound

Unauthorized capability

The schema is excluded from the current model call rather than relying on the model to ignore it.

Simplified model-binding pattern
orchestrator = build_graph(
    tools=effective_tools,
    checkpointer=conversation_memory,
)

# Inside the model node
model_with_tools = (
    model.bind_tools(effective_tools)
    if effective_tools
    else model
)

response = await model_with_tools.ainvoke(context)
Security boundary: a prompt can guide model behavior, but application code should determine the tool schemas that become available for selection.

Prompting is not authorization

“Do not use this tool” is behavioral guidance

Once a tool schema is bound to the model, that capability is part of the model's available decision surface. A prompt can influence whether the model chooses it, but it does not remove the capability. Ask Titan resolves authorization in software first and binds only the effective tool set to the model.

Avoid

Bind every tool, then rely on prompt instructions

The model sees capability schemas outside the effective tool set and can emit tool calls for them. If the prompt is the only restriction, enforcement depends on probabilistic model behavior.

Prefer

Resolve access first, then bind only the effective tool set

Runtime policy intersects discovered capabilities with configured grants before model binding. The model can reason only over permitted capabilities, while source-level authorization remains enforced during execution.

MCP boundary

MCP authorization and application tool policy solve different problems

Modern MCP specifications include authorization mechanisms for protecting client-to-server access. That is important, but it is not the same question as Ask Titan's application policy: which discovered capability schemas should be exposed to the orchestrator for this validated user?

We keep those concerns separate so protocol-level access can evolve without moving per-user capability policy into the model or conflating it with source permissions.

MCP transport / server access

Controls whether a client can authenticate to and communicate with the MCP service.

Application capability policy

Controls which discovered tool schemas become eligible for the current Ask Titan request.

Model tool selection

Chooses among the already-permitted schemas presented to the model.

Source authorization

Controls what the underlying system allows the selected capability to read or execute.

Separate security layers

Tool authorization does not grant access to the data source

Allowing a user to invoke a specialist capability and allowing that capability to access data are separate controls. Ask Titan treats application-level tool authorization as one layer, not as a replacement for credentials, roles, grants or source-native controls in connected systems.

Layer 1

Capability authorization

May this identity use this Ask Titan capability at all?

Layer 2

Capability connection

Which configured source or semantic model does the specialist execute against?

Layer 3

Source enforcement

What do the credentials, roles, grants and source-native security controls actually permit?

Important: this architecture does not imply automatic end-to-end row-level or column-level security. Those controls depend on the connected source, identity model and deployment configuration.

Capability lifecycle

Policy has to survive a changing tool catalog

Enterprise tool catalogs change. Capabilities are added, renamed, disabled or removed. Authorization therefore cannot be a one-time list copied into a prompt. The effective set has to be recalculated against the current catalog.

New tool

Discovered, not granted

A newly exposed capability does not automatically become available to existing users.

Removed tool

Granted, not discovered

A stale policy entry cannot create a capability that is no longer in the current catalog.

Current tool

Discovered and granted

Only the intersection becomes part of the orchestrator's effective tool surface.

Failure cases

Authorization should fail by reducing access

The useful property of the intersection model is that most mismatches reduce the effective tool set. A stale grant, a missing capability or malformed user-specific policy should not silently turn into broader model access.

CaseExpected runtime behavior
Request identity cannot be validatedDo not resolve a normal user tool set for the request.
User-specific policy is absent or malformedDo not expand access beyond explicitly defined baseline policy.
Tool is discovered but not grantedExclude the tool before graph construction and model binding.
Policy grants a tool that is not discoveredThe tool is unavailable and cannot enter the effective set.
Underlying source rejects executionRespect the source boundary; application tool access does not override source security.

Discovery ≠ authorization

Knowing a tool exists does not make it available to the current user.

Prompting ≠ authorization

Model instructions are not the place to enforce the effective capability set.

Tool access ≠ data access

Application grants do not replace source credentials, roles or native security.

Policy grant ≠ tool existence

Stale grants cannot resurrect a capability missing from the current catalog.

Engineering takeaway

The model should choose among permissions. It should not define them

Ask Titan keeps capability policy in deterministic application code and gives the model only the effective tool set. That keeps model reasoning inside a capability boundary the application can inspect, change and test independently.

Patterns we keep

Validate identity before resolving policy.
Treat MCP discovery as catalog discovery.
Calculate an effective tool set in application code.
Bind only the effective tool schemas to the model.
Keep source security separate from tool authorization.
Recalculate access against the current catalog.
Do not use prompt instructions as the primary access-control boundary.

Next in the series

Part 4 · How Ask Titan queries Power BI semantic models with DAX

Next we go behind one specialist capability boundary: semantic-model metadata, measures and relationships, DAX generation, execution and error feedback when governed business logic lives in Power BI.

Read Part 4

FAQ

Enterprise AI agent tool authorization questions

Practical answers about MCP tool discovery, application-level capability policy, model tool binding and source authorization.

What does tool authorization mean in Ask Titan?

Tool authorization determines which discovered specialist capabilities are permitted for the validated identity and can therefore be bound to the orchestrator model for the request.

Why is MCP tool discovery not the same as user authorization?

MCP discovery tells the client which tools the capability service currently exposes. Ask Titan still applies application policy to decide which of those discovered tools become available to the current user and model call.

Does MCP have its own authorization?

Yes. Current MCP specifications include authorization mechanisms for protecting client-to-server access. Ask Titan's application tool policy is a separate layer that decides which discovered capability schemas are exposed to the orchestrator for a particular validated user.

Why filter tools before model binding?

Tool schemas supplied during model binding define the capabilities the model can normally select. Filtering first means unauthorized capabilities are excluded from the model's effective tool surface rather than relying on prompt instructions to suppress them.

Can a system prompt be used to restrict tool access?

A prompt can guide model behavior, but it should not be the primary authorization boundary. Ask Titan resolves capability access in application code and binds only the effective tool set to the model.

What happens if policy grants a tool that is no longer available?

The tool does not enter the effective set because Ask Titan intersects policy grants with the currently discovered MCP catalog. A stale grant cannot make a missing capability callable.

Does application-level tool authorization replace data-source permissions?

No. Capability authorization and source authorization are separate. Credentials, roles, grants and source-native controls still determine what the connected system actually permits.

Can the model call a tool that was not bound to it?

The normal tool-calling surface contains only the schemas bound for that request, and the LangGraph tool node is built from that permitted set. An excluded capability is therefore outside the configured tool set for the turn.

How do tool permissions change when the capability catalog changes?

The effective tool set is recalculated against the current catalog. New tools do not automatically inherit existing grants, while removed tools no longer become effective even if a stale policy entry remains.

Enterprise AI authorization

Give AI agents useful tools without making every tool available to every user

Ask Titan separates capability discovery, application policy, model tool selection and source authorization. The same pattern can be used in enterprise AI systems that need controlled access to multiple specialist capabilities.

One request, four decisions

01Validate the request identity
02Resolve permitted capabilities in application policy
03Bind only the effective tool set to the model
04Keep source authorization as a separate boundary

Technical references

The examples in this article are simplified architecture patterns. These public references document MCP authorization direction and the LangChain/LangGraph tool-binding behavior used in the design.