Repository navigation
Conversation
Package @postman/postman-mcp-server 2.14.0 (Apache-2.0) from postmanlabs/postman-mcp-server. The runtime image is node:24-alpine and sets NODE_USE_ENV_PROXY=1 so Node fetch honors ToolHive's HTTP_PROXY/HTTPS_PROXY under network isolation. Minimal is the default toolset; --code and --full pass through as runtime args. POSTMAN_API_KEY auth is unchanged. Allowlist three YARA findings on tool descriptions with specific reasons. Closes #1195 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Dan Barr <6922515+danbarr@users.noreply.github.com>
Contributor
🔒 MCP Security Scan Results✅ postman-mcp-server
Summary: Scanned 1 MCP server(s), all passed security checks. ✅ |
Contributor
🛡️ Grype Vulnerability Scan ResultsFixable High and Critical findings block publishing. Review these package versions when evaluating an override.
|
| Severity | Vulnerability | Package | Installed | Available fix |
|---|---|---|---|---|
| High | GHSA-r5fr-rjxr-66jc |
lodash |
4.17.21 |
4.18.0 |
| Critical | GHSA-2w6w-674q-4c4q |
handlebars |
4.7.8 |
4.7.9 |
| Critical | GHSA-8r5x-fm3f-whwj |
handlebars |
4.7.8 |
4.7.10 |
| High | GHSA-qpx9-hpmf-5gmw |
underscore |
1.12.1 |
1.13.8 |
| High | GHSA-rf6f-7fwh-wjgh |
flatted |
3.2.6 |
3.4.2 |
| High | GHSA-25h7-pfq9-p65f |
flatted |
3.2.6 |
3.4.0 |
| High | GHSA-3mfm-83xf-c92r |
handlebars |
4.7.8 |
4.7.9 |
| High | GHSA-xhpv-hc6g-r9c6 |
handlebars |
4.7.8 |
4.7.9 |
| Critical | GHSA-p8wg-vrv2-v86f |
handlebars |
4.7.8 |
4.7.10 |
| High | GHSA-9cx6-37pm-9jff |
handlebars |
4.7.8 |
4.7.9 |
| High | GHSA-5gfm-wpxj-wjgq |
node-forge |
1.3.1 |
1.3.2 |
| High | GHSA-5m6q-g25r-mvwx |
node-forge |
1.3.1 |
1.4.0 |
| High | GHSA-q67f-28xg-22rw |
node-forge |
1.3.1 |
1.4.0 |
| High | GHSA-554w-wpv2-vw27 |
node-forge |
1.3.1 |
1.3.2 |
| High | GHSA-ppp5-5v6c-4jwp |
node-forge |
1.3.1 |
1.4.0 |
| High | GHSA-2328-f5f3-gj25 |
node-forge |
1.3.1 |
1.4.0 |
| High | GHSA-mrhx-c7xc-m3w5 |
zod |
3.25.76 |
4.6.6 |
| High | GHSA-xjpj-3mr7-gcpf |
handlebars |
4.7.8 |
4.7.9 |
| High | GHSA-qxc2-j82w-r537 |
@faker-js/faker |
5.5.3 |
10.5.0 |
The scan job warms the npm cache with a global install. Packages that ship a preinstall guard such as "npx only-allow pnpm" fail that step (exit 127 in CI), which leaves no scan artifact and blocks the build. This broke the Postman MCP server PR. Retry with --ignore-scripts only when the normal install fails, so packages that need their install scripts keep the current behavior. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Dan Barr <6922515+danbarr@users.noreply.github.com>
|
You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool. What Enabling Code Scanning Means:
For more information about GitHub Code Scanning, check out the documentation. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add Postman MCP server
Closes #1195
Packages Postman's first-party MCP server,
@postman/postman-mcp-server2.14.0 (repopostmanlabs/postman-mcp-server, license Apache-2.0, confirmed from the npm metadata, the LICENSE file in the published tarball, and the GitHub license API). This is a spec-only change:npx/postman-mcp-server/spec.yaml. Nothing undercmd/dockhand/orinternal/skills/is touched, so it does not trigger a full-catalog rebuild.Proxy-compatible Node
The ToolHive npx template builds on
node:24-alpine(pkg/container/templates/runtime_config.go:169in toolhive v0.42.1, the version pinned ingo.mod), so no Node version change was needed. The spec setsspec.env.NODE_USE_ENV_PROXY: "1", which dockhand bakes into the runtime image. Per the Node docs and changelogs,fetch()has honoredNODE_USE_ENV_PROXYsince Node 24.0.0 (and 22.21.0), whereas the Docker MCP image in the issue ships Node 22.16.0, which predates that.Toolsets and auth
No args means Minimal (42 tools).
--codeand--fullpass through as runtime args, for examplethv run ... -- --full.POSTMAN_API_KEYis read from the environment as before.What was validated
./build/dockhand verify-provenance -c npx/postman-mcp-server/spec.yaml -v: reports ATTESTATIONS (npm has a SLSA v1 attestation) but then fails withfailed to parse bundle: proto: (line 1:2): unknown field "attestations", so dockhand did not verify it cryptographically. I decoded the attestation by hand: it was built from.github/workflows/pkg-release.ymlat refrefs/tags/v2.14.0, commit94efe91, which matchesgit ls-remotefor the tag. The spec therefore recordsavailable: true,verified: false.task build -- npx/postman-mcp-server: pass. The generated Dockerfile containsENV NODE_USE_ENV_PROXY="1"in the runtime stage.task scan: the Taskfile target does not passsecurity.mock_envto the scanner (it uses the legacy positional mode), so the server exits on the missingPOSTMAN_API_KEYand the task reports "Scan failed to produce output". I ran the same steps CI uses (generate_mcp_config.py,run_scan.py --config,process_scan_results.py) and got 42 tools scanned, 4 blocking YARA findings before triage, 0 after. The four findings are AITech-12.1 (createCollection, putCollection), AITech-1.1 (getTaggedEntities), and AITech-9.1 (runCollection). Each is allowlisted with a specific reason in the spec. I read the tool descriptions: none contain instructions aimed at the model. runCollection does genuinely execute collection scripts through newman, which the reason states.security.insecure_ignoreis not set.task test-build: the Taskfile uses podman and the podman machine was not running, so I built the generated Dockerfile withdocker buildinstead. The build succeeds. The image reports Node v24.22.1 andNODE_USE_ENV_PROXY=1(checked on arm64 only; the amd64 build is left to CI, since the base image is a multi-arch node tag).thv runwith network isolation (default), a profile allowing onlyapi.postman.com:443, andPOSTMAN_API_KEY=PMAK-dummy-invalid-key:getAuthenticatedUser: reaches Postman through the egress proxy and returnsAPI request failed: 401 {"error":{"message":"Invalid API Key. Every request requires a valid API Key to be sent.","name":"AuthenticationError"}}.-e NODE_USE_ENV_PROXY=0, same image and profile:MCP error -32603: AggregateError, which reproduces the failure from the issue.-- --full: server reports 234 tools (full).Real-account checks
Not done. Everything above used a dummy key. I did not verify any authenticated call, collection fetch, or an end-to-end
runCollectionagainst a real account.File mounts and network access
api.postman.com:443(api.eu.postman.comwith--region eu). Telemetry is off by default (POSTMAN_MCP_TELEMETRY); enabling it would need additional egress.~/.postman/mcp-telemetry-id, and failures are swallowed. Mount files only if a collection references local files such as form-data uploads.runCollectionruns the collection with newman inside the container, so every host the collection calls must also be in the allow list. I confirmed through the egress proxy that an allowed host returns its real response, and that a non-allowed host is blocked.host.docker.internalplus the port) and--allow-docker-gatewayonthv run. Without the flag,http://host.docker.internal:8080/returned 403 from the egress proxy. With the profile entry and the flag it returned 200 from a local test server.Concerns
Error: Unknown object type "asyncfunction"fromobject-hashwhile serialising the request error (serialised-errorvianewman/lib/run/summary.js:393). I reproduced it in a standalone script with newman from the image on both Node 24 and Node 22, and it does not depend onNODE_USE_ENV_PROXY. A plain connection-refused error does not trigger it. I did not confirm how the MCP server process behaves in that case, because that needs a real collection. It may crash or fail therunCollectioncall when a collection targets a blocked HTTPS host. This looks like an upstream issue worth reporting to Postman.🤖 Generated with Claude Code