Skip to main content

Runtime security SDK for AI agents — guard tool calls in 1 line

Project description

Clampd Python SDK

Runtime security for AI agents. Guard every tool call — OpenAI, Anthropic, LangChain, Google ADK — in 1 line.

Installation

pip install clampd

With framework extras:

pip install clampd[langchain]    # LangChain callback handler
pip install clampd[mcp]          # MCP server support
pip install clampd[all]          # Everything

Quick Start

import clampd
from openai import OpenAI

# Configure once at startup
clampd.init(
    agent_id="my-agent",
    gateway_url="http://localhost:8080",
    api_key="ag_live_...",
)

# Wrap your OpenAI client — done
client = clampd.openai(OpenAI())

# Use it exactly like before. Clampd intercepts every tool call.
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Look up active users"}],
    tools=[...],
)
# Dangerous tool calls → blocked before execution
# Safe tool calls → proceed normally

Configuration

Three ways to configure (pick one):

# Option 1: Environment variables
# export CLAMPD_GATEWAY_URL=http://localhost:8080
# export CLAMPD_API_KEY=ag_live_...
# export CLAMPD_AGENT_ID=my-agent

# Option 2: Global init (recommended)
clampd.init(agent_id="my-agent", gateway_url="...", api_key="...")

# Option 3: Inline per-call
@clampd.guard("db.query", agent_id="my-agent", gateway_url="...", api_key="...")
def query(sql): ...

Anthropic / Claude

import clampd
from anthropic import Anthropic

clampd.init(agent_id="my-agent")
client = clampd.anthropic(Anthropic())

response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[{"role": "user", "content": "..."}],
    tools=[...],
)

LangChain

import clampd

handler = clampd.langchain(agent_id="my-agent")

result = executor.invoke(
    {"input": "Look up active users"},
    config={"callbacks": [handler]},
)

Google ADK

import clampd
from google.adk import Agent

agent = Agent(
    tools=[...],
    before_tool_callback=clampd.adk(agent_id="my-agent"),
)

Direct Guard (any function)

import clampd

clampd.init(agent_id="my-agent")

@clampd.guard("database.query")
def run_query(sql: str):
    return db.execute(sql)

# With response checking (opt-in)
@clampd.guard("file_read", check_response=True)
def read_file(path: str):
    return open(path).read()

run_query("SELECT * FROM users")     # allowed
run_query("DROP TABLE users")        # raises ClampdBlockedError

Error Handling

from clampd import ClampdBlockedError

try:
    run_query("DROP TABLE users")
except ClampdBlockedError as e:
    print(f"Blocked: {e}")
    # e.risk_score, e.denial_reason, e.request_id

API Reference

Function Description
clampd.init(...) Configure global client (once at startup)
clampd.openai(client) Wrap OpenAI client
clampd.anthropic(client) Wrap Anthropic client
clampd.guard(tool_name) Decorator for any function
clampd.langchain(...) LangChain callback handler
clampd.adk(...) Google ADK before_tool_callback

Requirements

  • Python 3.10+
  • A running Clampd gateway

License

BUSL-1.1

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

clampd-0.1.0.tar.gz (16.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

clampd-0.1.0-py3-none-any.whl (15.0 kB view details)

Uploaded Python 3

File details

Details for the file clampd-0.1.0.tar.gz.

File metadata

  • Download URL: clampd-0.1.0.tar.gz
  • Upload date:
  • Size: 16.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for clampd-0.1.0.tar.gz
Algorithm Hash digest
SHA256 bd0a2e99f19d2f2bf721f30752f83592326677912338d5ff40da1d1919f9ae9b
MD5 747bfaf8886827b524e31a12dd43a97f
BLAKE2b-256 70c630fbc2be5e930bcf98b66e1430359cde65b3f8324b6a4f810cbd36a0e83d

See more details on using hashes here.

File details

Details for the file clampd-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: clampd-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for clampd-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c8401188e3d548570ea5fbd88421759c822e1793a25d03dec6df66d3cd6998bf
MD5 3169a792d336994a206b0b3c76161ca6
BLAKE2b-256 d5316d2fa729acc3d7549f72a518297e53d911d6ad9e63d9e6e97e79c6d137e3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page