{
  "markdown": "# @sota-io/mcp\n\nMCP server for [sota.io](https://sota.io) — deploy web apps via AI agents.\n\n[![npm version](https://img.shields.io/npm/v/@sota-io/mcp)](https://www.npmjs.com/package/@sota-io/mcp)\n[![npm downloads](https://img.shields.io/npm/dm/@sota-io/mcp)](https://www.npmjs.com/package/@sota-io/mcp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![Node](https://img.shields.io/badge/node-%3E%3D20-green)](https://nodejs.org)\n\n## Two transports\n\nSince v1.4.0 this package ships **two transports**:\n\n- **`sota-mcp`** (stdio, default) — for Claude Code, Cursor, Windsurf, and any\n  MCP client that spawns a local process. Pass your `SOTA_API_KEY` via env var.\n- **`sota-mcp-http`** (Streamable HTTP) — for self-hosting the remote endpoint\n  that powers `mcp.sota.io` (used by Claude Desktop and Claude.ai web). Reads\n  `SUPABASE_JWT_SECRET`, `DATABASE_URL`, etc. — most users do not need this;\n  it's the same code that runs on `mcp.sota.io` if you want to host your own.\n\nMost users want the stdio transport.\n\n## One-click install for Claude Desktop / Claude.ai web\n\nIf you use Claude Desktop or Claude.ai (Pro / Max / Team / Enterprise plan),\nthe easiest install is **not** this npm package — it's the hosted remote\nendpoint at `mcp.sota.io`. Click here:\n\n[**Add to Claude →**](https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=sota.io&connectorUrl=https%3A%2F%2Fmcp.sota.io%2Fmcp)\n\nOAuth handles auth. New users can sign up entirely inside Claude via the\n`create_account` tool — no browser tab switch.\n\nSee [https://sota.io/docs/integrations/claude](https://sota.io/docs/integrations/claude).\n\n## Quick Start (stdio — Claude Code, Cursor, Windsurf, …)\n\n1. Get an API key from [sota.io/dashboard/settings](https://sota.io/dashboard/settings)\n2. [Configure your IDE](#configuration)\n3. Ask your AI: *\"Deploy my app to sota.io\"*\n\n## Installation\n\n**No install needed** — run directly with npx:\n\n```bash\nnpx -y @sota-io/mcp\n```\n\nOr install globally:\n\n```bash\nnpm install -g @sota-io/mcp\nsota-mcp\n```\n\n## Configuration\n\n### Claude Code\n\n**CLI method:**\n\n```bash\nclaude mcp add sota -- npx -y @sota-io/mcp\n```\n\nThen set your API key in the shell environment:\n\n```bash\nexport SOTA_API_KEY=sota_your_api_key_here\n```\n\n**Manual JSON** (`.claude/settings.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"sota\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@sota-io/mcp\"],\n      \"env\": {\n        \"SOTA_API_KEY\": \"sota_your_api_key_here\"\n      }\n    }\n  }\n}\n```\n\n### Claude Desktop\n\nEdit `claude_desktop_config.json`:\n\n- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows:** `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"sota\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@sota-io/mcp\"],\n      \"env\": {\n        \"SOTA_API_KEY\": \"sota_your_api_key_here\"\n      }\n    }\n  }\n}\n```\n\n### Cursor\n\nCreate `.cursor/mcp.json` in your project root:\n\n```json\n{\n  \"mcpServers\": {\n    \"sota\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@sota-io/mcp\"],\n      \"env\": {\n        \"SOTA_API_KEY\": \"sota_your_api_key_here\"\n      }\n    }\n  }\n}\n```\n\n### Windsurf\n\nEdit `~/.codeium/windsurf/mcp_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"sota\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@sota-io/mcp\"],\n      \"env\": {\n        \"SOTA_API_KEY\": \"sota_your_api_key_here\"\n      }\n    }\n  }\n}\n```\n\n## Tools\n\n| Tool | Description | Parameters |\n|------|-------------|------------|\n| `deploy` | Deploy an app | `project_id`, `directory?` |\n| `get-logs` | Get build/runtime logs | `project_id`, `deployment_id?` |\n| `set-env` | Set environment variable | `project_id`, `key`, `value` |\n| `get-env` | List environment variables | `project_id` |\n| `rollback` | Rollback to previous deployment | `project_id` |\n| `get-status` | Get deployment status | `project_id` |\n| `list-projects` | List all projects | *(none)* |\n| `create-project` | Create a new project | `name` |\n| `delete-project` | Delete a project permanently | `project_id` |\n| `add-domain` | Add custom domain to project | `project_id`, `domain` |\n| `list-domains` | List custom domains | `project_id` |\n| `get-domain` | Get domain details and DNS status | `project_id`, `domain_id` |\n| `remove-domain` | Remove custom domain | `project_id`, `domain_id` |\n\n### `deploy`\n\nDeploy an application to sota.io. Creates a tar.gz archive of the specified directory and uploads it.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `project_id` | string | Yes | Project ID to deploy to |\n| `directory` | string | No | Directory to deploy (defaults to current working directory) |\n\n```\n\"Deploy my app in the current directory to sota.io\"\n```\n\n### `get-logs`\n\nGet build and runtime logs for a deployment. If no deployment_id is provided, returns logs for the latest deployment.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `project_id` | string | Yes | Project ID to get logs for |\n| `deployment_id` | string | No | Specific deployment ID (defaults to latest) |\n\n```\n\"Show me the build logs for my sota.io project\"\n```\n\n### `set-env`\n\nSet an environment variable for a project.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `project_id` | string | Yes | Project ID |\n| `key` | string | Yes | Environment variable name (e.g., DATABASE_URL) |\n| `value` | string | Yes | Environment variable value |\n\n```\n\"Set DATABASE_URL on my project to postgres://localhost/mydb\"\n```\n\n### `get-env`\n\nList environment variables for a project.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `project_id` | string | Yes | Project ID |\n\n```\n\"Show all environment variables for my project\"\n```\n\n### `rollback`\n\nRollback a project to its previous deployment. This swaps the container image without rebuilding.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `project_id` | string | Yes | Project ID to rollback |\n\n```\n\"Roll back my app to the previous version\"\n```\n\n### `get-status`\n\nGet the current deployment status for a project, including URL and recent deployment history.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `project_id` | string | Yes | Project ID to check status for |\n\n```\n\"What's the status of my sota.io deployment?\"\n```\n\n### `list-projects`\n\nList all projects on your sota.io account.\n\n*No parameters required.*\n\n```\n\"List my sota.io projects\"\n```\n\n### `create-project`\n\nCreate a new project on sota.io. The project slug is auto-generated from the name (lowercase, hyphens, max 63 chars) and used as the subdomain (`{slug}.sota.io`). For example, \"My API\" becomes `my-api.sota.io`.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `name` | string | Yes | Name for the new project |\n\n```\n\"Create a new sota.io project called my-api\"\n```\n\n### `delete-project`\n\nDelete a project and all its deployments from sota.io. This action is permanent.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `project_id` | string | Yes | Project ID to delete |\n\n```\n\"Delete my sota.io project abc123\"\n```\n\n### `add-domain`\n\nAdd a custom domain to a project. Returns DNS instructions for pointing the domain.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `project_id` | string | Yes | Project ID |\n| `domain` | string | Yes | Domain name (e.g., \"example.com\" or \"app.example.com\") |\n\n```\n\"Add example.com as a custom domain to my project\"\n```\n\n### `list-domains`\n\nList all custom domains for a project.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `project_id` | string | Yes | Project ID |\n\n```\n\"Show all custom domains for my project\"\n```\n\n### `get-domain`\n\nGet domain details including DNS verification status and SSL state.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `project_id` | string | Yes | Project ID |\n| `domain_id` | string | Yes | Domain ID |\n\n```\n\"Check the DNS status of my custom domain\"\n```\n\n### `remove-domain`\n\nRemove a custom domain from a project.\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `project_id` | string | Yes | Project ID |\n| `domain_id` | string | Yes | Domain ID to remove |\n\n```\n\"Remove the custom domain from my project\"\n```\n\n## Environment Variables\n\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| `SOTA_API_KEY` | Yes | — | API key with `sota_` prefix. Create at [sota.io/dashboard/settings](https://sota.io/dashboard/settings) |\n| `SOTA_API_URL` | No | `https://api.sota.io` | API base URL |\n\n## Troubleshooting\n\n### \"npx: command not found\"\n\n**Problem:** Your IDE doesn't inherit the shell PATH where nvm/fnm is loaded.\n\n**Fix:** Use the absolute path to npx. Find it with:\n\n```bash\nwhich npx\n# Example output: /Users/you/.nvm/versions/node/v22.0.0/bin/npx\n```\n\nThen update your MCP config to use the absolute path:\n\n```json\n{\n  \"mcpServers\": {\n    \"sota\": {\n      \"command\": \"/Users/you/.nvm/versions/node/v22.0.0/bin/npx\",\n      \"args\": [\"-y\", \"@sota-io/mcp\"],\n      \"env\": {\n        \"SOTA_API_KEY\": \"sota_your_api_key_here\"\n      }\n    }\n  }\n}\n```\n\n### \"SOTA_API_KEY environment variable is required\"\n\n**Problem:** The API key is not set in your MCP configuration.\n\n**Fix:** Add the `env` block to your MCP server config. Shell environment variables do **not** automatically pass to MCP servers — the `env` block in the config is required:\n\n```json\n{\n  \"env\": {\n    \"SOTA_API_KEY\": \"sota_your_api_key_here\"\n  }\n}\n```\n\n### Connection refused or timeout errors\n\n**Problem:** Network issue or wrong API URL.\n\n**Fix:** Check your internet connection. If you're using a custom API URL, verify `SOTA_API_URL` is set correctly. The default is `https://api.sota.io`.\n\n## License\n\nMIT\n\n## Links\n\n- [Website](https://sota.io)\n- [Documentation](https://sota.io/docs/mcp)\n- [Dashboard](https://sota.io/dashboard)\n- [Issues](https://github.com/sota-deploy/mcp-server/issues)\n",
  "bytes": 10304,
  "sha": "ebbcc252d6f4d20534a52dbefd5540f3128d50e09f1a46cc82babfa84090777b",
  "repo_slug": "sota-deploy/mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_sota_mcp_090b22ad/readme"
}