visprobe
README.md
# visprobe
How does an answer engine see your site? visprobe reads a site
the way one does — the crawler policy in `robots.txt`, the
identity files an engine looks for, the signals in the page
itself — and, through the hosted analyzer, whether Claude,
ChatGPT, Gemini and Perplexity actually name the site.
Three tools run entirely on your machine; seven forward to the
hosted analyzer at `https://inite.ai/api/mcp/analyzer`.
## Local tools (no account)
- `check_ai_access(url)` — which AI crawlers `robots.txt` lets
in, split into the answer-engine crawlers (they fetch a page
to answer a live question) and the training crawlers.
Blocking the first kind is what makes a site invisible;
blocking the second costs nothing. The robots rules are
applied properly: the most specific user-agent group wins,
the longest matching rule wins, `Allow` breaks a tie.
- `check_identity_files(url)` — which of the ten identity
files exist at the site root: `/llms.txt`, `/llms-full.txt`,
`/ai.txt`, `/ai.json`, `/identity.json`, `/agent.json`,
`/.well-known/ai.json`, `/.well-known/llms.txt`,
`/.well-known/agent.json`, `/.well-known/ai-plugin.json`.
A file exists when it is served with a 2xx status.
- `check_page_signals(url)` — the page's title, meta
description, canonical, hreflang alternates, and the
Schema.org types in its JSON-LD.
## Remote tools (hosted analyzer)
- `check_identity(url)` — the identity reading with a score out
of 100 and what it says to fix. No model asked.
- `visibility_fixes(url)` — the fix plan, most important first.
- `compare_sites(url, other)` — your site and a competitor's,
read the same way, side by side.
- `visibility_history(url)` — how the reading moved over time.
- `analyze_site(url)` — starts the audit that also asks the
answer engines; returns a `run_id`.
- `get_analysis(run_id)` — progress, then the score out of 100
and what to fix first.
- `my_reports()` — signed in: your audits, newest first.
Remote calls are forwarded as JSON-RPC `tools/call` to the
analyzer endpoint. Set `INITE_MCP_URL` to point at a different
endpoint and `INITE_TOKEN` to send a Bearer token. Without an
account the open tools answer under a per-address allowance
(two a day, per the upstream service's terms).
## CLI
```bash
npx @reneturcios/visprobe check-ai-access stripe.com
npx @reneturcios/visprobe check-identity-files stripe.com
npx @reneturcios/visprobe check-page-signals stripe.com/pricing
npx @reneturcios/visprobe --version
```
Output is the report as JSON. Exit codes: `0` on success, `1`
on a runtime error (including an unreachable site), `2` on a
usage error.
## MCP server
```bash
npx -y @reneturcios/visprobe mcp
```
MCP client config:
```json
{
"mcpServers": {
"visprobe": {
"command": "npx",
"args": ["-y", "@reneturcios/visprobe", "mcp"]
}
}
}
```
## Docker
```bash
docker run -i ghcr.io/cloudcorprecords/visprobe
docker run --rm ghcr.io/cloudcorprecords/visprobe check-page-signals example.com
```
## Development
```bash
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (fake fetch, no network)
npm run dev # run the CLI from source
```
## License
MIT — Copyright (c) 2026 Rene Turcios
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues