mcpField

aieo について

aieo は、ウェブサイトのビルド成果物、フレームワーク設定、デプロイ設定を調べ、SEO と AI 検索の問題を検出するコマンドラインツールです。サイト開発者は問題箇所をソースファイルまで追跡し、保存したベースラインと比較して変更を判定できます。

主な機能

  1. 01ビルド成果物とフレームワーク設定の検査
  2. 02問題箇所をソースファイルまで追跡
  3. 03保存したベースラインとの比較
  4. 04クローラーと AI 流入のアクセスログ分析
  5. 05検索パフォーマンスとインデックス情報の確認
  6. 06問題のエクスポートと IndexNow による変更 URL の送信

活用シーン

  1. 01デプロイ前に CI で SEO の不備を検出
  2. 02サイト変更で新たに生じた問題を特定
  3. 03クローラーのブロックと AI 検索のカバレッジを調査
  4. 04ビルド成果物と検索エンジンのインデックスを照合

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
mcpbaieo-v1.3.0.mcpb

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

aieo-cli

サイトを公開する前に、ビルド出力のSEO/GEOをチェックします。aieo.eeの内部を確認できます。

aieo.eeは、サイトがHTTP経由で配信する内容をチェックします。aieoは、ビルドで生成された内容(dist/)、フレームワークの宣言、デプロイ設定で追加される内容(_redirects、_headers、vercel.json、netlify.toml、Next.jsマニフェスト)を読み取り、各要素が相互に整合しているかをチェックします。 サイトマップ ↔ robots.txt ↔ canonical ↔ hreflang ↔ 内部リンク ↔ llms.txt ↔ リダイレクト ↔ フレームワーク設定。ベースラインを指定すると、変更によって悪化した項目だけを対象にビルドを失敗させます。

aieo init                       # detect the framework, write aieo.toml
aieo check                      # check ./dist; exit 1 when the gate fails
aieo snapshot                   # save .aieo/baseline.json
aieo diff                       # fail only on findings new since the baseline
aieo export                     # .aieo/bundle.json.gz (aieo-bundle/v1) for aieo.ee
aieo rules / aieo explain C-SITEMAP-URL-NOINDEX
aieo logs ingest /var/log/nginx/  # crawler & AI-referral evidence from access logs
aieo logs report                # coverage, verification, blocking, errors, AI referrals
aieo search google inspect      # Google's view of the build's pages (URL Inspection)
aieo indexnow submit --yes      # tell Bing & co. what changed since the baseline
aieo login && aieo push         # upload the bundle to the aieo.ee project
aieo mcp                        # the same checks as read-only MCP tools for AI agents

インストール

curl -fsSL https://raw.githubusercontent.com/web-casa/aieo-cli/main/scripts/install.sh | sh

Linux(x86_64、aarch64)、macOS(Apple silicon、Intel)、Windows用の静的バイナリは、それぞれのGitHubリリースに添付されています。各バイナリの横には.sha256ファイルがあり、install.shが検証したうえで~/.local/binにインストールします(AIEO_VERSION=1.0.0でリリースを固定でき、AIEO_INSTALL_DIRでディレクトリを変更できます)。ソースからインストールする場合:cargo install --git https://github.com/web-casa/aieo-cli aieo-cli(Rust 1.88以降)。

フレームワーク

プリセットはpackage.jsonと設定ファイルから検出されます(強制するには--presetを指定します)。検出結果には、ページのビルド元となったソースファイルが示されます。

プリセットチェック対象のビルド設定から読み取る項目(リテラルのみ)トレース先のページ
static任意のディレクトリ——
astro、starlightdist/(outDir)site、base、trailingSlashsrc/pages/**、src/content/docs/**
nextout/(output: 'export')または.next/basePath、trailingSlash、output、metadataBaseapp/**/page.*、pages/**
nuxt.output/publicsite.url、app.baseURL、ssr、routeRulesのリダイレクトapp/pages/**、pages/**
vuedist/(build.outDir)basesrc/pages/**(ファイルルーティング)
tanstackdist/client、.output/public、dist/basesrc/routes/**
hugopublic/(publishDir)baseURL、uglyURLs、言語content/**
vitepress.vitepress/distsitemap.hostname、base、cleanUrls、srcDir**/*.md
docusaurusbuild/url、baseUrl、trailingSlashdocs/**、blog/**、src/pages/**

サーバービルド(Next.jsの.next/、およびサーバーバンドルを使用するNuxtとTanStack Start)は、本番環境と同様に処理されます。プリレンダリング済みHTML、public/、routes-manifest.jsonのリダイレクト/リライト/ヘッダーが配信され、その他のすべてのルートはリクエスト時にレンダリングされます。これらのルートへのリンクは動作しているものとして扱われますが、HTMLはチェックされません。また、サーバーでレンダリングされるホームページがある場合、ホームページのモジュールは未検証となります(--allow-incompleteを指定しない場合、終了コード2)。クライアントでレンダリングされるSPAは、JavaScriptを実行しないクローラーから見える内容を対象にチェックされます(K-SPA-SHELL)。 fixtures/presets/には、各フレームワークで同じサイトを実際にビルドしたものと、そのスナップショットが格納されています(cargo test -p aieo-cli --test presets)。

チェック項目

ファミリー例
F01–F18ビルドを基に判定する、aieo.ee の AI 対応状況モジュールrobots.txt の AI クローラー対応マトリクス、noindex、サイトマップ、canonical、llms.txt、JavaScript なしでは表示されないコンテンツ
P01–P04複数ページを対象とするモジュール(GEOReady のもの)。インデックス可能なすべてのページを対象に、それぞれ独立して 0~100 で採点固有のメタデータ、ナビゲーションと内容、API/製品データ、組織アイデンティティの統一
T-…ページごとtitle の欠落、重複した title(hreflang の代替ページは除く)、不正な JSON-LD、schema.org の @context がない JSON-LD、Google がリッチリザルトに要求するプロパティの欠落、廃止されたリッチリザルトの種類(HowTo、FAQPage、…)
C-…ビルド全体サイトマップに、存在しない/noindex/canonical でない/別のホストにある/robots.txt でブロックされているページが含まれている、戻りリンクのない hreflang、存在しないページまたは別のホストを指す canonical、内部リンク切れ、孤立ページ、存在しないページへのリンクを含む llms.txt、本番環境に配置された Disallow: /、AI 検索クローラーのブロック
K-…設定フレームワークの site/ベースパス/末尾スラッシュ設定と canonical およびサイトマップの URL の不一致、リダイレクトループ、リダイレクトチェーン、転送先のないリダイレクト(ファイルと行番号を表示)、サイトマップのページを noindex にするヘッダールール、静的エクスポートで無視される Next.js の redirects()、クライアント側でレンダリングされた単一のシェルが応答するルート
L-…アクセスログ(aieo logs)WAF/CDN によるクローラーのブロック、クローラーへの 5xx 応答、robots.txt にアクセスできない、デプロイ後の 404 急増、偽装クローラー、許可されていないパスへのクロール、AI 検索のカバレッジ不足
S-…検索エンジン(aieo search)インデックス可能なページがインデックス未登録、Google による canonical の上書き、本番環境の応答とビルドの不一致、クリック数の半減、IndexNow キーが配信されていない
D-…ベースラインとの比較ページがリダイレクトなしで削除された、ページが noindex に変更された、canonical が変更された、hreflang または構造化データが失われた、コンテンツが縮小した

各ルールには ID、重大度、情報源があります。aieo rules、aieo explain <id> を参照してください。

重大度:error は確定的な不具合です(デフォルトのゲートで失敗します)。 warning は高リスクです(新たに発生した場合、diff で失敗します)。notice は助言です。公式な情報源がないルールにはヒューリスティックと明記され、デフォルトでエラーになることはありません。長さに基づく title のルールは、有効にしない限り無効です。

終了コード:0 ゲート通過 · 1 ゲート失敗 · 2 証拠不十分(ホームページがない、オリジン不明、HTML をデコードできない)、または使用方法のエラー — 十分な情報を確認できなかったチェックが「問題なし」と報告することはありません。

aieo.ee と同じルール

spec/ のルールメタデータ、クローラーカタログ、バンドルスキーマは、aieo.ee のスキャナーが読み込むパッケージ @aieo/rules からエクスポートされています。F02–F18 は 2 回実装されています(aieo.ee では TypeScript、こちらでは Rust)。spec/fixtures/conformance の適合性フィクスチャによって、同じ小規模サイト、同じモジュールステータス、比率、理由を用いて整合性が保たれています(cargo test -p aieo-rules --test conformance)。F01(HTTPS、リダイレクト)には稼働中のオリジンが必要です。F15 はコンテンツネゴシエーションの代わりに、ホームページの .md 版を読み込みます。

アクセスログ

aieo logs ingest access.log access.log.1.gz   # Nginx/Apache, Caddy, Cloudflare Logpush,
                                              # Vercel drains, CloudFront — detected per file
aieo logs ingest app.log --format "nginx:\$host \$remote_addr [\$time_local] \"\$request\" \$status …"
CLOUDFLARE_API_TOKEN=… aieo logs pull cloudflare --zone <zone id> --since 7d
aieo logs report [--since 30d] [--format json]
aieo logs gaps --actor search_index           # indexable pages AI search crawlers never fetched
aieo logs referrals                           # landing pages of visits from ChatGPT, Perplexity, …
  • 対象:ユーザーエージェントを共通のクローラーカタログ( spec/crawlers.json:OAI-SearchBot、ChatGPT-User、GPTBot、Claude-*、 PerplexityBot、Googlebot、Bingbot、Applebot、…)と照合し、 search_index、user_fetch、training、classic_search、その他の 自動化ツール、または人に分類します。リファラー(または utm_source)が AI 回答プラットフォームの場合、そのアクセスは AI 経由の参照です。
  • 検証の有無:クローラーを名乗るアクセスは、運営者が公開する IP 範囲 (.aieo/cache/ にダウンロードして1日間キャッシュし、一覧の creationTime を記録)で確認し、その運営者が文書化している場合は 正引き確認付き逆引き DNS でも検証します。mismatch はなりすましです。 公開された検証方法がないクローラーは unverifiable とし、偽物とは 判定しません。--offline を指定すると、ネットワークアクセスを省略します。
  • ローカル保存先:.aieo/logs.db(SQLite)。ファイルは先頭バイトで 認識するため、増加中のログは続きから処理され、ローテーションされた コピーは二重にカウントされません。クローラーのリクエストではソルト付きの IP ハッシュ(.aieo/salt)を保持し、人のアクセスについては日ごとの件数 のみを保持します。IP アドレスやブラウザーのユーザーエージェントは 保存しません。.aieo/.gitignore により、ソルト、データベース、 キャッシュが Git に含まれないようになっています。
  • 検出事項(L):クローラーの応答の大半が 401/403/429(WAF/ボット 保護)だった場合、クローラーの 5xx、robots.txt が利用できない場合 (5xx/429)、クローラーの 404 急増、なりすましクローラー、許可されて いないパスにアクセスした検証済みクローラー、インデックス可能なページに あまり到達していない AI 検索クローラーを検出します。ログと同じ場所に ビルドがある場合、カバレッジはそのビルドのインデックス可能なページを 基準に測定します。
  • Cloudflare GraphQL は、IP アドレスを含まないサンプリング済みの 時間別件数を返します。各行には件数が含まれ、検証状態は unchecked の ままです。プランの制限はゾーンの settings から読み取ります。
  • .aieo/logs.db が存在する場合、aieo export はログの集計値を (aieo-bundle/v1 の logs として)追加します。

検索エンジン

すべての処理は独自の認証情報を使って実行されます。認証情報は設定 ディレクトリ(~/.config/aieo/credentials.json、所有者のみアクセス可能) に保存するか、CI では環境から取得します。データは .aieo/search.db に 保存されます。

# Google Search Console — your own "Desktop app" OAuth client from Google Cloud
aieo search google login --client-secret client_secret.json   # browser, loopback redirect
aieo search google pull --days 28        # clicks per page and day, top queries
aieo search google inspect [--limit 200] # URL Inspection of indexable pages, stalest first
# Bing Webmaster Tools — API key from Settings → API Access
aieo search bing key                     # or BING_WEBMASTER_API_KEY
aieo search bing pull
aieo search bing import-ai export.csv    # AI Performance overview export (Date, Citations, Cited Pages)
aieo search report
  • CI:Search Console のプロパティのユーザーであるサービスアカウントの メールアドレスを持つサービスアカウントキーに GOOGLE_APPLICATION_CREDENTIALS を設定します(デバイスフローでは Search Console のスコープを使用できません)。
  • URL 検査:ローカルのクォータ台帳(プロパティごとに1日2,000件、 1分あたり600件)を保持し、最後に調査した時点が最も古い URL から検査します。
  • 検出事項(S)。ビルドと照合して読み取ります。Google がインデックスに 登録していないインデックス可能なページ、Google が上書きした canonical、 Google が取得できなかった/ブロックされていると判断した/noindex を確認 した、ビルドで提供されるページ(本番環境がビルド時の内容と異なります)、 前の期間と比較してクリック数が半減した場合、ビルドで提供されない IndexNow キーを検出します。
  • Bing の AI Performance と Google の AI Overviews レポートには API が ありません。Bing の概要エクスポートは、aieo.ee と同じルールで インポートされます。
IndexNow
aieo indexnow keygen --write             # key file into public/ (static/ for Hugo, Docusaurus)
aieo indexnow verify                     # in the build? served live?
aieo indexnow submit                     # plan: new, changed and removed pages since the baseline
aieo indexnow submit --yes               # send (Bing, Yandex, Seznam, Naver, … share it; not Google)

変更は、ページハッシュをベースライン(aieo snapshot)と比較して検出する ため、デプロイによって変更されたものだけが送信されます。--yes を指定 しない限り何も送信されず、すべてのリクエストは .aieo/audit.jsonl に 記録されます。

aieo.ee

aieo login                 # an organisation API key with write access; finds the project for `site`
aieo push                  # export the bundle (check + logs + search) and upload it

aieo push は、aieo.toml の [aieo] project(または --to <id>)に アップロードします。同じコミットと種類を2回アップロードしても、1回の実行 として認識されます。バンドルには検出事項、ページ一覧、集計値が含まれます。 ページのソース、未加工のログ、IP アドレスは含まれません。また、プロジェクトの 「Inside view」ページにドロップすることもできます。

設定(aieo.toml)

site = "https://example.com"     # production origin
dist = "dist"
preset = "starlight"

[check]
# fail_on = ["error"]            # default; with a baseline ["new:error", "new:warning"]
baseline = ".aieo/baseline.json"
ignore = ["/drafts/**"]          # URL paths left out of page rules

[rules]
"C-ORPHAN-PAGE" = "notice"       # error | warning | notice | off | on

[[suppress]]                     # every suppression has an owner, a reason and an expiry
rule = "C-LINK-BROKEN"
url = "/legacy/**"
reason = "old docs, removed in Q1"
owner = "docs-team"
expires = "2026-12-31"

[aieo]
project = "…"                    # aieo.ee project id for `aieo push`

[search]
google_property = "sc-domain:example.com"   # default: the property covering `site`
bing_site = "https://example.com/"

[indexnow]
key = "…"                        # public; served as /<key>.txt

[[hosting.rewrites]]             # routing the build cannot show (middleware, edge functions)
from = "/:path*"
to = "/en/:path*"

[[hosting.redirects]]
from = "/old/:slug"
to = "/new/:slug"
status = 301

[[hosting.*]] ルールは、ビルドとホストの設定で宣言されたルールの後に 適用されます。ルーティングがコード(Next.js ミドルウェア、エッジ関数)に ある場合は、このルールを使用してください。そうすることで、書き換えられた パスへのリンクが壊れていると報告されなくなります。

CI

- run: npm run build
- uses: web-casa/aieo-cli@v1       # composite action, see action.yml
  with:
    version: 1.3.0                 # prebuilt binary; the default "source" builds with cargo
    command: diff                  # or check
    upload-sarif: "true"           # GitHub code scanning (security-events: write)
    # push: "true"                 # upload the bundle to aieo.ee (aieo-api-key: ${{ secrets.AIEO_API_KEY }})
    # indexnow: "true"             # submit what changed since the baseline

検出結果はプルリクエストのアノテーションとして表示され、Markdown の概要がジョブの概要に追加され、SARIF とエビデンスバンドルがプロジェクトの隣に書き込まれます。アクションを使わない場合: aieo diff --format github --report sarif=aieo.sarif --report bundle=.aieo/bundle.json.gz。

GitLab:ci/gitlab-ci.yml を読み込み、.aieo を拡張します。検出結果はマージリクエストに JUnit テストレポートとして表示されます。

AI エージェント(プラグイン、スキル、MCP)

aieo バイナリが PATH に設定されている必要があります(「インストール」を参照)。そのうえで、次の手順を実行します。

エージェントインストール
Claude Code/plugin marketplace add web-casa/aieo-cli を実行し、続けて /plugin install aieo@aieo を実行
Codexcodex plugin marketplace add web-casa/aieo-cli を実行し、続けて codex plugin add aieo@aieo を実行
スキルに対応する任意のエージェント(OpenClaw、Hermes、Cursor、…)npx skills add web-casa/aieo-cli
Claude Desktop およびその他の MCPB ホストリリースから aieo-v<version>.mcpb を開き、サイトのディレクトリを選択
任意の MCP クライアント{"command": "aieo", "args": ["mcp"]} をプロジェクトディレクトリで起動

同じディレクトリは Cursor Marketplace 用の Cursor プラグイン(.cursor-plugin/)でもあります。Marketplace に掲載されるまでは、上記のスキルと MCP の行に記載された方法を使ってください。

このプラグインには 5 つのスキル — aieo(チェック → ソースファイルを編集 → 再ビルド → チェック)、aieo-ci、aieo-crawlers、aieo-indexing、aieo-llms-txt(plugins/aieo/skills)— と MCP サーバーが含まれます。

aieo mcp は stdio 経由で読み取り専用のツールを提供します:check、diff、page、explain_rule、list_rules、logs_report、logs_gaps、search_report、indexnow_plan、push_plan。各ツールでは、モノレポ内の 1 つのサイトを対象にするため、任意で project(サーバーの実行場所からの相対パスとなるディレクトリ)を指定できます。マシンの外部に書き込みを行うものはツールではありません。*_plan ツールは aieo indexnow submit --yes または aieo push が実行する内容を示すので、ユーザーが実行してください。

出力とデータ

--format pretty | json | sarif | github | markdown | junit に加え、任意の数の --report FORMAT=PATH(bundle = gzip 圧縮 JSON)を指定できます。JSON とバンドルは aieo-bundle/v1(spec/bundle.schema.json)形式です。含まれるのは検出結果、ページ一覧、対応状況、複数ページのスコアであり、ページソース、未加工のログ、IP アドレスは含まれません。設定に関する検出結果には設定ファイルと行番号(astro.config.mjs:4、vercel.json:12)が含まれるため、SARIF と GitHub のアノテーションは変更すべき設定箇所を示します。

ルールのバージョン

ルールは @aieo/rules(バイナリに埋め込み)から取得されます。パッチリリースでは文言の変更や誤検知の修正が行われ、マイナーリリースではルールが追加され、メジャーリリースでは既存のルールの意味が変更されます。ルール ID は再利用されません。ベースライン作成後に追加されたルール、または対象範囲が拡大されたルール(spec/rules-history.json の changed を参照)による検出結果は new ではなく unknown として報告されるため、aieo のアップグレードだけで aieo diff が失敗することはありません。新しいルールを採用するには、新たにスナップショットを取得してください。

開発

cargo test --workspace
cargo clippy --workspace --all-targets -- -D warnings
# refresh spec/ from aieo.ee's @aieo/rules (in the aieo-v5 monorepo)
pnpm --filter @aieo/rules export:cli <path to this repo>

クレート:aieo-core(仕様、検出結果、設定、バンドル) · aieo-site(本番環境で提供されるビルドディレクトリ:ルート、ホストルール、robots、サイトマップ、HTML、フレームワークのプリセット) · aieo-rules(F / P / T / C / K / D) · aieo-report(フォーマット) · aieo-logs(パーサー、分類、IP 検証、SQLite ストア、Cloudflare GraphQL) · aieo-search(Search Console、Bing Webmaster、IndexNow、認証情報、aieo.ee アップロード) · aieo-cli(aieo バイナリ)。

MIT ライセンスです。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。