XIV MCP

What the player controls

The player's settings decide how your code must behave.

You do not configure any of this, but it decides how your code must behave:

The player …What happensWhat you do
has not enabled your plugin yet (the default)Your tools are not offered; calls are refused.Show it in your UI (GetStatus).
chose Keep disabledThe same, and they are not asked again while your registration stays the same.Respect it.
was asked again because your registration grew (a new tool or capability)All your tools pause (not offered, refused) until they consent. Removing tools never asks.Register every tool at startup, with every capability it may need.
set a capability to DenyCalls of tools declaring it are refused before your code runs.Offer a fallback, or say so in your UI.
set a capability to AskAn approval window before each call (or once per session). Critical ones (discard_items) are always asked.Expect waits in jobs.
set one of your tools on its ownThat tool ignores its capabilities' settings: Allow, Ask or Deny for the whole call (critical tools still ask every time). Always allow in the approval window sets just that tool. Undeclared side effects still suspend your plugin.Read it from GetStatus().Tools.
got a call that changed gil, currencies, items, zone, chat or login state without declaring itIf the call took under two minutes, your plugin is suspended: still listed, but every call is refused. Longer calls are only flagged, since the player may have acted in the meantime.Declare honestly; the player lifts suspensions.

Every call, decision and approval is listed under your plugin in /xivmcp → Third-party plugins, and in pluginConfigs/XivMcp/audit.jsonl.

The player's side of this is described in Third-party plugins.