geoaeo for Muse
Connect the geoaeo MCP server to Muse. Audit a site and generate GEO and AEO artifacts from the agent.
What you get
- CLI bins:
geoaeoandgeoaeo-mcp - CLI commands:
audit,init,gen,humanize,mcp. No other commands exist. - MCP server command:
npx -y geoaeo mcpover stdio - MCP tools:
audit,gen,humanize
Prerequisites
- Node.js 20 or later
- Muse installed (codex on PATH)
- A site directory or URL to audit
Install the plugin
Codex uses the same marketplace as /plugin marketplace add pooriaarab/usegeoaeo. Run these commands in your terminal:
codex plugin marketplace add pooriaarab/usegeoaeo
codex plugin add geoaeo@geoaeoThe plugin starts npx geoaeo mcp over stdio. MCP tools are audit, gen, and humanize.
The TOML paste below is the fallback if you want to wire the server by hand.
Install geoaeo
# one-off
npx geoaeo audit ./ --json
# or add to the project
npm install -D geoaeo
npx geoaeo --help
# verify the MCP server starts (it waits on stdin; Ctrl+C to stop)
npx -y geoaeo mcpYou do not run geoaeo mcp by hand when Codex manages it.
Configure the MCP server
Codex reads MCP servers from ~/.codex/config.toml. Add a mcp_servers.geoaeo entry. Codex uses TOML for this file, not JSON.
Copy this block into ~/.codex/config.toml:
[mcp_servers.geoaeo]
command = "npx"
args = ["-y", "geoaeo", "mcp"]If your Codex build reads JSON config, the equivalent JSON is:
{
"mcp_servers": {
"geoaeo": {
"command": "npx",
"args": ["-y", "geoaeo", "mcp"]
}
}
}Apply the change and restart Codex:
mkdir -p ~/.codex
cat ~/.codex/config.toml
codex --helpStart a new Codex session and confirm the server loads. Run codex mcp list if your build supports it, or check the startup log for geoaeo: connected.
Verify the connection
- Open the repo with
codex. - Ask: "List available MCP tools."
- Confirm
audit,gen, andhumanizeappear undergeoaeo.
If no tools appear, see Troubleshooting.
Walkthrough 1 — audit a site
Prompt the agent:
Use geoaeo audit on https://example.com and summarize the score and the top 3 fixes. If that URL is not reachable, audit ./ instead.
What the agent does:
- Calls
auditwith{"target": "https://example.com"}or{"target": "./"}. - Receives JSON with
score,checks[],topFixes[]. - Reports the score and the fixes.
Equivalent CLI:
npx geoaeo audit https://example.com --json
npx geoaeo audit ./ --jsonUse topFixes to choose the next gen call.
Walkthrough 2 — generate an artifact with gen
This uses gen, which reads geoaeo.config.ts in the current working directory.
- Scaffold config if missing:
npx geoaeo init ./ cat geoaeo.config.ts - Prompt the agent:
Use geoaeo gen to create the sitemap for this site. Then write it to public/sitemap.xml.
What the agent does:
- Calls
genwith{"artifact": "sitemap"}. - Receives XML text.
- Writes it to
public/sitemap.xml(or shows it for review).
Other artifacts:
{"artifact": "llms"}{"artifact": "llms-full"}{"artifact": "robots"}{"artifact": "webmcp"}{"artifact": "jsonld", "type": "software"}— type may besoftware,product,faq, orbreadcrumb
Equivalent CLI:
npx geoaeo gen llms
npx geoaeo gen sitemap -o ./public/sitemap.xml
npx geoaeo gen jsonld --type faqThe humanize tool is also available: {"glob": "content/**/*.md", "write": false}.
Troubleshooting
Config file not loaded. Confirm the path is ~/.codex/config.toml. Run ls -la ~/.codex/config.toml and cat ~/.codex/config.toml. Ensure the header is exactly [mcp_servers.geoaeo]. Restart Codex.
npx fails or hangs. Run npx -y geoaeo mcp manually. It should wait on stdin. Press Ctrl+C. If it fails, update Node to 20+ and check npm registry access.
audit returns Cannot find target. Use an absolute path or a full https URL. For local dirs, run from the repo root so ./ resolves correctly.
gen returns Cannot find config. Run npx geoaeo init ./ in the project root.
Tools appear but calls time out. Check that stdio is not blocked by a wrapper script. Use the exact command npx with args ["-y", "geoaeo", "mcp"].
Reference
- Package:
geoaeo. Bins:geoaeo,geoaeo-mcp. - Transport: stdio only.
- Tools:
audittakestarget(string).gentakesartifactenum and optionaltypeenum.humanizetakesglob(string) and optionalwrite(boolean).