On this page

Connectors

request-connector

Can be held for approval

Request a connector with empty configuration, tagged not_configured, so a process flow or an agent that depends on it can be published before anyone holds the credentials. Idempotent, and it never takes credentials. Needs the fabric:skill.write grant.

curl -sS -X POST https://fabric.wexa.ai/mcp/$FABRIC_PROJECT_ID \
  -H "authorization: Bearer $FABRIC_API_KEY" \
  -H "Mcp-Session-Id: $MCP_SESSION_ID" \
  -H "content-type: application/json" -H "accept: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"request-connector","arguments":{"category":"slack","scope":"organization"}}}'
{
  "content": [
    {
      "type": "text",
      "text": "{\"lifecycle_id\":\"qlc_000017\",\"result\":{\"category\":\"slack\",\"scope\":\"organization\",\"connector\":{\"connectorId\":\"6b1a3d5e7f9c0b2a4d6e8f03\",\"alreadyExists\":false,\"is_configured\":false,\"name\":\"Slack\"}}}"
    }
  ],
  "isError": false
}

Parameters

ParameterTypeRequiredNotes
categorystringRequiredThe connector's category from list-connector-catalog, such as slack. Case does not matter. A category that needs no credentials is refused: use provision-connector. A category the platform does not know is refused (404).
namestringOptionalDisplay name. Defaults to the connector's catalogue name.
scopestringOptionalorganization: one shared connector for the project (the default). individual: your own, which only you see. Anything else is refused.
Errors
  • ValidationError (400): the platform refused the request, with its own reason.
Show full response
  • category: the category, in lower case.
  • scope: organization or individual.
  • connector: the platform's answer: connectorId, alreadyExists and is_configured, and for a connector this call created also its name and access_scope.
  • note: what happened: the connector was created with empty configuration, a placeholder for it already existed and is still not configured, or a configured connector of this kind already exists and nothing was created.

An example response, for a Slack connector this call created.

{
  "content": [
    {
      "type": "text",
      "text": "{\"lifecycle_id\":\"qlc_000017\",\"result\":{\"category\":\"slack\",\"scope\":\"organization\",\"connector\":{\"success\":true,\"connectorId\":\"6b1a3d5e7f9c0b2a4d6e8f03\",\"alreadyExists\":false,\"is_configured\":false,\"name\":\"Slack\",\"access_scope\":\"organization\"},\"note\":\"created with empty configuration and tagged not_configured. It has no runnable actions until its credentials are saved in the Fabric console (Connect > Connectors).\"}}"
    }
  ],
  "isError": false
}
More details

The connector appears in the project for the person responsible to configure in the console. Until then list-connectors lists it with no actions, and nothing on it can run.

When a matching connector already exists in the project, it is returned and nothing is created: a shared connector matches on its category, an individual one on its category and its owner. A connector that needs no credentials is provisioned with provision-connector instead, and one you hold the credentials for with configure-connector.

The error code on the 422 is S4:validate-input, and the message on the 404 and 400 is the platform's own reason. Arguments are validated before policy runs, so a missing or unknown category is refused before anything is held.

Marked consequential: it is audited in full, and a policy rule may hold it for a person to approve. The project's write gate, when a project admin has turned it on (it is off by default), holds it this way when an API key or SDK session calls it.

Every tool call works the same way: How every tool call works.