Skip to main content
Glama
fivetran

Fivetran MCP Server

Official
by fivetran

Fivetran MCP Server

Upgrading from version 0.3? Four things worth knowing:

  • Credential endpoints are governed by DISALLOWED_ACTIONS. The manifest carries every endpoint in the Fivetran API, so system-key and user-API-key operations are reachable within whatever FIVETRAN_SCOPE you grant. Set the recommended denylist to keep them out of reach; the server warns at startup while any remain callable. system-keys:write and system-keys:delete are valid DISALLOWED_ACTIONS tokens.

  • get_schema(service=X) used to drop required destination-schema fields. Fixed in 0.3.2 — per-service connector configs were silently missing the shared schema_format_* refs, which carry the only unconditional required field in the whole config. If connector creation through get_schema/connections_write ever failed or came back incomplete, that's now fixed.

  • The server can now run as a hosted HTTP server, via --transport streamable-http (or MCP_TRANSPORT), instead of only stdio. See Running over HTTP (advanced).

  • OAuth resource-server support is infrastructure scaffolding only, not yet functional. Real token verification isn't implemented yet, so streamable-http mode today only works in its interim header-forwarding form (leave FIVETRAN_AUTH_ISSUER unset).

An MCP server that you can use to interact with your Fivetran environment. It allows you to ask read-only questions like "when was the last time my postgres connection completed a sync?" and "are any of my connections broken?" Set FIVETRAN_SCOPE to read/write or read/write/delete to unlock write and delete operations, and use DISALLOWED_ACTIONS to carve exceptions out of that tier (for example, system-keys:write to deny both write and delete operations on system keys). Write and delete operations are marked with advisory instructions telling the client model to confirm with you before execution; the server does not enforce confirmation.

Using the tools

The server exposes two discovery tools plus one execution tool for each allowed resource/action pair:

  • list_endpoints discovers API endpoints. Call it without arguments for category counts, with category to list a resource such as connections, or with search to find endpoints by name, summary, or path.

  • get_schema returns the parameters, request body, and response schema for an endpoint. For connection and destination create/modify endpoints, pass service (for example, postgres) to include the service-specific configuration fields.

  • <resource>_<action> tools execute endpoints in that group. Examples include connections_read, connections_write, and destinations_delete. Pass the endpoint name plus any path_params, query, or body values required by its schema.

The generated execution tools are filtered by FIVETRAN_SCOPE and DISALLOWED_ACTIONS, so clients only see operations allowed by the server configuration. A typical workflow is:

  1. Discover an endpoint with list_endpoints(category="connections") or list_endpoints(search="sync").

  2. Inspect it with get_schema(name="sync_connection").

  3. Execute it with the matching tool, for example connections_write(name="sync_connection", path_params={"connectionId": "..."}).

Write and delete tool descriptions and endpoint summaries contain advisory confirmation warnings. Whether confirmation occurs depends on the client model following those instructions; the server does not enforce it.

Related MCP server: MCP Fivetran

Plugins

We have plugins that use this MCP server to make complicated tasks easier, compatible with Claude Code and Codex. Each plugin lives in its own repository with its own README.

  • copy-connections. Copy existing Fivetran connections to a new destination. Keep their configs and schemas intact or modify them as you like.

Regenerating API Schema Files

The open-api-definitions/ directory contains lightweight per-endpoint schema files used by the server. To regenerate them from an updated OpenAPI spec:

python split_openapi_by_endpoint.py fivetran-open-api-definition.json open-api-definitions

This will replace the existing schema files with freshly generated ones.

Setup

1. Choose how to run the server

You have two options. Most users should use uvx. No clone required.

Requires uv (which provides uvx) and Python 3.10+. uvx fetches and runs the server directly from this repository, so there is nothing to install or update manually.

The command your MCP client will run is:

uvx --from git+https://github.com/fivetran/fivetran-mcp fivetran-mcp

Note: bare uvx fivetran-mcp (without --from) does not work. The fivetran-mcp and mcp-fivetran names on PyPI are owned by unrelated projects, so you must install from the git URL.

Option B: Run from a local clone (for development)

Use this if you want to modify server.py or regenerate schema files.

git clone https://github.com/fivetran/fivetran-mcp
cd fivetran-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install .

You can then point your MCP client at python /path/to/fivetran-mcp/server.py.

2. Get Fivetran API credentials

You can generate credentials within https://fivetran.com/dashboard/user/api-config

3. Prepare your environment variables

Before configuring any client, decide on the values you will pass to the server. Every client config below expects the same set of variables, so figure them out once here and reuse them.

Variable

Required

Default

Description

FIVETRAN_API_KEY

Yes

-

Your Fivetran API key (from step 2)

FIVETRAN_API_SECRET

Yes

-

Your Fivetran API secret (from step 2)

FIVETRAN_SCOPE

No

read

One of read, read/write, read/write/delete. Case-insensitive. Sets the ceiling of what the server can do.

DISALLOWED_ACTIONS

No

(empty)

Comma-separated list of tokens to deny inside the current scope. Case-insensitive. Two forms:• resource:action (e.g. system-keys:write) denies that pair and cascades to higher actions on the same resource — denying read also denies write and delete; denying write also denies delete.• resource:action:endpoint_name (e.g. connections:write:sync_connection) denies one specific endpoint. No cascade. The endpoint must belong to that exact resource:action pair or startup fails.See open-api-definitions/AVAILABLE_ACTIONS.md for the full list of valid resource:action tokens.

FIVETRAN_ALLOW_WRITES

No

false

Backwards-compatibility flag from earlier releases. true is equivalent to FIVETRAN_SCOPE=read/write. Prefer FIVETRAN_SCOPE for new configs. If both are set, FIVETRAN_SCOPE wins and this is ignored.

The server marks write and delete operations with advisory confirmation warnings, but does not enforce confirmation.

Some endpoints read, mint, or rotate API keys that outlive the session, and DISALLOWED_ACTIONS is the only thing keeping them from an agent:

system-keys:read,users:read:get_user_api_key,users:read:list_api_keys,users:write:create_user_api_key,users:write:rotate_user_api_key,users:delete:delete_user_api_keys

4. Connect to your AI client

Choose your preferred AI client below and follow the configuration instructions. Each snippet uses the environment variables you prepared in step 3. Plug in the values you settled on.

Claude Desktop

  1. Open Claude Desktop and go to Settings → Developer → Edit Config

  2. This opens claude_desktop_config.json. Add the Fivetran MCP server:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

Using uvx (Option A):

{
  "mcpServers": {
    "fivetran": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/fivetran/fivetran-mcp", "fivetran-mcp"],
      "env": {
        "FIVETRAN_API_KEY": "your-api-key",
        "FIVETRAN_API_SECRET": "your-api-secret",
        "FIVETRAN_SCOPE": "read",
        "DISALLOWED_ACTIONS": "system-keys:read,users:read:get_user_api_key,users:read:list_api_keys,users:write:create_user_api_key,users:write:rotate_user_api_key,users:delete:delete_user_api_keys"
      }
    }
  }
}

Using a local clone (Option B):

{
  "mcpServers": {
    "fivetran": {
      "command": "python",
      "args": ["/path/to/fivetran-mcp/server.py"],
      "env": {
        "FIVETRAN_API_KEY": "your-api-key",
        "FIVETRAN_API_SECRET": "your-api-secret",
        "FIVETRAN_SCOPE": "read",
        "DISALLOWED_ACTIONS": "system-keys:read,users:read:get_user_api_key,users:read:list_api_keys,users:write:create_user_api_key,users:write:rotate_user_api_key,users:delete:delete_user_api_keys"
      }
    }
  }
}
  1. Save the file and restart Claude Desktop

  2. Look for the MCP server indicator in the bottom-right corner of the chat input


Claude Code (CLI)

Use the claude mcp add command to register the server.

Using uvx (Option A):

claude mcp add fivetran \
  --env FIVETRAN_API_KEY=your-api-key \
  --env FIVETRAN_API_SECRET=your-api-secret \
  --env FIVETRAN_SCOPE=read \
  --env DISALLOWED_ACTIONS=system-keys:read,users:read:get_user_api_key,users:read:list_api_keys,users:write:create_user_api_key,users:write:rotate_user_api_key,users:delete:delete_user_api_keys \
  -- uvx --from git+https://github.com/fivetran/fivetran-mcp fivetran-mcp

Using a local clone (Option B):

claude mcp add fivetran \
  --env FIVETRAN_API_KEY=your-api-key \
  --env FIVETRAN_API_SECRET=your-api-secret \
  --env FIVETRAN_SCOPE=read \
  --env DISALLOWED_ACTIONS=system-keys:read,users:read:get_user_api_key,users:read:list_api_keys,users:write:create_user_api_key,users:write:rotate_user_api_key,users:delete:delete_user_api_keys \
  -- python /path/to/fivetran-mcp/server.py

Or add it directly to your ~/.claude.json configuration:

{
  "mcpServers": {
    "fivetran": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/fivetran/fivetran-mcp", "fivetran-mcp"],
      "env": {
        "FIVETRAN_API_KEY": "your-api-key",
        "FIVETRAN_API_SECRET": "your-api-secret",
        "FIVETRAN_SCOPE": "read",
        "DISALLOWED_ACTIONS": "system-keys:read,users:read:get_user_api_key,users:read:list_api_keys,users:write:create_user_api_key,users:write:rotate_user_api_key,users:delete:delete_user_api_keys"
      }
    }
  }
}

Verify the server is configured:

claude mcp list

OpenAI Codex

Codex stores MCP configuration in ~/.codex/config.toml (global) or .codex/config.toml inside a project (project-scoped). You can configure via CLI, edit the global file directly, or — if you cloned this repo — start from the shipped example.

Option 0: Use the shipped example (fastest, for a local clone)

cp .codex/config.example.toml .codex/config.toml
# then open .codex/config.toml and fill in your API key/secret

Codex only loads project-local config for trusted projects. On first use, run codex inside the repo directory and accept the trust prompt (or run codex trust). Without this step, .codex/config.toml is silently ignored.

Option 1: CLI

Using uvx (Option A):

codex mcp add fivetran \
  --env FIVETRAN_API_KEY=your-api-key \
  --env FIVETRAN_API_SECRET=your-api-secret \
  --env FIVETRAN_SCOPE=read \
  --env DISALLOWED_ACTIONS=system-keys:read,users:read:get_user_api_key,users:read:list_api_keys,users:write:create_user_api_key,users:write:rotate_user_api_key,users:delete:delete_user_api_keys \
  -- uvx --from git+https://github.com/fivetran/fivetran-mcp fivetran-mcp

Using a local clone (Option B):

codex mcp add fivetran \
  --env FIVETRAN_API_KEY=your-api-key \
  --env FIVETRAN_API_SECRET=your-api-secret \
  --env FIVETRAN_SCOPE=read \
  --env DISALLOWED_ACTIONS=system-keys:read,users:read:get_user_api_key,users:read:list_api_keys,users:write:create_user_api_key,users:write:rotate_user_api_key,users:delete:delete_user_api_keys \
  -- python /path/to/fivetran-mcp/server.py

Option 2: Edit config.toml

Add the following to ~/.codex/config.toml. Using uvx (Option A):

[mcp_servers.fivetran]
command = "uvx"
args = ["--from", "git+https://github.com/fivetran/fivetran-mcp", "fivetran-mcp"]

[mcp_servers.fivetran.env]
FIVETRAN_API_KEY = "your-api-key"
FIVETRAN_API_SECRET = "your-api-secret"
FIVETRAN_SCOPE = "read"
DISALLOWED_ACTIONS = "system-keys:read,users:read:get_user_api_key,users:read:list_api_keys,users:write:create_user_api_key,users:write:rotate_user_api_key,users:delete:delete_user_api_keys"

Using a local clone (Option B):

[mcp_servers.fivetran]
command = "python"
args = ["/path/to/fivetran-mcp/server.py"]

[mcp_servers.fivetran.env]
FIVETRAN_API_KEY = "your-api-key"
FIVETRAN_API_SECRET = "your-api-secret"
FIVETRAN_SCOPE = "read"
DISALLOWED_ACTIONS = "system-keys:read,users:read:get_user_api_key,users:read:list_api_keys,users:write:create_user_api_key,users:write:rotate_user_api_key,users:delete:delete_user_api_keys"

Verify configuration:

codex mcp list

Cursor

Cursor supports both global and project-level MCP configurations.

Global Configuration: ~/.cursor/mcp.json
Project Configuration: .cursor/mcp.json (in your project root)

Add the following to your chosen configuration file.

Using uvx (Option A):

{
  "mcpServers": {
    "fivetran": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/fivetran/fivetran-mcp", "fivetran-mcp"],
      "env": {
        "FIVETRAN_API_KEY": "your-api-key",
        "FIVETRAN_API_SECRET": "your-api-secret",
        "FIVETRAN_SCOPE": "read",
        "DISALLOWED_ACTIONS": "system-keys:read,users:read:get_user_api_key,users:read:list_api_keys,users:write:create_user_api_key,users:write:rotate_user_api_key,users:delete:delete_user_api_keys"
      }
    }
  }
}

Using a local clone (Option B):

{
  "mcpServers": {
    "fivetran": {
      "command": "python",
      "args": ["/path/to/fivetran-mcp/server.py"],
      "env": {
        "FIVETRAN_API_KEY": "your-api-key",
        "FIVETRAN_API_SECRET": "your-api-secret",
        "FIVETRAN_SCOPE": "read",
        "DISALLOWED_ACTIONS": "system-keys:read,users:read:get_user_api_key,users:read:list_api_keys,users:write:create_user_api_key,users:write:rotate_user_api_key,users:delete:delete_user_api_keys"
      }
    }
  }
}

Alternative: Use Cursor's UI

  1. Open Cursor and press Cmd/Ctrl + Shift + P

  2. Search for "MCP" and select View: Open MCP Settings

  3. Click Tools & Integrations → MCP Tools → Add Custom MCP

  4. Add the configuration above

Restart Cursor to load the new MCP server configuration.


Running over HTTP (advanced)

Most users should stick with stdio (above). If you'd rather point your AI client at a URL than run the server per-client over stdio — for example so several clients on a network can reach one running instance — run it with --transport streamable-http (or MCP_TRANSPORT=streamable-http):

fivetran-mcp --transport streamable-http --host 0.0.0.0 --port 8000

(Works the same way for both install options in step 1 — fivetran-mcp is the console script both uvx and pip install . provide.)

Variable

Required

Default

Description

MCP_TRANSPORT

No

stdio

stdio or streamable-http. Same as --transport.

MCP_HOST / --host

No

127.0.0.1

Bind host, streamable-http only.

MCP_PORT / --port

No

8000

Bind port, streamable-http only.

MCP_ALLOWED_ORIGINS

No

(empty)

Comma-separated list of allowed Origin header values.

MCP_ALLOWED_HOSTS

No

(empty)

Comma-separated list of allowed Host header values.

In streamable-http mode, credentials come from each request's incoming Authorization header rather than FIVETRAN_API_KEY/FIVETRAN_API_SECRET — your AI client sends the same API key/secret pair from step 3 as a Basic auth header instead of the server reading it from the environment. Do not set FIVETRAN_API_KEY/FIVETRAN_API_SECRET for an HTTP deployment; the server refuses to start if it finds them, since a shared key baked into a multi-tenant process would apply one operator's credentials to every caller. If neither MCP_ALLOWED_ORIGINS nor MCP_ALLOWED_HOSTS is set, the server runs without DNS-rebinding protection and logs a startup warning.

FIVETRAN_SCOPE, DISALLOWED_ACTIONS, and FIVETRAN_ALLOW_WRITES from step 3 work identically in streamable-http mode: the same defaults apply (read-only unless you raise FIVETRAN_SCOPE), and the same DISALLOWED_ACTIONS grammar carves exceptions out of whatever scope you choose. Set them the same way you would for stdio. See ARCHITECTURE.md for how the HTTP transport is wired, including OAuth resource-server mode.


Example Questions

  • "What connections are failing?"

  • "When did the Salesforce connection last sync?"

  • "Show me all connections in the Production group"

  • "What destinations do we have configured?"

Available Tools

22 tools
account_readA
Read-only

Read operations on Fivetran account (1 endpoints: get_account_info). Pass the endpoint name in name. Call list_endpoints(category='account') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds that only one endpoint exists, useful scoping context, but says nothing about auth, rate limits, or response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, fully front-loaded: purpose first, discovery mechanism second. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-endpoint read tool with no output schema and annotations covering the safety profile, this is close to complete. The main missing piece is any hint of what get_account_info returns, though readOnlyHint lets the agent infer safe read semantics.

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 baseline is 3. The description reinforces that `name` carries the endpoint identifier and points to list_endpoints as the source, but adds no syntax beyond what the schema already documents.

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 ('Read operations on Fivetran account') and names the exact endpoint covered (get_account_info). Distinguishes itself from siblings like connections_read or users_read by scoping to the account group.

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?

Tells the agent how to discover the full operation list via list_endpoints(category='account') and that the endpoint name goes in `name`. Doesn't explicitly state exclusions or when to prefer a different resource group, but the endpoint enumeration makes usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connections_readA
Read-only

Read operations on Fivetran connections (12 endpoints: connection_column_config, connection_details, connection_moved_job_status, connection_schema_config, connection_state, connection_sync_history, connection_warnings, get_connection_certificate_details, + 4 more). Pass the endpoint name in name. Call list_endpoints(category='connections') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the dispatcher structure (12 endpoints, required name) which is useful context, but nothing about return shape, pagination, or auth. With annotations carrying the behavioral load, a 3 is appropriate.

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?

Two tight sentences, front-loaded with the purpose and endpoint inventory before the mechanics. The list compresses well, though the truncated '+ 4 more' enumeration is slightly awkward for an agent trying to see full coverage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-endpoint dispatcher with no output schema, the description supplies the essential discovery workflow (list_endpoints) and how to invoke sub-endpoints. Return values are necessarily defined by each endpoint rather than this wrapper, so the omission is acceptable, leaving only minor gaps.

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%, so the schema already documents name, body, query, and path_params. The description's guidance to pass the endpoint name largely restates what the schema's `name` field already says ('from list_endpoints'), adding only marginal value. Baseline 3 applies.

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 (read operations) and resource (Fivetran connections) and enumerates the sub-endpoints covered, making the dispatcher nature unmistakable. An agent can immediately tell this group handles connections reads versus the other resource groups in the sibling list.

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?

Explicitly tells the agent to pass the endpoint name in `name` and to call list_endpoints(category='connections') to discover the full set, which is a clear usage workflow. It lacks any when-not-to-use note (e.g., pointing to write endpoints), so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connector_sdk_readA
Read-only

Read operations on Fivetran connector sdk (3 endpoints: download_connector_sdk_package, get_connector_sdk_package, list_connector_sdk_packages). Pass the endpoint name in name. Call list_endpoints(category='connector-sdk') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish the safe read profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the burden is lighter. The description adds real behavioral value by disclosing that this is a multi-endpoint dispatcher and naming the three operations, which tells the agent what capabilities actually live behind this single tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with no filler; the scope and endpoint inventory come first, followed by the usage and discovery hints. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a dispatcher tool with no output schema, it covers endpoints, the required parameter source, and the discovery path. It does not describe what the calls return (e.g., whether download yields a package URL or file), a minor gap given the endpoint names are self-explanatory.

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%, so all four parameters are already documented, including the note that `name` comes from list_endpoints. The description reinforces the `name` semantics and adds the concrete discovery call, but this borders on usage guidance rather than adding new parameter meaning — baseline 3 applies.

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 (read operations on the Fivetran connector SDK) and enumerates the three endpoints it dispatches to, so the agent knows exactly what surface is covered. Combined with the resource-specific name, it is clearly distinguishable from the other '_read' siblings.

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?

Explains the dispatch mechanism ('Pass the endpoint name in `name`') and routes the agent to the discovery alternative ('Call list_endpoints(category='connector-sdk') for the full list'). It lacks an explicit when-not-to-use statement, but the operational context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

destinations_readA
Read-only

Read operations on Fivetran destinations (6 endpoints: destination_details, get_destination_certificate_details, get_destination_certificates_list, get_destination_fingerprint_details, get_destination_fingerprints_list, list_destinations). Pass the endpoint name in name. Call list_endpoints(category='destinations') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the useful dispatch mechanism (endpoint name multiplexing), but says nothing about auth requirements, rate limits, or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero waste. The purpose and endpoint list are front-loaded, followed by the required routing instruction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a dispatcher tool with no output schema, the description adequately explains the name-multiplexing mechanism and how to discover valid values. It stops short of explaining how body/query/path_params vary per endpoint, though the schema documents those fields.

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% and the `name` property description already explains it comes from list_endpoints, so the schema carries the load. The description restates rather than enriches the parameter meaning, so the 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 and resource ('Read operations on Fivetran destinations') and enumerates all six concrete endpoints it dispatches to. The category scoping clearly distinguishes it from sibling *_read tools like connections_read or users_read.

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 explicit routing instructions: pass the endpoint name in `name` and call list_endpoints(category='destinations') to discover valid values. It does not state when NOT to use this tool versus a dedicated endpoint tool, but the category restriction is clear from context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

external_logging_readA
Read-only

Read operations on Fivetran external logging (3 endpoints: get_account_log_service_details, get_log_service_details, list_log_services). Pass the endpoint name in name. Call list_endpoints(category='external-logging') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context: this is a dispatcher spanning exactly three named endpoints and requires discovery through list_endpoints. It does not cover auth or rate-limit behavior, but that is reasonable given the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose and immediately followed by the key invocation instruction and discovery route. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only dispatcher, the description supplies the essential calling information: the covered endpoint names, where to find the full list, and how to pass the endpoint name. It does not describe return shape, but the tool is read-only and has no output schema, so this is a minor gap.

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%, and the schema already documents `name` as coming from list_endpoints. The description repeats that guidance and provides the three endpoint names as examples, but adds no syntax or constraints for `body`, `query`, or `path_params`. Baseline 3 is appropriate when the schema does the heavy lifting.

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?

The description states a specific verb and resource: read operations on Fivetran external logging. It names the three covered endpoints and clearly scopes the tool to that resource group, making it distinguishable from sibling *_read tools.

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?

It tells the agent to pass the endpoint name in `name` and to call list_endpoints(category='external-logging') for the full list. This gives clear usage context, though it does not explicitly state when not to use this tool versus other resource-read siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

external_secrets_managers_entities_readA
Read-only

Read operations on Fivetran external secrets managers entities (1 endpoints: list_esm_entities). Pass the endpoint name in name. Call list_endpoints(category='external-secrets-managers-entities') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the dispatcher pattern (name drives which endpoint runs), which is useful, but says nothing about return shape, pagination, or error behavior.

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?

Two tight sentences with no filler, and the core purpose is front-loaded before the calling convention. Sized well for a thin dispatcher-style tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a generic read dispatcher with full schema coverage and no output schema, the description supplies the essential calling convention. It is nearly complete, missing only any note on the return payload or how to interpret the single endpoint's output.

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%, so the schema documents all four parameters and establishes a baseline of 3. The description reinforces the role of `name` and its source (list_endpoints) but adds little beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) and resource (Fivetran external secrets managers entities) and names the single underlying endpoint (list_esm_entities). It is distinguishable from the sibling external_secrets_managers_read by the 'entities' sub-resource, though the distinction is subtle and not called out explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete operational guidance: pass the endpoint name in `name` and call list_endpoints with category='external-secrets-managers-entities' to discover valid values. However it never states when to prefer this tool over the base external_secrets_managers_read sibling, so the when-not condition is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

external_secrets_managers_readA
Read-only

Read operations on Fivetran external secrets managers (3 endpoints: get_esm_details, get_esm_entities, list_esms). Pass the endpoint name in name. Call list_endpoints(category='external-secrets-managers') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that this is a multi-endpoint dispatcher, which is useful context, but says nothing about return format or per-endpoint behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the resource and endpoint list, followed by the mechanical guidance on how to populate `name`. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a generic dispatcher with no output schema and fully documented parameters, the description supplies exactly what an agent needs: the endpoint names, where to put them, and how to discover the full list. Minor gap in not distinguishing it from the entities_read sibling.

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%, so all four parameters are already documented in the schema. The description only reinforces how `name` selects the endpoint, adding no syntax or format detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) and resource (Fivetran external secrets managers) and enumerates the three concrete endpoints it dispatches to. It is distinguishable from most siblings, though get_esm_entities overlaps slightly with the external_secrets_managers_entities_read sibling.

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 operational guidance: pass the endpoint name in `name` and call list_endpoints(category='external-secrets-managers') to enumerate valid values. It does not state when-not to use it or how it differs from the entities_read sibling, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_schemaA
Read-only

Return the full schema for a Fivetran endpoint — description, parameters, request body schema, response schema. Provide service (e.g. 'postgres') on create_connection / modify_connection / create_destination / modify_destination to splice in the per-service config shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesEndpoint name (e.g. 'create_connection'). Discover via list_endpoints.
serviceNoService identifier (e.g., 'postgres', 'salesforce'). Only meaningful for create/modify connection or destination endpoints.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds a non-obvious behavioral trait beyond that: the returned schema is dynamically reshaped by the `service` parameter for create/modify endpoints. It stops short of noting rate limits or caching, but the dynamic-output disclosure is genuine added value.

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?

Two sentences, front-loaded with purpose followed by the parameter nuance. The second sentence is dense (four endpoint names plus the splice concept) but every clause earns its place. No filler or restated title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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 correctly enumerates the return shape (description, parameters, request body, response schema), and both inputs are fully covered by a 100%-coverage schema. For a simple read-only 2-param metadata tool this is essentially complete; only the sibling routing is arguably missing.

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% and both parameters are documented in-schema with examples. The description mostly restates the `service` semantics already present in the schema ('Only meaningful for create/modify connection or destination endpoints'), so it adds only marginal meaning beyond structured data — the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear specific verb + resource: 'Return the full schema for a Fivetran endpoint,' and it enumerates exactly what is returned (description, parameters, request body schema, response schema). It does not, however, differentiate itself from siblings like list_endpoints or the various *_read tools within the description text itself — that routing hint lives only in the parameter schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit conditional guidance for one input: pass `service` on create_connection/modify_connection/create_destination/modify_destination to splice in per-service config. It gives no guidance on when to call get_schema versus list_endpoints or the *_read siblings, so tool-level usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

groups_readA
Read-only

Read operations on Fivetran groups (6 endpoints: group_details, group_service_account, group_ssh_public_key, list_all_connections_in_group, list_all_groups, list_all_users_in_group). Pass the endpoint name in name. Call list_endpoints(category='groups') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already establish the safe read-only profile (readOnlyHint=true, destructiveHint=false), so the bar is lower. The description adds genuinely useful behavior beyond that: this is a fan-out router with 6 discrete sub-endpoints, and the required `name` value comes from list_endpoints. It stops short of noting per-endpoint input differences (e.g., which need path_params or body).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences with zero waste: purpose and endpoint list first, then the invocation contract, then the discovery pointer. Front-loaded and easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a router-style tool with full schema coverage, annotations, and no output schema, the definition is largely sufficient: it names all endpoints and the discovery path. The only minor gap is not flagging that different sub-endpoints require different path_params or body payloads.

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%, so body/query/path_params semantics are fully documented in the schema, establishing a baseline of 3. The description only reinforces that `name` is an endpoint identifier from an enumerated set and does not add format detail beyond the schema.

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 (read operations on Fivetran groups) and enumerates the exact 6 endpoints it dispatches to, so the agent knows precisely what surface it covers. It is clearly distinguishable from sibling *_read tools covering other resources.

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?

Explains the invocation contract (pass the endpoint name in `name`) and routes the agent to list_endpoints(category='groups') for discovery. It gives clear context for using the tool but does not explicitly state when NOT to use it versus calling list_endpoints or a more specific sibling directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hybrid_deployment_agents_readA
Read-only

Read operations on Fivetran hybrid deployment agents (2 endpoints: get_hybrid_deployment_agent, get_hybrid_deployment_agent_list). Pass the endpoint name in name. Call list_endpoints(category='hybrid-deployment-agents') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that this is a thin dispatcher over exactly two read endpoints, which is useful context, but it says nothing about response shape or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the resource and scope, then the calling convention, then the discovery step. Nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only dispatching wrapper with no output schema, the description covers what the tool is, how to select an endpoint, and where to enumerate options. It does not explain how body/query/path_params interact with the two read endpoints, which is a minor gap given they are largely irrelevant for GETs.

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%, so the schema already documents all four parameters; baseline is 3. The description adds that `name` must be one of the two named endpoints sourced from list_endpoints, which is a small increment over the schema text but not new detail on body/query/path_params.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) and resource (Fivetran hybrid deployment agents) and enumerates the exact two endpoints it dispatches to, so an agent knows what this wraps. It distinguishes itself from generic siblings by naming the resource, though it doesn't explicitly contrast with other *_read tools.

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?

Tells the agent to pass the endpoint name in `name` and to call list_endpoints(category='hybrid-deployment-agents') to discover valid values. That is a clear, actionable usage path with no ambiguity, though there is no when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_endpointsA
Read-only

Discover Fivetran API endpoints. With no arguments, returns {categories: {category: count}, callable_counts: {category: n}, total: N}. Provide category (e.g. 'connections') for endpoints in that category, or search to substring-match across name, summary, and path. Each endpoint row carries callable: bool — false means the endpoint isn't reachable through this MCP; see server instructions. Deprecated endpoints are hidden by default; set include_deprecated=true to show them.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoSubstring to match against endpoint name, summary, or path.
categoryNoResource category (e.g., 'connections', 'destinations', 'groups'). Omit for counts.
include_deprecatedNoInclude deprecated endpoints. Default: false.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, non-destructive), and the description goes further by disclosing that deprecated endpoints are hidden unless include_deprecated=true and by explaining the `callable: bool` field — that false means the endpoint is not reachable through this MCP. That is real behavioral context an agent cannot get from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded — purpose first, then the three argument modes, then the return-shape caveat, then deprecation behavior. Every sentence carries distinct information with no filler.

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?

Despite having no output schema, the description describes the return shapes for the no-argument and filtered cases and explains the callable flag, so an agent knows what it will receive. Nothing needed to call this tool 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 value beyond it: it gives a concrete category example ('connections'), clarifies that omitting the category yields counts, and describes the return payload shape for each mode. It stops short of exhaustive syntax detail, which the schema already supplies.

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 ('Discover Fivetran API endpoints') and unmistakably separates itself from every *_read sibling by being a meta-discovery tool rather than a data reader. The two operating modes are named immediately.

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?

Explicitly routes the agent by argument: no arguments returns counts, `category` narrows to one resource family, `search` substring-matches across name/summary/path. Each mode's trigger condition is spelled out, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

metadata_readA
Read-only

Read operations on Fivetran metadata (2 endpoints: metadata_connector_config, metadata_connectors). Pass the endpoint name in name. Call list_endpoints(category='metadata') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safe-read profile is covered. The description only adds that the tool is scoped to a curated two-endpoint set; it says nothing about pagination, response shape, or auth, so with annotations carrying the safety burden a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, zero filler, with the core purpose and endpoint list front-loaded before the discovery hint. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only wrapper over two endpoints with full schema coverage and no output schema, the description supplies enough to invoke it correctly: valid endpoint names and how to discover more. It could note that `body` is only needed for write-style endpoints, but the schema already covers that.

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. The description adds value beyond the schema by enumerating the two concrete endpoint names accepted by `name` (the schema has no enum), and by pointing to list_endpoints as the source of valid values.

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 (Read) and resource (Fivetran metadata), and names the two endpoints it covers (metadata_connector_config, metadata_connectors). This lets an agent distinguish it immediately from siblings like connections_read or users_read, which target other resource groups.

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?

Tells the caller to pass the endpoint name in `name` and to call list_endpoints(category='metadata') to discover the full set, which is clear procedural guidance. It stops short of explicit when-not-to-use or exclusion conditions, so it is not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

proxy_readA
Read-only

Read operations on Fivetran proxy (3 endpoints: get_proxy_agent, get_proxy_agent_connections, get_proxy_agent_details). Pass the endpoint name in name. Call list_endpoints(category='proxy') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and a closed-world scope, so the safety profile is covered. The description adds the dispatch behavior (3 named endpoints, discovery via list_endpoints), but says nothing about response shape, pagination, or per-endpoint differences beyond the names.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, and the scope plus the three valid endpoint names are front-loaded ahead of the discovery hint. Nothing could be cut without losing routing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a generic dispatch tool whose annotations carry the safety profile and which has no output schema, the description supplies the essential pieces: what it covers, how `name` maps to endpoints, and where to get the authoritative list. Only per-endpoint distinctions or response notes are missing.

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 body/query/path_params/name are all documented in the schema itself. The description only clarifies that `name` must be one of the three proxy endpoints from list_endpoints, which mildly reinforces but does not extend the schema. Baseline 3 applies.

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 (read), the resource (Fivetran proxy), and enumerates the three covered endpoints (get_proxy_agent, get_proxy_agent_connections, get_proxy_agent_details). This is enough for an agent to distinguish it from the many sibling *_read dispatchers, which are scoped to other categories.

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?

Explicitly tells the agent to pass the endpoint name in `name` and to call list_endpoints(category='proxy') for the full list, which is the routing path for this dispatcher. It stops short of saying when NOT to use it (e.g., that other categories belong to sibling tools), leaving that to inference from the sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

public_readA
Read-only

Read operations on Fivetran public (1 endpoints: metadata_public_connectors). Pass the endpoint name in name. Call list_endpoints(category='public') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered by structured data. The description usefully adds the dispatch-by-name pattern and the size of the endpoint group, but says nothing about pagination, auth requirements, or the shape of returned data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the verb/resource and scope, then the required parameter, then the discovery call. Every sentence carries actionable information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterized dispatcher over a single endpoint, the description plus the 100%-covered schema give an agent enough to invoke it correctly; the discovery pointer closes the main gap. It is slightly thin on return shape, but no output schema exists and the description need not carry return semantics.

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%, so all four parameters (name, body, query, path_params) are already documented in the schema, giving a baseline of 3. The description reinforces that `name` must come from list_endpoints, but adds no syntax, format, or constraint detail beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource (read operations on Fivetran public endpoints) and discloses the exact scope of the group (1 endpoint: metadata_public_connectors). It partially distinguishes itself from siblings by pointing at list_endpoints, though the generic 'public' group name is not self-explanatory.

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?

It explains the dispatch mechanism ('Pass the endpoint name in `name`') and routes the agent to list_endpoints(category='public') to discover valid values. That is clear usable context, but there is no guidance on when to prefer this tool over sibling *_read tools or when it would fail.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

roles_readA
Read-only

Read operations on Fivetran roles (1 endpoints: list_all_roles). Pass the endpoint name in name. Call list_endpoints(category='roles') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the scope constraint that only one endpoint exists in this group, but says nothing about pagination, auth, or response shape.

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?

Two short sentences, front-loaded with the resource and endpoint count, then the invocation rule. Minimal waste, though the `name` instruction slightly restates the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only dispatcher with no output schema, the description supplies what an agent needs: the resource scope, the endpoint count, and the discovery mechanism. It could note that responses are read-only endpoint payloads, but nothing essential is missing.

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%, so all four parameters are already documented. The description reinforces that `name` carries the endpoint identifier and points to list_endpoints for valid values, but adds no format or constraint details beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: read operations on Fivetran roles, and names the sole endpoint (list_all_roles). An agent can distinguish it from the other *_read dispatchers by the 'roles' resource, though it does not explicitly contrast itself with a sibling.

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?

Clearly instructs how to select the endpoint ('Pass the endpoint name in `name`') and where to discover the valid values ('Call list_endpoints(category='roles')'). It gives forward routing rather than when-not-to-use exclusions, but the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

system_keys_readA
Read-only

Read operations on Fivetran system keys (2 endpoints: get_system_key_details, get_system_keys). Pass the endpoint name in name. Call list_endpoints(category='system-keys') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuine value beyond that by disclosing this is a dispatcher with exactly two read endpoints and by pointing to the discovery flow (list_endpoints). It does not mention pagination or return shape, but with no output schema and a read-only profile that is a modest gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the scope and endpoint count, followed by the single required action and the discovery hint. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only dispatcher with no output schema, the description supplies the endpoint list, the `name` requirement, and the list_endpoints discovery path. The remaining gap is that it never explains how to supply identifying values (e.g., the path parameter for get_system_key_details), but the schema's path_params field partially covers that.

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%, so all four parameters are already documented in the schema. The description only restates the `name` semantics (endpoint name from list_endpoints) and says nothing about how body/query/path_params should be filled for these GET-style endpoints, so it adds little beyond the schema. Baseline 3 applies.

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 (read operations on Fivetran system keys) and even enumerates the two underlying endpoints (get_system_key_details, get_system_keys). An agent can distinguish this from sibling groups like users_read or webhooks_read purely from the name plus this enumeration, without opening the schema.

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?

It gives a concrete routing instruction: 'Pass the endpoint name in `name`' and 'Call list_endpoints(category='system-keys') for the full list.' That is clear usage context and names a discovery alternative, though it never states when NOT to use this tool (e.g., for write operations, which live elsewhere).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

teams_readA
Read-only

Read operations on Fivetran teams (8 endpoints: get_team_membership_in_connection, get_team_membership_in_group, get_team_memberships_in_connections, get_team_memberships_in_groups, get_user_in_team, list_all_teams, list_users_in_team, team_details). Pass the endpoint name in name. Call list_endpoints(category='teams') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already establish readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds that this is a dispatcher requiring an endpoint name sourced from list_endpoints, but says nothing about auth requirements, pagination, or per-endpoint prerequisites (e.g. path_params for membership lookups).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the scope and endpoint inventory, followed by the two invocation facts an agent needs. Every sentence earns its place with no restatement of the name or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-endpoint dispatcher with no output schema, the description supplies the endpoint inventory and the discovery path, which is the core of what an agent needs. It leaves per-endpoint parameter requirements and response shape unstated, which is a modest but real gap.

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 goes beyond the generic schema text by enumerating the valid values for `name` and pointing at list_endpoints as the authority for that value set. It still does not explain which endpoints require path_params or query, leaving the nested-object parameters to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read operations) and resource (Fivetran teams), and enumerates the eight concrete endpoints reachable through the dispatcher, so the agent knows exactly what is behind the name. It distinguishes itself from siblings only implicitly by resource scope; there is no explicit contrast with users_read or groups_read, which would be needed for a 5.

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 operating instructions: pass the endpoint name in `name` and call list_endpoints(category='teams') for the full list. This is actionable context without exclusions, but it does not say when a caller should prefer a different *_read sibling over this one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transformation_projects_readA
Read-only

Read operations on Fivetran transformation projects (2 endpoints: list_all_transformation_projects, transformation_project_details). Pass the endpoint name in name. Call list_endpoints(category='transformation-projects') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds a real behavioral trait beyond that: this is a dispatch/proxy tool that fans out to exactly 2 endpoints selected via `name`, plus the workflow needed to enumerate them. It stops short of describing return shape or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly packed sentences with no filler; the resource scope and the two endpoints are front-loaded before the dispatch instruction and the discovery hint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multiplexed read proxy with no output schema and 100% schema coverage, the description supplies the essential context: what the tool covers, the number and names of endpoints, and how to discover valid `name` values. It omits any per-endpoint description and any routing hint versus transformations_read, which are the remaining gaps.

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 every parameter is already documented, and the schema's own `name` description already points to list_endpoints. The description only restates that the endpoint name goes in `name`, adding marginal value over the structured fields, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read operations on Fivetran transformation projects') and enumerates the two underlying endpoints (list_all_transformation_projects, transformation_project_details), so the agent knows the scope. It does not, however, differentiate itself from the close sibling transformations_read, which handles a different but similarly named resource.

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 a concrete discovery step: call list_endpoints(category='transformation-projects') to obtain valid `name` values, and states that the endpoint name must be passed in `name`. This is clear usage context, but there are no exclusions or guidance on when to prefer this over transformations_read or the other *_read siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transformations_readA
Read-only

Read operations on Fivetran transformations (4 endpoints: transformation_details, transformation_package_metadata_details, transformation_package_metadata_list, transformations_list). Pass the endpoint name in name. Call list_endpoints(category='transformations') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the useful fact that this is a 4-endpoint dispatcher and how to discover endpoints, but says nothing about pagination, auth, or error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, no filler, with the core purpose front-loaded before the operational instructions. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a dispatcher tool with a fully documented schema and annotations covering safety, the description supplies the essential missing piece: which endpoint names exist and where to get the authoritative list. Pagination and per-endpoint argument requirements are left implicit, which is a minor gap.

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 goes further by defining the valid domain of `name` (the four listed endpoints) and pointing to list_endpoints for discovery. It still leaves body/query/path_params usage entirely to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Read operations on Fivetran transformations') and enumerates the four endpoints it multiplexes, which lets an agent map an intended call to this tool without opening the schema. It does not explicitly contrast with adjacent siblings like transformation_projects_read, so it falls just short of a 5.

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 concrete operational routing: pass the endpoint name in `name`, and call list_endpoints(category='transformations') to enumerate valid endpoints. That is genuine when/how guidance, but it offers no exclusion criteria telling the agent when a sibling read tool is the better choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

users_readA
Read-only

Read operations on Fivetran users (8 endpoints: get_user_api_key, get_user_membership_in_connections, get_user_membership_in_group, get_user_memberships_in_connections, get_user_memberships_in_groups, list_all_users, list_api_keys, user_details). Pass the endpoint name in name. Call list_endpoints(category='users') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds valuable dispatch behavior: it reveals the tool multiplexes 8 named endpoints and that the caller must pass the endpoint name in `name`, which is operational context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact paragraph, front-loaded with purpose, then the endpoint list, then call instructions. No filler; the endpoint list is dense but necessary for dispatch.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and full parameter schema coverage, the description supplies the essential dispatch mechanics and points to list_endpoints for full details. It does not explain per-endpoint body/query/path requirements, but the schema covers those fields adequately.

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. The description adds meaning for the `name` parameter by listing the exact 8 endpoint names, supplementing the schema's generic 'from list_endpoints' text. Other parameters are left to their schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States 'Read operations on Fivetran users' and enumerates the 8 endpoints, so the verb, resource, and scope are clear. It does not explicitly contrast with sibling resource-read tools, but the tool name and endpoint list make its domain unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a discovery hint (call list_endpoints(category='users') for the full list) but does not state when to choose users_read over sibling *_read tools or when not to use it. Usage is implied by the users domain but not explicitly guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

webhooks_readA
Read-only

Read operations on Fivetran webhooks (2 endpoints: list_all_webhooks, webhook_details). Pass the endpoint name in name. Call list_endpoints(category='webhooks') for the full list.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoRequest body — dict or JSON string. Required for POST/PATCH endpoints.
nameYesEndpoint name within this resource:action group (from list_endpoints).
queryNoQuery-string parameters.
path_paramsNoValues for path placeholders like {connectionId}, {groupId}.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds the dispatch mechanism (endpoint name passed via `name`) but says nothing about return shape, pagination, or per-endpoint caveats, so it clears the lowered bar without excelling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the resource and endpoint count front-loaded, followed immediately by the usage rule and discovery pointer. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a dispatcher with full schema coverage and safety annotations, plus a pointer to list_endpoints for discovery, the description is nearly sufficient. The absence of any per-endpoint behavior note (e.g., path placeholder needs for webhook_details) is a minor gap given no output schema exists.

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%, so `body`, `name`, `query`, and `path_params` are already documented in the schema. The description clarifies how `name` is populated (endpoint names from this group) but adds no syntax or format detail beyond that, matching the baseline 3 for schema-driven params.

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?

The description names a specific verb and resource ('Read operations on Fivetran webhooks') and enumerates the two concrete endpoints it fronts (list_all_webhooks, webhook_details). An agent can immediately distinguish it from siblings like users_read, groups_read, or metadata_read.

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?

It tells the agent the calling protocol ('Pass the endpoint name in `name`') and routes to a concrete alternative for discovery ('Call list_endpoints(category=\'webhooks\') for the full list'). It gives clear context for use but does not state any when-not conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 99 tool updatesv0.3.0
    • Addedaccount_read
    • Removedadd_log_service
    • Removedadd_user_to_group
    • Removedcancel_transformation
    • Removedconnect_card
    • Removedconnection_column_config
    • Removedconnection_details
    • Removedconnection_schema_config
    • Removedconnection_state
    • Addedconnections_read
    • Addedconnector_sdk_read
    • Removedcreate_account_webhook
    • Removedcreate_connection
    • Removedcreate_destination
    • Removedcreate_group
    • Removedcreate_group_webhook
    • Removedcreate_hybrid_deployment_agent
    • Removedcreate_transformation
    • Removedcreate_transformation_project
    • Removeddelete_column_connection_config
    • Removeddelete_connection
    • Removeddelete_destination
    • Removeddelete_group
    • Removeddelete_hybrid_deployment_agent
    • Removeddelete_log_service
    • Removeddelete_multiple_columns_connection_config
    • Removeddelete_transformation
    • Removeddelete_transformation_project
    • Removeddelete_user_from_group
    • Removeddelete_webhook
    • Removeddestination_details
    • Addeddestinations_read
    • Addedexternal_logging_read
    • Addedexternal_secrets_managers_entities_read
    • Addedexternal_secrets_managers_read
    • Removedget_account_info
    • Removedget_hybrid_deployment_agent
    • Removedget_hybrid_deployment_agent_list
    • Removedget_log_service_details
    • Addedget_schema
    • Removedgroup_details
    • Removedgroup_service_account
    • Removedgroup_ssh_public_key
    • Addedgroups_read
    • Addedhybrid_deployment_agents_read
    • Removedlist_all_connections_in_group
    • Removedlist_all_groups
    • Removedlist_all_transformation_projects
    • Removedlist_all_users_in_group
    • Removedlist_all_webhooks
    • Removedlist_connections
    • Removedlist_destinations
    • Addedlist_endpoints
    • Removedlist_log_services
    • Removedmetadata_connector_config
    • Removedmetadata_connectors
    • Removedmetadata_public_connectors
    • Addedmetadata_read
    • Removedmodify_connection
    • Removedmodify_connection_column_config
    • Removedmodify_connection_database_schema_config
    • Removedmodify_connection_schema_config
    • Removedmodify_connection_state
    • Removedmodify_connection_table_config
    • Removedmodify_destination
    • Removedmodify_group
    • Removedmodify_transformation_project
    • Removedmodify_webhook
    • Addedprivate_links_read
    • Addedproxy_read
    • Addedpublic_read
    • Removedre_auth_hybrid_deployment_agent
    • Removedreload_connection_schema_config
    • Removedreset_hybrid_deployment_agent_credentials
    • Removedresync_connection
    • Removedresync_tables
    • Addedroles_read
    • Removedrun_destination_setup_tests
    • Removedrun_setup_tests
    • Removedrun_setup_tests_log_service
    • Removedrun_transformation
    • Removedsync_connection
    • Addedsystem_keys_read
    • Addedteams_read
    • Removedtest_transformation_project
    • Removedtest_webhook
    • Removedtransformation_details
    • Removedtransformation_package_metadata_details
    • Removedtransformation_package_metadata_list
    • Removedtransformation_project_details
    • Addedtransformation_projects_read
    • Removedtransformations_list
    • Addedtransformations_read
    • Removedupdate_log_service
    • Removedupdate_transformation
    • Removedupgrade_transformation_package
    • Addedusers_read
    • Removedwebhook_details
    • Addedwebhooks_read
  2. 77 tool updatesv0.1.1
    • First observedadd_log_service
    • First observedadd_user_to_group
    • First observedcancel_transformation
    • First observedconnect_card
    • First observedconnection_column_config
    • First observedconnection_details
    • First observedconnection_schema_config
    • First observedconnection_state
    • First observedcreate_account_webhook
    • First observedcreate_connection
    • First observedcreate_destination
    • First observedcreate_group
    • First observedcreate_group_webhook
    • First observedcreate_hybrid_deployment_agent
    • First observedcreate_transformation
    • First observedcreate_transformation_project
    • First observeddelete_column_connection_config
    • First observeddelete_connection
    • First observeddelete_destination
    • First observeddelete_group
    • First observeddelete_hybrid_deployment_agent
    • First observeddelete_log_service
    • First observeddelete_multiple_columns_connection_config
    • First observeddelete_transformation
    • First observeddelete_transformation_project
    • First observeddelete_user_from_group
    • First observeddelete_webhook
    • First observeddestination_details
    • First observedget_account_info
    • First observedget_hybrid_deployment_agent
    • First observedget_hybrid_deployment_agent_list
    • First observedget_log_service_details
    • First observedgroup_details
    • First observedgroup_service_account
    • First observedgroup_ssh_public_key
    • First observedlist_all_connections_in_group
    • First observedlist_all_groups
    • First observedlist_all_transformation_projects
    • First observedlist_all_users_in_group
    • First observedlist_all_webhooks
    • First observedlist_connections
    • First observedlist_destinations
    • First observedlist_log_services
    • First observedmetadata_connector_config
    • First observedmetadata_connectors
    • First observedmetadata_public_connectors
    • First observedmodify_connection
    • First observedmodify_connection_column_config
    • First observedmodify_connection_database_schema_config
    • First observedmodify_connection_schema_config
    • First observedmodify_connection_state
    • First observedmodify_connection_table_config
    • First observedmodify_destination
    • First observedmodify_group
    • First observedmodify_transformation_project
    • First observedmodify_webhook
    • First observedre_auth_hybrid_deployment_agent
    • First observedreload_connection_schema_config
    • First observedreset_hybrid_deployment_agent_credentials
    • First observedresync_connection
    • First observedresync_tables
    • First observedrun_destination_setup_tests
    • First observedrun_setup_tests
    • First observedrun_setup_tests_log_service
    • First observedrun_transformation
    • First observedsync_connection
    • First observedtest_transformation_project
    • First observedtest_webhook
    • First observedtransformation_details
    • First observedtransformation_package_metadata_details
    • First observedtransformation_package_metadata_list
    • First observedtransformation_project_details
    • First observedtransformations_list
    • First observedupdate_log_service
    • First observedupdate_transformation
    • First observedupgrade_transformation_package
    • First observedwebhook_details

TDQS

A3.6/5.0

Scored across 22 tools

Disambiguation4/5

Tools are mostly distinct by Fivetran resource category (account, connections, destinations, users, etc.), and meta-tools like list_endpoints and get_schema serve unique discovery/schema roles. Minor overlap exists between metadata_read and public_read, and all category tools share a near-identical 'pass endpoint name' template, but boundaries remain clear.

Naming Consistency4/5

All names use snake_case; category tools consistently follow [resource]_read, and meta-tools use list_endpoints/get_schema. A fully uniform verb_noun pattern is not achieved because read tools are noun_read, but the convention is predictable and readable.

Tool Count3/5

22 tools is above the typical 3-15 range and feels heavy, with many single-endpoint category wrappers (e.g., roles_read, public_read, account_read) that could have been consolidated. Each tool still maps to a meaningful API category, so it is borderline rather than excessive.

Completeness2/5

The surface is entirely read-only, with no create/update/delete/merge operations for any Fivetran resource, so common lifecycle tasks (creating a connector, updating a destination, deleting a user) are impossible. Read coverage is broad across categories, but the absence of write operations is a significant gap for a Fivetran management server.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to query and manage Datadog observability data including metrics, logs, traces, and monitors through natural language. Supports read-only operations by default for security.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage Fivetran users and connections, including inviting users, listing connections, and triggering syncs.
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables interaction with an Airbyte instance through natural language, supporting workspaces, sources, destinations, connections, jobs, logs, tags, streams, and connector definitions.
    36
    5
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    Enables natural language interactions with Salesforce data, metadata, and reports, including report creation, discovery, and schema inspection.
    21
    9 npm
    1
    MIT