Skip to content

mcp: register the dataset tools on McpDataBridge under data:read (ADR-0149 D2) #31590

Closed

Description

@objectstack-fleet

domain:spec#4 · marchtian · session_017ihL2eAG5J8aqAyPZif4BJ

Filing gate: ② a child card of an Accepted ADR. ADR-0149 D7 card 3. Parent: #31503, landed by PR #31535.
Reader: the domain:server lane (MCP bridge / runtime). It may run beside the service-analytics card once the bridge members are typed.
Dedupe (open AND closed): "McpDataBridge listDatasets registerDatasetTools" found nothing.

维护者速读

  • 问题: 让 MCP 客户端也能用同一对数据集工具:注册到 MCP,权限范围 data:read。
  • 影响面: MCP 新增两个工具,与产品内问数共用同一定义,口径一致。
  • 需要您做的: 无,由 server 车道实现。

Task

  • D2: optional members McpDataBridge.listDatasets / .queryDataset, implemented in both bridge implementations.
  • registerDatasetTools in wireBridgeTools, under data:read.
  • The skill prompt text that teaches the D3 selection rule to MCP clients.

Activity

  1. added
    enhancementNew feature or request
    area:aiAI-native — agent / tool / skill metadata, and the MCP surface an agent drives
    domain:serverDomain lane — seat card indexed by label:pm:seat
    on Nov 8, 2026
  2. objectstack-fleet commented on Nov 8, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: domain:server · p2 · pm:blocked on #31587 · 2026-11-08T16:28Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. added
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Nov 8, 2026
  4. objectstack-fleet commented on Nov 9, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: unblocked · pm:blocked → pm:queue · 2026-11-09T02:11Z

    ⛔ Not a claim.


    Generated by Claude Code

  5. added
    pm:queueReady for the PM dispatch loop
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    pm:queueReady for the PM dispatch loop
    on Nov 9, 2026
  6. objectstack-fleet commented on Nov 9, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-steve · session_01ADHkmQKZzp4DLtqiCkZZRM

    Claim: PM loop round 8 · 2026-11-09T02:31Z
    Session: session_01ADHkmQuUSo11ZX1avrvbez (card thread, dev) · seat session_01ADHkmQKZzp4DLtqiCkZZRM
    Account: os-steve
    Branch: claude/project-thread-fkif3v
    Worktree: objectstack-issue-31590
    Domain: domain:server
    Seat: domain:server#2
    File surface: packages/mcp/src/** (bridge interface, wireBridgeTools, skill-md.ts), the bridge implementations (packages/runtime/src/domains/mcp.ts among them), tests, root .changeset/. ⛔ No packages/spec/**, packages/services/service-analytics/**, ui/**
    Container & model: M, mode:thread, model: default tier, effort: medium
    Clause-②: yes (widening)
    Metadata-protocol: none
    Responsibility: ADR-0149 D7 child of #31503 (parent landed by PR #31535)
    Thread-read: none
    Premise: holds as filed, read at claim on origin/main 0105a687: McpDataBridge (packages/mcp/src/mcp-http-tools.ts) has no dataset members and wireBridgeTools registers no dataset tool
    Serial constraints cleared: takes its tool definitions from #31589 (same seat): reads that branch until it merges, then merges main and lands after it; stays off E8 #31680's by-name readers in packages/mcp (same seat, parked)

    Scope: Fixes #31590. Optional bridge members listDatasets / queryDataset in both implementations, registerDatasetTools under data:read, the D3 selection rule in the MCP skill prompt; one definition, shared with #31589. Order: /mnt/project-files/server-seat2/standard-order.md + /mnt/project-files/server-seat2/31590-delta.md. Summons: the maintainer's 「server 任务很多,你应该跟进并发5」 (project chat, 2026-11-09T02:28Z).

  7. objectstack-fleet commented on Nov 9, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-steve · session_01ADHkmQuUSo11ZX1avrvbez
    os-dev-report

    {
      "issue": 31590,
      "status": "done",
      "branch": "claude/project-thread-fkif3v",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/31773",
      "session": "session_01ADHkmQuUSo11ZX1avrvbez",
      "premise_still_valid": true,
      "summary": "McpDataBridge gains three optional members (listDatasets, queryDataset(input,{maxRows}), datasetToolDefinitions); registerDatasetTools in wireBridgeTools registers list_datasets/query_dataset only when all three are present and the grant admits data:read, with descriptions from the service-analytics definitions and the spec input schemas taken whole. Both bridges carry the members over AnalyticsService.datasetTools (seat ruling C): HTTP resolves the analytics service per request and binds merged dataset read + translateMetaList + the request's narrowing probe + the page cap; stdio resolves it in start(). SKILL.md renders both tools and the D3 selection rule where they register. Lands after #31589.",
      "tests": "head 5078be21: mcp 62/62 files, 979/979; runtime 564/564 files, 9065 passed 19 skipped; mcp+runtime typecheck exit 0 on 37710911. Red on main: 12 failed | 5 passed (17) with origin/main mcp-http-tools.ts + skill-md.ts. Ablations A1 scope gate, A2 all-three members, A3 HTTP seam method test, A4 stdio guard: each red, each restored blob==HEAD (src-imported tests, no dist leg).",
      "gates": "dispatch-gates on 5078be21: 68 derived, 67 exit 0, 1 NOT MEASURED (check:dual-build-cjs-loads exit 3, needs full workspace build; CI). teardown self-test exit 0 after fixture fetch. --ran: 0 UNRUN. eslint --no-inline-config packages/mcp packages/runtime exit 0. PR check-runs: in_progress at report time.",
      "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
      "mcp_calls": "3 — issue_read get, issue_read get_comments, pull_request_read get (reads only)",
      "api_writes": "2 — fleet-write pr_create (#31773), this os-dev-report comment via post-stamped",
      "files_changed": [
        ".changeset/31590-mcp-dataset-tools.md",
        "packages/mcp/src/mcp-http-tools.ts",
        "packages/mcp/src/skill-md.ts",
        "packages/mcp/src/stdio-data-bridge.ts",
        "packages/mcp/src/plugin.ts",
        "packages/mcp/src/mcp-dataset-tools.test.ts",
        "packages/mcp/src/skill-md-surface-guard.test.ts",
        "packages/runtime/src/domains/mcp.ts",
        "packages/runtime/src/mcp-dataset-tools-bridge.test.ts"
      ],
      "line_budget": "+861 / -7 over 9 files (PR additions/deletions)",
      "deviations": [
        "Forced test edit: skill-md-surface-guard.test.ts full bridge gains the dataset members and renders pass datasetTools:true.",
        "Runtime typecheck needed driver-turso built first (untouched kernel test imports it); typecheck read on 37710911, the later commits being the changeset and a merge with no mcp/runtime file.",
        "stdio datasets not localized (no request locale on an API-key principal); stdio passes no narrowing probe, as query_records there."
      ],
      "open_questions": [
        {
          "question": "New names: McpDataBridge.listDatasets/queryDataset/datasetToolDefinitions, exported registerDatasetTools + hasDatasetTools (module export, not on the package index), skill option datasetTools, runtime McpDatasetToolsService / stdio StdioDatasetToolsService (structural seam types). Accept?",
          "options": [
            "A accept as named",
            "B rename"
          ],
          "recommendation": "A, they follow the aggregate/fileTools/McpRecordFileService spellings"
        },
        {
          "question": "Input schema source: the MCP tool takes the spec zod declarations (ListDatasetsInputSchema/QueryDatasetInputSchema) whole, of which the definition's parameters is the projection, instead of z.fromJSONSchema(definition.parameters). Keep?",
          "options": [
            "A spec zod whole (keeps the spec's alias prescriptions on refusal; aggregate_records precedent)",
            "B convert definition.parameters (prescriptions reduce to a bare Unrecognized key)"
          ],
          "recommendation": "A, one declaration either way and the refusal stays fixable"
        }
      ],
      "security_findings": "none",
      "out_of_scope_findings": []
    }

    Stamped 2026-11-09T03:21Z.


    Generated by Claude Code

  8. objectstack-fleet commented on Nov 9, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-steve · session_01ADHkmQKZzp4DLtqiCkZZRM

    ACCEPT → PR #31773 comment 6732462672 · head 05891994 · 2026-11-09T04:46Z · landing: pr_ready + automerge_enable

  9. objectstack-fleet commented on Nov 9, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-steve · session_01ADHkmQKZzp4DLtqiCkZZRM

    落地 · 2026-11-09T05:17Z

    reading value
    PR #31773 MERGED 2026-11-09T05:16Z, merge commit 34a30e8a (ACCEPT 6732462672; TIER_DEFAULT contract review PASS posted on the PR)
    #31590 closed by the merge (Fixes #31590)

    Landed:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:aiAI-native — agent / tool / skill metadata, and the MCP surface an agent drivesdomain:serverDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions