Skip to main content
Glama

apple_update_category

Update an app's primary and secondary category on the App Store by providing the app ID and desired category IDs.

Instructions

Update app primary/secondary category

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
appInfoIdYesAppInfo ID
primaryCategoryIdNoPrimary category ID (e.g. SOCIAL_NETWORKING)
secondaryCategoryIdNoSecondary category ID

Implementation Reference

  • The handler function for the apple_update_category tool. It updates an app's primary and/or secondary category by sending a PATCH request to /appInfos/{appInfoId} with the category relationships.
    const updateAppInfoCategory: ToolDef = {
      name: 'apple_update_category',
      description: 'Update app primary/secondary category',
      schema: z.object({
        appInfoId: z.string().describe('AppInfo ID'),
        primaryCategoryId: z.string().optional().describe('Primary category ID (e.g. SOCIAL_NETWORKING)'),
        secondaryCategoryId: z.string().optional().describe('Secondary category ID'),
      }),
      handler: async (client, args) => {
        const relationships: any = {};
        if (args.primaryCategoryId) {
          relationships.primaryCategory = {
            data: { type: 'appCategories', id: args.primaryCategoryId },
          };
        }
        if (args.secondaryCategoryId) {
          relationships.secondaryCategory = {
            data: { type: 'appCategories', id: args.secondaryCategoryId },
          };
        }
        return client.request(`/appInfos/${args.appInfoId}`, {
          method: 'PATCH',
          body: { data: { type: 'appInfos', id: args.appInfoId, relationships } },
        });
      },
    };
  • Zod schema defining the input parameters for apple_update_category: appInfoId (required), primaryCategoryId (optional), secondaryCategoryId (optional).
    schema: z.object({
      appInfoId: z.string().describe('AppInfo ID'),
      primaryCategoryId: z.string().optional().describe('Primary category ID (e.g. SOCIAL_NETWORKING)'),
      secondaryCategoryId: z.string().optional().describe('Secondary category ID'),
    }),
  • The tool is registered in the appleTools array exported from src/apple/tools.ts, making it available for use in the MCP server.
    export const appleTools: ToolDef[] = [
      // App Management
      listApps, getApp, getAppInfo, updateAppInfoCategory,
Behavior2/5

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

With no annotations provided, the description bears full responsibility for disclosing behavioral traits. The description merely states 'Update' without indicating whether the operation is destructive, idempotent, or what happens to existing categories if only one parameter is provided. This lacks the necessary transparency for safe invocation.

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 conveys the core functionality without any extraneous words. It is appropriately front-loaded and efficient.

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 of the tool (no output schema, no nested objects, and high schema coverage), the description is minimally adequate. However, it lacks behavioral context such as whether both category IDs are optional or the effect of partial updates, which would improve completeness for an AI 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?

The input schema provides 100% coverage for all parameters with clear descriptions. The tool description adds no additional meaning beyond what the schema already conveys. Therefore, 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?

The description explicitly states the action ('Update') and the resource ('app primary/secondary category'), which is a specific verb+resource combination. It effectively distinguishes the tool from its siblings, as no other sibling tool has a similar purpose.

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 should be used when updating app categories, but it does not provide explicit guidance on when to use this tool versus alternatives (e.g., using get_app_info first to check current categories) or mention any prerequisites (e.g., existence of the app).

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

Install Server

Other Tools

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/mikusnuz/app-publish-mcp'

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