Manage SiteGPT chatbots and account resources through the SiteGPT API v2.
MCP Server: io.github.sitegpt/sitegpt
The MCP server manages SiteGPT chatbots and account resources via the SiteGPT API v2. It exposes official “SiteGPT Agent Skills” that instruct AI agents how to use the SiteGPT CLI to control chatbot and account-related tasks from an agent environment.
🛠️ Key Features
Manages SiteGPT chatbots
Manages account resources
Uses the SiteGPT API v2
Supports SiteGPT CLI-based agent skills
🚀 Use Cases
Agent environments that need to manage chatbots and account resources
Automating chatbot operations from an agent runtime using SiteGPT CLI skills
Using https://sitegpt.ai/auth.md for Auth.md-style discovery of an anonymous try-before-signup onboarding flow
⚡ Developer Benefits
Provides an integration path centered on SiteGPT API v2 and SiteGPT CLI
Includes an Auth.md endpoint (https://sitegpt.ai/auth.md) intended for agent environment discovery
Includes 17 tools exposed by the server
⚠️ Limitations
Described capabilities focus on chatbots and account resources; other scope is not specified
Captured live from the server via tools/list.
search
Search the SiteGPT API v2 OpenAPI spec. Targets the SiteGPT API v2 (spec: https://sitegpt.ai/api/v2/openapi.json, docs: https://sitegpt.ai/docs/api-reference/v2/getting-started). codemode.spec() returns $refs resolved inline. This tool only reads the local spec catalog; it performs no API calls.
Types:
// OpenAPI 3.x spec with $refs resolved inline.
// The spec object follows the standard OpenAPI 3.x structure.
interface OperationObject {
summary?: string;
description?: string;
operationId?: string;
tags?: string[];
parameters?: Array<{
name: string;
in: "query" | "header" | "path" | "cookie";
required?: boolean;
schema?: unknown;
description?: string;
}>;
requestBody?: {
required?: boolean;
description?: string;
content?: Record<string, { schema?: unknown }>;
};
responses?: Record<string, {
description?: string;
content?: Record<string, { schema?: unknown }>;
}>;
security?: Array<Record<string, string[]>>;
deprecated?: boolean;
}
interface PathItem {
summary?: string;
description?: string;
get?: OperationObject;
post?: OperationObject;
put?: OperationObject;
patch?: OperationObject;
delete?: OperationObject;
head?: OperationObject;
options?: OperationObject;
trace?: OperationObject;
parameters?: OperationObject["parameters"];
}
interface OpenApiSpec {
openapi: string;
info: { title: string; version: string; description?: string };
paths: Record<string, PathItem>;
servers?: Array<{ url: string; description?: string }>;
components?: Record<string, unknown>;
tags?: Array<{ name: string; description?: string }>;
}
declare const codemode: {
spec(): Promise<OpenApiSpec>;
};
Your code must be an async arrow function that returns the result.
Examples:
// List all paths
async () => {
const spec = await codemode.spec();
return Object.keys(spec.paths);
}
// Find endpoints by tag
async () => {
const spec = await codemode.spec();
const results = [];
for (const [path, methods] of Object.entries(spec.paths)) {
for (const [method, op] of Object.entries(methods)) {
if (op.tags?.some(t => t.toLowerCase() === 'your_tag')) {
results.push({ method: method.toUpperCase(), path, summary: op.summary });
}
}
}
return results;
}
Parameters1
code
string
required
JavaScript async arrow function to search the spec
Raw schema
{
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "JavaScript async arrow function to search the spec"
}
},
"required": [
"code"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
execute_read
Run read-only SiteGPT API v2 calls (GET only) using JavaScript code. Targets the SiteGPT API v2 (spec: https://sitegpt.ai/api/v2/openapi.json, docs: https://sitegpt.ai/docs/api-reference/v2/getting-started). First use 'search' to find the right endpoints. Requests run through an authenticated host-side bridge scoped to your OAuth grant. Write methods (POST, PUT, PATCH, DELETE) are rejected here — use the execute_write tool for those.
Available in your code:
interface RequestOptions {
method: "GET";
path: string;
query?: Record<string, string | number | boolean | undefined>;
body?: unknown;
contentType?: string;
rawBody?: boolean;
}
// OpenAPI 3.x spec with $refs resolved inline.
// The spec object follows the standard OpenAPI 3.x structure.
interface OperationObject {
summary?: string;
description?: string;
operationId?: string;
tags?: string[];
parameters?: Array<{
name: string;
in: "query" | "header" | "path" | "cookie";
required?: boolean;
schema?: unknown;
description?: string;
}>;
requestBody?: {
required?: boolean;
description?: string;
content?: Record<string, { schema?: unknown }>;
};
responses?: Record<string, {
description?: string;
content?: Record<string, { schema?: unknown }>;
}>;
security?: Array<Record<string, string[]>>;
deprecated?: boolean;
}
interface PathItem {
summary?: string;
description?: string;
get?: OperationObject;
post?: OperationObject;
put?: OperationObject;
patch?: OperationObject;
delete?: OperationObject;
head?: OperationObject;
options?: OperationObject;
trace?: OperationObject;
parameters?: OperationObject["parameters"];
}
interface OpenApiSpec {
openapi: string;
info: { title: string; version: string; description?: string };
paths: Record<string, PathItem>;
servers?: Array<{ url: string; description?: string }>;
components?: Record<string, unknown>;
tags?: Array<{ name: string; description?: string }>;
}
declare const codemode: {
spec(): Promise<OpenApiSpec>;
request(options: RequestOptions): Promise<unknown>;
};
Your code must be an async arrow function that returns the result.
Example:
async () => {
return await codemode.request({ method: "GET", path: "/your/endpoint" });
}
SiteGPT API v2 is scoped by the bearer token used for this MCP connection. Use search first, then execute_read for lookups and execute_write for changes — /api/v2 paths only.
Create, update or delete SiteGPT API v2 resources (POST, PUT, PATCH or DELETE only) using JavaScript code. Targets the SiteGPT API v2 (spec: https://sitegpt.ai/api/v2/openapi.json, docs: https://sitegpt.ai/docs/api-reference/v2/getting-started). First use 'search' to find the right endpoints and 'execute_read' for any lookups. Requests run through an authenticated host-side bridge scoped to your OAuth grant. GET is rejected here — use the execute_read tool to read data. GitHub knowledge-source connections cannot be created or updated through this tool because they carry an access token — direct users to the SiteGPT dashboard for GitHub setup; OAuth-based connectors (Notion, Google Drive, …) can be created here and finish authorization in the browser.
Available in your code:
interface RequestOptions {
method: "POST" | "PUT" | "PATCH" | "DELETE";
path: string;
query?: Record<string, string | number | boolean | undefined>;
body?: unknown;
contentType?: string;
rawBody?: boolean;
}
// OpenAPI 3.x spec with $refs resolved inline.
// The spec object follows the standard OpenAPI 3.x structure.
interface OperationObject {
summary?: string;
description?: string;
operationId?: string;
tags?: string[];
parameters?: Array<{
name: string;
in: "query" | "header" | "path" | "cookie";
required?: boolean;
schema?: unknown;
description?: string;
}>;
requestBody?: {
required?: boolean;
description?: string;
content?: Record<string, { schema?: unknown }>;
};
responses?: Record<string, {
description?: string;
content?: Record<string, { schema?: unknown }>;
}>;
security?: Array<Record<string, string[]>>;
deprecated?: boolean;
}
interface PathItem {
summary?: string;
description?: string;
get?: OperationObject;
post?: OperationObject;
put?: OperationObject;
patch?: OperationObject;
delete?: OperationObject;
head?: OperationObject;
options?: OperationObject;
trace?: OperationObject;
parameters?: OperationObject["parameters"];
}
interface OpenApiSpec {
openapi: string;
info: { title: string; version: string; description?: string };
paths: Record<string, PathItem>;
servers?: Array<{ url: string; description?: string }>;
components?: Record<string, unknown>;
tags?: Array<{ name: string; description?: string }>;
}
declare const codemode: {
spec(): Promise<OpenApiSpec>;
request(options: RequestOptions): Promise<unknown>;
};
Your code must be an async arrow function that returns the result.
Example:
async () => {
return await codemode.request({ method: "POST", path: "/your/endpoint", body: { name: "..." } });
}
SiteGPT API v2 is scoped by the bearer token used for this MCP connection. Use search first, then execute_read for lookups and execute_write for changes — /api/v2 paths only.
Render a live, interactive preview of a SiteGPT chatbot directly in the conversation (MCP Apps extension). Call it after creating or inspecting a chatbot, passing the chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id — and optionally the chatbot title for the preview header. Returns { chatbotId, widgetUrl }; hosts that support MCP Apps render the actual chat widget from the ui://sitegpt/chatbot-preview resource, and any client can open widgetUrl in a browser instead. Performs no API calls and does not verify that the chatbot exists — use execute_read for lookups. Note: chatbots that restrict embedding via Allowed Domains (Settings > General) block the inline frame; the preview then switches to a built-in chat driven by the send_chat_message tool, and shows a fallback with the direct link when that fails too.
Parameters2
chatbotId
string
required
SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id.
title
string
optional
Optional chatbot title shown in the preview header.
Raw schema
{
"type": "object",
"properties": {
"chatbotId": {
"type": "string",
"description": "SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id."
},
"title": {
"type": "string",
"description": "Optional chatbot title shown in the preview header."
}
},
"required": [
"chatbotId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
send_chat_message
Send a visitor message to a SiteGPT chatbot and get its answer — the data lane behind the inline chatbot preview's built-in chat. The first call (no threadId) creates a conversation and returns its threadId; pass that threadId on follow-ups to continue the same conversation. Messages are capped at 20000 characters (the endpoint's limit). On chatbots in human-support mode the message is delivered but answer is null — a human replies in the site widget. Uses POST /api/v2/chatbots/{chatbotId}/messages and POST /api/v2/chatbots/{chatbotId}/conversations/{threadId}/messages.
Parameters3
chatbotId
string
required
SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id.
message
string
required
The visitor message to send.
threadId
string
optional
Omit on the first message; pass the threadId a previous call returned to continue that conversation.
Raw schema
{
"type": "object",
"properties": {
"chatbotId": {
"type": "string",
"description": "SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id."
},
"message": {
"type": "string",
"minLength": 1,
"maxLength": 20000,
"description": "The visitor message to send."
},
"threadId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Omit on the first message; pass the threadId a previous call returned to continue that conversation."
}
},
"required": [
"chatbotId",
"message"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
get_onboarding_status
Get the live status of an agent-first onboarding workspace: workspace and claim state, the setup checklist (knowledge crawl/training, persona, starters, …), the browser onboarding page URL, and the POST-only claim API endpoint (claimUrl is for agents/CLI clients — never a page to open in a browser). The onboarding-progress view polls this while pages crawl and train. Requires the temporary onboarding token issued by the onboarding start endpoint. Uses GET /api/v2/onboarding/workspaces/{workspaceId}.
Read the chatbot widget appearance (colors, launcher position and shape, title, welcome message, placeholder, tooltip) plus its starter questions, for the inline appearance card. Uses GET /api/v2/chatbots/{chatbotId}/settings/appearance and GET /api/v2/chatbots/{chatbotId}/starters.
Parameters1
chatbotId
string
required
SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id.
Raw schema
{
"type": "object",
"properties": {
"chatbotId": {
"type": "string",
"description": "SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id."
}
},
"required": [
"chatbotId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
update_chatbot_appearance
Update the chatbot widget appearance: title, welcome message, placeholder, tooltip, brand/launcher/link colors (#rrggbb), and launcher position. Only the provided fields change; the tool returns the full updated appearance. This changes the LIVE widget customers see. Uses PATCH /api/v2/chatbots/{chatbotId}/settings/appearance.
Parameters10
chatbotId
string
required
SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id.
title
string
optional
Widget header title shown to visitors.
welcomeMessage
string
optional
First message the widget shows when a visitor opens it.
placeholderText
string
optional
Placeholder text inside the message input box.
tooltip
string
optional
Short prompt shown next to the closed launcher bubble.
brandColor
string
optional
Widget header/background color as #rrggbb.
brandTextColor
string
optional
Text color over the brand color as #rrggbb.
iconBackgroundColor
string
optional
Launcher bubble background color as #rrggbb.
linkColor
string
optional
Hyperlink color inside chatbot replies as #rrggbb.
iconPosition
string
optional
Which side of the page the launcher bubble sits on.
Raw schema
{
"type": "object",
"properties": {
"chatbotId": {
"type": "string",
"description": "SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id."
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Widget header title shown to visitors."
},
"welcomeMessage": {
"type": "string",
"maxLength": 2000,
"description": "First message the widget shows when a visitor opens it."
},
"placeholderText": {
"type": "string",
"maxLength": 500,
"description": "Placeholder text inside the message input box."
},
"tooltip": {
"type": "string",
"maxLength": 500,
"description": "Short prompt shown next to the closed launcher bubble."
},
"brandColor": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Widget header/background color as #rrggbb."
},
"brandTextColor": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Text color over the brand color as #rrggbb."
},
"iconBackgroundColor": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Launcher bubble background color as #rrggbb."
},
"linkColor": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$",
"description": "Hyperlink color inside chatbot replies as #rrggbb."
},
"iconPosition": {
"type": "string",
"enum": [
"LEFT",
"RIGHT"
],
"description": "Which side of the page the launcher bubble sits on."
}
},
"required": [
"chatbotId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
list_conversations
List a chatbot conversation inbox with filters (open/resolved status, escalated-only) and cursor pagination, projected to compact rows with a last-message snippet. Renders as the inline conversations inbox. Uses GET /api/v2/chatbots/{chatbotId}/conversations.
Parameters5
chatbotId
string
required
SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id.
status
string
optional
Filter by resolution status; defaults to all.
escalated
boolean
optional
true → only conversations escalated to a human.
limit
integer
optional
Maximum conversations to return (default 50, max 100).
cursor
string
optional
Opaque pagination cursor from the previous page.
Raw schema
{
"type": "object",
"properties": {
"chatbotId": {
"type": "string",
"description": "SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id."
},
"status": {
"type": "string",
"enum": [
"all",
"open",
"resolved"
],
"description": "Filter by resolution status; defaults to all."
},
"escalated": {
"type": "boolean",
"description": "true → only conversations escalated to a human."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Maximum conversations to return (default 50, max 100)."
},
"cursor": {
"type": "string",
"maxLength": 500,
"description": "Opaque pagination cursor from the previous page."
}
},
"required": [
"chatbotId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
get_conversation
Read one conversation with its transcript (visitor questions and chatbot/system answers, capped at 2000 characters per message). Renders as the transcript panel of the inline conversations inbox. Uses GET /api/v2/chatbots/{chatbotId}/conversations/{threadId}.
Parameters2
chatbotId
string
required
SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id.
threadId
string
required
Conversation thread id, from list_conversations.
Raw schema
{
"type": "object",
"properties": {
"chatbotId": {
"type": "string",
"description": "SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id."
},
"threadId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Conversation thread id, from list_conversations."
}
},
"required": [
"chatbotId",
"threadId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
get_chatbot_analytics
Get chatbot analytics for the inline analytics card: message counts and feedback split, training/knowledge state (from the chatbot dashboard endpoint) plus account-wide quota usage and a 12-month message-volume history (from the usage endpoint). Uses GET /api/v2/chatbots/{chatbotId}/dashboard and GET /api/v2/usage.
Parameters1
chatbotId
string
required
SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id.
Raw schema
{
"type": "object",
"properties": {
"chatbotId": {
"type": "string",
"description": "SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id."
}
},
"required": [
"chatbotId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
list_leads
List the leads a chatbot collected (name, email, phone, received time, starred/archived flags) with search, status filter, and cursor pagination. Renders as the inline leads browser. Uses GET /api/v2/chatbots/{chatbotId}/leads.
Parameters5
chatbotId
string
required
SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id.
status
string
optional
Filter leads by state (default all).
query
string
optional
Search across lead name, email, and phone.
limit
integer
optional
Maximum leads to return (default 50, max 100).
cursor
string
optional
Opaque pagination cursor from the previous page.
Raw schema
{
"type": "object",
"properties": {
"chatbotId": {
"type": "string",
"description": "SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id."
},
"status": {
"type": "string",
"enum": [
"all",
"open",
"archived"
],
"description": "Filter leads by state (default all)."
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Search across lead name, email, and phone."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Maximum leads to return (default 50, max 100)."
},
"cursor": {
"type": "string",
"maxLength": 500,
"description": "Opaque pagination cursor from the previous page."
}
},
"required": [
"chatbotId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
list_escalations
List the open conversations that are escalated to a human and waiting — the queue behind the inline escalations view — with cursor pagination for queues longer than one page. Read-only: replying to escalated visitors happens in the SiteGPT dashboard inbox (API v2 has no agent-reply endpoint yet). Uses GET /api/v2/chatbots/{chatbotId}/conversations with escalated=true and status=open.
Parameters3
chatbotId
string
required
SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id.
limit
integer
optional
Maximum escalations to return (default 50, max 100).
cursor
string
optional
Pass the previous page nextCursor to fetch the next page.
Raw schema
{
"type": "object",
"properties": {
"chatbotId": {
"type": "string",
"description": "SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Maximum escalations to return (default 50, max 100)."
},
"cursor": {
"type": "string",
"maxLength": 500,
"description": "Pass the previous page nextCursor to fetch the next page."
}
},
"required": [
"chatbotId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
list_knowledge_sources
List a chatbot connector data sources (Notion, Google Drive, Confluence, …) with their sync state, plus document counts by ingestion status. Renders as the inline knowledge view. Uses GET /api/v2/chatbots/{chatbotId}/knowledge/sources and GET /api/v2/chatbots/{chatbotId}/documents/stats.
Parameters1
chatbotId
string
required
SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id.
Raw schema
{
"type": "object",
"properties": {
"chatbotId": {
"type": "string",
"description": "SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id."
}
},
"required": [
"chatbotId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
create_knowledge_source
Create a new OAuth knowledge source connection (Notion, Google Drive, Dropbox, OneDrive, Box, SharePoint, or Confluence) and get the browser authorization URL to finish connecting it. Confluence additionally requires the site domain (e.g. your-team.atlassian.net). GitHub is not available here — its connections carry an access token and must be set up in the SiteGPT dashboard. Uses POST /api/v2/chatbots/{chatbotId}/knowledge/sources.
Parameters4
chatbotId
string
required
SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id.
connector
string
required
OAuth connector type. GitHub is dashboard-only.
name
string
required
Display name.
domain
string
optional
Confluence site domain (e.g. your-team.atlassian.net). Required when connector is CONFLUENCE; ignored otherwise.
Get a fresh browser authorization URL for an existing knowledge source connection (for example one still pending OAuth). Uses POST /api/v2/chatbots/{chatbotId}/knowledge/sources/{connectionId}/authorize.
Parameters2
chatbotId
string
required
SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id.
Upload one file (base64-encoded, max 1500000 bytes decoded — about 1.5 MB; the MCP transport caps request bodies, larger files go through the dashboard) as chatbot training knowledge. Ingestion is queued asynchronously. Uses POST /api/v2/chatbots/{chatbotId}/knowledge/files.
Parameters4
chatbotId
string
required
SiteGPT chatbot id — an RFC-4122 UUID or a 15-20 digit numeric id.
name
string
required
File name.
type
string
optional
MIME type; defaults to application/octet-stream.
base64
string
required
Base64 file content (a data: URL prefix is tolerated).
These skills teach agents how to use SiteGPT through the SiteGPT CLI so they can manage chatbots, knowledge, conversations, settings, team access, and account resources from an agent environment.
SiteGPT also publishes https://sitegpt.ai/auth.md for agent environments that
support Auth.md-style discovery of the anonymous try-before-signup onboarding
flow.
With the skills CLI (any agent environment that supports Agent Skills):
code
npx skills add sitegpt/agent-skills
Both deliver the same skill. This repository is dual-packaged: an Agent
Skills repo (skills.sh) and a Claude Code plugin marketplace
(.claude-plugin/).
Available Skills
sitegpt
Orientation skill: what SiteGPT is, which surface to use (CLI, MCP
connector, REST API, or no-signup onboarding), and where the deep
workflows live. Routes terminal work to sitegpt-cli.
sitegpt-cli
Use the SiteGPT CLI to manage SiteGPT accounts and chatbots from AI agents such as Codex, Claude Code, Cursor, OpenCode, Gemini CLI, Windsurf, Cline, and other skill-compatible coding agents.
Use when:
Creating a SiteGPT chatbot from a website.
Creating a try-before-signup chatbot through agent-first onboarding when the
user does not have a SiteGPT account yet.
Adding knowledge from links, websites, sitemaps, files, YouTube videos, text, and connected data sources.
Managing personas, instructions, settings, conversation starters, followups, and custom responses.
Reading and managing conversations, messages, leads, tags, members, invites, usage, billing, and API tokens.
Troubleshooting SiteGPT CLI command usage.
The skill is a single self-contained SKILL.md: the agent-facing workflow,
discovery brief, onboarding and account playbooks, command map, and safety
rules in one file. The SiteGPT CLI itself is the source of truth for exact
command syntax — agents run sitegpt <command> --help for flags, so the skill
deliberately does not duplicate a per-command reference.
Install in Cursor
This repository is also a Cursor plugin (skills + the remote MCP server).
In Cursor, run /add-plugin and pick SiteGPT, or install from the
marketplace listing. The MCP server connects your SiteGPT account with
browser OAuth; the skills work with no account via agent-first onboarding.
Installation
Install the SiteGPT CLI skill with the open skills CLI:
The skills CLI installs this agent skill. The SiteGPT CLI is the actual command-line tool the agent will run after the skill is installed.
Install the SiteGPT CLI first:
bash
npm install -g @sitegpt/cli
Then choose the right flow:
No SiteGPT account yet: do not log in first. Ask the agent to run
sitegpt onboarding start <website-url>, configure and test the temporary
chatbot, then share the onboarding URL for preview and claim.
Existing SiteGPT account: authenticate, then use normal account commands.
For existing accounts, authenticate with device login:
bash
sitegpt login
You can also create an API token from the SiteGPT dashboard and save it manually:
bash
sitegpt login --token <sitegpt-api-token>
Example Prompts
Once the skill is installed, ask your agent:
text
Try SiteGPT for https://example.com. Inspect the website, create a temporary chatbot, add knowledge, configure persona and instructions, test it, and give me the onboarding URL so I can preview and claim it.
text
I already have a SiteGPT account. Create a chatbot for https://example.com inside my account, configure knowledge and branding, and give me the dashboard link.
text
Audit my SiteGPT chatbot knowledge sources and resync any failed or stale documents.
text
Show recent conversations for my SiteGPT chatbot, summarize unresolved issues, and tag the conversations that need human follow-up.
Skill Structure
text
skills/
sitegpt-cli/
SKILL.md
Versioning And Releases
Skill versions live in metadata.version inside each SKILL.md and in the root package.json.
Releases are manual. When publishing a new version:
Update package.json.
Update metadata.version in each changed SKILL.md.
Update CHANGELOG.md.
Commit with chore: release <version>.
Create and push a matching Git tag, for example v0.1.2.
Create a GitHub Release for that tag.
Users who install through npx skills add sitegpt/agent-skills can update later with npx skills update.