Skip to main content
Glama

Move connectors here

well_retarget_connectors
Idempotent

Move bank (or other ledger) connections, with every transaction they already synced, from the person's personal workspace into this workspace: the write behind the connector-follow card. The connection itself changes workspace. Its history is not pulled again, so each transaction is held once, and the next sync runs here. The move runs in the background after this call.

REQUIRED: source_workspace_connector_ids: the workspace_connector_id of each candidate to move, from well_list_retargetable_connectors or well_show_retargetable_connectors. An id that is not a current candidate is refused. An id already in this workspace, or already moving here, is reported under already_retargeted_workspace_connector_ids, so a repeated Confirm is a safe replay.

When the move cannot run, nothing moves and refusals lists why, one typed reason per finding (for example target_not_company when the account holder is not this workspace's company, or validated_books_present when posted entries would move). Tell the person the reason in plain words. disabled_borrowers lists connections in other workspaces that used this connection and stop when it moves.

Only a person who is owner or admin of both this workspace and the source workspace may move a connection.

Input Schema

NameRequiredDescriptionDefault
workspace_idNoTarget workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.
conversation_idNoThe conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.
idempotency_keyNoOptional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.
workspace_scopeNoRestrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.
source_workspace_connector_idsYesThe workspace_connector_id of each connection to move here, copied from well_list_retargetable_connectors or well_show_retargetable_connectors.

Output Schema

NameRequiredDescriptionDefault
errorNo
successYes
refusalsNoWhy the move cannot run, one typed reason per finding. Nothing moved when this is not empty.
conversation_idNoThe conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.
newly_connectedNoTools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: "<name> is connected.". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later.
disabled_borrowersNoConnections in other workspaces that used a moving connection and stop when it moves.
conversation_id_noteNoPresent only when the server opened a fresh lane, stating that no choice recorded earlier was read.
conversation_id_sourceNoWhere the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened.
moving_workspace_connector_idsNoThe connections whose move here is armed. Empty when the move was refused.
already_retargeted_workspace_connector_idsNoIds already in this workspace or already moving here: an expected replay, not an error.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / refusals / items / properties / refusal / enum
      Previous value: -[
      -  "not_ledger_class",
      -  "is_borrow",
      -  "not_authorized",
      -  "source_not_marked",
      -  "holder_unknown",
      -  "target_not_company",
      -  "third_target_present",
      -  "already_moving",
      -  "connector_deleted",
      -  "target_deleted",
      -  "validated_books_present",
      -  "issued_invoice_present",
      -  "party_not_member",
      -  "identity_claim_collision",
      -  "held_row_without_grant",
      -  "borrow_rows_in_target",
      -  "chart_shared_with_unmoved_row",
      -  "payslip_contract_stays",
      -  "transaction_tag_stays",
      -  "note_tag_stays",
      -  "expense_payer_stays",
      -  "shared_expense_stays",
      -  "inventory_location_stays",
      -  "pipeline_move_unsupported",
      -  "activity_link_stays",
      -  "api_key_stays",
      -  "collect_document_run_stays",
      -  "document_media_stays",
      -  "product_media_stays",
      -  "project_media_stays",
      -  "invoice_item_media_stays",
      -  "invoice_transaction_rate_stays",
      -  "invoice_rate_stays",
      -  "payment_card_stays",
      -  "payment_check_stays",
      -  "payslip_rate_stays",
      -  "shipment_location_stays",
      -  "collect_task_run_stays",
      -  "invoice_item_media_link_stays",
      -  "note_memory_stays",
      -  "note_tone_profile_stays",
      -  "document_share_open_stays",
      -  "note_meeting_link_stays",
      -  "meeting_note_link_stays",
      -  "product_master_link_stays"
      -]New value: +[
      +  "not_ledger_class",
      +  "is_borrow",
      +  "not_authorized",
      +  "source_not_marked",
      +  "holder_unknown",
      +  "target_not_company",
      +  "third_target_present",
      +  "already_moving",
      +  "connector_deleted",
      +  "target_deleted",
      +  "validated_books_present",
      +  "issued_invoice_present",
      +  "party_not_member",
      +  "identity_claim_collision",
      +  "held_row_without_grant",
      +  "borrow_rows_in_target",
      +  "chart_shared_with_unmoved_row",
      +  "payslip_contract_stays",
      +  "transaction_tag_stays",
      +  "note_tag_stays",
      +  "expense_payer_stays",
      +  "shared_expense_stays",
      +  "inventory_location_stays",
      +  "pipeline_move_unsupported",
      +  "activity_link_stays",
      +  "api_key_stays",
      +  "collect_document_run_stays",
      +  "document_media_stays",
      +  "product_media_stays",
      +  "project_media_stays",
      +  "invoice_item_media_stays",
      +  "invoice_transaction_rate_stays",
      +  "invoice_rate_stays",
      +  "payment_card_stays",
      +  "payment_check_stays",
      +  "payslip_rate_stays",
      +  "shipment_location_stays",
      +  "collect_task_run_stays",
      +  "invoice_item_media_link_stays",
      +  "note_memory_stays",
      +  "note_tone_profile_stays",
      +  "document_share_open_stays",
      +  "note_meeting_link_stays",
      +  "meeting_note_link_stays",
      +  "product_master_link_stays",
      +  "order_attribution_stays",
      +  "product_page_stays"
      +]
  2. Changed6 schema fields changed
    • changedInput schema / properties / source_workspace_connector_ids / description
      Previous value: -"The workspace_connector_id of each parent connector to bring across, copied from well_list_retargetable_connectors or well_show_retargetable_connectors."New value: +"The workspace_connector_id of each connection to move here, copied from well_list_retargetable_connectors or well_show_retargetable_connectors."
    • changedOutput schema / properties / already_retargeted_workspace_connector_ids / description
      Previous value: -"Source ids that had already been retargeted — an expected replay, not an error."New value: +"Ids already in this workspace or already moving here: an expected replay, not an error."
    • removedOutput schema / properties / created_workspace_connector_ids
      Removed value: -{
      -  "description": "The connector rows created on this workspace, one per newly retargeted source.",
      -  "items": {
      -    "format": "uuid",
      -    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / disabled_borrowers
      Added value: +{
      +  "description": "Connections in other workspaces that used a moving connection and stop when it moves.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "workspace_connector_id": {
      +        "format": "uuid",
      +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +        "type": "string"
      +      },
      +      "workspace_id": {
      +        "format": "uuid",
      +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "workspace_connector_id",
      +      "workspace_id"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / moving_workspace_connector_ids
      Added value: +{
      +  "description": "The connections whose move here is armed. Empty when the move was refused.",
      +  "items": {
      +    "format": "uuid",
      +    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / refusals
      Added value: +{
      +  "description": "Why the move cannot run, one typed reason per finding. Nothing moved when this is not empty.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "count": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "refusal": {
      +        "enum": [
      +          "not_ledger_class",
      +          "is_borrow",
      +          "not_authorized",
      +          "source_not_marked",
      +          "holder_unknown",
      +          "target_not_company",
      +          "third_target_present",
      +          "already_moving",
      +          "connector_deleted",
      +          "target_deleted",
      +          "validated_books_present",
      +          "issued_invoice_present",
      +          "party_not_member",
      +          "identity_claim_collision",
      +          "held_row_without_grant",
      +          "borrow_rows_in_target",
      +          "chart_shared_with_unmoved_row",
      +          "payslip_contract_stays",
      +          "transaction_tag_stays",
      +          "note_tag_stays",
      +          "expense_payer_stays",
      +          "shared_expense_stays",
      +          "inventory_location_stays",
      +          "pipeline_move_unsupported",
      +          "activity_link_stays",
      +          "api_key_stays",
      +          "collect_document_run_stays",
      +          "document_media_stays",
      +          "product_media_stays",
      +          "project_media_stays",
      +          "invoice_item_media_stays",
      +          "invoice_transaction_rate_stays",
      +          "invoice_rate_stays",
      +          "payment_card_stays",
      +          "payment_check_stays",
      +          "payslip_rate_stays",
      +          "shipment_location_stays",
      +          "collect_task_run_stays",
      +          "invoice_item_media_link_stays",
      +          "note_memory_stays",
      +          "note_tone_profile_stays",
      +          "document_share_open_stays",
      +          "note_meeting_link_stays",
      +          "meeting_note_link_stays",
      +          "product_master_link_stays"
      +        ],
      +        "type": "string"
      +      },
      +      "workspace_connector_id": {
      +        "anyOf": [
      +          {
      +            "format": "uuid",
      +            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "workspace_connector_id",
      +      "refusal"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  3. Changed1 schema field changed
    • changedOutput schema / properties / newly_connected / description
      Previous value: -"Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. Start the reply with one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later."New value: +"Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later."
  4. Changed1 schema field changed
    • addedInput schema / properties / workspace_scope
      Added value: +{
      +  "description": "Restrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.",
      +  "enum": [
      +    "family"
      +  ],
      +  "type": "string"
      +}
  5. Changed1 schema field changed
    • addedOutput schema / properties / newly_connected
      Added value: +{
      +  "description": "Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. Start the reply with one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "name": {
      +        "type": "string"
      +      },
      +      "service_id": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "service_id"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  6. Changed4 schema fields changed
    • addedInput schema / properties / conversation_id
      Added value: +{
      +  "description": "The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / conversation_id
      Added value: +{
      +  "description": "The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / conversation_id_note
      Added value: +{
      +  "description": "Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / conversation_id_source
      Added value: +{
      +  "description": "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened.",
      +  "enum": [
      +    "host_meta",
      +    "argument",
      +    "minted"
      +  ],
      +  "type": "string"
      +}
  7. Added

TDQS

A4.4/5.0
Behavior4/5

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

Goes well beyond the annotations: history is not re-pulled so each transaction is held once, the move runs in the background, already-moved ids are reported rather than erroring, refusals carry typed reasons, and other workspaces' borrowers can be disabled. Annotations already cover idempotency and non-destructiveness, so this added context is a genuine contribution; only the background completion signal is left implicit.

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 what the tool does and the write it backs, then requirements, failure behavior, and permissions in descending priority. Dense but nearly every sentence carries information; the standalone background-execution sentence and the borrower caveat add length without much decision value.

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 multi-input mutation with an output schema, the description covers provenance of ids, eligibility, permission gating, partial-failure semantics, and replay safety. Return-value details are appropriately left to the output schema, with only the key response fields named.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents every parameter including workspace_id, conversation_id, idempotency_key, and workspace_scope. The description reinforces the semantics of source_workspace_connector_ids (provenance and refusal for non-candidates) but says nothing about the other four parameters, so it only modestly exceeds the baseline.

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 and resource with scope: moving bank/ledger connections and their already-synced transactions from a personal workspace into this one, and identifies itself as the write behind the connector-follow card. It names the sibling read tools (well_list_retargetable_connectors, well_show_retargetable_connectors) that supply inputs, so an agent can place it precisely in the family.

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?

Gives explicit preconditions: ids must come from the two retargetable-connector tools, non-candidates are refused, and only an owner/admin of both workspaces may move a connection. It also explains when the move cannot run and what to do with the refusal reasons, plus that a repeated Confirm is a safe replay.

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.

Resources