grounded-aeo

Audit and fix a site for AI citation + SEO, verify it, then publish a v=AEO1 record.

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
96%
이름 품질
99%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~2,115토큰 (도구 정의)
~400 B일반적인 응답 크기
중간 정도의 주의 영향 (128k 컨텍스트의 1.65%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "grounded-aeo": {
      "url": "https://groundedaeo.com/api/mcp"
    }
  }
}

원격 엔드포인트

https://groundedaeo.com/api/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (15)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢get_company_facts(domain)

Get the verified fact record for a company by domain from the Grounded AEO catalog. Returns the published (approved) facts with verification state and confidence: the data an AI agent should ground answers about this business on.

입력 스키마

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "description": "Company domain, e.g. acme.com"
    }
  },
  "required": [
    "domain"
  ]
}
🟢get_fact(domain, key)

Get a single verified fact for a company by domain and fact key (e.g. "tagline", "description").

입력 스키마

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string"
    },
    "key": {
      "type": "string",
      "description": "Fact key, e.g. \"tagline\""
    }
  },
  "required": [
    "domain",
    "key"
  ]
}
🟢get_llms_txt(domain)

Get the auto-generated llms.txt for a cataloged company: a curated, AI-readable guide to the business.

입력 스키마

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string"
    }
  },
  "required": [
    "domain"
  ]
}
🟢check_aeo_record(domain)

Check any domain (cataloged or not) for a v=AEO1 DNS record at _aeo.<domain>, the open standard (aeorecord.org) declaring whether a verified fact record exists and at what trust tier. Verifies the Ed25519 sig= against the live catalog content when present.

입력 스키마

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string"
    }
  },
  "required": [
    "domain"
  ]
}
🟢check_serp(keyword)

Check the live Google search results for any keyword: the top 10 organic results (rank, domain, title), the People Also Ask questions, related searches, and which non-organic blocks occupy the page, so you can tell whether a query has an AI Overview or local pack slot at all. Public data, no catalog entry required. A keyword with genuinely no results returns empty arrays, which is a real finding, not an error.

입력 스키마

{
  "type": "object",
  "properties": {
    "keyword": {
      "type": "string",
      "description": "Search query, e.g. \"roof repair denver\""
    }
  },
  "required": [
    "keyword"
  ]
}
🟢search_catalog(query)

Search the Grounded AEO catalog by company name or domain. Returns up to 10 matches with tier and verification state.

입력 스키마

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Name or domain fragment"
    }
  },
  "required": [
    "query"
  ]
}
🟢get_competitive_snapshot(domain)

Get the latest competitive intelligence for a cataloged domain: the owner's most recent ranking-footprint snapshot, the AI-prompt vs Google demand table for its watched keywords, and each tracked competitor with their own latest snapshot. Read-only. Only domains whose owner has claimed them are exposed; anything else returns found:false. Counts are ranking FOOTPRINT, never traffic, and every volume is a modelled estimate. A null means no estimate has been collected, never zero.

입력 스키마

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "description": "Company domain, e.g. acme.com"
    }
  },
  "required": [
    "domain"
  ]
}
🟢propose_briefs(domain)

Propose ranked content briefs for a cataloged domain, built from data already collected for it: tracked questions where the answer did not cite them, keywords with AI-prompt demand no tracked question covers, People Also Ask questions nothing answers, and terms asked far more of AI assistants than of Google. Each brief names the exact question to answer, a format (9:16 UGC video, on-site answer, or short post), an outline, and the ONLY claims that may be made: the owner's published verified facts, verbatim. Deterministic and read-only: no new data is fetched and nothing is generated, so a brief with no evidence behind it is never returned. Claimed domains only; up to 6 briefs; an empty list means there is not yet enough collected data, never that there is no opportunity.

입력 스키마

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "description": "Company domain, e.g. acme.com"
    }
  },
  "required": [
    "domain"
  ]
}
🟡generate_fixes(domain)

Get the paste-ready patches Grounded AEO generated from its own measurements of a cataloged domain: per-page <title>/<meta description> blocks for pages the crawl flagged, robots.txt Allow lines for AI crawlers measured as blocked, FAQPage/Organization JSON-LD built from published verified facts, and an /llms.txt file. Every line is the site's own text, the owner's published facts, or a measurement — no language model wrote any of it, and a patch that could not be built honestly is skipped and counted rather than guessed. USE THIS TO ACT: if you have write access to the site's codebase, apply each patch to the file that serves its path, then re-run run_audit to confirm. Claimed domains only; deterministic and read-only on our side.

입력 스키마

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "description": "Company domain, e.g. acme.com"
    }
  },
  "required": [
    "domain"
  ]
}
🟢get_engine_visibility(domain)

Get the per-engine picture for a cataloged domain: whether each AI engine's crawler is allowed by robots.txt to read the site at all, and how many of the tracked questions that engine cited it on. Claimed domains only. Nothing is assumed: an engine with no crawl measurement reports can_read:null ("not measured", never an assumed allow), and an engine with no citation checks reports cited/tracked null ("untested", never a miss and never zero). Access and citations only: this says nothing about traffic.

입력 스키마

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "description": "Company domain, e.g. acme.com"
    }
  },
  "required": [
    "domain"
  ]
}
🟢get_citations(domain)

Get the latest citation check per (question, engine) for a cataloged domain: the question asked, the engine, whether the answer cited this domain, the URL of theirs it cited, and the day checked. Claimed domains only, read-only, one row per cell so re-running the checker cannot inflate anything. The engine answers are stored verbatim as the evidence behind each verdict but are NOT served here; the owner sees those in their dashboard. An empty list means no check has run yet, never "never cited".

입력 스키마

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "description": "Company domain, e.g. acme.com"
    }
  },
  "required": [
    "domain"
  ]
}
🟢get_cited_domains(domain)

Get who the answers cited instead: the domains that appeared in the stored answers for a cataloged domain's tracked questions, ranked by how many answers cited them, with the engines that did. Claimed domains only. An appearance means a domain was cited by an answer we asked for: not an endorsement, not a quality ranking, not a claim that an engine prefers it. One appearance per answer however many of that site's pages it cited, latest check per cell only, and answers with no captured evidence contribute nothing rather than counting as "cited nobody".

입력 스키마

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "description": "Company domain, e.g. acme.com"
    }
  },
  "required": [
    "domain"
  ]
}
🟢get_keyword_gap(domain)

Get the keyword gap for a cataloged domain: phrases a tracked competitor holds a position for in our stored captures where this domain holds none ("absent"), or holds one at least 20 places further back ("behind"). Claimed domains only, computed from captures already on disk. Nothing is fetched and nothing is spent. The stored lists are a SAMPLE of each domain's footprint (the top rows a capture kept), so absence here is absence from our sample, never from public search; the response carries that sentence and it must be repeated wherever the result is shown. Positions are ranking footprint, never traffic.

입력 스키마

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "description": "Company domain, e.g. acme.com"
    }
  },
  "required": [
    "domain"
  ]
}
🟡run_audit(domain)

Audit AND FIX a site for AI citation + SEO. Crawls the domain, scores AI-readability 0-10, checks for a v=AEO1 record, and returns the material needed to FIX it: `seoReport.headSnippet` is ready-to-paste <head> markup (title, meta description, Organization JSON-LD) and `setup_prompt` is a step-by-step plan covering llms.txt, structured data, and AI-crawler access, plus a ranked list of gaps. Use it to build the fixes, apply them to the site, then CALL THIS AGAIN to verify the score improved and the gaps cleared. WRITE action (queues extracted facts, unverified until a human approves). Free, no account, rate-limited to 5/hour per caller.

입력 스키마

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "description": "Domain to audit, e.g. acme.com"
    }
  },
  "required": [
    "domain"
  ]
}
🟡generate_free_record(domain, name, category, address, hours, ...)

FINAL STEP of making a site AI-citable: generate a free, self-declared v=AEO1 DNS record and .well-known/aeo.json the user publishes on their own domain, so AI engines can verify the facts came from the owner rather than a scrape. Returns the exact TXT record and JSON file with publishing instructions. No crawl, no verification, no account. WRITE action, rate-limited to 10/hour per caller.

입력 스키마

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string"
    },
    "name": {
      "type": "string",
      "description": "Business name"
    },
    "category": {
      "type": "string"
    },
    "address": {
      "type": "string"
    },
    "hours": {
      "type": "string"
    },
    "services": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "domain",
    "name"
  ]
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 15개
검증됨버전이 기록되지 않음도구 15개