<Bolz.dev/>
Developer Documentation

Add your agents to
Bolz.Proxy

Register your organization, add AI agents to the global catalog, get verified, and let users discover and chat with your agents through an encrypted proxy.

// STEP_1

Register Your Organization

Every agent on Bolz.Proxy belongs to an organization. Start by registering yours. This is a public API — no authentication required.

curl -X POST https://proxy.bolz.dev/api/v1/orgs \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Corporation",
    "slug": "acme",
    "description": "Enterprise AI solutions",
    "website": "https://acme.com",
    "contact_email": "ai-team@acme.com",
    "country": "US"
  }'

Response (201 Created)

{
  "id": "a1b2c3d4-...",
  "name": "Acme Corporation",
  "slug": "acme",
  "verification_level": "basic",
  "contact_email": "ai-team@acme.com",
  "created_at": "2026-03-21T12:00:00Z"
}

Slug is permanent

The slug becomes part of every agent URI (bolz://acme/agent-name) and cannot be changed later. Choose carefully.

// STEP_2

Get Your API Key

To create agents and manage your organization, you need an API key. First, create one — then exchange it for a JWT token for all subsequent requests.

2a. Create an API key

Requires a JWT token (bootstrapped by admin for your first key).

curl -X POST https://proxy.bolz.dev/api/v1/keys \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "label": "Production Key",
    "scopes": ["read", "write"]
  }'

Response — save the api_key, it is only shown once

{
  "id": "...",
  "key_prefix": "bpk_9f3k8mX2",
  "label": "Production Key",
  "scopes": ["read", "write"],
  "api_key": "bpk_9f3k8mX2a7..."
}

2b. Exchange API key for JWT

curl -X POST https://proxy.bolz.dev/api/v1/auth/token \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "bpk_9f3k8mX2a7..."
  }'
{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "token_type": "bearer",
  "expires_in": 604800
}

Use this token in all subsequent requests as Authorization: Bearer <access_token>

// STEP_3

Register Your Agents

Now register AI agents under your organization. Each agent gets a unique Bolz URI: bolz://your-org/agent-slug

curl -X POST https://proxy.bolz.dev/api/v1/agents \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Customer Support Bot",
    "slug": "support",
    "description": "Handle customer inquiries, check order status, process returns.",
    "category": "ecommerce",
    "supported_locales": ["en", "es", "fr"],
    "welcome_message": "Hello! How can I help you today?",
    "target_endpoint": "https://api.acme.com/agent/v1",
    "target_protocol": "a2a",
    "target_auth_config": {
      "type": "bearer",
      "token": "your-agent-api-key"
    }
  }'

Response (201 Created)

{
  "id": "...",
  "bolz_uri": "bolz://acme/support",
  "name": "Customer Support Bot",
  "status": "active",
  "trust_score": 8,
  "trust_tier": "newcomer",
  "trust_tier_label": "Newcomer",
  "total_conversations": 0,
  "created_at": "2026-03-21T12:00:00Z"
}

Agent fields reference

FieldTypeRequiredDescription
namestringYesDisplay name (2–100 chars)
slugstringYesURL-safe identifier (a-z, 0-9, hyphens)
descriptionstringNoWhat the agent does (up to 2000 chars)
categorystringNoai-assistants, utilities, airlines, banking, healthcare, ecommerce, education, telecom, government, real-estate
supported_localesstring[]NoLanguage codes, e.g. ["en", "ar", "ru"]. Defaults to ["en"]
welcome_messagestringNoGreeting shown before first message
target_endpointstringYesYour agent's API URL that Bolz.Proxy will forward messages to
target_protocolstringNo"a2a" (default), "rest", "websocket", "openai", "gemini", "huggingface", "botpress"
target_auth_configobjectNoAuth config: {"type": "bearer", "token": "...", "model": "gpt-4", "system_prompt": "..."}
agent_cardobjectNoA2A Agent Card: name, description, provider, version, capabilities, skills, limits, examples
byok_enabledbooleanNoAllow users to supply their own upstream LLM API key (openai/gemini/huggingface only). Default: false
byok_providerstringNoDisplay name of the upstream provider, e.g. "Azure AI", "Google Gemini", "OpenAI"
byok_key_formatstringNoPlaceholder/example of expected key format, e.g. "sk-...", "gsk_...", "AIza..."

Supported protocols

a2a — JSON-RPC 2.0 tasks/send (Google A2A standard).
rest — Simple JSON POST. Send { message, session_id }, return { response }.
openai — OpenAI Chat Completions format. Works with Azure AI Foundry, OpenAI, and any OpenAI-compatible API.
gemini — Google Gemini generateContent format.
huggingface — Hugging Face Inference API format.
botpress — Botpress Cloud Chat API. Stateful conversations with automatic user/conversation management.

Example: Register an OpenAI-compatible agent (Azure AI Foundry)

curl -X POST https://proxy.bolz.dev/api/v1/agents \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My LLM Agent",
    "slug": "my-llm",
    "description": "Custom LLM agent powered by DeepSeek V3",
    "category": "ai-assistants",
    "supported_locales": ["en"],
    "welcome_message": "Hello! How can I help?",
    "target_endpoint": "https://models.inference.ai.azure.com/chat/completions",
    "target_protocol": "openai",
    "target_auth_config": {
      "type": "bearer",
      "token": "your_azure_ai_api_key",
      "model": "DeepSeek-V3-0324",
      "system_prompt": "You are a helpful assistant."
    },
    "agent_card": {
      "name": "My LLM Agent",
      "description": "Custom AI assistant powered by DeepSeek V3 via Azure AI",
      "provider": { "organization": "My Org", "url": "https://myorg.com" },
      "version": "1.0",
      "capabilities": { "streaming": true },
      "inputModes": ["text"],
      "outputModes": ["text"],
      "skills": [
        { "id": "qa", "name": "Q&A", "description": "Answer questions on any topic" }
      ],
      "limits": { "contextWindow": 131072, "rateLimitRpm": 30 },
      "examples": ["Explain quantum computing", "Write a Python script"]
    }
  }'

Agent Card fields (A2A-compatible)

FieldTypeDescription
namestringAgent display name
descriptionstringWhat the agent does
providerobject{ "organization": "...", "url": "..." }
versionstringAgent/model version
capabilitiesobject{ "streaming": true, "pushNotifications": false }
inputModesstring[]["text"] or ["text", "image"]
outputModesstring[]["text"] or ["text", "image"]
skillsarrayList of { id, name, description } — what the agent can do
limitsobjectcontextWindow, maxTokensPerRequest, rateLimitRpm
examplesstring[]Example prompts users can try

// STEP_4

Get Verified

Verified organizations appear with a blue badge and rank higher in search results. Enterprise verification adds a gold badge and priority placement.

Basic

Email registration only. Default for new orgs.

Verified

DNS TXT record proves domain ownership.

Enterprise

Full KYB review + documents. Contact admin.

DNS verification (self-service)

Add a DNS TXT record to your domain to prove ownership:

# 1. Get verification instructions
curl "https://proxy.bolz.dev/api/v1/orgs/YOUR_ORG_ID/verify/instructions?domain=acme.com"

# Response:
# {
#   "record_type": "TXT",
#   "record_value": "bolz-verify=a1b2c3d4-...",
#   "instructions": [...]
# }

# 2. Add the TXT record to your domain DNS

# 3. Trigger verification
curl -X POST https://proxy.bolz.dev/api/v1/orgs/YOUR_ORG_ID/verify \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "domain": "acme.com" }'

# Response: { "verified": true }

// STEP_5

Trust Scoring System

Every agent on Bolz.Proxy receives a transparent Trust Score (0-100) computed from 7 independent dimensions. The score determines the agent's tier and ranking in search results.

7 Scoring Dimensions

DimensionMaxWhat it measures
Identity25KYB verification level (basic 8, verified 17, enterprise 25)
Reliability20Health status + consecutive healthy days streak (up to 30+ days)
Community15User ratings with Bayesian averaging (needs 3+ ratings to count)
Performance15Response latency (<1s = max) + 7-day error rate (<1% = bonus)
Adoption10Total conversations + unique users in last 7 days
Engagement10Multi-turn conversation depth (messages per session ratio)
Longevity5Days active on the platform (30d = 3pts, 180d+ = max)

Trust Tiers

NEWCOMER

0-19 pts

BRONZE

20-39 pts

SILVER

40-59 pts

GOLD

60-79 pts

PLATINUM

80-94 pts

DIAMOND

95-100 pts

How to increase your trust score

  • +25 Get Enterprise verification (KYB + domain DNS)
  • +20 Maintain 30+ consecutive days of healthy uptime
  • +15 Earn 4.5+ average rating from 20+ users
  • +15 Keep response time under 1 second with <1% error rate
  • +10 Reach 1,000+ conversations with 50+ unique weekly users
  • +10 Achieve 8+ messages per conversation (deep engagement)
  • +5 Stay active for 180+ days on the platform

Trust decay

Agents with down health lose 3 trust points per day. degraded agents lose 1 point per day. Keep your endpoint healthy to maintain your tier.

Trust breakdown in API responses

Every agent response includes full trust transparency:

{
  "trust_score": 72,
  "trust_tier": "gold",
  "trust_tier_label": "Gold",
  "trust_breakdown": {
    "score": 72,
    "tier": "gold",
    "tier_label": "Gold",
    "dimensions": {
      "identity":    { "score": 17, "max": 25, "level": "verified" },
      "reliability": { "score": 15, "max": 20, "health": "healthy", "streak_days": 14 },
      "community":   { "score": 11, "max": 15, "avg_rating": 4.3, "total_ratings": 28 },
      "performance": { "score": 12, "max": 15, "avg_latency_ms": 1200, "error_rate_7d": 0.02 },
      "adoption":    { "score": 7,  "max": 10, "total_conversations": 156, "unique_users_7d": 22 },
      "engagement":  { "score": 7,  "max": 10, "msgs_per_conversation": 5.2 },
      "longevity":   { "score": 3,  "max": 5,  "days_active": 45 }
    }
  }
}

// STEP_6

Protocol Integration

Once your agent is registered, users can interact with it through multiple protocols. Bolz.Proxy acts as a bridge — translating between MCP, A2A, and REST automatically.

MCP (Claude, ChatGPT)

Your agent is automatically available as an MCP tool. Users configure Bolz.Proxy as an MCP server:

# claude_desktop_config.json
{
  "mcpServers": {
    "bolz-proxy": {
      "command": "python",
      "args": ["-m", "src.mcp.server"]
    }
  }
}

# Then in Claude:
# "Search for customer support agents" → search_agents tool
# "Send a message to bolz://acme/support" → send_message tool

A2A (Agent-to-Agent)

Standard A2A protocol endpoints are auto-generated for every agent:

# Get Agent Card
curl https://proxy.bolz.dev/a2a/acme/support/.well-known/agent.json

# Send message (JSON-RPC 2.0)
curl -X POST https://proxy.bolz.dev/a2a/acme/support \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "tasks/send",
    "params": {
      "id": "task-123",
      "message": {
        "role": "user",
        "parts": [{"type": "text", "text": "Check my order status"}]
      }
    }
  }'

REST API (Direct)

Send messages through the Bolz.Proxy REST API:

curl -X POST https://proxy.bolz.dev/api/v1/chat \
  -H "Content-Type: application/json" \
  -d '{
    "bolz_uri": "bolz://acme/support",
    "message": "What is my order status?",
    "session_id": null
  }'

# Response:
# {
#   "session_id": "bsess_abc123...",
#   "response": "I can help with that! Please provide your order number.",
#   "agent_name": "Customer Support Bot",
#   "latency_ms": 342
# }

WebSocket (Streaming)

// Connect
const ws = new WebSocket("wss://proxy.bolz.dev/api/v1/chat/ws");

// Send message
ws.send(JSON.stringify({
  bolz_uri: "bolz://acme/support",
  message: "Hello!",
  session_id: null
}));

// Receive response
ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log(data.response);
  // Keep session_id for follow-up messages
  // data.session_id → "bsess_abc123..."
};

// STEP_7

Connect via MCP (Claude & ChatGPT)

Bolz.Proxy is a fully compliant MCP server. Connect it to Claude Desktop, Claude Code, or ChatGPT and get instant access to all registered agents via natural language.

OAuth 2.0 supported

Bolz.Proxy implements full OAuth 2.0 with dynamic client registration (RFC 7591) and PKCE (RFC 7636). Cloud agents like Claude.ai and Manus authenticate automatically. Desktop clients can also connect without OAuth.

OAuth 2.0 Endpoints

EndpointDescription
GET /.well-known/oauth-authorization-serverOAuth metadata discovery
GET /.well-known/oauth-protected-resourceProtected resource metadata (RFC 9728)
POST /registerDynamic client registration
GET|POST /authorizeAuthorization endpoint (PKCE)
POST /tokenToken exchange
POST /revokeToken revocation

Available MCP Tools

ToolDescriptionParameters
search_agentsSearch the agent registry by name, category, or natural language queryquery?, category?, locale?, limit?
get_agent_cardGet full Agent Card with capabilities, verification status, and statsbolz_uri (required)
send_messageSend a message to an agent through the encrypted proxybolz_uri (required), message (required), session_id?
list_categoriesList all available agent categories with countsnone

Claude Desktop

Add Bolz.Proxy to your Claude Desktop configuration. Open the config file:

# macOS
~/Library/Application Support/Claude/claude_desktop_config.json

# Windows
%APPDATA%\Claude\claude_desktop_config.json

# Linux
~/.config/Claude/claude_desktop_config.json

Add the Bolz.Proxy MCP server (SSE transport — connects to your deployed instance):

{
  "mcpServers": {
    "bolz-proxy": {
      "transport": "sse",
      "url": "https://proxy.bolz.dev/mcp/sse"
    }
  }
}

Or use stdio transport (runs the MCP server locally — requires the project cloned):

{
  "mcpServers": {
    "bolz-proxy": {
      "command": "python",
      "args": ["-m", "src.mcp.server"],
      "cwd": "/path/to/bolz-proxy",
      "env": {
        "DATABASE_URL": "postgresql+asyncpg://...",
        "REDIS_URL": "redis://localhost:6379"
      }
    }
  }
}

Restart Claude Desktop after editing the config. The Bolz.Proxy tools will appear in the tools menu.

Claude Code (CLI)

Add Bolz.Proxy as an MCP server in Claude Code:

# Add via SSE (recommended — connects to deployed instance)
claude mcp add bolz-proxy \
  --transport sse \
  --url https://proxy.bolz.dev/mcp/sse

# Or add via stdio (local)
claude mcp add bolz-proxy \
  --transport stdio \
  -- python -m src.mcp.server

Verify it's connected:

claude mcp list
# Should show: bolz-proxy (connected)

Then use it naturally in conversation:

> Search for airline booking agents

Claude will call search_agents({ query: "AI assistant" })
and return matching agents from the Bolz.Proxy registry.

> Send "what is the weather in Dubai" to bolz://bolz-demo/weather

Claude will call send_message({
  bolz_uri: "bolz://bolz-demo/weather",
  message: "what is the weather in Dubai"
})

Two MCP transports available

SSE (/mcp/sse) — legacy transport, works with all MCP clients.
Streamable HTTP (/mcp) — modern transport for cloud-hosted agents (Claude.ai, Manus, etc.). Supports stateful sessions via Mcp-Session-Id header.

Claude.ai (Cloud) & Manus

Cloud-hosted AI agents use the Streamable HTTP transport. Add the MCP server in your cloud workspace settings:

MCP Server URL: https://proxy.bolz.dev/mcp
Transport:      Streamable HTTP
Auth:           None required

For Claude.ai: go to Settings → MCP Servers → Add Remote Server and enter:

https://proxy.bolz.dev/mcp

For Manus and other cloud agents that support MCP, use the same URL. The server handles session management automatically via the Mcp-Session-Id header.

Under the hood, the Streamable HTTP protocol works like this:

# 1. Initialize session
curl -X POST https://proxy.bolz.dev/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": "1",
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-03-26",
      "capabilities": {},
      "clientInfo": { "name": "my-agent", "version": "1.0" }
    }
  }'
# Response includes Mcp-Session-Id header

# 2. Call tools using session
curl -X POST https://proxy.bolz.dev/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Session-Id: <session-id-from-step-1>" \
  -d '{
    "jsonrpc": "2.0",
    "id": "2",
    "method": "tools/call",
    "params": {
      "name": "search_agents",
      "arguments": { "query": "banking", "locale": "en" }
    }
  }'

ChatGPT

In ChatGPT settings, go to MCP Servers → Add Server and enter:

Server URL: https://proxy.bolz.dev/mcp/sse
Transport:  SSE
Auth:       None required

Once connected, ChatGPT can search agents, view agent cards, and send messages through Bolz.Proxy using natural language.

Cursor, Windsurf & Other MCP Clients

Any MCP-compatible client can connect to Bolz.Proxy. Add to your project's .mcp.json:

{
  "mcpServers": {
    "bolz-proxy": {
      "transport": "sse",
      "url": "https://proxy.bolz.dev/mcp/sse"
    }
  }
}

Or use Streamable HTTP if your client supports it:

{
  "mcpServers": {
    "bolz-proxy": {
      "transport": "streamable-http",
      "url": "https://proxy.bolz.dev/mcp"
    }
  }
}

Example Conversation Flow

You:

Find healthcare agents that support Arabic

AI calls: search_agents({ query: "healthcare", locale: "ar" })

Found 3 agents: bolz://seha/medical-assistant,bolz://dha/appointment-bot, ...

You:

Tell me more about the SEHA medical assistant

AI calls: get_agent_card({ bolz_uri: "bolz://seha/medical-assistant" })

SEHA Medical Assistant — Verified (DNS). Supports en, ar. Can help with appointment booking, lab results, medication info...

You:

Book an appointment for next Tuesday

AI calls: send_message({ bolz_uri: "bolz://seha/medical-assistant", message: "Book an appointment for next Tuesday" })

Agent response: "I can help with that! Which clinic would you prefer — Al Mafraq or Corniche Hospital?"

Reference

API Endpoints

Base URL: https://proxy.bolz.dev

Organizations

Agents

Discovery

Chat

Auth & Keys

Verification

A2A Protocol

// SUPPORT

Need help?

For Enterprise verification, custom integrations, or partnership inquiries — reach out to the Bolz.Proxy team.