@noodleseed/agent-kit 0.78.0 → 0.79.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.
- package/manifest.json +267 -267
- 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/creating-product-agent-guides/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 +17 -0
- package/skills/claude-code/examples/customer-auth/src/server.ts +55 -0
- package/skills/claude-code/examples/customer-auth/test/server.test.ts +17 -0
- 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/embedded-assistant.md +9 -0
- package/skills/claude-code/references/product-agent-guides.md +6 -2
- package/skills/claude-code/reporting-noodle-feedback/SKILL.md +1 -1
- package/skills/claude-code/verifying-mcp-delivery/SKILL.md +1 -1
- package/skills/claude-code/wrapping-existing-applications/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/creating-product-agent-guides/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 +17 -0
- package/skills/codex/examples/customer-auth/src/server.ts +55 -0
- package/skills/codex/examples/customer-auth/test/server.test.ts +17 -0
- package/skills/codex/executing-noodle-plans/SKILL.md +1 -1
- package/skills/codex/publishing-mcp-integrations/SKILL.md +1 -1
- package/skills/codex/references/embedded-assistant.md +9 -0
- package/skills/codex/references/product-agent-guides.md +6 -2
- package/skills/codex/reporting-noodle-feedback/SKILL.md +1 -1
- package/skills/codex/verifying-mcp-delivery/SKILL.md +1 -1
- package/skills/codex/wrapping-existing-applications/SKILL.md +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noodleseed/agent-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.79.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.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:13ddce01769caae4 -->
|
|
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.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:11523cb33b9473c0 -->
|
|
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.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:9fd67d4d24328e15 -->
|
|
7
7
|
|
|
8
8
|
# building-mcp-apps
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@ name: connecting-apis-to-mcp
|
|
|
3
3
|
description: "Use when all four API-evidence inputs exist—and only then: API base URL, authentication scheme, representative safe read, and observed response."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- noodle-skill version:0.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:21bbd3ec441ffd30 -->
|
|
7
7
|
|
|
8
8
|
# connecting-apis-to-mcp
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@ name: creating-product-agent-guides
|
|
|
3
3
|
description: "Use when a Noodle Seed MCP server needs a new or revised product agent guide, App Package skill, or explicit product-skill regeneration."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- noodle-skill version:0.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:0fa48a82fe836cf0 -->
|
|
7
7
|
|
|
8
8
|
# creating-product-agent-guides
|
|
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.
|
|
6
|
+
<!-- noodle-skill version:0.79.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.
|
|
6
|
+
<!-- noodle-skill version:0.79.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.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:78a6f181b61f92f1 -->
|
|
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.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:cc54a67f21c0ecdb -->
|
|
7
7
|
|
|
8
8
|
# embedding-mcp-assistants
|
|
9
9
|
|
|
@@ -23,6 +23,23 @@ The tools chain: `list_my_organizations` surfaces the `org_id`s the customer can
|
|
|
23
23
|
`list_org_apps` takes one of those ids, and `archive_org_app` accepts the selected app id. Tool code remains
|
|
24
24
|
independent of the selected origin.
|
|
25
25
|
|
|
26
|
+
The server also declares one typed `agentGuide` for those product workflows. The deployed embedded assistant
|
|
27
|
+
uses it automatically: each turn keeps only complete workflows supported by the verified session's roles,
|
|
28
|
+
scopes, and model-visible tools. An organization member can receive organization/app review guidance, while
|
|
29
|
+
only an administrator with `org_apps:write` receives the complete archive workflow and its confirmation
|
|
30
|
+
boundary. The guide stays server-side, so the Web Component, React renderer, headless hook, and public client
|
|
31
|
+
need no new option and receive no raw skill content. See
|
|
32
|
+
[using a product guide at runtime](https://docs.noodleseed.dev/docs/guides/product-agent-guides#use-the-guide-at-runtime)
|
|
33
|
+
for the public behavior guide.
|
|
34
|
+
|
|
35
|
+
A skill-aware external agent connected directly to the same tenant MCP URL receives the same
|
|
36
|
+
complete-workflow filtering through the modern draft MCP Skills extension. Members and administrators may
|
|
37
|
+
therefore receive different `SKILL.md` and MCP-surface bytes, each with matching caller-specific digests.
|
|
38
|
+
This reuses the configured customer OAuth boundary; it does not require a second skill installation or auth
|
|
39
|
+
system, and it is not a claim that every external host currently implements the draft extension. The
|
|
40
|
+
same [runtime guide](https://docs.noodleseed.dev/docs/guides/product-agent-guides#use-the-guide-at-runtime)
|
|
41
|
+
explains this preview boundary.
|
|
42
|
+
|
|
26
43
|
## Declare the customer endpoint
|
|
27
44
|
|
|
28
45
|
`customerEndpoint` names one private routing authority and bounds the origins an IdP may select:
|
|
@@ -70,6 +70,60 @@ const noodleseedApi = connector('noodleseed_app_api')
|
|
|
70
70
|
},
|
|
71
71
|
});
|
|
72
72
|
|
|
73
|
+
const CUSTOMER_AUTH_AGENT_GUIDE = {
|
|
74
|
+
description:
|
|
75
|
+
'Use the signed-in customer context to discover organizations, review their Noodle Seed apps, and archive a selected app when authorized.',
|
|
76
|
+
useWhen: [
|
|
77
|
+
'A signed-in customer asks which organizations or apps they can access.',
|
|
78
|
+
'An organization administrator asks to archive one selected app.',
|
|
79
|
+
],
|
|
80
|
+
workflows: [
|
|
81
|
+
{
|
|
82
|
+
id: 'find_organizations',
|
|
83
|
+
title: 'Find the customer organizations',
|
|
84
|
+
intent: 'Ground later organization-scoped work in the verified customer membership.',
|
|
85
|
+
steps: [
|
|
86
|
+
{
|
|
87
|
+
capability: { kind: 'tool', name: 'list_my_organizations' },
|
|
88
|
+
guidance: 'Use an organization identifier returned by this read in later steps.',
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: 'review_organization_apps',
|
|
94
|
+
title: 'Review apps in one organization',
|
|
95
|
+
steps: [
|
|
96
|
+
{ capability: { kind: 'tool', name: 'list_my_organizations' } },
|
|
97
|
+
{
|
|
98
|
+
capability: { kind: 'tool', name: 'list_org_apps' },
|
|
99
|
+
guidance: 'List apps only for an organization returned for the signed-in customer.',
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
id: 'archive_organization_app',
|
|
105
|
+
title: 'Archive one organization app',
|
|
106
|
+
steps: [
|
|
107
|
+
{ capability: { kind: 'tool', name: 'list_my_organizations' } },
|
|
108
|
+
{ capability: { kind: 'tool', name: 'list_org_apps' } },
|
|
109
|
+
{
|
|
110
|
+
capability: { kind: 'tool', name: 'archive_org_app' },
|
|
111
|
+
guidance: 'Archive only the exact app the customer selected after confirmation.',
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
boundaries: [
|
|
117
|
+
'Never infer an organization or app identifier that was not returned for the signed-in customer.',
|
|
118
|
+
'Never claim an app was archived until the confirmed action succeeds.',
|
|
119
|
+
],
|
|
120
|
+
examples: [
|
|
121
|
+
{ prompt: 'Which organizations can I access?', workflow: 'find_organizations' },
|
|
122
|
+
{ prompt: 'Show me the apps in this organization.', workflow: 'review_organization_apps' },
|
|
123
|
+
{ prompt: 'Archive the app I selected.', workflow: 'archive_organization_app' },
|
|
124
|
+
],
|
|
125
|
+
} as const;
|
|
126
|
+
|
|
73
127
|
export default server(
|
|
74
128
|
'noodleseed_customer_auth',
|
|
75
129
|
{
|
|
@@ -87,6 +141,7 @@ export default server(
|
|
|
87
141
|
},
|
|
88
142
|
},
|
|
89
143
|
use: { app_api: noodleseedApi },
|
|
144
|
+
agentGuide: CUSTOMER_AUTH_AGENT_GUIDE,
|
|
90
145
|
interactions: { confirmationFallback: 'host' },
|
|
91
146
|
auth: customerAuth.oidc({
|
|
92
147
|
issuer: 'https://id.noodleseed.dev',
|
|
@@ -42,6 +42,23 @@ describe('customer-auth example', () => {
|
|
|
42
42
|
},
|
|
43
43
|
});
|
|
44
44
|
expect(manifest.server.interactions).toEqual({ confirmationFallback: 'host' });
|
|
45
|
+
expect(manifest.server.agentGuide?.workflows.map((workflow) => workflow.id)).toEqual([
|
|
46
|
+
'find_organizations',
|
|
47
|
+
'review_organization_apps',
|
|
48
|
+
'archive_organization_app',
|
|
49
|
+
]);
|
|
50
|
+
expect(
|
|
51
|
+
manifest.server.agentGuide?.workflows.find(
|
|
52
|
+
(workflow) => workflow.id === 'archive_organization_app',
|
|
53
|
+
)?.steps,
|
|
54
|
+
).toEqual([
|
|
55
|
+
{ capability: { kind: 'tool', name: 'list_my_organizations' } },
|
|
56
|
+
{ capability: { kind: 'tool', name: 'list_org_apps' } },
|
|
57
|
+
{
|
|
58
|
+
capability: { kind: 'tool', name: 'archive_org_app' },
|
|
59
|
+
guidance: 'Archive only the exact app the customer selected after confirmation.',
|
|
60
|
+
},
|
|
61
|
+
]);
|
|
45
62
|
const catalog = app.toConnectorCatalog();
|
|
46
63
|
expect(catalog?.connectors).toHaveLength(1);
|
|
47
64
|
expect(catalog?.connectors[0]?.http).toMatchObject({
|
|
@@ -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.
|
|
6
|
+
<!-- noodle-skill version:0.79.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.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:efffbf82007f935d -->
|
|
7
7
|
|
|
8
8
|
# publishing-mcp-integrations
|
|
9
9
|
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
- Architecture
|
|
6
6
|
- Choose the host experience
|
|
7
7
|
- Author and validate
|
|
8
|
+
- Product workflow guidance
|
|
8
9
|
- Customize the presentation
|
|
9
10
|
- Configure and deploy
|
|
10
11
|
- Access modes and customer auth
|
|
@@ -61,6 +62,14 @@ assistant: embeddedAssistant({
|
|
|
61
62
|
|
|
62
63
|
Origins are exact: scheme, host, and optional port, with no path, trailing slash, or wildcard. Production origins must be HTTPS; plain HTTP is accepted only for loopback development origins (`http://localhost:<port>`, `http://127.0.0.1:<port>`). `noodle dev` serves the MCP project, not the embedding SaaS.
|
|
63
64
|
|
|
65
|
+
## Product workflow guidance
|
|
66
|
+
|
|
67
|
+
Decide whether the product needs `agentGuide` even when the builder does not name it. Multiple permission-gated capabilities, ordered multi-tool work, product-specific grounding, and consequential boundaries are strong signals. Keep `server.instructions` concise and global; put workflow triggers, ordering, and permission-specific prose in the guide. Global guide description, use cases, and boundaries must be safe for every exposed assistant surface.
|
|
68
|
+
|
|
69
|
+
After deployment, the embedded assistant automatically projects the typed guide into compact server-side model context on every turn. It keeps only complete workflows supported by that session surface and by the exact model-visible tools allowed for the backend-verified roles and scopes. A member and an administrator can therefore receive different workflow guidance from the same deployment. Mixed anonymous sessions retain only the explicitly selected surface and sign-in workflows; the next turn is reprojected after successful elevation.
|
|
70
|
+
|
|
71
|
+
No renderer prop, browser package field, or second skill installation is required. The managed Web Component, React component, headless hook, and public client all share the same server-side turn path. Raw guide content and generated skill files never enter session responses or browser events. Missing, incompatible, empty, or oversize guidance is omitted without changing the tool surface or breaking an otherwise valid turn.
|
|
72
|
+
|
|
64
73
|
### Surfaces: one assistant, every front door
|
|
65
74
|
|
|
66
75
|
A product usually has more than one front door — a marketing site and a signed-in app. One assistant (one brand, one model, one UI) projects onto both; pass `access` an array and each surface owns its own origins and allowlist:
|
|
@@ -20,7 +20,7 @@ Make the judgment from the user’s stated outcome and grounded product evidence
|
|
|
20
20
|
|
|
21
21
|
Noodle workflow skills teach a coding agent how to build and operate Noodle projects. The generated app product skill is team-local guidance for using one product. A marketplace plugin is a separate host distribution bundle.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Host-neutral distribution metadata, available target adapters, local exports, and deployment-bound archives are separate projections from the guide; use the live command catalog for exact target availability, and never claim that an export submitted or published itself. The deployed embedded assistant automatically consumes a compact authorization-aware guide projection. A direct external agent connected to the tenant MCP URL can discover the deployment skill through the modern draft MCP Skills extension when its host supports that extension; this is protocol delivery, not evidence of host support or marketplace installation.
|
|
24
24
|
|
|
25
25
|
## Creation workflow
|
|
26
26
|
|
|
@@ -38,7 +38,11 @@ The guide contains `description`, `useWhen`, named `workflows`, optional `bounda
|
|
|
38
38
|
|
|
39
39
|
Keep identifiers within 200 characters and prose within 4,000 characters. A guide has at most 32 `useWhen` entries, 32 workflows, 64 steps per workflow, 64 boundaries, and 64 examples. The compiler rejects an App Package whose bounded derived MCP surface would still exceed its artifact ceiling.
|
|
40
40
|
|
|
41
|
-
Use `server.instructions` for
|
|
41
|
+
Use `server.instructions` for concise global behavior that applies to every turn and caller. Put product workflow ordering, triggers, and workflow-specific permission guidance in `agentGuide`; global description, `useWhen`, and boundaries must be safe for every assistant surface. Noodle-owned workflow skills teach how to build and operate Noodle projects; a product guide teaches agents how to use this one deployed product. Compilation validates references and produces an App Package sibling while the RuntimeArtifact deliberately omits guide prose.
|
|
42
|
+
|
|
43
|
+
For a deployed embedded assistant, Noodle automatically derives bounded server-side model guidance from that App Package. Each turn retains only complete workflows supported by the session surface and the exact model-visible tools allowed for the verified roles and scopes. All managed, React, headless, and public-client renderers benefit without a new browser option; raw guide and skill files never enter the browser response. An unavailable or oversize projection is omitted without widening tools or failing the turn.
|
|
44
|
+
|
|
45
|
+
For a direct modern MCP connection, use the deployment tenant MCP URL and its existing OAuth flow; do not install a second skill or create another auth integration. `skills/list`, `skills/get`, and the related `resources/read` files are rebuilt from the same deployment package for the verified caller. Only complete workflows backed by currently authorized, model-visible tools and available resources or prompts survive; app-only helpers and forbidden tools stay out of both the workflow body and MCP-surface reference. The response is private with zero freshness, and each file has a caller-specific SHA-256 digest. A role or scope change can therefore change the next response and its digest, allowing a supporting host to require fresh approval. Legacy MCP clients and modern hosts without Skills support continue to use the ordinary capability surface.
|
|
42
46
|
|
|
43
47
|
## Local lifecycle
|
|
44
48
|
|
|
@@ -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.
|
|
6
|
+
<!-- noodle-skill version:0.79.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.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:6ef6ef551e26b78e -->
|
|
7
7
|
|
|
8
8
|
# verifying-mcp-delivery
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@ name: wrapping-existing-applications
|
|
|
3
3
|
description: "Use when an existing application has no stable usable API and needs a read-only, identity-first Noodle Seed integration plan before implementation."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- noodle-skill version:0.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:eccc3c158dcafba8 -->
|
|
7
7
|
|
|
8
8
|
# wrapping-existing-applications
|
|
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.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:13ddce01769caae4 -->
|
|
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.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:11523cb33b9473c0 -->
|
|
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.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:9fd67d4d24328e15 -->
|
|
7
7
|
|
|
8
8
|
# building-mcp-apps
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@ name: connecting-apis-to-mcp
|
|
|
3
3
|
description: "Use when all four API-evidence inputs exist—and only then: API base URL, authentication scheme, representative safe read, and observed response."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- noodle-skill version:0.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:21bbd3ec441ffd30 -->
|
|
7
7
|
|
|
8
8
|
# connecting-apis-to-mcp
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@ name: creating-product-agent-guides
|
|
|
3
3
|
description: "Use when a Noodle Seed MCP server needs a new or revised product agent guide, App Package skill, or explicit product-skill regeneration."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- noodle-skill version:0.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:0fa48a82fe836cf0 -->
|
|
7
7
|
|
|
8
8
|
# creating-product-agent-guides
|
|
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.
|
|
6
|
+
<!-- noodle-skill version:0.79.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.
|
|
6
|
+
<!-- noodle-skill version:0.79.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.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:78a6f181b61f92f1 -->
|
|
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.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:cc54a67f21c0ecdb -->
|
|
7
7
|
|
|
8
8
|
# embedding-mcp-assistants
|
|
9
9
|
|
|
@@ -23,6 +23,23 @@ The tools chain: `list_my_organizations` surfaces the `org_id`s the customer can
|
|
|
23
23
|
`list_org_apps` takes one of those ids, and `archive_org_app` accepts the selected app id. Tool code remains
|
|
24
24
|
independent of the selected origin.
|
|
25
25
|
|
|
26
|
+
The server also declares one typed `agentGuide` for those product workflows. The deployed embedded assistant
|
|
27
|
+
uses it automatically: each turn keeps only complete workflows supported by the verified session's roles,
|
|
28
|
+
scopes, and model-visible tools. An organization member can receive organization/app review guidance, while
|
|
29
|
+
only an administrator with `org_apps:write` receives the complete archive workflow and its confirmation
|
|
30
|
+
boundary. The guide stays server-side, so the Web Component, React renderer, headless hook, and public client
|
|
31
|
+
need no new option and receive no raw skill content. See
|
|
32
|
+
[using a product guide at runtime](https://docs.noodleseed.dev/docs/guides/product-agent-guides#use-the-guide-at-runtime)
|
|
33
|
+
for the public behavior guide.
|
|
34
|
+
|
|
35
|
+
A skill-aware external agent connected directly to the same tenant MCP URL receives the same
|
|
36
|
+
complete-workflow filtering through the modern draft MCP Skills extension. Members and administrators may
|
|
37
|
+
therefore receive different `SKILL.md` and MCP-surface bytes, each with matching caller-specific digests.
|
|
38
|
+
This reuses the configured customer OAuth boundary; it does not require a second skill installation or auth
|
|
39
|
+
system, and it is not a claim that every external host currently implements the draft extension. The
|
|
40
|
+
same [runtime guide](https://docs.noodleseed.dev/docs/guides/product-agent-guides#use-the-guide-at-runtime)
|
|
41
|
+
explains this preview boundary.
|
|
42
|
+
|
|
26
43
|
## Declare the customer endpoint
|
|
27
44
|
|
|
28
45
|
`customerEndpoint` names one private routing authority and bounds the origins an IdP may select:
|
|
@@ -70,6 +70,60 @@ const noodleseedApi = connector('noodleseed_app_api')
|
|
|
70
70
|
},
|
|
71
71
|
});
|
|
72
72
|
|
|
73
|
+
const CUSTOMER_AUTH_AGENT_GUIDE = {
|
|
74
|
+
description:
|
|
75
|
+
'Use the signed-in customer context to discover organizations, review their Noodle Seed apps, and archive a selected app when authorized.',
|
|
76
|
+
useWhen: [
|
|
77
|
+
'A signed-in customer asks which organizations or apps they can access.',
|
|
78
|
+
'An organization administrator asks to archive one selected app.',
|
|
79
|
+
],
|
|
80
|
+
workflows: [
|
|
81
|
+
{
|
|
82
|
+
id: 'find_organizations',
|
|
83
|
+
title: 'Find the customer organizations',
|
|
84
|
+
intent: 'Ground later organization-scoped work in the verified customer membership.',
|
|
85
|
+
steps: [
|
|
86
|
+
{
|
|
87
|
+
capability: { kind: 'tool', name: 'list_my_organizations' },
|
|
88
|
+
guidance: 'Use an organization identifier returned by this read in later steps.',
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: 'review_organization_apps',
|
|
94
|
+
title: 'Review apps in one organization',
|
|
95
|
+
steps: [
|
|
96
|
+
{ capability: { kind: 'tool', name: 'list_my_organizations' } },
|
|
97
|
+
{
|
|
98
|
+
capability: { kind: 'tool', name: 'list_org_apps' },
|
|
99
|
+
guidance: 'List apps only for an organization returned for the signed-in customer.',
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
id: 'archive_organization_app',
|
|
105
|
+
title: 'Archive one organization app',
|
|
106
|
+
steps: [
|
|
107
|
+
{ capability: { kind: 'tool', name: 'list_my_organizations' } },
|
|
108
|
+
{ capability: { kind: 'tool', name: 'list_org_apps' } },
|
|
109
|
+
{
|
|
110
|
+
capability: { kind: 'tool', name: 'archive_org_app' },
|
|
111
|
+
guidance: 'Archive only the exact app the customer selected after confirmation.',
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
boundaries: [
|
|
117
|
+
'Never infer an organization or app identifier that was not returned for the signed-in customer.',
|
|
118
|
+
'Never claim an app was archived until the confirmed action succeeds.',
|
|
119
|
+
],
|
|
120
|
+
examples: [
|
|
121
|
+
{ prompt: 'Which organizations can I access?', workflow: 'find_organizations' },
|
|
122
|
+
{ prompt: 'Show me the apps in this organization.', workflow: 'review_organization_apps' },
|
|
123
|
+
{ prompt: 'Archive the app I selected.', workflow: 'archive_organization_app' },
|
|
124
|
+
],
|
|
125
|
+
} as const;
|
|
126
|
+
|
|
73
127
|
export default server(
|
|
74
128
|
'noodleseed_customer_auth',
|
|
75
129
|
{
|
|
@@ -87,6 +141,7 @@ export default server(
|
|
|
87
141
|
},
|
|
88
142
|
},
|
|
89
143
|
use: { app_api: noodleseedApi },
|
|
144
|
+
agentGuide: CUSTOMER_AUTH_AGENT_GUIDE,
|
|
90
145
|
interactions: { confirmationFallback: 'host' },
|
|
91
146
|
auth: customerAuth.oidc({
|
|
92
147
|
issuer: 'https://id.noodleseed.dev',
|
|
@@ -42,6 +42,23 @@ describe('customer-auth example', () => {
|
|
|
42
42
|
},
|
|
43
43
|
});
|
|
44
44
|
expect(manifest.server.interactions).toEqual({ confirmationFallback: 'host' });
|
|
45
|
+
expect(manifest.server.agentGuide?.workflows.map((workflow) => workflow.id)).toEqual([
|
|
46
|
+
'find_organizations',
|
|
47
|
+
'review_organization_apps',
|
|
48
|
+
'archive_organization_app',
|
|
49
|
+
]);
|
|
50
|
+
expect(
|
|
51
|
+
manifest.server.agentGuide?.workflows.find(
|
|
52
|
+
(workflow) => workflow.id === 'archive_organization_app',
|
|
53
|
+
)?.steps,
|
|
54
|
+
).toEqual([
|
|
55
|
+
{ capability: { kind: 'tool', name: 'list_my_organizations' } },
|
|
56
|
+
{ capability: { kind: 'tool', name: 'list_org_apps' } },
|
|
57
|
+
{
|
|
58
|
+
capability: { kind: 'tool', name: 'archive_org_app' },
|
|
59
|
+
guidance: 'Archive only the exact app the customer selected after confirmation.',
|
|
60
|
+
},
|
|
61
|
+
]);
|
|
45
62
|
const catalog = app.toConnectorCatalog();
|
|
46
63
|
expect(catalog?.connectors).toHaveLength(1);
|
|
47
64
|
expect(catalog?.connectors[0]?.http).toMatchObject({
|
|
@@ -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.
|
|
6
|
+
<!-- noodle-skill version:0.79.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.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:efffbf82007f935d -->
|
|
7
7
|
|
|
8
8
|
# publishing-mcp-integrations
|
|
9
9
|
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
- Architecture
|
|
6
6
|
- Choose the host experience
|
|
7
7
|
- Author and validate
|
|
8
|
+
- Product workflow guidance
|
|
8
9
|
- Customize the presentation
|
|
9
10
|
- Configure and deploy
|
|
10
11
|
- Access modes and customer auth
|
|
@@ -61,6 +62,14 @@ assistant: embeddedAssistant({
|
|
|
61
62
|
|
|
62
63
|
Origins are exact: scheme, host, and optional port, with no path, trailing slash, or wildcard. Production origins must be HTTPS; plain HTTP is accepted only for loopback development origins (`http://localhost:<port>`, `http://127.0.0.1:<port>`). `noodle dev` serves the MCP project, not the embedding SaaS.
|
|
63
64
|
|
|
65
|
+
## Product workflow guidance
|
|
66
|
+
|
|
67
|
+
Decide whether the product needs `agentGuide` even when the builder does not name it. Multiple permission-gated capabilities, ordered multi-tool work, product-specific grounding, and consequential boundaries are strong signals. Keep `server.instructions` concise and global; put workflow triggers, ordering, and permission-specific prose in the guide. Global guide description, use cases, and boundaries must be safe for every exposed assistant surface.
|
|
68
|
+
|
|
69
|
+
After deployment, the embedded assistant automatically projects the typed guide into compact server-side model context on every turn. It keeps only complete workflows supported by that session surface and by the exact model-visible tools allowed for the backend-verified roles and scopes. A member and an administrator can therefore receive different workflow guidance from the same deployment. Mixed anonymous sessions retain only the explicitly selected surface and sign-in workflows; the next turn is reprojected after successful elevation.
|
|
70
|
+
|
|
71
|
+
No renderer prop, browser package field, or second skill installation is required. The managed Web Component, React component, headless hook, and public client all share the same server-side turn path. Raw guide content and generated skill files never enter session responses or browser events. Missing, incompatible, empty, or oversize guidance is omitted without changing the tool surface or breaking an otherwise valid turn.
|
|
72
|
+
|
|
64
73
|
### Surfaces: one assistant, every front door
|
|
65
74
|
|
|
66
75
|
A product usually has more than one front door — a marketing site and a signed-in app. One assistant (one brand, one model, one UI) projects onto both; pass `access` an array and each surface owns its own origins and allowlist:
|
|
@@ -20,7 +20,7 @@ Make the judgment from the user’s stated outcome and grounded product evidence
|
|
|
20
20
|
|
|
21
21
|
Noodle workflow skills teach a coding agent how to build and operate Noodle projects. The generated app product skill is team-local guidance for using one product. A marketplace plugin is a separate host distribution bundle.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Host-neutral distribution metadata, available target adapters, local exports, and deployment-bound archives are separate projections from the guide; use the live command catalog for exact target availability, and never claim that an export submitted or published itself. The deployed embedded assistant automatically consumes a compact authorization-aware guide projection. A direct external agent connected to the tenant MCP URL can discover the deployment skill through the modern draft MCP Skills extension when its host supports that extension; this is protocol delivery, not evidence of host support or marketplace installation.
|
|
24
24
|
|
|
25
25
|
## Creation workflow
|
|
26
26
|
|
|
@@ -38,7 +38,11 @@ The guide contains `description`, `useWhen`, named `workflows`, optional `bounda
|
|
|
38
38
|
|
|
39
39
|
Keep identifiers within 200 characters and prose within 4,000 characters. A guide has at most 32 `useWhen` entries, 32 workflows, 64 steps per workflow, 64 boundaries, and 64 examples. The compiler rejects an App Package whose bounded derived MCP surface would still exceed its artifact ceiling.
|
|
40
40
|
|
|
41
|
-
Use `server.instructions` for
|
|
41
|
+
Use `server.instructions` for concise global behavior that applies to every turn and caller. Put product workflow ordering, triggers, and workflow-specific permission guidance in `agentGuide`; global description, `useWhen`, and boundaries must be safe for every assistant surface. Noodle-owned workflow skills teach how to build and operate Noodle projects; a product guide teaches agents how to use this one deployed product. Compilation validates references and produces an App Package sibling while the RuntimeArtifact deliberately omits guide prose.
|
|
42
|
+
|
|
43
|
+
For a deployed embedded assistant, Noodle automatically derives bounded server-side model guidance from that App Package. Each turn retains only complete workflows supported by the session surface and the exact model-visible tools allowed for the verified roles and scopes. All managed, React, headless, and public-client renderers benefit without a new browser option; raw guide and skill files never enter the browser response. An unavailable or oversize projection is omitted without widening tools or failing the turn.
|
|
44
|
+
|
|
45
|
+
For a direct modern MCP connection, use the deployment tenant MCP URL and its existing OAuth flow; do not install a second skill or create another auth integration. `skills/list`, `skills/get`, and the related `resources/read` files are rebuilt from the same deployment package for the verified caller. Only complete workflows backed by currently authorized, model-visible tools and available resources or prompts survive; app-only helpers and forbidden tools stay out of both the workflow body and MCP-surface reference. The response is private with zero freshness, and each file has a caller-specific SHA-256 digest. A role or scope change can therefore change the next response and its digest, allowing a supporting host to require fresh approval. Legacy MCP clients and modern hosts without Skills support continue to use the ordinary capability surface.
|
|
42
46
|
|
|
43
47
|
## Local lifecycle
|
|
44
48
|
|
|
@@ -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.
|
|
6
|
+
<!-- noodle-skill version:0.79.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.
|
|
6
|
+
<!-- noodle-skill version:0.79.0 hash:6ef6ef551e26b78e -->
|
|
7
7
|
|
|
8
8
|
# verifying-mcp-delivery
|
|
9
9
|
|