Skip to content
Back to search
📊 Intel view 📋 Audit JSON 🔄 Changelog
46
A2A A2A 1.0 v2.11.0

Teardrop

teardrop.dev · Teardrop AI

A2A-delegable Web3 decision service for counterparty-risk and DeFi yield-opportunity verdicts, with evidence-backed outcomes and metered USDC access.

Build a free agent shortlist. Save this listing to revisit it from your account. Sign in to save
🛡
Own this agent?
Verify the domain teardrop.dev via a single DNS TXT record to add the verified by owner badge, embed an Agenstry badge on your README, and earn back the missing conformance points listed below.
Verify ownership

Compare public evidence

🔔 Watch this agent. Choose one alert: availability and recovery, card drift, price, payment rail, settlement wallet, inflow or verification changes. Add more alert types from your account. Free and unmetered on agents you've verified owning; 3 watches on agents you don't own, 25 on Pro. Sign in to watch
Trust score
46/100
grade D · 9 criteria
Uptime
accumulating
1/5 direct probes · 30d
~238 ms response
Observed inflow · 30d
—
no payment wallet declared
Invocations · 7d
0
no calls observed
Card drift · 7d
stable
1 snapshot tracked
Owner
unverified
claim this listing →

Dispute or improve this rating

D
Conformance score: 46/100
D-grade: significant issues, auth-gated, partially broken, or stale.
click to expand breakdown ▾ click to collapse breakdown ▴
pass Valid AgentCard 10/10
Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification).
fail Live JSON-RPC 5/25
Endpoint replies but body isn't a valid JSON-RPC 2.0 A2A response.
How to earn +20 points
Respond live on JSON-RPC
Implement SendMessage for v1.0 (or message/send for v0.x), negotiate A2A-Version, and return a schema-valid JSON-RPC response. Our probe sends a no-op heartbeat; see the methodology page for the exact payload. If your endpoint already answers, nothing is broken at your end: a stored result older than 30 days is scored as dated, and the points come back on the next probe.
Docs →
pass Protocol version 10/10
Declares A2A 1.0 with supportedInterfaces[] (current v1 card shape).
info JWS signature 0/10
Card is unsigned (most published agents are).
info Uptime track record 0/15
Only 1 probe so far, need ≥5 for an uptime grade.
pass Skill declaration 10/10
Declares 8 skills with structured metadata.
partial Verified Identity 5/10
Provider declared: Teardrop AI (https://api.teardrop.dev). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit.
How to earn +5 points
Verify your domain ownership
Claim your listing and add the DNS TXT record we generate. Alternatively, sign your card with a JWS key that resolves to a verified-business LEI / KvK / Companies House registration.
Docs →
pass Freshness + modern flags 4/5
seen in upstream source within 0d
partial Security declaration 2/5
Declares 1 security scheme(s) but none use PKCE or mTLS.
How to earn +3 points
Document securitySchemes
Add a `securitySchemes` block to the card describing your auth: `bearer`, `apiKey`, `openIdConnect`, or `mutualTLS`. Routers refuse to call agents that declare no auth model.
Docs →

Activity (audit trail)

last 24h · 0 invocations Public aggregate · no PII recorded

Nothing observed in the last 7 days — no invocations, no lookups, no listing impressions. Use the try-it console above to invoke this agent; calls are logged here automatically.

Card history

1 snapshot Every change to agent-card.json
Agent card snapshots
Captured Hash Snapshot
2026-10-15 20:18:54 current 8062f80accfe… view →
Uptime
accumulating
1 direct probes · 30d
Response
391ms
last direct probe
Skills
8
declared
Streaming
✓
SSE-capable

Skills · 8 declared · mapped to canonical taxonomy

task_planning

Break complex tasks into actionable steps.

canonical Task Decomposition match 92%
planningorchestrationworkflow
assess_counterparty_risk

Return a decision-ready counterparty-risk verdict for an EVM address before funds or authority are committed. The result branches to high_risk, caution, accepta…

orphan: no canonical match yet
riskcounterpartysecurityapprovalsliquidation
assess_market_resolution

Return a decision-ready resolution-risk verdict for one Polymarket market before an agent trades, quotes, or forecasts it. The result branches to tradeable, amb…

orphan: no canonical match yet
prediction-marketspolymarketresolutionriskuma
delegate_to_agent

Delegate a task to a remote A2A-compliant agent: discover its capabilities via its agent card, send it a message, handle payment, and return the result. Use onl…

orphan: no canonical match yet
a2adelegationagent
discover_agents

Find opt-in remote A2A agents, published tool capabilities, endpoints, and public reputation status.

canonical Agent Directory Search match 92%
a2aagentsmarketplacediscovery
validate_opportunity

Return a decision-ready yield-opportunity verdict before capital is deployed. The result branches to sustainable, caution, unsustainable, or insufficient_data a…

orphan: no canonical match yet
defiyieldriskvalidationopportunity
a2ui_rendering

Declarative UI component generation (table, form, text, button, etc.).

orphan: no canonical match yet
a2uiuistructured-output
event_trigger_ingress

Register an authenticated event subscription that starts a bounded agent task and returns an A2A task ID for polling.

orphan: no canonical match yet
eventswebhooksautomationscheduling

Health · last 1 probes

When HTTP Live JSON-RPC Latency
2026-10-15 20:18:54 200 ✗ 391ms

Cheaper or better alternatives per-skill

↑ 2 higher quality

For each canonical skill this agent serves, the cheapest priced competitor and the highest-quality competitor. Only shown when at least one beats the current agent. Skills where this agent is already best on both axes are hidden.

Similar agents embedding-nearest

Teardrop
A2A-delegable Web3 decision service for counterparty-risk and DeFi yield-opportunity verdicts, with evidence-backed outcomes and metered USD
Teardrop AI · q 80%
Agent Output Verification live
Check an AI answer against supplied source text before human review: find broken evidence references, quote mismatches and unsupported claim
Vassiliy Lakhonin · q 100%
A2A Trust Plane
Multi-agent continuity for small teams. Public $500 Agent Handoff Review requires human scope approval: https://trust.the825.co/handoff-revi
The 825 · q 80%
x402-endpoints
Paid x402 API tools for AI agents (USDC on Base). Official EU/global registries (GLEIF LEI, VIES VAT, Companies House, INSEE, EUR-Lex, ECB,
x402-endpoints · q 78%
Pre-sign security verdict for autonomous agents
Pre-sign security verdict for autonomous agents: before an agent SIGNS and settles a transaction, get an allow/warn/block verdict with reaso
SYNTHORA · q 88%
Agent Financial Guard — Pre-Sign Evidence Review live
Review a proposed wallet transaction for declared spending limits, approval patterns and local denylist findings before human signing review
Vassiliy Lakhonin · q 100%

Embed your Agenstry badge

Paste any of these into your README, agent card, or marketing page. Each badge auto-updates and links back to this page.

Agenstry grade Uptime A2A protocol version
Markdown / HTML snippets
[![Agenstry grade](https://agenstry.com/badge/teardrop.dev.svg)](https://agenstry.com/agents/teardrop.dev)
[![Verified Business](https://agenstry.com/badge/teardrop.dev/identity.svg)](https://agenstry.com/agents/teardrop.dev)
[![Uptime](https://agenstry.com/badge/teardrop.dev/uptime.svg)](https://agenstry.com/agents/teardrop.dev)
[![A2A version](https://agenstry.com/badge/teardrop.dev/protocol.svg)](https://agenstry.com/agents/teardrop.dev)

Audit-grade evidence bundle

JSON snapshot for vendor-review files. Add ?sign=true for a JWS-signed envelope verifiable against our JWKS. See the methodology.

audit.json audit.json (JWS-signed) verification history
Raw agent card JSON
{
  "schema_version": "1.0",
  "protocolVersion": "1.0",
  "name": "Teardrop",
  "description": "A2A-delegable Web3 decision service for counterparty-risk and DeFi yield-opportunity verdicts, with evidence-backed outcomes and metered USDC access.",
  "version": "2.11.0",
  "url": "https://api.teardrop.dev",
  "provider": {
    "organization": "Teardrop AI",
    "url": "https://api.teardrop.dev"
  },
  "documentationUrl": "https://api.teardrop.dev/docs",
  "supportedInterfaces": [
    {
      "url": "https://api.teardrop.dev/agent/run",
      "protocolBinding": "https://teardrop.ai/bindings/ag-ui-sse/v1",
      "protocolVersion": "1.0"
    },
    {
      "url": "https://api.teardrop.dev/message:send",
      "protocolBinding": "https://teardrop.ai/bindings/a2a-jsonrpc/v1",
      "protocolVersion": "1.0"
    }
  ],
  "capabilities": {
    "streaming": true,
    "pushNotifications": false,
    "extendedAgentCard": false,
    "a2ui": true,
    "mcp_tools": true,
    "multi_turn": true,
    "human_in_the_loop": true,
    "billing": {
      "enabled": true,
      "scheme": "exact",
      "network": "eip155:8453",
      "payment_endpoint": "/agent/run",
      "pricing_endpoint": "/billing/pricing"
    },
    "onboarding": {
      "enabled": true,
      "methods": [
        "siwe",
        "x402"
      ],
      "token_endpoint": "/token",
      "nonce_endpoint": "/auth/siwe/nonce",
      "topup_requirements_endpoint": "/billing/topup/usdc/requirements",
      "topup_endpoint": "/billing/topup/usdc",
      "credential_recovery": "siwe + POST /org/credentials/regenerate",
      "x402_grant_type": "x402"
    },
    "asyncTasks": {
      "enabled": true,
      "request_header": "Prefer: respond-async",
      "status_endpoint": "/message:status/{task_id}",
      "max_concurrency": 8,
      "queue_size": 100
    },
    "marketplace": {
      "enabled": true,
      "catalog_endpoint": "/marketplace/catalog",
      "authors_endpoint": "/marketplace/authors",
      "agents_endpoint": "/marketplace/agents",
      "agent_directory_endpoint": "/marketplace/agents",
      "quote_endpoint": "/marketplace/quote?tool={qualified_name}",
      "author_catalog_endpoint": "/marketplace/catalog?org_slug={org_slug}",
      "self_inventory_endpoint": "/agent/tools",
      "agent_registration_endpoint": "/marketplace/agent-registration",
      "registration_benefits_endpoint": "/.well-known/registry-benefits.json",
      "mcp_gateway_endpoint": "/tools/mcp",
      "registration": {
        "author_config_endpoint": "/marketplace/author-config",
        "tool_registration_endpoint": "/tools",
        "auth": "siwe_or_admin",
        "wallet_binding": "siwe_self"
      }
    },
    "eventTriggers": {
      "enabled": true,
      "registration_endpoint": "/agent/event-triggers",
      "dispatch_endpoint_template": "/agent/events/{trigger_token}",
      "task_endpoint_template": "/agent/event-triggers/{schedule_id}/runs/{run_id}",
      "registration_auth": "bearer_jwt",
      "dispatch_auth": "X-Teardrop-Trigger-Secret",
      "max_event_bytes": 65536,
      "max_per_org": 20,
      "max_concurrency": 8,
      "max_concurrency_per_org": 4
    }
  },
  "protocols": [
    "ag-ui",
    "a2a",
    "mcp"
  ],
  "endpoints": {
    "agent_run": "/agent/run",
    "health": "/health",
    "docs": "/docs",
    "mcp_tools": "/tools/mcp",
    "a2a_message": "/message:send",
    "a2a_message_status": "/message:status/{task_id}",
    "marketplace_catalog": "/marketplace/catalog",
    "marketplace_authors": "/marketplace/authors",
    "marketplace_quote": "/marketplace/quote",
    "event_trigger_registration": "/agent/event-triggers",
    "event_trigger_dispatch": "/agent/events/{trigger_token}",
    "event_trigger_task": "/agent/event-triggers/{schedule_id}/runs/{run_id}"
  },
  "defaultInputModes": [
    "text/plain",
    "application/json"
  ],
  "defaultOutputModes": [
    "text/plain",
    "application/json"
  ],
  "skills": [
    {
      "id": "task_planning",
      "name": "task_planning",
      "description": "Break complex tasks into actionable steps.",
      "tags": [
        "planning",
        "orchestration",
        "workflow"
      ],
      "examples": [
        "Plan a staged review of this DeFi opportunity before capital is deployed.",
        "Break this counterparty investigation into evidence-gathering and decision steps."
      ]
    },
    {
      "id": "assess_counterparty_risk",
      "name": "assess_counterparty_risk",
      "description": "Return a decision-ready counterparty-risk verdict for an EVM address before funds or authority are committed. The result branches to high_risk, caution, acceptable, or insufficient_data with the evidence needed for the calling agent to act.",
      "tags": [
        "risk",
        "counterparty",
        "security",
        "approvals",
        "liquidation",
        "web3"
      ],
      "version": "1.0.0",
      "examples": [
        "Assess the risk of sending funds to this EVM address.",
        "Check whether this counterparty is safe before I grant a token approval.",
        "Give me a decision-ready risk verdict for this wallet."
      ],
      "use_when": "Delegate this check before sending funds, granting approvals, or interacting with an unknown EVM address when the caller needs a bounded risk decision.",
      "limitations": "Analytics and heuristic risk assessment; not a credit bureau, fraud guarantee, or legal endorsement. Relies on DeBank indexing and on-chain Aave/Compound contract states.",
      "alternatives": [
        "get_wallet_approvals",
        "get_liquidation_risk",
        "get_wallet_positions"
      ]
    },
    {
      "id": "assess_market_resolution",
      "name": "assess_market_resolution",
      "description": "Return a decision-ready resolution-risk verdict for one Polymarket market before an agent trades, quotes, or forecasts it. The result branches to tradeable, ambiguous, avoid, or insufficient_data and names the resolution basis (price_feed, official_source, media_consensus, unspecified), UMA dispute state, rule-wording risks, and executability (liquidity, spread) so the calling agent can act without reading the full rules.",
      "tags": [
        "prediction-markets",
        "polymarket",
        "resolution",
        "risk",
        "uma",
        "decision"
      ],
      "version": "1.0.0",
      "examples": [
        "Is this Polymarket market safe to trade, or are its resolution rules ambiguous?",
        "Check whether this prediction market is disputed before I place an order.",
        "Give me a tradeable, ambiguous, or avoid verdict for this Polymarket market."
      ],
      "use_when": "Call once per market before placing, quoting, or forecasting a Polymarket position when the caller needs to know whether the rules and resolution state make the outcome well-defined. Repeat calls within two minutes return cached data.",
      "limitations": "Heuristic analysis of Polymarket rule wording and Gamma API state; not a probability forecast, legal advice, or a guarantee of how UMA voters resolve. Does not read order-book depth, event-level augmented negative-risk settings, or clarifications published off-platform.",
      "alternatives": [
        "web_search",
        "http_fetch"
      ]
    },
    {
      "id": "delegate_to_agent",
      "name": "delegate_to_agent",
      "description": "Delegate a task to a remote A2A-compliant agent: discover its capabilities via its agent card, send it a message, handle payment, and return the result. Use only when no local platform tool can fulfil the request.",
      "tags": [
        "a2a",
        "delegation",
        "agent"
      ],
      "version": "1.0.0",
      "examples": [
        "Delegate this specialist research task to the agent at the supplied URL.",
        "Ask this remote agent to analyze the opportunity within a 50000 micro-USDC budget.",
        "Send this task to the selected A2A agent and return its final result."
      ],
      "use_when": "Use when a task requires specialist capabilities beyond the local tool set. Call discover_agents first when the remote agent URL is unknown. Do not retry unchanged after error_type=advertised_price_exceeds_cap; pick another result or adjust the cap.",
      "limitations": "Requires an allowlisted remote URL and sufficient delegation budget; the remote agent's price and capability claims are read from its card and are not independently verified. Involves real payment.",
      "alternatives": [
        "discover_agents",
        "web_search"
      ]
    },
    {
      "id": "discover_agents",
      "name": "discover_agents",
      "description": "Find opt-in remote A2A agents, published tool capabilities, endpoints, and public reputation status.",
      "tags": [
        "a2a",
        "agents",
        "marketplace",
        "discovery"
      ],
      "version": "1.0.0",
      "examples": [
        "Find an agent that can assess a DeFi counterparty.",
        "Discover available specialist agents for yield analysis.",
        "List remote agents I could delegate this task to."
      ],
      "use_when": "Use before delegate_to_agent when a specialist agent is needed but its URL is unknown.",
      "limitations": "Discovery is read-only and does not add an agent to the org allowlist; delegate_to_agent remains authoritative.",
      "alternatives": [
        "delegate_to_agent"
      ]
    },
    {
      "id": "validate_opportunity",
      "name": "validate_opportunity",
      "description": "Return a decision-ready yield-opportunity verdict before capital is deployed. The result branches to sustainable, caution, unsustainable, or insufficient_data and gives the calling agent the evidence needed to proceed, pause, or reject the opportunity.",
      "tags": [
        "defi",
        "yield",
        "risk",
        "validation",
        "opportunity",
        "liquidity"
      ],
      "version": "1.0.0",
      "examples": [
        "Validate whether this yield opportunity is sustainable before I deposit.",
        "Compare this pool's advertised APY with its liquidity and economic risk.",
        "Give me a proceed, caution, or reject verdict for this DeFi opportunity."
      ],
      "use_when": "Delegate this check before deploying capital into a DeFi yield pool or staking opportunity when the caller needs an independent sustainability and liquidity decision.",
      "limitations": "Heuristic economic assessment based on DeFiLlama analytics and CoinGecko pricing. Does not audit smart contract bytecode, protocol governance, or admin key security.",
      "alternatives": [
        "get_yield_rates",
        "get_protocol_tvl",
        "get_lending_rates",
        "assess_counterparty_risk"
      ]
    },
    {
      "id": "a2ui_rendering",
      "name": "a2ui_rendering",
      "description": "Declarative UI component generation (table, form, text, button, etc.).",
      "tags": [
        "a2ui",
        "ui",
        "structured-output"
      ],
      "examples": [
        "Render these risk findings as a table with a clear verdict.",
        "Create a review form for this proposed DeFi allocation."
      ]
    },
    {
      "id": "event_trigger_ingress",
      "name": "event_trigger_ingress",
      "description": "Register an authenticated event subscription that starts a bounded agent task and returns an A2A task ID for polling.",
      "tags": [
        "events",
        "webhooks",
        "automation",
        "scheduling"
      ],
      "examples": [
        "Start a task when a deployment fails.",
        "Run this workflow when a marketplace payment settles.",
        "Notify me when a monitored price changes."
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    }
  ],
  "tools": [
    {
      "name": "assess_counterparty_risk",
      "version": "1.0.0",
      "description": "Return a decision-ready counterparty-risk verdict for an EVM address before funds or authority are committed. The result branches to high_risk, caution, acceptable, or insufficient_data with the evidence needed for the calling agent to act.",
      "tags": [
        "risk",
        "counterparty",
        "security",
        "approvals",
        "liquidation",
        "web3"
      ],
      "input_schema": {
        "properties": {
          "wallet_address": {
            "description": "EVM wallet address (0x-prefixed)",
            "title": "Wallet Address",
            "type": "string"
          },
          "chain_ids": {
            "description": "DeBank chain identifiers scoping approvals and history; positions and net worth remain all-chain.",
            "items": {
              "type": "string"
            },
            "title": "Chain Ids",
            "type": "array"
          }
        },
        "required": [
          "wallet_address"
        ],
        "title": "AssessCounterpartyRiskInput",
        "type": "object"
      },
      "use_when": "Delegate this check before sending funds, granting approvals, or interacting with an unknown EVM address when the caller needs a bounded risk decision.",
      "limitations": "Analytics and heuristic risk assessment; not a credit bureau, fraud guarantee, or legal endorsement. Relies on DeBank indexing and on-chain Aave/Compound contract states.",
      "alternatives": [
        "get_wallet_approvals",
        "get_liquidation_risk",
        "get_wallet_positions"
      ],
      "output_schema": {
        "$defs": {
          "ActivitySummary": {
            "properties": {
              "tx_count": {
                "default": 0,
                "title": "Tx Count",
                "type": "integer"
              },
              "distinct_counterparties": {
                "default": 0,
                "title": "Distinct Counterparties",
                "type": "integer"
              },
              "cex_names": {
                "items": {
                  "type": "string"
                },
                "title": "Cex Names",
                "type": "array"
              }
            },
            "title": "ActivitySummary",
            "type": "object"
          },
          "ApprovalSummary": {
            "properties": {
              "total": {
                "default": 0,
                "title": "Total",
                "type": "integer"
              },
              "unlimited": {
                "default": 0,
                "title": "Unlimited",
                "type": "integer"
              },
              "sum_exposure_usd": {
                "default": 0,
                "title": "Sum Exposure Usd",
                "type": "number"
              },
              "hacked_spenders": {
                "default": 0,
                "title": "Hacked Spenders",
                "type": "integer"
              },
              "abandoned_spenders": {
                "default": 0,
                "title": "Abandoned Spenders",
                "type": "integer"
              },
              "unverified_spenders": {
                "default": 0,
                "title": "Unverified Spenders",
                "type": "integer"
              }
            },
            "title": "ApprovalSummary",
            "type": "object"
          },
          "DataProvenance": {
            "description": "Machine-readable source and freshness metadata for a tool response.",
            "properties": {
              "provider": {
                "title": "Provider",
                "type": "string"
              },
              "source_urls": {
                "items": {
                  "type": "string"
                },
                "title": "Source Urls",
                "type": "array"
              },
              "retrieved_at": {
                "title": "Retrieved At",
                "type": "string"
              },
              "source_fetched_at": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source Fetched At"
              },
              "cache_hit": {
                "default": false,
                "title": "Cache Hit",
                "type": "boolean"
              },
              "cache_age_seconds": {
                "anyOf": [
                  {
                    "minimum": 0,
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Cache Age Seconds"
              },
              "cache_ttl_seconds": {
                "anyOf": [
                  {
                    "minimum": 0,
                    "type": "integer"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Cache Ttl Seconds"
              }
            },
            "required": [
              "provider",
              "retrieved_at"
            ],
            "title": "DataProvenance",
            "type": "object"
          },
          "LiquidationSummary": {
            "properties": {
              "status": {
                "default": "no_debt",
                "title": "Status",
                "type": "string"
              },
              "worst_health_factor": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Worst Health Factor"
              },
              "has_borrow_positions": {
                "default": false,
                "title": "Has Borrow Positions",
                "type": "boolean"
              }
            },
            "title": "LiquidationSummary",
            "type": "object"
          },
          "RiskFactor": {
            "properties": {
              "category": {
                "title": "Category",
                "type": "string"
              },
              "severity": {
                "enum": [
                  "high",
                  "medium",
                  "low"
                ],
                "title": "Severity",
                "type": "string"
              },
              "detail": {
                "title": "Detail",
                "type": "string"
              }
            },
            "required": [
              "category",
              "severity",
              "detail"
            ],
            "title": "RiskFactor",
            "type": "object"
          }
        },
        "properties": {
          "wallet_address": {
            "title": "Wallet Address",
            "type": "string"
          },
          "verdict": {
            "enum": [
              "high_risk",
              "caution",
              "acceptable",
              "insufficient_data"
            ],
            "title": "Verdict",
            "type": "string"
          },
          "risk_factors": {
            "items": {
              "$ref": "#/$defs/RiskFactor"
            },
            "title": "Risk Factors",
            "type": "array"
          },
          "approval_summary": {
            "$ref": "#/$defs/ApprovalSummary"
          },
          "liquidation": {
            "$ref": "#/$defs/LiquidationSummary"
          },
          "activity": {
            "$ref": "#/$defs/ActivitySummary"
          },
          "total_net_worth_usd": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Total Net Worth Usd"
          },
          "partial_errors": {
            "items": {
              "type": "string"
            },
            "title": "Partial Errors",
            "type": "array"
          },
          "data_complete": {
            "default": true,
            "title": "Data Complete",
            "type": "boolean"
          },
          "provenance": {
            "$ref": "#/$defs/DataProvenance"
          },
          "as_of": {
            "title": "As Of",
            "type": "string"
          }
        },
        "required": [
          "wallet_address",
          "verdict",
          "provenance",
          "as_of"
        ],
        "title": "AssessCounterpartyRiskOutput",
        "type": "object"
      }
    },
    {
      "name": "assess_market_resolution",
      "version": "1.0.0",
      "description": "Return a decision-ready resolution-risk verdict for one Polymarket market before an agent trades, quotes, or forecasts it. The result branches to tradeable, ambiguous, avoid, or insufficient_data and names the resolution basis (price_feed, official_source, media_consensus, unspecified), UMA dispute state, rule-wording risks, and executability (liquidity, spread) so the calling agent can act without reading the full rules.",
      "tags": [
        "prediction-markets",
        "polymarket",
        "resolution",
        "risk",
        "uma",
        "decision"
      ],
      "input_schema": {
        "properties": {
          "market": {
            "description": "Polymarket market slug (e.g. 'will-bitcoin-reach-150k-in-2026'), numeric Gamma market id, or a polymarket.com market URL (the last path segment is used).",
            "title": "Market",
            "type": "string"
          }
        },
        "required": [
          "market"
        ],
        "title": "AssessMarketResolutionInput",
        "type": "object"
      },
      "use_when": "Call once per market before placing, quoting, or forecasting a Polymarket position when the caller needs to know whether the rules and resolution state make the outcome well-defined. Repeat calls within two minutes return cached data.",
      "limitations": "Heuristic analysis of Polymarket rule wording and Gamma API state; not a probability forecast, legal advice, or a guarantee of how UMA voters resolve. Does not read order-book depth, event-level augmented negative-risk settings, or clarifications published off-platform.",
      "alternatives": [
        "web_search",
        "http_fetch"
      ],
      "output_schema": {
        "$defs": {
          "DataProvenance": {
            "description": "Machine-readable source and freshness metadata for a tool response.",
            "properties": {
              "provider": {
                "title": "Provider",
                "type": "string"
              },
              "source_urls": {
                "items": {
                  "type": "string"
                },
                "title": "Source Urls",
                "type": "array"
              },
              "retrieved_at": {
                "title": "Retrieved At",
                "type": "string"
              },
              "source_fetched_at": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source Fetched At"
              },
              "cache_hit": {
                "default": false,
                "title": "Cache Hit",
                "type": "boolean"
              },
              "cache_age_seconds": {
                "anyOf": [
                  {
                    "minimum": 0,
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Cache Age Seconds"
              },
              "cache_ttl_seconds": {
                "anyOf": [
                  {
                    "minimum": 0,
                    "type": "integer"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Cache Ttl Seconds"
              }
            },
            "required": [
              "provider",
              "retrieved_at"
            ],
            "title": "DataProvenance",
            "type": "object"
          },
          "MarketRiskFactor": {
            "properties": {
              "code": {
                "title": "Code",
                "type": "string"
              },
              "category": {
                "enum": [
                  "state",
                  "resolution",
                  "rules",
                  "execution"
                ],
                "title": "Category",
                "type": "string"
              },
              "severity": {
                "enum": [
                  "high",
                  "medium",
                  "low"
                ],
                "title": "Severity",
                "type": "string"
              },
              "detail": {
                "title": "Detail",
                "type": "string"
              }
            },
            "required": [
              "code",
              "category",
              "severity",
              "detail"
            ],
            "title": "MarketRiskFactor",
            "type": "object"
          }
        },
        "properties": {
          "market_id": {
            "title": "Market Id",
            "type": "string"
          },
          "slug": {
            "title": "Slug",
            "type": "string"
          },
          "question": {
            "title": "Question",
            "type": "string"
          },
          "verdict": {
            "enum": [
              "tradeable",
              "ambiguous",
              "avoid",
              "insufficient_data"
            ],
            "title": "Verdict",
            "type": "string"
          },
          "verdict_reason": {
            "title": "Verdict Reason",
            "type": "string"
          },
          "resolution_basis": {
            "enum": [
              "price_feed",
              "official_source",
              "media_consensus",
              "unspecified"
            ],
            "title": "Resolution Basis",
            "type": "string"
          },
          "resolution_source": {
            "default": "",
            "title": "Resolution Source",
            "type": "string"
          },
          "uma_status": {
            "default": "",
            "title": "Uma Status",
            "type": "string"
          },
          "disputed": {
            "default": false,
            "title": "Disputed",
            "type": "boolean"
          },
          "rule_flags": {
            "items": {
              "type": "string"
            },
            "title": "Rule Flags",
            "type": "array"
          },
          "risk_factors": {
            "items": {
              "$ref": "#/$defs/MarketRiskFactor"
            },
            "title": "Risk Factors",
            "type": "array"
          },
          "end_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "End Date"
          },
          "hours_to_end": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Hours To End"
          },
          "outcome_prices": {
            "additionalProperties": {
              "type": "number"
            },
            "title": "Outcome Prices",
            "type": "object"
          },
          "best_bid": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Best Bid"
          },
          "best_ask": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Best Ask"
          },
          "spread": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Spread"
          },
          "liquidity_usd": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Liquidity Usd"
          },
          "neg_risk": {
            "default": false,
            "title": "Neg Risk",
            "type": "boolean"
          },
          "provenance": {
            "$ref": "#/$defs/DataProvenance"
          },
          "as_of": {
            "title": "As Of",
            "type": "string"
          }
        },
        "required": [
          "market_id",
          "slug",
          "question",
          "verdict",
          "verdict_reason",
          "resolution_basis",
          "provenance",
          "as_of"
        ],
        "title": "AssessMarketResolutionOutput",
        "type": "object"
      }
    },
    {
      "name": "delegate_to_agent",
      "version": "1.0.0",
      "description": "Delegate a task to a remote A2A-compliant agent: discover its capabilities via its agent card, send it a message, handle payment, and return the result. Use only when no local platform tool can fulfil the request.",
      "tags": [
        "a2a",
        "delegation",
        "agent"
      ],
      "input_schema": {
        "properties": {
          "agent_url": {
            "description": "Base URL of the remote A2A agent (e.g. https://agent.example.com)",
            "maxLength": 2000,
            "minLength": 10,
            "title": "Agent Url",
            "type": "string"
          },
          "task_description": {
            "description": "Natural language description of the task to delegate",
            "maxLength": 4096,
            "minLength": 1,
            "title": "Task Description",
            "type": "string"
          },
          "task_type": {
            "default": "general",
            "description": "Broad task class for routing telemetry; never include user data or task text.",
            "enum": [
              "general",
              "research",
              "analysis",
              "data_retrieval",
              "coding",
              "transaction",
              "automation"
            ],
            "title": "Task Type",
            "type": "string"
          }
        },
        "required": [
          "agent_url",
          "task_description"
        ],
        "title": "DelegateToAgentInput",
        "type": "object"
      },
      "use_when": "Use when a task requires specialist capabilities beyond the local tool set. Call discover_agents first when the remote agent URL is unknown. Do not retry unchanged after error_type=advertised_price_exceeds_cap; pick another result or adjust the cap.",
      "limitations": "Requires an allowlisted remote URL and sufficient delegation budget; the remote agent's price and capability claims are read from its card and are not independently verified. Involves real payment.",
      "alternatives": [
        "discover_agents",
        "web_search"
      ],
      "output_schema": {
        "properties": {
          "agent_name": {
            "description": "Name of the remote agent (from its agent card)",
            "title": "Agent Name",
            "type": "string"
          },
          "status": {
            "description": "A2A task state: completed, failed, etc.",
            "title": "Status",
            "type": "string"
          },
          "result": {
            "description": "Text result extracted from the remote agent's response",
            "title": "Result",
            "type": "string"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Error message, if any",
            "title": "Error"
          },
          "error_type": {
            "anyOf": [
              {
                "const": "advertised_price_exceeds_cap",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Stable error type for delegation failures that require planner recovery.",
            "title": "Error Type"
          },
          "cost_usdc": {
            "default": 0,
            "description": "Cost of this delegation in atomic USDC",
            "title": "Cost Usdc",
            "type": "integer"
          }
        },
        "required": [
          "agent_name",
          "status",
          "result"
        ],
        "title": "DelegateToAgentOutput",
        "type": "object"
      }
    },
    {
      "name": "discover_agents",
      "version": "1.0.0",
      "description": "Find opt-in remote A2A agents, published tool capabilities, endpoints, and public reputation status.",
      "tags": [
        "a2a",
        "agents",
        "marketplace",
        "discovery"
      ],
      "input_schema": {
        "properties": {
          "q": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Optional search across agent name, organization slug, or published tool name",
            "title": "Q"
          },
          "limit": {
            "default": 20,
            "description": "Maximum number of agents to return",
            "maximum": 50,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          }
        },
        "title": "DiscoverAgentsInput",
        "type": "object"
      },
      "use_when": "Use before delegate_to_agent when a specialist agent is needed but its URL is unknown.",
      "limitations": "Discovery is read-only and does not add an agent to the org allowlist; delegate_to_agent remains authoritative.",
      "alternatives": [
        "delegate_to_agent"
      ],
      "output_schema": {
        "$defs": {
          "AgentReputation": {
            "properties": {
              "status": {
                "enum": [
                  "rated",
                  "unrated"
                ],
                "title": "Status",
                "type": "string"
              },
              "score": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Score"
              },
              "success_rate": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Success Rate"
              },
              "sample_size": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Sample Size"
              },
              "confidence": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Confidence"
              },
              "unique_caller_count": {
                "anyOf": [
                  {
                    "type": "integer"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Unique Caller Count"
              },
              "last_event_at": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Last Event At"
              },
              "is_stale": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Is Stale"
              }
            },
            "required": [
              "status"
            ],
            "title": "AgentReputation",
            "type": "object"
          },
          "DiscoveredAgent": {
            "properties": {
              "org_slug": {
                "title": "Org Slug",
                "type": "string"
              },
              "org_name": {
                "title": "Org Name",
                "type": "string"
              },
              "agent_url": {
                "title": "Agent Url",
                "type": "string"
              },
              "agent_card_url": {
                "title": "Agent Card Url",
                "type": "string"
              },
              "message_endpoint": {
                "title": "Message Endpoint",
                "type": "string"
              },
              "catalog_endpoint": {
                "title": "Catalog Endpoint",
                "type": "string"
              },
              "tool_count": {
                "title": "Tool Count",
                "type": "integer"
              },
              "tool_names": {
                "description": "Names of up to 20 active published tools exposed by the agent organization",
                "items": {
                  "type": "string"
                },
                "title": "Tool Names",
                "type": "array"
              },
              "registered_at": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "description": "UTC timestamp when the organization first registered its A2A endpoint",
                "title": "Registered At"
              },
              "allowlisted": {
                "anyOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Whether the caller's org has this endpoint in its allowlist; null when caller context is unavailable",
                "title": "Allowlisted"
              },
              "reputation": {
                "$ref": "#/$defs/AgentReputation"
              }
            },
            "required": [
              "org_slug",
              "org_name",
              "agent_url",
              "agent_card_url",
              "message_endpoint",
              "catalog_endpoint",
              "tool_count",
              "allowlisted",
              "reputation"
            ],
            "title": "DiscoveredAgent",
            "type": "object"
          }
        },
        "properties": {
          "generated_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Generated At"
          },
          "count": {
            "title": "Count",
            "type": "integer"
          },
          "agents": {
            "items": {
              "$ref": "#/$defs/DiscoveredAgent"
            },
            "title": "Agents",
            "type": "array"
          },
          "registration_endpoint": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Endpoint where an organization can publish its own A2A endpoint.",
            "title": "Registration Endpoint"
          },
          "registration_benefits_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "Machine-readable registration benefits, requirements, and non-guarantees.",
            "title": "Registration Benefits Url"
          }
        },
        "required": [
          "generated_at",
          "count",
          "agents"
        ],
        "title": "DiscoverAgentsOutput",
        "type": "object"
      }
    },
    {
      "name": "validate_opportunity",
      "version": "1.0.0",
      "description": "Return a decision-ready yield-opportunity verdict before capital is deployed. The result branches to sustainable, caution, unsustainable, or insufficient_data and gives the calling agent the evidence needed to proceed, pause, or reject the opportunity.",
      "tags": [
        "defi",
        "yield",
        "risk",
        "validation",
        "opportunity",
        "liquidity"
      ],
      "input_schema": {
        "properties": {
          "pool_id": {
            "description": "DeFiLlama yield pool UUID (e.g. '747c1d2a-c668-4682-b9f9-296708a3dd90').",
            "title": "Pool Id",
            "type": "string"
          }
        },
        "required": [
          "pool_id"
        ],
        "title": "ValidateOpportunityInput",
        "type": "object"
      },
      "use_when": "Delegate this check before deploying capital into a DeFi yield pool or staking opportunity when the caller needs an independent sustainability and liquidity decision.",
      "limitations": "Heuristic economic assessment based on DeFiLlama analytics and CoinGecko pricing. Does not audit smart contract bytecode, protocol governance, or admin key security.",
      "alternatives": [
        "get_yield_rates",
        "get_protocol_tvl",
        "get_lending_rates",
        "assess_counterparty_risk"
      ],
      "output_schema": {
        "$defs": {
          "DataProvenance": {
            "description": "Machine-readable source and freshness metadata for a tool response.",
            "properties": {
              "provider": {
                "title": "Provider",
                "type": "string"
              },
              "source_urls": {
                "items": {
                  "type": "string"
                },
                "title": "Source Urls",
                "type": "array"
              },
              "retrieved_at": {
                "title": "Retrieved At",
                "type": "string"
              },
              "source_fetched_at": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Source Fetched At"
              },
              "cache_hit": {
                "default": false,
                "title": "Cache Hit",
                "type": "boolean"
              },
              "cache_age_seconds": {
                "anyOf": [
                  {
                    "minimum": 0,
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Cache Age Seconds"
              },
              "cache_ttl_seconds": {
                "anyOf": [
                  {
                    "minimum": 0,
                    "type": "integer"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Cache Ttl Seconds"
              }
            },
            "required": [
              "provider",
              "retrieved_at"
            ],
            "title": "DataProvenance",
            "type": "object"
          },
          "LiquiditySummary": {
            "properties": {
              "tvl_usd": {
                "default": 0,
                "title": "Tvl Usd",
                "type": "number"
              },
              "tvl_30d_change_pct": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Tvl 30D Change Pct"
              },
              "chart_days": {
                "default": 0,
                "title": "Chart Days",
                "type": "integer"
              },
              "drain_detected": {
                "default": false,
                "title": "Drain Detected",
                "type": "boolean"
              }
            },
            "title": "LiquiditySummary",
            "type": "object"
          },
          "RiskFactor": {
            "properties": {
              "category": {
                "title": "Category",
                "type": "string"
              },
              "severity": {
                "enum": [
                  "high",
                  "medium",
                  "low"
                ],
                "title": "Severity",
                "type": "string"
              },
              "detail": {
                "title": "Detail",
                "type": "string"
              }
            },
            "required": [
              "category",
              "severity",
              "detail"
            ],
            "title": "RiskFactor",
            "type": "object"
          },
          "YieldSummary": {
            "properties": {
              "apy": {
                "default": 0,
                "title": "Apy",
                "type": "number"
              },
              "apy_base": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Apy Base"
              },
              "apy_reward": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Apy Reward"
              },
              "apy_mean_30d": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Apy Mean 30D"
              },
              "reward_share_pct": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ],
                "default": null,
                "title": "Reward Share Pct"
              },
              "is_spiking": {
                "default": false,
                "title": "Is Spiking",
                "type": "boolean"
              }
            },
            "title": "YieldSummary",
            "type": "object"
          }
        },
        "properties": {
          "pool_id": {
            "title": "Pool Id",
            "type": "string"
          },
          "project": {
            "default": "",
            "title": "Project",
            "type": "string"
          },
          "symbol": {
            "default": "",
            "title": "Symbol",
            "type": "string"
          },
          "chain": {
            "default": "",
            "title": "Chain",
            "type": "string"
          },
          "verdict": {
            "enum": [
              "sustainable",
              "caution",
              "unsustainable",
              "insufficient_data"
            ],
            "title": "Verdict",
            "type": "string"
          },
          "sustainability_reason": {
            "title": "Sustainability Reason",
            "type": "string"
          },
          "risk_factors": {
            "items": {
              "$ref": "#/$defs/RiskFactor"
            },
            "title": "Risk Factors",
            "type": "array"
          },
          "yield_summary": {
            "$ref": "#/$defs/YieldSummary"
          },
          "liquidity_summary": {
            "$ref": "#/$defs/LiquiditySummary"
          },
          "partial_errors": {
            "items": {
              "type": "string"
            },
            "title": "Partial Errors",
            "type": "array"
          },
          "data_complete": {
            "default": true,
            "title": "Data Complete",
            "type": "boolean"
          },
          "provenance": {
            "$ref": "#/$defs/DataProvenance"
          },
          "as_of": {
            "title": "As Of",
            "type": "string"
          }
        },
        "required": [
          "pool_id",
          "verdict",
          "sustainability_reason",
          "provenance",
          "as_of"
        ],
        "title": "ValidateOpportunityOutput",
        "type": "object"
      }
    }
  ],
  "authentication": {
    "required": true,
    "scheme": "bearer",
    "type": "jwt",
    "token_endpoint": "/token"
  },
  "securitySchemes": {
    "bearer_jwt": {
      "httpAuthSecurityScheme": {
        "description": "JWT bearer token issued by Teardrop.",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    }
  },
  "security": [
    {
      "bearer_jwt": []
    }
  ],
  "securityRequirements": [
    {
      "bearer_jwt": []
    }
  ],
  "iconUrl": "https://teardrop.dev/teardrop.png"
}