SM

shalimov04/mcp-airlock

Developer tools

Эта страница переведена автоматически. Технические детали смотрите в оригинале. Открыть оригинал

15 stars 7 forks Качество 74 Тренд 41MIT

Доверенность управления без гражданства для MCP (2026-07-28): политика, сухая практика, подтверждение личности, аудит, отслеживание

Обзор

mcp-airlock - это прокси-сервер, который вы ставите между агентом ИИ и сервером MCP, когда сервер может делать вещи, которые вы не хотите, чтобы агент делал самостоятельно. В нем говорится о пересмотре протокола 2026-07-28 (безгосударственный: без сеанса, без инициализации, один POST за запрос) и добавляется часть, которую протокол оставляет вам: кому позволено называть то, что, сухие прогоны по умолчанию, человек в петле для опасных вызовов, аудиторский след и отслеживание. Он намеренно мал. Нет никакого пользовательского интерфейса, нет языка политики, кроме плоского YAML, нет собственного MCP SDK. Весь прокси - это одно приложение Starlette плюс несколько вспомогательных модулей. Агент отправляет обычные инструменты / вызов прокси-серверу вместо сервера. Прокси: 1 Выясняет, кто звонит. Это происходит от JWT (Authorization: Bearer) или, если вы запустите его за шлюзом, который уже сделал аутентификацию, из заголовка X-Airlock-Principal. Он никогда не берется из органа запроса. Нет директора, нет звонка.

Обзор (машинный перевод)

Краткий обзор - англ.

mcp-airlock - это прокси-сервер, который вы ставите между агентом ИИ и сервером MCP, когда сервер может это сделать. То, что вы не хотите, чтобы агент делал сам. В нем говорится о пересмотре 2026-07-28 годов протокол (без состояния один: нет сессии, нет initialize, один POST на запрос) и добавляет части, которые протокол оставляет вам: кому позволено называть что, сухие прогоны по умолчанию; Человек в петле для опасных звонков, аудиторский след и отслеживание.

Он намеренно мал. Нет пользовательского интерфейса, нет языка политики, кроме плоского YAML, нет MCP SDK. собственной. Весь прокси - это одно приложение Starlette плюс несколько вспомогательных модулей.

Как проходит звонок

Агент отправляет обычный T1 на прокси-сервер вместо сервера. Прокси:

1 Выясняет, кто звонит. Это происходит от JWT ([T2]) или, если вы бежите Он находится за шлюзом, который уже сделал аутентификацию X-Airlock-Principal. Голова. Он никогда не берется из органа запроса. Нет директора, нет звонка. Имя, которое является пустой или имеет белое пространство вокруг него также не является основным, из любого источника: обрезанный, [4] будет [5]. 2.Ищите инструмент в политике. Инструменты, которые не перечислены, отклоняются.

Эта страница переведена автоматически. Технические детали смотрите в оригинале.

README

Показан фрагмент оригинального README. Открыть оригинал.

mcp-airlock

Краткий обзор по-русски

mcp-airlock is a proxy you put between an AI agent and an MCP server when the server can do things you don’t want an agent doing on its own. It speaks the 2026-07-28 revision of the protocol (the stateless one: no session, no initialize, one POST per request) and adds the parts the protocol leaves to you: who is allowed to call what, dry runs by default, a human in the loop for dangerous calls, an audit trail and tracing.

It is deliberately small. There is no UI, no policy language beyond flat YAML, no MCP SDK of its own. The whole proxy is one Starlette app plus a few helper modules.

How a call goes through

The agent sends a normal tools/call to the proxy instead of the server. The proxy:

  1. Works out who is calling. That comes from a JWT (Authorization: Bearer) or, if you run it behind a gateway that already did the authentication, from an X-Airlock-Principal header. It is never taken from the request body. No principal, no call. A name that is blank or has whitespace around it is no principal either, from either source: trimmed, alice would be alice.
  2. Looks the tool up in the policy. Tools that are not listed are refused. Listed tools have a risk tier per environment, so the same delete_service can be free in dev and gated in prod.
  3. Depending on the tier:
    • L0 (read) goes straight through.
    • L1 (suggest) always goes through with dry_run: true, whatever the agent asked for.
    • L2 (confirm) goes through with dry_run: true first, and the result comes back to the agent as input_required with a description of what would happen and a signed requestState. When a person says yes, the agent repeats the call with that state and the proxy executes it for real, once. Repeating it again is refused.
    • L3 (auto) goes through as sent.
  4. Checks the blast radius: how many objects one call touches (the length of a list argument you name in the policy) and how many a principal has touched in the last hour or day.
  5. Forwards the call, cuts the response down to the output cap if it is too big, and marks anything in it that smells like a prompt injection. Marking only; it does not change what the agent gets to see.
  6. Writes two audit records, one before the upstream call and one after, whatever happened. The JSONL file gets each one before the proxy goes on; the Postgres table, when there is one, is written from a queue a moment later.

Refusals come back as tool results with isError: true, not as protocol errors, so the model sees why and can do something else. Every tools/call result, a pending one included,

Открыть полный README на GitHub

Установка

uvx mcp-airlock --help
Новичок в MCP? Начните с руководства на mcpskill.org →