{# One registered server: what it is, what can be changed, and every operation it has (spec §7.1). Two forms with nothing between them but a heading, and both of them are one button and one write. Every field on the settings form changes how the whole server behaves, so nothing on it posts as you type; the table below is saved the same way, by the button underneath it, which is how the picker an operator registered the server on already worked (task 114). The settings are also two things: a card that says what the server is set to, and, at ``?edit=1``, the same card as that form. An operator who came to read which base URL a server proxies to should not be one keystroke away from changing it (task 113). Both modes are rendered here rather than toggled by script, because a card whose only way in is a listener is a card that stops existing when the script does. Neither credential is ever rendered. What is shown is ``Set`` or ``Not set`` and a box to tick; with the box unticked the route does not read the credential fields at all (spec §7.3). #} {% extends "base.html" %} {% from "partials/field.html" import field, choice, switch %} {% from "partials/credential_fields.html" import credential_fields %} {% from "partials/status_badge.html" import status_badge %} {% from "partials/tool_counts.html" import tool_counts %} {% from "partials/toggle_button.html" import toggle_button %} {% block title %}{{ settings.server.name }} · mcp-api-gateway{% endblock %} {% block scripts %} {% endblock %} {% block content %} {# **Needs attention** is not shown here. It lives on the review strip above the operation table, inside the region htmx swaps, so that settling the last row takes the badge off the page it was settled on rather than at the next reload. A badge in this toolbar would be a second copy that could disagree. #}
{# Why the server is off, beside the button that turns it back on. This is the only place the page says that the gateway itself took it out of service, and it used to be the hint under a switch that is no longer here (task 112). #} {% if settings.enabled_note %}{{ settings.enabled_note }}
{% endif %} {% if settings.alerts %}{{ settings.server.spec_url }}{{ settings.uneditable_note }}
{{ settings.server.tool_prefix }}{{ settings.server.base_url }}A name box left empty is the generated name, shown in grey after the prefix this server publishes under. Nothing here is written until Save at the bottom is pressed, and then all of it is — including the rows a filter is hiding.
{% if operations.rows %} {# A GET form: filtering reads and nothing else, and the filter it produces is in the URL, which is what every row's Save carries back with it. #} {% endif %} {% if operations.rows %} {# The form every control in the table belongs to, with nothing inside it. The rows bind to it by id (``form="operations-form"``), which is what lets one form hold controls spread across two hundred ``