Skip to main content
Glama
appolabs

Appo MCP

Official
by appolabs

@appolabs/appo-mcp

Appo 앱 플랫폼용 로컬 MCP(Model Context Protocol) 서버입니다. AI 에이전트에게 appo CLI와 동일한 앱 수명주기 결과물(생성, 구성, 미리보기, 게시, 푸시, 거절 복구, 테스트 빌드, 재제출)을 제공하며, @appolabs/appo SDK용 로컬 코드 생성 개발 도구도 포함합니다.

이 서버는 자체 API 클라이언트를 포함하지 않습니다. 모든 수명주기 호출은 CLI 코어(@appolabs/appoops/api/config)를 재사용합니다. 도구 이름은 apps-web-app/docs/CROSS-SURFACE-PARITY.md에 문서화된 표준 /mcp AppoServer 어휘를 그대로 따르므로, 에이전트는 두 MCP 표면에서 동일한 어휘를 사용할 수 있습니다.

설치

.mcp.json에 추가하세요:

{
  "mcpServers": {
    "appo": {
      "command": "npx",
      "args": ["-y", "@appolabs/appo-mcp"]
    }
  }
}

Related MCP server: React Native Expo MCP

인증

이 서버는 자격 증명을 요구하거나 보관하지 않습니다. CLI와 동일한 방식으로 인증을 처리하므로 두 표면은 항상 동일한 환경을 대상으로 합니다:

  1. appo login을 한 번 실행합니다. CLI로 디바이스 플로우 로그인을 완료하면 토큰이 활성 프로필(~/.appo/config.json)에 저장됩니다. 서버는 공유 구성 모듈을 통해 이 토큰을 읽습니다 — 추가 구성이 필요 없습니다.

  2. APPO_TOKEN 재정의. APPO_TOKEN을 설정하면 PAT를 직접 제공할 수 있습니다(CI/비대화형 환경). 저장된 프로필 토큰보다 우선합니다.

  3. 기본 URL / 프로필. APPO_API_BASE 환경 변수 → 활성 프로필의 api_basehttp://localhost:8002. 프로필 선택: APPO_ENV → 구성의 currentdefault.

토큰을 확인할 수 없는 경우, 모든 수명주기 도구는 구조화된 { error: "not_authenticated", message, next_actions: [] } 봉투를 반환합니다(충돌하지 않음). 메시지는 운영자에게 appo login 실행을 안내합니다.

도구 (20)

앱 수명주기

CLI 코어를 재사용하며, 이름은 표준 /mcp 인벤토리와 일치합니다.

도구

결과

게이트

create_app

앱 생성 (name, base_url)

configure_app

콘텐츠 필드 설정 (name, base_url); 콘텐츠 전용이며 CLI apps update를 그대로 반영합니다

set_icon

https icon_url에서 앱 아이콘 설정

list_apps

인증된 주체가 소유한 앱 목록 표시

get_app_overview

앱 구성, 게시 상태, 메타데이터를 한 번에 조회; app_id 생략 시 단일 앱 기본값. 여기서 시작하세요

preview_app

기기에서 열기 페이로드(iOS TestFlight URL, Android 딥링크, QR 대상, 플랫폼별 준비 상태)

get_build_status

빌드를 ID로 폴링하여 ready/failed 상태까지 대기

get_rejection

거절된 앱에 대한 정리된 필수 조치(원문 리뷰어 텍스트가 아님)

get_fix_recipe

현재 거절 사유에 대한 코드 없는 수정 레시피

publish_app

선택한 스토어에 게시 시작

confirm

unpublish_app

선택한 스토어에서 앱 제거

confirm

send_push

앱의 기기에 푸시 전송

confirm

trigger_resubmission

거절된 앱을 재심사용으로 재제출(고객 소유 Apple 자격 증명 필요)

confirm

의도적으로 ship 도구는 없으며 게시 빌드 트리거도 없습니다. 에이전트는 create_apppublish_app을 연결하고(거절 주기에는 trigger_resubmission 사용), 빌드 트리거는 노출되지 않습니다. store-publish 종류의 빌드는 운영자 내부용(Nova Release)이며, 셀프 서비스 검증은 preview_app(관리형 미리보기)을 통해 이루어집니다.

로컬 개발 도구

로컬 프로젝트에서 작동하며, 설계상 CLI나 원격 MCP에 해당하는 기능이 없습니다.

도구

설명

generate_hook

SDK 기능용 React 훅 생성

generate_component

SDK 통합이 포함된 UI 컴포넌트 생성

scaffold_feature

기능 스캐폴딩(훅 + 컴포넌트 + 타입)

validate_setup

SDK 설치 및 구성 검증

check_permissions

권한 처리 패턴 분석

diagnose_issue

일반적인 SDK 통합 문제 진단

generate_universal_links

apple-app-site-association + assetlinks.json 생성 및 호스팅 지침 제공

확인 게이트 의미론

파괴적 도구(publish_app, unpublish_app, send_push, trigger_resubmission)는 선택적 confirm: boolean을 받습니다. confirm:true가 없으면 쓰기 작업을 수행하지 않고 어떤 일이 발생할지 설명하는 미리보기 봉투({ error: "confirm_required", will, ..., next_actions })를 반환합니다. 이는 MCP 관용구 계층에서 CLI의 --confirm 플래그 / 종료 코드 3 의미론을 그대로 반영합니다.

오류 봉투

오류는 예외를 던지지 않고 구조화된 데이터로 반환됩니다. 모든 도구는 { error, message, next_actions }를 반환하며(HTTP 오류의 경우 status 추가), HTTP 상태는 안정적인 코드로 매핑됩니다: 401 → not_authenticated, 403 → forbidden, 404 → not_found, 409 → conflict, 422 → validation_error, 그 외에는 request_failed. 각 응답은 structuredContent(표준 봉투)와 텍스트 전용 클라이언트를 위한 content의 JSON 텍스트 미러를 포함합니다.

리소스 및 프롬프트

URI

설명

appo://overview

SDK 개요 및 기능

appo://api/{feature}

기능별 API 참조

appo://examples/{feature}

기능별 코드 예제

appo://best-practices

통합 모범 사례

appo://troubleshooting

일반적인 문제 및 해결 방법

프롬프트: setup_wizard, integrate_feature, debug_assistant. 기능: push, biometrics, camera, location, haptics, storage, share, network, device.

2.0.0의 주요 변경 사항

이 릴리스는 표준 도구 어휘와 CLI 공유 인증 체인을 채택합니다.

  • get_app 제거get_app_overview로 대체됨(단일 호출로 구성 + 게시 상태 + 메타데이터, 단일 앱 기본값 포함).

  • update_app 분할configure_app(PATCH /apps/{id}를 통한 콘텐츠 필드 name/base_url)과 set_icon(POST /apps/{id}/icon, https icon_url)으로 분리됨. update_app의 포괄 필드 목록(스플래시 색상, 주입된 CSS/JS, 경로 필드 등)은 제거됨 — 웹뷰 주입은 대시보드 영역이며 CLI/MCP configure 표면에 포함되지 않습니다.

  • 환경 변수 이름 변경APPS_API_URL / APPS_API_TOKEN은 더 이상 읽지 않습니다. CLI 표준인 APPO_API_BASE / APPO_TOKEN을 사용하거나, 간단히 appo login을 실행하여 서버가 저장된 프로필을 읽도록 하세요.

개발

pnpm install
pnpm build       # tsup (ESM + CJS + DTS)
pnpm dev         # watch
pnpm typecheck   # tsc --noEmit
pnpm test        # vitest

라이선스

MIT

Available Tools

21 tools
check_permissionsB

Analyze permission handling patterns in code for a specific SDK feature. Returns analysis with suggestions for proper permission flow.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesCode to analyze for permission handling
featureYesFeature requiring permission (push, camera, or location)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the tool returns analysis with suggestions but does not disclose whether the operation is read-only, modifies anything, or requires authentication. Behavioral traits beyond the basic return are missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loads the main purpose, and contains no superfluous information. Every part is relevant and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With two well-documented parameters and no output schema, the description competently explains the tool's function and return value. However, it could be slightly more detailed about the scope of analysis (e.g., only permission patterns, not general code issues).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both parameters described in the schema. The description does not add any extra meaning beyond what the schema already provides, so baseline score 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool analyzes permission handling patterns in code for a specific SDK feature. The verb 'Analyze' and resource 'permission handling patterns' are specific, but it does not explicitly distinguish from sibling tools like 'diagnose_issue', which may also analyze code.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives or when not to use it. The description does not specify prerequisites or exclusions, leaving the agent without context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_appA

Configures an app's content fields (name, base_url) and who prepares it (prep_mode). Reversible - executes immediately. Content-only, matching the CLI apps update; icon is set_icon, webview injection is a dashboard concern.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoApp name
app_idYesThe app ID to configure
base_urlNoBase URL of the web app (e.g., https://myapp.com)
prep_modeNoWho prepares the app: 'appo_managed' hands icon, splash screen and store copy to Appo (free, 24-48h); 'self_managed' returns preparation to the developer.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full disclosure burden. It does add genuinely useful behavioral traits: 'Reversible - executes immediately.' However, it does not say whether a partial payload (only app_id required) will leave other fields untouched or reset them, nor whether privileges are required — both relevant for a mutating tool with no annotation safety net.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two/three compact sentences with zero filler: the core function leads, then behavior, then boundary disambiguation. Every clause earns its place and the most decision-relevant facts are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

In 100% schema coverage, scope and exclusions are clear, and a 4-param flat tool with no output schema achieves most of what an agent needs. Gaps are minor: the return/confirmation shape is unstated, and partial-update semantics (whether unspecified fields stay intact) are left to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% — every parameter already carries a description, including a detailed prep_mode enum explanation. The description adds only the conceptual grouping ('content fields' vs 'who prepares it'), which is mild value beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Configures an app's content fields (name, base_url) and who prepares it (prep_mode)'), which maps directly to the schema fields. It also pre-empts sibling ambiguity by carving out 'icon is set_icon and webview injection is a dashboard concern,' so an agent can distinguish it from set_icon and other tools without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly scopes the tool as 'Content-only, matching the CLI `apps update`,' and name-s the exclusion: icons belong to set_icon and webview injection belongs to a dashboard concern. This gives concrete when-to-use and when-not-to-use directions relative to populated sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_appA

Creates a new app for the authenticated user. Non-destructive — executes immediately. Authenticate once with appo login (or set APPO_TOKEN). Omit prep_mode when app source code is available in context.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesApp name (max 255 characters)
user_idNoUser ID to assign the app to (optional, defaults to seller)
base_urlYesBase URL of the web app to convert (e.g., https://myapp.com)
metadata_nameNoDisplay name for app stores (optional)
metadata_descriptionNoApp description for app stores (optional)

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses important traits: 'Non-destructive' and 'executes immediately', plus an authentication requirement. This adds useful context beyond the plain 'create' purpose, though it doesn't cover return values or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded, but the mention of 'prep_mode' (not in schema) and the conditional phrasing detracts from clarity. It's not as clean as it could be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter create tool with no output schema, this description covers authentication and a usage condition but omits return values, error scenarios, and relationship to source code. It's adequate but incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 adds a conditional note about 'prep_mode' which is not in the schema, potentially confusing agents. It doesn't meaningfully elaborate on the schema parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Creates') and resource ('new app') with a scope ('for the authenticated user'). It distinguishes from sibling tools like configure_app and publish_app by focusing on creation, though it doesn't explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides authentication prerequisites and a conditional note about 'prep_mode', but does not explicitly say when to use this tool versus alternatives (e.g., configure_app). The guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diagnose_issueB

Diagnose common @appolabs/appo SDK integration issues. Provides diagnosis with solutions and code fixes.

ParametersJSON Schema
NameRequiredDescriptionDefault
featureNoSDK feature related to the issue (if known)
symptomYesDescription of the issue or error
platformNoPlatform where issue occurs
errorMessageNoExact error message (if available)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description does not disclose if the tool modifies state, requires permissions, or has side effects. Merely states it provides diagnosis, which is vague.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, no unnecessary words, front-loaded with core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Describes what the tool provides (diagnosis, solutions, code fixes) but lacks details on output format. Given no output schema, more context on return structure would be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers all 4 parameters with descriptions (100% coverage), so description need not add more. The description does not repeat or enhance parameter info beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it diagnoses Appo SDK integration issues and provides solutions/code fixes. Distinguishes from siblings like check_permissions and generate_component.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. While the context is implied, no when-not-to-use or alternative tool mentions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_componentB

Generate a UI component that uses @appolabs/appo SDK features. Returns a complete React component with SDK integration.

ParametersJSON Schema
NameRequiredDescriptionDefault
featureYesThe SDK feature to build the component around
stylingNoStyling approach (default: tailwind)
variantNoComponent variant/type
componentNameNoComponent name (optional, defaults to {Feature}Button or similar)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It states it generates and returns a React component, but lacks details on side effects (e.g., file creation), authorization needs, or any limitations. For a code generation tool, more transparency is needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main purpose. No wasted words, efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complex task of generating SDK-integrated components and no output schema, the description should provide more context about the output format, defaults, or constraints. It is too brief to fully guide an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with each parameter well-described in the schema. The description adds no additional meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'generate' and resource 'UI component', specifies it uses @appolabs/appo SDK features, and returns a complete React component with SDK integration. This differentiates it from siblings like generate_hook or scaffold_feature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention when not to use it, prerequisites, or contrast with sibling tools like check_permissions or diagnose_issue.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_hookA

Generate a custom React hook for an @appolabs/appo SDK feature. Returns TypeScript code with types, error handling, and loading states.

ParametersJSON Schema
NameRequiredDescriptionDefault
featureYesThe SDK feature to generate a hook for
hookNameNoCustom hook name (optional, defaults to use{Feature})
includeErrorNoInclude error state management (default: true)
includeLoadingNoInclude loading state management (default: true)

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description carries full burden. It discloses that the tool returns TypeScript code with types, error handling, and loading states, but does not mention side effects, permissions, or any destructive actions. Adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that gets straight to the point. It could benefit from structural separation (e.g., when to use), but it is concise and front-loaded with the essential purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and 4 parameters (1 required), the description adequately covers the tool's behavior and output. It explains the return value, which compensates for missing output schema. Lacks only minor usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and each parameter is well-described in the schema. The description adds no additional parameter-level meaning beyond 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Generate a custom React hook for an @appolabs/appo SDK feature' with a specific verb and resource. It distinguishes from siblings like generate_component by focusing on hooks and mentions return value.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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 like generate_component or scaffold_feature. The usage is implied by the hook-specific output, but no guidance on exclusions or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_app_overviewA

Returns app configuration, publication state, and metadata in one call. Start here. If app_id is omitted and you own exactly one app, that app is used.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idNoThe app ID (optional; single-app default applies)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the duty to disclose behavioral traits. It does reveal a key behavior: the single-app default when app_id is omitted, which is useful. However, it does not disclose other potential traits such as whether the call is read-only or if it might perform side effects, though the nature of the tool suggests it's safe. This is a minor gap; the description is transparent about its main quirky behavior but lacks explicit safety confirmation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, exactly two sentences, with the key information front-loaded: the purpose is stated first, followed by a practical usage hint. There is no redundancy or extraneous information, making it highly efficient for an agent to process quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with only one optional parameter and no output schema, the description is quite complete: it explains the primary purpose, the entry-point role, and the default behavior. It could potentially mention what kind of metadata or publication state is included, but since the tool is straightforward and the schema is fully documented, this is a minor omission. The absence of an output schema is fine as the description doesn't need to explain return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers 100% of the parameter with a clear description of app_id (optional, single-app default applies). The tool description adds minimal extra value beyond the schema, except for reinforcing the default behavior context. Given perfect schema coverage, baseline 3 is appropriate; the description does not add significant new semantics beyond what's already stated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose as returning three specific types of information (configuration, publication state, metadata) in a single call, using an actionable verb ('Returns') and specifying the resource ('app'). It also distinguishes itself from siblings like 'get_build_status' and 'get_rejection' by emphasizing the 'one call' overview nature, and the phrase 'Start here' reinforces its role as an entry point.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use it: it's a starting point for app information ('Start here'), and it explains the default behavior when app_id is omitted. However, it does not explicitly state when not to use it or mention alternatives like 'get_build_status' or 'get_rejection', but given it's an overview tool, the guidance is adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_build_statusB

Returns the status of a build by id. Poll until the status reaches ready (then publish_app) or failed. Non-destructive.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID
build_idYesThe build ID to poll

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description says 'Non-destructive', which is valuable given the lack of annotations. It doesn't add context about authentication, rate limits, or the shape of the returned status object; and no output schema exists, so the agent cannot predict return data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single run-on sentence with semicolons. It is reasonably concise but contains a minor malformed phrase 'reaches ready (then publish) or failed.'

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without JSDoc or output schema, it is not exposed to describe what a build status object contains, what fields, what possible values; the description assumes one read cmd but not detailed semantics; no contexts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has two required params with brief descriptions ('app_id', 'build_id'), but the descriptions are minimal and no extraneous meaning such as formats/constraints is added. Schema coverage is complete, hence baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Returns' with resource 'status of a build by id', and adds scope ('by id'), and lifecycle behavior (polling until ready or failed). It distinguishes this as a read/poll operation. However, the sentence structure is slightly awkward.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies when to use it (polling until status is ready or failed) and clarifies the action. It doesn't mention alternatives, but this use case is clearly implied by 'poll until ready (then publish)'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_fix_recipeA

Returns code-free Appo remediation recipes for the current rejection. Non-destructive.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

States 'Non-destructive' which is a key behavioral trait. However, with no annotations, it doesn't disclose authentication, rate limits, or what happens if there's no current rejection. Minimal but present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with purposecars. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one param and no output schema, the description is adequate but could clarify what 'current rejection' refers to and whether any prerequisites exist. It lacks explanation of the recipe structure, but that may be acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the description doesn't add any parameter meaning beyond what the schema already provides. Baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns 'code-free Appo remediation recipes for the current rejection', specifying the verb (returns), resource (recipes), and scope (current rejection). This distinguishes it from siblings like get_rejection and diagnose_issue.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for the current rejection' implies usage context, but there's no explicit guidance about when to choose this over get_rejection or diagnose_issue. Alternatives aren't mentioned, but the context is somewhat implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rejectionA

Returns the Appo publication status and the curated required action for a rejected app. Never exposes raw reviewer text. Non-destructive.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the safety disclosure burden. It explicitly states 'Non-destructive' and adds a meaningful privacy boundary with 'Never exposes raw reviewer text'. It does not cover auth/error behavior, but is sufficient for a simple read-only tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. It front-loads the core purpose and packs in safety and privacy constraints without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one parameter and no output schema, the description adequately covers what is returned (publication status and curated action) and key behaviors (non-destructive, no raw reviewer text). It could add a bit more on expected output shape, but overall it is complete enough for this simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the only parameter, app_id, is already documented in the schema as 'The app ID'. The description adds no extra semantic detail about the parameter, so it meets the baseline but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('Returns') and identifies the resource as 'Appo publication status and the curated required action for a rejected app'. This clearly distinguishes it from siblings like publish_app or get_build_status by focusing on rejected apps and the curated action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied: the tool is for rejected apps needing status/action. However, it does not explicitly state when to use this tool over alternatives like get_fix_recipe or get_app_overview, nor does it mention any exclusions beyond not exposing reviewer text.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_appsA

Lists all apps owned by the authenticated user. Non-destructive.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of disclosing behavior. It includes the non-destructive nature ('Non-destructive'), which is useful. However, it does not mention authentication requirements, pagination, or the structure of the returned list. Given the lack of an output schema, this leaves some ambiguity, but the statement is truthful and adds some value, warranting a 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two short sentences that convey the purpose and non-destructive nature. There is zero wasted verbiage, and the important information is front-loaded. This is an ideal example of conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, no output schema), the description is largely complete. It states the action and scope, and adds the non-destructive trait. While it could mention the return format or authentication, these are reasonable gaps for a simple list operation. The sibling tools suggest this is a read operation, and the context is sufficient for an agent to decide when to use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, and the schema description coverage is 100% (trivially, since there are no properties). According to the scoring rules, a 0-parameter tool receives a baseline of 4. The description does not need to add parameter details, and it doesn't, so a 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Lists all apps owned by the authenticated user.' It uses a specific verb ('lists') and resource ('apps') with a scope ('owned by the authenticated user'). This distinguishes it from sibling tools like create_app or configure_app, which imply different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by specifying ownership by the authenticated user, but it does not explicitly mention when to use it versus alternatives. It lacks guidance on when not to use it or mention of similar tools like get_app_overview. However, the purpose is clear enough for an agent, so it earns a 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_appA

Returns the open-on-device payload: iOS TestFlight URL, Android deeplink, QR target URL, and per-platform readiness. Non-destructive — executes immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It notably states 'Non-destructive — executes immediately,' which communicates safety and execution semantics. However, it does not describe possible failure modes, permission requirements, or what 'per-platform readiness' technically means, so it earns a 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, front-loaded with the primary purpose and output. Every word earns its place: it lists all key output fields and adds a vital safety note. There is zero filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with no output schema, the description provides a good overview of the returned payload and safety trait. It is mostly sufficient, but 'open-on-device payload' could be slightly ambiguous and 'readiness' is undefined. Still, it covers the core needed context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has full description coverage (app_id: 'The app ID'), so the baseline is 3. The description does not add any additional meaning or usage examples for app_id. It references the payload but not in a way that clarifies parameter usage beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Returns the open-on-device payload') and lists concrete resources: iOS TestFlight URL, Android deeplink, QR target URL, and per-platform readiness. This clearly differentiates it from sibling tools like create_app, configure_app, or get_build_status, which involve creation, configuration, or status checks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies it should be used when the agent needs a preview payload, but it never explicitly states when to prefer this over alternatives. There are no exclusion criteria or alternative tool mentions. The 'Non-destructive — executes immediately' hint provides some context but not clear usage boundaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_appA

Starts publication to the chosen stores. Destructive — call with confirm:true to execute; without it returns a preview of the target stores.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID to publish
confirmNoSet true to execute. Without it the tool returns a preview and performs no write.
app_storesYesTarget app stores for publication

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly labels the tool as 'Destructive' and explains the confirm flag's role in executing vs. previewing. Since no annotations are provided, the description carries the full burden, and it does so well by warning about the destructive nature and the need for confirmation. It could add more detail about irreversible consequences, but it covers the key behavioral trait.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary purpose, and every word earns its place. It efficiently conveys the destructive nature, the confirm flag's function, and the preview behavior without any fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (destructive action, confirmation flag, preview mode) and the lack of annotations or output schema, the description is quite complete. It explains the critical behavior (preview vs. execution) and the required confirmation. It could mention what happens after publication (e.g., build status) but that is not essential for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage with descriptions for all three parameters. The description adds context about the 'confirm' parameter's role in execution vs. preview, which is valuable, but it doesn't add much beyond what the schema already states. The baseline for high schema coverage is 3, and the description meets that without significantly exceeding it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Starts publication to the chosen stores.' It uses a specific verb ('Starts publication') and resource ('chosen stores'), and distinguishes itself from siblings like 'unpublish_app' and 'preview_app' by explicitly mentioning the destructive nature and the preview behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: it states that calling without 'confirm:true' returns a preview and performs no write, and implies that to actually publish, one must set 'confirm:true'. This clearly differentiates the execution mode from the preview mode, which is essential for safe usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scaffold_featureB

Scaffold complete feature integration including hook, component, and types. Returns multiple files with integration instructions.

ParametersJSON Schema
NameRequiredDescriptionDefault
featureYesThe SDK feature to scaffold
directoryNoTarget directory path for file suggestions
includeTestsNoInclude test file scaffolding (default: true)

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must convey behavioral traits. It mentions returning multiple files with instructions, but does not disclose potential side effects like file creation or overwriting, or any authentication requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences, each serving a purpose: stating the action and the outcome. No wasted words, though it could be slightly more structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's three parameters and lack of output schema or annotations, the description covers the main functionality but omits details like the includeTests parameter and the exact nature of returned files. Adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description does not add meaningful detail beyond the parameter descriptions. Baseline score of 3 is appropriate as the description adds little to parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to scaffold a complete feature integration including hook, component, and types. This distinguishes it from sibling tools like generate_component and generate_hook which handle individual parts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for full feature scaffolding but does not explicitly state when to use this tool versus alternatives. No guidance on prerequisites or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_pushA

Sends a push to the app's devices. Destructive — call with confirm:true to send; without it returns a preview.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesNotification body
titleYesNotification title
app_idYesThe app ID
confirmNoSet true to send. Without it the tool returns a preview and performs no write.
image_pathNoOptional image path
target_urlNoOptional URL opened when tapped
scheduled_atNoOptional ISO-8601 schedule time

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly warns 'Destructive' and explains the confirm‑gated behavior (preview vs send). This goes beyond the simple action, adding crucial safety context that is not present in the schema (except in confirm's description, but the word 'Destructive' is new context).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences: the first states the action, the second gives the critical destructive/confirm nuance. Every word earns its place; no filler or repetition of schema details. It front-loads the purpose and then the essential behavioral caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 params, 3 required, no output schema, no annotations), the description conveys the essential behavioral difference between preview and send, which is the only unusual aspect. It does not explicitly state return values after sending, but this is not necessarily required given schema richness and lack of output schema. It is reasonably complete for its purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides complete coverage (100%) for all 7 parameters, including descriptions that specify behavior (e.g., confirm's effect). The description does not add new semantics beyond what the schema already defines—it mainly restates the confirm logic. Baseline of 3 applies as schema carries the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool's purpose clearly: 'Sends a push to the app's devices.' It uses a specific verb and resource and is distinct from any sibling tool (none of which relate to push notifications). It doesn't explicitly distinguish from siblings, but none of the listed siblings perform push actions, so this suffices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for use: it is for sending pushes, with an important conditional—confirm:true triggers sending, otherwise it previews. However, it doesn't explicitly mention when NOT to use or alternate tools. It offers a logical safety gate (confirm) that guides correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_iconA

Sets an app's icon from a publicly reachable https URL. The server fetches, validates, and stores the image. Reversible — executes immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID
icon_urlYesPublicly reachable https URL of the icon image

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the server fetches, validates, and stores the image, states that execution is immediate, and notes reversibility. This gives a reasonable picture of behavior, though it does not mention failure handling or whether the existing icon is overwritten.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no fluff. The primary action is front-loaded, followed by crucial behavioral details. Every sentence contributes new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with no output schema, the description covers the essential aspects: the action, URL constraints, server-side process, execution timing, and reversibility. It lacks details on return values or error conditions, but these are not critical for such a straightforward update operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful context beyond the schema by specifying that the icon URL must be publicly reachable and https, and that the server validates the image. This reinforces and enriches the schema definitions for both parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: "Sets an app's icon from a publicly reachable https URL." This identifies the exact action and resource, and the additional detail about server-side fetching and validation further clarifies scope. It is easily distinguished from sibling tools like configure_app or set_permissions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (e.g., when you need to update an app icon from a URL) but does not explicitly state when to prefer this tool over alternatives or mention any exclusions or prerequisites. The reversibility note is useful but not a substitute for explicit when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_permissionsA

Sets an app's native permissions. Pass permissions as an object of { name: boolean }; keys are tracking, camera, microphone, nfc. Only the keys you include change — the rest and every usage message are preserved. Reversible — executes immediately. Request only permissions the app actually uses (store-review discipline).

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID
permissionsYesMap of permission name to enabled boolean. Keys: tracking, camera, microphone, nfc. Include only the toggles you want to change.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description compensates by disclosing key behaviors: it updates only the included keys, preserves the rest and usage messages, and is reversible and immediate. This gives a clear picture of the operation's side effects and reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise, packing all essential information—function, parameters, behavior, and a best practice—into a few short sentences. There is no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It covers the operation's core behavior, reversibility, and a store-review best practice. It omits potential error scenarios or prerequisites, but for a straightforward set operation, the description is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema descriptions cover the parameters, but the description adds valuable meaning by explaining the object's keys and the partial-update semantics (only included keys change). This enriches the schema beyond basic type information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool sets an app's native permissions, enumerating the specific permission keys (tracking, camera, microphone, nfc). The verb 'sets' distinguishes it from read-only tools like check_permissions, and the resource is explicitly identified.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides some usage guidance, such as requesting only permissions the app actually uses and noting the operation is reversible and immediate. However, it does not explicitly differentiate when to use this tool versus alternatives like check_permissions, leaving the comparison implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trigger_resubmissionA

Resubmits a rejected app for review. Destructive — call with confirm:true to execute; without it returns a preview. Requires a customer-owned Apple credential.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID
confirmNoSet true to execute. Without it the tool returns a preview and performs no write.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It clearly labels the tool as 'Destructive' and explains the preview-vs-execute behavior, which is essential for safe use. It could mention side effects beyond execution, but the confirm requirement is well-disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero fluff. The first sentence states the purpose, the second covers safety and prerequisites. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description explains the preview behavior without confirm and the need for a specific credential. It could describe what the preview contains or post-execution results, but given the tool's simplicity, this level is adequate and not missing critical information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (both parameters described), so baseline is 3. The description adds clarity around the confirm parameter's dual role (preview vs execute) and the auth requirement, going beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Resubmits' and the resource 'a rejected app for review', distinguishing it from sibling tools like publish_app or preview_app. It is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the critical usage pattern (call with confirm:true to execute, otherwise preview) and states a prerequisite (customer-owned Apple credential). It does not explicitly compare to alternatives, but the context of 'rejected app' makes the intended use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unpublish_appA

Removes an app from the chosen stores. Destructive — call with confirm:true to execute; without it returns a preview of the target stores.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesThe app ID to unpublish
confirmNoSet true to execute. Without it the tool returns a preview and performs no write.
app_storesYesTarget app stores to remove from

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It clearly discloses that the tool is destructive, requires explicit confirmation, and performs no write without confirm:true. This is strong behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences front-load the core action, then add the safety-critical destructive/confirmation behavior. There is no fluff or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, no annotations, and no output schema, the description covers the essential behavior: what is removed, which stores are targeted, the destructive nature, and the preview-vs-execute distinction. This is complete enough for correct tool selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains app_id, confirm, and app_stores. The description only restates the store targeting and confirmation behavior, adding little beyond the structured schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Removes an app from the chosen stores.' It clearly distinguishes the tool from siblings like publish_app and preview_app by describing the unpublishing action and the store scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: without confirm it returns a preview, with confirm:true it executes the destructive action. It implies a safe preview-first workflow, but it does not explicitly mention alternatives or when not to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_setupB

Validate @appolabs/appo SDK installation and configuration. Analyzes package.json and optionally checks import patterns.

ParametersJSON Schema
NameRequiredDescriptionDefault
tsConfigNoContent of tsconfig.json (optional)
sampleCodeNoSample code to check for proper SDK usage patterns
packageJsonYesContent of package.json file to analyze

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavioral traits. It does not state whether the operation is read-only, requires any permissions, or has side effects. The term 'validate' implies inspection, but this is not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the core purpose. It is not verbose, but it could benefit from slightly more detail without becoming lengthy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema or annotations, the description is too sparse. It does not explain the format of validation results (e.g., boolean, list of issues) or any return value, leaving the agent uncertain about what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the schema already documents each parameter. The description adds minimal context beyond 'optionally checks import patterns' for sampleCode, but this does not significantly enhance understanding over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool validates the @appolabs/appo SDK installation and configuration, specifying it analyzes package.json and optionally checks import patterns. This distinguishes it from sibling tools like check_permissions or generate_component.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used for validating SDK setup, but it does not explicitly state when to use it vs. alternatives (e.g., diagnose_issue). It lacks guidance on exclusions or prerequisites.

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.

  1. 1 tool updatev2.3.0
    • Changedconfigure_app1 field changed
      • addedInput schema / properties / prep_mode
        Added value: +{
        +  "description": "Who prepares the app: 'appo_managed' hands icon, splash screen and store copy to Appo (free, 24-48h); 'self_managed' returns preparation to the developer.",
        +  "enum": [
        +    "appo_managed",
        +    "self_managed"
        +  ],
        +  "type": "string"
        +}
  2. 15 tool updatesv2.2.1
    • Addedconfigure_app
    • Addedcreate_app
    • Addedgenerate_universal_links
    • Addedget_app_overview
    • Addedget_build_status
    • Addedget_fix_recipe
    • Addedget_rejection
    • Addedlist_apps
    • Addedpreview_app
    • Addedpublish_app
    • Addedsend_push
    • Addedset_icon
    • Addedset_permissions
    • Addedtrigger_resubmission
    • Addedunpublish_app
  3. 6 tool updatesv1.0.1
    • First observedcheck_permissions
    • First observeddiagnose_issue
    • First observedgenerate_component
    • First observedgenerate_hook
    • First observedscaffold_feature
    • First observedvalidate_setup

TDQS

A3.6/5.0
Disambiguation4/5

Tools are mostly distinct, with clear separation between code generation, app management, publishing, and diagnostics. Some overlap exists between get_rejection and get_fix_recipe, and between generate_hook/scaffold_feature, but descriptions clarify their different purposes.

Naming Consistency5/5

Tool names consistently follow a verb_noun snake_case pattern (generate_, set_, get_, publish_, etc.). Even within verbs like get_ vs list_, the choice is semantically appropriate and the overall naming scheme is predictable.

Tool Count3/5

With 21 tools, the server sits in the heavy range for a single MCP server. The count is justified by covering both SDK code generation and the full app publication lifecycle, but it is more than a typical focused server.

Completeness4/5

The server covers app creation, configuration, permissions, publication, rejection handling, and push notifications well. Minor gaps exist—there is no delete/remove app tool and get_app_overview serves as the single-app retrieval path—but core workflows have no dead ends.

Maintenance

ActivityActive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    An MCP server that provides utilities for web developers to automate API integration, convert Figma designs to code, and optimize development workflows with tools for asset management and code generation.
    2
    8
    38
    38
    Mozilla Public 2.0
  • F
    license
    A
    quality
    D
    maintenance
    An MCP server designed for React Native and Expo development that provides specialized tools for project scaffolding, architectural best practices, and troubleshooting. It enables AI assistants to guide users through setup, navigation configuration, and CI/CD processes using modern stacks like NativeWind and Zustand.
    13
    4
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    This MCP server enables real-time debugging and inspection of running React Native apps, providing access to console logs, errors, network requests, navigation state, storage, and performance profiling.
    1
    MIT

Latest Blog Posts

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/appolabs/appo-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server