Estuary Flow MCP by usefulapi

Inspect Estuary Flow captures, materializations, collections and stats.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
94%
Naming quality
79%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'estuary_list_connector_versions' name length outside 3-30 rangein estuary_list_connector_versions

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,471Tokens (tool definitions)
~1.0 KBTypical response size
Moderate attention impact (1.93% of 128k context)

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-http

What it can do

Tool inventory

Tools (15)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded15 tools
verifiedversion not recorded15 tools