Skip to main content
Glama

Add a custom connector

well_add_custom_connector
Idempotent

Save the MCP server of a tool Well's catalog does not carry as a connector of this workspace. The connector belongs to this workspace only: no other workspace sees it, and Well's catalog does not list it.

Call it only when well_show_connector_request returned can_add_self: true, with the tool's name and the address the person gave, after well_probe_mcp_server answered "mcp_server" for that address. Only a workspace owner or admin can add one; anyone else is refused.

The address is checked again before anything is saved: Well connects only to a public https address that answers as an MCP server, and re-checks it on every request. Never ask for a key, a token or a password in the conversation: this call takes none. A server that asks for a sign-in on its own page is added when its authorization server offers client registration; otherwise it is not open yet ("sign_in_not_open"): say so, and say nothing was saved. A server whose sign-in page sits on another domain is refused ("sign_in_on_another_domain"), and so is a server whose sign-in documents do not name it ("sign_in_owner_unverified"): say so in the same way. Adding the same address again returns the same connector.

Read outcome. "added": say the server is saved for this workspace and name the sign-in from sign_in; with "api_key", say its key is added outside the conversation, and never ask for it; with "oauth", give sign_in_url as the one link of the reply and say the person signs in there. "sign_in_refused": say the server is saved but its sign-in could not be prepared, so nothing reads it yet. Any other outcome: say in one line why nothing was saved.

Input Schema

NameRequiredDescriptionDefault
urlYesThe full address of the tool's MCP server, exactly as the person gave it, e.g. "https://mcp.example.com/mcp". Never an address you composed or guessed.
nameYesThe tool's name, as the person wrote it, e.g. "Planday".
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.

Output Schema

NameRequiredDescriptionDefault
hostNoThe host of the address, to name the server in your line.
errorNo
statusNoThe connection's status.
outcomeNo"added" when the server is saved as a connection of this workspace. "sign_in_refused" when the server is saved but its sign-in page could not be prepared (its authorization server refused Well's client registration). Otherwise why nothing was saved: "not_admin", "not_a_real_workspace", "address_refused", "unreachable", "not_mcp_server", "sign_in_not_open" (the server asks for a sign-in on its own page and offers no client registration, or its sign-in could not be named), "sign_in_on_another_domain" (its sign-in page belongs to another domain than the server, so Well does not hand the server a token granted there), "sign_in_owner_unverified" (its sign-in documents do not name the server, so Well cannot check that the sign-in belongs to it), or "limit_reached".
sign_inNoThe sign-in the server asks for: "none", "api_key", "oauth" or "unknown". Null when the address did not answer as an MCP server.
successYes
sign_in_urlNoWith sign_in "oauth": the page where the person signs in to the tool and allows Well. Give it as the one link of the reply. The connection reads nothing until that sign-in finishes.
connector_idNoThe id of the saved connector. It belongs to this workspace only.
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.
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.
workspace_connector_idNoThe id of the connection, for well_list_connector_tools.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • removedOutput schema / properties / host / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / host / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / outcome / description
      Previous value: -"\"added\" when the server is saved as a connection of this workspace. Otherwise why nothing was saved: \"not_admin\", \"not_a_real_workspace\", \"address_refused\", \"unreachable\", \"not_mcp_server\", \"sign_in_not_open\" (the server asks for a sign-in on its own page, or its sign-in could not be named), or \"limit_reached\"."New value: +"\"added\" when the server is saved as a connection of this workspace. \"sign_in_refused\" when the server is saved but its sign-in page could not be prepared (its authorization server refused Well's client registration). Otherwise why nothing was saved: \"not_admin\", \"not_a_real_workspace\", \"address_refused\", \"unreachable\", \"not_mcp_server\", \"sign_in_not_open\" (the server asks for a sign-in on its own page and offers no client registration, or its sign-in could not be named), \"sign_in_on_another_domain\" (its sign-in page belongs to another domain than the server, so Well does not hand the server a token granted there), \"sign_in_owner_unverified\" (its sign-in documents do not name the server, so Well cannot check that the sign-in belongs to it), or \"limit_reached\"."
    • addedOutput schema / properties / sign_in_url
      Added value: +{
      +  "description": "With sign_in \"oauth\": the page where the person signs in to the tool and allows Well. Give it as the one link of the reply. The connection reads nothing until that sign-in finishes.",
      +  "type": "string"
      +}
  2. 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."
  3. 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"
      +}
  4. Added

TDQS

A4.6/5.0
Behavior5/5

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

Goes far beyond the annotations by disclosing the re-validation of the address on every request, the idempotent behaviour ('adding the same address again returns the same connector'), and the failure taxonomy with literal codes (sign_in_not_open, sign_in_on_another_domain, sign_in_owner_unverified). It also states the credential constraint ('never ask for a key, a token or a password') and that an api_key is added outside the conversation, which is exactly the kind of operational context annotations cannot convey.

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?

Long but front-loaded: identity of the connector, then preconditions, then server-side checks, then outcome handling. Nearly every sentence carries an operational rule, though the outcome-by-outcome reply script makes it heavier than strictly needed for tool selection.

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 write tool with open-world network access and multiple failure modes, the description covers permissions, pre-checks, idempotency, partial-success states and refusal wording. Even though an output schema exists (so outcome fields needn't be re-explained), the outcome-handling guidance adds useful agent behaviour rather than duplicating structure.

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 description coverage is 100% and each parameter already carries detailed prose, so the schema does the heavy lifting. The description only reinforces that url and name come verbatim from the person and that no credential parameter exists; it adds little per-parameter meaning beyond that. Baseline 3 is appropriate.

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, resource and scope: 'Save the MCP server of a tool Well's catalog does not carry as a connector of this workspace.' It immediately distinguishes itself from catalog-based siblings (well_request_connector, well_show_connector_request, well_update_custom_connector) by both what it creates and who sees it.

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 and the exact predecessor tools with their required return values ('only when well_show_connector_request returned can_add_self: true', 'after well_probe_mcp_server answered mcp_server'), plus the authorization gate (owner or admin, others refused). An agent knows precisely when to call it and when not to.

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