amenbo
amenbo ðð§
English | æ¥æ¬èª
Skims the web without making waves â a Japanese-web-native MCP server for low-impact, token-efficient web collection: outlineâsection progressive disclosure and diff-only refetches keep context small.
amenbo(ã¢ã¡ã³ã / water strider)ã¯ãClaude Code ã Codex ã®ãããªã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãåãã® MCP ãµãŒããŒã§ããæ°Žé¢ã«æ³¢ãç«ãŠãã«æ»ãè«ã®ããã«ãåéå ã«è² è·ãããããå°ãªãããŒã¯ã³ã§ Web ããæ å ±ãéããŸãããšãããæ¥æ¬èªãµã€ãã«æé©åããŠããŸããMCP ã¯ã©ã€ã¢ã³ããæããªãã·ã§ã«ç°å¢ããã¯ãåãã³ã¢ãå ±æãã CLI ãšããŠã䜿ããŸã(CLIãšããŠäœ¿ãåç §)ã
ãªã amenbo ã
æ±çšã®ã¹ã¯ã¬ã€ãã³ã°ããŒã«ã®å€ãã¯è±èªåã® Web ãåæã«äœãããŠãããæ¥æ¬èªãµã€ãã§ã¯æ¬¡ã®ãããªåãããŒããèµ·ããã¡ã§ããamenbo ã¯ãããã®èª²é¡ã«å¯Ÿå¿ããŸãã
æ§é åãçããµã€ãïŒdiv ã®å ¥ãåãããŒãã«ã¬ã€ã¢ãŠããå€ãæ¥æ¬èªãµã€ãã§ããã¬ã³ããªã³ã°çµæã®ãžãªã¡ããª(èŠãç®ã®é 眮)ããæ¬æé åãæšå®ããŸã
æååãïŒShift_JIS / EUC-JP / ISO-2022-JP ãèªåå€å¥
ãµãããªïŒ
<ruby>ã®æ¯ãä»®åãé€å»ããæ¬æã®äºéåã鲿¢ç»åã§åºãæ å ±ïŒç»ååãããæé衚ããããŒäžå¿ã®ããŒãžã¯ãããã¹ãæœåºã貧匱ãªãšãèªåã§ã¹ã¯ãªãŒã³ã·ã§ããã«åãæ¿ã
è¡šã®æ¬ èœã»åŽ©ãïŒãªã³ã¯å¯åºŠã®é«ãããŒã¿è¡š(æ¯èŒè¡šãªã©)ã¯æ¬ææœåºæã«äžžããšèœã¡ãããšããããããããè¡šãæ€åºããŠå ã®äœçœ®ãžåŸ©å ããŸããæ¬æã«æ®ã£ã衚ã colspan/rowspanã»å€æ®µããããæ£èŠåããåãºã¬ãé²ããŸã
èŠåºãã®æ¶å€±ïŒèŠåºããç·šéãªã³ã¯ä»ãã©ãããŒã«å ãŸããããŒãž(Wikiç³»ãªã©)ã§ã¯æ¬ææœåºæã«èŠåºãæ§é ãäžžããšå€±ãããããšããããæ¬æãæ®ã£ãŠããç¯ã®èŠåºããæ€åºããŠå ã®äœçœ®ãžåŸ©å ããŸã(outline / section ã®æ®µéé瀺ãå®å®)
åœå äž»èŠãµã€ãïŒQiita / Zenn / note / ã¯ãŠãªããã° / Yahoo!ãã¥ãŒã¹ / PR TIMES ã«å°çšã¢ããã¿
é¡äŒŒããŒã«(å
¬åŒ fetch MCP / Jina Reader / Playwright MCP / PixelRAG pixelshot)ãšã®å®æž¬æ¯èŒã¯ãèšäºããšãŒãžã§ã³ãã®WebååŸãããŒã«æ¬¡ç¬¬ã§ããŒã¯ã³ã5000åéã£ã話ããåç
§ããŠãã ãããããŒãã¹ãšçãã°ã¯ bench/ ã«ãããŸãã
Related MCP server: Charlotte
ããŒã¯ã³ãç¯çŽããä»çµã¿
段éé瀺ïŒ
mode: outlineã§èŠåºãããªãŒãšåç¯ã®ããŒã¯ã³éã ãå ã«è¿ããå¿ èŠãªç¯ã ãsectionæå®ã§ååŸãé·å€§ãªããŒãžãäžžããšæµã蟌ã¿ãŸããCJK 察å¿ã®æ¬æãã«ãŒãã³ã°ïŒå¥èªç¹å¯åºŠãæåçš®æ¯çããªã³ã¯å¯åºŠã§ãã/åºå/ããã¿ãŒãé€å»
å·®åå¿çïŒäžåºŠååŸãã URL ã®åååŸæã倿Žãç¡ããã°
unchangedãããã°å€æŽãããç¯ã ããè¿ããŸãèªå Markdown/ç»ååæ¿ïŒå質ã¹ã³ã¢ãäœãããŒãžã ãã¹ã¯ãªãŒã³ã·ã§ããã«ããå£ãã Markdown ãèªãŸããŠåãçŽãåŸåŸ©ãé¿ããŸã
æåçš®å¥ã®ããŒã¯ã³èŠç©ãïŒæ¥æ¬èªã»éåœèªã»ããªã«æåã»çµµæåãªã©ã¯è±èªããããŒã¯ã³å䟡ãéããããæåã¯ã©ã¹å¥ã®ä¿æ°(宿ž¬ã§æ ¡æ£)ã§ããŒãžåå²ã®äºç®ãèšç®ããŸã
åéå ãžã®äœè² è·
äºæ®µãã§ããïŒãŸãçŽ ã® HTTP GETãJS æç»ãå¿ èŠãªããŒãžã ã headless Chromium ã«ææ Œããã®ã§ã倧åã®ååŸã§ãã©ãŠã¶ãèµ·åããŸãã
ç€Œåæ£ããã¯ããŒã©ïŒrobots.txt ãš Crawl-Delay ãå°éãåäžãã¡ã€ã³ãžã¯çŽå + æ¢å® 1 req/ç§ïŒrobots.txt ã®ååŸããã®1ãªã¯ãšã¹ããšããŠæ°ããŸãïŒããªã³ã¯åæã¯ sitemap / RSS ãåªå ãããŒãžãèããŸãã
æ£çŽãª User-AgentïŒãããã§ããããšãæç€ºããŸããanti-bot åé¿ã¯å®è£ ããŸãã
ãã£ãã·ã¥ïŒETag / If-Modified-Since ã§åæ€èšŒããç¡é§ãªåååŸãé¿ããŸããæå¹æéã¯æ¢å® 15 åïŒ
AMENBO_CACHE_TTL_MSïŒã§ãCache-Controlã¯å»¶é·æ¹åã®ã¿æ¡çšããŸãïŒmax-ageã 15 åããé·ããã°ãã¡ãã䜿ããäžé 24 æéãno-storeã¯ä¿åããŸããïŒãmax-age=0ãno-cacheã§æéãçž®ããããšã¯ããŸãã â äž»èŠãµã€ãã®å®æž¬ã§ã¯ãã®å®£èšã倧åã§ãåŸããšããŒã«åŒã³åºãã®åºŠã«ååŸãã«è¡ãããšã«ãªããäœè² è·ãšããåæã厩ããããã§ã
ã€ã³ã¹ããŒã«
npm install -g amenboMarkdown ååŸ(éåžžã® fetch / links)ã¯ããã ãã§åããŸããJS æç»ãå¿
èŠãª SPA ãžã®ææ Œãã¹ã¯ãªãŒã³ã·ã§ãããªã©ããã©ãŠã¶(Chromium)çµç±ã®ååŸã䜿ãå Žåã®ã¿ãååã«äžåºŠã ãå®è¡ããŠãã ãã(çŽ 170MB ã®ããŠã³ããŒã):
npx -y amenbo install-browserãŸãã¯éçºçšé:
git clone https://github.com/Rererr/amenbo.git
cd amenbo
npm install
npm run buildMCP ã¯ã©ã€ã¢ã³ããžã®ç»é²
Claude Code(--scope user ã¯å
šãããžã§ã¯ãå
±éããããžã§ã¯ãåäœãªãå€ã):
claude mcp add --scope user amenbo -- amenboCodex CLI:
codex mcp add amenbo -- amenboVS Code:
code --add-mcp '{"name":"amenbo","command":"amenbo"}'ãã®ä»ã®ã¯ã©ã€ã¢ã³ã(Cursor / Cline ãªã©)ã¯ãåã¯ã©ã€ã¢ã³ãã® MCP èšå®(Cursor: ~/.cursor/mcp.jsonãCline: MCP Servers ç»é¢ã® settings JSON)ã«æ¬¡ã®ãšã³ããªã远å ããŸã:
{
"mcpServers": {
"amenbo": {
"command": "amenbo"
}
}
}ã°ããŒãã«ã€ã³ã¹ããŒã«ãé¿ããå Žå㯠"command": "npx", "args": ["-y", "amenbo"]ãããŒã«ã«ãã«ãã䜿ãå Žå㯠"command": "node", "args": ["/path/to/amenbo/dist/server.js"] ãæå®ããŠãã ããã
stdio çµç±ã§ MCP ã® 2026-07-28(ã¹ããŒãã¬ã¹ã³ã¢)ãš 2025 ç³»ã®äž¡æ¹ã«å¿çããŸããã¯ã©ã€ã¢ã³ããã©ã¡ãã®çã話ããã«é¢ããããäžèšã®èšå®ã®ãŸãŸç¹ãããŸãã
ãšãŒãžã§ã³ãã«äœ¿ãæ¹ãæãã(æšå¥šããã³ãã)
ããŒã«å®çŸ©ã ãã§ã¯ã段éé瀺ã§åãããšãã£ãäœ¿ãæ¹ã®äœæ³ãŸã§ã¯äŒãããŸããã以äžã CLAUDE.md ã AGENTS.md ã«ã³ãããããšããšãŒãžã§ã³ãã amenbo ãå¹çãã䜿ãããã«ãªããŸãã
## WebååŸã¯ amenbo ã䜿ã
- ããŒãžååŸã¯ `fetch`(mode æ¢å® `auto`)ãé·ãããªããŒãžãäžéšããèŠããªãããŒãžã¯ã
ãŸã `mode: "outline"` ã§èŠåºããšåç¯ã®ããŒã¯ã³éã確èªããå¿
èŠãªç¯ã ã `section` æå®ã§ååŸãã
- åã URL ã®åååŸã§ `unchanged` / `diff` ãè¿ãã®ã¯æ£åžž(倿Žãªã / 倿Žç¯ã®ã¿)ã
å·®åã§ã¯ãªãå
容å
šäœãããäžåºŠåãåããããšãã ã `force_full: true` ã䜿ã
- ãµã€ãå
ã®ããŒãžãæ¢ããšã㯠URL ãæšæž¬ãã `links`(`filter` ã§çµã蟌ã¿)ã§åæãã
- ã·ã§ã«ã䜿ããç°å¢ã§ãããŒã¯ãŒãã§æ¢ãããã ãã®é·ãããŒãžãè€æ°ããŒãžã®äžæ¬åéã¯ã
CLI ã§ `amenbo fetch <url> > page.md` ã«èœãšã㊠grep / éšåèªã¿ãã(æ¬æãã³ã³ããã¹ãã«å
¥ããªã)ã
æ§é ãèŠãªãã倿ãããããŒãžã¯åŸæ¥ã©ãã MCP ã® outline â section ãåã
- æ¥æ¬èªä»¥å€ã®ãµã€ãã«ã䜿ãã(段éé瀺ã»ãã£ãã·ã¥ã»äœè² è·ã¯èšèªéäŸå)ããã ãæ¬ææœåºã¯
æ¥æ¬èªåãã«èª¿æŽããŠããããã鿥æ¬èªããŒãžã§æ¬æãæ¬ ããŠèŠãããšã㯠`selector` æå®ã
`mode: "screenshot"` ã§åãçŽã
- æé衚ã»ã¬ã€ã¢ãŠããªã©èŠèŠæ
å ±ãç®çãªã `screenshot`ã`scale: 0.5` çšåºŠã§ç»åããŒã¯ã³ãæžããã
- robots.txt æåŠã bot 察çã«ããååŸå€±æã¯ä»æ§(åé¿ããªã)ã倱æã¯ãã®ãŸãŸãŠãŒã¶ãŒã«å ±åããCLAUDE.md ã«æžããããã®å Žã®ã»ãã·ã§ã³ã ãã«èªã¿èŸŒãããšãã§ããŸããMCP ããã³ãã察å¿ã¯ã©ã€ã¢ã³ãã§ã¯ããµãŒããŒãåãäœæ³ã usage ããã³ãããšããŠé
åžããŠããŸã(Claude Code ã§ã¯ /mcp__amenbo__usage)ã
CLIãšããŠäœ¿ã
amenbo 㯠MCP ãµãŒããŒãšåäžã®ã³ã¢(ååŸããã£ãã·ã¥ãpolitenessãæœåºããžãã¯)ãå
±æãã CLI ãšããŠãåäœããŸããåŒæ°ãªãããŸã㯠amenbo serve ã¯åŸæ¥éã MCP ãµãŒããŒãšããŠèµ·åãã(.mcp.json ã® "command": "amenbo" ã¯ãã®ãŸãŸåããŸã)ã®ã§ãæ¢åã® MCP ç»é²ã«ã¯åœ±é¿ããŸããã
# ããŒãžãMarkdownãšããŠååŸ(æšæºåºåãž)
amenbo fetch https://example.com/
# é·ãããŒãžã¯ãŸãoutlineã§èŠåºããšããŒã¯ã³éã ã確èª
amenbo fetch https://example.com/ --mode outline
# åºåããã¡ã€ã«ã«èœãšã㊠grep ãéšåèªã¿(head/sed)ãã
amenbo fetch https://example.com/ > page.md
grep -A3 "æé" page.md
# ãµã€ãå
ã®ãªã³ã¯ãåæ(sitemap/RSSåªå
)
amenbo links https://example.com/ --filter "blog/*"
# ã¹ã¯ãªãŒã³ã·ã§ãã(ã¿ã€ã«PNGã¯--out-dirãžä¿åããããã¹ãæšæºåºåã«åæããã)
amenbo screenshot https://example.com/ --viewport-only --scale 0.5 --out-dir ./shotsåãµãã³ãã³ãã®è©³çŽ°ã¯ amenbo <fetch|links|screenshot> --help ãåç
§ããŠãã ããã
MCP ãš CLI ã®äœ¿ãåã:
MCPïŒãšãŒãžã§ã³ãã®äž»çµè·¯ããã©ãŠã¶(Chromium)ãããã»ã¹å ã§ãŠã©ãŒã ã«ä¿ãããã¹ã¯ãªãŒã³ã·ã§ããçã®ç»åãäŒè©±ãžçŽæ¥è¿ãããclaude.ai ã®ããã«ã·ã§ã«ãæããªããã¹ãã®ãšãŒãžã§ã³ãã«ãå±ã
CLIïŒã·ã§ã«ã¹ã¯ãªãããCIããããã°çšéãåºåããã¡ã€ã«ã«èœãšããŠ
grep/éšåèªã¿ãããå ŽåããŸã㯠MCP é察å¿ã®ãšãŒãžã§ã³ã/ããŒã«ãã§ãŒã³ãã䜿ãå Žåã«åãã1 ã³ãã³ã= 1 ããã»ã¹ã®ãããã©ãŠã¶ã¯æ¯åèµ·åãã
ãã£ãã·ã¥ãå·®åå¿ç(unchanged/diff)ãã¬ãŒãå¶åŸ¡(robots.txt/ãã¡ã€ã³æ¯ã®çŽåã¢ã¯ã»ã¹)ã®ç¶æ
㯠MCP ãµãŒããŒãš CLI ã§å
±æãããŸã(åã ~/.cache/amenbo ã䜿ããã)ããã ãã¬ãŒãå¶åŸ¡ã®ããã»ã¹éå
±æã¯ãã¹ããšãã©ãŒãã§ããåäžãã¡ã€ã³ãžã®çŽååã¯åããã»ã¹å
ã§ã®ã¿å³å¯ã«ä¿èšŒãããMCP ãµãŒããŒãšè€æ°ã® CLI å®è¡ãåæã«åããã¡ã€ã³ãžã¢ã¯ã»ã¹ããå Žåãæå°ééãå€å°ããæããããšããããŸãã
ããŒã«
fetch ã§ããŒãžãååŸ
ãã©ã¡ãŒã¿ | 説æ |
| ååŸå¯Ÿè±¡ URL(http/https ã®ã¿ãPDF å¯) |
|
|
| æ¬æãçµã蟌ã CSS ã»ã¬ã¯ã¿ |
| outline ã§åŸã section IDããã®ç¯ã® Markdown ã®ã¿è¿ã(ç¥å
èŠåºããããã°å¿çã« |
| ããŒãžçªå·(æ¢å® 1) |
| 1 ããŒãžã®æŠç®ããŒã¯ã³äžé(æ¢å® 8000) |
| true ã§å·®åå¿çã»å®åãããã¯é€å»ãç¡å¹åãã( |
links ã§ãªã³ã¯ãåæ
ãã©ã¡ãŒã¿ | 説æ |
| èµ·ç¹ URL |
| URL/ãªã³ã¯ããã¹ãã®éšåäžèŽããŸã㯠|
sitemap â RSS/Atom â ããŒãžå ãªã³ã¯ã®é ã§æ¢çŽ¢ããŸãã
screenshot ã§ã¹ã¯ãªãŒã³ã·ã§ãããæ®åœ±
ãã©ã¡ãŒã¿ | 説æ |
| æ®åœ±å¯Ÿè±¡ URL(http/https ã®ã¿) |
| æ¢å® trueãfalse ã§æåã®ãã¥ãŒããŒãåã®ã¿ |
| ã¿ã€ã«å¹ px(æ¢å® 1280) |
| è§£å床ã¹ã±ãŒã« 0.5ã1.0(æ¢å® 1.0)ãå°ããã»ã©ç»åããŒã¯ã³æž |
ç°å¢å€æ°
倿° | æ¢å® | 説æ |
|
| ãã£ãã·ã¥(SQLite + PNG)ã®ä¿åå |
|
| ãã£ãã·ã¥ã®æå¹æé |
|
| ååŸããã£ã®äžéãµã€ãº |
ã»ãã¥ãªãã£
SSRF 察çïŒhttp/https 以å€ã®ã¹ããŒã (
file:,ftp:ç)ãæåŠãDNS 解決ããæ¥ç¶å ã private / loopback / link-local / äºçŽã¢ãã¬ã¹ãªãæåŠãDNS rebinding(TOCTOU)察çãšããŠå®æ¥ç¶ãæ€èšŒæžã¿ IP ã«åºå®ããŸãããã£ãµã€ãºäžéïŒå·šå€§ã¬ã¹ãã³ã¹ã«ãã OOM ã鲿¢
æ¢ç¥ã®å¶é
æ¬ææœåºã¯æ¥æ¬èªãã¥ãŒãã³ã°ïŒæ®µéé瀺ã»ãã£ãã·ã¥ã»äœè² è·ã¯èšèªéäŸåã§ã鿥æ¬èªãµã€ãã§ãåããŸãããã ãæ¬ææœåºã®ãã¥ãŒãªã¹ãã£ãã¯ã¯æ¥æ¬èªããŒãžã§èª¿æŽããŠããããã鿥æ¬èªããŒãžã§æ¬æãæ¬ ããŠèŠãããšãã¯
selectoræå®ãmode: "screenshot"ã§åãçŽããŠãã ããHTTP ãããã·é察å¿ïŒ
HTTP_PROXY/HTTPS_PROXYçã®ç°å¢å€æ°ã¯å°éããŸãããSSRF 察çãšããŠæ¥ç¶å ãæ€èšŒæžã¿ IP ã«åºå®ããèšèš(DNS rebinding 察ç)ãšããããã·ãžåå解決ãå§ããæ¹åŒãäž¡ç«ããªãããã§ããäžæµãããã·å¿ é ã®ãããã¯ãŒã¯ã§ã¯çŸç¶ãå©çšããã ããŸããanti-bot åé¿ã¯å®è£ ããŸããïŒrobots.txt æåŠãããã察çã«ããååŸå€±æã¯ä»æ§ã§ãã倱æã¯ãã®ãŸãŸå ±åããŸã(åéå ãžã®äœè² è·åç §)
éçº
clone åŸã«1åãç§å¯æ å ±æ€æ»ïŒgitleaksïŒã® pre-commit ããã¯ãæå¹åãã:
git config core.hooksPath githooksnpm run typecheck # strict åãã§ãã¯
npm test # vitest
npm run build # dist/ ãžãã«ãåŒçš
èšäºãç ç©¶ã§åç
§ããå Žå㯠Zenodo ã® DOI ã䜿ã£ãŠãã ãããäžã®ãããžã® 10.5281/zenodo.21553636 ã¯å
šããŒãžã§ã³å
±éã® Concept DOI ã§ãåžžã«ææ°çãžè§£æ±ºãããŸããç¹å®ã®çãæãå Žåã¯ããã®çã® DOI ã Zenodo ã®ã¬ã³ãŒãããååŸããŠãã ããã
æ©æ¢°å¯èªãªåŒçšæ å ±ã¯ CITATION.cff ã«ãããŸã(GitHub ã® "Cite this repository" ãã BibTeX / APA ãçæã§ããŸã)ã
ã©ã€ã»ã³ã¹
Available Tools
3 toolsfetchFetch a web page as MarkdownARead-only
Fetch a web page (Japanese-web-native) as low-impact, token-efficient Markdown. Built-in robots.txt compliance, rate limiting, and caching. mode: auto (default; quality score picks Markdown or screenshot) / markdown / outline (heading summary) / screenshot. Refetching a cached URL returns cache: unchanged, or diff (changed sections only), to save tokens. PDF URLs are handled automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Target URL (http/https only; PDF supported) | |
| mode | No | Default: auto | |
| page | No | Page number (default 1) | |
| section | No | Section ID obtained from outline mode; returns only that section's Markdown | |
| selector | No | CSS selector to narrow the content | |
| force_full | No | Default false. If true, disables diff responses (unchanged/diff) and boilerplate-block removal (pagination by max_tokens still applies) | |
| max_tokens | No | Approximate token budget per page (default 8000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint and openWorldHint annotations, the description adds substantial behavioral context: robots.txt compliance, rate limiting, caching behavior, diff responses on refetch, and automatic PDF handling. This goes well beyond what annotations convey and fully discloses side effects and state handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose. It packs a lot of information into four sentences without fluff, though the use of semicolons and slashes makes it slightly dense. Every sentence contributes value, but it could be broken into a list for better scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description explains primary return types (Markdown, outline, screenshot) and cache states (unchanged/diff). It covers key behaviors like PDF handling and mode selection. Missing details about error responses or rate limit headers, but for a fetch tool this is fairly complete given the 7 parameters and sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have schema descriptions, so the baseline is high. The description adds extra meaning to mode (auto/markdown/outline/screenshot) and explains caching behavior that affects force_full and max_tokens, enriching beyond the schema. It does not detail page, section, or selector semantics, but the schema already covers those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Fetch a web page as Markdown' with specific details like 'low-impact, token-efficient' and supported modes. It distinguishes from the screenshot sibling by explicitly listing screenshot as a mode, and links is not mentioned but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use cases through features like caching and diff responses for repeated fetches, and 'token-efficient' suggests when token economy matters. However, it does not explicitly state when to use this tool instead of the sibling 'screenshot' or 'links' tools, nor does it provide exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
linksList links from a page (sitemap/RSS-first)ARead-only
Low-impact link discovery: prefers sitemap.xml / RSS / Atom feeds when available, otherwise extracts in-page links.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Starting URL | |
| filter | No | Substring match against URL/link text, or a glob using * |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds meaningful behavior: it prefers sitemap/RSS/Atom feeds to minimize impact and falls back to extracting in-page links. This discloses the tool's operational strategy without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the purpose, mentions the low-impact nature, and describes the strategy. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple two-parameter read-only tool with no output schema, the description explains the core behavior (feed-first fallback to in-page) and impact level. It could mention output shape, but that's not critical for a list-returning tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for both parameters (url and filter) with clear descriptions. The tool description does not add parameter-specific context, maintaining the baseline for schema-heavy tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Title clearly states 'List links from a page', and description specifies 'link discovery' with a concrete strategy (prefers sitemap/RSS/Atom, else in-page). This distinguishes it from siblings fetch and screenshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description conveys clear usage context ('low-impact', feed-first strategy) implying when to use it for light-weight link harvesting. However, it does not explicitly name alternatives or exclusion criteria, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotCapture a tiled screenshot of a web pageARead-only
For explicit visual inspection. Renders the page with a headless browser and returns tiled PNG screenshots. Built-in robots.txt compliance, rate limiting, and caching.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Target URL (http/https only) | |
| scale | No | Resolution scale (0.5-1.0, default 1.0); lower reduces image tokens | |
| width | No | Tile width in px (default 1280) | |
| fullPage | No | Default true. If false, captures only the first viewport (1 tile) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open-world behavior, so the bar for adding value is lowered. The description goes beyond annotations by detailing built-in robots.txt compliance, rate limiting, caching, and the return format (tiled PNG screenshots). These specifics help the agent anticipate external interactions and constraints, though it doesn't mention failure modes or auth needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences. The first sentence front-loads the purpose ('For explicit visual inspection'), the second explains the mechanism, and the third lists key behavioral features. Every word earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description explicitly states the return format ('tiled PNG screenshots'). It also covers web-access constraints (robots.txt compliance, rate limiting) and caching behavior. Combined with the comprehensively described parameters and informative annotations, the description provides a complete picture for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides complete descriptions for all four parameters (100% coverage), so the baseline is 3. The description itself does not add parameter-level detail, but it does mention 'tiled' which indirectly relates to the width and fullPage parameters. However, since the schema already explains each parameter sufficiently, the description offers no additional semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'Renders the page with a headless browser and returns tiled PNG screenshots.' It also frames it as 'For explicit visual inspection,' distinguishing it from sibling tools like fetch and links that handle content extraction. The purpose is unambiguous and differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening phrase 'For explicit visual inspection' provides clear context on when to use the tool. However, it does not explicitly name alternatives or discuss when not to use it, only implying that other tools are better for non-visual tasks. Lacking explicit exclusions, it stops one step short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v0.6.0- Changed
fetch2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / force_full / descriptionPrevious value: -"Default false. If true, disables diff responses (unchanged/diff) and boilerplate-block removal, always returning the full content"New value: +"Default false. If true, disables diff responses (unchanged/diff) and boilerplate-block removal (pagination by max_tokens still applies)"
- Changed
links1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
screenshot1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
3 tool updates
v0.1.5- Changed
fetch7 fields changed- changed
Input schema / properties / force_full / descriptionPrevious value: -"æ¢å®falseãtrueã§å·®åå¿ç(unchanged/diff)ãšå®åãããã¯é€å»ãç¡å¹åãåžžã«å šæãè¿ã"New value: +"Default false. If true, disables diff responses (unchanged/diff) and boilerplate-block removal, always returning the full content" - changed
Input schema / properties / max_tokens / descriptionPrevious value: -"1ããŒãžã®æŠç®ããŒã¯ã³äžé(æ¢å®8000)"New value: +"Approximate token budget per page (default 8000)" - changed
Input schema / properties / mode / descriptionPrevious value: -"æ¢å®auto"New value: +"Default: auto" - changed
Input schema / properties / page / descriptionPrevious value: -"ããŒãžçªå·(æ¢å®1)"New value: +"Page number (default 1)" - changed
Input schema / properties / section / descriptionPrevious value: -"outlineã§åŸãsection IDãæå®æã¯ãã®ç¯ã®Markdownã®ã¿è¿ã"New value: +"Section ID obtained from outline mode; returns only that section's Markdown" - changed
Input schema / properties / selector / descriptionPrevious value: -"æ¬æãçµã蟌ãCSSã»ã¬ã¯ã¿"New value: +"CSS selector to narrow the content" - changed
Input schema / properties / url / descriptionPrevious value: -"ååŸå¯Ÿè±¡URL(http/httpsã®ã¿ãPDFãå¯)"New value: +"Target URL (http/https only; PDF supported)"
- Changed
links2 fields changed- changed
Input schema / properties / filter / descriptionPrevious value: -"URL/ãªã³ã¯ããã¹ãã®éšåäžèŽããŸãã¯*ã䜿ã£ãglob"New value: +"Substring match against URL/link text, or a glob using *" - changed
Input schema / properties / url / descriptionPrevious value: -"èµ·ç¹URL"New value: +"Starting URL"
- Changed
screenshot4 fields changed- changed
Input schema / properties / fullPage / descriptionPrevious value: -"æ¢å®trueãfalseã®å Žåã¯æåã®ãã¥ãŒããŒãå(1ã¿ã€ã«)ã®ã¿æ®åœ±ãã"New value: +"Default true. If false, captures only the first viewport (1 tile)" - changed
Input schema / properties / scale / descriptionPrevious value: -"è§£å床ã¹ã±ãŒã«(0.5ã1.0ãæ¢å®1.0)ãå°ããã»ã©ç»åãµã€ãº(ããŒã¯ã³)ãæžã"New value: +"Resolution scale (0.5-1.0, default 1.0); lower reduces image tokens" - changed
Input schema / properties / url / descriptionPrevious value: -"æ®åœ±å¯Ÿè±¡ã®URL(http/httpsã®ã¿)"New value: +"Target URL (http/https only)" - changed
Input schema / properties / width / descriptionPrevious value: -"ã¿ã€ã«å¹ (px)ãæ¢å®1280"New value: +"Tile width in px (default 1280)"
3 tool updates
- First observed
fetch - First observed
links - First observed
screenshot
TDQS
Tools are mostly distinct: fetch for text extraction, links for link discovery, screenshot for visual capture. Slight overlap exists between fetch's screenshot mode and the dedicated screenshot tool, but descriptions clarify the intended use.
All three tool names are single lowercase words following a consistent pattern. There is no mixing of styles or verb/noun inconsistencies.
Three tools is well-scoped for a web-fetching utility. Each tool serves a clear, non-redundant purpose (fetch content, find links, capture visual).
The tool surface covers the core workflows: retrieving page content, discovering links, and taking screenshots. No obvious gaps for the stated purpose of low-impact web fetching.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Docs: https://docs.keenable.ai/mcp-server Keenable is a free, remote MCP server that gives agents access to the web index. Search the web with ranked results and date/site filters, then fetch any indexed page as clean markdown. Works out of the box with no account or API key.
Reliable web access for AI agents: smart HTTP, rotating proxies, and full-browser rendering.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
Related MCP Servers
- AlicenseAqualityDmaintenanceA comprehensive MCP server providing 15 web tools including search, scraping, screenshots, SEO audits, and DNS/SSL checks through a single installation. It delivers clean, LLM-optimized outputs so AI agents can focus on reasoning rather than parsing raw HTML.1515MIT
- AlicenseAqualityAmaintenanceA token-efficient MCP server that gives AI agents structured access to the web, returning compact page summaries and targeted queries instead of full accessibility dumps.23463178MIT

Yutori MCPofficial
AlicenseAqualityBmaintenanceMCP server enabling web monitoring, deep research, and browser automation through Yutori's web agentic technology.1323Apache 2.0- AlicenseNot gradedqualityDmaintenanceMCP server for web scraping and browser automation, enabling AI agents to extract clean, token-efficient content from web pages.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Rererr/amenbo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server