Self-hosted Node.js FaaS platform — run dozens of functions in a single container with zero cold starts, hot reload, and automatic MCP tool exposure for AI agents. Built-in React dashboard, OpenTelemetry tracing, TypeScript native, shared layers, cron scheduling, and CI/CD deployments.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · http counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
No tools enumerated yet for this server.
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 5cc7c96 · analyzer v33 · 3w ago
skills & prompt files 4
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 94
filesystem 10
- fs reaatech-funcdock-5cc7c96/cli/commands/create.js :5
import fs from 'fs/promises'; - fs (weak) reaatech-funcdock-5cc7c96/scripts/deploy-from-host.js :17
import fs from 'fs/promises'; - fs (weak) reaatech-funcdock-5cc7c96/scripts/deploy.js :8
import fs from 'fs/promises'; - fs (weak) reaatech-funcdock-5cc7c96/scripts/setup.js :8
import fs from 'fs/promises'; - fs (weak) reaatech-funcdock-5cc7c96/scripts/test-function-in-docker.js :5
import fs from 'fs'; - fs reaatech-funcdock-5cc7c96/server.js :2
import fs from 'fs/promises'; - fs reaatech-funcdock-5cc7c96/utils/deployment-backup.js :10
import fs from 'fs/promises'; - fs reaatech-funcdock-5cc7c96/utils/layer-loader.js :1
import fs from 'fs/promises'; - fs reaatech-funcdock-5cc7c96/utils/logger.js :1
import fs from 'fs/promises'; - fs (weak) reaatech-funcdock-5cc7c96/utils/test-runner.js :12
import fs from 'fs/promises';
shell / exec 19
- shell reaatech-funcdock-5cc7c96/cli/commands/deploy.js :109
await exec('node', deployArgs); - shell reaatech-funcdock-5cc7c96/cli/commands/dev.js :20
await exec('npm', ['run', 'dev']); - shell reaatech-funcdock-5cc7c96/cli/commands/list.js :19
await exec('node', ['scripts/deploy.js', '--list']); - shell reaatech-funcdock-5cc7c96/cli/commands/logs.js :43
await exec('npm', ['run', 'error-logs']); - shell reaatech-funcdock-5cc7c96/cli/commands/remove.js :27
await exec('node', ['scripts/deploy.js', '--remove', name]); - shell reaatech-funcdock-5cc7c96/cli/commands/setup.js :19
await exec('node', ['scripts/setup.js']); - shell reaatech-funcdock-5cc7c96/cli/commands/start.js :19
await exec('npm', ['start']); - shell (weak) reaatech-funcdock-5cc7c96/cli/commands/test.js :59
await exec('node', ['scripts/test-function-in-docker.js', '--function', funcPath]); - shell reaatech-funcdock-5cc7c96/cli/commands/update.js :55
await exec('node', deployArgs); - shell reaatech-funcdock-5cc7c96/cli/utils.js :5
import { spawn } from 'child_process'; - shell (weak) reaatech-funcdock-5cc7c96/scripts/check-git-config.js :8
import { exec } from 'child_process'; - shell (weak) reaatech-funcdock-5cc7c96/scripts/deploy-from-host.js :19
import { spawn } from 'child_process';
show 7 more
- shell (weak) reaatech-funcdock-5cc7c96/scripts/deploy.js :10
import { spawn } from 'child_process'; - shell (weak) reaatech-funcdock-5cc7c96/scripts/prepare.js :1
import { execSync } from 'child_process'; - shell (weak) reaatech-funcdock-5cc7c96/scripts/test-function-in-docker.js :3
import { execSync, spawn } from 'child_process'; - shell reaatech-funcdock-5cc7c96/server.js :8
import { exec } from 'child_process'; - shell reaatech-funcdock-5cc7c96/utils/deployment-backup.js :12
import { spawn } from 'child_process'; - shell reaatech-funcdock-5cc7c96/utils/layer-loader.js :4
import { spawn } from 'child_process'; - shell (weak) reaatech-funcdock-5cc7c96/utils/test-runner.js :10
import { spawn, exec } from 'child_process';
network 8
- net reaatech-funcdock-5cc7c96/dashboard/src/utils/api.js :1
import axios from 'axios'; - net reaatech-funcdock-5cc7c96/functions/hello-world/cron-env-test.js :33
// const response = await fetch('https://api.example.com', { - net reaatech-funcdock-5cc7c96/mcp-server.js :7
import { createServer } from 'http'; - net reaatech-funcdock-5cc7c96/public/dashboard/assets/index-Da2lERX1.js :1
n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var o=`modulepreload`,s=function(e){return`/dashboard/`+e},c={},l=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document. - net (weak) reaatech-funcdock-5cc7c96/scripts/deploy-from-host.js :588
const res = await fetch(reloadUrl, { - net (weak) reaatech-funcdock-5cc7c96/scripts/deploy.js :583
const res = await fetch(reloadUrl, { - net reaatech-funcdock-5cc7c96/server.js :17
import { createServer } from 'http'; - net reaatech-funcdock-5cc7c96/utils/logger.js :418
const response = await fetch(webhookUrl, {
secrets 14
- secrets reaatech-funcdock-5cc7c96/cli/commands/reload.js :24
if (process.env.DEPLOY_API_KEY) { - secrets reaatech-funcdock-5cc7c96/cli/commands/status.js :24
if (process.env.DEPLOY_API_KEY) { - secrets reaatech-funcdock-5cc7c96/functions/webhook-handler/github.js :36
const secret = req.env?.GITHUB_WEBHOOK_SECRET || process.env.GITHUB_WEBHOOK_SECRET; - secrets (weak) reaatech-funcdock-5cc7c96/functions/webhook-handler/github.test.mjs :39
const originalSecret = process.env.GITHUB_WEBHOOK_SECRET; - secrets reaatech-funcdock-5cc7c96/functions/webhook-handler/handler.js :108
const secret = req.env?.GITHUB_WEBHOOK_SECRET || process.env.GITHUB_WEBHOOK_SECRET; - secrets (weak) reaatech-funcdock-5cc7c96/functions/webhook-handler/handler.test.mjs :47
const originalGitHubSecret = process.env.GITHUB_WEBHOOK_SECRET; - secrets reaatech-funcdock-5cc7c96/functions/webhook-handler/slack.js :38
const slackSecret = req.env?.SLACK_SIGNING_SECRET || process.env.SLACK_SIGNING_SECRET; - secrets (weak) reaatech-funcdock-5cc7c96/functions/webhook-handler/slack.test.mjs :41
const originalSecret = process.env.SLACK_SIGNING_SECRET; - secrets reaatech-funcdock-5cc7c96/functions/webhook-handler/stripe.js :10
const stripeSecret = req.env?.STRIPE_WEBHOOK_SECRET || process.env.STRIPE_WEBHOOK_SECRET; - secrets (weak) reaatech-funcdock-5cc7c96/functions/webhook-handler/stripe.test.mjs :39
const originalStripeSecret = process.env.STRIPE_WEBHOOK_SECRET; - secrets reaatech-funcdock-5cc7c96/mcp-server.js :17
const MCP_API_KEY = process.env.MCP_API_KEY || ''; - secrets (weak) reaatech-funcdock-5cc7c96/scripts/deploy-from-host.js :584
if (process.env.DEPLOY_API_KEY) {
show 2 more
- secrets (weak) reaatech-funcdock-5cc7c96/scripts/deploy.js :579
if (process.env.DEPLOY_API_KEY) { - secrets reaatech-funcdock-5cc7c96/server.js :88
const JWT_SECRET = process.env.JWT_SECRET;
install hooks 1
- prepare reaatech-funcdock-5cc7c96/package.json :37
node scripts/prepare.js
declared dependencies 46
- @modelcontextprotocol/sdk@^1.0.4
- @opentelemetry/api@^1.9.0
- @opentelemetry/auto-instrumentations-node@^0.57.0
- @opentelemetry/exporter-trace-otlp-http@^0.57.0
- @opentelemetry/resources@^2.7.1
- @opentelemetry/sdk-node@^0.57.0
- @opentelemetry/sdk-trace-node@^2.7.1
- @opentelemetry/semantic-conventions@^1.28.0
- bcryptjs@^3.0.3
- chokidar@^5.0.0
- compression@^1.7.5
- cookie-parser@^1.4.7
show 28 more
- cors@^2.8.6
- dotenv@^17.4.2
- express@^5.2.1
- express-rate-limit@^8.5.2
- express-validator@^7.2.1
- helmet@^8.0.0
- jsonwebtoken@^9.0.3
- morgan@^1.10.0
- multer@^2.1.1
- node-cron@^4.2.1
- socket.io@^4.8.3
- tsx@^4.21.1
- typescript@^6.0.3
- zod@^4.4.3
- @eslint/js@^10.0.1
- @types/bcryptjs@^3.0.0
- @types/cors@^2.8.17
- @types/express@^5.0.0
- @types/jsonwebtoken@^9.0.7
- @types/morgan@^1.9.9
- @types/multer@^2.1.0
- @types/node@^26.0.1
- @types/node-cron@^3.0.11
- @typescript-eslint/eslint-plugin@^8.59.4
- @typescript-eslint/parser@^8.59.4
- eslint@^10.2.1
- globals@^17.5.0
- husky@^9.1.7
6 more not shown — this panel samples each group; the count above is the real total.
obfuscation 1
- dynamic require()/import() reaatech-funcdock-5cc7c96/server.js :857
const handlerModule = await import(`${handlerPath}?update=${Date.now()}`);