Datahub developer reference

MCP Server 1.0

REST / OpenAPI

A product-neutral Streamable HTTP channel for the governed Datahub consumer API. REST/OpenAPI remains the authoritative contract.

https://datahub.lachner.app/mcp/datahub

Interactive OAuth 2.1

ChatGPT, Startwerk and other interactive clients use Authorization Code with PKCE and request the mcp:use scope. A verified Datahub user must have an active Consumer membership before consent.

Application token

Existing edb_… Service Account tokens are accepted as an HTTP Authorization: Bearer token on the same endpoint.

Connect a client

  1. Create or select a Datahub Consumer and grant an active Data Product.
  2. Assign the Datahub user to that Consumer with the required MCP capabilities.
  3. In ChatGPT developer mode, create an app with the server URL above and OAuth. Copy the exact callback URL shown by ChatGPT; never replace its callback ID with a generic URL.
  4. Complete login, consent and the tool scan. Access tokens last 60 minutes and refresh tokens 30 days.

Production redirect origins are restricted to ChatGPT and Startwerk. Dynamic registration is limited to 10 attempts per hour and IP. Localhost is accepted only outside production.

ChatGPT availability and workspace controls can change while full MCP support is in beta. Follow the official OpenAI setup guide for the current developer-mode workflow.

Tools

Tools without an effective capability are omitted from discovery. Every call still rechecks the concrete Data Product, membership and Privacy grant. Every tool publishes an operation-specific output schema for its structured result.

ToolCapabilityBehavior
list_data_productsauthenticatedList Data Products and capabilities effectively available to the current principal.
find_entitiesentities.readFind product-scoped entities by a governed identifier.
get_entityentities.readGet a privacy-filtered canonical entity snapshot.
list_entity_relationshipsrelationships.readList product-scoped relationships for an entity.
list_entity_documentsdocuments.readList product-scoped document metadata for an entity.
get_document_downloaddocuments.content.readGet document availability or a five-minute one-time protected download URL.
request_document_contentdocuments.content.readRequest retrieval of remote-only document content.
get_document_content_requestdocuments.content.readGet the status of a document content request.
request_entity_materializationentities.materializeRequest priority materialization for an incomplete organization.
get_entity_materializationentities.materializeGet the status of an entity materialization request.
list_entity_changeschanges.entities.readRead product-scoped entity changes after a cursor.
list_entity_subscriptionsentity-subscriptions.manageList entity watches owned by the current consumer.
watch_entityentity-subscriptions.manageCreate or update an idempotent entity watch.
unwatch_entityentity-subscriptions.manageDisable an entity watch.
list_watched_entity_changeschanges.entities.readRead changes matching active entity watches.
get_analytics_cataloganalytics.readList active analytics metrics and their supported operations.
create_analytics_analysisanalytics.readCreate an idempotent governed analytics analysis.
get_analytics_analysisanalytics.readGet an analytics analysis and its immutable result snapshot.
list_analytics_analysis_entitiesanalytics.entities.readList organization entities represented by an analysis.
list_analytics_anomaliesanalytics.readList detected analytics anomalies.
get_analytics_anomalyanalytics.readGet a detected analytics anomaly.

Pagination and idempotency

Collections use external page metadata or opaque change cursors. Mutating tools require a caller-generated UUID idempotency_key; replaying it returns the same request or end state.

Documents and async work

Binary content never enters model context. Available files receive a single-use five-minute HTTPS ticket. Remote documents and analyses return public request UIDs plus poll_after_seconds.

Stable errors

unauthenticatedforbiddenvalidation_errornot_foundconflictrate_limitedtemporarily_unavailable

No tool returns raw payloads, object-storage paths, person matching evidence, Ops data or governance controls.