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
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Display name (2–100 chars) |
| slug | string | Yes | URL-safe identifier (a-z, 0-9, hyphens) |
| description | string | No | What the agent does (up to 2000 chars) |
| category | string | No | ai-assistants, utilities, airlines, banking, healthcare, ecommerce, education, telecom, government, real-estate |
| supported_locales | string[] | No | Language codes, e.g. ["en", "ar", "ru"]. Defaults to ["en"] |
| welcome_message | string | No | Greeting shown before first message |
| target_endpoint | string | Yes | Your agent's API URL that Bolz.Proxy will forward messages to |
| target_protocol | string | No | "a2a" (default), "rest", "websocket", "openai", "gemini", "huggingface", "botpress" |
| target_auth_config | object | No | Auth config: {"type": "bearer", "token": "...", "model": "gpt-4", "system_prompt": "..."} |
| agent_card | object | No | A2A Agent Card: name, description, provider, version, capabilities, skills, limits, examples |
| byok_enabled | boolean | No | Allow users to supply their own upstream LLM API key (openai/gemini/huggingface only). Default: false |
| byok_provider | string | No | Display name of the upstream provider, e.g. "Azure AI", "Google Gemini", "OpenAI" |
| byok_key_format | string | No | Placeholder/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)
| Field | Type | Description |
|---|---|---|
| name | string | Agent display name |
| description | string | What the agent does |
| provider | object | { "organization": "...", "url": "..." } |
| version | string | Agent/model version |
| capabilities | object | { "streaming": true, "pushNotifications": false } |
| inputModes | string[] | ["text"] or ["text", "image"] |
| outputModes | string[] | ["text"] or ["text", "image"] |
| skills | array | List of { id, name, description } — what the agent can do |
| limits | object | contextWindow, maxTokensPerRequest, rateLimitRpm |
| examples | string[] | 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.
Email registration only. Default for new orgs.
DNS TXT record proves domain ownership.
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
| Dimension | Max | What it measures |
|---|---|---|
| Identity | 25 | KYB verification level (basic 8, verified 17, enterprise 25) |
| Reliability | 20 | Health status + consecutive healthy days streak (up to 30+ days) |
| Community | 15 | User ratings with Bayesian averaging (needs 3+ ratings to count) |
| Performance | 15 | Response latency (<1s = max) + 7-day error rate (<1% = bonus) |
| Adoption | 10 | Total conversations + unique users in last 7 days |
| Engagement | 10 | Multi-turn conversation depth (messages per session ratio) |
| Longevity | 5 | Days active on the platform (30d = 3pts, 180d+ = max) |
Trust Tiers
0-19 pts
20-39 pts
40-59 pts
60-79 pts
80-94 pts
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 toolA2A (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
| Endpoint | Description |
|---|---|
| GET /.well-known/oauth-authorization-server | OAuth metadata discovery |
| GET /.well-known/oauth-protected-resource | Protected resource metadata (RFC 9728) |
| POST /register | Dynamic client registration |
| GET|POST /authorize | Authorization endpoint (PKCE) |
| POST /token | Token exchange |
| POST /revoke | Token revocation |
Available MCP Tools
| Tool | Description | Parameters |
|---|---|---|
| search_agents | Search the agent registry by name, category, or natural language query | query?, category?, locale?, limit? |
| get_agent_card | Get full Agent Card with capabilities, verification status, and stats | bolz_uri (required) |
| send_message | Send a message to an agent through the encrypted proxy | bolz_uri (required), message (required), session_id? |
| list_categories | List all available agent categories with counts | none |
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.jsonAdd 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.serverVerify 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 requiredFor Claude.ai: go to Settings → MCP Servers → Add Remote Server and enter:
https://proxy.bolz.dev/mcpFor 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 requiredOnce 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
Need help?
For Enterprise verification, custom integrations, or partnership inquiries — reach out to the Bolz.Proxy team.