Skip to content

feat(mcp): #3167 PR-B — stdio/HTTP off-switch split + os dev connect UX + exposure-policy docs - #3217

Merged
os-zhuang merged 1 commit into
mainfrom
claude/mcp-server-default-wiring-ydcj2n
Jul 18, 2026
Merged

feat(mcp): #3167 PR-B — stdio/HTTP off-switch split + os dev connect UX + exposure-policy docs#3217
os-zhuang merged 1 commit into
mainfrom
claude/mcp-server-default-wiring-ydcj2n

Conversation

@os-zhuang

@os-zhuangos-zhuang commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

What & why

#3167PR-B,方向已拍定的非重叠部分。

范围调整(重要):开发期间 #3228 已在 main 落地了 HTTP 身份准入的 e2e 证明(基于 showcase、标 HIGH-RISK,并重指了 mcp-http-identity 矩阵行)。因此本 PR rebase 到 main 之上,撤掉了我原来那份重复的 cbp 证明(#3228 的更强),只保留 #3228没做的部分。

审计确认:serve-side 插件早已默认接线(serve.ts:isMcpServerEnabled()requires.push('mcp')),HTTP 面早已准入且现已被 #3228 的 e2e 证明钉死。本 PR 补齐剩下的收口 + 可发现性 + 政策成文。

改动(单 commit)

  • Decision 2(off-switch 语义):HTTP 面与 stdio 传输此前共用一个开关——OS_MCP_SERVER_ENABLED=true 开 HTTP 的同时静默启动无 principal 的裸权限 stdio 桥。拆开:
    • @objectstack/types 新增 resolveMcpStdioAutoStart();stdio 归 OS_MCP_STDIO_ENABLED(默认关),OS_MCP_SERVER_ENABLED 只管 HTTP。旧 =true 触发 stdio 保留一 release + deprecation 警告;=false 语义不变。
    • @objectstack/mcpplugin.start() 改走新开关,legacy alias 触发时 warn 一次。未动bridgeResources(...)(mcp-stdio-authority 探针键);矩阵该行 env 引用已同步。
  • Decision 3(dev 亲和):os dev 启动打印 MCP endpoint / skill URL / 可直接粘贴的 claude mcp add 命令(gate 在 isMcpServerEnabled(),opt-out 零广告)。
  • Decision 4(暴露政策):现行默认(非系统对象 + ai.exposed action、~10 工具脊柱)在 connect-mcp.mdx 写成 v1 承诺政策 + metadata 可著述的后续方向。
  • 附:env-var 文档拆分 + deprecation callout;blank 脚手架 README serve 侧说明;单测钉住三态开关语义;changeset(types/mcp/cli minor + create-objectstack patch)。

验证(rebase 后,本地)

不在本 PR(明确 defer)

  • stdio principal 线程化(把长驻 bridge 升级为 principal-bound)——安全改动,单独 PR;
  • showcase 自连接 demo——dogfood gate 不能变 timing-sensitive,单独 PR。

Refs #3167(PR-B)、#3228(HTTP 证明,已合)、#3202(PR-A)、ADR-0096、ADR-0097。

🤖 Generated with Claude Code

https://claude.ai/code/session_0115eg8dAaCfWaDYYAm3ma36

@vercel

vercelBot commented Jul 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated (UTC)
specReadyReadyPreview, CommentJul 18, 2026 5:11pm

Request Review

@github-actionsgithub-actionsBot added dependencies Pull requests that update a dependency file tests size/m labels Jul 18, 2026
@github-actions

github-actionsBot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 5 package(s): @objectstack/cli, create-objectstack, @objectstack/mcp, packages/qa, @objectstack/types.

30 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/actions-as-tools.mdx(via @objectstack/mcp)
  • content/docs/ai/agents.mdx(via @objectstack/mcp)
  • content/docs/ai/index.mdx(via @objectstack/mcp)
  • content/docs/ai/natural-language-queries.mdx(via @objectstack/mcp)
  • content/docs/ai/skills-reference.mdx(via packages/cli, create-objectstack)
  • content/docs/ai/skills.mdx(via create-objectstack)
  • content/docs/api/client-sdk.mdx(via @objectstack/cli)
  • content/docs/api/data-flow.mdx(via @objectstack/cli)
  • content/docs/api/environment-routing.mdx(via @objectstack/cli)
  • content/docs/api/error-catalog.mdx(via @objectstack/cli)
  • content/docs/api/index.mdx(via @objectstack/mcp)
  • content/docs/automation/hook-bodies.mdx(via packages/cli)
  • content/docs/deployment/backup-restore.mdx(via @objectstack/cli)
  • content/docs/deployment/environment-variables.mdx(via @objectstack/mcp)
  • content/docs/deployment/self-hosting.mdx(via @objectstack/cli)
  • content/docs/getting-started/cli.mdx(via @objectstack/cli)
  • content/docs/getting-started/index.mdx(via create-objectstack)
  • content/docs/getting-started/your-first-project.mdx(via @objectstack/cli, create-objectstack)
  • content/docs/kernel/runtime-services/data-service.mdx(via packages/cli)
  • content/docs/kernel/runtime-services/index.mdx(via packages/cli)
  • content/docs/permissions/authentication.mdx(via @objectstack/cli)
  • content/docs/permissions/authorization.mdx(via packages/qa)
  • content/docs/permissions/delegated-administration.mdx(via packages/qa)
  • content/docs/plugins/packages.mdx(via @objectstack/cli, create-objectstack, @objectstack/mcp, @objectstack/types)
  • content/docs/protocol/kernel/plugin-spec.mdx(via @objectstack/cli)
  • content/docs/protocol/kernel/realtime-protocol.mdx(via @objectstack/cli)
  • content/docs/protocol/knowledge.mdx(via @objectstack/mcp)
  • content/docs/releases/implementation-status.mdx(via @objectstack/cli, @objectstack/mcp)
  • content/docs/releases/v15.mdx(via create-objectstack)
  • content/docs/releases/v9.mdx(via create-objectstack)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation tooling labels Jul 18, 2026
@os-zhuangos-zhuang changed the title test(authz): e2e-prove MCP HTTP identity admission — anonymous→401, RLS-scoped == REST (#3167)feat(mcp): #3167 PR-B — MCP dev default-wiring: identity-admission e2e proof + stdio/HTTP switch split + os dev connect UXJul 18, 2026
…he MCP endpoint on `os dev` boot (#3167)
#3167 PR-B — the direction-ratified, non-overlapping half. The HTTP
identity-admission e2e proof landed separately (#3228: showcase-based,
HIGH-RISK); this rebases onto it and keeps only what that PR did not cover.
Decision 2 (off-switch semantics): the MCP HTTP surface and the long-lived
stdio transport shared one env var — OS_MCP_SERVER_ENABLED=true turned HTTP on
AND silently auto-started the UNSCOPED stdio bridge (raw services, no
per-request principal). Split them:
- types: new resolveMcpStdioAutoStart(); stdio is now OS_MCP_STDIO_ENABLED
(default off). OS_MCP_SERVER_ENABLED governs only HTTP. Legacy
OS_MCP_SERVER_ENABLED=true still starts stdio for one release, flagged
deprecated (=false only ever gated HTTP, unchanged).
- mcp: plugin.start() gates stdio on the new switch + warns once on the legacy
alias. The bridgeResources(...) line (mcp-stdio-authority probe key) is
untouched; the matrix row's env-var references are synced.
Decision 3 (dev affordance): `os dev` prints the MCP endpoint, skill URL, and a
ready-to-paste `claude mcp add` command on boot, gated on isMcpServerEnabled()
(opted-out deployments advertise nothing).
Decision 4 (exposure policy): documented the current default (non-system
objects + ai.exposed actions over the ~10-tool spine) as the committed v1
policy in connect-mcp.mdx, with the metadata-authorable direction noted.
Also: env-var docs updated for the split (+ deprecation callout); the blank
scaffold README documents the serve-side MCP surface; unit tests pin the new
switch semantics (canonical / legacy-deprecated / footgun-closed). Changeset
covers types+mcp+cli (minor) and create-objectstack (patch).
Refs #3167, #3228, ADR-0096, ADR-0097.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0115eg8dAaCfWaDYYAm3ma36
@os-zhuang
os-zhuangforce-pushed the claude/mcp-server-default-wiring-ydcj2n branch from 4b88f9a to 192a079CompareJuly 18, 2026 16:21
@os-zhuangos-zhuang changed the title feat(mcp): #3167 PR-B — MCP dev default-wiring: identity-admission e2e proof + stdio/HTTP switch split + os dev connect UXfeat(mcp): #3167 PR-B — stdio/HTTP off-switch split + os dev connect UX + exposure-policy docsJul 18, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review July 18, 2026 16:40
@os-zhuang
os-zhuang merged commit 83e8f7d into mainJul 18, 2026
18 of 19 checks passed
@os-zhuang
os-zhuang deleted the claude/mcp-server-default-wiring-ydcj2n branch July 18, 2026 16:40
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependenciesPull requests that update a dependency filedocumentationImprovements or additions to documentationsize/mteststooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@os-zhuang@claude