Agent-facing distribution for ChatbotX. This repository publishes two public skills plus the plugin manifests that connect AI coding agents to a ChatbotX workspace:
skills/chatbotx— drive thechatbotxCLI from an agent's shell. Terminal agents, bulk work, scripted pipelines.skills/chatbotx-mcp— use the ChatbotX MCP server's tools from MCP-capable agents and IDEs.
IDE/ADE plugins ship both skills together with the MCP server: MCP provides the connection, the skills teach the agent the workflow (discover → resolve ids → act → verify) and when to fall back to the CLI. This mirrors how Stripe, Sentry, Supabase, and Cloudflare distribute their agent plugins.
The ChatbotX product source stays in ChatbotXIO/ChatbotX.
This repository intentionally excludes internal development skills.
- A ChatbotX workspace API key (ChatbotX → Settings → Developer → API Keys). Prefer a read-only key for discovery and analytics tasks.
- A base API URL only for a self-hosted instance. SaaS defaults to
https://app.chatbotx.io/api. - Node.js (the CLI documents Node 24+, the MCP server requires Node 18+).
| Agent | Skills | MCP server |
|---|---|---|
| Claude Code | plugin (below) — installs both skills | started by the plugin; prompts only for the key |
| Cursor | plugin (below) — installs both skills | started by the plugin; prompts only for the key |
| Codex | npx skills add ChatbotXIO/chatbotx-agent → .agents/skills/ |
~/.codex/config.toml block below |
| Windsurf, Gemini CLI, Copilot, others | npx skills add ChatbotXIO/chatbotx-agent |
generic mcp.json block below |
| Grok | .grok-plugin/ manifest |
included in the manifest |
| Gemini CLI extension | — | gemini-extension.json |
# Pick one or both skills interactively
npx skills add ChatbotXIO/chatbotx-agent
# Or install a specific one
npx skills add ChatbotXIO/chatbotx-agent --skill chatbotx
npx skills add ChatbotXIO/chatbotx-agent --skill chatbotx-mcp
# List what this repo publishes
npx skills add ChatbotXIO/chatbotx-agent --listInstalling the chatbotx skill does not install the chatbotx binary. The skill tells the agent to
run npm install -g chatbotx on first use if the command is missing.
/plugin marketplace add ChatbotXIO/chatbotx-agent
/plugin install chatbotx@chatbotx-agentThe plugin loads both skills and starts the ChatbotX MCP server. Claude Code asks only for the API
key when the plugin is enabled (userConfig); the key is stored in secure storage. The server uses
the SaaS URL by default. To use the MCP server without the plugin:
claude mcp add chatbotx \
-e CHATBOTX_API_KEY=<your-token> \
-e CHATBOTX_API_URL=https://app.chatbotx.io/api \
-e CHATBOTX_MCP_TRANSPORT=stdio \
-s user \
-- npx -y chatbotx-mcpThis repo ships a Cursor plugin at .cursor-plugin/ (skills + MCP server + variables). Local install:
git clone https://github.com/ChatbotXIO/chatbotx-agent.git
mkdir -p ~/.cursor/plugins/local
ln -s "$(pwd)/chatbotx-agent" ~/.cursor/plugins/local/chatbotxRestart Cursor or run Developer: Reload Window, then set CHATBOTX_API_KEY in the plugin
configuration UI. For a self-hosted instance, replace the API URL in .cursor-plugin/mcp.json.
npx skills add ChatbotXIO/chatbotx-agent # skills → .agents/skills/Then add the MCP server to ~/.codex/config.toml:
[mcp_servers.chatbotx]
command = "npx"
args = ["-y", "chatbotx-mcp"]
env = { CHATBOTX_API_KEY = "<your-token>", CHATBOTX_API_URL = "https://app.chatbotx.io/api", CHATBOTX_MCP_TRANSPORT = "stdio" }Install the skills with npx skills add as above, then register the stdio server. mcp.json at the
repository root holds this block:
{
"chatbotx": {
"command": "npx",
"args": ["-y", "chatbotx-mcp"],
"env": {
"CHATBOTX_API_KEY": "<your-workspace-token>",
"CHATBOTX_API_URL": "https://app.chatbotx.io/api",
"CHATBOTX_MCP_TRANSPORT": "stdio"
}
}
}npm install -g chatbotx
chatbotx config set --apiKey <your-workspace-token> --apiUrl https://app.chatbotx.io/api
chatbotx capabilities listskills/
chatbotx/ CLI skill: SKILL.md, references/commands.md, skill-card.md
chatbotx-mcp/ MCP skill: SKILL.md, skill-card.md
.claude-plugin/ Claude Code plugin + marketplace (skills + mcpServers + userConfig)
.cursor-plugin/ Cursor plugin + marketplace + mcp.json
.grok-plugin/ Grok plugin + marketplace + mcp.json
gemini-extension.json Gemini CLI extension (MCP server)
mcp.json Generic stdio MCP config
upstream.json Pinned chatbotx / chatbotx-mcp npm versions the skills are documented against
scripts/upstream/ Upstream drift check (see "Keeping in sync with upstream" below)
.github/workflows/ Scheduled drift check (upstream-drift.yml)
There is deliberately no SKILL.md at the repository root: a root skill would shadow skills/ for
npx skills add and make the whole repository install as one skill.
The chatbotx CLI and chatbotx-mcp server (both in
ChatbotXIO/ChatbotX) generate their command/tool surface
at runtime from the live GET {API_URL}/public-spec.json. That means this repo's docs can drift from
what an agent actually sees in two independent ways:
- The public API changes — an operation is added, removed, renamed, or its
x-mcp.visibilityflips — and the live surface changes immediately, with no npm publish. - The
chatbotx/chatbotx-mcppackages publish a new version — global flags, Node version requirements, or the command-name-collision logic change.
upstream.json pins the npm versions the docs in skills/ are currently written against.
.github/workflows/upstream-drift.yml runs daily (and on demand via workflow_dispatch), and:
- collects the actual CLI surface by running the published
chatbotxbinary's--helprecursively and readingduplicate command namewarnings off stderr, and the actual MCP default tool set by fetchingpublic-spec.jsondirectly and filteringx-mcp.visibility: "default"operations; - compares that live surface against
skills/chatbotx/references/commands.md, the## Command-name collisionssection ofskills/chatbotx/SKILL.md, and the default-tools table inskills/chatbotx-mcp/SKILL.md, plus the version pinned inupstream.json; - opens or updates a single GitHub issue labeled
upstream-driftdescribing exactly what changed, and closes it automatically once a later run finds the docs match again.
This repo is pull-only with respect to ChatbotXIO/ChatbotX — it has no push access there and no
cross-repo token, so it never edits that repo. A repository_dispatch trigger (upstream-published)
is wired up so that repo could push an immediate check instead of waiting for the next scheduled run,
but nothing there calls it yet.
Run the check locally:
npm test # parser unit tests (scripts/upstream/__tests__/)
npm run check:upstream # full check against the live CLI + MCP spec; prints a report, exits 1 on driftWhen the check finds drift, resolve it by:
- Updating the affected file(s) the report names.
- Bumping
upstream.json(and theversion:field in the affected skill'sSKILL.md,.claude-plugin/plugin.json, theplugins[].versionfields in.cursor-plugin/marketplace.jsonand.grok-plugin/marketplace.json, andgemini-extension.json) to the live npm version. - Adding a
CHANGELOG.mdentry. - Merging — the next scheduled run closes the drift issue automatically.
No publish step. Push this public repository; npx skills add ChatbotXIO/chatbotx-agent reads skills/.
clawhub skill publish skills/chatbotx --version 1.1.1 --dry-run --json
clawhub skill publish skills/chatbotx-mcp --version 1.1.1 --dry-run --json
clawhub skill publish skills/chatbotx --version 1.1.1 --changelog "Default SaaS API URL; only prompt for the API key"
clawhub skill publish skills/chatbotx-mcp --version 1.1.1 --changelog "Default SaaS API URL; only prompt for the API key"Submit this repository at https://cursor.com/marketplace/publish. Cursor reads
.cursor-plugin/plugin.json, .cursor-plugin/marketplace.json, and .cursor-plugin/mcp.json.
Every manifest starts the server with npx -y chatbotx-mcp, so chatbotx-mcp must be published to
npm before marketplace submission:
npm view chatbotx-mcp versionChatbotX agents can mutate live workspace data and send messages to real contacts. Use least-privilege workspace API keys, verify recipient/audience counts before writes, and prefer read-only tokens for discovery tasks.