Atlas / MCP servers / mshobeyri / multimeter

multimeterBLOCK

mcp/mshobeyri/multimeter

Multimeter is an AI-powered REST Client and API testing tool for VS Code and CI. It is not an electrical multimeter. YAML .mmt files. testlight CLI. MCP @mmt/mcp. Git-native Postman alternative.

Verdict
BLOCK
Grade
F
Trust score
50 /100
Exposed tools
21 18r · 3w · 0d
Transport
stdio
License
Apache-2.0
Stars
11
01

Overview

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

Git-native REST client and API tests in VS Code. YAML .mmt files in Git.

Demo · Website · Request Feature · VS Code · CLI · GitHub Action · Docs · llms.txt

🚀 Start with a request. Grow into a platform.

Multimeter is Git-native API testing in VS Code. Requests, tests, mocks, and docs are YAML .mmt files in your repo.

Start with a single HTTP request.

Grow into tests, suites

Read from source at commit fae171156364OBSERVED · 2026-10-10
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 (npm)
claude mcp add mmt-mcp -- npx -y [email protected]
03

Exposed tools (21)

18 read · 3 write · 0 destructive.

ToolRiskDescription
BrunoreadCompare Multimeter and Bruno. Both keep API work in Git. Multimeter adds test flows, suites, mocks, docs, reports, a VS Code editor, and faster runs (parallel stages, reused setup).
DogreadA dog
MarkdownreadGitHub-flavored Markdown tables. Paste directly into PRs, issues, wikis, or README files.
MultimeterreadAPI testing tool
PostmanwriteCompare Multimeter and Postman. Keep API tests in Git, run them in VS Code and CI. Parallel stages and reused setup calls. No cloud account.
PromptfooreadCompare Multimeter and Promptfoo. Judge non-deterministic API replies in the same Git-native .mmt flow, next to ordinary asserts, mocks, and CI.
api-smoke-testreadCall one imported API, assert status, check key outputs.
api_cardread
chained-api-callsreadLogin, capture outputs, reuse values in a later API call.
data-driven-testreadLoop over CSV rows and call an API for each row.
discover_apiread
formatread
golden-smoke-pairreadREQUIRED few-shot: minimal API + scaffolded smoke test. Mirror this; call scaffold_test instead of inventing YAML.
list_examplesread
load-testwriteRun a test file with concurrency and repeat settings.
nreadd
read_documentationread
runwrite
scaffold_testread
suggest_assertionsread
validateread
04

Trust audit

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

LayerWhat it checksResult
L0Provenance & inventoryWARN
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 (4 observation(s))
Shell
declared (8 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
mmtcli/src/cli.ts:335
yaml.load(mmtcore.testParsePack.quoteExpectOperators(rawText));
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
mmtcli/src/cli.ts:899
const parsed = yaml.load(t) as any;
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
mmtcli/src/loadTest.ts:13
return yaml.load(txt);
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
mmtcli/src/loadTest.ts:19
return yaml.load(txt);
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
mmtcli/src/runArgs.ts:145
const data = yaml.load(processed) as any;
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
core/src/JSerFileLoader.ts:10
const req = Function('return require')();
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
core/src/curlGenerator.ts:112
parts.push({kind: 'flag', text: '--insecure'});
Why it matters. certificate verification is disabled
Fix. leave verification on
MEDIUMInventory / provenance · inv.binary · CWE-1104
res/testlight.icns
testlight.icns
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
mmtview/src/text/Theme.tsx:205
{ token: "delimiter.bracket.json", foreground: punct },
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
mmtview/src/text/Theme.tsx:206
{ token: "delimiter.array.json", foreground: punct },
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
mmtview/src/text/Theme.tsx:207
{ token: "delimiter.colon.json", foreground: punct },
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
mmtview/src/text/Theme.tsx:208
{ token: "delimiter.comma.json", foreground: punct },
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
mmtview/src/text/Theme.tsx:213
{ token: "delimiter.urlencoded", foreground: punct },
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
examples/professional/05_tls_mock_server/certs/ca.key:1
-----BEGIN PRIVATE KEY-----
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
examples/professional/05_tls_mock_server/certs/server.key:1
-----BEGIN PRIVATE KEY-----
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
examples/professional/06_mtls_mock_server/certs/ca.key:1
-----BEGIN PRIVATE KEY-----
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
examples/professional/06_mtls_mock_server/certs/client.key:1
-----BEGIN PRIVATE KEY-----
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
examples/professional/06_mtls_mock_server/certs/server.key:1
-----BEGIN PRIVATE KEY-----
LOWInventory / provenance · inv.binary · CWE-1104
examples/intermediate/28_http_body_formats/assets/payload.bin
payload.bin
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
examples/professional/06_mtls_mock_server/certs/client.p12
client.p12
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
examples/professional/08_external_mtls_badssl/certs/badssl-client.p12
badssl-client.p12
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.hidden_file · CWE-1104
.vscodeignore
.vscodeignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.suspicious_name · CWE-1104
examples/intermediate/28_http_body_formats/assets/payload.bin
payload.bin
Why it matters. member named after an attack tool
Fix. remove or justify
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
core/src/JSer.test.ts:211
const users = new Function(bundle + '\nreturn users_;')();
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
core/src/JSer.test.ts:2346
const fn = new Function(...names, `return ${match![1]};`);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table

Gates applied: no_behavioural_pass.

Audited 2026-10-10 · audit v0.4.1 · source sha fae171156364full audit observations/trust-audit/mcp-server/mshobeyri__multimeter.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-10fae171156364BLOCKF50first audit
06

Questions

What is the multimeter MCP server?

Multimeter is an AI-powered REST Client and API testing tool for VS Code and CI. It is not an electrical multimeter. YAML .mmt files. testlight CLI. MCP @mmt/mcp. Git-native Postman alternative.

What tools does multimeter expose?

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

Is multimeter safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (50/100) and found 7 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 multimeter need?

It reads GH_TOKEN and GITHUB_TOKEN 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 multimeter run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as website at 0.0.0.

How current is this page?

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

Advertisement