Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
basilalshukaili avatar

Agent Broker MCP

  • Updated August 4, 2026
  • basilalshukaili/agentbroker

AI agents find, message & book SMBs; pay per call in USDC on Base via x402.

About

AI agents find, message & book SMBs; pay per call in USDC on Base via x402. 14 tools, compliant. Exposes 14 MCP tools including io.github.basilalshukaili/agent-broker, find_business. AI agents find, message & book SMBs; pay per call in USDC on Base via x402. 14 tools, compliant. AI agents find, message & book SMBs; pay per call in USDC on Base via x402. 14 tools, compliant. "name": "io.github.basilalshukaili/agent-broker", Install via Claude Desktop, Cursor, or any MCP-compatible client using the server manifest from the upstream repository.

  • AI agents find, message & book SMBs; pay per call in USDC on Base via x402.
  • 14 registered MCP tools for structured agent access.
  • Category: AI & LLM Tools with build/integrations journey placement.
  • Compatible with Claude Desktop, Cursor, and MCP clients.
  • Upstream manifest: agent-broker.

Agent Broker MCP by the numbers

  • Exposes 14 verified tools (MCP introspection)
  • Data as of Aug 10, 2026 (Skillselion catalog sync)
terminal
claude mcp add --transport http agent-broker https://agent-broker-edge.basil-agent.workers.dev/mcp

Add your badge

Show developers this MCP server is listed on Skillselion. Paste this into your README.

Listed on Skillselion
TransportHTTP
AuthNone
Tools14
Last updatedAugust 4, 2026
Repositorybasilalshukaili/agentbroker

How do I connect Agent Broker to my MCP client?

AI agents find, message & book SMBs; pay per call in USDC on Base via x402. 14 tools, compliant.

Who is it for?

Teams wiring Agent Broker into Claude, Cursor, or custom agents for ai & llm tools.

Skip if: Skip when you need a non-MCP SDK or hosted API without stdio/SSE transport.

What you get

Working Agent Broker MCP server with verified tool registration and client config.

  • Agent-callable SMB discovery, messaging, and booking tool surface
  • Per-call USDC settlement pattern on Base via x402
  • Prototype of compliant agent-to-business workflows without custom payment middleware

By the numbers

  • [object Object]
At a glance

Agent Broker capabilities & compatibility

Capabilities
agent broker mcp tool registration · agent broker client configuration · agent broker agent workflow integration
Use cases
api development
Runs
Runs locally
From the docs

What Agent Broker says it does

AI agents find, message & book SMBs; pay per call in USDC on Base via x402. 14 tools, compliant.
README.md

Tools 14

Public tool metadata - what this server can do for an agent.

find_business6 params

Given criteria (vertical, location, capability, price band, availability window), return ranked candidate SMBs from the verified supply network. Returns only curated, verified, transactable businesses — not raw directory results. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Find me a salon in Tokyo that does color" -> call find_business({"vertical": "personal_services", "location": {"zip_or_city": "Tokyo"}, "capability": "color"}) user: "I need a plumber near 30309" -> call find_business({"vertical": "home_services", "location": {"zip_or_city": "30309"}, "capability": "plumbing"}) user: "Show me dentists in London" -> call find_business({"vertical": "professional_services", "location": {"zip_or_city": "London"}, "capability": "dentist"}) WHEN TO USE: Use when an agent needs to identify which SMBs can fulfill a business task (booking, service, consultation) in a given location and vertical. Call this before schedule_appointment or send_message when you do not yet have

  • verticalstringrequiredService vertical to search within
  • locationobjectrequired
  • capabilitystringSpecific service capability required, e.g. 'haircut', 'plumbing', 'tax_consultation'
  • price_bandobject
  • availability_windowobject
  • max_resultsinteger
verify_business2 params

Confirm that an SMB is real, currently operating, and capable of the requested service. Performs a live capability probe against the business's channel. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Confirm smb_imp_abc actually does emergency plumbing" -> call verify_business({"smb_id": "smb_imp_abc", "capability_to_verify": "emergency_plumbing"}) WHEN TO USE: Use before sending communications or scheduling if you have an unverified SMB identifier, or if the agent's task requires confirmed capability (e.g., 'I need to be sure they do emergency plumbing'). WHEN NOT TO USE: Do not use if the SMB was returned from find_business within the last 24 hours — those results are already verified. COST: $0.02 per_call LATENCY: ~500ms

  • smb_idstringrequired
  • capability_to_verifystring
send_message5 params

Send a message on behalf of an agent's user or an SMB across SMS, email, or voice. Five message types: transactional, reminder, follow_up, notification, marketing. Every send routes through a non-bypassable compliance gate (TCPA, GDPR, CASL, PDPL across 22 jurisdictions) that enforces opt-in consent for marketing/promotional content — marketing without recorded consent is rejected at runtime with a structured compliance_violation receipt. Channel is abstracted: specify intent and recipient; the service selects and falls back across channels. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Text the salon I'll be 10 minutes late" -> call send_message({"recipient_id": "smb_xyz", "channel_preference": "sms", "message": {"body": "Will be 10 minutes late."}, "country_code": "US"}) user: "Email the dentist about insurance" -> call send_message({"recipient_id": "smb_xyz", "channel_preference": "email", "message": {"body": "Do you accept Cigna?"}}) WHEN TO USE: Use to: (a) confirm a

  • recipientobjectrequired
  • message_typestringrequiredIntent tag for the message. Five permitted types. 'marketing' is allowed only when paired with a valid consent_record_id; the compliance gate verifies the consent at send time and rejects (compliance_violation receipt) if it's missing, expired, or revoked.
  • contentobjectrequired
  • preferred_channelstring
  • send_at_isostringSchedule for future delivery; omit for immediate
capture_lead3 params

Structured intake of a prospect into an SMB's funnel with validation, enrichment hooks, and deduplication. Inserts into the SMB's CRM or direct-booking pipeline if available. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Tell smb_xyz I'm interested and want a callback" -> call capture_lead({"smb_id": "smb_xyz", "prospect": {"name": "Jane", "phone": "+15551234567", "email": "jane@example.com"}, "source": "agent"}) WHEN TO USE: Use when a potential customer has expressed interest in an SMB's service and you want to ensure they are registered in the SMB's pipeline for follow-up. WHEN NOT TO USE: Do not use for confirmed bookings — use schedule_appointment. Do not use for bulk list imports. COST: $0.05 per_lead LATENCY: ~600ms EXECUTION: sync_fast (use get_outcome to retrieve result)

  • smb_idstringrequired
  • prospectobjectrequired
  • sourcestringWhere the consumer-initiated request originated (e.g., 'consumer_request', 'inbound_quote_form', 'agent_referral_from_find_business').
schedule_appointment7 params

Availability lookup, hold, confirm, reschedule, or cancel appointments with an SMB. Routes through the SMB's native booking system if available, falls back to voice AI or web form. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Book the haircut for next Tuesday at 3pm" -> call schedule_appointment({"smb_id": "smb_imp_abc", "action": "book", "service": "haircut"}) user: "Cancel my Friday appointment at smb_xyz" -> call schedule_appointment({"smb_id": "smb_xyz", "action": "cancel"}) user: "Reschedule my dental cleaning to next week" -> call schedule_appointment({"smb_id": "smb_imp_xyz", "action": "reschedule"}) WHEN TO USE: Use when an agent needs to book, reschedule, or cancel a specific appointment with a specific SMB. Requires a verified smb_id. WHEN NOT TO USE: Do not use for bulk scheduling. Do not use without a verified SMB — call find_business and verify_business first if needed. COST: from $0.15 per_booking_attempt (see preview_cost for exact) LATENCY: ~5000ms EX

  • smb_idstringrequired
  • actionstringrequired
  • servicestring
  • customerobject
  • requested_timeobject
  • existing_appointment_idstringRequired for reschedule/cancel
  • notesstring
send_transactional_confirmation4 params

Idempotent transactional messages: OTPs, booking confirmations, payment receipts, cancellation notices. Guaranteed delivery via redundant channels. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Send the booking confirmation receipt to my email" -> call send_transactional_confirmation({"recipient_id": "user@example.com", "channel_preference": "email", "confirmation_type": "booking"}) WHEN TO USE: Use for any message that MUST be delivered reliably — OTPs, booking confirmations, receipts. Do not use for marketing. WHEN NOT TO USE: Do not use for marketing or promotional messages. Do not use for conversational messages. COST: $0.02 per_message LATENCY: ~500ms EXECUTION: sync_fast (use get_outcome to retrieve result)

  • recipientobjectrequired
  • confirmation_typestringrequired
  • dataobjectrequiredType-specific payload; e.g., {otp_code} for otp, {appointment_time, smb_name} for booking_confirmation
  • preferred_channelstring
handle_inbound6 params

Receive, classify, and route inbound messages on behalf of an SMB. Classifies intent (booking request, cancellation, inquiry, complaint), enriches with context, and routes to the appropriate handler or escalation path. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Process this customer reply for me: 'Yes I want to book Tuesday'" -> call handle_inbound({"raw_message": "Yes I want to book Tuesday", "channel": "sms"}) WHEN TO USE: Use when an SMB needs inbound message triage — classifying incoming contact-form submissions, SMS replies, voicemails, or email inquiries. WHEN NOT TO USE: Do not use for outbound communications. Do not use for compliance-flagged recipient lists without verified opt-in records. COST: $0.03 per_inbound LATENCY: ~3000ms EXECUTION: async_by_default (use get_outcome to retrieve result)

  • smb_idstringrequired
  • inbound_channelstringrequired
  • senderobject
  • raw_messagestringrequired
  • received_at_isostring
  • routing_rulesobjectOptional override routing policy for this SMB
escalate_to_human4 params

Hand off an in-flight task to a human operator with a full context bundle: transcript, prior actions, identifiers, and a recommended next step. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "I'm stuck — get a human at smb_xyz to call me back" -> call escalate_to_human({"smb_id": "smb_xyz", "reason": "agent_blocked", "summary": "Cannot resolve via automated channels"}) WHEN TO USE: Use when automated resolution has failed after channel-fallback exhaustion, when the task requires human judgment, or when the customer has explicitly requested human contact. WHEN NOT TO USE: Do not use as a first resort. Escalate only after automated resolution attempts. COST: $0.2 per_escalation LATENCY: ~2000ms EXECUTION: async_by_default (use get_outcome to retrieve result)

  • smb_idstringrequired
  • reasonstringrequired
  • contextobjectrequired
  • prioritystring
get_status1 param

Query the current state of any in-flight async operation by operation_id. WHEN TO USE: Use to poll the state of a pending_async operation when no webhook callback has arrived or to check progress. WHEN NOT TO USE: Do not poll more frequently than once per 10 seconds — use webhook delivery for real-time updates instead. COST: $0.001 per_call LATENCY: ~50ms

  • operation_idstringrequired
get_outcome1 param

Retrieve the final OutcomeReceipt for a completed operation. WHEN TO USE: Use after get_status returns success/failure/partial to retrieve the full result with cost and reason codes. WHEN NOT TO USE: Do not use for operations still in pending/executing state — use get_status first. COST: $0.001 per_call LATENCY: ~50ms

  • operation_idstringrequired
preview_cost2 params

Return an expected cost estimate, latency estimate, and success-probability estimate for a proposed call before execution. Accuracy SLO: actual cost within ±5% of preview. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "How much will this SMS cost me?" -> call preview_cost({"operation": "send_message", "params": {"channel_preference": "sms"}}) user: "Estimate the cost of booking via voice fallback" -> call preview_cost({"operation": "schedule_appointment"}) WHEN TO USE: Use before any operation when the agent is operating under a budget constraint and needs to decide whether to proceed. WHEN NOT TO USE: Do not use in a hot loop — cache the result for at least 60 seconds if repeating the same preview. COST: $0.001 per_call LATENCY: ~100ms

  • operationstringrequired
  • paramsobjectrequiredThe same request body you would pass to the operation
self_test

Live capability probe that verifies the service is healthy, each claimed operation is reachable, and supply network size is current. Use to verify integration before production use. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Run a health check before I send the broadcast" -> call self_test({}) WHEN TO USE: Use at agent startup, before high-stakes task sequences, or after receiving unexpected errors to check if the service is degraded. WHEN NOT TO USE: Do not call more than once per minute in production. COST: free LATENCY: ~200ms

import_booking_url7 params

Turn ANY public booking URL (Cal.com, Calendly, Doctolib, Booksy, Fresha, OpenTable, Setmore, Square, Acuity, Schedulista, Squarespace, BookMyCity) into a callable smb_id you can immediately use with schedule_appointment, send_message, or capture_lead. Idempotent — calling twice returns the same smb_id. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Book me a haircut at https://cal.com/jane-salon" -> call import_booking_url({"booking_url": "https://cal.com/jane-salon", "vertical": "personal_services"}) -> then schedule_appointment({"smb_id": "<from_above>", "action": "book"}) user: "Schedule with this dentist: https://www.doctolib.fr/dentiste/paris/jean-dupont" -> call import_booking_url({"booking_url": "https://www.doctolib.fr/dentiste/paris/jean-dupont"}) user: "Reserve a table at https://www.opentable.com/r/acme-bistro" -> call import_booking_url({"booking_url": "https://www.opentable.com/r/acme-bistro", "vertical": "restaurants"}) WHEN TO USE: Call this FIRST whe

  • booking_urlstringrequiredFull URL the user supplied. Must point at one of the 12 supported booking platforms; auto-detected from the host.
  • business_namestringOptional override. If omitted, the business name is auto-extracted from the page's <title> or og:title.
  • verticalstringBest-guess vertical. If omitted, inferred from the platform (e.g., Doctolib -> healthcare, OpenTable -> restaurants).
  • country_codestringISO 3166-1 alpha-2 (e.g. 'US', 'FR'). Used for compliance routing on later send_message calls.
  • contact_phonestringOptional. If omitted, the platform integration handles outreach.
  • contact_emailstringOptional.
  • capabilitiesarrayFree-form capability tags (e.g., ['haircut','color','blowdry']).
call_business7 params

Place a conversational voice-AI phone call to a business on a consumer's behalf and return a structured answer. THE differentiated capability: reach the ~60M long-tail SMBs that have NO API and NO booking page — only a phone number. An AI agent cannot pick up a phone and hold a conversation; this tool does. Give a plain-language objective; the voice AI navigates the call and extracts the answer. Business-directed (B2B), far less restricted than calling consumers — but the compliance gate still enforces recording consent per jurisdiction. Async: returns a call handle; poll get_outcome for the transcript + extracted fields. WHEN TO USE: Use when the target business has NO booking URL and NO API — only a phone number — and the consumer asked the agent to reach them (e.g. 'call this plumber and ask if they can come Tuesday', 'ask the salon if they take walk-ins this afternoon'). Also use to confirm details a booking page doesn't expose (real-time availability, custom quotes). WHEN NOT TO

  • business_phonestringBusiness phone in E.164 (e.g. +14045550123). Provide this OR smb_id.
  • smb_idstringKnown SMB identifier with a phone on record. Provide this OR business_phone.
  • objectivestringrequiredWhat the call should accomplish, in plain language.
  • extract_fieldsarrayStructured fields to pull from the answer, e.g. ['available_tomorrow','price_quote','earliest_slot'].
  • country_codestringISO 3166-1 alpha-2 for compliance + recording-consent routing.
  • on_behalf_ofstringName of the consumer the call is placed for.
  • max_duration_secondsinteger
README.md

Agent Broker — SMB Transaction & Communication MCP Server

An agent-callable MCP server that lets autonomous AI agents find, verify, message, schedule with, and transact with small and mid-sized businesses (SMBs) through a single compliance-enforced tool surface.

MCP License Python Edge Registry Tests

Live endpoint: https://agent-broker-edge.basil-agent.workers.dev/mcp (streamable-http, always-on Cloudflare edge)


Why this exists

There are ~60 million long-tail small businesses in the US — barbers, plumbers, accountants, home cleaners — and they have no API surface. AI agents that need to schedule a haircut, get a quote, or send a confirmation today must either drive a browser, cold-call by voice, or give up.

This server is the missing middle layer. Agents call us; we route to the right SMB through whichever channel reaches them fastest — Cal.com → SMS → voice AI → email — with full TCPA / GDPR / CASL / 10DLC compliance enforced as a non-bypassable gate.


Current status (honest)

Capability Status
MCP endpoint (streamable-http) Livehttps://agent-broker-edge.basil-agent.workers.dev/mcp
14 MCP tools Live (callable today)
Compliance gate (TCPA/GDPR/CASL) Live
REST + A2A + OpenAI/Anthropic tool surfaces Live
SMB supply network Demo — 20+ seed SMBs; demo bookings return demo_smb_no_live_booking
Per-call payments via x402/USDC on Base Coming soon — not yet active — tools are currently free
Production SMB onboarding Planned — real businesses not yet enrolled

The MCP server is live and callable right now. Bookings hit demo data, and per-call payments (x402/USDC) are not yet charged. Both are in progress.


14 MCP Tools

All tools are callable via MCP, REST, OpenAI function calling, Anthropic tool_use, or A2A protocol.

# Tool What it does
1 find_business Search SMBs by vertical, location, and capability — free
2 verify_business Confirm an SMB is real, operating, and capable of the requested service — free
3 send_message Send SMS, email, or voice with full compliance pre-check (TCPA/GDPR/CASL)
4 capture_lead Structured intake of a prospect into an SMB pipeline with CRM integration
5 schedule_appointment Book, reschedule, or cancel — tries direct booking API, falls back to voice AI
6 send_transactional_confirmation TCPA-exempt OTPs, booking confirmations, receipts
7 handle_inbound Classify inbound messages: booking / cancel / opt-out / question / complaint
8 escalate_to_human Hand off a stuck or ambiguous task to a human operator with full context
9 get_status Poll the current state of an async operation — free
10 get_outcome Retrieve the final OutcomeReceipt (with cost and reason codes) — free
11 preview_cost Estimate cost, latency, and success probability before committing — free
12 self_test Verify service health and all claimed capabilities are responding — free
13 import_booking_url Turn any Cal.com, Calendly, Doctolib, Booksy, OpenTable, Square, Acuity, or Fresha URL into a bookable SMB record
14 call_business Place a conversational voice-AI phone call to a business on behalf of a consumer

Quick start

Connect via MCP (Claude Desktop, Cursor, Continue, etc.)

{
  "mcpServers": {
    "agent-broker": {
      "url": "https://agent-broker-edge.basil-agent.workers.dev/mcp"
    }
  }
}

No API key required for read-only tools. State-changing tools accept an optional X-Agent-Identity bearer token.

Discover tools (JSON-RPC)

curl -X POST https://agent-broker-edge.basil-agent.workers.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Call a tool (JSON-RPC)

curl -X POST https://agent-broker-edge.basil-agent.workers.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "find_business",
      "arguments": {
        "vertical": "personal_services",
        "location": {"zip_or_city": "30309"},
        "capability": "haircut"
      }
    }
  }'

OpenAI function calling

import httpx, openai
tools = httpx.get(
    "https://agent-broker-edge.basil-agent.workers.dev/.well-known/openai-tools.json"
).json()["tools"]
client = openai.OpenAI()
resp = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Book a haircut in Atlanta Saturday under $50"}],
    tools=tools,
)

Anthropic tool use

import httpx, anthropic
tools = httpx.get(
    "https://agent-broker-edge.basil-agent.workers.dev/.well-known/anthropic-tools.json"
).json()["tools"]
client = anthropic.Anthropic()
msg = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=1024,
    tools=tools,
    messages=[{"role": "user", "content": "Book a haircut in Atlanta Saturday under $50"}],
)

Plain REST

curl -X POST https://agent-broker-edge.basil-agent.workers.dev/ops/find_business \
  -H "Content-Type: application/json" \
  -d '{"vertical":"personal_services","location":{"zip_or_city":"30309"},"capability":"haircut"}'

Discovery surfaces

Surface URL
MCP (streamable-http) https://agent-broker-edge.basil-agent.workers.dev/mcp
MCP descriptor https://agent-broker-edge.basil-agent.workers.dev/.well-known/mcp.json
OpenAI function tools https://agent-broker-edge.basil-agent.workers.dev/.well-known/openai-tools.json
Anthropic tool_use https://agent-broker-edge.basil-agent.workers.dev/.well-known/anthropic-tools.json
A2A (Agent-to-Agent) https://agent-broker-edge.basil-agent.workers.dev/.well-known/agents.json
OpenAI ChatGPT plugin https://agent-broker-edge.basil-agent.workers.dev/.well-known/ai-plugin.json
llms.txt https://agent-broker-edge.basil-agent.workers.dev/llms.txt
OpenAPI 3.1 https://agent-broker-edge.basil-agent.workers.dev/openapi.yaml
Glama MCP Registry Listed via glama.json
MCP Registry Listed via server.json

Architecture

AI agent
   |
   v  MCP / REST / A2A
Cloudflare Worker edge  (agent-broker-edge.basil-agent.workers.dev)
   |  300+ PoPs globally -- discovery served from edge bundle in 40-70 ms
   |
   +-- GET /.well-known/* /manifest /llms.txt  --> embedded snapshot (40-70 ms)
   +-- POST /mcp  initialize / tools/list      --> embedded snapshot (40-65 ms)
   +-- POST /mcp  tools/call  /ops/*           --> proxy to origin  (170-190 ms)
                |
                v
        Python FastAPI  (smb-broker.onrender.com)
                |  Cron keep-alive every 2 min (eliminates Render cold starts)
                |
                +-- 14 operation handlers  (core/)
                +-- Compliance gate        (compliance/pre_check)
                +-- Channel adapters       (channels/ -- Twilio, Cal.com, Vapi, SendGrid)
                +-- Billing + outcome store
                +-- All .well-known / MCP endpoints (also served from edge bundle)

The edge worker can outlive the origin: discovery still works even if the origin is down. Idempotency is keyed by (agent_id, operation, idempotency_key) with 24h TTL. Async operations return pending_async; poll with get_status / get_outcome.


Compliance

Every outbound communication passes through compliance/pre_check():

  1. Content classification — blocks restricted categories (gambling, adult, cannabis, spam)
  2. Opt-out check — TCPA STOP keyword, GDPR right-to-be-forgotten, CASL
  3. Consent check — TCPA written consent, GDPR opt-in, CASL implied/express
  4. 10DLC registry check — US SMS campaign compliance
  5. Two-party recording consent — CA, FL, IL, MD, MA, MT, NV, NH, PA, WA
  6. Audit log — PII stored as SHA-256 hash, never plaintext

Violations surface as ComplianceViolationError and are never silently bypassed.


Repo layout

agentbroker/
+-- core/                  # 14 operation handlers + shared Pydantic models
+-- channels/              # Twilio, SendGrid, Vapi, Bland, Cal.com, Playwright
+-- compliance/            # pre_check, jurisdiction_rules, consent_store, audit_log
+-- reliability/           # retry, circuit_breaker, channel_fallback, async_runner
+-- billing/               # meter, budget_guard, receipt_signer, pricing_tiers
+-- telemetry/             # tracer, log_redactor, metrics_emitter
+-- storage/               # outcome_store, idempotency_store
+-- supply/                # smb_directory (20+ seed/demo SMBs)
+-- onboarding/            # self_serve, verification_flow, channel_capture
+-- feedback/              # failure_classifier, attribution_engine, outcome_evaluator
+-- optimizer/             # ab_router, selection_analytics, weekly_report
+-- agent_interface/       # manifest_server, mcp_server, well_known, identity, webhooks
+-- manifest/              # manifest.json, mcp_tools.json, openapi.yaml
+-- api/                   # errors.md, identity.md, async.md
+-- docs/                  # mission, architecture, compliance, ADRs
+-- edge/                  # Cloudflare Worker (TypeScript/Hono)
+-- deploy/                # Dockerfile, docker-compose.yml
+-- tests/                 # unit, contract, compliance, fault_injection, agent_sim
+-- main.py                # FastAPI entry point
+-- config.py              # Centralized config from env
+-- requirements.txt

Local development

# Install dependencies
pip install -r requirements.txt

# Run tests (103 passing)
python -m pytest tests/ -q

# Start the API
python main.py
# --> http://localhost:8000/docs      (Swagger UI)
# --> http://localhost:8000/mcp       (MCP endpoint)
# --> http://localhost:8000/manifest  (capability manifest)

# Run the agent simulation harness
python -m tests.agent_sim.harness

# Self-test
python -c "import asyncio; from agent_interface.self_test import run_self_test; print(asyncio.run(run_self_test()).all_passed)"

Or with Docker:

docker compose -f deploy/docker-compose.yml up

Documentation


Contributing

This is a proprietary project. Issues and discussion are welcome — open a GitHub issue to report bugs or suggest features. Pull requests require prior discussion with the maintainer.


License

Proprietary — contact for licensing terms.


Built by Basil Al-Shukaili. Listed on the MCP Registry and Glama.

Recommended MCP Servers

How it compares

Paid SMB brokerage MCP with x402—not a generic CRM plugin and not a local dev-only mock server.

FAQ

What does agent broker MCP do?

AI agents find, message & book SMBs; pay per call in USDC on Base via x402.

When should I use agent broker?

User asks about Agent Broker MCP mcp, ai agents find, message & book smbs; pay per call in usdc on base via .

Is this MCP server safe to install?

Review the Security Audits panel and upstream source before connecting in production.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.