Skip to content

MCP connectors

An MCP connector points Wetel at a tool server you run (Model Context Protocol), so a workflow tool node can call its tools. Every operation here takes a dashboard JWT. The server must be reachable from the internet: a serverUrl that resolves to a private or reserved address is refused. The apiKey you register is the key of your tool server; it is stored as a secret and never returned.

Every operation is a POST of { "query", "variables" } to https://api.wetel.dev/graphql (sandbox) with the x-huat-platform: customer header and the credential shown. New here? Start with the Quickstart and the Authentication cheat sheet. Errors are listed in Errors; Postman and OpenAPI files are on Downloads.

OperationKindCredentialWhat it does
createMcpConnectormutationDashboard JWTRegister an MCP tool server for your workspace.
mcpConnectorsqueryDashboard JWTList the workspace’s MCP connectors, newest first.
listMcpToolsqueryDashboard JWTConnect to the server and list its tools. Use it to test a connector before a workflow relies on it.
deleteMcpConnectormutationDashboard JWTRemove an MCP connector. Workflow nodes that use it stop working.

Register an MCP tool server for your workspace.

  • Kind: mutation
  • Credential: Dashboard JWT: Authorization: Bearer <jwt>, from login (a person or a one-off script)
  • Available in: sandbox and production
  • creditsPerCall is optional: the credits charged for one successful call of any tool on this connector. Omit it for the platform default.

Request

mutation CreateConnector($input: CreateMcpConnectorInput!) {
createMcpConnector(input: $input) {
id
name
serverUrl
creditsPerCall
}
}
variables
{
"input": {
"name": "Ticketing tools",
"serverUrl": "https://tools.example.com/mcp",
"apiKey": "example-tool-server-key-not-real"
}
}

Input fields

CreateMcpConnectorInput

FieldTypeRequiredDescription
apiKeyString!yesCredential sent as Authorization: Bearer on every call to the server. Stored as a secret, never returned.
creditsPerCallIntnoThe credits charged for one successful call of ANY tool on this connector (an integer, 0 or more). Omit to use the platform default (2 credits).
nameString!yesDisplay name (1 to 100 characters).
serverUrlString!yesURL of the MCP server (streamable HTTP transport). Private and internal addresses are refused.

Code samples

createMcpConnector.sh
#!/usr/bin/env bash
# createMcpConnector: Register an MCP tool server for your workspace.
# Credential: Dashboard JWT (WETEL_JWT).
API_URL="${WETEL_API_URL:-https://api.wetel.dev/graphql}"
curl -sS "$API_URL" \
-H "Content-Type: application/json" \
-H "x-huat-platform: customer" \
-H "Authorization: Bearer $WETEL_JWT" \
--data-binary @- <<'JSON'
{
"query": "mutation CreateConnector($input:CreateMcpConnectorInput!){createMcpConnector(input:$input){id name serverUrl creditsPerCall}}",
"variables": {
"input": {
"name": "Ticketing tools",
"serverUrl": "https://tools.example.com/mcp",
"apiKey": "example-tool-server-key-not-real"
}
}
}
JSON

Responses

Success (HTTP 200)

{
"data": {
"createMcpConnector": {
"id": 4,
"name": "Ticketing tools",
"serverUrl": "https://tools.example.com/mcp",
"creditsPerCall": null
}
}
}
BAD_USER_INPUT: A required field is missing (HTTP 400)

Sent with variables:

{
"input": {
"name": "Ticketing tools",
"serverUrl": "https://tools.example.com/mcp"
}
}
{
"errors": [
{
"message": "Variable \"$input\" got invalid value { name: \"Ticketing tools\", serverUrl: \"https://tools.example.com/mcp\" }; Field \"apiKey\" of required type \"String!\" was not provided.",
"locations": [
{
"line": 1,
"column": 26
}
],
"extensions": {
"code": "BAD_USER_INPUT"
}
}
]
}
UNAUTHENTICATED: Called with an API key instead of a JWT (HTTP 200)
{
"errors": [
{
"message": "Unauthorized",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"createMcpConnector"
],
"extensions": {
"code": "UNAUTHENTICATED",
"originalError": {
"message": "Unauthorized",
"statusCode": 401
}
}
}
],
"data": null
}

List the workspace’s MCP connectors, newest first.

  • Kind: query
  • Credential: Dashboard JWT: Authorization: Bearer <jwt>, from login (a person or a one-off script)
  • Available in: sandbox and production

Request

query ListConnectors {
mcpConnectors {
id
name
serverUrl
creditsPerCall
createdAt
}
}
variables
{}

Code samples

mcpConnectors.sh
#!/usr/bin/env bash
# mcpConnectors: List the workspace's MCP connectors, newest first.
# Credential: Dashboard JWT (WETEL_JWT).
API_URL="${WETEL_API_URL:-https://api.wetel.dev/graphql}"
curl -sS "$API_URL" \
-H "Content-Type: application/json" \
-H "x-huat-platform: customer" \
-H "Authorization: Bearer $WETEL_JWT" \
--data-binary @- <<'JSON'
{
"query": "query ListConnectors{mcpConnectors{id name serverUrl creditsPerCall createdAt}}",
"variables": {}
}
JSON

Responses

Success (HTTP 200)

{
"data": {
"mcpConnectors": [
{
"id": 4,
"name": "Ticketing tools",
"serverUrl": "https://tools.example.com/mcp",
"creditsPerCall": null,
"createdAt": "2026-10-12T04:30:00.000Z"
}
]
}
}
UNAUTHENTICATED: Missing credential (HTTP 200)
{
"errors": [
{
"message": "Unauthorized",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"mcpConnectors"
],
"extensions": {
"code": "UNAUTHENTICATED",
"originalError": {
"message": "Unauthorized",
"statusCode": 401
}
}
}
],
"data": null
}

Connect to the server and list its tools. Use it to test a connector before a workflow relies on it.

  • Kind: query
  • Credential: Dashboard JWT: Authorization: Bearer <jwt>, from login (a person or a one-off script)
  • Available in: sandbox and production
  • This calls your server live with the stored key. A server that cannot be reached, or that refuses the key, answers INTERNAL_SERVER_ERROR with a message describing the connection problem.
  • inputSchema is the tool’s own JSON Schema for its arguments, as your server declares it.

Request

query Tools($connectorId: Int!) {
listMcpTools(connectorId: $connectorId) {
name
description
inputSchema
}
}
variables
{
"connectorId": 4
}

Code samples

listMcpTools.sh
#!/usr/bin/env bash
# listMcpTools: Connect to the server and list its tools. Use it to test a connector before a workflow relies on it.
# Credential: Dashboard JWT (WETEL_JWT).
API_URL="${WETEL_API_URL:-https://api.wetel.dev/graphql}"
curl -sS "$API_URL" \
-H "Content-Type: application/json" \
-H "x-huat-platform: customer" \
-H "Authorization: Bearer $WETEL_JWT" \
--data-binary @- <<'JSON'
{
"query": "query Tools($connectorId:Int!){listMcpTools(connectorId:$connectorId){name description inputSchema}}",
"variables": {
"connectorId": 4
}
}
JSON

Responses

Success (HTTP 200)

{
"data": {
"listMcpTools": [
{
"name": "create_ticket",
"description": "Create a ticket in the ticketing system and return its number.",
"inputSchema": {
"type": "object",
"properties": {
"subject": {
"type": "string"
},
"level": {
"type": "string",
"enum": [
"L1",
"L2",
"L3"
]
}
},
"required": [
"subject",
"level"
]
}
}
]
}
}
NOT_FOUND: Connector not in your workspace (HTTP 200)
{
"errors": [
{
"message": "Connector #4 not found",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"listMcpTools"
],
"extensions": {
"code": "NOT_FOUND",
"status": 404,
"originalError": {
"message": "Connector #4 not found",
"error": "Not Found",
"statusCode": 404
}
}
}
],
"data": null
}

Remove an MCP connector. Workflow nodes that use it stop working.

  • Kind: mutation
  • Credential: Dashboard JWT: Authorization: Bearer <jwt>, from login (a person or a one-off script)
  • Available in: sandbox and production

Request

mutation DeleteConnector($id: Int!) {
deleteMcpConnector(id: $id)
}
variables
{
"id": 4
}

Code samples

deleteMcpConnector.sh
#!/usr/bin/env bash
# deleteMcpConnector: Remove an MCP connector. Workflow nodes that use it stop working.
# Credential: Dashboard JWT (WETEL_JWT).
API_URL="${WETEL_API_URL:-https://api.wetel.dev/graphql}"
curl -sS "$API_URL" \
-H "Content-Type: application/json" \
-H "x-huat-platform: customer" \
-H "Authorization: Bearer $WETEL_JWT" \
--data-binary @- <<'JSON'
{
"query": "mutation DeleteConnector($id:Int!){deleteMcpConnector(id:$id)}",
"variables": {
"id": 4
}
}
JSON

Responses

Success (HTTP 200)

{
"data": {
"deleteMcpConnector": true
}
}
NOT_FOUND: Not in your workspace (HTTP 200)
{
"errors": [
{
"message": "Connector #4 not found",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"deleteMcpConnector"
],
"extensions": {
"code": "NOT_FOUND",
"status": 404,
"originalError": {
"message": "Connector #4 not found",
"error": "Not Found",
"statusCode": 404
}
}
}
],
"data": null
}