glim.sh
by glim.sh · remote · no sign-in to list tools · v1.0.0 · published by sh.glim
Give your agent live data from Twitter, Reddit, the web and GitHub. No API keys, no scraping stack.
14 tools: 1 change things and 13 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads13Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http glim https://glim.sh/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnglim_detect_ai
The description names a tool "humanizer" that this server does not list.
What this check looks forMatched text
description: "...ags (AI output run through paraphrasing/'humanizer' tools). Use it to verify whether content (com..."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
14 tools
Changes things 1Claude Code: ask
glim_detect_aiDetect AI-generated text.Reads text others write1 finding
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Warn
The description names a tool "humanizer" that this server does not list.
What this check looks forMatched text
description: "...ags (AI output run through paraphrasing/'humanizer' tools). Use it to verify whether content (com..."
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Only reads 13Claude Code: allow, ask for 1 outbound
glim_amazon_getFetch 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 an…Reads text others writeNo findings
Why it is in this group
- The name "glim_amazon_get" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe description's first sentence says "fetch" and "url": it reads web pages, which anyone can write.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
glim_amazon_searchPass exactly ONE of {query} or {category_slug}.Reads text others writeNo findings
Why it is in this group
- The name "glim_amazon_search" says "search": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
glim_github_getFetch GitHub data from a single ref.Reads text others writeNo findings
Why it is in this group
- The name "glim_github_get" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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).
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
glim_github_searchSearch GitHub repositories, conversations (issues+PRs), discussions, or code, with full GitHub search syntax in the query: qualifiers (repo:, org:/user:, language:, path:, symbol:,…Reads private dataReads text others writeNo findings
Why it is in this group
- The name "glim_github_search" says "search": a word for reading.
What it can reach
- private-dataThe description's first sentence says "search" and "repository": it reads repositories.
- private-dataThe input names a repo (input.repo), and the tool reads: it reads repositories.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe description's first sentence says "search" and "conversation": it reads messages, which other people can write.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
glim_reddit_getFetch a Reddit post, subreddit, or user by ref.Reads text others writeNo findings
Why it is in this group
- The name "glim_reddit_get" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe description's first sentence says "fetch" and "post": it reads posts, which other people can write.
Description, as the server wrote it Fetch a Reddit post, subreddit, or user by ref. Posts return comments; subreddits and users return profile metadata plus recent activity.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
glim_reddit_searchSearch Reddit posts.Reads text others writeNo findings
Why it is in this group
- The name "glim_reddit_search" says "search": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe description's first sentence says "search" and "post": it reads posts, which other people can write.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
glim_telegram_getFetch a public Telegram channel or post - no account or API key involved.Reads text others writeNo findings
Why it is in this group
- The name "glim_telegram_get" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe description's first sentence says "fetch" and "post": it reads posts, which other people can write.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
glim_telegram_searchSearch Telegram: discovers public channels by name/topic (directory lookup) and finds indexed public post/channel pages (semantic web index scoped to t.me).Reads private dataReads text others writeNo findings
Why it is in this group
- The name "glim_telegram_search" says "search": a word for reading.
What it can reach
- private-dataThe description's first sentence says "search" and "directory": it reads files.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe description's first sentence says "search" and "post": it reads posts, which other people can write.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
glim_twitter_getFetch a tweet or a user from one reference.Reads text others writeNo findings
Why it is in this group
- The name "glim_twitter_get" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe description's first sentence says "fetch" and "tweet": it reads posts, which other people can write.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
glim_twitter_searchSearch Twitter/X.Reads text others writeNo findings
Why it is in this group
- The name "glim_twitter_search" says "search": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
glim_web_fetchFetch a single web page and extract clean content.Reads text others writeCan send data outNo findings
Why it is in this group
- The name "glim_web_fetch" says "fetch": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe name "glim_web_fetch" says "fetch" and "web": it reads web pages, which anyone can write.
- untrusted-inputThe description's first sentence says "fetch" and "web": it reads web pages, which anyone can write.
- untrusted-inputThe input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
Claude Code: ask, because it is tagged outbound.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
glim_web_searchSemantic web search powered by Exa.Reads text others writeNo findings
Why it is in this group
- The name "glim_web_search" says "search": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe name "glim_web_search" says "search" and "web": it reads web pages, which anyone can write.
- untrusted-inputThe description's first sentence says "web": it reads web pages, which anyone can write.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
glim_youtube_getFetch a YouTube video transcript from a video URL or 11-char id.Reads text others writeNo findings
Why it is in this group
- The name "glim_youtube_get" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- untrusted-inputThe description's first sentence says "fetch" and "url": it reads web pages, which anyone can write.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
28 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 1 outbound tool breaks every one.
- Reads private data2
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write14
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out1
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__glim__glim_web_fetch"
]
}
}Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Remote posture
What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.
Looked at Oct 22, 2026, 15:13 UTC, unchanged since Oct 22, 2026. No credentials were sent and no tool was called. What is looked at.
- Reachable
- yes
- HTTP status of an anonymous initialize
- 200
- tools/list served without credentials
- yes
- Tools that change things, listed without credentials
- 1
- Protocol version
- 2025-06-18
- WWW-Authenticate on 401
- not observed
- resource_metadata in WWW-Authenticate
- none
- RFC 9728 protected resource metadata
- https://glim.sh/.well-known/oauth-protected-resource/mcp
- Authorization servers
- https://glim.sh/api/auth
- Legacy HTTP+SSE transport
- no
- Dynamic client registration
- yes
- Client ID metadata documents
- no
- WarnThe whole server
The endpoint served tools/list without credentials, and the list has 1 tool that changes things (1 write). Whether a call also works without credentials was not tested: tools are never called.
What this check looks forMatched text
https://glim.sh/mcp: tools/list returned 14 tools to an anonymous client, including glim_detect_ai (write)
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http glim https://glim.sh/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__glim__glim_twitter_search",
"mcp__glim__glim_twitter_get",
"mcp__glim__glim_reddit_search",
"mcp__glim__glim_reddit_get",
"mcp__glim__glim_web_search",
"mcp__glim__glim_github_search",
"mcp__glim__glim_github_get",
"mcp__glim__glim_amazon_search",
"mcp__glim__glim_amazon_get",
"mcp__glim__glim_youtube_get",
"mcp__glim__glim_telegram_search",
"mcp__glim__glim_telegram_get"
],
"ask": [
"mcp__glim__glim_web_fetch",
"mcp__glim__glim_detect_ai"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as glim. Review it before you use it.
Capability tags behind 14 rules
- mcp__glim__glim_twitter_search untrusted-input
- mcp__glim__glim_twitter_get untrusted-input
- mcp__glim__glim_reddit_search untrusted-input
- mcp__glim__glim_reddit_get untrusted-input
- mcp__glim__glim_web_search untrusted-input
- mcp__glim__glim_web_fetch untrusted-input, outbound
- mcp__glim__glim_github_search private-data, untrusted-input
- mcp__glim__glim_github_get untrusted-input
- mcp__glim__glim_amazon_search untrusted-input
- mcp__glim__glim_amazon_get untrusted-input
- mcp__glim__glim_youtube_get untrusted-input
- mcp__glim__glim_detect_ai untrusted-input
- mcp__glim__glim_telegram_search private-data, untrusted-input
- mcp__glim__glim_telegram_get untrusted-input