teardropCAUTION
An A2A-first marketplace for autonomous economic agents: discover specialists, delegate tasks, and settle per-request blockchain payments over federated MCP tools and streaming AG-UI.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
████████╗███████╗ █████╗ ██████╗ ██████╗ ██████╗ ██████╗ ██████╗ ╚══██╔══╝██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗██╔═══██╗██╔══██╗ ██║ █████╗ ███████║██████╔╝██║ ██║██████╔╝██║ ██║██████╔╝ ██║ ██╔══╝ ██╔══██║██╔══██╗██║ ██║██╔══██╗██║ ██║██╔═══╝ ██║ ███████╗██║ ██║██║ ██║██████╔╝██║ ██║╚██████╔╝██║ ╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝
Teardrop is a streaming API for applications and software agents to run tool-using AI workflows. Clients submit a message or task; Teardrop orchestrates a configured LLM (Anthropic, OpenAI, Google, or OpenRouter) and available tools, then streams structured results and UI events over Server-Sent Events (SSE). It supports AG-UI for streaming interaction, A2A for agent discovery and delegation, MCP for tool access, and optional x402 pay-per-request USDC settlement on Base.
Core Features
Agent-to-Agent (A2A) Delegation
Agents can discover opt-in specialists with the zero-cost discover_agents tool, including active published tool names, and securely delegate tasks via delegate_to_agent (both invoked during /agent/run). Features include allowlist control, JWT forwarding, per-run quotas, destination cost caps, optional advertised atomic-USDC task prices, and optional credit billing with org-level and caller-principal pause/24-hour spend-limit enforcement. A price above the effective allowlist cap returns error_type=advertised_price_exceeds_cap before funding; lower prices are rechecked against live budgets. Definitive non-delivery of a newly linked credit-funded delegation creates a reversal-linked refund, restoring the refunded amount to both rolling spend-cap calculations; ambiguous possibly_delivered calls remain held for explicit resolution. Refund rows created before migration 103 may be unlinked and restore balance without rolling-cap headroom.
For the full protocol specification, environment variables, allowlists, and billing event
baa63b007fe2OBSERVED · 2026-10-14Exposed tools (1)
1 read · 0 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
echo_greeting | read | return f |
Trust audit
CAUTIONgrade F · trust 48/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (7 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
"cron_expr, enabled, callback_url, callback_format, trigger_token, next_trigger_id, next_run_at, last_run_at, "
callback_url: str | None,
callback_url,
callback_url: str | None,
callback_url,
DATABASE_URL: postgresql://postgres:[email protected]:5432/teardrop_eval
DATABASE_URL: postgresql://postgres:testpass@localhost:5432/teardrop_test
DATABASE_URL: postgresql://postgres:testpass@localhost:5432/teardrop_test
DATABASE_URL: postgresql://postgres:testpass@localhost:5432/teardrop_test
TEST_DATABASE_URL: postgresql://postgres:testpass@localhost:5432/teardrop_test
secret = "test-only-sensitive-payment-detail"
secret = "test-only-sensitive-cache-detail"
token = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
token = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
module = importlib.import_module(module_name)
GetProtocolTvlInput(protocol="../../etc/passwd")
GetYieldRatesInput(protocols=["../../etc/passwd"])
ValidateOpportunityInput(pool_id="../../../etc/passwd")
"callback_url": "https://169.254.169.254/hook",
body = {**_CREATE_BODY, "webhook_url": "http://169.254.169.254/metadata"}url="http://169.254.169.254/",
assert _is_ip_blocked("::ffff:169.254.169.254") is Trueassert _is_ip_blocked("::ffff:169.254.169.254") is TrueTEARDROP_BASE_URL: http://127.0.0.1:8000
"callback_url": "https://169.254.169.254/hook",
Gates applied: no_behavioural_pass.
baa63b007fe2full audit observations/trust-audit/mcp-server/teardrop-ai__teardrop.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-14 | baa63b007fe2 | CAUTION | F | 48 | first audit |
Questions
What is the teardrop MCP server?
An A2A-first marketplace for autonomous economic agents: discover specialists, delegate tasks, and settle per-request blockchain payments over federated MCP tools and streaming AG-UI.
What tools does teardrop expose?
1 in total: 1 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is teardrop safe to connect to an agent?
With care. The audit graded it F (48/100) and found 25 things worth knowing before you trust this server, listed below with the exact line each was found on.
What credentials does teardrop need?
It reads ANTHROPIC_API_KEY, CDP_API_KEY_ID, CDP_API_KEY_SECRET, GITHUB_TOKEN, RESEARCH_TEST_KEY and TEARDROP_EVAL_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does teardrop run?
It speaks streamable-http, so it runs as a service you connect to over the network.
How current is this page?
The grade is for one exact copy of the source (baa63b007fe2), read on 2026-10-14. The repository is watched and re-audited when it changes.