github JavaScript analyzed ce8cb00

Masoud-Masoori/switchboard

github

One governed MCP endpoint for every app your agents touch. Local-first MCP aggregator with a BYO-keys encrypted vault, read/write/full scopes, approval gates, audit log, and a dashboard. Apache-2.0.

maintainer
Masoud-Masoori
licence
Apache-2.0
first seen
2026-06-24
last seen
2026-06-26
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 0 tools
transport stdio · streamable-http · http counts 0 tools · 0 res · 0 prompts permission surface via code analysis

No tools enumerated yet for this server.

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit ce8cb00 · analyzer v33 · 3w ago

danger signals3

code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 64

filesystem 32

  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/smoke-codex-switchboard.mjs :13 import { mkdtempSync, writeFileSync, readFileSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-audit.mjs :23 import { mkdtempSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-breaker.mjs :27 import { mkdtempSync, rmSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-config.mjs :25 import { mkdtempSync, writeFileSync, readFileSync, rmSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-dashboard.mjs :32 import { readFileSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-doctor.mjs :21 import { readFileSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-expose.mjs :21 import { readFileSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-health.mjs :25 import { readFileSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-install.mjs :10 import { mkdtempSync, mkdirSync, readFileSync, writeFileSync, rmSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-limits.mjs :25 import { mkdtempSync, rmSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-local-llm.mjs :15 import { mkdtempSync, writeFileSync, rmSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-oauth.mjs :7 import { mkdtempSync } from "node:fs";
show 20 more
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-openapi.mjs :25 import { mkdtempSync, writeFileSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-profiles.mjs :23 import { mkdtempSync, writeFileSync, rmSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-registry-metadata.mjs :8 import { readFileSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-resources-prompts.mjs :30 import { mkdtempSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-retry.mjs :18 import { readFileSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-router.mjs :31 import { mkdtempSync, existsSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-triggers.mjs :17 import { mkdtempSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-vault.mjs :27 import { mkdtempSync, readFileSync } from "node:fs";
  • fs (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-webhook.mjs :9 import { mkdtempSync } from "node:fs";
  • fs Mas-AI-Official-mcp-switchboard-ce8cb00/src/apikeys.ts :15 import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
  • fs Mas-AI-Official-mcp-switchboard-ce8cb00/src/audit.ts :6 import { appendFileSync, existsSync, mkdirSync, readFileSync } from "node:fs";
  • fs Mas-AI-Official-mcp-switchboard-ce8cb00/src/authserver.ts :30 import { chmodSync, existsSync, readFileSync, writeFileSync } from "node:fs";
  • fs Mas-AI-Official-mcp-switchboard-ce8cb00/src/catalog.ts :20 import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
  • fs Mas-AI-Official-mcp-switchboard-ce8cb00/src/cli.ts :23 import { existsSync } from "node:fs";
  • fs Mas-AI-Official-mcp-switchboard-ce8cb00/src/clients.ts :27 import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
  • fs Mas-AI-Official-mcp-switchboard-ce8cb00/src/config.ts :10 import { existsSync, readFileSync, writeFileSync } from "node:fs";
  • fs Mas-AI-Official-mcp-switchboard-ce8cb00/src/oauth.ts :25 import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
  • fs Mas-AI-Official-mcp-switchboard-ce8cb00/src/openapi.ts :19 import { readFileSync } from "node:fs";
  • fs Mas-AI-Official-mcp-switchboard-ce8cb00/src/triggers.ts :35 import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
  • fs Mas-AI-Official-mcp-switchboard-ce8cb00/src/vault.ts :17 import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";

shell / exec 2

  • shell (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-expose.mjs :154 assert("tunnel spawned shell-lessly via spawn(spec.bin, spec.args(...))", has("spawn(spec.bin, spec.args("));
  • shell Mas-AI-Official-mcp-switchboard-ce8cb00/src/expose.ts :20 import { spawn, type ChildProcess } from "node:child_process";

network 15

  • net Mas-AI-Official-mcp-switchboard-ce8cb00/public/app.js :25 const res = await fetch(path, {
  • net (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/smoke-codex-switchboard.mjs :12 import { createServer } from "node:http";
  • net (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-httptool.mjs :18 // failure returns an isError result and NEVER calls fetch (fail closed).
  • net (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-oauth.mjs :39 const asMeta = await (await fetch(`${PUBLIC}/.well-known/oauth-authorization-server`)).json();
  • net (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-triggers.mjs :21 import { createServer } from "node:http";
  • net (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-webhook.mjs :13 import { createServer } from "node:http";
  • net Mas-AI-Official-mcp-switchboard-ce8cb00/src/catalog.ts :131 const res = await fetch(url, { headers: { "user-agent": USER_AGENT, accept: "application/json" } });
  • net Mas-AI-Official-mcp-switchboard-ce8cb00/src/cli.ts :24 import { createServer } from "node:http";
  • net Mas-AI-Official-mcp-switchboard-ce8cb00/src/council.ts :104 const res = await fetch(`${baseUrl("anthropic", cfg)}/v1/messages`, {
  • net Mas-AI-Official-mcp-switchboard-ce8cb00/src/dashboard.ts :710 const r = await fetch(wh.url, { method: "POST", headers, body: payload, signal: ctrl.signal });
  • net Mas-AI-Official-mcp-switchboard-ce8cb00/src/httptool.ts :105 resp = await fetch(url, init);
  • net Mas-AI-Official-mcp-switchboard-ce8cb00/src/localllm.ts :206 const res = await fetch(runtime.modelsUrl, { signal: ac.signal, headers: { accept: "application/json" } });
show 3 more
  • net Mas-AI-Official-mcp-switchboard-ce8cb00/src/oauth.ts :391 const res = await fetch(provider.tokenUrl, { method: "POST", headers, body });
  • net Mas-AI-Official-mcp-switchboard-ce8cb00/src/openapi.ts :132 const resp = await fetch(source);
  • net Mas-AI-Official-mcp-switchboard-ce8cb00/src/webhook.ts :174 await fetch(url, { method: "POST", headers, body: payload, signal: ctrl.signal });

secrets 1

  • secrets (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-council.mjs :143 process.env.LOCAL_TOKEN = "tok-abc-123";

install hooks 1

  • prepublishOnly Mas-AI-Official-mcp-switchboard-ce8cb00/package.json :91 npm run verify

declared dependencies 8

  • @modelcontextprotocol/sdk@1.29.0
  • commander@15.0.0
  • express@5.2.1
  • yaml@2.9.0
  • zod@4.4.3
  • @types/express@5.0.5
  • @types/node@22.10.5
  • typescript@5.7.3

perm:untrusted 2

  • untrusted (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/smoke-codex-switchboard.mjs :148 const health = await (await fetch(`${handle.url}/api/health`)).json();
  • untrusted (weak) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-oauth.mjs :39 const asMeta = await (await fetch(`${PUBLIC}/.well-known/oauth-authorization-server`)).json();

transport_posture 1

  • binds all interfaces (0.0.0.0) Mas-AI-Official-mcp-switchboard-ce8cb00/scripts/verify-install.mjs :77 assert("mcpUrl 0.0.0.0 → 127.0.0.1", mcpUrl({ host: "0.0.0.0", port: 9000 }) === "http://127.0.0.1:9000/mcp");