@sota-io/mcp
@sota-io/mcp
sota.io용 MCP 서버 — 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 웹용 원클릭 설치
Claude Desktop 또는 Claude.ai(Pro / Max / Team / Enterprise 요금제)를 사용하는 경우, 가장 쉬운 설치는 이 npm 패키지가 아닌 mcp.sota.io에서 호스팅되는 원격 엔드포인트입니다. 여기를 클릭하세요:
OAuth가 인증을 처리합니다. 신규 사용자는 create_account 도구를 통해 Claude 내에서 완전히 가입할 수 있습니다. 브라우저 탭 전환이 필요 없습니다.
https://sota.io/docs/integrations/claude를 참조하세요.
빠른 시작 (stdio — Claude Code, Cursor, Windsurf, …)
sota.io/dashboard/settings에서 API 키를 받으세요.
IDE를 구성하세요.
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 |
문제 해결
"npx: command not found"
문제: IDE가 nvm/fnm이 로드된 셸 PATH를 상속하지 않습니다.
해결 방법: 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 environment variable is required"
문제: MCP 구성에 API 키가 설정되지 않았습니다.
해결 방법: MCP 서버 구성에 env 블록을 추가하세요. 셸 환경 변수는 MCP 서버에 자동으로 전달되지 않습니다 — 구성에 env 블록이 필요합니다:
{
"env": {
"SOTA_API_KEY": "sota_your_api_key_here"
}
}연결 거부 또는 시간 초과 오류
문제: 네트워크 문제 또는 잘못된 API URL.
해결 방법: 인터넷 연결을 확인하세요. 사용자 정의 API URL을 사용하는 경우 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.
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
Scored across 13 tools
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
Related MCP Connectors
Deploy and manage your apps, databases, storage, and scheduled jobs from your AI agent
Deploy your project to a live HTTPS URL from your AI tool; read logs, set variables, resize apps.
Deploy and manage Jade Hosting projects from AI clients. Jade account and OAuth required.
Deploy files, sites, and Dockerfile apps to live URLs + private drives for agent memory.
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.27 npmMIT

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.15 npm1MIT- AlicenseNot gradedqualityCmaintenanceEnables AI agents to deploy static websites to StaticX, including creating sites, uploading builds, publishing releases, and managing domains.51 npmMIT
- AlicenseAqualityBmaintenanceEnables AI assistants to deploy, manage, and rollback websites via the Krexel API, supporting site uploads, deploys, logs, rollbacks, environment variables, and status checks.956 npmMIT