Skip to main content
Glama
ShipLocale

shiplocale-mcp

Official
by ShipLocale

shiplocale-mcp

MCP server for ShipLocale — lets Claude (or any MCP client) read and edit your localized App Store / Google Play metadata: app copy, release notes, IAP display names, screenshot texts, target languages, Store Health diagnostics, and — optionally, behind an elevated scope — push approved copy to the live store listing.

How it works

ShipLocale keeps two layers, and this server mirrors that split:

  1. Local drafts — metadata edited and AI-translated inside ShipLocale. Safe to let an agent modify freely; nothing reaches a real store.

  2. Store push — explicit, irreversible writes to App Store Connect / Google Play. Push tools are only registered when your key (and SHIPLOCALE_SCOPES) includes the push scope, so an agent with a read translate key physically cannot ship anything.

Related MCP server: i18n-mcp

Setup

1. Mint an API key

API keys are an Indie/Pro plan feature. In the ShipLocale dashboard: Settings → API Keys → Create. Pick a label (e.g. "MCP — Claude") and scopes:

Scope

Grants

read

Read apps, metadata, releases, screenshot texts, media library, target languages

translate

Edit local drafts, assign media to screenshot slots, trigger AI generation/translation

health

Read Store Health reports/overview and toggle finding suppressions

push

Write to the live App Store / Google Play listing — add only if you want the agent able to ship

You'll get a clientId (slk_...) and a clientSecret (sls_..., shown once).

Recommended: mint a read translate health key. Add push only when you explicitly want agentic store pushes.

2. Configure your MCP client

Requires Node.js 20+. No install step needed — npx fetches the package from npm.

Environment variables:

Variable

Required

Default

Purpose

SHIPLOCALE_CLIENT_ID

yes

API key client ID (slk_...)

SHIPLOCALE_CLIENT_SECRET

yes

API key secret (sls_...)

SHIPLOCALE_SCOPES

no

read translate health

Space-separated scopes to request — must be a subset of what the key holds

SHIPLOCALE_API_URL

no

https://api.shiplocale.com

Override for local development

Claude Code:

claude mcp add shiplocale \
  -e SHIPLOCALE_CLIENT_ID=slk_xxx \
  -e SHIPLOCALE_CLIENT_SECRET=sls_xxx \
  -- npx -y @shiplocale/shiplocale-mcp

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "shiplocale": {
      "command": "npx",
      "args": ["-y", "@shiplocale/shiplocale-mcp"],
      "env": {
        "SHIPLOCALE_CLIENT_ID": "slk_xxx",
        "SHIPLOCALE_CLIENT_SECRET": "sls_xxx"
      }
    }
  }
}

Auth is OAuth client-credentials against POST /connect/token; the server caches the 1-hour access token and re-fetches automatically on expiry or 401.

Tools

Read (read scope)

Tool

Description

list_apps

Apps in the portfolio

list_variants

A/B listing variants for an app

get_app_metadata

All draft fields × locales, with status (also IAP rows via iapProductId)

list_releases / get_release_notes

Releases and their What's New in every locale

get_target_languages

Target locales at account / app / IAP level

get_screenshot_texts

Screenshot headlines/captions + translations per slot

list_media_folders

Media-library folder tree with per-folder asset counts

list_media

Uploaded images in the media library — search, sort, page

get_screenshot_slots

Which media asset each screenshot slot holds, per device/locale

get_character_limits

Per-field hard character limits

Local drafts (translate scope — never touches the store)

Tool

Description

update_app_copy

Upsert base-language text for a field (incl. IAP display names)

update_localization

Edit any localization row; approve: true marks it Approved

translate_field

Async AI translation of a field into target locales

improve_copy

AI rewrite for review — returns text, saves nothing

create_release / update_release_notes

Create a release / set base What's New

generate_release_notes

AI-draft What's New from commit log / bullets

translate_release_notes

Async translation of What's New

update_target_languages

Set target locales (account / app / IAP level)

update_screenshot_text / update_screenshot_translation

Edit slot base text / override one translation

translate_screenshot_texts

Async translation of all screenshot texts

assign_screenshot_slot / clear_screenshot_slot

Put a media asset into a slot / empty it (base slot or one locale)

Store Health (health scope)

Tool

Description

get_health_report

Errors/warnings for an app, with suppression state per finding

refresh_health

Force an immediate re-check, bypassing the staleness TTL

get_health_overview

Portfolio-wide error/warning counts (Pro plan only)

set_health_suppression / clear_health_suppression

Ignore / un-ignore a finding workspace-wide

Store push (push scope — irreversible, live listing)

Tool

Description

list_store_versions / get_store_version_localizations

Find an editable store version and read live copy

push_version_localization

Write metadata to App Store Connect

list_store_iaps / get_store_iap_localizations / push_iap_localization

Read/write live IAP listings

push_play_listing

Write a Google Play listing (title/short/full description)

push_play_release_notes

Push What's New for one locale to a Play track

push_screenshots

Push all approved screenshot renders for a variant

Push tools require a connected store credential (credentialId from the dashboard's credential vault, except Play release notes, which resolve it server-side). Localizations generally must be Approved before a push picks them up.

Example prompts

  • "List my apps and show me which locales are missing a translated subtitle."

  • "Create release 2.4.0 from this commit log, generate the What's New, and translate it to all target languages."

  • "Shorten the German promotional text to fit the 170-char limit and approve it."

  • (with push) "Push the approved 2.4.0 release notes to the production track."

Development

npm install
npm run build
npm run dev        # tsc --watch
npm run typecheck

Point at a local backend with SHIPLOCALE_API_URL=https://localhost:7443 (or whatever the Aspire dashboard shows for the API).

Available Tools

17 tools
create_releaseCreate a release (local draft)A

Create a release for a version. Optionally include sourceNotes (commit log or bullet points) that generate_release_notes will turn into polished What's New copy.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesApp ID (GUID)
versionYesVersion string, e.g. "2.4.0"
sourceNotesNoRaw commit log / bullets to draft from

TDQS

A3.7/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 only says 'Create a release' without mentioning side effects, prerequisites (e.g., authentication), or what happens on duplication. This is insufficient for a mutation 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 extremely concise with two sentences, no redundant information, and front-loads the 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?

Given no output schema and no annotations, the description explains the main action and one parameter's purpose. However, it omits return value, error cases, and any prerequisites, leaving gaps for an AI agent.

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 schema already documents all parameters. The description adds value by explaining that sourceNotes is optional and intended for input to generate_release_notes, which goes beyond the schema's raw description.

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 action 'Create a release for a version' with a specific resource (release) and verb (create). It also mentions the optional sourceNotes, and references a sibling tool (generate_release_notes) for differentiation.

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 provides some context by linking sourceNotes to generate_release_notes, but it lacks explicit guidance on when to use this tool versus other sibling tools like translate_release_notes. No conditions or exclusions are stated.

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

generate_release_notesAI-draft What's New from source notesA

Generate polished base-language What's New copy from the release's sourceNotes (commit log / bullets). Counts against monthly generation caps.

ParametersJSON Schema
NameRequiredDescriptionDefault
releaseIdYesRelease ID (GUID)

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. Discloses generation cap and input source, but does not specify if operation is read-only or requires permissions, nor output format.

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, no fluff. Essential information 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?

Adequate for a simple generation tool. Covers purpose, input, and a key constraint. Missing output details and potential side effects, but not required for basic use.

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?

Single parameter has 100% schema coverage with description. Description adds marginal value by linking releaseId to sourceNotes, but essentially aligns with 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?

Description explicitly states verb 'generate', resource 'What's New copy', and source 'sourceNotes'. Distinguishes from sibling tools like translate_release_notes and improve_copy.

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?

Provides usage context via 'counts against monthly generation caps', implying limited use. Does not explicitly state when not to use or alternatives, but context is clear.

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

get_character_limitsGet character limitsA
Read-only

Get ShipLocale's hard character limits per metadata field, plus soft guidance for screenshot headlines/captions. Check these before writing copy.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description adds specific detail about the type of data returned (hard limits and soft guidance) beyond the readOnlyHint annotation. It does not contradict any annotations.

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 that directly state the tool's purpose and when to use it, with no unnecessary words.

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?

Despite no output schema, the description clearly explains what the tool returns and in what context to use it, providing complete information for a simple read-only tool.

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 no parameters, and schema coverage is 100%. The description does not need to add parameter 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 uses the specific verb 'Get' and clearly identifies the resource 'hard character limits per metadata field' plus 'soft guidance for screenshot headlines/captions'. This differentiates it from sibling tools like generate_release_notes or translate_screenshot_texts.

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 explicitly states 'Check these before writing copy', providing clear usage context. While it doesn't list alternatives or exclusions, the context is sufficient given the sibling tools are all different operations.

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

get_screenshot_textsGet screenshot textsA
Read-only

Get all screenshot headline/caption base texts and their translations, per slot.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesApp ID (GUID)
variantIdNoListing variant ID; omit for the production variant

TDQS

A3.6/5.0
Behavior3/5

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

The annotation readOnlyHint=true already informs the agent that this is a read-only operation. The description adds no further behavioral context beyond confirming it is retrieval. No mention of error conditions, pagination, or performance. With annotations present, the description does not need to restate the safety profile, but additional context (e.g., what happens if appId is invalid) would improve transparency.

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 a single, concise sentence that efficiently conveys the tool's purpose without extraneous words. It is front-loaded and earns its place.

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?

The tool has no output schema, so the description should explain the return format. However, it only vaguely mentions 'texts and their translations, per slot' without specifying structure (e.g., list, key-value pairs). Terms like 'slot' are undefined. This lack of output clarity makes the description incomplete for an agent to know 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?

Schema description coverage is 100%, with both parameters well-described in the schema (appId as 'App ID (GUID)' and variantId as 'Listing variant ID; omit for the production variant'). The tool description adds no additional semantic meaning beyond what the schema already provides, so it meets the baseline.

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 specifies the verb 'Get', the resource 'screenshot headline/caption base texts and their translations', and the scope 'per slot'. It effectively distinguishes this retrieval tool from sibling tools like 'translate_screenshot_texts' or 'update_screenshot_text' which perform different actions.

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?

No explicit guidance is given on when to use this tool versus alternatives. The usage is implied by the retrieval nature, but no 'when-not' or alternative tool references are provided. The sibling tools include translation and update operations, so the agent must infer the appropriate use case.

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

get_target_languagesGet target languagesA
Read-only

Get target translation locales. Three levels, each overridable: account default (no args), app level (appId), or IAP level (appId + productId).

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNoApp ID for app-level locales; omit for the account default
productIdNoIAP product ID for the IAP-level override (requires appId)

TDQS

A4.4/5.0
Behavior4/5

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

The description aligns with the readOnlyHint annotation, adding the hierarchy of overrides without contradicting. It does not mention any side effects, which is acceptable for a 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?

Two concise sentences that front-load the purpose and efficiently cover the three-level hierarchy without unnecessary words.

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 simplicity of the tool (2 optional params, no output schema, read-only), the description is sufficiently complete, though it could mention the return type.

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 description adds meaning beyond the schema ('omit for account default', 'requires appId') to the already well-described parameters, providing clear usage context.

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 'Get target translation locales' and distinguishes three override levels (account, app, IAP), making it distinct from sibling tools like update_target_languages.

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 explains when to use each parameter combination (no args, appId, appId+productId), but does not explicitly mention when not to use this tool or provide alternatives.

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

improve_copyAI-improve copy (returns text, saves nothing)A

Ask ShipLocale's AI to rewrite copy for a field (e.g. shorten, punch up). Returns the improved text for review — it does NOT save anything; follow up with update_app_copy to apply it.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesApp ID (GUID)
actionYesRewrite action, e.g. "improve", "shorten"
fieldTypeYes
sourceTextYesThe current text to rewrite

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, but description clearly indicates read-only behavior by stating it returns text and does not save. Could add details on authorization or limits, but sufficient for the tool's simplicity.

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?

Extremely concise: two sentences that cover purpose, outcome, and usage guidance without any unnecessary information. Front-loaded with the core action.

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?

Covers the key aspects: purpose, input, output, and follow-up step. No output schema needed; for a simple tool, this is nearly complete. Could describe error handling or limits, but not critical.

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 75% and schema already provides descriptions for all parameters. The description adds no additional meaning beyond the schema, 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.

Purpose5/5

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

Description clearly states the tool uses AI to rewrite copy and returns improved text for review. It distinguishes from siblings by explicitly naming the follow-up tool 'update_app_copy' to apply changes.

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 says 'it does NOT save anything' and instructs to follow up with 'update_app_copy' to apply the changes, providing clear when-to-use and when-not-to-use guidance with an alternative.

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

list_appsList appsA
Read-only

List all apps in the ShipLocale portfolio, with their store (AppStore/GooglePlay), bundle ID, and base language.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds value by specifying the returned fields, compensating for the lack of output schema.

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?

Single sentence, front-loaded with the action, no extraneous words. Every part earns its place.

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?

Complete for a simple read-only tool with no parameters. It clearly states what is returned, though pagination or ordering is not mentioned but likely unnecessary.

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?

No parameters exist and schema coverage is 100%. The description adds no param info, but none is needed; baseline for 0 parameters is 4.

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 it lists all apps and specifies the returned fields (store, bundle ID, base language), distinguishing it from sibling tools focused on releases or translations.

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?

Usage context is clear: when you need a list of all apps. No explicit when-not or alternatives, but sibling tool names imply different purposes.

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

list_releasesList releasesA
Read-only

List an app's releases (versions) and their What's New drafting state.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesApp ID (GUID)

TDQS

A4/5.0
Behavior4/5

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

Annotations include 'readOnlyHint: true', and the description adds context that the tool lists releases with their drafting state. It goes beyond annotations by specifying what is listed, though details like pagination or ordering 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 a single sentence that is front-loaded with the action and resource. No unnecessary words.

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 one parameter, the description is mostly complete. It explains what is returned (releases and drafting state). However, lacking an output schema, some detail on the return format could be beneficial.

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 covers 100% of the single parameter 'appId' with a description. The tool description does not add extra 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 the verb 'List' and the resource 'app's releases', and specifies the kind of information (versions and What's New drafting state). It distinguishes from siblings like 'create_release' and 'list_apps'.

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 listing releases but does not provide explicit when-to-use, when-not-to-use, or alternative tools. The context of sibling tools helps, but no direct guidance is given.

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

list_variantsList listing variantsA
Read-only

List A/B listing variants for an app. Most metadata tools accept an optional variantId; omitting it targets the production variant.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesApp ID (GUID) from list_apps

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, so the description is not required to restate that. It adds the behavioral detail about variantId targeting the production variant, which is useful 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.

Conciseness5/5

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

The description is two sentences, front-loading the purpose and adding one additional contextual sentence. Every word earns its place; no 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 list tool with one parameter, read-only annotation, and no output schema, the description provides sufficient context about the variant listing behavior and parameter usage. It could optionally describe the return structure, but it is not necessary given the tool's simplicity.

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 fully describes the single parameter appId with a clear description. The description adds no additional parameter semantics beyond what the schema provides, so baseline score 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 'List A/B listing variants for an app,' specifying the verb and resource. It distinguishes from siblings like list_apps and list_releases by focusing on variants.

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 context that most metadata tools accept an optional variantId and omitting it targets the production variant, which implies when to use this tool. However, it does not explicitly state when not to use it vs alternatives.

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

translate_fieldAI-translate a field (async job)A

Start an async AI translation job for one metadata field into target locales. Results are cached; set force:true to re-translate unchanged copy. Counts against daily translation caps.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesApp ID (GUID)
forceNoRe-translate even if cached
localesYesTarget locales, e.g. ["de-DE", "ja"]
fieldTypeYes
variantIdNo
iapProductIdNo

TDQS

A4/5.0
Behavior4/5

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

Discloses async nature, caching, re-translation with force, and daily caps. No annotations provided, so description carries full burden; does so well but could mention overwrite behavior or permissions.

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 purpose. Every phrase adds value: identifies tool type (async job), scope (one field, target locales), caching, force usage, and rate limits. No wasted words.

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?

Covers key behaviors (async, caching, caps) but omits return value description, async result polling, and guidance for selecting optional parameters (variantId vs iapProductId). Sibling differentiation is left implicit.

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

Parameters2/5

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

With 50% schema description coverage, the description adds minimal meaning beyond the schema. It clarifies 'force' and 'locales' but does not explain 'fieldType', 'variantId', 'iapProductId', which are critical for correct invocation.

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 starts an async AI translation job for a single metadata field into target locales. It distinguishes from siblings like translate_screenshot_texts or translate_release_notes by specifying 'one metadata field'.

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?

Describes caching behavior, the force flag, and daily caps, which guide usage. Implicitly indicates it's for individual field translation, but lacks explicit alternative mentions or exclusion of bulk operation.

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

translate_release_notesAI-translate What's New (async job)A

Start an async job translating a release's What's New into the app's target locales.

ParametersJSON Schema
NameRequiredDescriptionDefault
releaseIdYesRelease ID (GUID)

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It mentions 'async job' but does not disclose side effects, destructive potential, auth requirements, rate limits, or how to monitor progress. Essential behavioral traits 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 a single, well-structured sentence that conveys the core action and scope without extraneous words. Every word earns its place, and the key information is front-loaded.

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 simplicity (one parameter, no output schema), the description covers the basic purpose. However, it lacks information on post-job behavior (e.g., status checking) and does not clarify whether there are prerequisites or constraints, making it somewhat 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% for the single parameter releaseId, which has a clear description 'Release ID (GUID)'. The description adds no additional semantic meaning beyond what the schema provides, so baseline score of 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 the verb 'Start an async job' and the specific resource 'a release's What's New', along with scope 'into the app's target locales'. It distinguishes from siblings like translate_screenshot_texts and translate_field by specifying the content type and async nature.

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 when to use (for batch translating What's New content), but provides no explicit guidance on alternatives, prerequisites, or when not to use. It relies on the user inferring from the specific resource mentioned.

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

translate_screenshot_textsAI-translate screenshot texts (async job)C

Start an async job translating all screenshot headlines/captions into the given locales.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdYesApp ID (GUID)
forceNoRe-translate even if cached
localesYes
variantIdNo

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden. It mentions 'async job' but does not disclose side effects, how to check status, or error conditions. Missing details like whether existing translations are overwritten, or if there are rate limits.

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 single sentence is concise and front-loaded with the main action. However, it is too terse and sacrifices necessary detail for brevity. Still, no wasted words.

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 complexity (async job, batch operation), the description is inadequate. No output schema is provided, and key aspects like result retrieval, idempotency, or impact on existing translations are omitted. The description leaves significant gaps.

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

Parameters2/5

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

Schema coverage is 50% (appId and force described, locales and variantId not). The description only says 'into the given locales' without specifying format or constraints. It does not explain 'force' or 'variantId' beyond the parameter name. The description fails to compensate for missing 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 it starts an async job to translate all screenshot headlines/captions to given locales. It uses a specific verb 'start an async job' and resource 'screenshot headlines/captions', distinguishing it from siblings like 'translate_field' or 'update_screenshot_text' which handle individual items.

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 on when to use this tool versus alternatives (e.g., for single screenshots use 'update_screenshot_text', for fields use 'translate_field'). The description lacks context for selecting this tool over siblings.

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

update_app_copyUpdate base-language copy (local draft)A

Upsert the base-language text of one metadata field in ShipLocale's local draft. Does NOT touch the live store listing. Respect get_character_limits. Pass iapProductId to set an IAP display name.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
appIdYesApp ID (GUID)
fieldTypeYes
variantIdNoListing variant ID; omit for the production variant
iapProductIdNoIAP product ID when editing IapDisplayName

TDQS

A4/5.0
Behavior3/5

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

Describes upsert behavior, local-only impact, and character-limit constraint. With no annotations, it covers essential safety but omits error cases, response format, and prerequisite checks beyond character limits.

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 pack key information: action, scope, constraints, and a parameter hint. No 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?

Covers core behavior and usage, but lacks return value description. Given tool simplicity and no output schema, it is mostly adequate.

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?

Adds context for iapProductId ('set an IAP display name') and implies fieldType selects the field. With 60% schema coverage, description enhances understanding but doesn't explain all parameters in detail.

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 ('Upsert') and resource ('base-language text of one metadata field in ShipLocale's local draft'), clearly distinguishing it from live listing updates and sibling tools like update_localization.

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?

Explicitly states local-draft-only scope and to respect character limits. Mentions iapProductId for IAP display names. Lacks direct comparison to sibling tools but context is clear.

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

update_localizationEdit one localization row (local draft)A

Edit a specific localization row (base or translated text) by its ID from get_app_metadata / get_release_notes. Set approve:true to mark it Approved — pushes only pick up Approved rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
approveNoMark the row Approved
localizationIdYesLocalization row ID (GUID)

TDQS

A4/5.0
Behavior3/5

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

Without annotations, the description must convey all behavioral traits. It mentions the approval workflow, but does not specify whether the update is partial or full, what happens to unprovided fields, or any side effects. This is adequate but leaves some ambiguity.

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 a single sentence that efficiently conveys the core functionality and a critical rule. No redundant information, perfectly 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?

For a simple update tool with no output schema, the description covers the essential aspects: what it edits, how to identify the row, and a key behavioral rule. It could be more complete by mentioning success responses or prerequisites, but it's largely adequate.

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 67%, and the description adds context for localizationId (source) and approve (consequence for pushes). However, the text parameter lacks additional semantics beyond being a string, and the description does not fully compensate for the missing 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 action (edit), the resource (localization row), and specifies it is by ID. It also refers to the source of the ID (get_app_metadata / get_release_notes), making the purpose unambiguous and distinct from sibling tools like update_app_copy.

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 a key usage guideline: pushes only pick up Approved rows, and how to set approval via approve:true. However, it does not explicitly mention when to use this tool over alternatives or contraindications, so it's slightly below perfect.

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

update_screenshot_textSet screenshot headline/caption (local draft)B

Set the base-language headline or caption for a screenshot slot. Guidance: headline ≤ 30 chars, caption ≤ 60 (hard cap 200).

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
appIdYesApp ID (GUID)
textTypeYes
slotIndexYesScreenshot slot index
variantIdNo

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It indicates a write operation ('Set') but omits side effects, permissions, synchronous/asynchronous behavior, and whether it overwrites existing text. This is insufficient for agents to understand impact.

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: first states the action, second provides critical guidance. No unnecessary words, information is front-loaded. Every sentence earns its place.

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 5 parameters, no output schema, no annotations, and multiple sibling tools, the description is too sparse. It does not explain the relationship between base-language and translations, what happens on success, or how variantId is used. Agents would likely need to infer or fail without additional 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 40% (only appId and slotIndex have descriptions). The description adds character limits for headline and caption, which partially compensates. However, variantId is not explained, and textType enum values are only implied. The description adds some value but not enough for low coverage.

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 action: 'Set the base-language headline or caption for a screenshot slot.' It uses specific verbs and nouns, and the title reinforces 'local draft'. This distinguishes it from siblings like update_screenshot_translation and get_screenshot_texts.

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 character limit guidance but does not indicate when to use this tool versus alternatives such as update_screenshot_translation for translations or get_screenshot_texts for reading. No explicit when/to-when-not advice is given.

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

update_screenshot_translationOverride one screenshot text translationA

Manually set one locale's translation of a screenshot headline/caption. Pass an empty string to delete the override so AI can re-translate it.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesTranslated text; empty string deletes the override
appIdYesApp ID (GUID)
localeYesLocale, e.g. "de-DE"
textIdYesScreenshot text ID from get_screenshot_texts

TDQS

A3.9/5.0
Behavior3/5

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

No annotations provided, so description bears full burden. It discloses that setting is manual and empty string deletes the override, but does not mention permissions, side effects, or idempotency.

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 purpose, no wasted words. Each sentence adds value: action in first, deletion behavior in second.

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?

Adequate for a simple mutation tool with 4 required params and no output schema. Describes main behavior and deletion, but lacks details on immediate effects or return value.

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. Description adds no new meaning beyond schema; it mentions 'headline/caption' which aligns with the 'text' parameter description but does not elaborate on other 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 specifies the action ('Manually set') and the specific resource ('one locale's translation of a screenshot headline/caption'). It distinguishes from siblings like 'translate_screenshot_texts' by emphasizing manual override.

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 states when to use (manual override) and how to delete an override (empty string). However, it does not explicitly mention when not to use or provide direct alternatives among siblings.

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

update_target_languagesSet target languagesA

Set target translation locales at account level (no appId), app level (appId), or IAP level (appId + productId). App-level changes propagate to same-bundle-ID sibling store rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
appIdNo
productIdNoIAP product ID (requires appId)
targetLocalesYesLocales, e.g. ["de-DE", "fr-FR", "ja"]

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 must convey behavioral traits. It discloses the scoping (account/app/IAP) and propagation of app-level changes, but does not mention whether changes are destructive (overwrite), reversible, or require specific permissions.

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. The first states the core purpose and scoping, the second adds a key behavioral detail about propagation. No extraneous 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?

The tool is simple with 3 parameters. The description, combined with schema, provides sufficient detail for correct invocation. No output schema exists, so return values are not expected. Minor gap: no mention of whether the operation succeeds or errors.

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 67% (targetLocales and productId have descriptions, appId lacks one). The description adds semantic context: it explains the hierarchical usage of appId and productId, the requirement that productId needs appId, and provides an example for targetLocales format.

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 identifies the action ('Set target translation locales') and the resource ('target languages'), specifying three hierarchical levels (account, app, IAP). It distinguishes from sibling tools like 'get_target_languages' by describing the setting operation.

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 explains when to use each level (no appId for account, appId for app, appId+productId for IAP) and notes propagation behavior. However, it does not explicitly state when NOT to use this tool or provide alternatives like 'get_target_languages' for read-only needs.

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

TDQS

A3.8/5.0
Disambiguation5/5

Every tool targets a distinct resource/action (e.g., release notes vs. screenshot translations vs. app copy). Descriptions clarify boundaries, and no two tools overlap in purpose.

Naming Consistency5/5

All tool names follow a strict verb_noun snake_case pattern (e.g., generate_release_notes, list_apps, update_localization). No mixing of styles or irregular verbs.

Tool Count4/5

17 tools is slightly above the typical ideal range (3–15), but each serves a unique function within the app store localization domain, so it remains reasonable.

Completeness4/5

Covers creation, listing, update, translation, and improvement for releases, screenshots, and copy. Minor gaps (e.g., no dedicated get_release_notes tool, no delete operations) but core workflows are well-supported.

Maintenance

ActivityMaintained
ResponsivenessSyncing

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
    Not graded
    quality
    C
    maintenance
    MCP server for managing i18n JSON translation files. Provides Claude with structured read/write access to translation files for adding keys, checking coverage, and finding duplicates.
    35
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol (MCP) server that connects Cursor, Claude Desktop, and other MCP clients to the official App Store Connect API—so you can manage iOS/macOS apps, TestFlight, in-app subscriptions, and store metadata via chat or automated tool calls.
    69
    139
    13
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    An opinionated MCP server for App Store Connect that provides 13 curated tools, slash-command workflows, and a Claude Skill to manage apps, reviews, sales, and pre-submission audits via natural language.
    41
    110
    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/ShipLocale/shiplocale-mcp'

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