@noodleseed/agent-kit 0.56.0 → 0.56.1
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.
- package/manifest.json +245 -245
- package/package.json +1 -1
- package/skills/claude-code/SKILL.md +1 -1
- package/skills/claude-code/authoring-mcp-servers/SKILL.md +1 -1
- package/skills/claude-code/building-mcp-apps/SKILL.md +1 -1
- package/skills/claude-code/connecting-apis-to-mcp/SKILL.md +1 -1
- package/skills/claude-code/debugging-mcp-delivery/SKILL.md +1 -1
- package/skills/claude-code/deploying-mcp-services/SKILL.md +1 -1
- package/skills/claude-code/designing-mcp-products/SKILL.md +1 -1
- package/skills/claude-code/embedding-mcp-assistants/SKILL.md +1 -1
- package/skills/claude-code/examples/customer-auth/README.md +14 -11
- package/skills/claude-code/examples/customer-auth/src/server.ts +1 -1
- package/skills/claude-code/examples/customer-auth/test/server.test.ts +1 -1
- package/skills/claude-code/executing-noodle-plans/SKILL.md +1 -1
- package/skills/claude-code/publishing-mcp-integrations/SKILL.md +1 -1
- package/skills/claude-code/references/authoring-workflow.md +3 -3
- package/skills/claude-code/reporting-noodle-feedback/SKILL.md +1 -1
- package/skills/claude-code/verifying-mcp-delivery/SKILL.md +1 -1
- package/skills/codex/SKILL.md +1 -1
- package/skills/codex/authoring-mcp-servers/SKILL.md +1 -1
- package/skills/codex/building-mcp-apps/SKILL.md +1 -1
- package/skills/codex/connecting-apis-to-mcp/SKILL.md +1 -1
- package/skills/codex/debugging-mcp-delivery/SKILL.md +1 -1
- package/skills/codex/deploying-mcp-services/SKILL.md +1 -1
- package/skills/codex/designing-mcp-products/SKILL.md +1 -1
- package/skills/codex/embedding-mcp-assistants/SKILL.md +1 -1
- package/skills/codex/examples/customer-auth/README.md +14 -11
- package/skills/codex/examples/customer-auth/src/server.ts +1 -1
- package/skills/codex/examples/customer-auth/test/server.test.ts +1 -1
- package/skills/codex/executing-noodle-plans/SKILL.md +1 -1
- package/skills/codex/publishing-mcp-integrations/SKILL.md +1 -1
- package/skills/codex/references/authoring-workflow.md +3 -3
- package/skills/codex/reporting-noodle-feedback/SKILL.md +1 -1
- 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.
|
|
3
|
+
"version": "0.56.1",
|
|
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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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: '
|
|
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: '
|
|
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: '
|
|
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
|
|
117
|
-
into private request state, applies its policy, and
|
|
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.
|
|
163
|
-
|
|
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
|
|
532
|
-
routing claims. Public caller identity contains the user/role/scope
|
|
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: '
|
|
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: '
|
|
29
|
+
audience: 'noodleseed-customer-auth-prod',
|
|
30
30
|
claims: {
|
|
31
31
|
id: 'sub',
|
|
32
32
|
email: 'email',
|
|
@@ -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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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"]`.
|
|
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: '
|
|
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
|
|
|
@@ -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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 hash:6ef6ef551e26b78e -->
|
|
7
7
|
|
|
8
8
|
# verifying-mcp-delivery
|
|
9
9
|
|
package/skills/codex/SKILL.md
CHANGED
|
@@ -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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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: '
|
|
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: '
|
|
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: '
|
|
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
|
|
117
|
-
into private request state, applies its policy, and
|
|
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.
|
|
163
|
-
|
|
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
|
|
532
|
-
routing claims. Public caller identity contains the user/role/scope
|
|
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: '
|
|
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: '
|
|
29
|
+
audience: 'noodleseed-customer-auth-prod',
|
|
30
30
|
claims: {
|
|
31
31
|
id: 'sub',
|
|
32
32
|
email: 'email',
|
|
@@ -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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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"]`.
|
|
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: '
|
|
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
|
|
|
@@ -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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 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.
|
|
6
|
+
<!-- noodle-skill version:0.56.1 hash:6ef6ef551e26b78e -->
|
|
7
7
|
|
|
8
8
|
# verifying-mcp-delivery
|
|
9
9
|
|