AI-assisted tools for building, testing, and deploying Fivetran Connector SDK connectors. Distributed as a native plugin/extension for Claude Code, Codex CLI, and Gemini CLI.
- Python 3.10–3.14
- A supported coding agent (Claude Code, Codex CLI, or Gemini CLI — see install matrix below)
- Fivetran Connector SDK —
pip install fivetran-connector-sdk
The fastest path: install the SDK and let fivetran init set everything up.
pip install fivetran-connector-sdk
fivetran initfivetran init scaffolds a new connector project and offers to configure a coding agent for you — detecting which of Claude Code, Codex CLI, or Gemini CLI you have installed and running the relevant plugin install command on your behalf. You can also skip the agent setup if you'd rather install it yourself; see the matrix below.
If you skipped agent setup in fivetran init, or want to install the plugin into an existing project, pick your agent below. Each install uses the agent's own native install/update/uninstall — this repo does not own the lifecycle.
claude plugin marketplace add fivetran/fivetran_csdk_tools
claude plugin install fivetran-connector-sdk@fivetran-connector-sdk-aiOr from inside a Claude Code session:
/plugin marketplace add fivetran/fivetran_csdk_tools
/plugin install fivetran-connector-sdk@fivetran-connector-sdk-ai
See claude-code/README.md for the full tutorial.
codex plugin marketplace add fivetran/fivetran_csdk_tools
codex plugin install fivetran-connector-sdk@fivetran-connector-sdk-aiPlugins must also be enabled in ~/.codex/config.toml. See codex/README.md for the full setup.
gemini extensions install https://github.com/fivetran/fivetran_csdk_toolsFor non-interactive use (e.g., scripts):
gemini extensions install https://github.com/fivetran/fivetran_csdk_tools --consent --skip-settingsOnce installed, in your connector project directory:
| Command (Claude Code / Gemini CLI) | Codex CLI | Purpose |
|---|---|---|
/fivetran-connector-sdk:build-connector |
$build_connector |
Research an API and generate a new connector |
/fivetran-connector-sdk:test-connector |
$test_connector |
Run and validate an existing connector locally |
/fivetran-connector-sdk:deploy-connector |
$deploy_connector |
Deploy a connector to your Fivetran account |
For code fixes or modifications, describe the problem in natural language — the agent routes to the connector-fixer subagent automatically.
Until secure configuration entry is available directly in the Fivetran Connector SDK CLI, the plugin uses tools/enter_configuration.py to encrypt configuration.json. Before running that script, install the plugin tool dependencies in the same terminal:
python -m pip install -r "/path/to/plugin/tools/requirements.txt"For Claude Code installed from the marketplace, the path will look like:
macOS/Linux:
python -m pip install -r "$HOME/.claude/plugins/cache/fivetran-connector-sdk-ai/fivetran-connector-sdk/<version>/tools/requirements.txt"Windows PowerShell:
python -m pip install -r "$env:USERPROFILE\.claude\plugins\cache\fivetran-connector-sdk-ai\fivetran-connector-sdk\<version>\tools\requirements.txt"On first run, enter_configuration.py creates a local encryption secret under your user profile:
- macOS/Linux:
~/.fivetran/csdk_master_secret - Windows:
%USERPROFILE%\.fivetran\csdk_master_secret
It uses that secret to add encrypted credential values to the top-level encrypted field in configuration.json; the AI does not see the secret or plaintext credentials. The original placeholder fields remain in the file as the recoverable baseline. To start credential entry over, delete the encrypted field and run enter_configuration.py again.
Only enter_configuration.py creates the secret. The test and deploy tools require the existing secret so they can decrypt an already-encrypted configuration.json.
canonical/ edit these (source of truth)
sdk-reference.md
native-connectors.md
workflows/{validator,generator,fixer}.md
skills/{build,test,deploy}-connector/SKILL.md
tools/{enter_configuration,run_connector,deploy_connector}.py
claude-code/ Claude Code plugin (mostly generated)
.claude-plugin/plugin.json
CLAUDE.md
agents/connector-{validator,generator,fixer}.md
skills/{build,test,deploy}-connector/SKILL.md
hooks/hooks.json
tools/, sdk-reference.md, native-connectors.md
codex/ Codex CLI plugin (mostly generated)
.codex-plugin/plugin.json
AGENTS.md
skills/{build,test,deploy}-connector/SKILL.md
workflows/{validator,generator,fixer}.md
tools/, sdk-reference.md, native-connectors.md
gemini-extension.json Gemini CLI extension manifest (root-only requirement)
GEMINI.md Gemini context file
commands/{build,test,deploy}-connector.toml Gemini slash commands
agents/connector-{validator,generator,fixer}.md Gemini agents (generated)
skills/{build,test,deploy}-connector/SKILL.md Gemini skills (generated)
tools/ Gemini tools (generated copy of canonical/tools/)
.claude-plugin/marketplace.json Claude Code marketplace pointing to ./claude-code
.agents/plugins/marketplace.json Codex marketplace pointing to ./codex
Only edit files under canonical/ and the static Gemini files at the root (gemini-extension.json, GEMINI.md, commands/*.toml). Everything else is regenerated.
| Editing... | Run after | Affects |
|---|---|---|
canonical/sdk-reference.md |
bash scripts/sync-plugins.sh |
all three agents |
canonical/native-connectors.md |
bash scripts/sync-plugins.sh |
all three agents |
canonical/workflows/*.md |
bash scripts/sync-plugins.sh |
Claude agents, Codex workflows, Gemini agents |
canonical/skills/*/SKILL.md |
bash scripts/sync-plugins.sh |
all three agents |
canonical/tools/* |
bash scripts/sync-plugins.sh |
all three agents |
GEMINI.md, gemini-extension.json, commands/*.toml |
(no sync needed) | Gemini only |
claude-code/CLAUDE.md, claude-code/hooks/hooks.json |
(no sync needed) | Claude Code only |
codex/AGENTS.md, codex/.codex-plugin/plugin.json |
(no sync needed) | Codex only |
Generated files have a <!-- GENERATED FILE — DO NOT EDIT --> banner at the top. Edits to them will be overwritten on the next sync.
After editing a canonical file:
bash scripts/sync-plugins.sh
git add -A
git commitThe sync script fans canonical content out into each per-agent tree, prepending the agent's required frontmatter where applicable (e.g., Claude subagent frontmatter, Gemini agent frontmatter).
A hook in .githooks/pre-commit runs sync-plugins.sh and fails the commit if any generated file would change — i.e., if you edited a canonical file but forgot to re-sync.
Install once per clone:
git config core.hooksPath .githooksMIT