프로토타입 · 미리 보기: 공식 레지스트리의 모든 서버를 담고 있으며 30분마다 동기화해요. 리뷰와 계정 기능은 다음 단계에서 열려요.
PopNx MCPAI를 쓰는 사람을 위한 MCP 서버 · 쉬운 말로 설명해요

HAI-MCP

제작자: smlfg버전 0.1.0i★ –i내 컴퓨터에서 실행
레지스트리 이름io.github.smlfg/hai-mcp

설치

개요

제작자가 쓴 설명(영어 원문)

Model-agnostic MCP control plane for HAI: bounded missions, owner-gated actions, drift checks.

PopNx MCP의 세 기둥

이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.

할 수 있는 일

이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.

  • 연결 방식: 내 컴퓨터에서 실행
  • 전송 방식: stdio
  • 카테고리: 기타
  • 입력해야 할 값: HAI_HTTP_TOKEN

설치

쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.

설치하기 전에

  • 기본 점검: 1개 중 1개 통과
  • 내 컴퓨터에서 내 사용자 계정의 권한(파일, 네트워크, 앱)으로 실행돼요.
  • 직접 입력할 값: HAI_HOME, HAI_OWNER_HOME, HAI_TRANSPORT, HAI_HTTP_HOST, HAI_HTTP_PORT, HAI_HTTP_TOKEN

비밀로 표시된 값은 내 계정의 열쇠예요. 절대 다른 사람과 공유하거나 채팅에 붙여 넣지 마세요.

필요한 것

  • PyPIPython의 uv 설치(uvx 명령어용)

어떤 앱을 쓰세요?

위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.

Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요

{
  "mcpServers": {
    "hai": {
      "command": "uvx",
      "args": [
        "hai-mcp"
      ],
      "env": {
        "HAI_HOME": "your-value",
        "HAI_OWNER_HOME": "your-value",
        "HAI_TRANSPORT": "your-value",
        "HAI_HTTP_HOST": "your-value",
        "HAI_HTTP_PORT": "your-value",
        "HAI_HTTP_TOKEN": "your-value"
      }
    }
  }
}

터미널에서 이 명령어를 실행하세요

claude mcp add hai --env HAI_HOME=your-value --env HAI_OWNER_HOME=your-value --env HAI_TRANSPORT=your-value --env HAI_HTTP_HOST=your-value --env HAI_HTTP_PORT=your-value --env HAI_HTTP_TOKEN=your-value -- uvx hai-mcp

실행하기 전에 빈 값을 채워 주세요.

Cursor에서 열기

또는 설정을 직접 복사하기

프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요

{
  "mcpServers": {
    "hai": {
      "command": "uvx",
      "args": [
        "hai-mcp"
      ],
      "env": {
        "HAI_HOME": "your-value",
        "HAI_OWNER_HOME": "your-value",
        "HAI_TRANSPORT": "your-value",
        "HAI_HTTP_HOST": "your-value",
        "HAI_HTTP_PORT": "your-value",
        "HAI_HTTP_TOKEN": "your-value"
      }
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

VS Code에서 열기

또는 설정을 직접 복사하기

프로젝트의 .vscode/mcp.json에 붙여 넣으세요

{
  "servers": {
    "hai": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "hai-mcp"
      ],
      "env": {
        "HAI_HOME": "your-value",
        "HAI_OWNER_HOME": "your-value",
        "HAI_TRANSPORT": "your-value",
        "HAI_HTTP_HOST": "your-value",
        "HAI_HTTP_PORT": "your-value",
        "HAI_HTTP_TOKEN": "your-value"
      }
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.

선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.

직접 입력할 값

  • HAI_HOME env
    Directory for the global HAI state (missions, leases, proofs). Default: ~/.hai
  • HAI_OWNER_HOME env
    Directory for the owner out-of-band channel (one-time nonces). Deliberately outside HAI_HOME. Default: ~/.hai-owner
  • HAI_TRANSPORT env
    Transport selection: 'stdio' (default) or 'streamable-http'.
  • HAI_HTTP_HOST env
    Host for streamable-http transport. Refused unless loopback or HAI_HTTP_TOKEN is set.
  • HAI_HTTP_PORT env
    Port for streamable-http transport.
  • HAI_HTTP_TOKEN 비밀 env
    Bearer token required to accept non-loopback streamable-http connections. Loopback binds without a token.

이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.

할 수 있는 일

내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.

기본 점검i

누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 7일 점검

  • ✓ 통과

    제작자와 저장소 일치

    레지스트리 이름이 GitHub 계정 smlfg 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요

  • … 아직 점검 안 함

    계속 관리되고 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • … 아직 점검 안 함

    라이선스 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • – 해당 없음

    엔드포인트 응답

    내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요

  • – 해당 없음

    OAuth로 로그인

    내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요

  • … 아직 점검 안 함

    도구 설명에 숨겨진 지시 없음

    내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요

기타 카테고리의 다른 서버와 비교i

  • 이 카테고리의 다른 서버 18329개 중 0%보다 스타가 많아요
  • 이 카테고리의 다른 서버 18329개 중 64%보다 최근에 레지스트리에 공개됐어요
  • 기본 점검 결과가 이 카테고리의 다른 서버 18329개 중 100%와 같거나 더 좋아요

레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.

자주 묻는 질문

HAI-MCP, 안전한가요?

해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.

어떤 키나 코드가 필요한가요?

입력해야 할 값: HAI_HTTP_TOKEN

내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?

내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).

아직 관리되고 있나요?

GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.1.0)은 25일 전 레지스트리에 올라왔어요.

어떤 앱에서 쓸 수 있나요?

Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Python (uv)도 있어야 해요.

대신 쓸 수 있는 건 뭐가 있나요?

같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, Excaliself

대안

같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.

카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i

Spec Driven Development

제작자: formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

내 컴퓨터에서 실행★ 440MIT14개월 전 업데이트
설치

Remote Desktop Commander

제작자: desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

클라우드에서 실행★ 211그저께 업데이트
설치

Excaliself

제작자: maciekzygmunt

Find, read, create, edit, and organize Excalidraw drawings in your self-hosted Excaliself instance.

클라우드에서 실행오늘 업데이트
설치

제작자의 README

README 열기

제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.

HAI-MCP · Model-agnostic MCP control-plane for the Human Agent Interface (HAI) approach


Why this repo exists

Agents are now driving shells, editors, browsers, and CI. Most of them work without a human in the loop long enough for the human to lose the thread. HAI — the Human Agent Interface — is an opinionated, evidence-based way to keep agentic work observable, bounded, owner-gated, and recoverable so a human can still *own* the work even when an agent is doing it.

HAI-MCP is the open-source, model-agnostic implementation of that approach. It is one of the pieces of Samuel Fleig's HAI stack — the part that any Model-Context-Protocol-speaking client can talk to, regardless of which LLM sits behind it.

Canonical site: https://www.human-agent-interface.com/ ·

About Samuel: https://www.human-agent-interface.com/samuel/


What "MCP control-plane" means here

MCP — the Model Context Protocol — is a standard JSON-RPC interface that lets a tool server expose tools, resources, and prompts to an LLM-backed client (Claude Code, Codex, Cursor, Grok, OpenCode, Hermes, …). The client discovers the server's tools and calls them during a conversation; the server stays stateless from the model's point of view.

A control-plane server is one that does not do the work itself — it governs how work is authorised, scoped, recorded, and handed back to the human. Concretely, an MCP control-plane:

ConcernWhat HAI-MCP exposes for it
Mission contracthai_open_mission, hai_get_contract, hai_recontract
Session leasinghai_authorize_session — time-bounded, contract-versioned
Activity classificationhai_check_activity / hai_drift_check — on-contract vs. off-contract
Focus & laneshai_set_focus, hai_status — at most 2 ACTIVE lanes
Owner gateone-time nonces out-of-band (HAI_OWNER_HOME or ntfy), or Touch ID on macOS, for accept / recontract / abandon
Evidence & closurehai_proof, hai_close_mission, hai_stop
Inbox & intakehai_intake, hai_distill, hai_park, hai_park_item
Recoveryhai_checkpoint, hai_recover

HAI-MCP is deliberately not an agent runtime. It never calls an LLM, never runs shell, never pushes to git, and never deletes files. It is the judge — agents call it to ask *"may I?"* and to record *"I did"*.


Features

  • One state engine, 23 tools — three surfaces (legacy control plane, mission lifecycle, daily-loop wrappers) sharing one hardened core.
  • Strict fail-closed boundary — inputs are typed and rejected, not coerced. A String "2" is refused for an Integer field; the server stays reachable instead of silently mangling types.
  • Versioned mission contracts — every mission has a contract with a monotonic version. Recontracting produces a visible field-level diff and revokes every existing lease.
  • Time-bounded session leases — hai_authorize_session binds a lease to a mission id, a contract version, a duration, a role, a contribution, and a claimed criterion set.
  • Deterministic drift check — hai_check_activity classifies planned or observed activity against the contract without ever calling an LLM.
  • Two-principal owner gate:
  • Default (nonce): the server delivers a one-time code to the owner channel (HAI_OWNER_HOME / file, or ntfy). The client never sees the code. The code is bound to the exact change, single-use, expiring; only the hash is stored in HAI_HOME.
  • `touchid` (macOS): the server process shows a Touch ID prompt for that exact change. There is no code. The agent's follow-up call applies it; the client cannot approve itself.
  • `ack_legacy`: the old self-asserted owner_ack flag — an honor system, surfaced as such by hai_health.
  • Mount table — hai_bind_project joins a logical project_id to a device-local directory behind owner_ack + reason.
  • Model-agnostic — same binary, same tools, same contract. Switch LLMs without rewriting governance.
  • Two transports — stdio (default) and streamable-http with optional bearer-token binding (loopback only by default).
  • Checkpoint & recover — hai_checkpoint snapshots context; hai_recover returns the smallest recovery next action.
  • 203 tests green — the engine is covered; the slice remains open for the learning-budget and owner-instrument follow-ups.

Install & run

Requires Python ≥ 3.12 and uv.

git clone https://github.com/smlfg/hai-mcp.git

cd hai-mcp uv sync --all-extras uv run hai-mcp # stdio transport, default

Streamable-HTTP transport:

HAI_TRANSPORT=streamable-http \

HAI_HTTP_HOST=127.0.0.1 \ HAI_HTTP_PORT=8765 \ HAI_HTTP_TOKEN="$(openssl rand -hex 32)" \ uv run hai-mcp

HTTP binding to non-loopback hosts is refused unless HAI_HTTP_TOKEN is

set. See docs/OWNER_GATE.md and the --help output.


Sample usage — wiring the server into a client

The server is transport-agnostic; every MCP client gets the same 23 tools. Drop the snippet into the client's MCP config and restart.

Claude Code / Claude Desktop
{

"mcpServers": { "hai": { "command": "uv", "args": [ "run", "--directory", "/absolute/path/to/hai-mcp", "hai-mcp" ], "env": { "HAI_HOME": "/home/you/.hai", "HAI_OWNER_HOME": "/home/you/.hai-owner" } } } }

Cursor

Cursor plugin: this repo is also a Cursor plugin (.cursor-plugin/plugin.json + mcp.json). It starts the server from PyPI with uvx hai-mcp, state goes to ~/.hai and ~/.hai-owner by default. Requires uv.

Manual config:

{

"mcpServers": { "hai": { "command": "uv", "args": [ "run", "--directory", "/absolute/path/to/hai-mcp", "hai-mcp" ], "env": { "HAI_HOME": "/home/you/.hai", "HAI_OWNER_HOME": "/home/you/.hai-owner" } } } }

Codex / Hermes / any MCP stdio client

Same shape — point at the uv run --directory … hai-mcp command and pass the two env vars. More snippets live in docs/client-snippets/.


Sample usage — driving the protocol

A typical agent loop calls HAI-MCP before it acts and after it acts.

1. Open a bounded mission
hai_mission_start(

problem = "Refactor the evaluator harness to be deterministic.", artifact = "Pull request titled 'evaluator: deterministic harness'.", done_criteria = [ {"id": "C1", "description": "Two A/B cases produce identical verdicts on three reruns."}, {"id": "C2", "description": "Harness runs offline; no live network calls."}, ], owner = "samuel", time_limit_hours = 6, non_goals = ["Do not touch the MCP server.", "Do not change contract shapes."], constraints = {"python": ">=3.12", "branch": "slice/eval-determinism"}, )

2. Authorise a session lease
hai_authorize_session(

mission_id = " ", contract_version = 1, agent_identity = "codex-cli", role = "implementer", contribution = "Deterministic A/B harness", expected_result = "Green pytest with frozen inputs.", duration_minutes = 90, criterion_ids = ["C1", "C2"], device_id = "mbp-mirgraatin", harness_id = "codex-cli/0.45", )

3. Check an activity before running it
hai_check_activity(

session_id = " ", activity_step = "Replace random.seed with a seeded fixture in tests/test_eval_ab.py", criterion_id = "C1", affected_paths = ["tests/test_eval_ab.py", "tests/fixtures/ab/case1.json"], )

→ {"verdict": "on_contract", ...}

4. Close with evidence
hai_proof(

mission_id = " ", contract_version = 1, outcome_summary = "A/B cases produce identical verdicts on three reruns; harness offline.", evidence = { "C1": {"command": "pytest tests/test_eval_ab.py -q", "exit_code": 0, "reruns": [0, 0, 0]}, "C2": {"command": "pytest tests/test_eval_ab.py -q --offline", "exit_code": 0}, }, )

5. Owner-gated promotion

For hai_accept_next_step, hai_recontract, or abandoning a mission, the first call without owner_code asks the owner out of band.

  • `file` / `ntfy`: a one-time code is delivered to HAI_OWNER_HOME or an ntfy topic. Relaying it back as owner_code= completes the action. The client never sees the code; only its hash is stored in HAI_HOME.
  • `touchid` (macOS): set HAI_OWNER_CHANNEL=touchid on the server. The server shows a Touch ID prompt and returns status: owner_approved. Call the same tool again with the same arguments (no code) to apply that exact change. Optional: HAI_OWNER_TOUCHID_TIMEOUT (default 60), HAI_OWNER_TOUCHID_HELPER (a compiled binary), and HAI_OWNER_TOUCHID_FALLBACK=file only when Touch ID cannot run.

The approval is bound to the exact change and is single-use. On a Mac, uv run python scripts/manual_touchid.py prompt and … gate exercise the real sensor; CI mocks the helper. Detail: docs/OWNER_GATE.md.


State layout

  • Global: $HAI_HOME — default ~/.hai
  • Owner channel: $HAI_OWNER_HOME — default ~/.hai-owner (deliberately outside HAI_HOME so the agent cannot read it)
  • Per-project: /Projek-Managment/ (legacy) or device mount + relative prefixes when a project_id is bound
  • Mount table: HAI_HOME/core/projects.json

All writes are resolved and confined to these roots.


Project layout

hai-mcp/

├── docs/ │ ├── TOOL_CONTRACT.md # normative tool contract (gates, errors, schemas) │ ├── OWNER_GATE.md # nonce + ack_legacy owner-gate spec │ ├── BUILD_HANDOFF.md │ ├── client-snippets/ # ready-to-paste mcp.json snippets │ ├── eval/ # A/B harness contract │ ├── plans/ # dated design slices │ └── visuals/ # mission-lifecycle banner assets ├── scripts/ # stdio smoke + impact-eval runner ├── src/hai_mcp/ # the server └── tests/ # 203 tests


Limitations

HAI-MCP is intentionally narrow. It does not:

  • Call any LLM. The server is dumb on purpose — governance is a separate concern from generation.
  • Execute code, run shells, push git, or delete files. It refuses tools like *"commit & push"*, *"run pytest"*, *"rm -rf"*. Agents are expected to do those things and report back via hai_check_activity / hai_proof.
  • Merge with `hai-intake` packages. The intake pipeline is a separate stack; coexistence is fine, fusion is not.
  • Provide a UI. There is no das

앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요

PopNx에게 묻기