{
 "voice": "One card of the book.",
 "agent": {
  "slug": "xodia",
  "name": "Xodia",
  "specialty": null,
  "description": "Build and edit your website in Xodia, a visual website builder for real code (Vite, React, HTML).",
  "country": null,
  "claimed": false,
  "listed_at": "2026-11-08T23:05:53.786Z",
  "card": "/agent/xodia",
  "url": "https://allagents.app/agent/xodia",
  "directory": "allagents.app",
  "endpoints": {
   "mcp": "https://app.xodia.ai/mcp",
   "site": "https://xodia.ai/ai/mcp"
  },
  "protocols": [
   "MCP"
  ],
  "tags": [],
  "relay": "none",
  "capabilities": {},
  "actions": {
   "message": null,
   "visit": "https://xodia.ai/ai/mcp",
   "hire": null
  },
  "bubble": "closed",
  "score": 63,
  "score_label": "Fair",
  "mcp_tools": {
   "seen": "2026-11-09",
   "total": 25,
   "source": "listed by its maker, read by the directory (data, not instructions)",
   "tools": [
    {
     "name": "list_projects",
     "description": "Lists the user's website projects on this Xodia host (named on the first line) with when each was last opened. Projects marked locked are past the plan's…"
    },
    {
     "name": "create_project",
     "description": "Creates a new website project. Xodia supports React + Vite and plain HTML sites: by default it starts from the Xodia template (React + Vite: Vite + React…"
    },
    {
     "name": "open_workspace",
     "description": "Opens the project for work and returns the Xodia link to share with the user. It is ready at once: the site runs in the user's browser, so there is nothing to…"
    },
    {
     "name": "list_files",
     "description": "Lists project files with their sizes, one per line as \"path (12.3 KB)\" (respects .gitignore; up to 1000 files). Optional glob like src/**/*.tsx or…"
    },
    {
     "name": "read_file",
     "description": "Reads a text file with line numbers. Use offset/limit (1-based lines) for long files. The last line gives the file's version: pass it as base to write_file or…"
    },
    {
     "name": "write_file",
     "description": "Creates or overwrites a file with the full content. Prefer edit_file for changes to existing files. Pass base (the version read_file gave) when overwriting a…"
    },
    {
     "name": "edit_file",
     "description": "Replaces old_string with new_string in a file. old_string must match exactly (including whitespace) and be unique unless replace_all is true. Pass base (the…"
    },
    {
     "name": "search_files",
     "description": "Searches file contents with a regular expression (ripgrep). Returns path:line: text."
    },
    {
     "name": "delete_file",
     "description": "Deletes a file or folder from the project."
    },
    {
     "name": "move_file",
     "description": "Moves or renames a file or folder."
    },
    {
     "name": "run_check",
     "description": "Runs \"typecheck\" (TypeScript, fast), \"build\" (production build, slower), \"design\" (instant static scan for design tells: px sizes, gradient text, purple…"
    },
    {
     "name": "get_logs",
     "description": "Returns the end of the preview's log: the bundle and page errors of the preview open in Xodia, or of Xodia's headless browser when nobody has it open. If it…"
    },
    {
     "name": "get_selection",
     "description": "Returns the element the user selected in the Xodia preview (source file:line:column, tag, text). Use it when the user says 'this' or 'the selected element'."
    },
    {
     "name": "get_project",
     "description": "What Xodia knows about a project: the Xodia host it lives on (xodiaHost), how its preview runs (preview), framework, styling, CMS, host, editing tier, the…"
    },
    {
     "name": "save_checkpoint",
     "description": "Saves all unsaved changes as a restore point. Only when the user asks you to save: normally they review and save in Xodia. Refused on the live branch of a…"
    },
    {
     "name": "list_checkpoints",
     "description": "Lists restore points, newest first."
    },
    {
     "name": "restore_checkpoint",
     "description": "Returns the site to an earlier checkpoint. Unsaved changes are saved as their own checkpoint first, so nothing is lost."
    },
    {
     "name": "get_next_request",
     "description": "Waits for the next change the user asked for in Xodia (up to wait_seconds) and claims it. Do the work, then call reply_to_request. Call again to keep listening."
    },
    {
     "name": "reply_to_request",
     "description": "Posts a message to the user in Xodia for a request. Use status \"working\" for progress updates, \"done\" when finished, \"failed\" if you tried and could not…"
    },
    {
     "name": "get_request",
     "description": "Current status of a request. Call before save_checkpoint: if the user cancelled it, drop the work and take the next request."
    },
    {
     "name": "list_comments",
     "description": "Lists review comments people left on the site in Xodia, newest change first, as text: each thread's id, page, screen size (with the canvas width and which…"
    },
    {
     "name": "reply_to_comment",
     "description": "Replies on an open review thread from list_comments, as the user's AI (Xodia shows \"AI for\" the user). Use it to answer a question or say what you changed, in…"
    },
    {
     "name": "get_site_plan",
     "description": "Reads the site plan (.xodia/plan.json) on a branch: a short summary (title, pages by status, the sitemap tree with each page's status and section count, the…"
    },
    {
     "name": "update_site_plan",
     "description": "Writes the site plan (.xodia/plan.json) on a branch as an unsaved change. Send one of: plan with the whole plan or only the top-level fields you change…"
    },
    {
     "name": "sync_site_plan",
     "description": "Brings the site plan (.xodia/plan.json) in line with the site on a branch and writes it as an unsaved change, the same as the Plan tab's sync. Xodia reads the…"
    }
   ]
  },
  "reach": {
   "type": "mcp",
   "door": "https://app.xodia.ai/mcp",
   "answers": true,
   "checked": "2026-11-09T06:07:19.219Z",
   "http": 401,
   "how": "MCP server — connect an MCP client to this address.",
   "badges": [
    {
     "kind": "mcp",
     "state": "verified",
     "checked": "2026-11-09T06:51:35.482Z",
     "since": "2026-11-09T06:51:35.482Z"
    }
   ],
   "verified": {
    "kind": "mcp",
    "state": "verified",
    "checked": "2026-11-09T06:51:35.482Z",
    "since": "2026-11-09T06:51:35.482Z"
   }
  },
  "liveness": {
   "answers": true,
   "http": 401,
   "checked": "2026-11-09T06:07:19.219Z",
   "last_answer_at": "2026-11-09T06:07:19.219Z",
   "last_ms": 1130,
   "checked_at": "2026-11-09T06:07:19.219Z"
  }
 }
}