Skip to main content
Glama

import_tasks

Destructive

Imports a BATCH of tasks from an external system (Linear, Jira, Spec Kit…) in the PIVOT FORMAT (resource orggen://import/pivot). Two inputs: items in the pivot format (source required) — extraction and mapping are then YOUR job — OR the format of a framework (values of the enumeration; mapping in the resource) + text = its file pasted as is, which the product reads without you; cellId/cellRef then file everything under one block, and an unrecognized text is REFUSED instead of being imported empty. OrgGen guarantees in both cases: (1) a REPLAY never duplicates — the key is (source, externalId); (2) dryRun is TRUE by default: the call returns the plan (created / updated / skipped / conflicts / errors), which you can show to the human, without writing anything; writing is a second call with dryRun: false; (3) a batch is rolled back as a whole (rollback_import); (4) the historical doneAt date of done tasks is kept. onExisting: "update" rewrites the supplied fields of an already imported task ONLY if nobody has modified it since — otherwise conflicts is reported instead of an overwrite (except an edit that arrives DURING the call, between the plan and the write: not detected). Up to 500 items per call; an invalid item writes nothing, and neither do the items that reference it. No assignment notification is sent. Source comments have no slot: they are concatenated into body. Assignees are labels resolved against the people of the project, otherwise kept as they are (unresolvedAssignees). Leaves ONE aggregated event in the activity log per call that wrote (import.applied: the number of tasks created and updated), not one line per task; list_imports remains the history of the BATCH. An imported task has no observed creation or claim. For each update or conflict the plan returns the before → after values of each field (fields, truncated values); notTransported says what the format that was read does not carry.

Input Schema

NameRequiredDescriptionDefault
textNoWith a `format` other than `pivot`: the content of the file, as is (at most 400000 characters). An unrecognized text is REFUSED instead of being imported empty.
itemsNoThe tasks in the PIVOT FORMAT (resource `orggen://import/pivot`) — with `format: "pivot"` (the default). An invalid item writes nothing; neither do the items that reference it (parent, dependency).
cellIdNoWith `text`: the block under which to file ALL the tasks read (e.g. the feature). Mutually exclusive with `cellRef`.
dryRunNoDefault TRUE: computes and returns the plan WITHOUT writing anything. `false` to write.
formatNoDefault `pivot`: you supply `items`. Any other format reads the file of a framework PASTED AS IS into `text` (mapping, identity and limits: resource `orggen://import/pivot`).
sourceNoThe originating system (e.g. "linear"). REQUIRED with `items`; with a text `format`, defaults to the format's own (e.g. "speckit"). Enters the derived identifier "<source>-<externalId>".
cellRefNoWith `text`: the NAME of the block under which to file all the tasks read (ambiguous or not found = named refusal). Mutually exclusive with `cellId`.
importIdNoIdentifier of the batch; generated by the product if omitted.
onExistingNoDefault `skip`: an already imported task is left as it is. `update`: rewrites the SUPPLIED fields, only if nobody has modified it since the import (otherwise `conflicts`).
expectedProjectIdNoUUID of the project targeted by THIS call. ACTUALLY targets this project instead of the session project. Refused without changing anything if access is not granted.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed16 schema fields changed
    • changedInput schema / properties / cellId / description
      Previous value: -"Avec `text` : le bloc où ranger TOUTES les tâches lues (ex. la fonctionnalité). Exclusif avec `cellRef`."New value: +"With `text`: the block under which to file ALL the tasks read (e.g. the feature). Mutually exclusive with `cellRef`."
    • changedInput schema / properties / cellRef / description
      Previous value: -"Avec `text` : le NOM du bloc où ranger toutes les tâches lues (ambigu ou introuvable = refus nommé). Exclusif avec `cellId`."New value: +"With `text`: the NAME of the block under which to file all the tasks read (ambiguous or not found = named refusal). Mutually exclusive with `cellId`."
    • changedInput schema / properties / dryRun / description
      Previous value: -"Défaut TRUE : calcule et rend le plan SANS rien écrire. `false` pour écrire."New value: +"Default TRUE: computes and returns the plan WITHOUT writing anything. `false` to write."
    • changedInput schema / properties / expectedProjectId / description
      Previous value: -"UUID du projet visé par CET appel. Cible RÉELLEMENT ce projet au lieu du projet de session. Refusé sans rien modifier si l'accès n'est pas accordé."New value: +"UUID of the project targeted by THIS call. ACTUALLY targets this project instead of the session project. Refused without changing anything if access is not granted."
    • changedInput schema / properties / format / description
      Previous value: -"Défaut `pivot` : tu fournis `items`. Un autre format lit le fichier d’un framework COLLÉ TEL QUEL dans `text` (mapping, identité et limites : ressource `orggen://import/pivot`)."New value: +"Default `pivot`: you supply `items`. Any other format reads the file of a framework PASTED AS IS into `text` (mapping, identity and limits: resource `orggen://import/pivot`)."
    • changedInput schema / properties / importId / description
      Previous value: -"Identifiant du lot ; généré par le produit si omis."New value: +"Identifier of the batch; generated by the product if omitted."
    • changedInput schema / properties / items / description
      Previous value: -"Les tâches au FORMAT PIVOT (ressource `orggen://import/pivot`) — avec `format: \"pivot\"` (le défaut). Un item invalide n’écrit rien ; ceux qui le référencent (parent, dépendance) non plus."New value: +"The tasks in the PIVOT FORMAT (resource `orggen://import/pivot`) — with `format: \"pivot\"` (the default). An invalid item writes nothing; neither do the items that reference it (parent, dependency)."
    • changedInput schema / properties / items / items / properties / cellRef / description
      Previous value: -"Le NOM du bloc cible, résolu par le produit (ambigu ou introuvable = erreur nommée)."New value: +"The NAME of the target block, resolved by the product (ambiguous or not found = named error)."
    • changedInput schema / properties / items / items / properties / complexity / description
      Previous value: -"Ordre de grandeur RELATIF en TEMPS HUMAIN : xs = moins d’une heure · s = quelques heures · m = une demi-journée à un jour · l = quelques jours · xl = à DÉCOUPER. Elle s’estime AVANT la prise du travail ; c’est une estimation, jamais une promesse. Sans valeur = non estimée."New value: +"RELATIVE order of magnitude in HUMAN TIME: xs = under an hour · s = a few hours · m = half a day to a day · l = a few days · xl = to SPLIT. It is estimated ahead of the pick-up of the work; it is an estimate, not a promise. No value = not estimated."
    • changedInput schema / properties / items / items / properties / doneAt / description
      Previous value: -"Date d’achèvement D’HISTORIQUE — exige `status: \"done\"`, et ne peut pas être dans le futur."New value: +"HISTORICAL completion date — requires `status: \"done\"`, and cannot be in the future."
    • changedInput schema / properties / items / items / properties / externalId / description
      Previous value: -"L’identifiant de la tâche DANS le système d’origine — LA clé de rejeu (avec `source`)."New value: +"The identifier of the task WITHIN the originating system — THE replay key (with `source`)."
    • changedInput schema / properties / items / items / properties / parentExternalId / description
      Previous value: -"L’externalId de la tâche parente (US → tâche, DEUX niveaux), dans ce lot ou déjà importée."New value: +"The externalId of the parent task (user story → task, TWO levels), in this batch or already imported."
    • changedInput schema / properties / items / items / properties / url / description
      Previous value: -"Lien vers l’item d’origine (provenance affichée)."New value: +"Link to the original item (provenance shown)."
    • changedInput schema / properties / onExisting / description
      Previous value: -"Défaut `skip` : une tâche déjà importée est laissée telle quelle. `update` : réécrit les champs FOURNIS, seulement si personne ne l’a modifiée depuis l’import (sinon `conflicts`)."New value: +"Default `skip`: an already imported task is left as it is. `update`: rewrites the SUPPLIED fields, only if nobody has modified it since the import (otherwise `conflicts`)."
    • changedInput schema / properties / source / description
      Previous value: -"Le système d’origine (ex. \"linear\"). REQUIS avec `items` ; avec un `format` texte, défaut = celui du format (ex. \"speckit\"). Entre dans l’identifiant dérivé \"<source>-<externalId>\"."New value: +"The originating system (e.g. \"linear\"). REQUIRED with `items`; with a text `format`, defaults to the format's own (e.g. \"speckit\"). Enters the derived identifier \"<source>-<externalId>\"."
    • changedInput schema / properties / text / description
      Previous value: -"Avec un `format` autre que `pivot` : le contenu du fichier, tel quel (400000 caractères au plus). Un texte non reconnu est REFUSÉ, jamais importé à vide."New value: +"With a `format` other than `pivot`: the content of the file, as is (at most 400000 characters). An unrecognized text is REFUSED instead of being imported empty."
  2. Changed1 schema field changed
    • changedInput schema / properties / items / items / properties / complexity / description
      Previous value: -"Ordre de grandeur RELATIF en TEMPS HUMAIN : xs = moins d’une heure · s = quelques heures · m = une demi-journée à un jour · l = quelques jours · xl = à DÉCOUPER. Pose-la AVANT la prise du travail ; c’est une estimation, jamais une promesse. Sans valeur = non estimée."New value: +"Ordre de grandeur RELATIF en TEMPS HUMAIN : xs = moins d’une heure · s = quelques heures · m = une demi-journée à un jour · l = quelques jours · xl = à DÉCOUPER. Elle s’estime AVANT la prise du travail ; c’est une estimation, jamais une promesse. Sans valeur = non estimée."
  3. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the destructiveHint=true/readOnlyHint=false annotations it discloses replay key `(source, externalId)`, dryRun defaulting to TRUE with a plan-then-write two-call flow, conflicts instead of overwrite, whole-batch rollback, 500-item cap, no notification, and the single aggregated `import.applied` event. This is exactly the mutation context annotations can't carry.

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?

The purpose is front-loaded and almost every clause carries non-redundant behavior, but it is delivered as one dense, unsegmented paragraph of numbered asides that is hard to scan. The volume is defensible for the complexity, yet structure is a clear gap.

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?

With no output schema, the description still explains what the dryRun plan returns (created/updated/skipped/conflicts/errors, before→after `fields`, `notTransported`) and covers limits, identity, conflicts, and rollback. Nothing an agent needs to call it correctly 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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: `source` is REQUIRED with items and seeds the derived id, `items` requires `source`, assignees are label-resolved against project people, and unrecognized text is refused rather than imported empty. It goes beyond the schema in most places.

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?

States a specific verb ("Imports") and resource ("a BATCH of tasks from an external system") with named sources (Linear, Jira, Spec Kit). It clearly occupies the import slot, distinguishable from sibling `create_tasks` and paired with `list_imports`/`rollback_import`.

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?

Gives clear context for the two mutually exclusive input modes (items vs format+text) and routing rules for dryRun, onExisting, cellId/cellRef. It names `rollback_import` and `list_imports` but never explicitly contrasts against `create_tasks` for native creation, leaving that inference to the agent.

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.