Skip to main content
Glama

share_app

Destructive

Invite someone (by Charming handle or email) to one of your apps, OR change the role of someone you already invited. Use this when the user wants to give a specific person access to an app, or to change what an existing collaborator/end-user/viewer can do. Creates a PENDING invitation: the invitee has no access until the eligible signed-in account chooses Open app from the email or Charming Home; that action creates the durable grant before entering the app. Pick a role: collaborator (default) can open, edit, and run the app (shared state, same data); end-user can open the app and write its data (record entries, save state) but cannot edit the app source; viewer can only open and use the read-only surface — viewers cannot edit, run mutating ops, or change anything. If the grantee already has a share, calling this again WITH a role changes their role in place (status updated, no new invitation, no second email) — this is how you flip a collaborator to an end-user and back; re-sharing WITHOUT a role leaves the existing role untouched. No share role can ever share, delete, or transfer the app. The invitee does NOT need a Charming account first — inviting an email with no account stores a pending invitation and emails them a sign-up link; the eligible grant appears after they register and verify that email (an unknown handle still errors, since there is no address to reach). Revoke anytime with unshare_app.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
roleNoThe access level: `collaborator` (default — edit and run), `end-user` (run + write data, not edit source), or `viewer` (read-only)
app_idYesThe app ID (UUID) to share
granteeYesThe invitee's Charming handle (e.g. `ada` or `@ada`) or account email

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYesIndicates success. Errors arrive as content with isError:true.
statusYesSharing creates an invitation, not access. `pending` = the grantee has a Charming account and gets access only when that account chooses Open app. `invited` = the email has no account yet; it becomes a pending share once they register and verify that address. `updated` = the grantee already had a share and re-sharing with a `role` changed it in place (no new invitation, no second email).
granteeYesThe resolved grantee (handle when set, else email) the invitation was sent to.
messageYesConsequence copy the agent should surface verbatim: the invitee has no access until they choose Open app, and what their role permits after the durable grant succeeds.
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.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 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"
      +}
    • changedOutput schema / properties / message / description
      Previous value: -"Consequence copy the agent should surface verbatim: the invitee has no access until they accept, and what they will be able to do once they do."New value: +"Consequence copy the agent should surface verbatim: the invitee has no access until they choose Open app, and what their role permits after the durable grant succeeds."
    • changedOutput schema / properties / status / description
      Previous value: -"Sharing creates an invitation, not access. `pending` = the grantee has a Charming account and must accept (dashboard or invite email). `invited` = the email has no account yet; it becomes a pending share once they register and verify that address. `updated` = the grantee already had a share and re-sharing with a `role` changed it in place (no new invitation, no second email)."New value: +"Sharing creates an invitation, not access. `pending` = the grantee has a Charming account and gets access only when that account chooses Open app. `invited` = the email has no account yet; it becomes a pending share once they register and verify that address. `updated` = the grantee already had a share and re-sharing with a `role` changed it in place (no new invitation, no second email)."
  2. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Even though annotations already mark the operation as writing and non-read-only, the description adds essential behavioral context: invitations are pending until the invitee accepts, re-sharing with a role updates the existing grant in place, re-sharing without a role preserves the role, and unknown handles error because no address exists. This goes well beyond the annotations and makes side effects predictable.

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 long but dense and well-ordered: purpose first, then lifecycle, roles, re-sharing semantics, limitations, and revocation. Almost every sentence adds distinct information, though a slightly shorter structure with role descriptions separated from edge cases would improve scannability.

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?

For a tool with three parameters, an output schema, and meaningful behavioral edge cases, the description is complete. It covers the pending grant, account eligibility, role changes, re-sharing behavior, no-account invites, unknown-handle errors, and the revocation path. An agent has enough information to call the tool correctly in nearly all realistic scenarios.

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

Parameters5/5

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

Schema coverage is 100%, but the description enriches all three parameters: it explains the role enum with concrete capability differences, clarifies that `collaborator` is the default, and details how `grantee` can be a handle or email, including the no-account signup path and unknown-handle failure. This materially exceeds what the schema alone provides.

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 opens with a specific verb and resource: 'Invite someone to one of your apps, OR change the role of someone you already invited.' It clearly distinguishes the tool from siblings by naming the close alternative `unshare_app` and by framing the action around access grants rather than app creation or mutation.

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?

It explicitly states when to use the tool: 'Use this when the user wants to give a specific person access to an app, or to change what an existing collaborator/end-user/viewer can do.' It also names the complementary operation (`Revoke anytime with unshare_app`) and explains the pending-invitation behavior, giving an agent clear selection criteria.

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.