{% extends "base.html" %}{% block title %}Access{% endblock %}{% block body %}

Access

Everything a server offers, and what one agent may do with each. Allow and Deny are standing rules; Ask means no rule, so the resource default decides (usually a prompt on your phone). Saving writes only what changed.

{% if ag %}
{{ ag.name }}{% if ag.disabled %}disabled{% else %}active{% endif %}

Token {{ ag.token_prefix }}… · Last seen {{ ag.last_seen_at.strftime('%m-%d %H:%M') if ag.last_seen_at else 'never' }}

{% if ag.note %}

{{ ag.note }}

{% endif %}
{% endif %}
{% if res and res.kind == 'mcp' %}
{% endif %} {% if res and res.kind == 'mcp' %}{% endif %}
{% if res and res.kind == 'mcp' %}

Scope narrows each rule to calls with that argument (for example account_name=agents), on the tools that take it. Keys: {{ arg_keys|join(', ') or 'none' }}. Resource default: {{ res.default_mode }}.

{% endif %} {% if not resources %}

No MCP servers or LLM gateways yet. Add one.

{% endif %} {% if error %}
{{ error }}
{% endif %} {% if drift %}
Tool changes on {{ res.name }} since the baseline of {{ (res.config.tools_seen_at or '')[:16] }}, found {{ (drift.at or '')[:16] }} {% if drift.added %}
New: {% for t in drift.added %}{{ t }} {% endfor %}(no rule covers them, so they ask)
{% endif %} {% if drift.removed %}
Removed: {% for t in drift.removed %}{{ t }} {% endfor %}
{% endif %} {% for c in drift.changed %}
Changed: {{ c.tool }}{% if c.new_args %} · new arguments {{ c.new_args|join(', ') }} (not checked by any rule until listed in the resource's argument keys){% endif %}{% if c.dropped_args %} · dropped {{ c.dropped_args|join(', ') }}{% endif %}
{% endfor %}
{% endif %} {% if groups %}
{% for group, rows in groups.items() %}

{{ group }} {{ rows|length }}

{% if group != 'gone' %}
All:{% for s in ['allow','ask','deny'] %}{% endfor %}
{% endif %}
{% set gi = loop.index %} {% for r in rows %}
{{ r.name }} {% if r.flag == 'new' %} new{% elif r.flag == 'changed' %} changed{% elif r.flag == 'gone' %} gone{% endif %} {% if r.description %}
{{ r.description }}
{% endif %}
{{ r.pattern }}
{% if r.new_args %}
New arguments: {{ r.new_args|join(', ') }}
{% endif %} {% if r.everyone and r.everyone != 'ask' %}
Every-agent rule: {{ r.everyone }}
{% endif %} {% for c in r.covered_by %}
Also decided by {{ c }}
{% endfor %} {% if r.other_rules %}
{{ r.other_rules }} other rule(s) on this tool (qualified or constrained), see Rules
{% endif %}
{% for s in ['allow','ask','deny'] %}{% endfor %}
{% endfor %}
{% endfor %}
No changes
{% endif %} {% endblock %} {% block scripts %} {% endblock %}