Koskamo

aipozi MCP

The aipozi MCP server integrates AI visibility tracking into Claude, ChatGPT, and Cursor. It provides daily briefings on whether major AI assistants recommend the user's sites, identifies competitors, and offers actionable coding prompts to improve search presence. Users can query specific AI answers, track trends, and implement fixes within their development environment.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

aipozi MCP logo, by aipoziVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by aipozi
You need:Sign in onceallow access
MCP endpoint (Streamable HTTP)
https://aipozi.com/mcp
Vendor documentation

What you can do with it

  • Receive daily briefings on AI recommendations for specific sites
  • Query exact answers from ChatGPT, Claude, Gemini, and Perplexity
  • Identify competitors recommended instead of the user's site
  • Implement coding fixes for top visibility moves in Claude Code or Cursor

Source and maintenance

Vendor evidenceRegistry 1.0.1
Maintenance checked

Protocol and capabilities

Server
aipozi 1.0.0
MCP protocol
2025-06-18
Tools
14 advertised
Resources
1 advertised
Resource templates
0 advertised
Prompts
3 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

aipozi shows whether ChatGPT, Claude, Gemini and Perplexity name the person's own websites, from checks it runs every morning at 05:00 GMT (this server reads them; it never runs a check). For "how am I doing" or a morning briefing, start with briefing. For questions and results use questions; for an AI's exact words, ai_answer (quote them as that AI's words); for competitors, rivals and rival_detail; over time, trend. To improve: action_plan, then build_prompt to implement a move in the coding session, then mark_move_done once it has shipped. For domain availability always use check_domain; never guess from DNS or memory. domain_age, domain_rating and ai_crawler_access work for any site without signing in. Ask one short question when the site is unclear. Only the person's own sites are reported; adding sites, editing questions and billing are in app.aipozi.com.

Tools

14 advertised

briefing — Today's briefing
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

The daily aipozi read for all of the person's sites, or one: for each site, how many of today's answers from ChatGPT, Claude, Gemini and Perplexity named it (and gave its address) and the change since yesterday, per AI; the questions it was named for today and by which AI; the questions lost since yesterday; new rivals (name, age, DR, what they do, which questions they took); the site's DR; what changed since a move was shipped; and today's best move. Stamped with the check time. Use it first for "how am I doing", "read me my aipozi briefing", or a scheduled morning briefing (for example a task every weekday at 07:00: "run daily_briefing from aipozi"). Checks run every morning at 05:00 GMT; this tool never runs one.

briefing input schema
{
  "type": "object",
  "properties": {
    "site": {
      "type": "string",
      "description": "Which of your sites: its domain (\"biotree.bio\"), its id from list_my_sites (\"biotree-bio\") or its name. Leave it out when the person has one site."
    }
  },
  "additionalProperties": false
}
briefing output schema
{
  "type": "object",
  "required": [
    "view"
  ],
  "properties": {
    "date": {
      "type": "string",
      "description": "Today (YYYY-MM-DD)."
    },
    "view": {
      "enum": [
        "briefing",
        "none"
      ],
      "type": "string",
      "description": "What this answer is; \"none\" for a question back, a plain no, or nothing there yet (see message)."
    },
    "sites": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "dr": {
            "type": [
              "number",
              "null"
            ],
            "description": "The site's Ahrefs Domain Rating."
          },
          "date": {
            "type": [
              "string",
              "null"
            ],
            "description": "The check's day, YYYY-MM-DD ."
          },
          "lost": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "description": "Questions named yesterday and not today: { promptId, question, ais }."
          },
          "plan": {
            "type": "string",
            "description": "owner, pro (paid, $29 a month) or free."
          },
          "delta": {
            "type": [
              "number",
              "null"
            ],
            "description": "Named, change since the day before; null without a day before."
          },
          "named": {
            "type": [
              "number",
              "null"
            ],
            "description": "Answers that named the site."
          },
          "domain": {
            "type": "string",
            "description": "The site."
          },
          "linked": {
            "type": [
              "number",
              "null"
            ],
            "description": "Answers that gave its address."
          },
          "market": {
            "type": [
              "string",
              "null"
            ],
            "description": "Where its questions are asked from, or null for worldwide."
          },
          "siteId": {
            "type": "string",
            "description": "The site id."
          },
          "answers": {
            "type": [
              "number",
              "null"
            ],
            "description": "Answers in the check (questions x 4 AIs)."
          },
          "engines": {
            "type": "object",
            "properties": {},
            "description": "Per AI, one tick per question: 2 named with address, 1 named, 0 not named.",
            "additionalProperties": true
          },
          "bestMove": {
            "type": "object",
            "properties": {},
            "description": "Today's best move: { id, rank, title, kind }, or null.",
            "additionalProperties": true
          },
          "namedFor": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "description": "Questions named for today: { promptId, question, ais }."
          },
          "checkedAt": {
            "type": [
              "string",
              "null"
            ],
            "description": "When the check finished (ISO)."
          },
          "freshness": {
            "type": "object",
            "properties": {},
            "description": "{ state, stamp, line }: when the data is from and when the next check runs.",
            "additionalProperties": true
          },
          "newRivals": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "description": "Young rivals: { domain, name, ageDays, dr, whatTheyDo, engines, questions, locked }."
          },
          "perEngine": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "description": "Per AI: { ai, label, named, linked, answers }."
          },
          "sinceShipped": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            },
            "description": "Moves marked done and what changed since: { moveId, title, day, url, delta, line }."
          }
        },
        "description": "One site's day.",
        "additionalProperties": true
      },
      "description": "One per site."
    },
    "totals": {
      "type": "object",
      "properties": {},
      "description": "All sites: { named, answers, delta }.",
      "additionalProperties": true
    },
    "message": {
      "type": "string",
      "description": "When view is \"none\": what to tell the person."
    },
    "drCredit": {
      "type": "string",
      "description": "Domain Rating by Ahrefs (ahrefs.com)."
    }
  },
  "description": "The briefing.",
  "additionalProperties": true
}
briefing annotations
{
  "title": "Today's briefing",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
list_my_sites — My sites
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Every site the person watches in aipozi: its id, plan (paid or free), market, last check time, how many answers named it and gave its address, per AI, its DR and the last 7 days. Use it to see which sites exist, or to get a site id for another tool.

list_my_sites input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_my_sites output schema
{
  "type": "object",
  "required": [
    "view"
  ],
  "properties": {
    "view": {
      "enum": [
        "sites",
        "none"
      ],
      "type": "string",
      "description": "What this answer is; \"none\" for a question back, a plain no, or nothing there yet (see message)."
    },
    "sites": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "{ siteId, domain, brand, plan, market, lastCheck, named, linked, answers, perEngine, dr, trend7, freshness }."
    },
    "message": {
      "type": "string",
      "description": "When view is \"none\": what to tell the person."
    }
  },
  "description": "The sites.",
  "additionalProperties": true
}
list_my_sites annotations
{
  "title": "My sites",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
questions — My questions and results
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

One site's questions (up to 10) and, for each, the result from each AI in the latest check (named with the address, named, address given but not named, not named), how many AIs named the site on each of the last 7 checks, and who was named instead. Use it for "which of my questions did ChatGPT name me for?" or "which questions is Linktree winning?". For an AI's exact words on one question, use ai_answer.

questions input schema
{
  "type": "object",
  "properties": {
    "site": {
      "type": "string",
      "description": "Which of your sites: its domain (\"biotree.bio\"), its id from list_my_sites (\"biotree-bio\") or its name. Leave it out when the person has one site."
    }
  },
  "additionalProperties": false
}
questions output schema
{
  "type": "object",
  "required": [
    "view"
  ],
  "properties": {
    "date": {
      "type": "string",
      "description": "The check day."
    },
    "view": {
      "enum": [
        "questions",
        "none"
      ],
      "type": "string",
      "description": "What this answer is; \"none\" for a question back, a plain no, or nothing there yet (see message)."
    },
    "stamp": {
      "type": "string",
      "description": "\"Checked 05:01 GMT\"."
    },
    "domain": {
      "type": "string",
      "description": "The site."
    },
    "siteId": {
      "type": "string",
      "description": "The site id."
    },
    "message": {
      "type": "string",
      "description": "When view is \"none\": what to tell the person."
    },
    "questions": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "{ promptId, question, results: { chatgpt, claude, gemini, perplexity }, namedBy, last7, namedInstead }."
    }
  },
  "description": "Questions and results.",
  "additionalProperties": true
}
questions annotations
{
  "title": "My questions and results",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
ai_answer — What the AI said
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

One question and one AI: that AI's answer word for word, exactly as stored, with the pages it cited, from the latest check or a given date. Quote it as that AI's words. Use it for "show me exactly what ChatGPT said" or "who did Perplexity recommend for the Comrades question?".

ai_answer input schema
{
  "type": "object",
  "required": [
    "question",
    "ai"
  ],
  "properties": {
    "ai": {
      "enum": [
        "chatgpt",
        "claude",
        "gemini",
        "perplexity"
      ],
      "type": "string",
      "description": "The AI: chatgpt, claude, gemini or perplexity."
    },
    "date": {
      "type": "string",
      "description": "A check day, YYYY-MM-DD. Leave it out for the latest check."
    },
    "site": {
      "type": "string",
      "description": "Which of your sites: its domain (\"biotree.bio\"), its id from list_my_sites (\"biotree-bio\") or its name. Leave it out when the person has one site."
    },
    "question": {
      "type": "string",
      "description": "The question: its id (\"p03\"), its number in the list (\"3\"), or words from it (\"Comrades\")."
    }
  },
  "additionalProperties": false
}
ai_answer output schema
{
  "type": "object",
  "required": [
    "view"
  ],
  "properties": {
    "date": {
      "type": "string",
      "description": "The check day."
    },
    "view": {
      "enum": [
        "answer",
        "none"
      ],
      "type": "string",
      "description": "What this answer is; \"none\" for a question back, a plain no, or nothing there yet (see message)."
    },
    "domain": {
      "type": "string",
      "description": "The site."
    },
    "result": {
      "type": "string",
      "description": "named, with your address | named | your address given, not named | not named."
    },
    "aiLabel": {
      "type": "string",
      "description": "ChatGPT, Claude, Gemini or Perplexity."
    },
    "message": {
      "type": "string",
      "description": "When view is \"none\": what to tell the person."
    },
    "question": {
      "type": "string",
      "description": "The question as asked."
    },
    "citations": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "{ url, title, domain }."
    },
    "answerText": {
      "type": "string",
      "description": "The answer, word for word."
    }
  },
  "description": "One stored answer.",
  "additionalProperties": true
}
ai_answer annotations
{
  "title": "What the AI said",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
rivals — Who the AIs recommend instead
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

For one site, or all of them: who ChatGPT, Claude, Gemini and Perplexity recommend instead, from the latest check. Each rival's name and domain, what they do, domain age, DR, how often each AI named them, the questions they won, first seen, the trend and a New flag for young sites. The person's own DR heads the list. Use it for "who are my competitors?" or "which new sites are taking my questions?".

rivals input schema
{
  "type": "object",
  "properties": {
    "site": {
      "type": "string",
      "description": "One of your sites (domain, id or name). Leave it out for all of them."
    }
  },
  "additionalProperties": false
}
rivals output schema
{
  "type": "object",
  "required": [
    "view"
  ],
  "properties": {
    "view": {
      "enum": [
        "rivals",
        "none"
      ],
      "type": "string",
      "description": "What this answer is; \"none\" for a question back, a plain no, or nothing there yet (see message)."
    },
    "sites": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "{ siteId, domain, you: { domain, dr, named, answers }, date, rivals: [{ name, domain, whatTheyDo, ageDays, dr, isNew, namedCount, perEngine, questionsWon, firstSeen, trend }] }."
    },
    "message": {
      "type": "string",
      "description": "When view is \"none\": what to tell the person."
    },
    "drCredit": {
      "type": "string",
      "description": "Domain Rating by Ahrefs (ahrefs.com)."
    }
  },
  "description": "Rivals.",
  "additionalProperties": true
}
rivals annotations
{
  "title": "Who the AIs recommend instead",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
rival_detail — One rival up close
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

One rival from the person's own checks: its age and registrar, DR, what it does, and every question and AI where it was named and the person's site was not, with that AI's words about it. Use it for "how old is that site and what's its DR?" about a rival, or "what did the AIs say about Linktree?". Rivals are seen only through the person's own questions; for any other site use domain_age and domain_rating.

rival_detail input schema
{
  "type": "object",
  "required": [
    "rival"
  ],
  "properties": {
    "site": {
      "type": "string",
      "description": "One of your sites, if the rival is in one site's list."
    },
    "rival": {
      "type": "string",
      "description": "The rival's name or domain, e.g. \"Linktree\" or \"heya.page\"."
    }
  },
  "additionalProperties": false
}
rival_detail output schema
{
  "type": "object",
  "required": [
    "view"
  ],
  "properties": {
    "view": {
      "enum": [
        "rival",
        "none"
      ],
      "type": "string",
      "description": "What this answer is; \"none\" for a question back, a plain no, or nothing there yet (see message)."
    },
    "rival": {
      "type": "object",
      "properties": {},
      "description": "{ name, domain, whatTheyDo, ageDays, registeredAt, registrar, dr, namedCount, perEngine, questionsWon, namedOverYou: [{ question, aiLabel, quotes }] }.",
      "additionalProperties": true
    },
    "message": {
      "type": "string",
      "description": "When view is \"none\": what to tell the person."
    },
    "drCredit": {
      "type": "string",
      "description": "Domain Rating by Ahrefs (ahrefs.com)."
    }
  },
  "description": "One rival.",
  "additionalProperties": true
}
rival_detail annotations
{
  "title": "One rival up close",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
trend — How I've moved
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Daily named and linked counts per site and per AI over 7, 30 or 90 days, with the moves marked done on the timeline and what changed since each. Use it for "how have I moved this month?" or "did the comparison page work?".

trend input schema
{
  "type": "object",
  "properties": {
    "days": {
      "enum": [
        7,
        30,
        90
      ],
      "type": "integer",
      "description": "7, 30 or 90. Default 7."
    },
    "site": {
      "type": "string",
      "description": "One of your sites (domain, id or name). Leave it out for all of them."
    }
  },
  "additionalProperties": false
}
trend output schema
{
  "type": "object",
  "required": [
    "view"
  ],
  "properties": {
    "days": {
      "type": "number",
      "description": "The window."
    },
    "view": {
      "enum": [
        "trend",
        "none"
      ],
      "type": "string",
      "description": "What this answer is; \"none\" for a question back, a plain no, or nothing there yet (see message)."
    },
    "sites": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "{ siteId, domain, series: [{ date, named, linked, answers, perEngine }], moves, sinceShipped }."
    },
    "message": {
      "type": "string",
      "description": "When view is \"none\": what to tell the person."
    }
  },
  "description": "The trend.",
  "additionalProperties": true
}
trend annotations
{
  "title": "How I've moved",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
domain_rating — Domain Rating
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Ahrefs Domain Rating (0 to 100) for up to 25 domains, anyone's. Free, no sign-in. Every answer carries "Domain Rating by Ahrefs (ahrefs.com)"; show it with the numbers.

domain_rating input schema
{
  "type": "object",
  "required": [
    "domains"
  ],
  "properties": {
    "domains": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 25,
      "minItems": 1,
      "description": "Domains, e.g. [\"heya.page\", \"linktr.ee\"]."
    }
  },
  "additionalProperties": false
}
domain_rating output schema
{
  "type": "object",
  "required": [
    "view"
  ],
  "properties": {
    "view": {
      "enum": [
        "dr",
        "none"
      ],
      "type": "string",
      "description": "What this answer is; \"none\" for a question back, a plain no, or nothing there yet (see message)."
    },
    "message": {
      "type": "string",
      "description": "When view is \"none\": what to tell the person."
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "{ domain, dr } (dr null when Ahrefs has no rating)."
    },
    "drCredit": {
      "type": "string",
      "description": "Domain Rating by Ahrefs (ahrefs.com)."
    }
  },
  "description": "Domain Ratings.",
  "additionalProperties": true
}
domain_rating annotations
{
  "title": "Domain Rating",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
action_plan — What to improve
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

One site's plan from its latest check: why each AI does or doesn't name it (in plain words, from the real answers) and the moves, ranked by how many questions and AIs each can win, with the rivals each move beats and the pages the AIs read instead. Use it for "what should I improve first on biotree.bio?". To hand a move to a coding session, use build_prompt; when it has shipped, mark_move_done.

action_plan input schema
{
  "type": "object",
  "properties": {
    "site": {
      "type": "string",
      "description": "Which of your sites: its domain (\"biotree.bio\"), its id from list_my_sites (\"biotree-bio\") or its name. Leave it out when the person has one site."
    }
  },
  "additionalProperties": false
}
action_plan output schema
{
  "type": "object",
  "required": [
    "view"
  ],
  "properties": {
    "why": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "{ ai, label, why }."
    },
    "date": {
      "type": "string",
      "description": "The check the plan comes from."
    },
    "view": {
      "enum": [
        "plan",
        "none"
      ],
      "type": "string",
      "description": "What this answer is; \"none\" for a question back, a plain no, or nothing there yet (see message)."
    },
    "moves": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "{ id, rank, kind, title, locked, detail, impact, targets, rival, evidence, hasBuildPrompt, done }."
    },
    "domain": {
      "type": "string",
      "description": "The site."
    },
    "locked": {
      "type": "boolean",
      "description": "True on a free site: move 1 in full, the rest locked."
    },
    "message": {
      "type": "string",
      "description": "When view is \"none\": what to tell the person."
    }
  },
  "description": "The plan.",
  "additionalProperties": true
}
action_plan annotations
{
  "title": "What to improve",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
build_prompt — Hand a move to my coding session
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

One move of a site's plan as a complete, self-contained brief for a coding agent (Claude Code, Cursor): the goal, the page or change, the exact questions it targets and which AIs missed them, the rivals recommended, the pages the AIs read (to study, not copy), page anatomy and schema, what not to do (no invented facts, prices or reviews), and how aipozi will measure it. In a coding session opened on the site's repo, implement it, then call mark_move_done. Default: the top move. Paid sites only, as in the app.

build_prompt input schema
{
  "type": "object",
  "properties": {
    "move": {
      "type": "string",
      "description": "The move id from action_plan or briefing (\"comparison\", \"page-p03\"), or its rank (\"1\"). Leave it out for the top move."
    },
    "site": {
      "type": "string",
      "description": "Which of your sites: its domain (\"biotree.bio\"), its id from list_my_sites (\"biotree-bio\") or its name. Leave it out when the person has one site."
    }
  },
  "additionalProperties": false
}
build_prompt output schema
{
  "type": "object",
  "required": [
    "view"
  ],
  "properties": {
    "move": {
      "type": "object",
      "properties": {},
      "description": "{ id, rank, title, kind, targets }.",
      "additionalProperties": true
    },
    "view": {
      "enum": [
        "move",
        "none"
      ],
      "type": "string",
      "description": "What this answer is; \"none\" for a question back, a plain no, or nothing there yet (see message)."
    },
    "domain": {
      "type": "string",
      "description": "The site."
    },
    "prompt": {
      "type": "string",
      "description": "The brief, ready to paste or act on."
    },
    "measure": {
      "type": "string",
      "description": "How aipozi measures it and the mark_move_done call to make."
    },
    "message": {
      "type": "string",
      "description": "When view is \"none\": what to tell the person."
    }
  },
  "description": "A build prompt.",
  "additionalProperties": true
}
build_prompt annotations
{
  "title": "Hand a move to my coding session",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
mark_move_done — I've shipped it
Advertised by the server during the last successful anonymous check.
Open-world

Records that a move has shipped: today's date and, optionally, the URL of the new page. From the next morning's check, briefing and trend show what changed since. Not destructive; undo with undo: true. The only tool that writes. Use it after the person (or their coding session) has shipped the move.

mark_move_done input schema
{
  "type": "object",
  "required": [
    "move"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "The shipped page's URL, if there is one."
    },
    "move": {
      "type": "string",
      "description": "The move id (\"comparison\", \"page-p03\") or rank (\"1\")."
    },
    "site": {
      "type": "string",
      "description": "Which of your sites: its domain (\"biotree.bio\"), its id from list_my_sites (\"biotree-bio\") or its name. Leave it out when the person has one site."
    },
    "undo": {
      "type": "boolean",
      "description": "true to take back a mark made by mistake."
    }
  },
  "additionalProperties": false
}
mark_move_done output schema
{
  "type": "object",
  "required": [
    "view"
  ],
  "properties": {
    "day": {
      "type": "string",
      "description": "The day it was marked."
    },
    "url": {
      "type": [
        "string",
        "null"
      ],
      "description": "The page."
    },
    "done": {
      "type": "boolean",
      "description": "Marked done (false after an undo)."
    },
    "move": {
      "type": "object",
      "properties": {},
      "description": "{ id, title }.",
      "additionalProperties": true
    },
    "view": {
      "enum": [
        "done",
        "none"
      ],
      "type": "string",
      "description": "What this answer is; \"none\" for a question back, a plain no, or nothing there yet (see message)."
    },
    "domain": {
      "type": "string",
      "description": "The site."
    },
    "message": {
      "type": "string",
      "description": "When view is \"none\": what to tell the person."
    }
  },
  "description": "The record.",
  "additionalProperties": true
}
mark_move_done annotations
{
  "title": "I've shipped it",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
check_domain — Check domain availability
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Is a domain name free? Use it whenever someone names an app, product or company, asks "find me a name with a free domain", "is there a .com for…", or "is X taken". Asks each registry for its own record, live (RDAP, else the registry's WHOIS). One name: across .com, .ai, .io, .app, .dev and more, or the extensions given. Brainstorming: pass up to 10 candidates in names and get them on .com, .ai, .io, .app and .dev, free ones first. Each result: available or not registered (with a registrar link), taken (with its registration date and age), or couldn't check. Free, no sign-in. Always use this for availability; never guess from DNS or memory. aipozi doesn't register names.

check_domain input schema
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "One name (\"livedot\") or a domain (\"livedot.ai\"). With an extension, only that one is checked unless extensions are given."
    },
    "names": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 10,
      "description": "Up to 10 candidate names to compare when naming something, e.g. [\"livedot\", \"dotlive\", \"followdot\"]. Checked on .com, .ai, .io, .app and .dev unless extensions are given (up to 6)."
    },
    "extensions": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 20,
      "description": "Extensions to check, e.g. [\"ai\", \"io\", \"co.za\"]."
    }
  },
  "additionalProperties": false
}
check_domain output schema
{
  "type": "object",
  "required": [
    "view"
  ],
  "properties": {
    "view": {
      "enum": [
        "domains",
        "none"
      ],
      "type": "string",
      "description": "What this answer is; \"none\" for a question back, a plain no, or nothing there yet (see message)."
    },
    "label": {
      "type": "string",
      "description": "The name searched."
    },
    "message": {
      "type": "string",
      "description": "When view is \"none\": what to tell the person."
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "{ domain, tld, status: available|premium|unregistered|unavailable|taken|unknown, price, registeredAt, ageDays, registerUrl, checkedAt }."
    }
  },
  "description": "Availability per extension.",
  "additionalProperties": true
}
check_domain annotations
{
  "title": "Check domain availability",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
domain_age — WHOIS lookup: how old is a website
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

A WHOIS / RDAP lookup for any domain: registration date and age, registrar, expiry, status (including expired and being deleted, with an estimated drop date), name servers and who hosts it, read live from the registry's own record (RDAP, else WHOIS). Plus its Ahrefs Domain Rating. Never owner details. Free, no sign-in. Use it for "whois heya.page", "how old is this site", "who is it registered with", "when does it expire", "is this domain expiring", "who hosts it".

domain_age input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "A domain or a link, e.g. \"heya.page\"."
    }
  },
  "additionalProperties": false
}
domain_age output schema
{
  "type": "object",
  "required": [
    "view"
  ],
  "properties": {
    "dr": {
      "type": [
        "number",
        "null"
      ],
      "description": "Ahrefs Domain Rating."
    },
    "view": {
      "enum": [
        "age",
        "none"
      ],
      "type": "string",
      "description": "What this answer is; \"none\" for a question back, a plain no, or nothing there yet (see message)."
    },
    "found": {
      "type": "boolean",
      "description": "The registry has a record."
    },
    "domain": {
      "type": "string",
      "description": "The registrable domain."
    },
    "ageDays": {
      "type": [
        "number",
        "null"
      ],
      "description": "Days since registration."
    },
    "message": {
      "type": "string",
      "description": "When view is \"none\": what to tell the person."
    },
    "drCredit": {
      "type": "string",
      "description": "Domain Rating by Ahrefs (ahrefs.com)."
    },
    "expiresAt": {
      "type": [
        "string",
        "null"
      ],
      "description": "YYYY-MM-DD."
    },
    "registrar": {
      "type": [
        "string",
        "null"
      ],
      "description": "The registrar."
    },
    "nameservers": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Name servers."
    },
    "registeredAt": {
      "type": [
        "string",
        "null"
      ],
      "description": "YYYY-MM-DD."
    }
  },
  "description": "The registry record.",
  "additionalProperties": true
}
domain_age annotations
{
  "title": "WHOIS lookup: how old is a website",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
ai_crawler_access — Can AI read this site
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Whether each AI's crawlers (OpenAI, Anthropic, Perplexity, Google, Microsoft; search, user and training bots) are allowed by a site's robots.txt, read live, and the exact lines to add when a search crawler is blocked. Free, no sign-in.

ai_crawler_access input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "A domain or a link, e.g. \"biotree.bio\"."
    }
  },
  "additionalProperties": false
}
ai_crawler_access output schema
{
  "type": "object",
  "required": [
    "view"
  ],
  "properties": {
    "fix": {
      "type": [
        "string",
        "null"
      ],
      "description": "The robots.txt lines to add."
    },
    "bots": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "{ bot, company, engine, purpose, status: allowed|blocked|partial|unknown, blockedPaths }."
    },
    "view": {
      "enum": [
        "crawlers",
        "none"
      ],
      "type": "string",
      "description": "What this answer is; \"none\" for a question back, a plain no, or nothing there yet (see message)."
    },
    "domain": {
      "type": "string",
      "description": "The site."
    },
    "finding": {
      "type": [
        "string",
        "null"
      ],
      "description": "What is blocked, in plain words."
    },
    "message": {
      "type": "string",
      "description": "When view is \"none\": what to tell the person."
    },
    "robotsFound": {
      "type": "boolean",
      "description": "A robots.txt exists."
    },
    "blocksSearch": {
      "type": "boolean",
      "description": "A search or user bot is blocked."
    }
  },
  "description": "The robots.txt audit.",
  "additionalProperties": true
}
ai_crawler_access annotations
{
  "title": "Can AI read this site",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

3 advertised

daily_briefing — Daily aipozi briefing

Advertised by the server during the last successful anonymous check.

Today's briefing for all your sites, then the one move to make today.

No arguments advertised.

fix_top_move — Fix the top move

Advertised by the server during the last successful anonymous check.

Fetch the top move's build prompt for a site, implement it in this repo, then mark it done.

site
The site, e.g. biotree.bio. (required)
rival_watch — Rival watch

Advertised by the server during the last successful anonymous check.

Which new sites are taking your questions, how old they are, and their DR.

No arguments advertised.

Resources

1 advertised

aipozi — aipozi

Advertised by the server during the last successful anonymous check.

aipozi's card: the briefing, questions, rivals, a move's build prompt, domain results.

aipozi URI
ui://aipozi/app.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1766 ms
95th percentile latency
1766 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1766 ms · metadata changed · 14 tool(s), 1 resource(s), 0 resource template(s), 3 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http aipozi-mcp https://aipozi.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add aipozi-mcp --url https://aipozi.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable aipozi-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "aipozi-mcp": {
      "url": "https://aipozi.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "aipozi-mcp": {
      "type": "streamableHttp",
      "url": "https://aipozi.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start aipozi-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "aipozi-mcp": {
      "type": "http",
      "url": "https://aipozi.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http aipozi-mcp https://aipozi.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "aipozi-mcp": {
      "url": "https://aipozi.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "aipozi-mcp": {
      "serverUrl": "https://aipozi.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like aipozi MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run aipozi MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing