Claude Marketplaces
SkillsMCP serversMarketplacesDigestTools
Submit

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP servers by category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control
Claude Marketplaces

An independent directory of skills, plugins and MCP servers for Claude Code. Not affiliated with Anthropic.

Browse

  • Skills
  • MCP servers
  • Marketplaces
  • Weekly digest
  • Skill index
  • MCP index
  • Marketplace index

Site

  • About
  • Tools
  • Submit
  • Feedback
  • Privacy
  • llms.txt
  • Plugins reference

Maker

  • Snug
  • Agent Caffeine
  • knobs
  • Wax
  • Vectoys
  • mertduzgun.com
Crafted at
MCP servers/AI & LLM Tools
eren-solutions avatar

Agent Guardrail MCP Server

eren-solutions/agent-guardrail

This is a policy enforcement layer that sits between your AI agent framework and the actions it wants to take. Instead of filtering LLM outputs, it evaluates every tool call, shell command, or API request against allowlists, denylists, and spend caps before execution. You get a Python library with a PolicyEngine for LangChain, CrewAI, or custom agents, plus an optional HTTP proxy for multi-agent orchestrators. Every action gets logged to a SQLite flight recorder with full replay capability. Ships with three policy templates (restrictive, moderate, permissive) and includes automatic risk scoring. The hosted API mode adds metered billing via Bitcoin for agent-to-agent governance scenarios. Reach for this when you need runtime control over what agents can actually do, not just what they say.

tools
6
last updated
Mar 14, 2026
View on GitHubSave

Tools

6 tools

Public tool metadata for what this MCP can expose to an agent.

evaluate_actionEvaluate whether an agent action is allowed by the guardrail policy. Call this BEFORE executing any tool, shell command, or HTTP request.5 params

Evaluate whether an agent action is allowed by the guardrail policy. Call this BEFORE executing any tool, shell command, or HTTP request.

Parameters* required
action_typestring
Category of action: tool_call, shell, http, file_read, file_write, database, api_call.
agent_idstring
Unique identifier of the agent. Must be registered first via register_agent.
cost_usdnumber
Estimated cost in USD for spend tracking and budget enforcement.default: 0
targetstring
Target resource path or URL, e.g. /etc/passwd, https://api.example.com.default:
tool_namestring
Name of the tool being invoked, e.g. bash, write_file, curl.default:
register_agentRegister a new agent with the guardrail system. Must be called before evaluate_action.3 params

Register a new agent with the guardrail system. Must be called before evaluate_action.

Parameters* required
descriptionstring
Short description of what this agent does.default:
frameworkstring
Agent framework: langchain, autogen, crewai, claude-code.default:
namestring
Human-readable name for the agent, e.g. code-reviewer, data-analyst.
list_agentsList all agents currently registered in the guardrail system. Shows active and killed agents. Returns: Array of agent records with fields: id, name, framework, description, status, created_at.

List all agents currently registered in the guardrail system. Shows active and killed agents. Returns: Array of agent records with fields: id, name, framework, description, status, created_at.

No parameter schema in public metadata yet.

get_statsRetrieve aggregate statistics from the guardrail system including evaluation counts, policy data, and agent metrics. Returns: Statistics object with fields: total_evaluations, allowed_count, denied_count, agent_count, policy_count.

Retrieve aggregate statistics from the guardrail system including evaluation counts, policy data, and agent metrics. Returns: Statistics object with fields: total_evaluations, allowed_count, denied_count, agent_count, policy_count.

No parameter schema in public metadata yet.

kill_agentEmergency kill-switch: immediately block ALL actions for an agent. Use when an agent is misbehaving or compromised.1 params

Emergency kill-switch: immediately block ALL actions for an agent. Use when an agent is misbehaving or compromised.

Parameters* required
agent_idstring
Unique identifier of the agent to kill. All subsequent actions will be denied.
unkill_agentRe-enable a previously killed agent, restoring its ability to have actions evaluated.1 params

Re-enable a previously killed agent, restoring its ability to have actions evaluated.

Parameters* required
agent_idstring
Unique identifier of the agent to reactivate.

Sponsors

SnugThe clipboard manager you and your agent can use, safelyAgent CaffeineClose your lid, come back to finished workWaxBlock anything with supervision, without erasing your iPhoneOpen StepsSponsoredFree and open-source skills that make AI coding agents easier to understand, verify, and control.

Readme

Agent Guardrail

Action-level governance for AI agents — control what they DO, not what they SAY.

PyPI License: MIT Python 3.10+


The Problem

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:

  • AutoGPT autonomously spent $10K+ on API calls in a single session
  • ChaosGPT attempted to access military systems and recruit other AI agents
  • Air Canada chatbot invented a refund policy that cost the airline $800+

You need action-level control. Not output filtering.

What Agent Guardrail Does

Agent Framework --> Agent Guardrail --> {allow, deny, require_approval}
                                    --> Flight Recorder logs everything
  • Policy Engine — allowlists, denylists, glob patterns for tools and targets
  • Spend Caps — daily and total USD limits per agent
  • Kill Switch — instantly deny all actions for a runaway agent
  • Flight Recorder — every action logged with full replay capability
  • Approval Gates — route risky actions to human review
  • Risk Scoring — automatic risk assessment per action type
  • 3 Templates — restrictive, moderate, permissive (apply in one command)
  • Pay-per-eval Billing — free tier + BTC credit packs via Blockonomics

Zero dependencies. Python stdlib only. SQLite for storage.

30-Second Quickstart

pip install agent-guardrail

# Register an agent
agent-guardrail register "my-research-agent" --framework langchain

# Apply the moderate policy template
agent-guardrail apply-template moderate <agent-id>

# Test it
agent-guardrail eval <agent-id> bash --target /workspace/test.sh     # -> allow
agent-guardrail eval <agent-id> bash --target /etc/shadow             # -> deny
agent-guardrail eval <agent-id> sudo                                  # -> deny

Python API

from agent_guardrail import GuardrailStore, PolicyEngine, DEFAULT_POLICIES

# Initialize
store = GuardrailStore()  # ~/.agent-guardrail/guardrail.db
engine = PolicyEngine(store)

# Register agent
agent = store.register_agent("my-agent", framework="langchain")

# Apply policy template
store.save_policy({
    "name": "moderate",
    "agent_id": agent["id"],
    "rules": DEFAULT_POLICIES["moderate"]["rules"],
})

# Evaluate actions
decision = engine.evaluate(agent["id"], "bash", target="/workspace/run.sh")
# -> PolicyDecision(decision="allow", risk_score=0.7)

decision = engine.evaluate(agent["id"], "bash", target="/etc/shadow")
# -> PolicyDecision(decision="deny", reason="Target '/etc/shadow' is denied...")

# Evaluate + record to flight recorder
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",
)

Framework Integrations

LangChain Callback

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}")

CrewAI Task Guardrail

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

# task = Task(description="...", guardrail=make_guardrail("agent-id"))

Universal Decorator

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):
    ...

Hosted API (For Agents)

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"}'

# Evaluate an action (agent)
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
  }'
# -> {"decision": "deny", "reason": "Target denied...", "risk_score": 0.7}

Full API docs at http://localhost:8300/docs (Swagger UI).

Billing & Pricing

Free tier included. Pay with Bitcoin when you need more.

TierEvaluationsPricePer Eval
Free100/day per agent$0$0
Starter1,000$10$0.010
Growth5,000$40$0.008
Scale25,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"

# Buy credits (returns a BTC address + amount)
curl -X POST http://localhost:8300/v1/billing/checkout \
  -H "X-API-Key: gw_your_agent_key" \
  -d '{"pack_id": "pack_1000"}'
# -> {"btc_address": "bc1q...", "amount_btc": 0.00015, "amount_satoshi": 15000, ...}

# Pay the BTC address -> webhook confirms -> credits granted automatically

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).

Policy Rules Reference

{
    "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]).

Decision Flow

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

Architecture

+-------------------+     +------------------+     +-----------------+
|  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)|
                          +------------------+

Comparison

FeatureAgent GuardrailGuardrails AINeMo GuardrailsDIY
Action-level controlYesNo (output only)No (dialogue only)Manual
Spend capsYesNoNoManual
Kill switchYesNoNoManual
Flight recorderYesNoNoManual
Pay-per-eval billingYes (BTC)NoNoManual
Zero dependenciesYesNo (many)No (many)Varies
Framework agnosticYesLangChain-focusedLangChain-focusedYes
Hosted APIYesCloud onlyNoManual

CLI Reference

agent-guardrail agents                      # List registered agents
agent-guardrail register "name"             # Register a new agent
agent-guardrail kill <agent_id>             # Emergency kill switch
agent-guardrail unkill <agent_id>           # Revoke kill switch
agent-guardrail policies                    # List policies
agent-guardrail apply-template <template> <agent_id>
agent-guardrail actions [--agent X] [--decision deny]
agent-guardrail replay <session_id>         # Session replay
agent-guardrail approvals                   # Pending approvals
agent-guardrail approve <id>                # Approve action
agent-guardrail deny <id>                   # Deny action
agent-guardrail eval <agent_id> <type> [--target X] [--cost 0.5]
agent-guardrail stats                       # Statistics

Configuration

VariableDefaultPurpose
GUARDRAIL_DB~/.agent-guardrail/guardrail.dbSQLite database path
GUARDRAIL_LOG_DIR~/.agent-guardrail/logsCLI log directory
GUARDRAIL_ADMIN_KEY(none)Admin API key for proxy
BLOCKONOMICS_API_KEY(none)Blockonomics Store API key (enables billing)
BLOCKONOMICS_WEBHOOK_SECRET(none)Secret for webhook verification
GUARDRAIL_BILLING_ENABLEDtrueSet false to disable billing even with API key

License

MIT

Details

Repository
github.com/eren-solutions/agent-guardrail
Website
github.com/eren-solutions/agent-guardrail
Category
AI & LLM Tools
Package
agent-guardrail
Transport
STDIO
Registry
MCP registry, active

More from eren-solutions

  • Security Auditor
  • Security Auditor
  • Report Needs
  • Report Needs

Related AI & LLM Tools MCP servers

View all
1fcfrasca avataragent-canvas-arenafcfrasca/agent-canvas-arenaA decentralized 32×32 pixel-war execution grid for autonomous AI agents on Base Mainnet. Competitive game theory meets an on-chain USDC economy with native Mode0stars
2fcfrasca avataragent-canvas-arenafcfrasca/agent-canvas-arenaA decentralized 32×32 pixel-war execution grid for autonomous AI agents on Base Mainnet. Competitive game theory meets an on-chain USDC economy with native Mode0stars
3heather-macavelia avatarai-agent-indexheather-macavelia/ai-agent-indexSearch and retrieve structured data on AI agents for business automation. Filter by category, pricing, integration, and capability. Updated daily.0stars
4huggingface avatarHugging FacehuggingfaceAI model hub for machine learning. Discover models, explore datasets, and access model documentation and capabilities.0stars
5hustada avatarCollective Memoryhustada/collective-memoryMCP server for persistent, semantic memory across AI sessions0stars
6mcp avatarAgentic Paymentsinfo.blocksize.mcp/agentic-paymentsPublic MCP discovery for Blocksize market data, pricing, and docs.0stars