@sota-io/mcp
@sota-io/mcp
MCP-сервер для sota.io — развёртывайте веб-приложения с помощью AI-агентов.
Два транспорта
Начиная с версии v1.4.0, этот пакет включает два транспорта:
sota-mcp(stdio, по умолчанию) — для Claude Code, Cursor, Windsurf и любого MCP-клиента, который запускает локальный процесс. ПередайтеSOTA_API_KEYчерез переменную окружения.sota-mcp-http(Streamable HTTP) — для самостоятельного хостинга удалённой конечной точки, которая работает наmcp.sota.io(используется Claude Desktop и веб-версией Claude.ai). ЧитаетSUPABASE_JWT_SECRET,DATABASE_URLи т.д. — большинству пользователей это не нужно; это тот же код, который работает наmcp.sota.io, если вы хотите разместить свой собственный.
Большинству пользователей нужен stdio-транспорт.
Related MCP server: AppsAI MCP Server
Установка в один клик для Claude Desktop / Claude.ai web
Если вы используете Claude Desktop или Claude.ai (план Pro / Max / Team / Enterprise),
самый простой способ установки — не этот npm-пакет, а размещённая удалённая
конечная точка на mcp.sota.io. Нажмите здесь:
OAuth обрабатывает аутентификацию. Новые пользователи могут зарегистрироваться целиком внутри Claude
через инструмент create_account — не нужно переключать вкладки браузера.
См. https://sota.io/docs/integrations/claude.
Быстрый старт (stdio — Claude Code, Cursor, Windsurf, …)
Получите API-ключ на sota.io/dashboard/settings
Спросите своего AI: "Разверни моё приложение на sota.io"
Установка
Установка не требуется — запускайте напрямую через npx:
npx -y @sota-io/mcpИли установите глобально:
npm install -g @sota-io/mcp
sota-mcpКонфигурация
Claude Code
Метод через CLI:
claude mcp add sota -- npx -y @sota-io/mcpЗатем установите API-ключ в окружении оболочки:
export SOTA_API_KEY=sota_your_api_key_hereРучной JSON (.claude/settings.json):
{
"mcpServers": {
"sota": {
"command": "npx",
"args": ["-y", "@sota-io/mcp"],
"env": {
"SOTA_API_KEY": "sota_your_api_key_here"
}
}
}
}Claude Desktop
Отредактируйте claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"sota": {
"command": "npx",
"args": ["-y", "@sota-io/mcp"],
"env": {
"SOTA_API_KEY": "sota_your_api_key_here"
}
}
}
}Cursor
Создайте .cursor/mcp.json в корне проекта:
{
"mcpServers": {
"sota": {
"command": "npx",
"args": ["-y", "@sota-io/mcp"],
"env": {
"SOTA_API_KEY": "sota_your_api_key_here"
}
}
}
}Windsurf
Отредактируйте ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"sota": {
"command": "npx",
"args": ["-y", "@sota-io/mcp"],
"env": {
"SOTA_API_KEY": "sota_your_api_key_here"
}
}
}
}Инструменты
Инструмент | Описание | Параметры |
| Развернуть приложение |
|
| Получить логи сборки/выполнения |
|
| Установить переменную окружения |
|
| Список переменных окружения |
|
| Откатить к предыдущему развёртыванию |
|
| Получить статус развёртывания |
|
| Список всех проектов | (нет) |
| Создать новый проект |
|
| Удалить проект навсегда |
|
| Добавить пользовательский домен |
|
| Список пользовательских доменов |
|
| Получить детали домена и статус DNS |
|
| Удалить пользовательский домен |
|
deploy
Развёртывает приложение на sota.io. Создаёт tar.gz-архив указанной директории и загружает его.
Параметр | Тип | Обязательный | Описание |
| string | Да | ID проекта, в который развернуть |
| string | Нет | Директория для развёртывания (по умолчанию текущая) |
"Deploy my app in the current directory to sota.io"get-logs
Получить логи сборки и выполнения для развёртывания. Если deployment_id не указан, возвращает логи последнего развёртывания.
Параметр | Тип | Обязательный | Описание |
| string | Да | ID проекта для получения логов |
| string | Нет | ID конкретного развёртывания (по умолчанию последнее) |
"Show me the build logs for my sota.io project"set-env
Установить переменную окружения для проекта.
Параметр | Тип | Обязательный | Описание |
| string | Да | ID проекта |
| string | Да | Имя переменной окружения (например, DATABASE_URL) |
| string | Да | Значение переменной окружения |
"Set DATABASE_URL on my project to postgres://localhost/mydb"get-env
Список переменных окружения для проекта.
Параметр | Тип | Обязательный | Описание |
| string | Да | ID проекта |
"Show all environment variables for my project"rollback
Откатить проект к предыдущему развёртыванию. Это заменяет образ контейнера без пересборки.
Параметр | Тип | Обязательный | Описание |
| string | Да | ID проекта для отката |
"Roll back my app to the previous version"get-status
Получить текущий статус развёртывания проекта, включая URL и историю развёртываний.
Параметр | Тип | Обязательный | Описание |
| string | Да | ID проекта для проверки статуса |
"What's the status of my sota.io deployment?"list-projects
Список всех проектов в вашей учётной записи sota.io.
Параметры не требуются.
"List my sota.io projects"create-project
Создать новый проект на sota.io. Слаг проекта генерируется автоматически из имени (строчные буквы, дефисы, макс. 63 символа) и используется как поддомен ({slug}.sota.io). Например, "My API" становится my-api.sota.io.
Параметр | Тип | Обязательный | Описание |
| string | Да | Имя нового проекта |
"Create a new sota.io project called my-api"delete-project
Удалить проект и все его развёртывания с sota.io. Это действие необратимо.
Параметр | Тип | Обязательный | Описание |
| string | Да | ID проекта для удаления |
"Delete my sota.io project abc123"add-domain
Добавить пользовательский домен к проекту. Возвращает инструкции DNS для настройки домена.
Параметр | Тип | Обязательный | Описание |
| string | Да | ID проекта |
| string | Да | Имя домена (например, "example.com" или "app.example.com") |
"Add example.com as a custom domain to my project"list-domains
Список всех пользовательских доменов для проекта.
Параметр | Тип | Обязательный | Описание |
| string | Да | ID проекта |
"Show all custom domains for my project"get-domain
Получить детали домена, включая статус проверки DNS и состояние SSL.
Параметр | Тип | Обязательный | Описание |
| string | Да | ID проекта |
| string | Да | ID домена |
"Check the DNS status of my custom domain"remove-domain
Удалить пользовательский домен из проекта.
Параметр | Тип | Обязательный | Описание |
| string | Да | ID проекта |
| string | Да | ID домена для удаления |
"Remove the custom domain from my project"Переменные окружения
Переменная | Обязательная | По умолчанию | Описание |
| Да | — | API-ключ с префиксом |
| Нет |
| Базовый URL API |
Устранение неполадок
"npx: команда не найдена"
Проблема: Ваша IDE не наследует PATH оболочки, где загружен nvm/fnm.
Решение: Используйте абсолютный путь к npx. Найдите его с помощью:
which npx
# Example output: /Users/you/.nvm/versions/node/v22.0.0/bin/npxЗатем обновите конфигурацию MCP, указав абсолютный путь:
{
"mcpServers": {
"sota": {
"command": "/Users/you/.nvm/versions/node/v22.0.0/bin/npx",
"args": ["-y", "@sota-io/mcp"],
"env": {
"SOTA_API_KEY": "sota_your_api_key_here"
}
}
}
}"Требуется переменная окружения SOTA_API_KEY"
Проблема: API-ключ не установлен в конфигурации MCP.
Решение: Добавьте блок env в конфигурацию MCP-сервера. Переменные окружения оболочки не передаются автоматически MCP-серверам — требуется блок env в конфигурации:
{
"env": {
"SOTA_API_KEY": "sota_your_api_key_here"
}
}Ошибки "Connection refused" или тайм-аут
Проблема: Проблема с сетью или неверный URL API.
Решение: Проверьте подключение к интернету. Если вы используете собственный URL API, убедитесь, что SOTA_API_URL установлен правильно. По умолчанию используется https://api.sota.io.
Лицензия
MIT
Ссылки
Available Tools
13 toolsadd-domainAIdempotentInspect
Add a custom domain to a sota.io project. Each project supports up to 5 custom domains with automatic HTTPS via Let's Encrypt. Returns DNS setup instructions: for apex domains (example.com), add an A record pointing to 23.88.45.28; for subdomains (app.example.com), add a CNAME record pointing to {slug}.sota.io. Domain statuses: pending (waiting for DNS) → verified (SSL provisioning) → active (live with HTTPS). After DNS is configured, verification and SSL provisioning happen automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain name to add (e.g. "app.example.com" or "example.com") | |
| project_id | Yes | Project ID (UUID) to add the domain to. Use list-projects to find the ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: it explains the 5-domain limit, automatic HTTPS via Let's Encrypt, the specific DNS record types and IP/CNAME values, and the domain status lifecycle. Annotations (idempotentHint=true, destructiveHint=false) are consistent, and the description enriches the agent's understanding of side effects, return values, and provisioning behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient: a single paragraph of four sentences, each adding unique value. It front-loads the purpose, then concisely covers constraints, DNS instructions, and status lifecycle. No redundancy or filler; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, no output schema, straightforward mutation), the description covers all critical aspects: what it does, constraints (5 domains, automatic HTTPS), return value (DNS instructions), and status progression. The agent can reliably decide to invoke and understand the outcome. The only minor gap is error handling, but the idempotentHint annotation covers safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds significant meaning beyond the parameter descriptions. It explains how the domain parameter determines whether an A record (for apex) or CNAME record (for subdomain) is required, provides the exact IP address and CNAME format, and clarifies the return value contains DNS setup instructions. This goes well beyond the schema's example values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Add a custom domain to a sota.io project' with a specific verb and resource. It distinguishes from sibling tools like list-domains, get-domain, and remove-domain by clearly indicating this is the creation operation, and provides additional context about constraints and return value.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or prerequisites. The context 'Each project supports up to 5 custom domains' implies a limitation but does not directly guide the agent on when to choose add-domain over other domain-related tools. Usage is implied by the name and description, but not explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-projectAInspect
Create a new project on sota.io. Each project automatically provisions: (1) a managed PostgreSQL 17 database accessible via the DATABASE_URL environment variable (auto-injected, no configuration needed), (2) PgBouncer connection pooling (pool size 20, max 100 clients), (3) automatic daily database backups with 7-day retention, (4) a live URL at https://{slug}.sota.io with automatic HTTPS via Let's Encrypt. The project slug is auto-generated from the name (lowercase, hyphens, max 63 chars) and is immutable after creation. Supported frameworks: Next.js, Node.js (Express/Fastify/Koa), Python (Flask/FastAPI/Django), or any language via custom Dockerfile. You can also add up to 5 custom domains per project with automatic HTTPS (via API: POST /v1/projects/:id/domains with {domain: "yourdomain.com"}). DNS: A record to 23.88.45.28 for apex domains, CNAME to {slug}.sota.io for subdomains.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the new project. A URL slug will be auto-generated (e.g. "My Cool App" becomes my-cool-app.sota.io) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite minimal annotations (all false), the description provides rich behavioral details: auto-provisioning of database, connection pooling, backups, immutable slug, framework support, custom domain setup, and DNS instructions. No contradiction with annotations; the description fully compensates for the lack of annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence adds value (provisions, constraints, post-creation actions). It is front-loaded with the main purpose. Could be slightly tightened, but the verbosity is justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers creation behavior, automatic provisioning, constraints, and post-creation steps (custom domains via API). However, it lacks explicit details about the tool's return value or response structure, which is notable since no output schema exists. This gap slightly reduces completeness for an agent that needs to chain actions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers 'name' with a description of slug generation. The description adds meaningful constraints: slug is lowercase, hyphens, max 63 chars, and immutable after creation. This extra detail helps the agent generate appropriate values beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new project on sota.io.' with a specific verb and resource. It goes into extensive detail about what is automatically provisioned, which distinguishes it from sibling tools like deploy or list-projects that serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for creating projects but does not explicitly state when to use it versus alternatives. There is no mention of prerequisites, exclusions, or when not to use it. Compared to siblings like add-domain, the usage context is clear only by name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-projectADestructiveIdempotentInspect
Delete a project and all its deployments from sota.io. This action is PERMANENT and irreversible. It removes the project, all deployments, the managed PostgreSQL database, environment variables, and webhooks. The project slug will become available again after deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID (UUID) to delete. Use list-projects to find the ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructiveHint=true (alerting to damage) and idempotentHint=true (unusual for deletion but noted). The description adds crucial behavioral context beyond annotations: it explicitly lists what gets destroyed ('all deployments, the managed PostgreSQL database, environment variables, and webhooks'), states the action is 'PERMANENT and irreversible', and mentions that 'The project slug will become available again after deletion.' This goes well beyond what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loads the action and permanence, and lists the destroyed resources concisely. Every sentence serves a purpose: first sentence states the action and its finality, second sentence details what is removed and the side effect. Zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's high complexity (destructive, irreversible, many side effects), the description is complete: it specifies what is deleted, that it's permanent, and that the slug becomes available again. There is no output schema, and the description does not need to explain return values for a deletion tool—the important information is the outcome, which is clearly stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter (project_id) already documented as 'Project ID (UUID) to delete. Use list-projects to find the ID.' The description does not add new parameter semantics, but since coverage is high and the parameter is simple, the baseline is 3. The description earns a 4 because it provides important usage context (where to get the ID and what happens upon deletion) that complements the schema without being redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a project and all its deployments from sota.io' with a specific verb ('Delete'), resource ('project and all its deployments'), and platform ('sota.io'). It distinguishes itself from siblings like list-projects, create-project, and set-env by describing the permanent and irreversible nature of the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use it (to delete a project) and highlights its permanence and irreversibility, guiding the agent to be cautious. However, it does not explicitly state when not to use it or provide alternatives among sibling tools (e.g., consider archiving or using rollback instead). The strong emphasis on permanence implies rare use, but no exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployADestructiveInspect
Deploy an application to sota.io. Creates a tar.gz archive of the specified directory and uploads it (max 50 MB). The platform auto-detects your framework and builds a Docker image automatically:
Next.js: Detected via next.config.js/ts. Add output: 'standalone' to next.config for optimal builds.
Node.js: Detected via package.json with a "start" script. Works with Express, Fastify, Koa, Hapi, etc.
Python: Detected via requirements.txt or pyproject.toml. Works with Flask, FastAPI, Django.
Custom Dockerfile: If a Dockerfile exists in the project root, it takes priority over auto-detection. Use this for Go, Rust, Java, or any other language. The EXPOSE directive in the Dockerfile is used to detect the app port automatically.
IMPORTANT: Your app MUST listen on the PORT environment variable. For auto-detected frameworks (Next.js, Node.js, Python) PORT is 8080. For custom Dockerfiles, the port is auto-detected from the EXPOSE directive (e.g. EXPOSE 3000 sets PORT=3000). If no EXPOSE is found, it defaults to 8080.
Every project includes a managed PostgreSQL 17 database. Six environment variables are auto-injected into your container — no manual database configuration needed: DATABASE_URL (full connection string), PGHOST, PGPORT, PGUSER, PGPASSWORD, and PGDATABASE. Libraries that follow libpq conventions (node-postgres, pgx, psycopg2, Django) pick up the PG* variables automatically with no configuration. If your app needs database migrations, run them on startup.
Deployments use blue-green strategy for zero downtime. The old container keeps running until the new one passes health checks (60s timeout). Use get-logs to monitor build progress. Files matching .gitignore and .sotaignore are excluded from the archive.
| Name | Required | Description | Default |
|---|---|---|---|
| directory | No | Absolute path to the directory to deploy. Defaults to current working directory. Must contain your app source code (package.json, requirements.txt, or Dockerfile) | |
| project_id | Yes | Project ID (UUID) to deploy to. Use list-projects to find the ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, and the description goes far beyond that by explaining the exact behavior: creates a tar.gz archive, uploads (max 50 MB), auto-detects framework, builds Docker image, uses blue-green deployment, keeps old container until health checks pass, and excludes files matching .gitignore/.sotaignore. It also details the auto-injected database environment variables. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections and bullet points for framework detection. It is front-loaded with the purpose and then dives into details. However, it is somewhat verbose, especially the section on database environment variables which could be shortened. Still, every sentence earns its place by providing necessary operational context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, and the description does not mention what the response or return value of the deploy call is. It also does not explicitly state error conditions, failure modes, or what happens if the upload fails. Given the complexity of the tool (deployment with blue-green, health checks, etc.), the description should include what the agent can expect back (e.g., a deployment ID, status, or confirmation). The absence of this information makes it slightly incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described. The description adds context about the directory needing to contain app source code and mentions that project_id can be found via list-projects, but this mostly repeats schema descriptions. It does not add new semantic constraints beyond what is in the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Deploy an application to sota.io' and explains the entire process: creating an archive, uploading, auto-detecting framework, and building a Docker image. This is a specific verb-resource pair that distinguishes it from all sibling tools (none of which deploy).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides extensive guidance on when to use this tool, including framework detection, the requirement to listen on the PORT environment variable, and the blue-green deployment strategy. It also explicitly mentions using 'get-logs' to monitor build progress, steering the agent to an alternative tool for monitoring. The description covers prerequisites, supported frameworks, and custom Dockerfile usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-domainARead-onlyIdempotentInspect
Get details of a custom domain including its current status and DNS setup instructions. Domain statuses: pending (DNS not yet configured), verified (DNS confirmed, SSL provisioning), active (live with HTTPS). If status is 'pending', configure the DNS record as shown in the instructions.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_id | Yes | Domain ID (UUID). Use list-domains to find the ID | |
| project_id | Yes | Project ID (UUID). Use list-projects to find the ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by explaining the domain status lifecycle (pending→verified→active) and actionable advice for pending domains ('configure the DNS record as shown in the instructions'), which goes beyond the annotation structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two well-structured sentences with status enumeration. The first sentence front-loads purpose, the second provides actionable status-specific guidance. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description mentions 'details... status and DNS setup instructions' but is vague about the full response structure. It adequately covers the main use but could be more specific about what fields are returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add new meaning to parameters beyond what the schema already provides (UUID, use list-domains/projects to find IDs). No additional semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get details of a custom domain including its current status and DNS setup instructions,' specifying the verb, resource, and scope. It differentiates from siblings like 'add-domain', 'remove-domain', and 'list-domains' by focusing on a single domain's details and statuses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (to get domain details) and provides parameter sourcing hints ('Use list-domains to find the ID'), but does not explicitly contrast with alternatives like 'list-domains' or mention when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-envARead-onlyIdempotentInspect
List environment variables for a project. Values are masked for security. Auto-injected variables (DATABASE_URL, PGHOST, PGPORT, PGUSER, PGPASSWORD, PGDATABASE, PORT) may not appear in this list but are always available in the container at runtime.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive hints. The description adds transparency about values being masked for security and the fact that auto-injected variables may not appear but are available at runtime, which is useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (two sentences), front-loaded with the primary action, and every sentence adds value. No wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool, the description adequately covers purpose, security, and a caveat. However, it does not describe the output format (e.g., list of key-value pairs), which would be helpful given the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the single parameter 'project_id' described as 'Project ID (UUID)'. The description adds no new parameter details beyond mentioning 'for a project', so it meets the baseline expectation without improvement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists environment variables for a project, using a specific verb ('List') and indicating the resource (project). It distinguishes itself from siblings like 'set-env' (write) and other unrelated tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reading environment variables but does not explicitly state when to use it versus alternatives like 'set-env' or 'get-logs'. The caveat about auto-injected variables provides context but no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-logsARead-onlyIdempotentInspect
Get build and runtime logs for a deployment. If no deployment_id is provided, returns logs for the latest deployment. Use this after calling deploy to monitor build progress and diagnose failures. Logs include: framework detection output, dependency installation, build steps, container startup, and health check results. If a deployment fails, check the logs for error details — common issues include missing dependencies, build errors, or the app not listening on the correct PORT (check the PORT env var — 8080 for auto-detected frameworks, or the EXPOSE value from Dockerfile).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID (UUID) to get logs for | |
| deployment_id | No | Specific deployment ID (optional, defaults to latest). Use get-status to see recent deployment IDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. The description adds significant behavioral context: default behavior (latest deployment if no deployment_id), content of logs (framework detection, dependency installation, build steps, etc.), and common failure scenarios (missing dependencies, build errors, port issues). This goes well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (about 5 sentences) and well-structured: it starts with the core purpose, then gives usage context, lists log contents, and ends with troubleshooting tips. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema, no nested objects), the description is complete. It covers the purpose, default behavior, log contents, common issues, and parameter hints. No gaps are apparent for an agent to correctly select and invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both parameters have descriptions). The description adds semantic meaning beyond the schema: it explains the default behavior of deployment_id (optional, defaults to latest) and provides a helpful hint to use get-status to see recent deployment IDs. This enriches the parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Get build and runtime logs for a deployment.' It also specifies the default behavior (returns logs for latest deployment if no deployment_id provided) and distinguishes itself from siblings by positioning it as a tool to use after deploy to monitor progress and diagnose failures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'Use this after calling deploy to monitor build progress and diagnose failures.' It also provides troubleshooting context (common issues) and references another tool ('Use get-status to see recent deployment IDs') in the parameter description, offering clear guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-statusARead-onlyIdempotentInspect
Get the current deployment status for a project, including the live URL (https://{slug}.sota.io), detected framework, and recent deployment history. Deployment statuses: pending (queued), building (build in progress), built (image ready), deploying (starting container + health checks), running (live and healthy), failed (build or health check error), stopped (replaced by newer deployment). Use this to verify a deployment succeeded after calling deploy.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID (UUID) to check status for. Use list-projects to find the ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description's burden is lower. The description adds value by listing possible statuses (pending, building, built, deploying, running, failed, stopped) and mentioning the URL format ({slug}.sota.io), which helps the agent understand the lifecycle. It does not discuss rate limits or potential staleness of status, but these are acceptable omissions for a simple read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (3 sentences) and front-loaded: the first sentence states the purpose, the second lists statuses, and the third gives usage guidance. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, simple schema, clear annotations, and no output schema), the description is complete. It explains what the tool returns (URL, framework, history), defines statuses, and clarifies the expected use case. The agent has everything needed to invoke and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with the schema already describing the parameter 'project_id' as a UUID and referencing 'list-projects' to find it. The description adds no further parameter semantics beyond what the schema provides. Baseline 3 is correct since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'current deployment status for a project'. It distinguishes itself from siblings like 'deploy' (which triggers deployment) and 'get-logs' (which retrieves logs) by specifying the exact output: live URL, detected framework, and deployment history. The description also lists deployment statuses, adding precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'Use this to verify a deployment succeeded after calling deploy.' This directly helps the agent choose between this and sibling tools like 'get-logs' (for troubleshooting) or 'deploy' (to initiate). No alternative exclusions are needed since the use case is singular.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-domainsARead-onlyIdempotentInspect
List all custom domains for a sota.io project. Shows domain name, status (pending/verified/active), and ID for each domain. Use get-domain with a domain ID to see DNS instructions and full details.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID (UUID) to list domains for. Use list-projects to find the ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds that the tool shows domain name, status, and ID, and implies a list output. This is adequate but does not disclose potential pagination or limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and no extraneous words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one parameter and strong annotations, the description covers the main purpose and return fields. It could mention the output format (e.g., array of objects) but is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter project_id, with a clear description. The description does not add further parameter-level detail, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all custom domains for a sota.io project' with a specific verb and resource, and mentions the information shown (domain name, status, ID). It distinguishes from sibling tool get-domain by directing users there for details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance by stating 'Use get-domain with a domain ID to see DNS instructions and full details,' which tells the agent when to use an alternative. It does not explicitly list when not to use this tool, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-projectsARead-onlyIdempotentInspect
List all projects on your sota.io account. sota.io is an EU-native DevOps PaaS hosted in Germany (GDPR-compliant). Each project gets a live URL at {slug}.sota.io with automatic HTTPS, a managed PostgreSQL 17 database (DATABASE_URL auto-injected), PgBouncer connection pooling, daily backups, zero-downtime blue-green deployments, gVisor container isolation, and custom domain support (up to 5 per project with automatic HTTPS).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the agent knows it is a safe, non-destructive read operation. The description goes beyond by providing extensive context about what projects are (sota.io, GDPR, auto-URL, PostgreSQL, etc.), which helps the agent understand the domain. It does not disclose any hidden behavioral traits beyond what annotations cover, but it adds useful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence for the core purpose, followed by a long sentence detailing sota.io features. The core action is front-loaded and clear. The additional information, while somewhat lengthy, provides valuable context for the agent. It is not overly verbose for the value it adds.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no output schema, and rich annotations, the description is complete. It explains what the tool does, the domain context, and the nature of the projects listed. There are no gaps in understanding what the tool returns or requires.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with 0 parameters, so the description has nothing to add beyond what the schema already shows. Baseline 3 is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'projects on your sota.io account', which is specific. It distinguishes itself from siblings like create-project and delete-project, but it does not explicitly distinguish from other list tools like list-domains, so it is not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is a straightforward listing tool with no parameters, suitable for when you need an overview of all projects. However, it provides no guidance on when to use it versus other tools (e.g., get-status for a specific project), nor when not to use it. The context is clear but lacks explicit usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove-domainADestructiveIdempotentInspect
Remove a custom domain from a sota.io project. This removes the domain mapping and its SSL certificate. The DNS records at your registrar are NOT automatically removed — clean those up manually. This action is immediate and irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| domain_id | Yes | Domain ID (UUID). Use list-domains to find the ID | |
| project_id | Yes | Project ID (UUID). Use list-projects to find the ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true and idempotentHint=true. The description adds significant detail: it removes SSL certificate, is immediate and irreversible, and clarifies that DNS records are not automatically removed. This enriches the behavioral profile beyond what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the primary action. Every sentence adds value: purpose, scope of removal, and important caveats. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple removal tool with no output schema, the description covers the action, what is destroyed, what is not destroyed, and the irreversible nature. It also mentions a post-action step. No missing information given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters already include usage guidance (e.g., 'Use list-domains to find the ID'). The description does not add any additional parameter semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Remove a custom domain from a sota.io project' – a clear verb+resource. It explicitly states what is removed (domain mapping + SSL certificate) and distinguishes from siblings like add-domain by noting what it does NOT handle (DNS records). This provides full purpose clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description is clear about the action's irreversibility and the need to manually clean up DNS records. It implicitly tells the user when to use this tool (when you want to unmap a domain) and what to do after. However, it does not explicitly compare to alternatives like add-domain or list-domains, which would be a minor improvement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rollbackADestructiveIdempotentInspect
Rollback a project to its previous deployment. This instantly swaps the container image without rebuilding — the previous image is reused for near-instant rollback. Uses the same blue-green strategy for zero downtime. The database is NOT rolled back (data persists across deployments). Use this when a deployment introduces bugs or breaks the app.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID (UUID) to rollback. Use list-projects to find the ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true, idempotentHint=true), the description reveals that the rollback swaps the container image without rebuilding, uses a blue-green strategy for zero downtime, and does not affect the database. These details help the agent understand operational impact and recovery guarantees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: purpose, mechanism, and usage guidance. Every sentence adds distinct value without redundancy. It is front-loaded and highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple input schema (one well-documented parameter), no output schema, and the tool's complexity, the description covers purpose, behavioral traits, usage conditions, and a critical caveat (no database rollback). No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage and only one parameter (project_id), the schema already explains the parameter well. The description adds no further semantics beyond what is in the schema, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a clear verb+resource pair, 'Rollback a project to its previous deployment.' This distinctively separates it from sibling tools like 'deploy' (which creates a new deployment) and 'delete-project' (which removes the project entirely).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the use case: 'Use this when a deployment introduces bugs or breaks the app.' It also clarifies a key limitation: 'The database is NOT rolled back,' helping agents avoid misuse. While it does not name alternative tools, the purpose and context make the decision clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set-envADestructiveIdempotentInspect
Set an environment variable for a project. Variables are encrypted at rest (AES-256-GCM) and injected at container runtime. NOTE: DATABASE_URL, PGHOST, PGPORT, PGUSER, PGPASSWORD, and PGDATABASE are all auto-injected for the managed PostgreSQL database — you do NOT need to set any of them manually. The PORT variable is auto-managed: 8080 for auto-detected frameworks (Next.js, Node.js, Python), or auto-detected from the Dockerfile EXPOSE directive for custom Dockerfile builds. IMPORTANT: Changing env vars does NOT auto-redeploy. You must call deploy or use the redeploy API endpoint to apply changes. For Next.js apps, NEXT_PUBLIC_* variables must be set BEFORE deploying since they are embedded at build time.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Environment variable name (e.g., STRIPE_KEY, REDIS_URL, API_SECRET). Do NOT set DATABASE_URL — it is auto-managed | |
| value | Yes | Environment variable value. Will be encrypted at rest | |
| project_id | Yes | Project ID (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotentHint=true and destructiveHint=true, meaning the tool is safe to retry but changes take effect. The description adds critical context: variables are encrypted at rest (AES-256-GCM), they are injected at runtime, the auto-managed variable list, and the non-redeploy behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is substantial but front-loaded with the core action ('Set an environment variable for a project.') and then covers encryption, auto-managed vars, redeploy requirement, and Next.js specifics. Every sentence provides necessary information, though it could be slightly tighter by merging the auto-managed variable list into a single sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (3 required params, mutation tool with deployment lifecycle dependency, encryption info, and sibling environment tools), the description covers all relevant aspects: what it does, what not to do, side effects, and special framework considerations. No output schema exists, but the description's behavioral coverage compensates adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and already provides descriptions for all three parameters (key, value, project_id). The description adds value beyond the schema by clarifying which keys are auto-managed (DATABASE_URL, PORT) and why, effectively enriching the semantics of the key parameter without needing to repeat schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb-resource pairing: "Set an environment variable for a project." It also distinguishes itself from sibling tools like get-env and deploy by explaining the relationship between setting env vars and redeployment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool, listing auto-managed variables (DATABASE_URL, PORT) that should NOT be set manually. It also explains that env var changes do not auto-redeploy and instructs the agent to call deploy or redeploy API to apply changes, plus special guidance for Next.js NEXT_PUBLIC_* variables.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
13 tool updates
v1.4.0- First observed
add-domain - First observed
create-project - First observed
delete-project - First observed
deploy - First observed
get-domain - First observed
get-env - First observed
get-logs - First observed
get-status - First observed
list-domains - First observed
list-projects - First observed
remove-domain - First observed
rollback - First observed
set-env
TDQS
Each tool targets a distinct resource or action: deploy, project lifecycle (list, create, delete), environment variables (set, get), logs, rollback, status, and domain management (add, list, get, remove). There is no overlap or ambiguity between any of the tools.
The tool names follow a consistent verb-noun pattern using kebab-case (e.g., list-projects, create-project, delete-project, get-logs, set-env, add-domain, remove-domain). However, 'deploy' and 'rollback' are verbs without a noun object, which is a minor deviation from the pattern.
With 13 tools, the set is well-scoped for a DevOps PaaS server. It covers the essential operations for deploying, managing projects, handling environment variables, viewing logs, and managing custom domains without being excessive or too thin.
The tool surface covers the core lifecycle: project CRUD, deployment, logs, env vars, rollback, and domain management. Minor gaps include the absence of a tool to update project settings or trigger a redeploy without re-uploading, but these are workable gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Deploy and manage your apps, databases, storage, and scheduled jobs from your AI agent
Deploy files, sites, and Dockerfile apps to live URLs + private drives for agent memory.
Deploy the small apps your agent builds: one tool call returns a live, private shareable HTTPS link.
Deploy a GitHub repo to a live HTTPS URL from your AI tool; read logs, set variables, resize apps.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Dokploy deployments, including creating and deploying applications, managing databases, configuring domains with SSL, and monitoring application status through a standardized interface.29MIT

AppsAI MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceEnables AI agents to build, deploy, and manage full-stack applications on AppsAI's platform, with tools for project management, backend/frontend deployment, billing, marketplace, domains, and more.331MIT- AlicenseNot gradedqualityBmaintenanceEnables AI agents to deploy static websites to StaticX, including creating sites, uploading builds, publishing releases, and managing domains.19MIT
- AlicenseAqualityAmaintenanceEnables AI assistants to deploy, manage, and rollback websites via the Krexel API, supporting site uploads, deploys, logs, rollbacks, environment variables, and status checks.9108MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sota-deploy/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server