@noodleseed/agent-kit 0.56.0 → 0.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/manifest.json +249 -249
  2. package/package.json +1 -1
  3. package/skills/claude-code/SKILL.md +1 -1
  4. package/skills/claude-code/authoring-mcp-servers/SKILL.md +1 -1
  5. package/skills/claude-code/building-mcp-apps/SKILL.md +1 -1
  6. package/skills/claude-code/connecting-apis-to-mcp/SKILL.md +1 -1
  7. package/skills/claude-code/debugging-mcp-delivery/SKILL.md +1 -1
  8. package/skills/claude-code/deploying-mcp-services/SKILL.md +1 -1
  9. package/skills/claude-code/designing-mcp-products/SKILL.md +1 -1
  10. package/skills/claude-code/embedding-mcp-assistants/SKILL.md +1 -1
  11. package/skills/claude-code/examples/customer-auth/README.md +14 -11
  12. package/skills/claude-code/examples/customer-auth/src/server.ts +1 -1
  13. package/skills/claude-code/examples/customer-auth/test/server.test.ts +1 -1
  14. package/skills/claude-code/examples/hello/README.md +4 -0
  15. package/skills/claude-code/executing-noodle-plans/SKILL.md +1 -1
  16. package/skills/claude-code/publishing-mcp-integrations/SKILL.md +1 -1
  17. package/skills/claude-code/references/authoring-workflow.md +3 -3
  18. package/skills/claude-code/references/build-an-mcp-server.md +1 -0
  19. package/skills/claude-code/reporting-noodle-feedback/SKILL.md +1 -1
  20. package/skills/claude-code/verifying-mcp-delivery/SKILL.md +1 -1
  21. package/skills/codex/SKILL.md +1 -1
  22. package/skills/codex/authoring-mcp-servers/SKILL.md +1 -1
  23. package/skills/codex/building-mcp-apps/SKILL.md +1 -1
  24. package/skills/codex/connecting-apis-to-mcp/SKILL.md +1 -1
  25. package/skills/codex/debugging-mcp-delivery/SKILL.md +1 -1
  26. package/skills/codex/deploying-mcp-services/SKILL.md +1 -1
  27. package/skills/codex/designing-mcp-products/SKILL.md +1 -1
  28. package/skills/codex/embedding-mcp-assistants/SKILL.md +1 -1
  29. package/skills/codex/examples/customer-auth/README.md +14 -11
  30. package/skills/codex/examples/customer-auth/src/server.ts +1 -1
  31. package/skills/codex/examples/customer-auth/test/server.test.ts +1 -1
  32. package/skills/codex/examples/hello/README.md +4 -0
  33. package/skills/codex/executing-noodle-plans/SKILL.md +1 -1
  34. package/skills/codex/publishing-mcp-integrations/SKILL.md +1 -1
  35. package/skills/codex/references/authoring-workflow.md +3 -3
  36. package/skills/codex/references/build-an-mcp-server.md +1 -0
  37. package/skills/codex/reporting-noodle-feedback/SKILL.md +1 -1
  38. package/skills/codex/verifying-mcp-delivery/SKILL.md +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noodleseed/agent-kit",
3
- "version": "0.56.0",
3
+ "version": "0.57.0",
4
4
  "private": false,
5
5
  "description": "Self-checking, self-updating agent skills for the Noodle Seed CLI. Authored in this repo by @noodle-borg/agent-kit; this is the published, independently-versioned canonical skills artifact the CLI fetches and verifies.",
6
6
  "license": "Apache-2.0",
@@ -3,7 +3,7 @@ name: noodle-seed
3
3
  description: "Use when building, validating, testing, deploying, or operating a local or hosted Noodle Seed MCP server or app authored in TypeScript with the noodle CLI."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:ec5bfcd0d8165205 -->
6
+ <!-- noodle-skill version:0.57.0 hash:ec5bfcd0d8165205 -->
7
7
 
8
8
  # Noodle Seed
9
9
 
@@ -3,7 +3,7 @@ name: authoring-mcp-servers
3
3
  description: "Use when creating or extending a headless Noodle Seed MCP server, tool, resource, prompt, or typed model-facing capability."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:0b2fd8c7e43fc69f -->
6
+ <!-- noodle-skill version:0.57.0 hash:0b2fd8c7e43fc69f -->
7
7
 
8
8
  # authoring-mcp-servers
9
9
 
@@ -3,7 +3,7 @@ name: building-mcp-apps
3
3
  description: "Use when a Noodle Seed MCP App, widget, interactive card, visual interaction, or host-visible UI is the primary requested outcome."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:f7fa54992c8d7692 -->
6
+ <!-- noodle-skill version:0.57.0 hash:f7fa54992c8d7692 -->
7
7
 
8
8
  # building-mcp-apps
9
9
 
@@ -3,7 +3,7 @@ name: connecting-apis-to-mcp
3
3
  description: "Use when credentials, an API URL, an OpenAPI document, or an observed response must become real Noodle Seed MCP behavior."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:1e86b8704f407bd3 -->
6
+ <!-- noodle-skill version:0.57.0 hash:1e86b8704f407bd3 -->
7
7
 
8
8
  # connecting-apis-to-mcp
9
9
 
@@ -3,7 +3,7 @@ name: debugging-mcp-delivery
3
3
  description: "Use when an existing Noodle Seed MCP project has a concrete validation, runtime, connector, App, host, deployment, or production failure."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:aa715bae12041d7c -->
6
+ <!-- noodle-skill version:0.57.0 hash:aa715bae12041d7c -->
7
7
 
8
8
  # debugging-mcp-delivery
9
9
 
@@ -3,7 +3,7 @@ name: deploying-mcp-services
3
3
  description: "Use when the user explicitly requests a Noodle Seed hosted link, configuration write, deployment, access change, rollback, or connection write."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:93e735b7ffb45df1 -->
6
+ <!-- noodle-skill version:0.57.0 hash:93e735b7ffb45df1 -->
7
7
 
8
8
  # deploying-mcp-services
9
9
 
@@ -3,7 +3,7 @@ name: designing-mcp-products
3
3
  description: "Use when a Noodle Seed MCP product idea needs conversational fit, user benefit, scope, interaction, or evidence design before implementation."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:76cce86729cffbee -->
6
+ <!-- noodle-skill version:0.57.0 hash:76cce86729cffbee -->
7
7
 
8
8
  # designing-mcp-products
9
9
 
@@ -3,7 +3,7 @@ name: embedding-mcp-assistants
3
3
  description: "Use when embedding a Noodle assistant into an existing SaaS or web application with browser, identity, session, and credential boundaries."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:cc54a67f21c0ecdb -->
6
+ <!-- noodle-skill version:0.57.0 hash:cc54a67f21c0ecdb -->
7
7
 
8
8
  # embedding-mcp-assistants
9
9
 
@@ -68,7 +68,7 @@ public `${user}` expression scope:
68
68
  ```ts
69
69
  auth: customerAuth.oidc({
70
70
  issuer: 'https://id.noodleseed.dev',
71
- audience: 'https://org.cloud.noodleseed.dev/app/mcp',
71
+ audience: 'noodleseed-customer-auth-prod',
72
72
  claims: {
73
73
  id: 'sub',
74
74
  email: 'email',
@@ -93,7 +93,7 @@ auth: customerAuth.federatedOidc({
93
93
  issuers: [
94
94
  {
95
95
  issuer: 'https://id.customer-a.com',
96
- audience: 'https://org.cloud.noodleseed.dev/app/mcp',
96
+ audience: 'noodleseed-customer-auth-prod',
97
97
  routing: {
98
98
  endpoints: {
99
99
  customer_api: { claim: 'tenant.api_base_url' },
@@ -102,7 +102,7 @@ auth: customerAuth.federatedOidc({
102
102
  },
103
103
  {
104
104
  issuer: 'https://login.customer-b.com',
105
- audience: 'https://org.cloud.noodleseed.dev/app/mcp',
105
+ audience: 'noodleseed-customer-auth-prod',
106
106
  routing: {
107
107
  endpoints: {
108
108
  customer_api: { claim: 'organization.routes.customer_api' },
@@ -113,8 +113,9 @@ auth: customerAuth.federatedOidc({
113
113
  }),
114
114
  ```
115
115
 
116
- At runtime, Noodle Seed validates both the configured audience and exact MCP resource, projects the route
117
- into private request state, applies its policy, and freezes it for the call. Missing, malformed, or
116
+ At runtime, Noodle Seed validates the configured stable audience, associates the caller with the exact
117
+ transport-derived MCP resource, projects the route into private request state, applies its policy, and
118
+ freezes it for the call. Missing, malformed, or
118
119
  disallowed claims return `connector_route_unavailable` before credential lookup or connector egress.
119
120
  Resolved URLs never enter artifacts, `${user}`, logs, model output, widgets, public confirmation review,
120
121
  broker cache keys, or delegated exchange assertions.
@@ -159,8 +160,9 @@ reuses the current frozen snapshot for the action and all nested or later reads.
159
160
  The application developer owns the direct/federated authorization server. It must publish its path-inserted
160
161
  RFC 8414 document as direct HTTP 200 JSON with exact issuer and HTTPS authorization/token/registration/JWKS
161
162
  endpoints, authorization-code and refresh grants, PKCE S256, public-client auth method `none`, RFC 8707
162
- resource handling, and public signing keys. Access tokens must include the exact MCP resource audience; there
163
- is no audience fallback.
163
+ resource handling, and public signing keys. It validates each exact MCP resource on authorize, code exchange,
164
+ and refresh, then maps approved versions of this app/environment to `noodleseed-customer-auth-prod`. Other
165
+ apps and environments use distinct audiences.
164
166
 
165
167
  Run `noodle auth doctor src/server.ts` before sharing. Its bounded, read-only probes never register a client.
166
168
  Adding the embedded assistant does not choose or rewrite MCP customer auth.
@@ -216,7 +218,8 @@ noodle validate examples/customer-auth/src/server.ts
216
218
 
217
219
  Against a deployed customer-protected environment, set a short-lived real customer token only in
218
220
  `NOODLE_CUSTOMER_TOKEN` and add `--live --org <org> --app <app> --env <env>`. The live doctor performs
219
- credential exchanges without invoking any business tool.
221
+ credential exchanges without invoking any business tool. Add `--version 1` when testing a pinned version;
222
+ the reported customer resource must match that versioned MCP endpoint.
220
223
 
221
224
  ## Run locally
222
225
 
@@ -528,9 +531,9 @@ https://cloud.noodleseed.dev/o/noodleseed/customer-auth/mcp
528
531
 
529
532
  ## Auth boundary
530
533
 
531
- Noodle Seed verifies the configured OIDC issuer, audience, and exact MCP resource before reading identity or
532
- routing claims. Public caller identity contains the user/role/scope projection; the customer route remains
533
- private request state.
534
+ Noodle Seed verifies the configured OIDC issuer and stable audience, then binds the exact transport-derived
535
+ MCP resource before reading identity or routing claims. Public caller identity contains the user/role/scope
536
+ projection; the customer route remains private request state.
534
537
 
535
538
  Connector-backed tools ask the broker for a route-bound delegated credential; only the endpoint key and
536
539
  fingerprint enter broker cache/single-flight state or the assertion. The route claim and inbound MCP bearer
@@ -89,7 +89,7 @@ export default server(
89
89
  interactions: { confirmationFallback: 'host' },
90
90
  auth: customerAuth.oidc({
91
91
  issuer: 'https://id.noodleseed.dev',
92
- audience: 'https://org.cloud.noodleseed.dev/app/mcp',
92
+ audience: 'noodleseed-customer-auth-prod',
93
93
  claims: {
94
94
  id: 'sub',
95
95
  email: 'email',
@@ -26,7 +26,7 @@ describe('customer-auth example', () => {
26
26
  expect(manifest.server.auth).toEqual({
27
27
  kind: 'oidc',
28
28
  issuer: 'https://id.noodleseed.dev',
29
- audience: 'https://org.cloud.noodleseed.dev/app/mcp',
29
+ audience: 'noodleseed-customer-auth-prod',
30
30
  claims: {
31
31
  id: 'sub',
32
32
  email: 'email',
@@ -5,6 +5,10 @@ connectors, secrets, flows, widgets, or handoff policy. It still uses the curren
5
5
  so new authors see where server-level branding belongs. Use it to smoke the author loop
6
6
  (`noodle validate` / `noodle dev`) or a first deploy.
7
7
 
8
+ Protocol negotiation deliberately does not appear in `src/server.ts` or `noodle.json`. MCP versions
9
+ are platform-owned: the same deployed app automatically serves compatible legacy clients and modern
10
+ clients from its existing endpoint, without an app setting or redeploy.
11
+
8
12
  When an installed Noodle Developer plugin drives this example, its skill performs mapped lifecycle
9
13
  steps through the supported `noodle-readiness` tools and reports only stable public `noodle ...`
10
14
  commands as recovery text. Do not install or update a global CLI: the coding agent writes and tests
@@ -3,7 +3,7 @@ name: executing-noodle-plans
3
3
  description: "Use when the user asks to execute an approved, decision-complete implementation plan for a Noodle Seed project task by task with test-first changes, review, recovery, and final verification."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:6a9f132ddb79352e -->
6
+ <!-- noodle-skill version:0.57.0 hash:6a9f132ddb79352e -->
7
7
 
8
8
  # Execute a Noodle Seed implementation plan
9
9
 
@@ -3,7 +3,7 @@ name: publishing-mcp-integrations
3
3
  description: "Use when preparing, reviewing, or submitting a Noodle Seed MCP integration to a host or app directory."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:efffbf82007f935d -->
6
+ <!-- noodle-skill version:0.57.0 hash:efffbf82007f935d -->
7
7
 
8
8
  # publishing-mcp-integrations
9
9
 
@@ -108,7 +108,7 @@ More: `auth.kind` is `bearer` | `apiKey` (needs `header`) | `clientCredentials`
108
108
 
109
109
  For `customerAuth.oidc(...)` and `.federatedOidc(...)`, the application developer owns the standards-compliant authorization server. Noodle verifies its access tokens; it does not proxy discovery, create OAuth clients, or repair the upstream server. For issuer `https://id.example.com/oauth`, publish the path-inserted RFC 8414 document at `https://id.example.com/.well-known/oauth-authorization-server/oauth` as direct unauthenticated HTTP 200 JSON — never a login redirect.
110
110
 
111
- That metadata must expose HTTPS `authorization_endpoint`, `token_endpoint`, `jwks_uri`, and RFC 7591 `registration_endpoint`; advertise authorization-code and refresh-token grants, Dynamic Client Registration, PKCE with `code_challenge_methods_supported: ["S256"]`, and public clients with `token_endpoint_auth_methods_supported: ["none"]`. Implement RFC 8707 `resource`, mint access-token `aud` for the exact MCP resource URL, and publish only public signing keys in JWKS. Run `noodle auth doctor src/server.ts`; its issuer-readiness probes perform bounded read-only GET checks and never register a client. A successful `noodle deploy --access customers` reports the same readiness without turning a diagnostic failure into a failed deployment.
111
+ That metadata must expose HTTPS `authorization_endpoint`, `token_endpoint`, `jwks_uri`, and RFC 7591 `registration_endpoint`; advertise authorization-code and refresh-token grants, Dynamic Client Registration, PKCE with `code_challenge_methods_supported: ["S256"]`, and public clients with `token_endpoint_auth_methods_supported: ["none"]`. Validate the exact RFC 8707 `resource` on authorize, code exchange, and refresh, then map approved versions of one app/environment to the stable audience configured in `customerAuth`; use distinct audiences across apps and environments. Publish only public signing keys in JWKS. Run `noodle auth doctor src/server.ts`; its issuer-readiness probes perform bounded read-only GET checks and never register a client. A successful `noodle deploy --access customers` reports the same readiness without turning a diagnostic failure into a failed deployment.
112
112
 
113
113
  ## Auth-derived customer API endpoints
114
114
 
@@ -156,7 +156,7 @@ export default server(
156
156
  interactions: { confirmationFallback: 'host' },
157
157
  auth: customerAuth.oidc({
158
158
  issuer: 'https://id.noodleseed.dev',
159
- audience: 'https://org.cloud.noodleseed.dev/app/mcp',
159
+ audience: 'noodleseed-customer-records-prod',
160
160
  routing: {
161
161
  endpoints: {
162
162
  customer_api: { claim: 'tenant.api_base_url' },
@@ -287,7 +287,7 @@ export async function tokenEndpoint(req: Request): Promise<Response> {
287
287
  }
288
288
  ```
289
289
 
290
- Diagnose statically with `noodle auth doctor`; set a short-lived real customer token only in `NOODLE_CUSTOMER_TOKEN` and add `--live --org <org> --app <app> --env <env>` to perform one exchange per delegated binding without invoking a business tool. Common failures include structured `credential_unavailable` reasons such as `caller_identity_not_customer`. Direct/federated OIDC verification assigns the customer identity at the trusted verifier boundary; never ask an IdP to mint a Noodle-specific classification claim.
290
+ Diagnose statically with `noodle auth doctor`; set a short-lived real customer token only in `NOODLE_CUSTOMER_TOKEN` and add `--live --org <org> --app <app> --env <env>` to perform one exchange per delegated binding without invoking a business tool. Add `--version <version>` to test that exact pinned MCP resource. Common failures include structured `credential_unavailable` reasons such as `caller_identity_not_customer`. Direct/federated OIDC verification assigns the customer identity at the trusted verifier boundary; never ask an IdP to mint a Noodle-specific classification claim.
291
291
 
292
292
  ## Design tools for the model
293
293
 
@@ -23,6 +23,7 @@ Establish only the inputs needed for the requested stopping point. Follow `refer
23
23
  2. **Define the product contract.** For each job, write the user phrase, the intent-shaped tool or resource, its minimal typed input, the useful output, read/write effect, and backing operation. Design for user intent, not a 1:1 API endpoint wrapper.
24
24
  3. **Choose the smallest implementation.** Use native tools, resources, or prompts for local/static behavior; add a connector only when external data or actions are required. Keep response output small and model-readable.
25
25
  4. **Author in TypeScript.** Follow `references/authoring-workflow.md` for connector and flow patterns, `references/tool-design.md` for the model-facing tool surface, and `references/sdk-surface.md` for exact builders. These are this route’s complete canonical support set; use the router lookup catalog only when observed evidence names a different concern.
26
+ MCP protocol versions are platform-owned and negotiated automatically at the serving endpoint. Do not add protocol-version settings to server options, `noodle.json`, app manifests, or deployment configuration.
26
27
  5. **Validate and repair.** Run `noodle validate --json`. Parse `error.errors[]`, repair the cited `path`, and rerun validation. Consult the lookup catalog only for the specific reported error code; do not open another reference speculatively.
27
28
  6. **Run the local smoke.** After validation succeeds, run `noodle test --json` and repair any failure at that evidence layer.
28
29
  7. **Prove external behavior.** For connector-backed reads, set credentials through the effective local target and run a safe representative `noodle tools call`. Confirm populated mapped fields from real output, not merely successful registration.
@@ -3,7 +3,7 @@ name: reporting-noodle-feedback
3
3
  description: "Use when a Noodle Seed bug, misleading instruction, missing capability, or concrete product improvement should be proposed to the user."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:0f404109f4845683 -->
6
+ <!-- noodle-skill version:0.57.0 hash:0f404109f4845683 -->
7
7
 
8
8
  # reporting-noodle-feedback
9
9
 
@@ -3,7 +3,7 @@ name: verifying-mcp-delivery
3
3
  description: "Use when proving a Noodle Seed MCP project works at a named compile, local, connector, App, host, deployment, or production evidence level."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:6ef6ef551e26b78e -->
6
+ <!-- noodle-skill version:0.57.0 hash:6ef6ef551e26b78e -->
7
7
 
8
8
  # verifying-mcp-delivery
9
9
 
@@ -3,7 +3,7 @@ name: noodle-seed
3
3
  description: "Use when building, validating, testing, deploying, or operating a local or hosted Noodle Seed MCP server or app authored in TypeScript with the noodle CLI."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:ec5bfcd0d8165205 -->
6
+ <!-- noodle-skill version:0.57.0 hash:ec5bfcd0d8165205 -->
7
7
 
8
8
  # Noodle Seed
9
9
 
@@ -3,7 +3,7 @@ name: authoring-mcp-servers
3
3
  description: "Use when creating or extending a headless Noodle Seed MCP server, tool, resource, prompt, or typed model-facing capability."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:0b2fd8c7e43fc69f -->
6
+ <!-- noodle-skill version:0.57.0 hash:0b2fd8c7e43fc69f -->
7
7
 
8
8
  # authoring-mcp-servers
9
9
 
@@ -3,7 +3,7 @@ name: building-mcp-apps
3
3
  description: "Use when a Noodle Seed MCP App, widget, interactive card, visual interaction, or host-visible UI is the primary requested outcome."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:f7fa54992c8d7692 -->
6
+ <!-- noodle-skill version:0.57.0 hash:f7fa54992c8d7692 -->
7
7
 
8
8
  # building-mcp-apps
9
9
 
@@ -3,7 +3,7 @@ name: connecting-apis-to-mcp
3
3
  description: "Use when credentials, an API URL, an OpenAPI document, or an observed response must become real Noodle Seed MCP behavior."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:1e86b8704f407bd3 -->
6
+ <!-- noodle-skill version:0.57.0 hash:1e86b8704f407bd3 -->
7
7
 
8
8
  # connecting-apis-to-mcp
9
9
 
@@ -3,7 +3,7 @@ name: debugging-mcp-delivery
3
3
  description: "Use when an existing Noodle Seed MCP project has a concrete validation, runtime, connector, App, host, deployment, or production failure."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:aa715bae12041d7c -->
6
+ <!-- noodle-skill version:0.57.0 hash:aa715bae12041d7c -->
7
7
 
8
8
  # debugging-mcp-delivery
9
9
 
@@ -3,7 +3,7 @@ name: deploying-mcp-services
3
3
  description: "Use when the user explicitly requests a Noodle Seed hosted link, configuration write, deployment, access change, rollback, or connection write."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:93e735b7ffb45df1 -->
6
+ <!-- noodle-skill version:0.57.0 hash:93e735b7ffb45df1 -->
7
7
 
8
8
  # deploying-mcp-services
9
9
 
@@ -3,7 +3,7 @@ name: designing-mcp-products
3
3
  description: "Use when a Noodle Seed MCP product idea needs conversational fit, user benefit, scope, interaction, or evidence design before implementation."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:76cce86729cffbee -->
6
+ <!-- noodle-skill version:0.57.0 hash:76cce86729cffbee -->
7
7
 
8
8
  # designing-mcp-products
9
9
 
@@ -3,7 +3,7 @@ name: embedding-mcp-assistants
3
3
  description: "Use when embedding a Noodle assistant into an existing SaaS or web application with browser, identity, session, and credential boundaries."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:cc54a67f21c0ecdb -->
6
+ <!-- noodle-skill version:0.57.0 hash:cc54a67f21c0ecdb -->
7
7
 
8
8
  # embedding-mcp-assistants
9
9
 
@@ -68,7 +68,7 @@ public `${user}` expression scope:
68
68
  ```ts
69
69
  auth: customerAuth.oidc({
70
70
  issuer: 'https://id.noodleseed.dev',
71
- audience: 'https://org.cloud.noodleseed.dev/app/mcp',
71
+ audience: 'noodleseed-customer-auth-prod',
72
72
  claims: {
73
73
  id: 'sub',
74
74
  email: 'email',
@@ -93,7 +93,7 @@ auth: customerAuth.federatedOidc({
93
93
  issuers: [
94
94
  {
95
95
  issuer: 'https://id.customer-a.com',
96
- audience: 'https://org.cloud.noodleseed.dev/app/mcp',
96
+ audience: 'noodleseed-customer-auth-prod',
97
97
  routing: {
98
98
  endpoints: {
99
99
  customer_api: { claim: 'tenant.api_base_url' },
@@ -102,7 +102,7 @@ auth: customerAuth.federatedOidc({
102
102
  },
103
103
  {
104
104
  issuer: 'https://login.customer-b.com',
105
- audience: 'https://org.cloud.noodleseed.dev/app/mcp',
105
+ audience: 'noodleseed-customer-auth-prod',
106
106
  routing: {
107
107
  endpoints: {
108
108
  customer_api: { claim: 'organization.routes.customer_api' },
@@ -113,8 +113,9 @@ auth: customerAuth.federatedOidc({
113
113
  }),
114
114
  ```
115
115
 
116
- At runtime, Noodle Seed validates both the configured audience and exact MCP resource, projects the route
117
- into private request state, applies its policy, and freezes it for the call. Missing, malformed, or
116
+ At runtime, Noodle Seed validates the configured stable audience, associates the caller with the exact
117
+ transport-derived MCP resource, projects the route into private request state, applies its policy, and
118
+ freezes it for the call. Missing, malformed, or
118
119
  disallowed claims return `connector_route_unavailable` before credential lookup or connector egress.
119
120
  Resolved URLs never enter artifacts, `${user}`, logs, model output, widgets, public confirmation review,
120
121
  broker cache keys, or delegated exchange assertions.
@@ -159,8 +160,9 @@ reuses the current frozen snapshot for the action and all nested or later reads.
159
160
  The application developer owns the direct/federated authorization server. It must publish its path-inserted
160
161
  RFC 8414 document as direct HTTP 200 JSON with exact issuer and HTTPS authorization/token/registration/JWKS
161
162
  endpoints, authorization-code and refresh grants, PKCE S256, public-client auth method `none`, RFC 8707
162
- resource handling, and public signing keys. Access tokens must include the exact MCP resource audience; there
163
- is no audience fallback.
163
+ resource handling, and public signing keys. It validates each exact MCP resource on authorize, code exchange,
164
+ and refresh, then maps approved versions of this app/environment to `noodleseed-customer-auth-prod`. Other
165
+ apps and environments use distinct audiences.
164
166
 
165
167
  Run `noodle auth doctor src/server.ts` before sharing. Its bounded, read-only probes never register a client.
166
168
  Adding the embedded assistant does not choose or rewrite MCP customer auth.
@@ -216,7 +218,8 @@ noodle validate examples/customer-auth/src/server.ts
216
218
 
217
219
  Against a deployed customer-protected environment, set a short-lived real customer token only in
218
220
  `NOODLE_CUSTOMER_TOKEN` and add `--live --org <org> --app <app> --env <env>`. The live doctor performs
219
- credential exchanges without invoking any business tool.
221
+ credential exchanges without invoking any business tool. Add `--version 1` when testing a pinned version;
222
+ the reported customer resource must match that versioned MCP endpoint.
220
223
 
221
224
  ## Run locally
222
225
 
@@ -528,9 +531,9 @@ https://cloud.noodleseed.dev/o/noodleseed/customer-auth/mcp
528
531
 
529
532
  ## Auth boundary
530
533
 
531
- Noodle Seed verifies the configured OIDC issuer, audience, and exact MCP resource before reading identity or
532
- routing claims. Public caller identity contains the user/role/scope projection; the customer route remains
533
- private request state.
534
+ Noodle Seed verifies the configured OIDC issuer and stable audience, then binds the exact transport-derived
535
+ MCP resource before reading identity or routing claims. Public caller identity contains the user/role/scope
536
+ projection; the customer route remains private request state.
534
537
 
535
538
  Connector-backed tools ask the broker for a route-bound delegated credential; only the endpoint key and
536
539
  fingerprint enter broker cache/single-flight state or the assertion. The route claim and inbound MCP bearer
@@ -89,7 +89,7 @@ export default server(
89
89
  interactions: { confirmationFallback: 'host' },
90
90
  auth: customerAuth.oidc({
91
91
  issuer: 'https://id.noodleseed.dev',
92
- audience: 'https://org.cloud.noodleseed.dev/app/mcp',
92
+ audience: 'noodleseed-customer-auth-prod',
93
93
  claims: {
94
94
  id: 'sub',
95
95
  email: 'email',
@@ -26,7 +26,7 @@ describe('customer-auth example', () => {
26
26
  expect(manifest.server.auth).toEqual({
27
27
  kind: 'oidc',
28
28
  issuer: 'https://id.noodleseed.dev',
29
- audience: 'https://org.cloud.noodleseed.dev/app/mcp',
29
+ audience: 'noodleseed-customer-auth-prod',
30
30
  claims: {
31
31
  id: 'sub',
32
32
  email: 'email',
@@ -5,6 +5,10 @@ connectors, secrets, flows, widgets, or handoff policy. It still uses the curren
5
5
  so new authors see where server-level branding belongs. Use it to smoke the author loop
6
6
  (`noodle validate` / `noodle dev`) or a first deploy.
7
7
 
8
+ Protocol negotiation deliberately does not appear in `src/server.ts` or `noodle.json`. MCP versions
9
+ are platform-owned: the same deployed app automatically serves compatible legacy clients and modern
10
+ clients from its existing endpoint, without an app setting or redeploy.
11
+
8
12
  When an installed Noodle Developer plugin drives this example, its skill performs mapped lifecycle
9
13
  steps through the supported `noodle-readiness` tools and reports only stable public `noodle ...`
10
14
  commands as recovery text. Do not install or update a global CLI: the coding agent writes and tests
@@ -3,7 +3,7 @@ name: executing-noodle-plans
3
3
  description: "Use when the user asks to execute an approved, decision-complete implementation plan for a Noodle Seed project task by task with test-first changes, review, recovery, and final verification."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:6a9f132ddb79352e -->
6
+ <!-- noodle-skill version:0.57.0 hash:6a9f132ddb79352e -->
7
7
 
8
8
  # Execute a Noodle Seed implementation plan
9
9
 
@@ -3,7 +3,7 @@ name: publishing-mcp-integrations
3
3
  description: "Use when preparing, reviewing, or submitting a Noodle Seed MCP integration to a host or app directory."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:efffbf82007f935d -->
6
+ <!-- noodle-skill version:0.57.0 hash:efffbf82007f935d -->
7
7
 
8
8
  # publishing-mcp-integrations
9
9
 
@@ -108,7 +108,7 @@ More: `auth.kind` is `bearer` | `apiKey` (needs `header`) | `clientCredentials`
108
108
 
109
109
  For `customerAuth.oidc(...)` and `.federatedOidc(...)`, the application developer owns the standards-compliant authorization server. Noodle verifies its access tokens; it does not proxy discovery, create OAuth clients, or repair the upstream server. For issuer `https://id.example.com/oauth`, publish the path-inserted RFC 8414 document at `https://id.example.com/.well-known/oauth-authorization-server/oauth` as direct unauthenticated HTTP 200 JSON — never a login redirect.
110
110
 
111
- That metadata must expose HTTPS `authorization_endpoint`, `token_endpoint`, `jwks_uri`, and RFC 7591 `registration_endpoint`; advertise authorization-code and refresh-token grants, Dynamic Client Registration, PKCE with `code_challenge_methods_supported: ["S256"]`, and public clients with `token_endpoint_auth_methods_supported: ["none"]`. Implement RFC 8707 `resource`, mint access-token `aud` for the exact MCP resource URL, and publish only public signing keys in JWKS. Run `noodle auth doctor src/server.ts`; its issuer-readiness probes perform bounded read-only GET checks and never register a client. A successful `noodle deploy --access customers` reports the same readiness without turning a diagnostic failure into a failed deployment.
111
+ That metadata must expose HTTPS `authorization_endpoint`, `token_endpoint`, `jwks_uri`, and RFC 7591 `registration_endpoint`; advertise authorization-code and refresh-token grants, Dynamic Client Registration, PKCE with `code_challenge_methods_supported: ["S256"]`, and public clients with `token_endpoint_auth_methods_supported: ["none"]`. Validate the exact RFC 8707 `resource` on authorize, code exchange, and refresh, then map approved versions of one app/environment to the stable audience configured in `customerAuth`; use distinct audiences across apps and environments. Publish only public signing keys in JWKS. Run `noodle auth doctor src/server.ts`; its issuer-readiness probes perform bounded read-only GET checks and never register a client. A successful `noodle deploy --access customers` reports the same readiness without turning a diagnostic failure into a failed deployment.
112
112
 
113
113
  ## Auth-derived customer API endpoints
114
114
 
@@ -156,7 +156,7 @@ export default server(
156
156
  interactions: { confirmationFallback: 'host' },
157
157
  auth: customerAuth.oidc({
158
158
  issuer: 'https://id.noodleseed.dev',
159
- audience: 'https://org.cloud.noodleseed.dev/app/mcp',
159
+ audience: 'noodleseed-customer-records-prod',
160
160
  routing: {
161
161
  endpoints: {
162
162
  customer_api: { claim: 'tenant.api_base_url' },
@@ -287,7 +287,7 @@ export async function tokenEndpoint(req: Request): Promise<Response> {
287
287
  }
288
288
  ```
289
289
 
290
- Diagnose statically with `noodle auth doctor`; set a short-lived real customer token only in `NOODLE_CUSTOMER_TOKEN` and add `--live --org <org> --app <app> --env <env>` to perform one exchange per delegated binding without invoking a business tool. Common failures include structured `credential_unavailable` reasons such as `caller_identity_not_customer`. Direct/federated OIDC verification assigns the customer identity at the trusted verifier boundary; never ask an IdP to mint a Noodle-specific classification claim.
290
+ Diagnose statically with `noodle auth doctor`; set a short-lived real customer token only in `NOODLE_CUSTOMER_TOKEN` and add `--live --org <org> --app <app> --env <env>` to perform one exchange per delegated binding without invoking a business tool. Add `--version <version>` to test that exact pinned MCP resource. Common failures include structured `credential_unavailable` reasons such as `caller_identity_not_customer`. Direct/federated OIDC verification assigns the customer identity at the trusted verifier boundary; never ask an IdP to mint a Noodle-specific classification claim.
291
291
 
292
292
  ## Design tools for the model
293
293
 
@@ -23,6 +23,7 @@ Establish only the inputs needed for the requested stopping point. Follow `refer
23
23
  2. **Define the product contract.** For each job, write the user phrase, the intent-shaped tool or resource, its minimal typed input, the useful output, read/write effect, and backing operation. Design for user intent, not a 1:1 API endpoint wrapper.
24
24
  3. **Choose the smallest implementation.** Use native tools, resources, or prompts for local/static behavior; add a connector only when external data or actions are required. Keep response output small and model-readable.
25
25
  4. **Author in TypeScript.** Follow `references/authoring-workflow.md` for connector and flow patterns, `references/tool-design.md` for the model-facing tool surface, and `references/sdk-surface.md` for exact builders. These are this route’s complete canonical support set; use the router lookup catalog only when observed evidence names a different concern.
26
+ MCP protocol versions are platform-owned and negotiated automatically at the serving endpoint. Do not add protocol-version settings to server options, `noodle.json`, app manifests, or deployment configuration.
26
27
  5. **Validate and repair.** Run `noodle validate --json`. Parse `error.errors[]`, repair the cited `path`, and rerun validation. Consult the lookup catalog only for the specific reported error code; do not open another reference speculatively.
27
28
  6. **Run the local smoke.** After validation succeeds, run `noodle test --json` and repair any failure at that evidence layer.
28
29
  7. **Prove external behavior.** For connector-backed reads, set credentials through the effective local target and run a safe representative `noodle tools call`. Confirm populated mapped fields from real output, not merely successful registration.
@@ -3,7 +3,7 @@ name: reporting-noodle-feedback
3
3
  description: "Use when a Noodle Seed bug, misleading instruction, missing capability, or concrete product improvement should be proposed to the user."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:0f404109f4845683 -->
6
+ <!-- noodle-skill version:0.57.0 hash:0f404109f4845683 -->
7
7
 
8
8
  # reporting-noodle-feedback
9
9
 
@@ -3,7 +3,7 @@ name: verifying-mcp-delivery
3
3
  description: "Use when proving a Noodle Seed MCP project works at a named compile, local, connector, App, host, deployment, or production evidence level."
4
4
  ---
5
5
 
6
- <!-- noodle-skill version:0.56.0 hash:6ef6ef551e26b78e -->
6
+ <!-- noodle-skill version:0.57.0 hash:6ef6ef551e26b78e -->
7
7
 
8
8
  # verifying-mcp-delivery
9
9