Estuary Flow MCP by usefulapi
Inspect Estuary Flow captures, materializations, collections and stats.
Should I use this
Quality & Safety
Findings (1)
- LOWin estuary_list_connector_versions
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"estuary-flow": {
"url": "https://estuary-flow.usefulapi.io/mcp"
}
}
}Remote endpoints
https://estuary-flow.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (15)
🟢estuary_list_catalog(name_prefix, spec_type, limit, offset)
List live catalog entities (captures, collections, materializations, tests) the user can read, with connector + last-publication metadata. Optionally filter by a catalog-name prefix and spec_type. Estuary control-plane view live_specs_ext. PostgREST: GET /live_specs_ext.
Input Schema
{
"type": "object",
"properties": {
"name_prefix": {
"description": "Filter to catalog names starting with this prefix (PostgREST like.<prefix>* wildcard).",
"type": "string"
},
"spec_type": {
"description": "Filter by entity type.",
"type": "string",
"enum": [
"capture",
"collection",
"materialization",
"test"
]
},
"limit": {
"description": "Max rows to return (PostgREST limit).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"offset": {
"description": "Row offset for paging (PostgREST offset).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢estuary_get_catalog_spec(catalog_name)
Get one live catalog entity by its exact catalog_name, including the full serialized `spec` and compiled `built_spec`. Estuary control-plane view live_specs_ext. PostgREST: GET /live_specs_ext?catalog_name=eq.<name>&limit=1.
Input Schema
{
"type": "object",
"properties": {
"catalog_name": {
"type": "string",
"description": "The exact catalog name (e.g. acmeCo/inventory/products)."
}
},
"required": [
"catalog_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢estuary_get_catalog_stats(catalog_name, grain, ts_start, ts_end, limit)
Get usage/throughput stats for one catalog entity — bytes & docs read/written (both directions), usage_seconds, warnings/errors/failures, and txn_count — per time grain. Optionally bound by a timestamp range. Estuary control-plane view catalog_stats. PostgREST: GET /catalog_stats.
Input Schema
{
"type": "object",
"properties": {
"catalog_name": {
"type": "string",
"description": "The exact catalog name to report stats for."
},
"grain": {
"description": "Time grain of each stats row (default daily).",
"type": "string",
"enum": [
"monthly",
"daily",
"hourly"
]
},
"ts_start": {
"description": "Filter: stats at/after this ISO 8601 timestamp (ts gte).",
"type": "string"
},
"ts_end": {
"description": "Filter: stats at/before this ISO 8601 timestamp (ts lte).",
"type": "string"
},
"limit": {
"description": "Max rows to return (PostgREST limit).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"catalog_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢estuary_list_connectors(recommended, limit)
List the connector catalog — available capture/materialization Docker connectors, with titles, descriptions, and logos. Optionally filter to recommended connectors. Estuary control-plane table connectors. PostgREST: GET /connectors.
Input Schema
{
"type": "object",
"properties": {
"recommended": {
"description": "Filter to recommended (true) / non-recommended (false) connectors.",
"type": "boolean"
},
"limit": {
"description": "Max rows to return (PostgREST limit).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢estuary_list_connector_versions(connector_id, limit)
List available versions (image tags) of connectors, with protocol and documentation URL. Optionally filter by connector_id. Estuary control-plane table connector_tags. PostgREST: GET /connector_tags.
Input Schema
{
"type": "object",
"properties": {
"connector_id": {
"description": "Filter by connector id (from estuary_list_connectors).",
"type": "string"
},
"limit": {
"description": "Max rows to return (PostgREST limit).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢estuary_list_drafts(limit)
List the user's draft workspaces (staging areas for catalog edits before publishing). Estuary control-plane table drafts. PostgREST: GET /drafts.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Max rows to return (PostgREST limit).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢estuary_list_draft_specs(draft_id, limit)
List the staged spec entries within a draft (each an insert/replace of a catalog entity pending publication). Estuary control-plane table draft_specs. PostgREST: GET /draft_specs.
Input Schema
{
"type": "object",
"properties": {
"draft_id": {
"type": "string",
"description": "The draft id to list staged specs for."
},
"limit": {
"description": "Max rows to return (PostgREST limit).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"draft_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢estuary_list_publications(limit)
List publication history/status — each publish attempt of a draft; job_status carries the queued/success/failed outcome. Estuary control-plane table publications. PostgREST: GET /publications.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Max rows to return (PostgREST limit).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢estuary_list_discovers(limit)
List connector discovery jobs (auto-detecting bindings/resources for a capture). Estuary control-plane table discovers. PostgREST: GET /discovers.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Max rows to return (PostgREST limit).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢estuary_list_roles(min_capability)
List the roles/capabilities the current credential is granted — which catalog prefixes it can read/write/admin. Read-only RPC. Estuary control-plane: POST /rpc/auth_roles.
Input Schema
{
"type": "object",
"properties": {
"min_capability": {
"description": "Only return grants at/above this capability (default x_00 = all).",
"type": "string",
"enum": [
"x_00",
"read",
"write",
"admin"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢estuary_get_tenant(limit)
Get the user's tenant(s) — quotas (tasks/collections), billing tiers, recurring charge, trial start, and payment provider. Estuary control-plane table tenants. PostgREST: GET /tenants.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Max rows to return (PostgREST limit).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢estuary_view_task_logs(bearer_token, last_logged_at)
Fetch the log lines for a job by its logs_token (a UUID found on a publication, discover, or connector-tag record). Optionally page from a last-seen timestamp. Read-only RPC. Estuary control-plane: POST /rpc/view_logs.
Input Schema
{
"type": "object",
"properties": {
"bearer_token": {
"type": "string",
"description": "The logs_token (UUID) from a publications/discovers/connector_tags row."
},
"last_logged_at": {
"description": "ISO 8601 timestamp — return log lines after this point (2-arg view_logs overload).",
"type": "string"
}
},
"required": [
"bearer_token"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴estuary_create_draft(detail)
WRITE: create a new empty draft workspace (a staging area for catalog changes; does not affect live pipelines). Estuary control-plane: POST /drafts. Returns the created row.
Input Schema
{
"type": "object",
"properties": {
"detail": {
"description": "Optional human-readable note describing the draft's purpose.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴estuary_upsert_draft_spec(draft_id, catalog_name, spec_type, spec)
WRITE: stage (insert or replace) a catalog spec inside a draft. Edits only the draft — live pipelines are unaffected until the draft is published. Estuary control-plane: POST /draft_specs (upsert on draft_id,catalog_name). Returns the staged row.
Input Schema
{
"type": "object",
"properties": {
"draft_id": {
"type": "string",
"description": "The draft id to stage the spec into."
},
"catalog_name": {
"type": "string",
"description": "The catalog name of the entity being staged (e.g. acmeCo/inventory/products)."
},
"spec_type": {
"type": "string",
"enum": [
"capture",
"collection",
"materialization",
"test"
],
"description": "The entity type of the staged spec."
},
"spec": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "The catalog spec JSON object (passed through verbatim)."
}
},
"required": [
"draft_id",
"catalog_name",
"spec_type",
"spec"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴estuary_publish_draft(draft_id, dry_run, detail)
WRITE (DESTRUCTIVE when dry_run=false): publish a draft. dry_run=true (default) only VALIDATES the draft without changing anything. dry_run=false APPLIES the draft to the LIVE catalog — this can create, modify, or DELETE running data pipelines and their data. Set dry_run=false only when you intend to change live infrastructure. Estuary control-plane: POST /publications. Returns the publication row.
Input Schema
{
"type": "object",
"properties": {
"draft_id": {
"type": "string",
"description": "The draft id to publish."
},
"dry_run": {
"description": "If true (DEFAULT), only validate without applying. Set false to APPLY to the live catalog.",
"type": "boolean"
},
"detail": {
"description": "Optional human-readable note for this publication.",
"type": "string"
}
},
"required": [
"draft_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence