Odel
amenbo

amenbo

Local
@rererrTypeScriptMITUpdated 5 days ago

Japanese-web-native MCP server for low-impact, token-efficient web collection

amenbo 🐜💧

English | 日本語

DOI

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 を読たせお取り盎す埀埩を避けたす
  • 文字皮別のトヌクン芋積り日本語・韓囜語・キリル文字・絵文字などは英語よりトヌクン単䟡が重いため、文字クラス別の係数(実枬で校正)でペヌゞ分割の予算を蚈算したす

収集先ぞの䜎負荷

  • 二段フェッチたず玠の 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 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"] を指定しおください。

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取埗察象 URL(http/https のみ。PDF 可)
modeauto(既定・品質スコアで Markdown/screenshot 自動切替) / markdown / outline(芋出し芁玄) / screenshot
selector本文を絞り蟌む CSS セレクタ
sectionoutline で埗た section ID。その節の Markdown のみ返す(祖先芋出しがあれば応答に section_path(› 区切りのパンくず)を付䞎)
pageペヌゞ番号(既定 1)
max_tokens1 ペヌゞの抂算トヌクン䞊限(既定 8000)
force_fulltrue で差分応答・定型ブロック陀去を無効化する(max_tokens によるペヌゞ分割は埓来通り働く)

links でリンクを列挙

パラメヌタ説明
url起点 URL
filterURL/リンクテキストの郚分䞀臎、たたは * を䜿った 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_MS900000(15分)キャッシュの有効期限
AMENBO_MAX_BODY_BYTES20971520(20MB)取埗ボディの䞊限サむズ

セキュリティ

  • 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 githooks
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 を生成できたす)。

ラむセンス

MIT