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.
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.
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 ▴
Activity (audit trail)
last 24h · 0 invocations Public aggregate · no PII recordedNothing 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 toagent-card.json
| Captured | Hash | Snapshot |
|---|---|---|
| 2026-10-15 20:18:54 current | 8062f80accfe… |
view → |
Endpoints
| Agent card | https://teardrop.dev/.well-known/agent-card.json |
| Provider | https://api.teardrop.dev |
| Docs | https://api.teardrop.dev/docs |
Skills · 8 declared · mapped to canonical taxonomy
Break complex tasks into actionable steps.
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…
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…
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…
Find opt-in remote A2A agents, published tool capabilities, endpoints, and public reputation status.
Return a decision-ready yield-opportunity verdict before capital is deployed. The result branches to sustainable, caution, unsustainable, or insufficient_data a…
Declarative UI component generation (table, form, text, button, etc.).
Register an authenticated event subscription that starts a bounded agent task and returns an A2A task ID for polling.
Health · last 1 probes
Cheaper or better alternatives per-skill
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
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.
Markdown / HTML snippets
[](https://agenstry.com/agents/teardrop.dev) [](https://agenstry.com/agents/teardrop.dev) [](https://agenstry.com/agents/teardrop.dev) [](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.
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"
}