Rererr/amenbo
ð ð - Japanese-web-native web fetching optimized for low target-site impact and token efficiency. Outline-first progressive disclosure, ShiftJIS/EUC-JP mojibake handling, PDF/CSV extraction, and polite crawling (robots.txt, rate limits, honest User-Agent). Install via npx -y amenbo.
Quick Install
{
"mcpServers": {
"rererr-amenbo": {
"command": "npx",
"args": [
"-y",
"rererr-amenbo"
]
}
}
}Using an AI coding agent (Claude Code, Cursor, etc.)? Copy a ready-made prompt that tells it to fetch the setup instructions and install this server for you.
Documentation Overview
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/ ã«ãããŸãã
ããŒã¯ã³ãç¯çŽããä»çµã¿
- 段éé瀺ïŒ
mode: outlineã§èŠåºãããªãŒãšåç¯ã®ããŒã¯ã³éã ãå ã«è¿ããå¿ èŠãªç¯ã ãsectionæå®ã§ååŸãé·å€§ãªããŒãžãäžžããšæµã蟌ã¿ãŸãã - CJK 察å¿ã®æ¬æãã«ãŒãã³ã°ïŒå¥èªç¹å¯åºŠãæåçš®æ¯çããªã³ã¯å¯åºŠã§ãã/åºå/ããã¿ãŒãé€å»
- å·®åå¿çïŒäžåºŠååŸãã URL ã®åååŸæã倿Žãç¡ããã°
unchangedãããã°å€æŽãããç¯ã ããè¿ããŸã - èªå Markdown/ç»ååæ¿ïŒå質ã¹ã³ã¢ãäœãããŒãžã ãã¹ã¯ãªãŒã³ã·ã§ããã«ããå£ãã Markdown ãèªãŸããŠåãçŽãåŸåŸ©ãé¿ããŸã
- CJK ããŒã¯ã³èŠç©ãïŒæ¥æ¬èªã¯è±èªããããŒã¯ã³å䟡ãéããããæåçš®å¥ã®ä¿æ°ã§ããŒãžåå²ã®äºç®ãèšç®ããŸã
åéå ãžã®äœè² è·
- äºæ®µãã§ããïŒãŸãçŽ ã® HTTP GETãJS æç»ãå¿ èŠãªããŒãžã ã headless Chromium ã«ææ Œããã®ã§ã倧åã®ååŸã§ãã©ãŠã¶ãèµ·åããŸãã
- ç€Œåæ£ããã¯ããŒã©ïŒrobots.txt ãš Crawl-Delay ãå°éãåäžãã¡ã€ã³ãžã¯çŽå + æ¢å® 1 req/ç§ããªã³ã¯åæã¯ sitemap / RSS ãåªå ãããŒãžãèããŸãã
- æ£çŽãª User-AgentïŒãããã§ããããšãæç€ºããŸããanti-bot åé¿ã¯å®è£ ããŸãã
- ãã£ãã·ã¥ïŒETag / If-Modified-Since ã§åæ€èšŒããç¡é§ãªåååŸãé¿ããŸã
ã€ã³ã¹ããŒã«
npm install -g amenbo
Markdown ååŸ(éåžžã® 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 build
MCP ã¯ã©ã€ã¢ã³ããžã®ç»é²
Claude Code(--scope user ã¯å
šãããžã§ã¯ãå
±éããããžã§ã¯ãåäœãªãå€ã):
claude mcp add --scope user amenbo -- amenbo
Codex CLI:
codex mcp add amenbo -- amenbo
VS 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"] ãæå®ããŠãã ããã
ãšãŒãžã§ã³ãã«äœ¿ãæ¹ãæãã(æšå¥šããã³ãã)
ããŒã«å®çŸ©ã ãã§ã¯ã段éé瀺ã§åãããšãã£ãäœ¿ãæ¹ã®äœæ³ãŸã§ã¯äŒãããŸããã以äžã 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 | ååŸå¯Ÿè±¡ URL(http/https ã®ã¿ãPDF å¯) |
mode | auto(æ¢å®ã»å質ã¹ã³ã¢ã§ Markdown/screenshot èªååæ¿) / markdown / outline(èŠåºãèŠçŽ) / screenshot |
selector | æ¬æãçµã蟌ã CSS ã»ã¬ã¯ã¿ |
section | outline ã§åŸã section IDããã®ç¯ã® Markdown ã®ã¿è¿ã(ç¥å
èŠåºããããã°å¿çã« section_path(⺠åºåãã®ãã³ãã)ãä»äž) |
page | ããŒãžçªå·(æ¢å® 1) |
max_tokens | 1 ããŒãžã®æŠç®ããŒã¯ã³äžé(æ¢å® 8000) |
force_full | true ã§å·®åå¿çã»å®åãããã¯é€å»ãç¡å¹åãåžžã«å šæãè¿ã |
links ã§ãªã³ã¯ãåæ
| ãã©ã¡ãŒã¿ | 説æ |
|---|---|
url | èµ·ç¹ URL |
filter | URL/ãªã³ã¯ããã¹ãã®éšåäžèŽããŸã㯠* ã䜿ã£ã glob |
sitemap â RSS/Atom â ããŒãžå ãªã³ã¯ã®é ã§æ¢çŽ¢ããŸãã
screenshot ã§ã¹ã¯ãªãŒã³ã·ã§ãããæ®åœ±
| ãã©ã¡ãŒã¿ | 説æ |
|---|---|
url | æ®åœ±å¯Ÿè±¡ URL(http/https ã®ã¿) |
fullPage | æ¢å® trueãfalse ã§æåã®ãã¥ãŒããŒãåã®ã¿ |
width | ã¿ã€ã«å¹ px(æ¢å® 1280) |
scale | è§£å床ã¹ã±ãŒã« 0.5ã1.0(æ¢å® 1.0)ãå°ããã»ã©ç»åããŒã¯ã³æž |
ç°å¢å€æ°
| 倿° | æ¢å® | 説æ |
|---|---|---|
AMENBO_CACHE_DIR | ~/.cache/amenbo | ãã£ãã·ã¥(SQLite + PNG)ã®ä¿åå |
AMENBO_CACHE_TTL_MS | 900000(15å) | ãã£ãã·ã¥ã®æå¹æé |
AMENBO_MAX_BODY_BYTES | 20971520(20MB) | ååŸããã£ã®äžéãµã€ãº |
ã»ãã¥ãªãã£
- SSRF 察çïŒhttp/https 以å€ã®ã¹ããŒã (
file:,ftp:ç)ãæåŠãDNS 解決ããæ¥ç¶å ã private / loopback / link-local / äºçŽã¢ãã¬ã¹ãªãæåŠãDNS rebinding(TOCTOU)察çãšããŠå®æ¥ç¶ãæ€èšŒæžã¿ IP ã«åºå®ããŸã - ããã£ãµã€ãºäžéïŒå·šå€§ã¬ã¹ãã³ã¹ã«ãã OOM ã鲿¢
æ¢ç¥ã®å¶é
- HTTP ãããã·é察å¿ïŒ
HTTP_PROXY/HTTPS_PROXYçã®ç°å¢å€æ°ã¯å°éããŸãããSSRF 察çãšããŠæ¥ç¶å ãæ€èšŒæžã¿ IP ã«åºå®ããèšèš(DNS rebinding 察ç)ãšããããã·ãžåå解決ãå§ããæ¹åŒãäž¡ç«ããªãããã§ããäžæµãããã·å¿ é ã®ãããã¯ãŒã¯ã§ã¯çŸç¶ãå©çšããã ããŸãã - anti-bot åé¿ã¯å®è£ ããŸããïŒrobots.txt æåŠãããã察çã«ããååŸå€±æã¯ä»æ§ã§ãã倱æã¯ãã®ãŸãŸå ±åããŸã(åéå ãžã®äœè² è·åç §)
éçº
npm 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 ãçæã§ããŸã)ã