{"server":"sh.glim/glim","count":14,"tools":[{"name":"glim_amazon_get","title":"Amazon Product","description":"Fetch Amazon product detail from a full product URL (the marketplace - com|co.uk|de|fr|es|it - is read from the URL host; pass the url field from a glim_amazon_search result, or any /dp/<ASIN> page URL). Returns title, buybox price (gross + VAT-excluded net), stock, delivery estimate, rating, top reviews, and an 'other sellers' summary (count + floor price). Text mode (default) returns a compact view with offers_summary {buybox, lowest_new, lowest_used} - pass format='json' for full structured data incl. the offers[] listing and images.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["ref"],"properties":{"ref":{"type":"string","minLength":1,"description":"Full Amazon product URL - pass the `url` from a glim_amazon_search result, or any /dp/<ASIN> product page URL. The URL carries the marketplace (amazon.de, amazon.co.uk, ...), so no separate region is needed; tracking junk in the URL is ignored. A bare ASIN is rejected: it is ambiguous across marketplaces."},"format":{"enum":["text","json"],"type":"string","default":"text","description":"Output format. 'text' (default): compact human-readable view, fewer tokens. 'json': the same product as machine-readable JSON, plus the fields text omits: the full `offers[]` list (text summarizes it), `images[]`, and variation/other-seller detail."}}},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T23:22:42.323Z"},{"name":"glim_amazon_search","title":"Amazon Search","description":"Pass exactly ONE of {query} or {category_slug}. Searches Amazon (com|co.uk|de|fr|es|it) and returns ranked hits with buybox price (gross + VAT-excluded net), ratings, review counts, and ASINs. Drill down with glim_amazon_get(ref). Set sort_by='most_reviewed' (with min_reviews to filter junk) for a trust-weighted re-rank within the current page. Compact text by default; pass format='json' for full structured data.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"tld":{"enum":["com","co.uk","de","fr","es","it"],"type":"string","default":"com","description":"Amazon marketplace: com | co.uk | de | fr | es | it"},"page":{"type":"integer","default":1,"maximum":20,"minimum":1,"description":"Page number (1-20)"},"query":{"type":"string","description":"Free-text keyword query (mutually exclusive with category_slug)"},"format":{"enum":["text","json"],"type":"string","default":"text","description":"Output format. 'text' (default): compact human-readable view, fewer tokens. 'json': the same hits as machine-readable JSON. Text already carries every field except `image_url`, which only json returns."},"sort_by":{"enum":["most_recent","price_low_to_high","price_high_to_low","featured","average_review","bestsellers","most_reviewed"],"type":"string","description":"Server-side sort, except 'most_reviewed' which re-ranks the current page client-side by review count desc (rating tiebreaker). Pair 'most_reviewed' with min_reviews to skip thinly-reviewed items."},"min_reviews":{"type":"integer","maximum":9007199254740991,"minimum":0,"description":"Drop hits with fewer than N reviews. Pair with sort_by='most_reviewed' for a trust-weighted result. Applied client-side to organic/paid/suggested."},"include_paid":{"type":"boolean","default":false,"description":"Include sponsored ad results (default: dropped)"},"category_slug":{"type":"string","description":"Amazon bestsellers category slug, e.g. 'electronics' (.com), 'elektronik' (.de), 'electronique' (.fr). Invalid slugs return 'not_found' - retry with a correct slug."},"include_suggested":{"type":"boolean","default":false,"description":"Include 'people also searched for' suggestions (default: dropped)"}}},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T23:22:42.323Z"},{"name":"glim_detect_ai","title":"AI Detection","description":"Detect AI-generated text. Scores any text for AI-authorship likelihood and returns an overall verdict (AI / human / mixed) with confidence, the AI/human/AI-assisted fractions, and a segment-by-segment breakdown showing exactly which parts read as AI-written - including per-segment humanizer flags (AI output run through paraphrasing/'humanizer' tools). Use it to verify whether content (comments, articles, profiles) is AI-generated, or to check text before publishing to see which segments would trip AI detectors - revise the flagged segments and re-check. Cost scales with text length: $0.06 per 100 words, rounded up, minimum $0.06. Max input 20,000 characters.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["text"],"properties":{"text":{"type":"string","minLength":50,"description":"Text to analyze, plain text, 50+ characters, max 20,000. Detection reliability improves with length; very short texts return lower-confidence verdicts."},"format":{"enum":["text","json"],"type":"string","default":"text","description":"'text' (default): compact human-readable report. 'json': structured data incl. per-segment text, scores, and humanizer flags."}}},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T23:22:42.323Z"},{"name":"glim_github_get","title":"GitHub Get","description":"Fetch GitHub data from a single ref. GitHub URL or 'owner/repo' shorthand. A repo URL or owner/repo returns metadata + README; /pull/N -> PR (with comments + changed files), /issues/N -> issue, /discussions/N -> discussion (with threaded replies), /blob/<ref>/<path> -> file (raw.githubusercontent.com URLs work too), /tree/<ref>[/<path>] -> file tree (optionally scoped to a subdirectory), /commit/<sha> -> one commit with diff, /commits[/<ref>/<path>] -> history (optionally for one file), /branches, /releases (or /releases/tag/<tag> | /releases/latest -> one release), /topics/<name> -> top repos with that topic (by stars).","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["ref"],"properties":{"ref":{"type":"string","maxLength":2048,"minLength":1,"description":"GitHub URL or 'owner/repo' shorthand. A repo URL or owner/repo returns metadata + README; /pull/N -> PR (with comments + changed files), /issues/N -> issue, /discussions/N -> discussion (with threaded replies), /blob/<ref>/<path> -> file (raw.githubusercontent.com URLs work too), /tree/<ref>[/<path>] -> file tree (optionally scoped to a subdirectory), /commit/<sha> -> one commit with diff, /commits[/<ref>/<path>] -> history (optionally for one file), /branches, /releases (or /releases/tag/<tag> | /releases/latest -> one release), /topics/<name> -> top repos with that topic (by stars)."},"page":{"type":"integer","default":1,"maximum":100,"minimum":1,"description":"Page number"},"format":{"enum":["text","json"],"type":"string","default":"text","description":"Output encoding. 'text' (default): compact human-readable text, fewer tokens (file returns raw content). 'json': machine-readable JSON."},"per_page":{"type":"integer","default":30,"maximum":100,"minimum":1,"description":"Results per page"}}},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T23:22:42.323Z"},{"name":"glim_github_search","title":"GitHub Search","description":"Search GitHub repositories, conversations (issues+PRs), discussions, or code, with full GitHub search syntax in the query: qualifiers (repo:, org:/user:, language:, path:, symbol:, content:, is:, stars:, label:, sort:stars), boolean AND/OR/NOT with parentheses, \"exact strings\", and /regex/. kind='repos': MINIMAL distinctive keywords - the project/library name only ('rtk', 'react query'); every extra word must ALL match and buries the canonical repo - filter with qualifiers, not prose. kind='code': ONE literal code pattern as it appears in files ('useState('), an \"exact string\", a /regex/, or symbol:name to find definitions, across 2.8M+ public repos; narrow with repo:/language:/path:. Not supported in code search: license:, enterprise:, is:vendored, is:generated. kind='conversations': returns compact previews - use glim_github_get for full content; sort: REPLACES relevance ranking (words match anywhere incl. comments), omit it for best matches. kind='discussions': GitHub Discussions, a SEPARATE index from issues/PRs - a question answered there never appears under conversations, so reach for it when a repo does its Q&A in Discussions; supports repo:/org:/author:/is:answered plus category: (the repo's own category name, needs a repo: scope), up to 10 results per page, no sort:. Set repo='owner/name' to scope to one repository (works with any kind; with repos it routes to conversations). kind is optional - inferred from the query (is:answered/category: -> discussions, is:/label: -> conversations, path:/symbol://regex/ -> code, stars:/topic: -> repos, else repos); a conversations search with no matches is retried as discussions and says so. Returns compact text by default; pass format='json' for full structured data.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"kind":{"enum":["repos","conversations","code","discussions"],"type":"string","description":"What to search: 'repos', 'conversations' (issues+PRs), 'discussions' (GitHub Discussions - a separate index from issues/PRs), or 'code' (literal/regex/symbol search across 2.8M+ public GitHub repos). Optional - inferred from the query: is:answered/category: implies discussions, is:/label:/author: implies conversations, path:/symbol:/content://regex/ implies code, stars:/topic:/in:readme implies repos, otherwise repos. type:code / type:repos / type:discussions in the query also works. A conversations search that matches nothing is retried as discussions, so an answer that lives in Discussions is not silently missed."},"page":{"type":"integer","default":1,"maximum":10,"minimum":1,"description":"Page number"},"repo":{"type":"string","description":"Scope to one repository. Accepts 'owner/name', a github.com URL, or a partial 'owner/' (code). Works with any kind; setting it with kind=repos routes the search to conversations, since repo-name search can't scope to one repo. Equivalent to a repo: qualifier in the query (if both are given they must match)."},"query":{"type":"string","description":"Search query in full GitHub search syntax: qualifiers (repo:owner/name, org:/user:, language:, path: with globs, symbol:, content:, is:, stars:>N, label:, sort:stars), boolean AND/OR/NOT with parentheses, \"exact strings\", and /regex/. kind=repos: minimal distinctive keywords - the project/library name (GOOD: 'rtk', 'react query'; BAD: 'rtk rust token killer' - every extra word must ALL match and buries the real repo; filter with qualifiers, not prose). kind=code: ONE literal code pattern as it appears in files ('useState('), an \"exact string\", a /regex/, or symbol:name for definitions; narrow with repo:/language:/path:, not extra words. kind=conversations: keywords plus filters (is:issue, label:bug). kind=discussions: keywords plus repo:/org:/author:/is:answered/category: - a separate GitHub index from issues/PRs, so a thread that lives in Discussions is invisible to kind=conversations (and vice versa). category: matches the repo's own category name (Ideas, Q&A) and needs a repo: scope; sort: does not apply. Caution: sort: REPLACES relevance ranking (sort:reactions = most-popular thread mentioning the words anywhere, incl. comments) - omit sort: for best-match. Not supported in code search: license:, enterprise:, is:vendored, is:generated."},"format":{"enum":["text","json"],"type":"string","default":"text","description":"Output format. 'text' (default): compact human-readable previews, fewer tokens. 'json': full structured data for machine parsing."},"per_page":{"type":"integer","default":20,"maximum":30,"minimum":1,"description":"Results per page"}}},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T23:22:42.323Z"},{"name":"glim_reddit_get","title":"Reddit Get","description":"Fetch a Reddit post, subreddit, or user by ref. Posts return comments; subreddits and users return profile metadata plus recent activity.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["ref"],"properties":{"ref":{"type":"string","description":"Post ID or URL, subreddit ref (r/programming or reddit.com/r/programming), or user ref (u/spez or reddit.com/user/spez)"},"sort":{"enum":["hot","new","top","rising"],"type":"string","default":"hot","description":"Listing post sort"},"time":{"enum":["hour","day","week","month","year","all"],"type":"string","default":"day","description":"Listing time range"},"limit":{"type":"integer","default":10,"maximum":10,"minimum":1,"description":"Max subreddit posts (1-10), each with full content + top comments"},"cursor":{"type":"string","pattern":"^\\s*(?:[tT]\\d_)?[a-zA-Z0-9]+\\s*$","maxLength":64,"description":"Pagination cursor from a prior subreddit response's next_cursor"},"format":{"enum":["text","json"],"type":"string","default":"text","description":"Output format. 'text' (default): compact human-readable view, fewer tokens. 'json': full structured data for machine parsing."},"comment_sort":{"enum":["confidence","top","new","controversial","old","qa"],"type":"string","default":"confidence","description":"Comment sort. Post refs only: subreddit/user listings always hydrate a fixed 2 top-level comments sorted by top."},"comment_depth":{"type":"integer","default":5,"maximum":10,"minimum":0,"description":"Max nesting depth (post refs only)"},"comment_limit":{"type":"integer","default":50,"maximum":200,"minimum":0,"description":"Max comments (post refs only)"},"include_posts":{"type":"boolean","default":true,"description":"Include recent posts for user refs"},"include_comments":{"type":"boolean","default":false,"description":"Include recent comments for user refs"}}},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T23:22:42.323Z"},{"name":"glim_reddit_search","title":"Reddit Search","description":"Search Reddit posts. Each result comes with full post content and its top comments, so a single search usually answers the question without follow-up. Compact human-readable text by default; pass format='json' for full structured data. Use glim_reddit_get(ref) for a single post's complete comment tree. Page with cursor (response gives next_cursor when more exist). See docs://reddit-search.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"sort":{"enum":["relevance","hot","top","new","comments"],"type":"string","default":"relevance","description":"Sort order. Keep 'relevance' (default) for question or topic queries - it ranks by how well posts match your query. 'top'/'hot' rank by score/recency and largely ignore the query text, so use them only to browse what's popular in a subreddit."},"time":{"enum":["hour","day","week","month","year","all"],"type":"string","default":"all","description":"Time range"},"limit":{"type":"integer","default":10,"maximum":10,"minimum":1,"description":"Max posts (1-10), each with full content + top comments"},"query":{"type":"string","description":"Search query (e.g. 'subreddit:programming machine learning')"},"cursor":{"type":"string","pattern":"^\\s*(?:[tT]\\d_)?[a-zA-Z0-9]+\\s*$","maxLength":64,"description":"Pagination cursor from a prior response's next_cursor"},"format":{"enum":["text","json"],"type":"string","default":"text","description":"Output format. 'text' (default): compact human-readable view, fewer tokens. 'json': full structured data for machine parsing."},"end_date":{"type":"string","description":"Only posts before this date (YYYY-MM-DD)"},"start_date":{"type":"string","description":"Only posts on or after this date (YYYY-MM-DD)"}}},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T23:22:42.323Z"},{"name":"glim_telegram_get","title":"Telegram Get","description":"Fetch a public Telegram channel or post - no account or API key involved. Channel refs (@handle, handle, t.me URL) return channel info + recent posts newest-first with views, reactions, media, polls, and link previews; pass query to search within the channel's full history, and page older posts with before=<next_cursor>. Post refs (t.me/<channel>/<id>) return that post plus its most recent discussion comments. Media URLs are Telegram CDN links that expire within hours - fetch promptly, never store. Only channels with a public web preview work (most public channels); private channels and groups are not accessible.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["ref"],"properties":{"ref":{"type":"string","description":"Public channel (@handle, handle, or t.me/<channel> URL) or post (t.me/<channel>/<id> or '<channel>/<id>')"},"after":{"type":"string","description":"Return posts newer than this message id"},"limit":{"type":"integer","default":20,"maximum":100,"minimum":1,"description":"Max posts for channel refs (1-100)"},"query":{"type":"string","description":"Search within the channel's full history (channel refs only)"},"before":{"type":"string","description":"Return posts older than this message id (from next_cursor)"},"format":{"enum":["text","json"],"type":"string","default":"text","description":"Output format. 'text' (default): compact human-readable view, fewer tokens. 'json': full structured data for machine parsing."},"comment":{"type":"string","description":"Post refs: center the comment window on this comment id"},"include_comments":{"type":"boolean","default":true,"description":"Post refs: include discussion comments (Telegram serves a small window of the most recent; walk older ones via comment=<oldest returned id>)"}}},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T23:22:42.323Z"},{"name":"glim_telegram_search","title":"Telegram Search","description":"Search Telegram: discovers public channels by name/topic (directory lookup) and finds indexed public post/channel pages (semantic web index scoped to t.me). Telegram has no global full-text search, so treat results as discovery: find the right channel here, then use glim_telegram_get(ref=<handle>) for its live posts or glim_telegram_get(ref, query=...) to search within that channel's full history.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"kind":{"enum":["all","channels","posts"],"type":"string","default":"all","description":"'channels': channel directory lookup. 'posts': indexed t.me post pages. 'all' (default): both."},"query":{"type":"string","description":"Search query (topic, channel name, keyword)"},"format":{"enum":["text","json"],"type":"string","default":"text","description":"Output format. 'text' (default): compact human-readable view, fewer tokens. 'json': full structured data for machine parsing."}}},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T23:22:42.323Z"},{"name":"glim_twitter_get","title":"Fetch Tweet or User","description":"Fetch a tweet or a user from one reference. A tweet URL (incl. handle-less /i/status/<id>) returns the tweet with full thread context, parent, and optional replies/quotes; a profile URL (https://x.com/<handle>) returns the user with recent tweets. Prefer full URLs - if you only have a numeric id, pass it as a quoted string. Returns a compact human-readable view by default; pass format='json' for full structured data.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["ref"],"properties":{"ref":{"type":"string","description":"Tweet URL or profile URL. A tweet URL (incl. /i/status/<id>) returns the tweet + thread; a profile URL (https://x.com/<handle>) returns the user + recent tweets. Prefer full URLs - if you only have a numeric id, pass it as a quoted string."},"cursor":{"type":"string","description":"Profile refs only: pagination cursor from next_cursor"},"format":{"enum":["text","json"],"type":"string","default":"text","description":"Output format. 'text' (default): compact human-readable view, fewer tokens. 'json': full structured data for machine parsing."},"include":{"type":"array","items":{"enum":["replies","quotes"],"type":"string"},"description":"Tweet refs only: also fetch 'replies' and/or 'quotes'"},"expand_urls":{"type":"boolean","default":false,"description":"When true, auto-crawl entity URLs and attach crawled_content to tweets. Off by default: responses can grow by up to 4KB per expanded URL. Use glim_web_fetch(url) for targeted crawls instead."},"include_replies":{"type":"boolean","default":false,"description":"Profile refs only: include replies in the timeline"},"include_mentions":{"type":"boolean","default":false,"description":"Profile refs only: include the mentions timeline"}}},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T23:22:42.323Z"},{"name":"glim_twitter_search","title":"Twitter Search","description":"Search Twitter/X. Returns a compact human-readable list by default; pass format='json' for full structured data. Use glim_twitter_get(ref) for full thread context. Use docs://search-operators for reference.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"sort":{"enum":["latest","top"],"type":"string","description":"Sort by relevance or recency: \"top\" (most engaged tweets matching the query - best for \"what's the conversation about X\") or \"latest\" (newest first - best for monitoring/recency). Default: \"top\"."},"query":{"type":"string","description":"Search query with operators (e.g. 'from:elonmusk AI min_faves:100 within_time:7d')"},"cursor":{"type":"string","description":"Pagination cursor from previous search. Ranking is strongest on page 1 - paged results under sort:'top' trend toward recency (upstream behavior)."},"format":{"enum":["text","json"],"type":"string","default":"text","description":"Output format. 'text' (default): compact human-readable view, fewer tokens. 'json': full structured data for machine parsing."},"end_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:?\\d{2}))?$","description":"Only tweets before this time. YYYY-MM-DD (inclusive through end of day UTC) or ISO 8601 datetime with Z/offset (e.g. 2026-04-13T14:30:00Z)"},"start_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?(Z|[+-]\\d{2}:?\\d{2}))?$","description":"Only tweets on or after this time. YYYY-MM-DD (UTC midnight) or ISO 8601 datetime with Z/offset (e.g. 2026-04-13T14:30:00Z)"},"expand_urls":{"type":"boolean","default":false,"description":"When true, auto-crawl entity URLs and attach crawled_content to tweets. Off by default: responses can grow by up to 4KB per expanded URL. Use glim_web_fetch(url) for targeted crawls instead."}}},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T23:22:42.323Z"},{"name":"glim_web_fetch","title":"Web Fetch","description":"Fetch a single web page and extract clean content. Auto-tier server-side: handles SSR (Next.js, Nuxt, TikTok, Pinterest, YouTube), SPA shells, PDFs, paywall detection, residential-proxy escalation, and stealth profiles for TikTok / Instagram / Pinterest / YouTube. Returns clean markdown (default) with a YAML frontmatter header (url, outcome, total_chars). Read 'outcome' to classify the result (success | teaser | thin_content | paywall | bot_challenge | consent_wall | login_wall | rate_limited | timeout | transient_upstream | unsupported_target | not_found | error). Large pages (>80k chars) are truncated inline with truncated_chars + a download_full_url to the complete extraction (expires ~1h). Permanently unsupported (outcome=unsupported_target, cost=0 upstream): Bluesky search, Instagram post/reel and tag/explore pages (profiles work), Pinterest search, g2.com, Truth Social, Xiaohongshu. Threads and Instagram profile pages ARE supported.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["url"],"properties":{"url":{"type":"string","description":"URL to fetch"},"format":{"enum":["markdown","html","json"],"type":"string","default":"markdown","description":"Output format. 'markdown' (default) clean article text; 'html' raw cleaned HTML; 'json' the structured SSR blob (TikTok / Pinterest / YouTube) instead of article text."},"selector":{"type":"string","description":"CSS selector to scope the result. An anchor-id selector (e.g. a docs anchor like '#usage') that lands on a heading expands to its whole section; other selectors return the matched elements themselves."}}},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T23:22:42.323Z"},{"name":"glim_web_search","title":"Web Search","description":"Semantic web search powered by Exa. Returns titles, URLs, and the top query-relevant excerpt per result. Compact text by default; pass format='json' for full structured data incl. all excerpts per result. Use glim_web_fetch(url) for full page content. Matching is semantic, so a query with no real match still returns ten nearest-neighbour results rather than zero - judge relevance from the excerpts, not from the result count.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"query":{"type":"string","description":"Search query"},"format":{"enum":["text","json"],"type":"string","default":"text","description":"Output format. 'text' (default): compact human-readable list, fewer tokens. 'json': the same results as structured data (title, url, snippet, score, published_date, author)."},"exclude_domains":{"type":"array","items":{"type":"string"},"description":"Exclude results from these domains. Useful for filtering noisy aggregators or SEO farms when you've seen them dominate results (e.g. ['pinterest.com', 'quora.com'])."},"include_domains":{"type":"array","items":{"type":"string"},"description":"Restrict results to these domains (e.g. ['arxiv.org'])"},"published_within_days":{"type":"integer","maximum":3650,"minimum":1,"description":"Restrict to results published within the last N days. Skip this for broad queries - it excludes pages without publish-date metadata. Common values: 1, 7, 30, 365."}}},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T23:22:42.323Z"},{"name":"glim_youtube_get","title":"YouTube Transcript","description":"Fetch a YouTube video transcript from a video URL or 11-char id. The transcript is cleaned server-side: deduplicated, tags/HTML stripped, with coarse [m:ss] timestamps - roughly a tenth the size of the raw captions. Default format='text' returns it inline (when it fits ~40K chars / ~10K tokens) so a single call gives you the text directly; long-form videos fall back to a download_url note. Pass format='json' for the same transcript plus transcript metadata (video_id, canonical url, language, origin, size) and a presigned download_url - for batch/programmatic use. Default origin='uploader_provided' (human captions); falls back to 'auto_generated' automatically if missing (counts as 2 upstream calls). Cached 7 days server-side.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["ref"],"properties":{"ref":{"type":"string","minLength":1,"description":"YouTube video URL or 11-char video id (e.g. https://youtu.be/dQw4w9WgXcQ, https://www.youtube.com/watch?v=dQw4w9WgXcQ, or dQw4w9WgXcQ)"},"format":{"enum":["text","json"],"type":"string","default":"text","description":"Output format. 'text' (default): the cleaned transcript inline as plain text (omitted with a download_url note when it exceeds the ~40K-char inline cap). 'json': the same cleaned transcript plus transcript metadata (video_id, canonical url, language, origin, size) and a presigned download_url - for batch/programmatic use. Both formats return the identical cleaned, deduplicated transcript."},"origin":{"enum":["uploader_provided","auto_generated"],"type":"string","default":"uploader_provided","description":"'uploader_provided' for human captions (default), 'auto_generated' for YouTube auto-captions."},"language_code":{"type":"string","default":"en","maxLength":10,"minLength":2,"description":"ISO 639-1 language code (e.g. 'en', 'de', 'fr')"}}},"output_schema":null,"annotations":{"readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-09T23:22:42.323Z"}],"next_cursor":null,"next_actions":[{"action":"get_connection","description":"Connection block to call these tools","href":"/v1/servers/sh.glim%2Fglim/connection?target=mcpServers","arguments":{"name":"sh.glim/glim","target":"mcpServers"}},{"action":"get_server","description":"Full descriptor with trust and connectability","href":"/v1/servers/sh.glim%2Fglim","arguments":{"name":"sh.glim/glim"}}]}