Closes the last authoring gap in the ADR-0097 promise that integrations are "expressible and executable as pure metadata".
Problem
An AI (or Studio author) can write a complete, valid provider-bound connectors: entry today — but it only materializes if a human has also edited objectstack.config.ts to add the matching connector plugin to plugins:. The metadata layer is complete; the host layer keeps a code-editing step, parked exactly where an AI author can't help itself. The boot error even names the missing package (good), but the fix is still manual code.
Current reality:
examples/app-showcase installs ConnectorOpenApiPlugin / ConnectorRestPlugin / ConnectorSlackPlugin — not ConnectorMcpPlugin.
- The
create-objectstack scaffold ships none of them.
Why these three (and only these three)
rest / openapi / mcp are generic executors (ADR-0022/0023/0024) — protocol-level infrastructure, the analogue of Salesforce External Services being a platform capability. Brand connectors (slack, salesforce, …) stay marketplace/opt-in. The runtime cost of an installed-but-unused executor is ~zero: factory registration is one map entry, and the MCP SDK is lazily imported only when a connection is actually made.
This deliberately does NOT move anything into the engine/kernel: ADR-0018 §Addendum's layering stands (built-in = the connector_action node + the empty registry; transports = plugins). "Default" means the preset layer: scaffold template + showcase + docs.
Blocked by #3055
Making connector-mcp default-present without the stdio policy gate widens the metadata→child-process surface (Studio publish → reconcile → spawn). #3055's default-deny (PR #3059) must land first.
Ask
create-objectstack template: plugins: includes new ConnectorRestPlugin(), new ConnectorOpenApiPlugin(), new ConnectorMcpPlugin() (zero-arg = contribute the provider factory only).
examples/app-showcase: add new ConnectorMcpPlugin() for parity.
- Docs: getting-started / integration pages state which providers are available by default and how to add/remove them.
- Changesets for the touched packages.
Also owned by this issue: the deferred live-mcp showcase demo (from #3017, now closed)
The demo's remaining half is an in-repo MCP target the declarative provider: 'mcp' instance can point at deterministically in CI — either a tiny MCP fixture server, or @objectstack/mcp (the platform's own endpoint; note it currently has no default wiring anywhere) with a boot-ordering story, since the automation plugin's start() runs before the HTTP server listens — the #3049 degrade+retry makes that self-connection heal seconds after boot, but the Dogfood gate must not become timing-sensitive.
Refs
Closes the last authoring gap in the ADR-0097 promise that integrations are "expressible and executable as pure metadata".
Problem
An AI (or Studio author) can write a complete, valid provider-bound
connectors:entry today — but it only materializes if a human has also editedobjectstack.config.tsto add the matching connector plugin toplugins:. The metadata layer is complete; the host layer keeps a code-editing step, parked exactly where an AI author can't help itself. The boot error even names the missing package (good), but the fix is still manual code.Current reality:
examples/app-showcaseinstallsConnectorOpenApiPlugin/ConnectorRestPlugin/ConnectorSlackPlugin— notConnectorMcpPlugin.create-objectstackscaffold ships none of them.Why these three (and only these three)
rest/openapi/mcpare generic executors (ADR-0022/0023/0024) — protocol-level infrastructure, the analogue of Salesforce External Services being a platform capability. Brand connectors (slack,salesforce, …) stay marketplace/opt-in. The runtime cost of an installed-but-unused executor is ~zero: factory registration is one map entry, and the MCP SDK is lazily imported only when a connection is actually made.This deliberately does NOT move anything into the engine/kernel: ADR-0018 §Addendum's layering stands (built-in = the
connector_actionnode + the empty registry; transports = plugins). "Default" means the preset layer: scaffold template + showcase + docs.Blocked by #3055
Making
connector-mcpdefault-present without the stdio policy gate widens the metadata→child-process surface (Studio publish → reconcile → spawn). #3055's default-deny (PR #3059) must land first.Ask
create-objectstacktemplate:plugins:includesnew ConnectorRestPlugin(),new ConnectorOpenApiPlugin(),new ConnectorMcpPlugin()(zero-arg = contribute the provider factory only).examples/app-showcase: addnew ConnectorMcpPlugin()for parity.Also owned by this issue: the deferred live-mcp showcase demo (from #3017, now closed)
The demo's remaining half is an in-repo MCP target the declarative
provider: 'mcp'instance can point at deterministically in CI — either a tiny MCP fixture server, or@objectstack/mcp(the platform's own endpoint; note it currently has no default wiring anywhere) with a boot-ordering story, since the automation plugin'sstart()runs before the HTTP server listens — the #3049 degrade+retry makes that self-connection heal seconds after boot, but the Dogfood gate must not become timing-sensitive.Refs
provider-boundconnectors:materialized by generic executors) #2977 / ADR-0097, ADR-0015 (all three executors are open-tier), ADR-0018 §Addendum (layering unchanged)