Atlas / MCP servers / adrian-d-hidalgo / MCP Server NestJS Module Library <!-- omit in toc -->

MCP Server NestJS Module Library <!-- omit in toc -->BLOCK

mcp/adrian-d-hidalgo/nestjs-mcp-server
Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
46 44r · 2w · 0d
Transport
streamable-http
License
MIT
Stars
39
01

Overview

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

[](https://www.npmjs.com/package/@nestjs-mcp/server) [](https://github.com/semantic-release/semantic-release) [](https://www.npmjs.com/package/@nestjs-mcp/server) [](https://github.com/adrian-d-hidalgo/nestjs-mcp-server/actions/workflows/ci.yml) [](https://codecov.io/gh/adrian-d-hidalgo/nestjs-mcp-server) [](https://snyk.io/test/github/adrian-d-hidalgo/nestjs-mcp-server) [](./LICENSE) [](./CONTRIBUTING.md) [](CODEOFCONDUCT.md)

Overview

NestJS MCP Server is a modular library for building Model Context Protocol (MCP) servers using NestJS. It provides decorators, modules, and integration patterns to expose MCP resources, tools, and prompts in a scalable, maintainable way. This project is a wrapper for the official `@modelcontextprotocol/sdk` and is always kept compatible with its types and specification.

Table of Contents

  • Installation
  • Quickstart
  • What is MCP?
  • [Core Concepts](#core-
Read from source at commit 762d0cfe4c8dOBSERVED · 2026-10-12
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. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add server --env JWT_SECRET=${JWT_SECRET} --env OAUTH_ISSUER=${OAUTH_ISSUER} -- npx -y @nestjs-mcp/[email protected]
claude-desktop
{
  "mcpServers": {
    "server": {
      "command": "npx",
      "args": [
        "-y",
        "@nestjs-mcp/[email protected]"
      ],
      "env": {
        "JWT_SECRET": "${JWT_SECRET}",
        "OAUTH_ISSUER": "${OAUTH_ISSUER}"
      }
    }
  }
}
03

Exposed tools (46)

44 read · 2 write · 0 destructive.

ToolRiskDescription
add_notewriteAdds a note (requires notes:write)
admin_only_promptreadOnly advertised to connections that look like an admin
admin_only_toolreadOnly advertised to connections that look like an admin
always_off_promptreadDisabled for every connection
always_off_toolreadDisabled for every connection
assemble_briefingreadAssembles a prompt in two reported stages
auth_protected_toolreadA tool protected by a guard that reads this call’s Authorization header
beta_toolreadGated on a deliberately slow lookup
complex-toolreadTool with complex schema
count_upreadCounts to
deploywriteDeploys after confirming with the caller
enum-toolreadTool with enum schema
gated_toolreadOnly for admins
help_guidereadProvides a general help guide about available system features
list_notesreadLists notes (requires notes:read)
measurereadReturns a structured measurement
nested-toolreadTool with nested schema
off_promptreadd
plain_promptreadd
product_recommendationreadRecommends products based on user preferences and requirements
prompt_completereadComplete prompt
prompt_with_descreadA test prompt
public_promptreadAlways available
public_toolreadAlways available, on every connection
purchasereadConfirms a purchase across a round trip
rejecting_gate_toolreadIts gate rejects, so it is never available
rich_toolreadHas every option
searchreadPublic search
statusreadPublic through its resolver
string-toolreadTool with string schema
test-prompt-with-descriptionreadA test prompt
test-prompt-with-description-and-argsreadA test prompt
test-tool-with-annotations-and-descriptionreadA test tool
test-tool-with-descriptionreadA test tool
test-tool-with-params-and-descriptionreadA test tool
test-tool-with-params-annotations-descriptionreadA test tool
throwing_gate_toolreadIts gate throws, so it is never available
tool_completereadComplete tool
tool_with_annotations_and_descriptionreadTool with annotations and description
tool_with_descreadA test tool
tool_with_descriptionreadTool with name and description
tool_with_params_schema_and_annotations_and_descriptionreadTool with paramsSchema, annotations, and description
tool_with_params_schema_and_descriptionreadTool with paramsSchema and description
tool_with_progressreadWorks through
unresolvable_gate_toolreadIts gate cannot be resolved, so it is never available
whoamireadReturns the authenticated caller as the server sees it
04

Trust audit

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

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

What the source does

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

Findings (21)

HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
scripts/docker/post-start.sh:14
git config --global user.signingkey "/home/${DEV_USER}/.ssh/$KEY_NAME"
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
scripts/docker/post-start.sh:15
echo "Git signing key updated from $HOST_KEY to /home/${DEV_USER}/.ssh/$KEY_NAME"
Why it matters. touches a credential store
LOWInventory / provenance · inv.hidden_file · CWE-1104
.claudeignore
.claudeignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.commitlintrc.js
.commitlintrc.js
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mcp.json.example
.mcp.json.example
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.releaserc.js
.releaserc.js
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.snyk
.snyk
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInformation disclosure · disclose.log_secret · CWE-209, CWE-532
examples/auth/main.ts:23
console.log(`  Authorization: Bearer ${token}`);
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
examples/auth/api-key.strategy.ts:9
} from '../../src';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
examples/auth/app.module.ts:3
import { McpModule } from '../../src';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
examples/auth/jwt.strategy.ts:10
} from '../../src';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
examples/auth/notes.resolver.ts:9
} from '../../src';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
examples/auth/tenant.authorizer.ts:8
} from '../../src';
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
examples/oauth/README.md:79
`http://127.0.0.1:*`), because MCP clients pick their callback port.
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/oauth-authorization-server.e2e-spec.ts:277
redirect_uri: 'http://127.0.0.1:1/other',
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/oauth-authorization-server.e2e-spec.ts:473
authorizeUrl({ redirect_uri: 'http://127.0.0.1:53682/other' }),
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/oauth-authorization-server.e2e-spec.ts:525
resolveOAuthConfig('http://127.0.0.1:3200', {}).mockAuthorizationServer,
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/oauth-confidential-client.e2e-spec.ts:35
const LOOPBACK_REDIRECT = 'http://127.0.0.1:61234/oauth/callback';
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/node, @modelcontextprotocol/server, zod, @commitlint/cli, @commitlint/config-conventional, @commitlint/types, @eslint/js, @modelcontextprotocol/client
Why it matters. 37 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
.claude/agents/debugger.md:4
Senior debugging investigator for @nestjs-mcp/server. Use IMMEDIATELY when the user asks to debug an error, investigate a failure, reproduce a bug, or understand WHY something is not working — a consu
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
CONTRIBUTING.md:211
echo "[email protected] $(cat ~/.ssh/id_ed25519.pub)" >> ~/.config/git/allowed_signers
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 762d0cfe4c8dfull audit observations/trust-audit/mcp-server/adrian-d-hidalgo__nestjs-mcp-server.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-12762d0cfe4c8dBLOCKD69first audit
06

Questions

What tools does @nestjs-mcp/server expose?

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

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

No — not without reading the findings first. The audit graded it D (69/100) and found 2 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 @nestjs-mcp/server need?

It reads JWT_SECRET and OAUTH_ISSUER from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does @nestjs-mcp/server run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as @nestjs-mcp/server at 2.0.0.

How current is this page?

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

Advertisement