Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Model-agnostic MCP control plane for HAI: bounded missions, owner-gated actions, drift checks.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
HAI_HOME, HAI_OWNER_HOME, HAI_TRANSPORT, HAI_HTTP_HOST, HAI_HTTP_PORT, HAI_HTTP_TOKEN「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
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/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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .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がつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
HAI_HOME envHAI_OWNER_HOME envHAI_TRANSPORT envHAI_HTTP_HOST envHAI_HTTP_PORT envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント smlfg で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック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, Date Math
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Date/time math for agents: business days, holidays, time zones, cron, RRULE. 25 free calls/day.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
HAI-MCP · Model-agnostic MCP control-plane for the Human Agent Interface (HAI) approach
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/
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:
| Concern | What HAI-MCP exposes for it |
|---|---|
| Mission contract | hai_open_mission, hai_get_contract, hai_recontract |
| Session leasing | hai_authorize_session — time-bounded, contract-versioned |
| Activity classification | hai_check_activity / hai_drift_check — on-contract vs. off-contract |
| Focus & lanes | hai_set_focus, hai_status — at most 2 ACTIVE lanes |
| Owner gate | one-time nonces out-of-band (HAI_OWNER_HOME or ntfy), or Touch ID on macOS, for accept / recontract / abandon |
| Evidence & closure | hai_proof, hai_close_mission, hai_stop |
| Inbox & intake | hai_intake, hai_distill, hai_park, hai_park_item |
| Recovery | hai_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"*.
String "2" is refused for an Integer field; the server stays reachable instead of silently mangling types.hai_authorize_session binds a lease to a mission id, a contract version, a duration, a role, a contribution, and a claimed criterion set.hai_check_activity classifies planned or observed activity against the contract without ever calling an LLM.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.owner_ack flag — an honor system, surfaced as such by hai_health.hai_bind_project joins a logical project_id to a device-local directory behind owner_ack + reason.streamable-http with optional bearer-token binding (loopback only by default).hai_checkpoint snapshots context; hai_recover returns the smallest recovery next action.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_TOKENis
set. See
docs/OWNER_GATE.mdand the--helpoutput.
The server is transport-agnostic; every MCP client gets the same 23 tools. Drop the snippet into the client's MCP config and restart.
{
"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 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" } } } }
Same shape — point at the uv run --directory … hai-mcp command and pass the two env vars. More snippets live in docs/client-snippets/.
A typical agent loop calls HAI-MCP before it acts and after it acts.
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"}, )
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", )
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"], )
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}, }, )
For hai_accept_next_step, hai_recontract, or abandoning a mission, the first call without owner_code asks the owner out of band.
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.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.
$HAI_HOME — default ~/.hai$HAI_OWNER_HOME — default ~/.hai-owner (deliberately outside HAI_HOME so the agent cannot read it) /Projek-Managment/ (legacy) or device mount + relative prefixes when a project_id is boundHAI_HOME/core/projects.jsonAll writes are resolved and confined to these roots.
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
HAI-MCP is intentionally narrow. It does not:
hai_check_activity / hai_proof.冒頭だけを表示しています。続きはリポジトリで読めます