Atlas / MCP servers / deanhiller / WebPieces TypeScript

WebPieces TypeScriptBLOCK

mcp/deanhiller/webpieces-ts
Verdict
BLOCK
Grade
D
Trust score
61 /100
Exposed tools
2 2r · 0w · 0d
Transport
—
License
MPL-2.0
Stars
4
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Two things ship from this repository, and the second is the larger one:

  1. A microservices framework — a TypeScript port of WebPieces,

bringing enterprise-grade microservice patterns to Node.js/TypeScript.

  1. An organizational engineering practice, and the machine that enforces it — a set of

conventions (feature testing, one API contract, error/context discipline, a gated git workflow) plus a three-stage enforcement layer (edit-time AI hooks, build-time code rules, a PR gate) that makes teams and their AI agents follow them. This layer ships to npm separately and is adoptable without the framework. If you are here to assess scope, that is the product — read docs/ENGINEERING-PRACTICE.md first.

Overview

WebPieces-TS is a TypeScript framework for building testable, maintainable microservices — and, around it, a config-driven practice layer that scales code and process quality across teams. As a framework it provides:

  • Auto-wiring REST APIs - Define API interfaces with decorators, automatically wire to controllers
  • Filter Chain Architecture - Composable filters for cross-cutting concerns (logging, validation, transactions)
  • Context Management - Request-scoped data that flows through async operations
  • No-HTTP Testing - Test your APIs without HTTP overhead, going through the full filter stack
  • Dependency Injection - Built on Inversify for clean, testable code

Quick Start

Installation

npm install

Run Tests

pnpm exec vitest run             # one spec file or directory — what you want while iterating
pnpm nx run :test             # one project

A bare pnpm test runs every spec in the workspace. That is a once-before-the-PR command, not an inner-loop one, and it is blocked for AI agents (see .claude/rules/build-verification.md).

Build

Read from source at commit a7543a41c87aOBSERVED · 2026-10-11
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add webpieces-tooling -- npx -y @webpieces/[email protected]
claude-desktop
{
  "mcpServers": {
    "webpieces-tooling": {
      "command": "npx",
      "args": [
        "-y",
        "@webpieces/[email protected]"
      ]
    }
  }
}
03

Exposed tools (2)

2 read · 0 write · 0 destructive.

ToolRiskDescription
x-api-keyreadYour partner key.
x-organization-idreadThe organization the key acts for.
04

Trust audit

BLOCKgrade D · trust 61/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryFAIL
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (4 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHInventory / provenance · inv.suspicious_name · CWE-1104
packages/tooling/hook-runtime/src/adapters/agent-payload.ts
agent-payload.ts
Why it matters. member named after an attack tool
Fix. remove or justify
HIGHNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/http/http-client-node/src/InternalAddressRules.ts:20
['169.254.0.0', 16], //   link-local, and with it 169.254.169.254 CLOUD METADATA
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
HIGHNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/http/http-client-node/src/InternalAddressRules.ts:40
'metadata.google.internal',
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
HIGHNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/http/http-client-node/src/SsrfGuardFilter.ts:121
`169.254.169.254 would hand this process's own service-account tokens to whoever registered ` +
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.agents/skills/bootstrap-npm-package
.agents/skills/bootstrap-npm-package
Why it matters. link not followed
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/http/mcp-server/src/McpSdkForeignThrow.spec.ts:31
const SECRET = 'SECRET-sdk-foreign-throw-detail';
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/tooling/nx-webpieces-rules/src/lib/runtime-wiring/source-extractor.spec.ts:212
fixture.write('app', 'config.ts', "export const prepared = { auth: { store: 'database', password: 'never-a-graph-target' } };");
LOWInventory / provenance · inv.hidden_file · CWE-1104
.prettierignore
.prettierignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/core/core-context/src/__tests__/LogFields.spec.ts:59
ServiceInfo.setInfo('billing-svc', 'v3.2.1-rc4');
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/core/core-context/src/__tests__/LogFields.spec.ts:60
expect(RequestContext.buildStructuredLogFields().get('version')).toBe('v3.2.1-rc4');
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/core/core-util/src/http/__tests__/ServiceInfo.spec.ts:33
ServiceInfo.setInfo('my-service', 'v3.2.1-rc4');
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/core/core-util/src/http/__tests__/ServiceInfo.spec.ts:34
expect(ServiceInfo.getVersion()).toBe('v3.2.1-rc4');
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
packages/logging/bunyan/src/__tests__/bunyan.spec.ts:258
ServiceInfo.setInfo('billing-svc', 'v3.2.1-rc4');
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/tooling/agent-workflow-rules/src/bin/codex-l0-read.spec.ts:73
'cat $HOME/.ssh/id_rsa',                 // an expansion the pattern refuses to spell
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/app-example/e2e/src/ErrorResponseBoundary.spec.ts:19
import { ClientServerWiring } from '../../client-server/src/wiring';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/app-example/e2e/src/ErrorTranslationSymmetry.spec.ts:23
import { ClientServerWiring } from '../../client-server/src/wiring';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/app-example/e2e/src/ErrorTranslationSymmetry.spec.ts:29
} from '../../client-server/src/OrderErrors';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/app-example/e2e/src/TwoServerFlow.spec.ts:10
import { ClientServerWiring } from '../../client-server/src/wiring';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
apps/app-example/e2e/src/TwoServerFlow.spec.ts:11
import { Server2Wiring } from '../../server2/src/wiring';
LOWNetwork egress · net.env_exfil · CWE-200, CWE-319
packages/tooling/agent-workflow-rules/src/bin/codex-l0-read.spec.ts:73
id_rsa ... curl
Why it matters. reads secrets in the same file that sends data out
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/http/http-client-node/README.md:116
from the transport and re-judged hop by hop, so a partner URL that 302s at `169.254.169.254` is
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
packages/http/http-client-node/src/__tests__/RuntimeBaseUrl.spec.ts:327
['CLOUD METADATA by address', 'https://169.254.169.254'],
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/app-example/e2e/src/ErrorResponseBoundary.spec.ts:92
baseUrl = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/http/http-client-browser/src/__tests__/ChromiumStreaming.spec.ts:41
return 'http://127.0.0.1:' + (this.server.address() as AddressInfo).port;
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/http/http-client-node/src/__tests__/ControlledStreaming.spec.ts:143
ClientRegistry.addUrlMapping('controlled', 'http://127.0.0.1');

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha a7543a41c87afull audit observations/trust-audit/mcp-server/deanhiller__webpieces-ts.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-11a7543a41c87aBLOCKD61first audit
06

Questions

What tools does @webpieces/mcp-server expose?

2 in total: 2 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is @webpieces/mcp-server safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (61/100) and found 4 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does @webpieces/mcp-server need?

No credential environment variables were found in its source, so it appears to need none.

How current is this page?

The grade is for one exact copy of the source (a7543a41c87a), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement