Skip to main content
Glama

Group my apps into a system

dropyour_system

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). '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 (24 h; a new one cancels the previous) to whoever opens it while signed in; 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. '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).

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

Schema Changelog

Changes observed during successful MCP inspections.

  1. 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"
      +]
  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"
      -]New value: +[
      +  "list",
      +  "create",
      +  "add",
      +  "remove",
      +  "rename",
      +  "delete",
      +  "delegate",
      +  "transfer_link",
      +  "label",
      +  "view",
      +  "plan",
      +  "apply",
      +  "private_routes",
      +  "shared_identity",
      +  "export",
      +  "contracts"
      +]
  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"
      -]New value: +[
      +  "list",
      +  "create",
      +  "add",
      +  "remove",
      +  "rename",
      +  "delete",
      +  "delegate",
      +  "transfer_link",
      +  "label",
      +  "view",
      +  "plan",
      +  "apply",
      +  "private_routes",
      +  "shared_identity",
      +  "export"
      +]
  4. 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"
      +}
  5. 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."
  6. 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"
      +}
  7. 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."
      +}
  8. 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"
      +}
  9. Added

TDQS

A3.8/5.0
Behavior4/5

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

The description carries substantial behavioural load that annotations do not: the 30-day retention after a system is deleted with its apps, the refusal of all other actions on a suppressed system, the "versions saved first" / "stops at the first failure" semantics of apply, apply's resume-then-no-op idempotency, the one-time 24h transfer link that cancels its predecessor and resets every management token, and the auth requirement ("connected account (no managementToken)"). One tension worth noting: destructiveHint=false sits awkwardly beside a 'delete' action and a 'transfer_link' that resets all management tokens, though the description's precision means this is annotation coarseness rather than a description error.

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

Conciseness3/5

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

Almost every clause carries information an agent needs for one of 17 actions, but the whole thing is delivered as a single unbroken paragraph with no per-action segmentation, headers or line breaks. Front-loading is good (core definition first, action semantics after), yet the density forces an agent to parse the entire block to find the one action it cares about.

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 this complex with no output schema and thin annotations, the description covers what an agent needs: what each action returns where it matters (systeme.json contents for export, call permissions and compatibility verdicts for view, two files for contracts, dossier status for proof), destructive and retention consequences, ordering guarantees in apply, and the account-level prerequisites. Nothing essential to a correct invocation is missing.

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?

With 11 parameters at 55% schema coverage, the description does real work: it names which parameters each action consumes (name/apps for create, systemId/dropId for add/remove, email for delegate, client for label, routes plus a server-app dropId for private_routes, enabled for shared_identity, manifest for plan/apply) and adds constraints the schema lacks, such as apps being dropIds you own and app membership being limited to one system. Minor gaps remain (name length/rules, systemId sourcing) but coverage is strong.

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 sentence gives a concrete verb and resource ("Manage SYSTEMS: named groups of up to 9 of your apps, handled as one") and the 17 enumerated actions make the scope unmistakable. It references dropyour_delegate but never distinguishes itself from the sibling dropyour_publish_system, which overlaps with its plan/apply publishing behaviour, leaving one sibling boundary unresolved.

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?

Each action is explained in enough detail that an agent can infer which action to pick for a given goal (e.g. 'delete' removes only the grouping, 'plan' previews before 'apply'). However, there is no explicit when-to-use guidance at tool level, no statement of when to prefer dropyour_publish_system, dropyour_link or dropyour_delegate over this tool, and no exclusions.

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.