Noodle CLI by Noodle Seed — author, run, and deploy declarative MCP servers. Embedding the assistant in your own web app is @noodleseed/assistant.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 11 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
cancel_build_run
-
deploy_build
-
get_build_readiness
-
get_local_context
-
link_cloud_project
-
preview_product_feedback
-
run_build_gate
-
set_cloud_secret_from_env
-
set_cloud_variable
-
setup_project
-
submit_product_feedback
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed v0.141.0 · analyzer v33 · 32m ago
danger signals1
- credential in logs credential in log package/dist/commands/connect.js :177
console.log(` ${config.clientSecret}`);
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 440
filesystem 53
- fs package/dist/agent-command-context.js :1
import { existsSync } from 'node:fs'; - fs package/dist/agent-product-skill-doctor.js :1
import { existsSync, readFileSync } from 'node:fs'; - fs package/dist/agent-product-skill-reconcile.js :1
import { existsSync, readFileSync } from 'node:fs'; - fs package/dist/agent-product-skill-state.js :1
import { existsSync, lstatSync, readdirSync, readFileSync, rmdirSync, rmSync } from 'node:fs'; - fs package/dist/agent-skills-state.js :2
import { existsSync, lstatSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from 'node:fs'; - fs package/dist/agents-doctor.js :1
import { existsSync, readFileSync } from 'node:fs'; - fs package/dist/agents.js :1
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; - fs package/dist/cli.js :13
import { realpathSync } from 'node:fs'; - fs package/dist/commands/assistant-embed-ops.js :8
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; - fs package/dist/commands/assistant-ops.js :1
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; - fs package/dist/commands/auth-service-principals.js :1
import { readFileSync } from 'node:fs'; - fs package/dist/commands/billing-enforcement-activation-files.js :1
import { readFile } from 'node:fs/promises'; - fs package/dist/commands/billing-migration-files.js :1
import { readFile } from 'node:fs/promises'; - fs package/dist/commands/config-values.js :5
import { readFileSync, statSync } from 'node:fs'; - fs package/dist/commands/deploy-github-hint.js :1
import { existsSync, readFileSync, writeFileSync } from 'node:fs'; - fs package/dist/commands/deploy-preflight.js :2
import { readFileSync } from 'node:fs'; - fs package/dist/commands/deploy-resume.js :2
import { chmodSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs'; - fs package/dist/commands/deploy-target.js :1
import { existsSync } from 'node:fs'; - fs package/dist/commands/docs-mcp.js :8
import { existsSync, readFileSync, writeFileSync } from 'node:fs'; - fs package/dist/commands/platform-account-reset-files.js :1
import { constants, open } from 'node:fs/promises'; - fs package/dist/commands/platform-auth-rollout-acceleration-files.js :1
import { constants, open } from 'node:fs/promises'; - fs package/dist/commands/policy-ops.js :1
import { readFile } from 'node:fs/promises'; - fs package/dist/commands/project-setup.js :4
import { existsSync, readFileSync, writeFileSync } from 'node:fs'; - fs package/dist/commands/service-ops.js :2
import { existsSync, readFileSync, writeFileSync } from 'node:fs'; - fs package/dist/commands/update-ops.js :20
import { unlinkSync } from 'node:fs'; - fs package/dist/config.js :1
import { chmodSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; - fs package/dist/deploy.js :1
import { readFileSync } from 'node:fs'; - fs package/dist/dev.js :2
import { readFileSync, watch } from 'node:fs'; - fs package/dist/devtools-delegated-exchange-authority.js :2
import { constants } from 'node:fs'; - fs package/dist/devtools-design-store.js :2
import { chmodSync, closeSync, existsSync, fsyncSync, linkSync, mkdirSync, openSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from 'node:fs'; - fs package/dist/devtools-env.js :1
import { existsSync, readFileSync } from 'node:fs'; - fs package/dist/doctor.js :1
import { existsSync, readFileSync } from 'node:fs'; - fs package/dist/local-compile.js :1
import { readFileSync } from 'node:fs'; - fs package/dist/local-config.js :1
import { chmodSync, existsSync, readFileSync, writeFileSync } from 'node:fs'; - fs package/dist/mcp-import.js :1
import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs'; - fs package/dist/openapi-import.js :1
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'; - fs package/dist/platform-support.js :1
import { existsSync } from 'node:fs'; - fs package/dist/plugin-mode/build-readiness-fingerprint.js :2
import { readdir, readFile, realpath } from 'node:fs/promises'; - fs package/dist/plugin-mode/build-readiness-store.js :2
import { chmod, mkdir, readFile, rename, stat, unlink, writeFile } from 'node:fs/promises'; - fs package/dist/plugin-mode/compatibility.js :1
import { readFileSync } from 'node:fs'; - fs package/dist/plugin-mode/plugin-mcp-bootstrap.js :2
import { chmod, mkdir, rename, writeFile } from 'node:fs/promises'; - fs package/dist/plugin-mode/profile.js :1
import { existsSync, lstatSync } from 'node:fs'; - fs package/dist/preview-session.js :1
import { watch } from 'node:fs'; - fs package/dist/project-dotenv.js :1
import { existsSync, readFileSync } from 'node:fs'; - fs package/dist/project-entrypoint.js :1
import { existsSync } from 'node:fs'; - fs package/dist/project.js :1
import { chmodSync, existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync, } from 'node:fs'; - fs package/dist/react-widget-build.js :1
import { existsSync, mkdirSync, mkdtempSync, writeFileSync } from 'node:fs'; - fs package/dist/sdk-version-skew.js :1
import { existsSync, readFileSync } from 'node:fs'; - fs package/dist/self-host-init.js :2
import { chmodSync, closeSync, existsSync, fsyncSync, lstatSync, mkdirSync, openSync, readFileSync, renameSync, rmSync, writeFileSync, } from 'node:fs'; - fs package/dist/skills-update.js :2
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs'; - fs package/dist/update-binary.js :18
import { lstatSync, readFileSync, readlinkSync, realpathSync } from 'node:fs'; - fs package/dist/update.js :11
import { readFileSync } from 'node:fs'; - fs package/dist/validate.js :1
import { existsSync } from 'node:fs';
shell / exec 4
- shell package/dist/commands/update-ops.js :19
import { spawn } from 'node:child_process'; - shell package/dist/plugin-mode/plugin-command-runner.js :1
import { spawn } from 'node:child_process'; - shell package/dist/skills-update.js :1
import { spawn } from 'node:child_process'; - shell package/dist/tunnel.js :1
import { spawn as nodeSpawn } from 'node:child_process';
network 13
- net package/dist/commands/auth-live-doctor.js :38
response = await fetch(url, { - net package/dist/commands/auth-metadata-readiness.js :41
response = await fetch(candidate.url, requestInit()); - net package/dist/commands/service-ops.js :200
const uploaded = await fetch(upload.uploadUrl, { - net package/dist/control-plane.js :2
import { createServer } from 'node:http'; - net package/dist/devtools-auth-ui.js :117
'function authRequest(path,options){ var init=options||{}; init.headers=hostHeaders(Boolean(init.body)); return fetch(path,init); }', - net package/dist/devtools-delegated-exchange-ui.js :144
'function refreshLocalDelegatedExchangeStatus(){ return fetch("/delegated-exchange/status",{headers:{"x-noodle-devtools-capability":RPC_CAPABILITY}}).then(function(r){if(!r.ok)throw new Error("status - net package/dist/devtools-design-preview.js :66
return fetch(url,options).then(function(response){ - net package/dist/devtools-harness.js :62
' return fetch("/rpc", { method: "POST", headers: { "content-type": "application/json" },' + - net package/dist/devtools-microsoft-auth.js :149
response = await this.#fetch(this.#tokenEndpoint, { - net package/dist/devtools-preview.js :2
import { createServer } from 'node:http'; - net package/dist/devtools-rpc-forwarder.js :49
return fetch(options.mcpUrl, { - net package/dist/doctor.js :248
const res = await fetch(latest.url, { method: 'HEAD' }); - net package/dist/self-host-init.js :300
' - "fetch(\'http://127.0.0.1:8787/readyz\').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"',
secrets 1
- secrets package/dist/commands/assistant-ops.js :160
console.log(' clientId: process.env.NOODLE_ASSISTANT_CLIENT_ID!, clientSecret: process.env.NOODLE_ASSISTANT_CLIENT_SECRET!,');
tool registrations 11
- get_local_context package/dist/plugin-mode/build-readiness-server.js :125
- get_build_readiness package/dist/plugin-mode/build-readiness-server.js :136
- run_build_gate package/dist/plugin-mode/build-readiness-server.js :147
- deploy_build package/dist/plugin-mode/build-readiness-server.js :177
- cancel_build_run package/dist/plugin-mode/build-readiness-server.js :222
- setup_project package/dist/plugin-mode/plugin-operation-tools.js :5
- link_cloud_project package/dist/plugin-mode/plugin-operation-tools.js :32
- set_cloud_variable package/dist/plugin-mode/plugin-operation-tools.js :67
- set_cloud_secret_from_env package/dist/plugin-mode/plugin-operation-tools.js :92
- preview_product_feedback package/dist/plugin-mode/plugin-operation-tools.js :139
- submit_product_feedback package/dist/plugin-mode/plugin-operation-tools.js :146
declared dependencies 57
- @modelcontextprotocol/client@2.0.0
- @modelcontextprotocol/server@2.0.0
- @hono/node-server@1.19.14
- @jitl/quickjs-ffi-types@0.32.0
- @jitl/quickjs-wasmfile-debug-asyncify@0.32.0
- @jitl/quickjs-wasmfile-debug-sync@0.32.0
- @jitl/quickjs-wasmfile-release-asyncify@0.32.0
- @jitl/quickjs-wasmfile-release-sync@0.32.0
- @noodle-borg/admission-limits@0.0.0
- @noodle-borg/agent-kit@0.84.1
- @noodle-borg/app-audit@0.0.0
- @noodle-borg/app-package@0.0.0
- @noodle-borg/assistant-gateway@0.0.0
- @noodle-borg/auth@0.0.0
- @noodle-borg/authoring@0.0.0
- @noodle-borg/capabilities@0.0.0
- @noodle-borg/cli-catalog@0.0.0
- @noodle-borg/compiler@0.0.0
- @noodle-borg/compute@0.0.0
- @noodle-borg/connector-defs@0.0.0
- @noodle-borg/connector-http@0.0.0
- @noodle-borg/deploy-client@0.0.0
- @noodle-borg/devtools-ui@0.0.0
- @noodle-borg/knowledge@0.0.0
- @noodle-borg/knowledge-operations@0.0.0
- @noodle-borg/module@0.0.0
- @noodle-borg/openapi-import@0.0.0
- @noodle-borg/plugin-distribution@0.0.0
- @noodle-borg/protocol@0.0.0
- @noodle-borg/runtime@0.0.0
- @noodle-borg/service@0.0.0
- @noodle-borg/transport-http@0.0.0
- @noodle-borg/wire-contracts@0.0.0
- ajv@8.20.0
- ajv-formats@3.0.1
- content-type@1.0.5
- cors@2.8.6
- cross-spawn@7.0.6
- eventsource@3.0.7
- eventsource-parser@3.1.0
- hono@4.12.28
- ipaddr.js@2.4.0
- jose@6.2.3
- json-schema-typed@8.0.2
- open@11.0.0
- pkce-challenge@5.0.1
- quickjs-emscripten@0.32.0
- quickjs-emscripten-core@0.32.0
- raw-body@3.0.2
- react@19.2.7
- react-dom@19.2.7
- typescript@6.0.3
- undici@8.7.0
- yaml@2.9.0
- zod@4.4.3
- zod-to-json-schema@3.25.2
- @types/node@24.13.1
perm:untrusted 2
- untrusted package/dist/devtools-design-preview.js :66
return fetch(url,options).then(function(response){ - untrusted package/dist/self-host-init.js :300
' - "fetch(\'http://127.0.0.1:8787/readyz\').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))"',