{% extends "base.html" %} {% block title %}{{ _('MCP Servers') }} — {{ _('Admin') }} — mcprack{% endblock %} {% block content %}

🔧 {{ _('MCP Server Registry') }}

{{ _('Manage MCP servers available in your catalog. Register new servers, check their health status, and manage credentials.') }}

➕ {{ _('Register New Server') }}

ℹ️ {{ _('Autodetect:') }} {{ _("Scans this machine for Claude Desktop config, running mcp-rack-* proxies, and known MCP binaries on PATH. Registers any servers not already in the catalog. Only command and args are imported—you'll need to set default credentials.") }}

{% for server in servers %} {% set h = server_health.get(server.id, {}) %} {% else %} {% endfor %}
{{ _('Name') }} {{ _('Label') }} {{ _('Transport') }} {{ _('Category') }} {{ _('Status') }} {{ _('Actions') }}
{{ server.name }}
{{ server.label }} {{ server.transport | upper }} {{ server.category or '—' }} {% if not h.get('reachable', True) %} ⚠ {{ _("won't start") if server.transport == "stdio" else _("unreachable") }} {% endif %} {% if h.get('missing_credentials') %} 🔑 {{ _('missing: %(keys)s', keys=h['missing_credentials'] | join(', ')) }} {% endif %} {% if h.get('reachable', True) and not h.get('missing_credentials') %} ✓ {{ _('ok') }} {% endif %} {{ _('Edit') }} {% if not server.url %}
{% endif %}

{{ _('No servers registered yet. Use the buttons above to register new servers or autodetect existing ones.') }}

{% endblock %}