Skip to main content
Glama

approval-gate-mcp

장기 실행 자동 프로세스 앞에 인간 승인 게이트를 두는 MCP 서버입니다. 상태, 로그, 재시작, 핫-리로드 파라미터, 그리고 수행한 작업 요약 등 실제로 운영하는 데 필요한 도구도 함께 제공합니다.

FastMCP로 구축되었으며, 모든 MCP 클라이언트에서 작동합니다.

문제

스스로 작동하는 프로세스는 그 행동 중 하나가 중대한 결과를 초래하기 전까지는 유용합니다. 일반적인 해결책은 둘 다 좋지 않습니다. 끄면 잘 수행하던 모든 것을 잃게 됩니다. 그냥 두면 사후에야 알게 됩니다.

게이트는 세 번째 옵션입니다. 프로세스는 무인으로 계속 실행되지만, 중대하다고 표시한 행동을 취하려 할 때는 실행 대신 제안서를 작성하고 다음 단계로 넘어갑니다. 여러분은 시간이 될 때마다 이미 열려 있는 MCP 클라이언트에서 제안서를 검토하고 승인하거나 거부합니다. 프로세스는 다음 주기에 여러분의 결정을 반영합니다.

어느 쪽도 상대를 차단하지 않습니다. 중간에 서비스가 없습니다. 계약은 JSON 파일 두 개입니다.

  process                            you
     |                                |
     |-- writes proposal ----> pending.json
     |                                |
     |                          list_pending_approvals
     |                          approve(0) / reject(1)
     |                                |
     |<-- reads on next cycle -- approved.json
     |
     |-- acts, appends to records.json

도구

승인 게이트

도구

기능

list_pending_approvals

결정을 기다리는 모든 제안서와 모든 필드

approve(index)

제안서 하나를 승인 파일로 이동

reject(index)

제안서 하나를 폐기

프로세스 제어

도구

기능

process_status

실행 여부, PID, 가동 시간, CPU, 메모리, 디스크, 마지막 로그 줄

process_logs(lines)

로그 파일 꼬리 보기

restart_process

시작 스크립트로 재시작. SSH 세션과 분리되어 실행

run_command(cmd)

일회성 점검을 위한 탈출구

기록

도구

기능

record_summary(n)

합계, 해결 대 미해결, 유형별 분류, 최근 항목

record_dashboard

더 넓은 테이블 보기와 현재 열린 기록 및 노출 정도

파라미터PARAMS_SCHEMA가 매니페스트를 가리킬 때만 등록됨

도구

기능

list_params

이 배포가 조정 가능하다고 선언한 항목과 현재 재정의된 항목

set_param(name, value)

매니페스트에 대해 검증된 재정의 하나를 기록

clear_param(name)

재정의 하나 또는 전체를 제거

체인EVM_RPC_URL, WALLET_ADDRESS, TOKEN_CONTRACT가 모두 설정된 경우에만 등록됨

도구

기능

wallet_balance

감시 주소에 대한 읽기 전용 ERC-20 및 네이티브 잔액. 서명은 없음

설치

git clone https://github.com/WillyV347/approval-gate-mcp
cd approval-gate-mcp
pip install -r requirements.txt
cp .env.example .env      # then edit it

클라이언트에 연결하기 전에 인스펙터에서 시도해 보세요:

fastmcp dev server.py

그런 다음 등록하세요. JSON 구성을 읽는 클라이언트의 경우:

{
  "mcpServers": {
    "approval-gate": {
      "command": "python3",
      "args": ["/absolute/path/to/approval-gate-mcp/server.py"],
      "env": {
        "VPS_HOST": "your.host.or.ip",
        "VPS_USER": "your-ssh-user",
        "PROCESS_DIR": "/srv/my-process",
        "PROCESS_MATCH": "my_process.py",
        "PARAMS_SCHEMA": "/absolute/path/to/params.schema.json"
      }
    }
  }
}

VPS_HOST, VPS_USER, PROCESS_DIR에는 기본값이 없습니다. 누락되면 서버는 명확한 메시지를 표시하고 종료합니다. 작성자가 하드코딩한 일부 호스트로 조용히 폴백하는 모니터링 도구는 버그이므로, 이 서버는 추측을 거부합니다.

인증은 기존 SSH 설정을 사용합니다. 서버는 시스템 ssh 바이너리를 셸로 호출하므로 에이전트, 하드웨어 키, 에이전트를 노출하는 비밀번호 관리자 모두 변경 없이 작동합니다. 개인 키를 직접 읽지 않습니다.

프로세스가 구현해야 하는 계약

프로세스 쪽에 세 가지가 필요합니다. 라이브러리가 필요하지 않습니다.

1. 기록. JSON 배열에 추가합니다. 존재하면 네 개의 키가 해석되고, 나머지는 그대로 전달됩니다:

[
  {
    "id": "job-1041",
    "record_type": "reindex",
    "resolved": true,
    "outcome": "win",
    "cost": 4.25,
    "result": 11.80,
    "label": "nightly reindex, shard 3"
  }
]

2. 제안서. 승인 모드로 실행 중일 때는 실행 대신 여기에 기록합니다:

{
  "proposals": [
    {
      "id": "job-1042",
      "label": "reindex shard 7",
      "action": "reindex",
      "cost": 6.00,
      "created_at": "2026-08-18T22:14:07Z"
    }
  ]
}

포함하는 모든 필드가 표시됩니다. 서버는 제안서에 대한 스키마가 없고 원하지도 않습니다.

3. 승인 파일을 폴링합니다. 각 주기마다 approved.json을 읽고, 거기에 있는 내용을 실행한 다음 비웁니다. 대략:

approved = read_json(APPROVED_FILE) or {"proposals": []}
for proposal in approved["proposals"]:
    execute(proposal)
write_json(APPROVED_FILE, {"proposals": []})

서버 쪽에서 순서는 의도적입니다. 결정은 approved.json에 기록하기 전에 pending.json에서 제안서를 제거하므로, 절반 완료된 결정의 실패 모드는 제안서가 삭제되는 것이지 작업이 중복 실행되는 것이 아닙니다.

파라미터, 그리고 이 저장소에 없는 이유

핫-리로드는 서버가 무엇을 조정할 수 있는지 알아야만 유용합니다. 한 배포의 파라미터를 공유 도구에 하드코딩하면 단일 목적이 됩니다. 따라서 매니페스트에 선언하고 PARAMS_SCHEMA가 그것을 가리키게 하세요:

{
  "poll_interval_seconds": { "type": "int",  "description": "Seconds between work cycles" },
  "max_concurrent_jobs":   { "type": "int",  "description": "Jobs in flight at once" },
  "dry_run":               { "type": "bool", "description": "Plan work but do not execute" },
  "approval_mode":         { "type": "bool", "description": "Queue proposals instead of acting" }
}

지원되는 유형은 int, float, bool, str, dict, list입니다. set_param은 이에 대해 강제 변환 및 검증하고 변환할 수 없는 것은 거부합니다. 매니페스트가 없으면 파라미터 도구는 등록되지 않습니다. 이는 검증할 것이 없는 쓰기 경로를 노출하는 것보다 낫습니다.

params.schema.json은 gitignore 처리됩니다. 튜닝은 여러분의 것이기 때문입니다. params.schema.example.json이 시작점으로 제공됩니다.

프로세스가 시작 시 오버라이드 파일을 읽게 하고, 재시작 없이 변경 사항을 적용하려면 각 주기마다 읽게 하세요:

overrides = read_json(PARAMS_FILE) or {}
poll_interval = overrides.get("poll_interval_seconds", POLL_INTERVAL_DEFAULT)

예제 세션

> is it running?

  Process RUNNING

  PID:      31882
  Uptime:   14h 22m (51720s)
  CPU:      0.6%
  Memory:   84.3 MB
  Disk:     212M

  Last log: 2026-08-18 22:03:11 cycle complete, 2 proposals queued

> anything waiting on me?

  2 proposal(s) awaiting approval

  --- Proposal #0 ------------------------------
    id:           job-1042
    label:        reindex shard 7
    action:       reindex
    cost:         6.00
    created_at:   2026-08-18T22:14:07Z

  --- Proposal #1 ------------------------------
    id:           job-1043
    label:        reindex shard 12
    action:       reindex
    cost:         6.00
    created_at:   2026-08-18T22:14:07Z

  Use approve(index) or reject(index) to decide.

> approve 0, reject 1

  Approved and queued for execution: reindex shard 7
  Rejected and removed: reindex shard 12

위 출력은 예시입니다.

안전에 관한 참고 사항

  • run_command는 원격 호스트에서 임의의 셸을 실행합니다. 어차피 터미널을 여는 대안이기 때문에 존재하지만, 여기서 가장 위험한 도구입니다. 모든 것을 root로 실행하지 말고 SSH 사용자를 실제로 필요한 범위로 제한하세요.

  • wallet_balance는 읽기 전용이며 키를 건드리지 않습니다. 구성하지 않으면 존재하지 않습니다.

  • 이 저장소에는 자격 증명을 저장하는 것이 없습니다. RPC URL은 경로에 공급자 키를 포함하므로 EVM_RPC_URL을 환경에 두고 구성 파일에는 넣지 마세요.

  • StrictHostKeyCheckingaccept-new로 설정됩니다. 알 수 없는 호스트는 첫 연결 시 신뢰하지만, 변경된 호스트 키는 여전히 실패합니다. 더 엄격한 동작을 원하면 yes로 설정하고 known_hosts를 미리 채우세요.

라이선스

MIT

-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.

  • A paid remote MCP for CLI tool MCP, built to return verdicts, receipts, usage logs, and audit-ready

  • A paid remote MCP for hosted MCP server, built to return verdicts, receipts, usage logs, and audit-r

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/WillyV347/approval-gate-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server