fulcru
Get named by AI search engines.
When someone asks ChatGPT "what's the best CRM for a small team", the answer names two or three products. Those get the customer. Everyone else is invisible.
fulcru finds the questions where an AI assistant names a competitor instead of you, writes the page that closes the gap, and measures what publishing it did. It runs as a CLI, an MCP server, and an agent skill, so a human or an agent can run the whole loop.
This repo is the open, self-hostable agent surface. The measurement engine is the hosted Fulcru service; everything here is a thin client that talks to it with your token.
We run it on ourselves and publish the result, whichever way it goes. Today it scores us 0 out of 34 prompts: we sell AI visibility and we score zero on our own product, with the full run and the source data.
npm install -g fulcru
export FULCRU_TOKEN=pk_... # Settings -> Integrations at fulcru.appOr run it in Docker, with nothing installed on the host:
docker build -t fulcru .
docker run --rm -e FULCRU_TOKEN=pk_... fulcru gapsNo secrets are baked into the image; the token is passed at run time. Verified on node:20-alpine, 2026-07-27.
The loop
$ fulcru gaps
0% k57jc... best AI visibility tracker for a SaaS startup -> AI names Profound, Peec AI
0% k57bw... how do I know if ChatGPT recommends my brand -> AI names Otterly AI
33% k57xz... tools to track brand mentions in Perplexity -> AI names Semrush
Write the top one: fulcru write k57jc...
$ fulcru write k57jc... > page.md # the drafted article, grounded in what AI cites
$ fulcru publish k57jc... https://mysite.com/blog/ai-visibility-trackers
Published. Baseline: AI names you in 0% of 9 measured answers.
$ fulcru delta
That last line is the whole point.
## Commands
| Command | What it does |
|---|---|
| `fulcru gaps [n]` | Questions where AI names a competitor and not you, worst first |
| `fulcru write <promptId>` | Writes the page that closes one gap; Markdown to stdout |
| `fulcru publish <pageId> <url>` | Marks it live and snapshots the baseline to measure from |
| `fulcru delta` | What your published pages actually did |
| `fulcru report [section]` | `overview`, `competitors`, `sources`, `mentions`, `prompts` |Add --json to any command for the raw payload.
Built for agents
Output is terse lines, not JSON blobs, because the caller is usually an LLM and its context is the scarce resource. fulcru gaps costs an agent about 50 tokens; the same data as raw API JSON costs about 800. fulcru write sends the Markdown to stdout and everything else to stderr, so fulcru write <id page.md gives a clean file.
MCP
Two ways to wire the five Fulcru tools into an agent.