Saylent

The MCP server

Let an agent run the audit itself - four tools on stdio, the same pipeline, the same cost guard.

saylent mcp runs a Model Context Protocol server on stdio, so an agent can audit a brand, verify a fix, check bot access and read an existing report itself. It is the same pipeline the CLI runs: same key resolution, same cost estimate before the spend, same max_usd refusal, same summary blocks - handed to the agent as JSON instead of rendered to HTML.

The four tools

ToolWhat it doesCost
auditFull audit of a domain. Writes run.json, report.html, report.md; returns the verdict, the recommended band, the summary blocks, the file paths and the real costYour own credits: about $0.60 to $1.20 with four engines (smoke; our recorded runs cost $0.93 and $1.11) or $3.70 to $5.50 (full)
verifyRe-asks the frozen questions of an existing run.json and writes movement.htmlYour own credits: about the same as the audit it re-runs
gate_checkrobots.txt per bot class, a live per-user-agent probe, JSON-LD, meta directives$0 - no keys, no model calls
read_reportThe summary blocks of a run.json already on disk, whole or one named section$0 - no network, no model calls

Every tool states its cost range in its own description, so the agent knows before it calls. audit and verify check the estimate against max_usd and the daily spend cap before anything reaches a provider, and refuse with the same message the CLI prints.

audit and verify arguments

audit and verify are built from ONE shared argument schema, the same one saylent audit/saylent verify's own flags are generated from (see the CLI reference's --flag column) - the two surfaces can never accept a different argument set. Only domain is required; everything else is optional. Pass dry_run: true on audit for a $0, no-keys, no-network preflight: the question set it would ask and the cost estimate, nothing sent to any provider.

ArgumentTool(s)CLI flagDescription
domainaudit(positional)The brand's domain, for example example.com
brandaudit--brandBrand name (default: the domain)
competitorsaudit--competitorsCompetitor domains/names
profileaudit--profilesmoke (default, 6 questions) or full (23 questions)
enginesaudit--enginesWhich answer engines to ask: chatgpt, claude, gemini, perplexity
questions_fileaudit--questionsPath to a run.json bundle, a questions.json (from saylent questions), or a text file with one question per line, to reuse instead of generating a new set
questionsaudit(none - MCP only)Inline question rows to ask instead of generating a set ({id?, type?, text, samples?}). The CLI takes a file path via the same --questions flag (questions_file above)
samplesaudit, verify--samplesHow many times each scored question is asked (1-5)
judgeaudit, verify--judgeJudge model; its provider family is inferred from the name
judge_familyaudit, verify--judge-familyanthropic | openai, when the judge model name is ambiguous
modelsaudit, verify--modelPer-role model overrides: brand, drafter, chatgpt, claude, gemini, perplexity
localeaudit, verify*--localeTranslate the generated question set into this language once (e.g. "de", "pt-BR"), via the drafter model. No effect when a question set is reused (questions_file/questions)
user_agentaudit, verify*--user-agentOverride the crawler's User-Agent for this run's fetches (crawl, corpus, domain checks)
max_pagesaudit, verify*--max-pagesCap how many crawled pages feed the brand model and corpus (1-200)
allow_privateaudit, verify*--allow-privateAllow the audited site's own host (and its www/apex sibling) to resolve to a private/internal address, for a staging server on your own network. Never on by default
skipaudit, verify*--skipSkip costly stages: drafts, corpus, gates ({drafts,corpus,gates} or a list of stage names)
max_usdaudit, verify--max-usdRefuse to run if the high cost estimate exceeds this many dollars
out_diraudit--outOutput directory (default: ./<domain>/<YYYY-MM-DD>/)
formataudit--formatWhich report files to write: md, html, json (default: all three)
dry_runaudit--dry-runPrint the plan, the questions it would ask (template defaults, $0, no crawl) and the cost estimate. Spends nothing
no_brand_modelaudit--no-brand-modelDocumented for parity with saylent questions; a dry run already always previews with template defaults, so this has no further effect on audit
bundle_pathverify(positional)Path to the baseline run.json (or the directory containing it)

* Accepted on verify for parity with audit (a client that always passes the same argument set to both tools shouldn't error), but have no effect: a verify re-asks the SAME frozen questions and never crawls, fetches corpus, checks gates, or generates a fresh question set.

read_report's section argument also accepts "questions", returning the run's frozen question set alongside the Brief's "hero" and card sections.

Keys are never tool arguments. There is no key parameter on any tool. The server resolves provider keys exactly like the CLI: environment variables, then a .env in its working directory, then ~/.saylent/config.json. Put them in the server definition's env block, or run saylent keys once and leave the definition clean.

Claude Code

claude mcp add saylent -- npx saylent mcp

The server inherits your shell environment, so OPENAI_API_KEY and ANTHROPIC_API_KEY exported in your profile (or already saved by saylent keys) are picked up automatically - no key ever needs to go on the command line, where your shell history would keep it. To pin keys to this server only, run saylent keys set openai / saylent keys set anthropic once so ~/.saylent/config.json holds them, or add them to this server's own config entry as an env block, the same shape the Claude Desktop and Cursor examples below use.

Claude Desktop

Edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json, Windows: %APPDATA%\Claude\claude_desktop_config.json), then restart the app:

{
  "mcpServers": {
    "saylent": {
      "command": "npx",
      "args": ["-y", "saylent", "mcp"],
      "env": {
        "OPENAI_API_KEY": "sk-...",
        "ANTHROPIC_API_KEY": "sk-ant-..."
      }
    }
  }
}

Cursor

Same shape, in ~/.cursor/mcp.json (every project) or .cursor/mcp.json (this project only):

{
  "mcpServers": {
    "saylent": {
      "command": "npx",
      "args": ["-y", "saylent", "mcp"],
      "env": {
        "OPENAI_API_KEY": "sk-...",
        "ANTHROPIC_API_KEY": "sk-ant-..."
      }
    }
  }
}

What you say to the agent

Free, ask any time:

Use saylent to gate-check example.com and tell me which AI bots are blocked.

Read the saylent report in ./example.com/2026-09-09/ and summarize the "who wins instead" section.

These two spend your own provider credits: about $0.60 to $1.20 with four engines for a smoke audit (our recorded runs cost $0.93 and $1.11) and about $3.70 to $5.50 for a full one. Say the profile you want and set a ceiling:

Run a saylent smoke audit of example.com with max_usd 1, then tell me the verdict and the top three fixes.

Ship the JSON-LD fix, then run saylent verify on ./example.com/2026-09-09/run.json with max_usd 1 and tell me what moved.

A long audit narrates itself: the server streams its stages (crawl, brand model, questions, engines, judge, cited pages, site gates, fixes, score) as MCP log notifications while it runs.

On this page