docs(AI-3692): Data Catalog RFC — bucket sharing tools - #660
Conversation
Producer-side design (share_bucket_to_organization, share_bucket_to_project, unshare_bucket) for the agent workflow: build a pipeline -> share the result -> another project discovers and links it (PR #646) -> reuse. All three new tools always branch-scoped and async, polling their Storage job to completion inside the tool call. Includes a drafted system-prompt extension and flags share-organization-project's undocumented request body as an open verification risk before implementation. Docs only per CONTRIBUTING.md's RFC-before-implementation rule -- no tool/client code in this commit. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
@claude review |
There was a problem hiding this comment.
Pull request overview
This PR adds an RFC (plus its supporting brainstorm artifact) for the producer-side of the Data Catalog sharing workflow in Keboola MCP Server. It specifies three new Storage write tools for sharing/unsharing existing Storage buckets across an organization/projects, designed to be branch-scoped and always-async, with the tools polling Storage jobs to completion within a single tool call.
Changes:
- Add
feature_spec/data_catalog/RFC.mddefining proposed tools (share_bucket_to_organization,share_bucket_to_project,unshare_bucket) and the planned client/job-polling design. - Add
feature_spec/data_catalog/brainstorm.mdcapturing discovery notes, constraints, alternatives, and open questions that feed into the RFC.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| feature_spec/data_catalog/RFC.md | RFC specifying the intended tool surface, API endpoints, polling strategy, scope boundaries, and open questions for bucket sharing/unsharing. |
| feature_spec/data_catalog/brainstorm.md | Pre-RFC discovery document documenting motivation, constraints, alternatives, and implementation impact analysis for the sharing tools. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
keboola-pr-reviewer-bot
left a comment
There was a problem hiding this comment.
Verdict: auto_approve (risk 1/5) · profile keboola-mcp-server
Docs-only RFC under feature_spec/**, auto-approvable per policy.
|
@cjayyy nice catch, I see 2 options
|
|
I vote to mirror the UI. Also the sharing is deterministic - you know what semantic layer parts you need to share when sharing a bucket. If you share only the relevant parts (touching the shared resources) it's imho fine. If you can't share only the related resources but share something more, we are open to the "unsharing" problem. When you unshare you should be aware that you may remove parts of the semantic layer others are building on. For buckets/tables we're aware and it fails predictably. Not sure about semantic layer, if it's somehow resilient against such situations. |
Adds a "Semantic layer interaction" section describing how the UI (ui#7885) composes bucket sharing + semantic-object scoping into one model-level share/unshare, with buckets-first/scope-first ordering and reported (not thrown) partial failure. Adopts that shape per @tomasfejfar's review comment rather than Matovidlo's atomic-coupling alternative, flags the missing Metastore scoping primitive as a blocking gap for a follow-up share_semantic_model RFC, and adds a system-prompt caveat so the three bucket-only tools don't silently drop semantic definitions in the meantime.
Dismissing prior approval — a new commit was pushed and this review was for an earlier SHA. Run @keboola-pr-reviewer-bot review to get a fresh verdict.
|
New commit on |
|
@cjayyy addressed — added a "Semantic layer interaction (AI-3737)" section that mirrors the UI's resolved design (ui#7885): sharing composes Storage buckets + Metastore semantic-object scope, buckets-first on share / scope-first on unshare, reported (not thrown) partial failure via a Blocking gap called out explicitly: MCP has no Metastore scoping primitive today, so Requesting re-review — thanks for catching this before it merged. |
|
@Matovidlo @tomasfejfar — flagging a cross-repo conflict before this RFC section sets, because the design it now mirrors was reversed about 20 minutes before it was written, in a Linear thread neither of you would have seen. Timeline (UTC, 13 Aug):
So the "UI's resolved design" phrasing is unfortunately my fault — I described #7885 that way in AI-3737 while the direction question was still open. It was a prototype following a brief in David's ui#7739, which opens "Not for merge. This is a working prototype to make a design decision discussable." I read it as a spec; it wasn't one. What this means for the RFC as written. The part you deferred is fine and unaffected — Notably, @tomasfejfar's own argument points the same way as the decision: "the sharing is deterministic — you know what semantic layer parts you need to share when sharing a bucket." That is bucket-driven with model awareness, which is exactly what David proposes. The disagreement is narrower than it looks — it is about whether a model-level share primitive should exist, not about whether definitions should follow their data. Also worth knowing, since it bears on the deferral: Two open questions David flagged that the RFC will need answers to regardless of framing: how the model↔bucket link is represented (he is explicit that nothing should be built before that is decided), and sensitive models that must not become discoverable just because their buckets are. Not asking for a change right now — a live sync on this was set for today and I have not found a written outcome. Just don't want ui#7885 cited as settled when it is being redirected. 🤖 Flagged by Claude Code |
Description
Linear: AI-3692
Change Type
Summary
RFC-only PR — no tool/client code. Adds
feature_spec/data_catalog/RFC.mdandbrainstorm.mddesigning the producer side of the Data Catalog workflow: three new tools,share_bucket_to_organization,share_bucket_to_project, andunshare_bucket, wrapping theStorage API's
share-organization/share-organization-project/DELETE .../shareendpoints. All three are always branch-scoped and async (the endpoints have no sync option),
and poll their Storage job to completion inside the tool call rather than exposing a separate
job-status tool.
This builds on top of PR #646 (
get_shared_buckets+link_shared_bucket, the consumerside — discovery + linking), which is not yet merged (currently
CONFLICTINGagainst main;rebasing/merging it is a separate, already-identified follow-up, not part of this PR). Together
they complete the loop: build a pipeline → share it (this RFC) → discover + link it
elsewhere (#646) → reuse it.
One open risk flagged explicitly in the RFC:
share_bucket_to_project's target-project requestbody is undocumented in the Storage OpenAPI spec and needs live verification (same diligence
#646 applied to
link_shared_bucket) before the follow-up implementation PR.Per
CONTRIBUTING.md's RFC Requirement table, new MCP tools require an agreed RFC beforeimplementation — this PR is that RFC. The actual
share_bucket_to_organization/share_bucket_to_project/unshare_buckettool code, the newAsyncStorageClientmethods,the Storage-job poll helper, and the system-prompt edit all land in a separate implementation PR
once this RFC is agreed.
Testing
Streamable-HTTPtransports)Optional testing
canary-orionMCP (Streamable-HTTP)canary-orioncanary-orionChecklist