MCPcopy Index your code
hub / github.com/Canonry/canonry

github.com/Canonry/canonry @v4.51.4

Chat with this repo
repository ↗ · DeepWiki ↗ · release v4.51.4 ↗ · + Follow
4,115 symbols 13,532 edges 762 files 175 documented · 4% updated 2d agowp-traffic-logger-v1.0.0 · 2026-05-21★ 7427 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Canonry Canonry canary icon

npm version Node.js >= 22.14

Agent-first AEO operating platform. Open source. Self-hosted.

  • Track citations across Gemini, ChatGPT, Claude, Perplexity, and local LLMs
  • Watch AI engines crawl and refer traffic via server-log ingestion — Cloud Run, Vercel, and the WordPress Traffic Logger plugin today
  • Diagnose against real traffic with built-in GSC, GA4, and Bing Webmaster
  • Execute fixes via WordPress, JSON-LD schema, and indexing submissions
  • Manage many clients declaratively — config-as-code YAML + cnry apply
  • Schedule recurring visibility checks AND traffic syncs, with webhook alerts on regressions
  • Generate client-ready HTML reports — cnry report <project>
  • Drive from your own agent via the 67-tool MCP adapter or webhooks
  • Or use Aero — Canonry's built-in agent that wakes up after every run

Every dashboard view has a matching CLI command and API endpoint. The CLI is the surface; the UI consumes the same API your agent does.

Canonry Dashboard

Run your first AI visibility check in 5 minutes

npm install -g @ainyc/canonry
cnry init
cnry serve

The CLI installs as cnry (short form) and canonry — the two are interchangeable.

Open http://localhost:4100/setup. A guided wizard walks you through provider keys, project setup, queries, and your first visibility check.

Prefer the terminal?

cnry project create my-site --domain example.com
cnry query add my-site "your first query" "second query"
cnry run my-site --wait
cnry evidence my-site
cnry insights my-site

Or set it up with your AI coding agent

Drop this into Claude Code, Codex, or any shell-capable agent. It installs canonry, runs your first sweep, audits your site for AEO readiness, and stops for your sign-off before taking any action on your behalf:

Set up canonry for me. Canonry is an open-source platform that tracks how AI answer engines (Gemini, ChatGPT, Claude, Perplexity) cite my site.

1. Ask me for: my domain, 3–5 queries I want to track, and which provider I want to start with (gemini / openai / claude / perplexity). Wait for my answers before proceeding.
2. Run `npm install -g @ainyc/canonry`.
3. Run `cnry init` in this directory. This scaffolds config and installs the canonry skills into `.claude/skills/canonry/`, `.claude/skills/aero/`, `.codex/skills/canonry/`, and `.codex/skills/aero/`. If the skills aren't there afterwards, run `cnry skills install`.
4. Read the operator playbook at `.claude/skills/canonry/SKILL.md` and follow it end-to-end: create the project with my domain and queries, wire up the provider key I chose, and trigger the first sweep.
5. Open my browser to the dashboard so I can see the run results.
6. Switch to the analyst playbook at `.claude/skills/aero/SKILL.md` and run a baseline AEO audit on my behalf. Read citation evidence with `cnry evidence <project> --format json`, then run `npx @ainyc/aeo-audit "<my-domain>" --format json` for a site-readiness score.
7. Summarize what you found: my mention and citation rates per provider, the top 3 queries I'm not yet cited on, and the highest-impact site issues from the audit. Ask me for permission before taking any further action, such as drafting content, submitting URLs for indexing, editing files, or anything else that changes my site.

One-click copy at canonry.ai.

If you get stuck

Problem Fix
No provider key configured Grab a free Gemini key, set GEMINI_API_KEY, restart cnry serve.
No results after a run Visibility checks are async — check the Runs tab or use cnry run <project> --wait.
Not sure what queries to test Setup wizard auto-generates them; expand the basket later with cnry discover run <project> --icp "..." — see the discovery methodology.
npm install fails on node-gyp Install build tools for better-sqlite3 (guide).

Provider keys

Provider Key source Env var
Gemini aistudio.google.com GEMINI_API_KEY
OpenAI platform.openai.com OPENAI_API_KEY
Claude console.anthropic.com ANTHROPIC_API_KEY
Perplexity perplexity.ai/settings/api PERPLEXITY_API_KEY
Local LLMs Any OpenAI-compatible endpoint LOCAL_LLM_URL

Configure during cnry init, in the dashboard /settings, or as env vars.

Documentation

Architecture & data model docs/architecture.md · docs/data-model.md
Aero — built-in agent skills/aero/SKILL.md
MCP — Claude Desktop / Cursor / Codex docs/mcp.md
Integrations GSC · GA4 · Bing · WordPress · Server-side traffic (Cloud Run + Vercel + WordPress logs)
Deployment — Docker, Railway, Render, systemd, Tailscale docs/deployment.md
API — 118+ endpoints GET /api/v1/openapi.json (no auth)
Skills bundle for Claude Code / Codex cnry skills install (details)
Roadmap & ADRs docs/roadmap.md · docs/adr/
All docs docs/README.md

Requirements

Node.js ≥ 22.14.0. At least one provider API key.

Contributing

git clone https://github.com/ainyc/canonry.git && cd canonry
pnpm install && pnpm run typecheck && pnpm run test && pnpm run lint

See CONTRIBUTING.md.

License

FSL-1.1-ALv2. Free to use, modify, and self-host. Each version converts to Apache 2.0 after two years.

Extension points exported contracts — how you extend this code

ParsedCidr (Interface)
CIDR pre-parsed into the form needed for fast membership checks.
packages/integration-traffic/src/ip-verify.ts
Ctx (Interface)
* Probe runs (`runs.trigger = 'probe'`) write snapshots so an operator can * inspect what a provider returned, but they
packages/api-routes/test/probe-exclusion.test.ts
MigrationVersion (Interface)
* Each entry describes one migration version. Statements are run in order * within the version; if any fail the versio
packages/db/src/migrate.ts
Observed (Interface)
* After the hey-api migration the SDK calls `fetch(new Request(...))` — * a single `Request` object instead of `(url, i
apps/web/test/api-fetch-headers.test.ts
SeededProject (Interface)
(no doc)
packages/canonry/test/cli-content.test.ts
EmbedRequestOpts (Interface)
(no doc)
packages/provider-gemini/src/embeddings.ts
LocalConfig (Interface)
(no doc)
packages/provider-local/src/types.ts
GA4AggregateSummary (Interface)
(no doc)
packages/integration-google-analytics/src/ga4-client.ts

Core symbols most depended-on inside this repo

run
called by 1004
packages/canonry/src/job-runner.ts
parse
called by 861
packages/canonry/src/commands/wordpress.ts
get
called by 786
packages/canonry/src/provider-registry.ts
errorResponse
called by 236
packages/api-routes/src/openapi-schemas.ts
validationError
called by 201
packages/contracts/src/errors.ts
stringOption
called by 180
packages/canonry/src/cli-command-helpers.ts
migrate
called by 149
packages/db/src/migrate.ts
invoke
called by 146
packages/canonry/src/client.ts

Shape

Function 3,052
Interface 548
Method 432
Class 82
Enum 1

Languages

TypeScript96%
PHP4%

Modules by API surface

packages/api-client-generated/src/generated/@tanstack/react-query.gen.ts282 symbols
packages/canonry/src/client.ts177 symbols
packages/api-client-generated/src/generated/sdk.gen.ts177 symbols
apps/web/src/api.ts150 symbols
packages/api-routes/src/report-renderer.ts63 symbols
packages/wordpress-traffic-logger-plugin/test/lib/WpShim.php58 symbols
packages/integration-wordpress/src/wordpress-client.ts57 symbols
packages/api-routes/src/report.ts42 symbols
packages/canonry/src/snapshot-service.ts35 symbols
packages/canonry/src/agent/session-registry.ts34 symbols
apps/web/src/pages/ProjectPage.tsx34 symbols
packages/canonry/src/commands/wordpress.ts33 symbols

Datastores touched

aeo_platformDatabase · 1 repos

For agents

$ claude mcp add canonry \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page