XTOOLS / registry.py
1990two's picture
Upload registry.py
4660d07 verified
Raw History Blame Contribute Delete
14.2 kB
"""
Central registry for every tool exposed by this Space.
Each entry describes:
name -- matches the module name in tools/ and the route /tools/{name}
category -- for grouping in docs / a future UI
auth -- "none" | "key" | "cookie" | "oauth" | "account_pool"
tool_keys -- the `tool` value to look up in Supabase tool_keys (None if auth == "none")
params -- list of {name, type, required, default, description}
app.py uses this to validate incoming requests before dispatching to the
matching tools/<name>.py's run(params) function, and to auto-generate a
/registry endpoint agents can introspect.
"""
TOOLS = [
# ---------- Free APIs ----------
{
"name": "google_trends",
"category": "free_apis",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "geo", "type": "str", "required": False, "default": "US"},
{"name": "days_back", "type": "int", "required": False, "default": 1},
],
},
{
"name": "kalshi",
"category": "free_apis",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "status", "type": "str", "required": False, "default": "open"},
{"name": "title_contains", "type": "str", "required": False, "default": None},
{"name": "event_ticker", "type": "str", "required": False, "default": None},
{"name": "limit", "type": "int", "required": False, "default": 100},
],
},
{
"name": "polymarket",
"category": "free_apis",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "query", "type": "str", "required": False, "default": None},
{"name": "active", "type": "bool", "required": False, "default": True},
{"name": "sort_by", "type": "str", "required": False, "default": "volume_24hr"},
{"name": "limit", "type": "int", "required": False, "default": 50},
],
},
# ---------- Scrapers ----------
{
"name": "youtube_email_scraper",
"category": "scrapers",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "mode", "type": "str", "required": True, "default": None, "description": "'urls' or 'keyword'"},
{"name": "channels", "type": "list", "required": False, "default": None},
{"name": "keyword", "type": "str", "required": False, "default": None},
{"name": "max_results", "type": "int", "required": False, "default": 20},
],
},
{
"name": "walmart_scraper",
"category": "scrapers",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "keyword", "type": "str", "required": True, "default": None},
{"name": "sort", "type": "str", "required": False, "default": "best_match"},
{"name": "max_results", "type": "int", "required": False, "default": 25},
],
},
{
"name": "amazon_scraper",
"category": "scrapers",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "keyword", "type": "str", "required": True, "default": None},
{"name": "country", "type": "str", "required": False, "default": "US"},
{"name": "max_results", "type": "int", "required": False, "default": 25},
],
},
# ---------- Marketplaces ----------
{
"name": "etsy",
"category": "marketplaces",
"auth": "key",
"tool_keys": "etsy",
"params": [
{"name": "keywords", "type": "str", "required": True, "default": None},
{"name": "min_price", "type": "float", "required": False, "default": None},
{"name": "max_price", "type": "float", "required": False, "default": None},
{"name": "sort_on", "type": "str", "required": False, "default": "score"},
{"name": "limit", "type": "int", "required": False, "default": 50},
],
},
{
"name": "ebay",
"category": "marketplaces",
"auth": "key",
"tool_keys": "ebay",
"params": [
{"name": "keywords", "type": "str", "required": True, "default": None},
{"name": "sold_only", "type": "bool", "required": False, "default": False},
{"name": "condition", "type": "str", "required": False, "default": None},
{"name": "max_results", "type": "int", "required": False, "default": 25},
],
},
{
"name": "craigslist",
"category": "marketplaces",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "city", "type": "str", "required": True, "default": None, "description": "craigslist subdomain, e.g. 'phoenix'"},
{"name": "keyword", "type": "str", "required": True, "default": None},
{"name": "category", "type": "str", "required": False, "default": "sss"},
],
},
{
"name": "target",
"category": "marketplaces",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "keyword", "type": "str", "required": True, "default": None},
{"name": "sort", "type": "str", "required": False, "default": "relevance"},
{"name": "max_results", "type": "int", "required": False, "default": 25},
],
},
{
"name": "depop",
"category": "marketplaces",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "keyword", "type": "str", "required": True, "default": None},
{"name": "country", "type": "str", "required": False, "default": "us"},
{"name": "limit", "type": "int", "required": False, "default": 24},
],
},
{
"name": "poshmark",
"category": "marketplaces",
"auth": "cookie",
"tool_keys": "poshmark",
"params": [
{"name": "keyword", "type": "str", "required": True, "default": None},
{"name": "department", "type": "str", "required": False, "default": "Women"},
{"name": "sold_only", "type": "bool", "required": False, "default": False},
{"name": "count", "type": "int", "required": False, "default": 48},
],
},
{
"name": "shopify_products",
"category": "marketplaces",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "store_domain", "type": "str", "required": True, "default": None, "description": "e.g. 'examplestore.myshopify.com'"},
{"name": "max_pages", "type": "int", "required": False, "default": 5},
],
},
{
"name": "facebook_marketplace",
"category": "marketplaces",
"auth": "cookie",
"tool_keys": "facebook_marketplace",
"params": [
{"name": "city", "type": "str", "required": True, "default": None},
{"name": "keyword", "type": "str", "required": True, "default": None},
{"name": "max_results", "type": "int", "required": False, "default": 25},
],
},
{
"name": "offerup",
"category": "marketplaces",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "keyword", "type": "str", "required": True, "default": None},
{"name": "limit", "type": "int", "required": False, "default": 50},
],
},
# ---------- Social Intelligence ----------
{
"name": "twitter_twscrape",
"category": "social",
"auth": "account_pool",
"tool_keys": "twitter_twscrape",
"params": [
{"name": "query", "type": "str", "required": True, "default": None, "description": "supports X search operators"},
{"name": "limit", "type": "int", "required": False, "default": 50},
],
},
{
"name": "instagram",
"category": "social",
"auth": "none",
"tool_keys": "instagram",
"params": [
{"name": "mode", "type": "str", "required": True, "default": None, "description": "'profile' or 'hashtag'"},
{"name": "target", "type": "str", "required": True, "default": None},
{"name": "max_posts", "type": "int", "required": False, "default": 20},
],
},
{
"name": "tiktok",
"category": "social",
"auth": "oauth",
"tool_keys": "tiktok",
"params": [
{"name": "keyword", "type": "str", "required": True, "default": None},
{"name": "start_date", "type": "str", "required": True, "default": None, "description": "YYYYMMDD"},
{"name": "end_date", "type": "str", "required": True, "default": None, "description": "YYYYMMDD"},
{"name": "max_count", "type": "int", "required": False, "default": 50},
],
},
{
"name": "linkedin",
"category": "social",
"auth": "cookie",
"tool_keys": "linkedin",
"params": [
{"name": "mode", "type": "str", "required": True, "default": None, "description": "'profile' | 'people_search' | 'company'"},
{"name": "target", "type": "str", "required": True, "default": None},
{"name": "limit", "type": "int", "required": False, "default": 25},
],
},
{
"name": "reddit",
"category": "social",
"auth": "key",
"tool_keys": "reddit",
"params": [
{"name": "query", "type": "str", "required": True, "default": None},
{"name": "subreddit", "type": "str", "required": False, "default": "all"},
{"name": "sort", "type": "str", "required": False, "default": "new"},
{"name": "time_filter", "type": "str", "required": False, "default": "month"},
{"name": "limit", "type": "int", "required": False, "default": 50},
],
},
# ---------- Crypto & DeFi ----------
{
"name": "coingecko",
"category": "crypto",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "mode", "type": "str", "required": False, "default": "markets", "description": "'markets' | 'trending' | 'ohlc'"},
{"name": "coin_id", "type": "str", "required": False, "default": None},
{"name": "days", "type": "int", "required": False, "default": 30},
{"name": "per_page", "type": "int", "required": False, "default": 100},
],
},
{
"name": "binance",
"category": "crypto",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "mode", "type": "str", "required": False, "default": "ticker", "description": "'ticker' | 'klines' | 'depth'"},
{"name": "symbol", "type": "str", "required": False, "default": "BTCUSDT"},
{"name": "interval", "type": "str", "required": False, "default": "1d"},
{"name": "limit", "type": "int", "required": False, "default": 30},
],
},
{
"name": "defillama",
"category": "crypto",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "mode", "type": "str", "required": False, "default": "protocols", "description": "'protocols' | 'protocol' | 'chains' | 'stablecoins' | 'dex_volume'"},
{"name": "protocol_slug", "type": "str", "required": False, "default": None},
],
},
# ---------- News & Macro Intel ----------
{
"name": "gdelt",
"category": "news_macro",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "query", "type": "str", "required": True, "default": None},
{"name": "mode", "type": "str", "required": False, "default": "artlist", "description": "'artlist' | 'timelinevolnorm' | 'timelinetone'"},
{"name": "max_records", "type": "int", "required": False, "default": 100},
],
},
{
"name": "sec_edgar",
"category": "news_macro",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "mode", "type": "str", "required": True, "default": None, "description": "'facts' | 'filings' | 'search'"},
{"name": "cik", "type": "str", "required": False, "default": None},
{"name": "company", "type": "str", "required": False, "default": None},
{"name": "form_type", "type": "str", "required": False, "default": None},
],
},
{
"name": "fred",
"category": "news_macro",
"auth": "key",
"tool_keys": "fred",
"params": [
{"name": "series_id", "type": "str", "required": True, "default": None},
],
},
{
"name": "hackernews",
"category": "news_macro",
"auth": "none",
"tool_keys": None,
"params": [
{"name": "mode", "type": "str", "required": False, "default": "top", "description": "'top' | 'search'"},
{"name": "query", "type": "str", "required": False, "default": None},
{"name": "min_points", "type": "int", "required": False, "default": 50},
{"name": "limit", "type": "int", "required": False, "default": 30},
],
},
{
"name": "github",
"category": "news_macro",
"auth": "key",
"tool_keys": "github",
"params": [
{"name": "mode", "type": "str", "required": False, "default": "search", "description": "'search' | 'org' | 'commit_activity'"},
{"name": "query", "type": "str", "required": False, "default": None},
{"name": "org", "type": "str", "required": False, "default": None},
{"name": "owner", "type": "str", "required": False, "default": None},
{"name": "repo", "type": "str", "required": False, "default": None},
{"name": "sort", "type": "str", "required": False, "default": "stars"},
{"name": "per_page", "type": "int", "required": False, "default": 30},
],
},
]
BY_NAME = {t["name"]: t for t in TOOLS}