Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Action-level governance for AI agents -- control what they DO, not what they SAY
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"agent-guardrail": {
"command": "uvx",
"args": [
"agent-guardrail"
]
}
}
}ターミナルでこれを実行します
claude mcp add agent-guardrail -- uvx agent-guardrailプロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"agent-guardrail": {
"command": "uvx",
"args": [
"agent-guardrail"
]
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"agent-guardrail": {
"type": "stdio",
"command": "uvx",
"args": [
"agent-guardrail"
]
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
公開者(JarvisOnM4)がリポジトリの所有者(eren-solutions)ではありません。別の人が登録した可能性があります
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち0項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.1.2)がレジストリに届いたのは8 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Kanal Varna — drains, leaks & plumbing (Varna, BG)
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ 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.
Drain unblocking, leak detection & plumbing in Varna, Bulgaria: services, prices, areas, contact
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Action-level governance for AI agents — control what they DO, not what they SAY.
AI agents are getting tool access. They can run shell commands, make API calls, read files, spend money. But most "guardrails" only filter what agents *say* — not what they *do*.
Real incidents:
You need action-level control. Not output filtering.
Agent Framework --> Agent Guardrail --> {allow, deny, require_approval}
--> Flight Recorder logs everything
Zero dependencies. Python stdlib only. SQLite for storage.
pip install agent-guardrail
agent-guardrail register "my-research-agent" --framework langchain
agent-guardrail apply-template moderate
agent-guardrail eval bash --target /workspace/test.sh # -> allow agent-guardrail eval bash --target /etc/shadow # -> deny agent-guardrail eval sudo # -> deny
from agent_guardrail import GuardrailStore, PolicyEngine, DEFAULT_POLICIES
store = GuardrailStore() # ~/.agent-guardrail/guardrail.db engine = PolicyEngine(store)
agent = store.register_agent("my-agent", framework="langchain")
store.save_policy({ "name": "moderate", "agent_id": agent["id"], "rules": DEFAULT_POLICIES"moderate", })
decision = engine.evaluate(agent["id"], "bash", target="/workspace/run.sh")
decision = engine.evaluate(agent["id"], "bash", target="/etc/shadow")
decision = engine.evaluate_and_record( agent_id=agent["id"], action_type="api_call", tool_name="openai_chat", cost_usd=0.05, session_id="session-123", )
from agent_guardrail import GuardrailStore, PolicyEngine
class GuardrailCallback: """Drop into any LangChain agent as a callback handler.""" def init(self, agent_id, db_path=None): self._engine = PolicyEngine(GuardrailStore(db_path=db_path)) self.agent_id = agent_id
def on_tool_start(self, serialized, input_str, **kwargs): decision = self._engine.evaluate_and_record( agent_id=self.agent_id, action_type="tool_call", tool_name=serialized.get("name"), target=input_str[:200], ) if decision.decision == "deny": raise PermissionError(f"Guardrail: {decision.reason}")
from agent_guardrail import GuardrailStore, PolicyEngine
def make_guardrail(agent_id, db_path=None): engine = PolicyEngine(GuardrailStore(db_path=db_path))
def check(task_output): decision = engine.evaluate_and_record( agent_id=agent_id, action_type="task_output", target=str(task_output)[:200], ) if decision.decision == "deny": return (False, f"Blocked: {decision.reason}") return (True, task_output) return check
from agent_guardrail import GuardrailStore, PolicyEngine
import functools
def guardrail(agent_id, action_type="function_call", db_path=None): engine = PolicyEngine(GuardrailStore(db_path=db_path)) def decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): target = str(args[0])[:200] if args else None decision = engine.evaluate_and_record( agent_id=agent_id, action_type=action_type, tool_name=func.name, target=target, ) if decision.decision == "deny": raise PermissionError(f"Guardrail: {decision.reason}") return func(*args, **kwargs) return wrapper return decorator
@guardrail("my-agent", action_type="bash") def run_command(cmd): ...
The library is for humans. The API is for agents.
An orchestrator running 5 sub-agents doesn't pip install — it calls an endpoint.
# Start the proxy server
pip install agent-guardrail[proxy] guardrail-proxy --port 8300 --admin-key YOUR_ADMIN_KEY
# Register an agent (admin)
curl -X POST http://localhost:8300/v1/agents \ -H "X-Admin-Key: YOUR_ADMIN_KEY" \ -d '{"name": "research-agent", "framework": "crewai"}'
curl -X POST http://localhost:8300/v1/evaluate \ -H "X-API-Key: gw_agent_key_here" \ -d '{ "agent_id": "...", "action_type": "bash", "tool_name": "shell", "target": "/etc/shadow", "cost_usd": 0.0 }'
Full API docs at http://localhost:8300/docs (Swagger UI).
Free tier included. Pay with Bitcoin when you need more.
| Tier | Evaluations | Price | Per Eval |
|---|---|---|---|
| Free | 100/day per agent | $0 | $0 |
| Starter | 1,000 | $10 | $0.010 |
| Growth | 5,000 | $40 | $0.008 |
| Scale | 25,000 | $150 | $0.006 |
Credits are prepaid and never expire. Admin-authenticated requests bypass billing entirely.
How it works:
# Check your balance
curl http://localhost:8300/v1/billing/balance \ -H "X-API-Key: gw_your_agent_key"
curl -X POST http://localhost:8300/v1/billing/checkout \ -H "X-API-Key: gw_your_agent_key" \ -d '{"pack_id": "pack_1000"}'
When free tier is exhausted and no credits remain, /v1/evaluate returns 402 Payment Required with a link to available packs.
Self-hosted billing: Set BLOCKONOMICS_API_KEY and BLOCKONOMICS_WEBHOOK_SECRET environment variables. Without these, billing is disabled and all evaluations proceed without metering (backward compatible).
{
"tool_allowlist": ["read_file", "write_file"], # Only these tools allowed "tool_denylist": ["sudo", "rm", "delete*"], # These tools always denied "target_allowlist": ["/workspace/*"], # Only these targets allowed "target_denylist": ["/etc/*", "*.env", "*.key"], # These targets always denied "network_allowlist": ["api.openai.com"], # Allowed network targets "network_denylist": ["*"], # Denied network targets "spend_cap_daily_usd": 25.0, # Daily spend limit "spend_cap_total_usd": 500.0, # Lifetime spend limit "require_approval": ["bash", "install"], # Human approval required "risk_threshold": 0.8, # Auto-approval gate }
Patterns support glob matching (*, ?, [abc]).
Kill switch? ──deny──> DENY
| Agent enabled? ──no──> DENY | Spend cap? ──exceeded──> DENY | Tool denylist? ──match──> DENY | Target denylist? ──match──> DENY | Approval required? ──match──> REQUIRE_APPROVAL | Risk threshold? ──exceeded──> REQUIRE_APPROVAL | Tool allowlist? ──not in list──> DENY | Target allowlist? ──not in list──> DENY | DEFAULT ──> ALLOW
+-------------------+ +------------------+ +-----------------+
| Agent Framework |---->| Billing Check |---->| Policy Engine | | (LangChain, | | (free tier / | | (evaluate) | | CrewAI, custom) | | credits) | +-----------------+ +-------------------+ +------------------+ | | v | +------------------------+ 402 if empty | Decision: | | allow / deny / | | require_approval | +------------------------+ | v +-----------------+ | Flight Recorder| | (SQLite) | +-----------------+
+-------------------+ +------------------+ | BTC Payment |---->| Blockonomics | | (checkout) | | (xpub-derived | +-------------------+ | addresses) | +------------------+ | webhook (status=2) | v +------------------+ | Credit Grant | | (billing_ledger)| +------------------+
| Feature | Agent Guardrail | Guardrails AI | NeMo Guardrails | DIY |
|---|---|---|---|---|
| Action-level control | Yes | No (output only) | No (dialogue only) | Manual |
| Spend caps | Yes | No | No | Manual |
| Kill switch | Yes | No | No | Manual |
| Flight recorder | Yes | No | No | Manual |
| Pay-per-eval billing | Yes (BTC) | No | No | Manual |
| Zero dependencies | Yes | No (many) | No (many) | Varies |
| Framework agnostic | Yes | LangChain-focused | LangChain-focused | Yes |
| Hosted API | Yes | Cloud only | No | Manual |
agent-guardrail agents # List registered agents
agent-guardrail register "name" # Register a new agent agent-guardrail kill # Emergency kill switch agent-guardrail unkill # Revoke kill switch agent-guardrail policies # List policies agent-guardrail apply-template agent-guardrail actions [--agent X] [--decision deny] agent-guardrail replay # Session replay agent-guardrail approvals # Pending approvals agent-guardrail approve # Approve action agent-guardrail deny # Deny action agent-guardrail eval [--target X] [--cost 0.5] agent-guardrail stats # Statistic
冒頭だけを表示しています。続きはリポジトリで読めます