MCP, MCP server
Specularis AI Visibility Audit
Run a free AI visibility (GEO/AEO) audit on any website from inside Claude, ChatGPT, or any MCP client — checks whether ChatGPT, Claude & Perplexity can find and cite it, with an instant snapshot and an optional full scored PDF report.
Compatibility: Not stated.
Grade C
One Medium finding. Read the findings before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit 5fa2ba27b36f.
OBFUSCATION_ENCODED_BLOB
Why this grade
- OBFUSCATION_ENCODED_BLOB Medium
Contains a long base64 shaped string in a file that should be readable.
public/catman.html, line 3
@font-face{font-family:'Satoshi';font-weight:500;font-style:normal;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAGP8AA8AAAABIBQAAGOaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Pass
No shell or command execution found, and no extra permission was declared.
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Concern
can reach a host that is not written as a fixed address. can reach api.anthropic.com. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
index.js, line 116
const res = await fetch(url, { ...opts, signal: ctrl.signal, hea
index.js, line 214
const r = await fetch("https://api.anthropic.com/v1/messages", {
index.js, line 393
const r = await fetch("https://api.anthropic.com/v1/messages", {
Show more
index.js, line 551
const r = await fetch("https://api.anthropic.com/v1/messages", {
index.js, line 1162
const r = await fetch("https://api.perplexity.ai/chat/completions", {
index.js, line 1186
const r = await fetch("https://api.anthropic.com/v1/messages", {
index.js, line 1240
const r = await fetch("https://generativelanguage.googleapis.com/v1beta/models/gemini-3.5-flash:generateContent?key=" + GEMINI_API_KEY, {
index.js, line 1275
const r = await fetch("https://api.openai.com/v1/responses", {
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_UNCONFIRMED
index.js, line 93
const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY || ""; // set in Railway Variables
index.js, line 94
const ANTHROPIC_API_KEY = process.env.ANTHROPIC_API_KEY || ""; // set in Railway Variables — adds Claude as a 2nd engine in the citation finder
index.js, line 96
const GEMINI_API_KEY = process.env.GEMINI_API_KEY || ""; // set in Railway Variables — adds Gemini as a 3rd engine in the citation finder
Show more
index.js, line 97
const OPENAI_API_KEY = process.env.OPENAI_API_KEY || ""; // set in Railway Variables — adds ChatGPT as a 4th engine in the citation finder
index.js, line 99
const NOTION_TOKEN = process.env.NOTION_TOKEN || ""; // Notion internal-integration token — logs finder leads
index.js, line 107
const OPPORTUNITY_KEY = process.env.OPPORTUNITY_KEY || ""; // secret gate for the expensive Opportunity Finder batch
index.js, line 108
const BADGE_SECRET = process.env.BADGE_SECRET || "specularis-badge-dev-secret";
index.js, line 344
const DEEP_KEY = process.env.DEEP_KEY || process.env.DASHBOARD_KEY || "";
.gitignore, line 1
node_modules/
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Concern
contains an encoded blob in a file that should be readable.
OBFUSCATION_ENCODED_BLOB
public/catman.html, line 3
@font-face{font-family:'Satoshi';font-weight:500;font-style:normal;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAGP8AA8AAAABIBQAAGOaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
public/docurious.html, line 3
@font-face{font-family:'Satoshi';font-weight:500;font-style:normal;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAGP8AA8AAAABIBQAAGOaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
public/fxmedus.html, line 3
@font-face{font-family:'Satoshi';font-weight:500;font-style:normal;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAGP8AA8AAAABIBQAAGOaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Show more
public/h2o-international.html, line 3
@font-face{font-family:'Satoshi';font-weight:500;font-style:normal;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAGP8AA8AAAABIBQAAGOaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
public/omega-property.html, line 3
@font-face{font-family:'Satoshi';font-weight:500;font-style:normal;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAGP8AA8AAAABIBQAAGOaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
public/pavilion-construction.html, line 3
@font-face{font-family:'Satoshi';font-weight:500;font-style:normal;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAGP8AA8AAAABIBQAAGOaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
public/prospects.html, line 8
@font-face{font-family:'Satoshi';font-weight:500;font-style:normal;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAGP8AA8AAAABIBQAAGOaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
public/savage-flight.html, line 3
@font-face{font-family:'Satoshi';font-weight:500;font-style:normal;font-display:swap;src:url(data:font/woff2;base64,d09GMgABAAAAAGP8AA8AAAABIBQAAGOaAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Licence
Pass
A licence file is present (LICENSE).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit 5fa2ba27b36f. can reach a host that is not written as a fixed address. can reach api.anthropic.com. The description does not name that host. reads a credential or environment file. contains an encoded blob in a file that should be readable.
Date and source
Date checked:
github.com
Commit graded: 5fa2ba27b36f6fc68aec5df9f7c61a80c4171a65
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.