Skip to main content
Glama

Group my apps into a system

dropyour_system
Destructive

Manage SYSTEMS: named groups of up to 9 of your apps, handled as one (ADR-0353). action='list' (default) shows your systems and their apps. 'create' needs name and optionally apps (dropIds you own, each with an optional short alias). 'add' / 'remove' put one app in or out (systemId, dropId); 'remove' keeps the app online with its call permissions, and drops its alias and its place in the shared identity: to put it back as it was, 'add' it again with the same alias ('view' lists the removal, its alias and who did it, for 30 days). 'rename' takes name. 'delete' removes the grouping only: the apps stay, untouched. A system whose owner deleted it WITH its apps from the dashboard shows suppressionDemandeeLe: its apps are offline, kept 30 days, then erased; only the dashboard restores or erases it, and every other action on it is refused. 'delegate' grants email (an existing Dropyour account) the role 'mainteneur' on EVERY app of the system, with the same limits as dropyour_delegate. 'label' sets a PRIVATE client label (client, empty to remove) used to group systems; the client never sees it. 'export' returns systeme.json: the system in the manifest format (apps with their private routes and events, call permissions with their contracts, subscriptions), where to get each app's content (its own export), the links to apps outside the system, whether shared identity is on, and what is missing (complet); it replays with plan/apply once each app's content is added. 'shared_identity' (enabled: true or false) makes the apps of this system see the SAME identifier for the same signed-in visitor (app.visitor.id), instead of one per app (the default); the visitor is told on the sign-in page which other apps recognise them; never a shared cookie, and the email still reaches an app only with the visitor's consent for that app. Turning it on or off changes the identifiers apps see (signed-in visitors sign in again); an app that leaves the system goes back to its own identifier. 'view' returns the system with its call permissions (internal or not, verified or not), the last compatibility verdict of each called app, and its dated activity, including apps that left it. 'transfer_link' returns a one-time link (7 days; a new one cancels the previous) to a transfer page that shows what is given; whoever opens it while signed in can accept, and you remain a collaborator of the apps that leave (the recipient sees it and can remove you); apps limits it to some of its apps (the others stay with you, in a system of the same name). Links between the apps that leave survive, links to apps outside it are cut, every management token is reset. 'transfer_link' and 'delegate' are confirmed by a human: with a connected account they answer confirmation_required with an address; the owner opens it, sees exactly what you asked (the apps that leave, the person) and confirms (passkey or email); then call again with the SAME arguments within 5 minutes. 'private_routes' (with dropId, a server app, and routes) reserves paths to the apps allowed to call it: anyone else gets 404, the request never reaches the app; the manifest accepts the same as apps.<alias>.routesPrivees. Events: apps.<alias>.sujets = { topic: [keys] } on a server app, and a top-level abonnements: [{ sujet, de, vers, route }] (de emits, vers receives on its route; requires the link de→vers, declared in liens or already set); applied after the links, nothing is removed by omission. 'plan' and 'apply' take a manifest describing the whole system (apps with their html or zip, call permissions with their contracts): plan says, before anything is done, what will be created, published or linked, what is already up to date, what is kept because the manifest does not mention it, and what is refused and why; apply does it step by step (versions saved first on server apps, called apps published before their callers, every new contract replayed at once) and stops at the first failure with a report that never claims more than was done. Running apply again with the same manifest resumes, then does nothing. The manifest never makes an app a server app (that is a subscription) and never deletes anything. 'contracts' returns two files to keep in the system's repository: a runward spec (one line per route an app of the system reads from another under contract) and the JUnit report of the last replay of each contract; npx runward spec-check <spec> then checks them without Dropyour, and fails on a route that broke or was never replayed under its current revision. Nothing is replayed by this action: a contract is replayed when it is declared and before a new version of the called app stays online. 'proof' tells where the system's proof dossier stands (null = never asked); with enabled: true it asks for a new one. The dossier is produced within hours, off the platform: each app's own proof dossier, plus a runward mission of the system derived from its apps, links, contracts and events, that passes runward check --strict, sealed, attested, with a witness re-read by an independent checker; the owner downloads it from the cockpit. An app belongs to one system at most. A system never spans two accounts. Requires a connected account (no managementToken).

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "dropyour_system"
  }
}

Input Schema

NameRequiredDescriptionDefault
appsNo
nameNo
aliasNoA short lowercase alias for the app inside the system (e.g. "crm").
emailNoFor delegate: the email of the other person's Dropyour ACCOUNT.
actionNolist
clientNoFor label: a private client label (empty string removes it).
dropIdNo
routesNoFor private_routes: paths only apps allowed to call this one can reach (exact /admin or prefix /api/*); an empty list removes them.
enabledNoFor shared_identity: true = the apps of this system see the same visitor identifier; false = each app its own (the default).
manifestNoFor plan/apply: { v: 1, systeme: { nom, client? }, apps: { <alias>: { html | zipBase64, nom? } }, liens: [{ de, vers, contrat?: { routes: [{ path, method?, expectStatus?, responseSchema? }] } }], abonnements?: [{ sujet, de, vers, route }] }. The system is matched by its name in your account.
systemIdNo
remainCollaboratorNoFor transfer_link: true (the default) = you remain a collaborator of the apps that leave (the recipient sees it before accepting and can remove you); false = you lose access.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / remainCollaborator
      Added value: +{
      +  "description": "For transfer_link: true (the default) = you remain a collaborator of the apps that leave (the recipient sees it before accepting and can remove you); false = you lose access.",
      +  "type": "boolean"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "list",
      -  "create",
      -  "add",
      -  "remove",
      -  "rename",
      -  "delete",
      -  "delegate",
      -  "transfer_link",
      -  "label",
      -  "view",
      -  "plan",
      -  "apply",
      -  "private_routes",
      -  "shared_identity",
      -  "export",
      -  "contracts"
      -]New value: +[
      +  "list",
      +  "create",
      +  "add",
      +  "remove",
      +  "rename",
      +  "delete",
      +  "delegate",
      +  "transfer_link",
      +  "label",
      +  "view",
      +  "plan",
      +  "apply",
      +  "private_routes",
      +  "shared_identity",
      +  "export",
      +  "contracts",
      +  "proof"
      +]
  3. Changed1 schema field changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "list",
      -  "create",
      -  "add",
      -  "remove",
      -  "rename",
      -  "delete",
      -  "delegate",
      -  "transfer_link",
      -  "label",
      -  "view",
      -  "plan",
      -  "apply",
      -  "private_routes",
      -  "shared_identity",
      -  "export"
      -]New value: +[
      +  "list",
      +  "create",
      +  "add",
      +  "remove",
      +  "rename",
      +  "delete",
      +  "delegate",
      +  "transfer_link",
      +  "label",
      +  "view",
      +  "plan",
      +  "apply",
      +  "private_routes",
      +  "shared_identity",
      +  "export",
      +  "contracts"
      +]
  4. Changed1 schema field changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "list",
      -  "create",
      -  "add",
      -  "remove",
      -  "rename",
      -  "delete",
      -  "delegate",
      -  "transfer_link",
      -  "label",
      -  "view",
      -  "plan",
      -  "apply",
      -  "private_routes",
      -  "shared_identity"
      -]New value: +[
      +  "list",
      +  "create",
      +  "add",
      +  "remove",
      +  "rename",
      +  "delete",
      +  "delegate",
      +  "transfer_link",
      +  "label",
      +  "view",
      +  "plan",
      +  "apply",
      +  "private_routes",
      +  "shared_identity",
      +  "export"
      +]
  5. Changed2 schema fields changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "list",
      -  "create",
      -  "add",
      -  "remove",
      -  "rename",
      -  "delete",
      -  "delegate",
      -  "transfer_link",
      -  "label",
      -  "view",
      -  "plan",
      -  "apply",
      -  "private_routes"
      -]New value: +[
      +  "list",
      +  "create",
      +  "add",
      +  "remove",
      +  "rename",
      +  "delete",
      +  "delegate",
      +  "transfer_link",
      +  "label",
      +  "view",
      +  "plan",
      +  "apply",
      +  "private_routes",
      +  "shared_identity"
      +]
    • addedInput schema / properties / enabled
      Added value: +{
      +  "description": "For shared_identity: true = the apps of this system see the same visitor identifier; false = each app its own (the default).",
      +  "type": "boolean"
      +}
  6. Changed1 schema field changed
    • changedInput schema / properties / manifest / description
      Previous value: -"For plan/apply: { v: 1, systeme: { nom, client? }, apps: { <alias>: { html | zipBase64, nom? } }, liens: [{ de, vers, contrat?: { routes: [{ path, method?, expectStatus?, responseSchema? }] } }] }. The system is matched by its name in your account."New value: +"For plan/apply: { v: 1, systeme: { nom, client? }, apps: { <alias>: { html | zipBase64, nom? } }, liens: [{ de, vers, contrat?: { routes: [{ path, method?, expectStatus?, responseSchema? }] } }], abonnements?: [{ sujet, de, vers, route }] }. The system is matched by its name in your account."
  7. Changed2 schema fields changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "list",
      -  "create",
      -  "add",
      -  "remove",
      -  "rename",
      -  "delete",
      -  "delegate",
      -  "transfer_link",
      -  "label",
      -  "view",
      -  "plan",
      -  "apply"
      -]New value: +[
      +  "list",
      +  "create",
      +  "add",
      +  "remove",
      +  "rename",
      +  "delete",
      +  "delegate",
      +  "transfer_link",
      +  "label",
      +  "view",
      +  "plan",
      +  "apply",
      +  "private_routes"
      +]
    • addedInput schema / properties / routes
      Added value: +{
      +  "description": "For private_routes: paths only apps allowed to call this one can reach (exact /admin or prefix /api/*); an empty list removes them.",
      +  "items": {
      +    "maxLength": 200,
      +    "type": "string"
      +  },
      +  "maxItems": 8,
      +  "type": "array"
      +}
  8. Changed2 schema fields changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "list",
      -  "create",
      -  "add",
      -  "remove",
      -  "rename",
      -  "delete",
      -  "delegate",
      -  "transfer_link",
      -  "label",
      -  "view"
      -]New value: +[
      +  "list",
      +  "create",
      +  "add",
      +  "remove",
      +  "rename",
      +  "delete",
      +  "delegate",
      +  "transfer_link",
      +  "label",
      +  "view",
      +  "plan",
      +  "apply"
      +]
    • addedInput schema / properties / manifest
      Added value: +{
      +  "description": "For plan/apply: { v: 1, systeme: { nom, client? }, apps: { <alias>: { html | zipBase64, nom? } }, liens: [{ de, vers, contrat?: { routes: [{ path, method?, expectStatus?, responseSchema? }] } }] }. The system is matched by its name in your account."
      +}
  9. Changed2 schema fields changed
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "list",
      -  "create",
      -  "add",
      -  "remove",
      -  "rename",
      -  "delete",
      -  "delegate",
      -  "transfer_link"
      -]New value: +[
      +  "list",
      +  "create",
      +  "add",
      +  "remove",
      +  "rename",
      +  "delete",
      +  "delegate",
      +  "transfer_link",
      +  "label",
      +  "view"
      +]
    • addedInput schema / properties / client
      Added value: +{
      +  "description": "For label: a private client label (empty string removes it).",
      +  "maxLength": 60,
      +  "type": "string"
      +}
  10. Added

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations, the description explains exactly what delete destroys (the grouping only, apps stay), what remove preserves and drops, the 30-day retention rules, the effects of transfer_link and shared_identity, confirmation behavior, and apply's resume/idempotency semantics. This is rich behavioral context that the annotations alone (destructiveHint, idempotentHint) do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

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

The content is front-loaded and information-dense, but it is delivered as one massive run-on paragraph with no headings, bullets, or clear segmentation across 17 actions. Many clauses are packed together, making the description hard to scan despite its necessary complexity.

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 17-action omnibus tool with no output schema, the description covers return values for view, export, contracts, and proof, plus edge cases like suppressionDemandeeLe, confirmation flow, retention windows, and shared identity consequences. Nothing critical for correct invocation appears to be missing.

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?

With only 58% schema description coverage, the description compensates by tying parameters to actions: apps as owned dropIds with optional alias, alias as a short lowercase identifier, client as a private label never shown to the client, enabled for shared_identity, routes as paths restricted to allowed callers, and the manifest structure with events. It adds substantial meaning beyond the schema.

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 description opens with a specific verb and resource: 'Manage SYSTEMS: named groups of up to 9 of your apps, handled as one.' It clearly defines the scope and mentions the related dropyour_delegate limits, but it does not explicitly distinguish this tool from siblings such as dropyour_publish_system or dropyour_import.

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?

The description gives per-action guidance: 'create' needs name and optionally apps, 'add'/'remove' need systemId and dropId, 'plan' and 'apply' take a manifest, and 'transfer_link'/'delegate' require human confirmation. It also states prerequisites such as a connected account and no managementToken, and explains when to use plan versus apply.

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.