# TofuBofu AI Visibility

> Free AI visibility scan for any B2B company: see how often AI engines recommend it, plus the fixes.

- name: com.tofubofu/ai-visibility
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 73/100 flags: no-repository
- quality: 85/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.tofubofu%2Fai-visibility
- tools: https://api.protogrid.dev/v1/servers/com.tofubofu%2Fai-visibility/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "ai-visibility": {
      "type": "http",
      "url": "https://tofubofu.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 65
- provenance: 45
- drivers: +dns-namespace +reachable +uptime-100% ~updated-96d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 85/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 1 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 2 of 2 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 1 of 2 tools declare all four hints; missing: get_visibility_report (destructiveHint, idempotentHint)
- pass `tools.token_cost`: about 1,438 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 1 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 2, about 1,438 tokens to load them all
- tool set hash: 9b822c6d6be97705931a03ddd6d756d7
- tools last changed: 2026-09-25T07:23:16.008Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.tofubofu/ai-visibility.svg)](https://protogrid.dev/servers/com.tofubofu/ai-visibility)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-09-25 `scan_ai_visibility` changed (inputSchema)

Full history: https://api.protogrid.dev/v1/servers/com.tofubofu%2Fai-visibility/changes

## Remotes

- https://tofubofu.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (2)

- `get_visibility_report`: Fetch the results of an AI-visibility scan started with scan_ai_visibility.

    Args:
        report_id: The id returned by scan_ai_visibility.

    Returns:
        While running: {status: "running", progress}. When done: the visibility
        score, how often AI mentions the brand, share of voice, top competitors
        winning the answers, and the highest-priority fixes, plus the report_url.
    
- `scan_ai_visibility`: Start a free AI-visibility scan for a B2B company's website.

    Checks how often AI engines (ChatGPT, Claude, Perplexity, Gemini, Google AI
    Mode, Microsoft Copilot) name the company when buyers ask for vendor
    recommendations, and finds the gaps. The scan runs in the background
    (roughly 1-2 minutes); call get_visibility_report with the returned
    report_id to read the score and findings.

    ASK THE USER for geo_scope and sells_to before calling, if you do not
    already know them. Everything past `email` is optional and the scan runs
    without it, but geo_scope changes EVERY question we generate: a firm that
    sells across one country, scored on one city's questions, looks invisible
    when it is not. Guessing is worse than asking, and asking costs one line of
    conversation. Where you do not know, omit the field rather than inventing a
    plausible value: an omitted field is recorded as unknown, and the report
    says its framing was assumed.

    Every parameter carries its own description, generated from the one intake
    contract the in-app scan form renders from, so what you are told here and
    what a customer is asked are the same question.

    Returns:
        report_id, a report_url to view live, whether an existing report was
        reused (free scan already used this month), and which intake answers
        were missing, so you can offer to re-run with them.
    
