Skip to main content
Glama

App details

get_app
Read-only

One app: platforms and public keys, bundle ids, installs, open and waiting conversations, the reply time users are promised, push setup, and the agent reply mode.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
app_idNoThe app's id (from list_apps). Optional when there is only one.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesThe app's id.
nameYesThe app's name, as users see it in the chat.
pushYesPush setup (never the keys themselves).
linksYesStore pages and site by platform (ios, android, web): the button in emails.
usersYesThe app's users (not deleted or archived).
icon_urlYesThe app's icon, or null when none is set.
installsYesDevices that ever opened the chat.
deep_linkYesThe URL that opens the app from emails, or null.
platformsYesIts platforms: ios, android, web.
bundle_idsYesBundle ID, package name or site domain by platform, e.g. {"ios": "com.example.app"}.
public_keysYesActive public keys, one or more per platform.
setup_guideYesThe setup guide's URL, or null before the app has a platform.
reply_withinYesThe same as a preset: hour, hours, day, 2_days, 3_working_days or week.
agent_repliesYesWhat agents may do with reply_to_user: off, draft or send (set by a person in the dashboard).
waiting_on_teamYesOpen conversations whose last message is the user's.
open_conversationsYesConversations not resolved.
reply_time_promisedYesThe reply time users are promised, in English, e.g. "a day".
deep_link_seen_working_atYesWhen the app last opened a DevReply link, or null if never.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "agent_replies": {
      +      "description": "What agents may do with reply_to_user: off, draft or send (set by a person in the dashboard).",
      +      "type": "string"
      +    },
      +    "bundle_ids": {
      +      "description": "Bundle ID, package name or site domain by platform, e.g. {\"ios\": \"com.example.app\"}.",
      +      "type": "object"
      +    },
      +    "deep_link": {
      +      "description": "The URL that opens the app from emails, or null.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "deep_link_seen_working_at": {
      +      "description": "When the app last opened a DevReply link, or null if never.",
      +      "format": "date-time",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "icon_url": {
      +      "description": "The app's icon, or null when none is set.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "id": {
      +      "description": "The app's id.",
      +      "format": "uuid",
      +      "type": "string"
      +    },
      +    "installs": {
      +      "description": "Devices that ever opened the chat.",
      +      "type": "integer"
      +    },
      +    "links": {
      +      "description": "Store pages and site by platform (ios, android, web): the button in emails.",
      +      "type": "object"
      +    },
      +    "name": {
      +      "description": "The app's name, as users see it in the chat.",
      +      "type": "string"
      +    },
      +    "open_conversations": {
      +      "description": "Conversations not resolved.",
      +      "type": "integer"
      +    },
      +    "platforms": {
      +      "description": "Its platforms: ios, android, web.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "public_keys": {
      +      "description": "Active public keys, one or more per platform.",
      +      "items": {
      +        "description": "A platform's public key (pk_), the one the app's code uses.",
      +        "properties": {
      +          "key": {
      +            "description": "The public key, pk_…",
      +            "type": "string"
      +          },
      +          "platform": {
      +            "description": "ios, android or web.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "platform",
      +          "key"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "push": {
      +      "description": "Push setup (never the keys themselves).",
      +      "properties": {
      +        "android": {
      +          "description": "The Firebase service account, or null when none is uploaded.",
      +          "properties": {
      +            "client_email": {
      +              "description": "The service account's email.",
      +              "type": "string"
      +            },
      +            "last_error": {
      +              "description": "The last error from the push service, if any.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "last_sent_at": {
      +              "description": "The last push sent with this service account.",
      +              "format": "date-time",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "project_id": {
      +              "description": "The Firebase project id.",
      +              "type": "string"
      +            },
      +            "updated_at": {
      +              "description": "When it was uploaded.",
      +              "format": "date-time",
      +              "type": "string"
      +            }
      +          },
      +          "type": [
      +            "object",
      +            "null"
      +          ]
      +        },
      +        "android_devices": {
      +          "description": "Android installs that can receive pushes.",
      +          "type": "integer"
      +        },
      +        "available": {
      +          "description": "Push is enabled on this DevReply server.",
      +          "type": "boolean"
      +        },
      +        "ios": {
      +          "description": "The APNs key, or null when none is uploaded.",
      +          "properties": {
      +            "bundle_id": {
      +              "description": "The bundle ID pushes go to.",
      +              "type": "string"
      +            },
      +            "key_id": {
      +              "description": "The APNs Key ID.",
      +              "type": "string"
      +            },
      +            "last_error": {
      +              "description": "The last error from the push service, if any.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "last_sent_at": {
      +              "description": "The last push sent with this key.",
      +              "format": "date-time",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "team_id": {
      +              "description": "The Apple Team ID.",
      +              "type": "string"
      +            },
      +            "updated_at": {
      +              "description": "When it was uploaded.",
      +              "format": "date-time",
      +              "type": "string"
      +            }
      +          },
      +          "type": [
      +            "object",
      +            "null"
      +          ]
      +        },
      +        "ios_devices": {
      +          "description": "iOS installs that can receive pushes.",
      +          "type": "integer"
      +        },
      +        "taps_seen_at": {
      +          "description": "When the app last opened a DevReply notification (taps reach the chat).",
      +          "format": "date-time",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "available",
      +        "ios_devices",
      +        "android_devices",
      +        "taps_seen_at",
      +        "ios",
      +        "android"
      +      ],
      +      "type": "object"
      +    },
      +    "reply_time_promised": {
      +      "description": "The reply time users are promised, in English, e.g. \"a day\".",
      +      "type": "string"
      +    },
      +    "reply_within": {
      +      "description": "The same as a preset: hour, hours, day, 2_days, 3_working_days or week.",
      +      "type": "string"
      +    },
      +    "setup_guide": {
      +      "description": "The setup guide's URL, or null before the app has a platform.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "users": {
      +      "description": "The app's users (not deleted or archived).",
      +      "type": "integer"
      +    },
      +    "waiting_on_team": {
      +      "description": "Open conversations whose last message is the user's.",
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "name",
      +    "platforms",
      +    "bundle_ids",
      +    "public_keys",
      +    "installs",
      +    "users",
      +    "open_conversations",
      +    "waiting_on_team",
      +    "reply_time_promised",
      +    "reply_within",
      +    "links",
      +    "icon_url",
      +    "deep_link",
      +    "deep_link_seen_working_at",
      +    "agent_replies",
      +    "push",
      +    "setup_guide"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered and the description correctly implies a pure read. It adds a sense of the breadth of returned data (installs, push setup, agent reply mode), but says nothing about permissions, staleness, or error behavior, so it is adequate rather than rich.

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?

A single sentence with the resource front-loaded before the field enumeration; every clause carries information. The trailing list is long but each item is a distinct returned attribute, so it earns its space.

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 an output schema present, the description need not explain return values, and the safety profile is carried by annotations. The only real gap is the absence of any routing guidance relative to list_apps/update_app, which keeps it short of complete.

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 app_id description already explains the uuid format and the 'from list_apps / optional when only one' semantics. The description adds nothing about parameters, so baseline 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 opening 'One app:' states the resource and implicitly contrasts with the sibling list_apps by specifying a single app rather than a collection, and the field inventory (platforms, public keys, bundle ids, installs, conversations, reply time, push setup, agent reply mode) makes the returned scope concrete. It does not name any sibling explicitly, so it falls short of full differentiation.

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?

There is no statement of when to call this versus list_apps or get_user, no mention that app_id is optional when only one app exists, and no prerequisites. The only hint is the implied singular-vs-list contrast in 'One app:'.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources