@noodleseed/agent-kit 0.62.1 → 0.63.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.
Files changed (42) hide show
  1. package/manifest.json +285 -253
  2. package/package.json +1 -1
  3. package/skills/claude-code/SKILL.md +2 -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/acme-tasks/src/agent-guide.ts +53 -0
  12. package/skills/claude-code/examples/acme-tasks/src/server.ts +2 -0
  13. package/skills/claude-code/examples/acme-tasks/test/server.test.ts +29 -0
  14. package/skills/claude-code/examples/customer-auth/README.md +7 -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 +2 -0
  18. package/skills/claude-code/references/compile-errors.md +8 -1
  19. package/skills/claude-code/references/product-agent-guides.md +11 -0
  20. package/skills/claude-code/reporting-noodle-feedback/SKILL.md +1 -1
  21. package/skills/claude-code/verifying-mcp-delivery/SKILL.md +1 -1
  22. package/skills/claude-code/wrapping-existing-applications/SKILL.md +1 -1
  23. package/skills/codex/SKILL.md +2 -1
  24. package/skills/codex/authoring-mcp-servers/SKILL.md +1 -1
  25. package/skills/codex/building-mcp-apps/SKILL.md +1 -1
  26. package/skills/codex/connecting-apis-to-mcp/SKILL.md +1 -1
  27. package/skills/codex/debugging-mcp-delivery/SKILL.md +1 -1
  28. package/skills/codex/deploying-mcp-services/SKILL.md +1 -1
  29. package/skills/codex/designing-mcp-products/SKILL.md +1 -1
  30. package/skills/codex/embedding-mcp-assistants/SKILL.md +1 -1
  31. package/skills/codex/examples/acme-tasks/src/agent-guide.ts +53 -0
  32. package/skills/codex/examples/acme-tasks/src/server.ts +2 -0
  33. package/skills/codex/examples/acme-tasks/test/server.test.ts +29 -0
  34. package/skills/codex/examples/customer-auth/README.md +7 -0
  35. package/skills/codex/executing-noodle-plans/SKILL.md +1 -1
  36. package/skills/codex/publishing-mcp-integrations/SKILL.md +1 -1
  37. package/skills/codex/references/authoring-workflow.md +2 -0
  38. package/skills/codex/references/compile-errors.md +8 -1
  39. package/skills/codex/references/product-agent-guides.md +11 -0
  40. package/skills/codex/reporting-noodle-feedback/SKILL.md +1 -1
  41. package/skills/codex/verifying-mcp-delivery/SKILL.md +1 -1
  42. 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.62.1",
3
+ "version": "0.63.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.62.1 hash:d83543258e5ca5ff -->
6
+ <!-- noodle-skill version:0.63.1 hash:88e3ae21d02f2fe7 -->
7
7
 
8
8
  # Noodle Seed
9
9
 
@@ -56,6 +56,7 @@ Inside the installed plugin, perform mapped steps with `noodle-readiness` tools
56
56
  This is a lookup catalog, not a discovery checklist. Return here only when the selected primary route names a missing technical detail:
57
57
 
58
58
  - `references/agent-contract.md` — the `--json` envelope, exit codes, and the three output modes.
59
+ - `references/product-agent-guides.md` — author one host-neutral guide for a product MCP surface.
59
60
  - `references/sdk-surface.md` — what to import from `@noodleseed/one` and which builder to use.
60
61
  - `references/cli-commands.md` — every `noodle` command, grouped by area.
61
62
  - `references/compile-errors.md` — fix `noodle validate` errors by code.
@@ -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.62.1 hash:0b2fd8c7e43fc69f -->
6
+ <!-- noodle-skill version:0.63.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.62.1 hash:f7fa54992c8d7692 -->
6
+ <!-- noodle-skill version:0.63.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 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.62.1 hash:21bbd3ec441ffd30 -->
6
+ <!-- noodle-skill version:0.63.1 hash:21bbd3ec441ffd30 -->
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.62.1 hash:aa715bae12041d7c -->
6
+ <!-- noodle-skill version:0.63.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.62.1 hash:93e735b7ffb45df1 -->
6
+ <!-- noodle-skill version:0.63.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.62.1 hash:76cce86729cffbee -->
6
+ <!-- noodle-skill version:0.63.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.62.1 hash:cc54a67f21c0ecdb -->
6
+ <!-- noodle-skill version:0.63.1 hash:cc54a67f21c0ecdb -->
7
7
 
8
8
  # embedding-mcp-assistants
9
9
 
@@ -0,0 +1,53 @@
1
+ import type { AgentGuideSource } from '@noodleseed/one';
2
+
3
+ /** Product guidance is authored once for the full Acme Tasks MCP surface. */
4
+ export const ACME_TASKS_AGENT_GUIDE = {
5
+ description: 'Use Acme Tasks to review, capture, prioritize, and complete the team task list.',
6
+ useWhen: [
7
+ 'The user asks about their Acme work items.',
8
+ 'The user wants to capture or finish an Acme task.',
9
+ ],
10
+ workflows: [
11
+ {
12
+ id: 'review_tasks',
13
+ title: 'Review today’s tasks',
14
+ intent: 'Ground the task list before taking action.',
15
+ steps: [
16
+ { capability: { kind: 'tool', name: 'list_today' } },
17
+ {
18
+ capability: { kind: 'tool', name: 'set_priority' },
19
+ guidance: 'Use only from the task-list app when reprioritizing.',
20
+ },
21
+ ],
22
+ },
23
+ {
24
+ id: 'capture_task',
25
+ title: 'Capture a task',
26
+ steps: [
27
+ {
28
+ capability: { kind: 'tool', name: 'add_task' },
29
+ guidance: 'Ground the new task title and priority exactly.',
30
+ },
31
+ ],
32
+ },
33
+ {
34
+ id: 'complete_task',
35
+ title: 'Complete a task',
36
+ steps: [
37
+ {
38
+ capability: { kind: 'tool', name: 'complete_task' },
39
+ guidance: 'Confirm the exact grounded task with the user before completion.',
40
+ },
41
+ ],
42
+ },
43
+ ],
44
+ boundaries: [
45
+ 'Never invent a task identifier.',
46
+ 'Ground writes in the exact task and confirm completion with the user.',
47
+ ],
48
+ examples: [
49
+ { prompt: 'What should I do today?', workflow: 'review_tasks' },
50
+ { prompt: 'Add a follow-up with the vendor.', workflow: 'capture_task' },
51
+ { prompt: 'Finish the vendor follow-up.', workflow: 'complete_task' },
52
+ ],
53
+ } as const satisfies AgentGuideSource;
@@ -1,4 +1,5 @@
1
1
  import { annotations, server, tool, z } from '@noodleseed/one';
2
+ import { ACME_TASKS_AGENT_GUIDE } from './agent-guide.js';
2
3
 
3
4
  // Acme Tasks is a fictional productivity app. It is a two-way (read + write) experience rather than a
4
5
  // top-of-funnel handoff: the top-3 prioritized user flows all complete in chat — Capture, Prioritize,
@@ -43,6 +44,7 @@ export default server(
43
44
  {
44
45
  title: 'Acme Tasks',
45
46
  version: '1.0.0',
47
+ agentGuide: ACME_TASKS_AGENT_GUIDE,
46
48
  // ChatGPT's stateless MCP lane cannot carry Noodle's standard confirmation form. Keep
47
49
  // confirm:true for capable/embedded hosts, but explicitly trust native host approval there.
48
50
  interactions: { confirmationFallback: 'host' },
@@ -24,8 +24,37 @@ describe('acme-tasks example', () => {
24
24
  const manifest = await app.toManifest();
25
25
  const completeTask = manifest.tools.find((candidate) => candidate.name === 'complete_task');
26
26
  const addTask = manifest.tools.find((candidate) => candidate.name === 'add_task');
27
+ const setPriority = manifest.tools.find((candidate) => candidate.name === 'set_priority');
27
28
 
28
29
  expect(completeTask?.annotations?.confirm).toBe(true);
29
30
  expect(addTask?.annotations).not.toHaveProperty('confirm');
31
+ expect(setPriority?.visibility).toEqual(['app']);
32
+ });
33
+
34
+ it('teaches its three product workflows through one host-neutral agent guide', async () => {
35
+ const manifest = await app.toManifest();
36
+ const guide = manifest.server.agentGuide;
37
+
38
+ expect(guide?.workflows.map((workflow) => workflow.id)).toEqual([
39
+ 'review_tasks',
40
+ 'capture_task',
41
+ 'complete_task',
42
+ ]);
43
+ expect(
44
+ guide?.workflows.flatMap((workflow) => workflow.steps.map((step) => step.capability.name)),
45
+ ).toEqual(expect.arrayContaining(['list_today', 'set_priority', 'add_task', 'complete_task']));
46
+ expect(
47
+ guide?.workflows
48
+ .find((workflow) => workflow.id === 'review_tasks')
49
+ ?.steps.map((step) => step.capability.name),
50
+ ).toContain('set_priority');
51
+ expect(
52
+ guide?.examples.every((example) =>
53
+ guide.workflows.some((workflow) => workflow.id === example.workflow),
54
+ ),
55
+ ).toBe(true);
56
+ expect(guide?.boundaries.some((boundary) => boundary.toLowerCase().includes('confirm'))).toBe(
57
+ true,
58
+ );
30
59
  });
31
60
  });
@@ -60,6 +60,13 @@ const api = connector('noodleseed_app_api')
60
60
  });
61
61
  ```
62
62
 
63
+ `delegatedTokenExchange` consumes a verified customer caller; an MCP access mode does not create one. The
64
+ server must declare `customerAuth.*(...)` or `embeddedAssistant(...)` so Noodle Seed can establish the caller
65
+ subject, issuer, and audience. Otherwise `noodle validate`, `noodle auth doctor`, and deploy fail early with
66
+ `delegated_token_exchange_identity_required`, before secrets are resolved or any connector egress. A
67
+ successful local Devtools exchange is not evidence that the hosted server has an identity source. Devtools
68
+ supplies a separate, loopback-only local identity context that is never accepted by hosted deployment.
69
+
63
70
  At both connector and operation level, auth must be omitted or use `delegatedTokenExchange`. The compiler
64
71
  validates the concrete connector definition emitted from TypeScript, including connector defaults and
65
72
  operation overrides, and reports the exact failing auth path and kind. Do not keep a bearer, API-key,
@@ -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.62.1 hash:6a9f132ddb79352e -->
6
+ <!-- noodle-skill version:0.63.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.62.1 hash:efffbf82007f935d -->
6
+ <!-- noodle-skill version:0.63.1 hash:efffbf82007f935d -->
7
7
 
8
8
  # publishing-mcp-integrations
9
9
 
@@ -230,6 +230,8 @@ Role values are trusted only from the explicitly configured claim path (or the p
230
230
 
231
231
  Use delegated connector auth when the downstream API must enforce its own per-user authorization — a shared service credential plus a forwarded user id would bypass it. Three shapes exist; pick by who owns the downstream:
232
232
 
233
+ `delegatedTokenExchange` consumes a verified customer caller; an MCP access mode does not create one. The server must declare `customerAuth.*(...)` or `embeddedAssistant(...)` so Noodle can establish the caller subject, issuer, and audience. Otherwise `noodle validate`, `noodle auth doctor`, and deploy fail early with `delegated_token_exchange_identity_required`, before secrets are resolved or any connector egress. A successful local Devtools exchange is not evidence that the hosted server has an identity source. Devtools supplies a separate, loopback-only local identity context that is never accepted by hosted deployment.
234
+
233
235
  - **`delegatedTokenExchange`** — your own API. The platform signs a short-lived, verifiable assertion of the signed-in user and exchanges it at a token endpoint you implement (RFC 8693). It works with verified customer OIDC identities and the built-in Firebase/Microsoft adapters; no per-user OAuth enrollment. Embedded-assistant sessions can bind customer-routed connectors when the authenticated embedding backend resolves each route from server-owned tenancy data and passes it during session exchange. Browser input, page context, session claims, and tool arguments cannot supply or override that private route authority.
234
236
  - **`delegatedOAuth` with `provider: "firebase" | "microsoft"`** — Noodle-managed bridge providers using stored per-user refresh tokens. Requires the matching `customerAuth` bridge; any other provider string is the compile error `unsupported_delegated_provider`.
235
237
  - **`delegatedSessionCookie`** — Firebase-managed session-cookie apps only; not a generic mechanism.
@@ -73,4 +73,11 @@ Run `noodle validate` (add `--json` for the machine-readable envelope, `--fix-pr
73
73
  | `customer_endpoint_policy_conflict` | Give every reachable declaration of this endpoint key one identical policy, or rename keys whose allowed origins differ. |
74
74
  | `customer_endpoint_routing_inconsistent` | Regenerate the connector catalog so every action route includes all of its ordinary customer endpoint dependencies. |
75
75
  | `unused_connector_alias` | A declared connector alias is never called; remove the unused `use` entry or wire it into a tool. |
76
- | `arg_mismatch` | A connector call is missing or adds arguments; match the operation signature under `expected`/`got`. |
76
+ | `arg_mismatch` | A connector call is missing or adds arguments; match the operation signature under `expected`/`got`. |
77
+ | `agent_guide_invalid` | Correct the product guide shape in `server(..., { agentGuide })` using non-empty bounded prose and symbolic references. |
78
+ | `agent_guide_duplicate_workflow` | Give every `agentGuide.workflows` entry a unique lowercase underscore id. |
79
+ | `agent_guide_duplicate_example` | Keep each agent-guide prompt and workflow pairing unique. |
80
+ | `agent_guide_example_workflow_missing` | Point the example workflow at an existing `agentGuide.workflows` id. |
81
+ | `agent_guide_capability_missing` | Correct the capability kind/name in `server(..., { agentGuide })` to a declared MCP capability. |
82
+ | `agent_guide_capability_kind` | Correct the capability kind/name in `server(..., { agentGuide })` to match its declared MCP capability. |
83
+ | `app_package_sensitive_content` | Remove the credential value; reference managed config by name only. |
@@ -0,0 +1,11 @@
1
+ # Product agent guides
2
+
3
+ Author one optional `agentGuide` in `server(name, { agentGuide, ... }, definitions)` when an agent needs product-level workflow guidance beyond individual MCP capability descriptions. It is host-neutral and TypeScript-only.
4
+
5
+ The guide contains `description`, `useWhen`, named `workflows`, optional `boundaries`, and optional example prompt-to-workflow mappings. Each workflow step references a declared `tool`, `resource`, or `prompt` by symbolic `{ kind, name }`; do not duplicate schemas, connector bindings, URLs, credentials, or raw runtime data.
6
+
7
+ 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.
8
+
9
+ Use `server.instructions` for a concise live MCP-session primer. 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.
10
+
11
+ Recover `agent_guide_*` errors by correcting the guide shape, workflow IDs, and capability kind/name. Remove any credential-shaped value: managed config is referenced by name only.
@@ -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.62.1 hash:0f404109f4845683 -->
6
+ <!-- noodle-skill version:0.63.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.62.1 hash:6ef6ef551e26b78e -->
6
+ <!-- noodle-skill version:0.63.1 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.62.1 hash:eccc3c158dcafba8 -->
6
+ <!-- noodle-skill version:0.63.1 hash:eccc3c158dcafba8 -->
7
7
 
8
8
  # wrapping-existing-applications
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.62.1 hash:d83543258e5ca5ff -->
6
+ <!-- noodle-skill version:0.63.1 hash:88e3ae21d02f2fe7 -->
7
7
 
8
8
  # Noodle Seed
9
9
 
@@ -56,6 +56,7 @@ Inside the installed plugin, perform mapped steps with `noodle-readiness` tools
56
56
  This is a lookup catalog, not a discovery checklist. Return here only when the selected primary route names a missing technical detail:
57
57
 
58
58
  - `references/agent-contract.md` — the `--json` envelope, exit codes, and the three output modes.
59
+ - `references/product-agent-guides.md` — author one host-neutral guide for a product MCP surface.
59
60
  - `references/sdk-surface.md` — what to import from `@noodleseed/one` and which builder to use.
60
61
  - `references/cli-commands.md` — every `noodle` command, grouped by area.
61
62
  - `references/compile-errors.md` — fix `noodle validate` errors by code.
@@ -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.62.1 hash:0b2fd8c7e43fc69f -->
6
+ <!-- noodle-skill version:0.63.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.62.1 hash:f7fa54992c8d7692 -->
6
+ <!-- noodle-skill version:0.63.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 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.62.1 hash:21bbd3ec441ffd30 -->
6
+ <!-- noodle-skill version:0.63.1 hash:21bbd3ec441ffd30 -->
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.62.1 hash:aa715bae12041d7c -->
6
+ <!-- noodle-skill version:0.63.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.62.1 hash:93e735b7ffb45df1 -->
6
+ <!-- noodle-skill version:0.63.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.62.1 hash:76cce86729cffbee -->
6
+ <!-- noodle-skill version:0.63.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.62.1 hash:cc54a67f21c0ecdb -->
6
+ <!-- noodle-skill version:0.63.1 hash:cc54a67f21c0ecdb -->
7
7
 
8
8
  # embedding-mcp-assistants
9
9
 
@@ -0,0 +1,53 @@
1
+ import type { AgentGuideSource } from '@noodleseed/one';
2
+
3
+ /** Product guidance is authored once for the full Acme Tasks MCP surface. */
4
+ export const ACME_TASKS_AGENT_GUIDE = {
5
+ description: 'Use Acme Tasks to review, capture, prioritize, and complete the team task list.',
6
+ useWhen: [
7
+ 'The user asks about their Acme work items.',
8
+ 'The user wants to capture or finish an Acme task.',
9
+ ],
10
+ workflows: [
11
+ {
12
+ id: 'review_tasks',
13
+ title: 'Review today’s tasks',
14
+ intent: 'Ground the task list before taking action.',
15
+ steps: [
16
+ { capability: { kind: 'tool', name: 'list_today' } },
17
+ {
18
+ capability: { kind: 'tool', name: 'set_priority' },
19
+ guidance: 'Use only from the task-list app when reprioritizing.',
20
+ },
21
+ ],
22
+ },
23
+ {
24
+ id: 'capture_task',
25
+ title: 'Capture a task',
26
+ steps: [
27
+ {
28
+ capability: { kind: 'tool', name: 'add_task' },
29
+ guidance: 'Ground the new task title and priority exactly.',
30
+ },
31
+ ],
32
+ },
33
+ {
34
+ id: 'complete_task',
35
+ title: 'Complete a task',
36
+ steps: [
37
+ {
38
+ capability: { kind: 'tool', name: 'complete_task' },
39
+ guidance: 'Confirm the exact grounded task with the user before completion.',
40
+ },
41
+ ],
42
+ },
43
+ ],
44
+ boundaries: [
45
+ 'Never invent a task identifier.',
46
+ 'Ground writes in the exact task and confirm completion with the user.',
47
+ ],
48
+ examples: [
49
+ { prompt: 'What should I do today?', workflow: 'review_tasks' },
50
+ { prompt: 'Add a follow-up with the vendor.', workflow: 'capture_task' },
51
+ { prompt: 'Finish the vendor follow-up.', workflow: 'complete_task' },
52
+ ],
53
+ } as const satisfies AgentGuideSource;
@@ -1,4 +1,5 @@
1
1
  import { annotations, server, tool, z } from '@noodleseed/one';
2
+ import { ACME_TASKS_AGENT_GUIDE } from './agent-guide.js';
2
3
 
3
4
  // Acme Tasks is a fictional productivity app. It is a two-way (read + write) experience rather than a
4
5
  // top-of-funnel handoff: the top-3 prioritized user flows all complete in chat — Capture, Prioritize,
@@ -43,6 +44,7 @@ export default server(
43
44
  {
44
45
  title: 'Acme Tasks',
45
46
  version: '1.0.0',
47
+ agentGuide: ACME_TASKS_AGENT_GUIDE,
46
48
  // ChatGPT's stateless MCP lane cannot carry Noodle's standard confirmation form. Keep
47
49
  // confirm:true for capable/embedded hosts, but explicitly trust native host approval there.
48
50
  interactions: { confirmationFallback: 'host' },
@@ -24,8 +24,37 @@ describe('acme-tasks example', () => {
24
24
  const manifest = await app.toManifest();
25
25
  const completeTask = manifest.tools.find((candidate) => candidate.name === 'complete_task');
26
26
  const addTask = manifest.tools.find((candidate) => candidate.name === 'add_task');
27
+ const setPriority = manifest.tools.find((candidate) => candidate.name === 'set_priority');
27
28
 
28
29
  expect(completeTask?.annotations?.confirm).toBe(true);
29
30
  expect(addTask?.annotations).not.toHaveProperty('confirm');
31
+ expect(setPriority?.visibility).toEqual(['app']);
32
+ });
33
+
34
+ it('teaches its three product workflows through one host-neutral agent guide', async () => {
35
+ const manifest = await app.toManifest();
36
+ const guide = manifest.server.agentGuide;
37
+
38
+ expect(guide?.workflows.map((workflow) => workflow.id)).toEqual([
39
+ 'review_tasks',
40
+ 'capture_task',
41
+ 'complete_task',
42
+ ]);
43
+ expect(
44
+ guide?.workflows.flatMap((workflow) => workflow.steps.map((step) => step.capability.name)),
45
+ ).toEqual(expect.arrayContaining(['list_today', 'set_priority', 'add_task', 'complete_task']));
46
+ expect(
47
+ guide?.workflows
48
+ .find((workflow) => workflow.id === 'review_tasks')
49
+ ?.steps.map((step) => step.capability.name),
50
+ ).toContain('set_priority');
51
+ expect(
52
+ guide?.examples.every((example) =>
53
+ guide.workflows.some((workflow) => workflow.id === example.workflow),
54
+ ),
55
+ ).toBe(true);
56
+ expect(guide?.boundaries.some((boundary) => boundary.toLowerCase().includes('confirm'))).toBe(
57
+ true,
58
+ );
30
59
  });
31
60
  });
@@ -60,6 +60,13 @@ const api = connector('noodleseed_app_api')
60
60
  });
61
61
  ```
62
62
 
63
+ `delegatedTokenExchange` consumes a verified customer caller; an MCP access mode does not create one. The
64
+ server must declare `customerAuth.*(...)` or `embeddedAssistant(...)` so Noodle Seed can establish the caller
65
+ subject, issuer, and audience. Otherwise `noodle validate`, `noodle auth doctor`, and deploy fail early with
66
+ `delegated_token_exchange_identity_required`, before secrets are resolved or any connector egress. A
67
+ successful local Devtools exchange is not evidence that the hosted server has an identity source. Devtools
68
+ supplies a separate, loopback-only local identity context that is never accepted by hosted deployment.
69
+
63
70
  At both connector and operation level, auth must be omitted or use `delegatedTokenExchange`. The compiler
64
71
  validates the concrete connector definition emitted from TypeScript, including connector defaults and
65
72
  operation overrides, and reports the exact failing auth path and kind. Do not keep a bearer, API-key,
@@ -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.62.1 hash:6a9f132ddb79352e -->
6
+ <!-- noodle-skill version:0.63.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.62.1 hash:efffbf82007f935d -->
6
+ <!-- noodle-skill version:0.63.1 hash:efffbf82007f935d -->
7
7
 
8
8
  # publishing-mcp-integrations
9
9
 
@@ -230,6 +230,8 @@ Role values are trusted only from the explicitly configured claim path (or the p
230
230
 
231
231
  Use delegated connector auth when the downstream API must enforce its own per-user authorization — a shared service credential plus a forwarded user id would bypass it. Three shapes exist; pick by who owns the downstream:
232
232
 
233
+ `delegatedTokenExchange` consumes a verified customer caller; an MCP access mode does not create one. The server must declare `customerAuth.*(...)` or `embeddedAssistant(...)` so Noodle can establish the caller subject, issuer, and audience. Otherwise `noodle validate`, `noodle auth doctor`, and deploy fail early with `delegated_token_exchange_identity_required`, before secrets are resolved or any connector egress. A successful local Devtools exchange is not evidence that the hosted server has an identity source. Devtools supplies a separate, loopback-only local identity context that is never accepted by hosted deployment.
234
+
233
235
  - **`delegatedTokenExchange`** — your own API. The platform signs a short-lived, verifiable assertion of the signed-in user and exchanges it at a token endpoint you implement (RFC 8693). It works with verified customer OIDC identities and the built-in Firebase/Microsoft adapters; no per-user OAuth enrollment. Embedded-assistant sessions can bind customer-routed connectors when the authenticated embedding backend resolves each route from server-owned tenancy data and passes it during session exchange. Browser input, page context, session claims, and tool arguments cannot supply or override that private route authority.
234
236
  - **`delegatedOAuth` with `provider: "firebase" | "microsoft"`** — Noodle-managed bridge providers using stored per-user refresh tokens. Requires the matching `customerAuth` bridge; any other provider string is the compile error `unsupported_delegated_provider`.
235
237
  - **`delegatedSessionCookie`** — Firebase-managed session-cookie apps only; not a generic mechanism.
@@ -73,4 +73,11 @@ Run `noodle validate` (add `--json` for the machine-readable envelope, `--fix-pr
73
73
  | `customer_endpoint_policy_conflict` | Give every reachable declaration of this endpoint key one identical policy, or rename keys whose allowed origins differ. |
74
74
  | `customer_endpoint_routing_inconsistent` | Regenerate the connector catalog so every action route includes all of its ordinary customer endpoint dependencies. |
75
75
  | `unused_connector_alias` | A declared connector alias is never called; remove the unused `use` entry or wire it into a tool. |
76
- | `arg_mismatch` | A connector call is missing or adds arguments; match the operation signature under `expected`/`got`. |
76
+ | `arg_mismatch` | A connector call is missing or adds arguments; match the operation signature under `expected`/`got`. |
77
+ | `agent_guide_invalid` | Correct the product guide shape in `server(..., { agentGuide })` using non-empty bounded prose and symbolic references. |
78
+ | `agent_guide_duplicate_workflow` | Give every `agentGuide.workflows` entry a unique lowercase underscore id. |
79
+ | `agent_guide_duplicate_example` | Keep each agent-guide prompt and workflow pairing unique. |
80
+ | `agent_guide_example_workflow_missing` | Point the example workflow at an existing `agentGuide.workflows` id. |
81
+ | `agent_guide_capability_missing` | Correct the capability kind/name in `server(..., { agentGuide })` to a declared MCP capability. |
82
+ | `agent_guide_capability_kind` | Correct the capability kind/name in `server(..., { agentGuide })` to match its declared MCP capability. |
83
+ | `app_package_sensitive_content` | Remove the credential value; reference managed config by name only. |
@@ -0,0 +1,11 @@
1
+ # Product agent guides
2
+
3
+ Author one optional `agentGuide` in `server(name, { agentGuide, ... }, definitions)` when an agent needs product-level workflow guidance beyond individual MCP capability descriptions. It is host-neutral and TypeScript-only.
4
+
5
+ The guide contains `description`, `useWhen`, named `workflows`, optional `boundaries`, and optional example prompt-to-workflow mappings. Each workflow step references a declared `tool`, `resource`, or `prompt` by symbolic `{ kind, name }`; do not duplicate schemas, connector bindings, URLs, credentials, or raw runtime data.
6
+
7
+ 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.
8
+
9
+ Use `server.instructions` for a concise live MCP-session primer. 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.
10
+
11
+ Recover `agent_guide_*` errors by correcting the guide shape, workflow IDs, and capability kind/name. Remove any credential-shaped value: managed config is referenced by name only.
@@ -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.62.1 hash:0f404109f4845683 -->
6
+ <!-- noodle-skill version:0.63.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.62.1 hash:6ef6ef551e26b78e -->
6
+ <!-- noodle-skill version:0.63.1 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.62.1 hash:eccc3c158dcafba8 -->
6
+ <!-- noodle-skill version:0.63.1 hash:eccc3c158dcafba8 -->
7
7
 
8
8
  # wrapping-existing-applications
9
9