Atlas / MCP servers / 110kc3 / seo

seoCAUTION

mcp/110kc3/seo

Open registry and discovery API for AI products, agent tools, and MCP services.

Verdict
CAUTION
Grade
C
Trust score
75 /100
Exposed tools
5 5r · 0w · 0d
Transport
streamable-http
License
—
Stars
1
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

An open registry and discovery API for AI products, agent tools, and MCP services.

Live index · JSON registry · OpenAPI document · MCP server card

AI Product Index publishes each accepted listing as structured HTML and JSON, then makes the registry available through search, NLWeb, MCP, feeds, sitemaps, and llms.txt. Products can register through a validated GitHub issue workflow; accepted changes are rebuilt, committed, and deployed automatically.

Interpreting discovery and scores

The MCP browser exposes authentication and transport filters; the x402 browser filters published USD-equivalent prices. Result cards show dated failed probes, unknown health and connection guidance. No credentials does not mean free, and an HTTP response does not prove successful authentication or tool execution.

The score measures technical checklist coverage, not AI visibility or referrals. Results separate site information from optional service interfaces and link to the free remedies. Numeric scores, check weights and A–F thresholds are unchanged; only the coverage descriptions and applicability guidance have changed.

What it provides

  • A public, machine-readable registry with one canonical page and JSON document per product.
  • Ranked search over names, descriptions, tags, categories, and pricing models.
  • Natural-language queries through an NLWeb-compatible endpoint.
  • A remote MCP server for product discovery, URL scoring, catalog search, and registration guidance.
  • A free agent-readability score covering llms.txt, structured data, crawler policy, discovery manifests, content negotiation, canonical URLs, and HTTPS.
  • Searchable MCP-server and x402-endpoint catalog snapshots with sampled availability d
Read from source at commit adeff66e8211OBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add ai-product-index --env CF_ANALYTICS_TOKEN=${CF_ANALYTICS_TOKEN} --env CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN} --env CLUSTLY_API_KEY=${CLUSTLY_API_KEY} --env DASHBOARD_TOKEN=${DASHBOARD_TOKEN} -- npx -y ai-product-index
claude-desktop
{
  "mcpServers": {
    "ai-product-index": {
      "command": "npx",
      "args": [
        "-y",
        "ai-product-index"
      ],
      "env": {
        "CF_ANALYTICS_TOKEN": "${CF_ANALYTICS_TOKEN}",
        "CLOUDFLARE_API_TOKEN": "${CLOUDFLARE_API_TOKEN}",
        "CLUSTLY_API_KEY": "${CLUSTLY_API_KEY}",
        "DASHBOARD_TOKEN": "${DASHBOARD_TOKEN}"
      }
    }
  }
}
03

Exposed tools (5)

5 read · 0 write · 0 destructive.

ToolRiskDescription
agent_readability_scorereadScore how readable a website is to AI agents: A-F plus which of 13 checks
get_productreadFetch one listing from the AI Product Index by slug, with every published field.
how_to_registerreadReturns the exact steps and schema for registering a product in the index — autonomous, free, no human approval.
search_ai_productsreadSearch the AI Product Index — a directory of AI products, APIs, agents and
search_productsreadSearch ${base} — a directory of AI products, APIs, agents and MCP servers that register themselves. Returns matching listings with their URLs and machine-readable endpoints.
04

Trust audit

CAUTIONgrade C · trust 75/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (5 observation(s))
Shell
none-observed
Dependencies
pinned
Secrets in source
found

Findings (25)

MEDIUMInventory / provenance · inv.binary · CWE-1104
clients/__pycache__/crewai_tool.cpython-311.pyc
crewai_tool.cpython-311.pyc
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
clients/__pycache__/langchain_tool.cpython-311.pyc
langchain_tool.cpython-311.pyc
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
clients/__pycache__/llamaindex_tool.cpython-311.pyc
llamaindex_tool.cpython-311.pyc
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
clients/__pycache__/pay_x402.cpython-311.pyc
pay_x402.cpython-311.pyc
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/verify-rail.mjs:165
console.log(`on chain:     name=${JSON.stringify(token.name)} symbol=${JSON.stringify(token.symbol)} decimals=${token.decimals} version=${JSON.stringify(token.version)}`);
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
scripts/score-listings.test.mjs:7
const token = 'test-operations-token';
LOWInventory / provenance · inv.hidden_file · CWE-1104
.assetsignore
.assetsignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.nojekyll
.nojekyll
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.no_license · CWE-1104
Why it matters. no LICENSE file and no repo licence
Fix. add a licence
LOWInventory / provenance · inv.symlink · CWE-1104
AGENTS.md
AGENTS.md
Why it matters. link not followed
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/process-issue.test.mjs:344
const r = await run(dir, issue(listing({ slug: '../../../etc/passwd' })));
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
scripts/validate.test.mjs:68
'http://169.254.169.254/latest',
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
scripts/worker.test.mjs:1235
assert.equal((await call('?url=http://169.254.169.254/')).status, 400);      // cloud metadata
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
scripts/worker.test.mjs:1585
'http://127.0.0.1/', 'http://10.0.0.5/', 'http://192.168.1.1/', 'http://169.254.169.254/',
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/clustly-agent.test.mjs:76
const api = fakeApi({ awaiting_acceptance: [order({ inputs: { url: 'http://192.168.1.1/admin' } })] });
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/retirement.test.mjs:67
method: 'POST', body: JSON.stringify({ url: 'http://127.0.0.1' }),
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/route.test.mjs:190
for (const bad of ['http://localhost/x', 'https://192.168.1.1/x', 'file:///etc/passwd', 'not-a-url']) {
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/score-listings.test.mjs:70
assert.equal((await call(env, 'https://127.0.0.1/', auth)).status, 400);
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/validate.test.mjs:64
'http://127.0.0.1/x',
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
scripts/worker.test.mjs:328
assert.deepEqual(x402.b64decode(x402.b64encode(payload)), payload);
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
scripts/worker.test.mjs:379
const required = x402.b64decode(res.response.headers.get('PAYMENT-REQUIRED'));
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
scripts/worker.test.mjs:551
const header = x402.b64decode(res.response.headers.get('PAYMENT-REQUIRED'));
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
worker/cdp-auth.js:29
const bin = atob(norm.padEnd(Math.ceil(norm.length / 4) * 4, '='));
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
worker/route.js:90
return JSON.parse(atob(String(value)));
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
TODO.md:359
7. **Submit `110kc3/seo` at https://glama.ai/mcp/servers/add** — browser + GitHub OAuth, ~2 minutes. This is now a **blocker on PR #11152**, not an optional channel: the `glama-check` bot requires the
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine

Gates applied: no_behavioural_pass, no_license.

Audited 2026-10-11 · audit v0.4.1 · source sha adeff66e8211full audit observations/trust-audit/mcp-server/110kc3__seo.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-11adeff66e8211CAUTIONC75first audit
06

Questions

What is the seo MCP server?

Open registry and discovery API for AI products, agent tools, and MCP services.

What tools does seo expose?

5 in total: 5 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is seo safe to connect to an agent?

With care. The audit graded it C (75/100) and found 25 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does seo need?

It reads CF_ANALYTICS_TOKEN, CLOUDFLARE_API_TOKEN, CLUSTLY_API_KEY, DASHBOARD_TOKEN, EVM_PRIVATE_KEY and GITHUB_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does seo run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as ai-product-index.

How current is this page?

The grade is for one exact copy of the source (adeff66e8211), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement