Skip to main content
Glama

list_apps

Read-only

List the caller's Charming apps — owned ones plus apps shared with them (accepted invites, marked [shared with you]; a read-only share also reads (view-only)). Use this to find an app's id before fetching, editing, or calling it. Returns per app: id, revision, role (owner | collaborator | end-user | viewer | team-admin | team-member), displayName, description (a search-friendly summary), url (machine API base), shareUrl (the link to give the user), lastUpdatedAt (ISO-8601 of the last write), claimed (always true for now — exposed for forward-compat), and capabilities (imports + exports). A collaborator can edit and run a shared app; an end-user can run it and write its data but cannot edit the app source; a viewer can only open and read it. The description disambiguates apps with similar display names; capabilities.exports lists each app's callable operations, exposing the cross-app integration surface without N+1 get_app_source calls. Paginate with cursor from a prior call's nextCursor line. Apps with description: null predate descriptions and have not yet been backfilled. When telling the user where to open or share an app, always give them shareUrl — never construct links for humans from the url field.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMax apps to return (1-100, default 50).
cursorNoOpaque cursor from a prior call's `nextCursor` to fetch the next page.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYesIndicates success. Errors arrive as content with isError:true.
appsYesApps on this page, ordered by creation time newest-first.
advisoriesNoStructured non-fatal advisories, including authoring issues and unread staff feedback responses. Each advisory.summary is also appended to the text content for the LLM path.
nextCursorNoOpaque cursor for the next page. Pass back as `cursor` on the next list_apps call. Absent on the final page.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • addedOutput schema / properties / advisories
      Added value: +{
      +  "description": "Structured non-fatal advisories, including authoring issues and unread staff feedback responses. Each advisory.summary is also appended to the text content for the LLM path.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "data": {
      +        "additionalProperties": {},
      +        "description": "Kind-specific structured payload. Shape varies per advisory kind.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      },
      +      "doc_url": {
      +        "description": "Optional docs pointer for this advisory kind.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Stable advisory identifier (e.g. \"legacy-bridge\").",
      +        "type": "string"
      +      },
      +      "severity": {
      +        "description": "Severity; omitted advisories are treated as 'info'.",
      +        "enum": [
      +          "info",
      +          "warn"
      +        ],
      +        "type": "string"
      +      },
      +      "summary": {
      +        "description": "Agent-facing summary. Self-sufficient; no extra context required.",
      +        "type": "string"
      +      },
      +      "userSummary": {
      +        "description": "End-user-facing summary. Set when the advisory should render in-app.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "summary"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • removedOutput schema / properties / apps / items / properties / appName / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / apps / items / properties / appName / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / apps / items / properties / capabilities / properties / exports / description
      Previous value: -"Operations this app exposes to other apps via `window.buildy.api(<id>).<export>()`. Use to plan cross-app integrations without round-tripping through get_app_source."New value: +"Operations this app exposes to other apps via `window.charming.api(<id>).<export>()`. Use to plan cross-app integrations without round-tripping through get_app_source."
    • changedOutput schema / properties / apps / items / properties / capabilities / properties / imports / description
      Previous value: -"Capability tokens the app depends on (e.g. \"buildy:storage/kv@1.0\", \"buildy:browser/microphone@1.0\")."New value: +"Capability tokens the app depends on (e.g. \"charming:storage/kv@1.0\", \"charming:browser/microphone@1.0\")."
    • removedOutput schema / properties / apps / items / properties / description / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / apps / items / properties / description / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / apps / items / properties / revision
      Added value: +{
      +  "description": "Server-owned app source revision. Historical null counters read as 0; new apps start at 1; each successful source write advances it once. Pass this value through `expected_revision` when guarding update_app.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / apps / items / required
      Previous value: -[
      -  "id",
      -  "role",
      -  "displayName",
      -  "description",
      -  "url",
      -  "shareUrl",
      -  "lastUpdatedAt",
      -  "claimed",
      -  "capabilities"
      -]New value: +[
      +  "id",
      +  "role",
      +  "displayName",
      +  "revision",
      +  "description",
      +  "url",
      +  "shareUrl",
      +  "lastUpdatedAt",
      +  "claimed",
      +  "capabilities"
      +]
  2. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Rich behavioral detail beyond readOnlyHint: includes owned+shared scoping, role semantics (collaborator/end-user/viewer), read-only share convention, url vs shareUrl distinction, and forward-compat note on description. This goes well beyond a generic 'list' description.

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?

Front-loaded with core behavior and guidance on when to call it/newline; very detailed but each sentence adds information. Slightly long and field-heavy, but no filler.

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?

Since there is no output schema, the description compensates by enumerating the returned fields and their semantics and tells the agent how to use the result (capabilities for integration, shareUrl for sharing). Missing explicit error scenarios or permission boundaries, but strong overall.

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 high (limit is described with max and default). The description adds meaningful cross-field guidance: cursor-based pagination uses the prior call's nextCursor, which clarifies a relationship not inferable from the parameter list alone.

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?

Begins with a specific verb and resource: 'List the caller's Charming apps — owned plus shared.' It clearly defines the scope (owned and shared, with view-only shared items noted) and states the primary use case (finding an app's id before fetch/edit/call). This is unambiguous and distinct from sibling tools like get_app or get_app_source.

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 instructs agents to use this to get an app's ID before fetching, editing, or calling itaine — a clear decision rule. It also implies the cross-tool benefit of capabilities.exports for discovering callable operations without separately using other toolsaint list_app_shares or get_app_source. However, it doesn't explicitly state when NOT to use this tool vs. siblings.

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.