Skip to main content
Glama
README.md
<div align="center">
  <a href="https://mmt.dev">
    <img src="res/logo.png" alt="Logo" width="115" height="115">
  </a>
  <h4>Git-native REST client and API tests in VS Code. YAML .mmt files in Git.</h4>

  <p>
    <a href="https://mmt.dev/demos">Demo</a>
    &middot;
    <a href="https://mmt.dev">Website</a>
    &middot;
    <a href="https://github.com/mshobeyri/multimeter/issues/new?labels=enhancement&template=feature_request.yml">Request Feature</a>
    &middot;
    <a href="https://marketplace.visualstudio.com/items?itemName=mshobeyri.multimeter">VS Code</a>
    &middot;
    <a href="https://www.npmjs.com/package/mmt-testlight">CLI</a>
    &middot;
    <a href="https://github.com/mshobeyri/testlight-action">GitHub Action</a>
    &middot;
    <a href="https://mmt.dev/docs/quick-start">Docs</a>
    &middot;
    <a href="https://mmt.dev/llms.txt">llms.txt</a>
  </p>
    <p>
    <a href="https://marketplace.visualstudio.com/items?itemName=mshobeyri.multimeter">
      <img src="https://vsmarketplacebadges.dev/installs-short/mshobeyri.multimeter.svg" alt="VS Code Installs"/>
    </a>
    <a href="https://www.npmjs.com/package/mmt-testlight">
      <img src="https://img.shields.io/npm/dt/mmt-testlight.svg" alt="npm downloads"/>
    </a>
    <a href="https://marketplace.visualstudio.com/items?itemName=mshobeyri.multimeter">
      <img src="https://vsmarketplacebadges.dev/version-short/mshobeyri.multimeter.svg" alt="Version"/>
    </a>
    <a href="https://github.com/mshobeyri/multimeter/blob/main/LICENSE.md">
      <img src="https://img.shields.io/badge/license-Apache%202.0-blue.svg" alt="License"/>
    </a>
  </p>
</div>

<p align="center">
  <img src="res/intro.png" alt="Multimeter โ€” Get Started, YAML, and API tester" width="640" />
</p>

## ๐Ÿš€ 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, mocks, reports, documentation, and CI when you need them.

All in the same tool. No migration. No second product.

## ๐ŸŽฏ What you get

**Simple by default**

- โœ… Git-native, file-based YAML
- โœ… Lightweight โ€” no account, no cloud lock-in
- โœ… Collaboration through pull requests, like code
- โœ… The same files locally and in CI

**A full testing platform when you need it**

- โœ… HTTP, WebSocket, GraphQL, and gRPC
- โœ… Multi-step flows and test suites
- โœ… Mock servers
- โœ… Generated documentation
- โœ… Reports
- โœ… CI with `testlight`

**AI in the same files**

- โœ… Generate tests from an API or a description (Cursor, Copilot, Claude via MCP)
- โœ… Judge replies โ€” semantic similarity, or open-ended checks like how funny a response is
- โœ… Bring your own model (Ollama or cloud)

[See all features โ†’](https://mmt.dev/#features)


## โšก Start simple

Multimeter is a VS Code-native extension. All you need:
- Click Install button in [Multimeter VS Code Extension](https://marketplace.visualstudio.com/items?itemName=mshobeyri.multimeter)
- Open **Get Started** from the `Activity bar` and follow the instructions

There you run a POST request as follows:

```yaml
type: api
title: Simple POST
url: https://test.mmt.dev/echo
method: post
format: json
body:
  message: hello
```

That's enough.

- No suites.
- No mocks.
- No workflows.
- No complexity.


## ๐Ÿงช Need tests?

```yaml
type: test
steps:
  - http: https://test.mmt.dev/echo
    method: get
    expect:
      status: 200
```

- Still simple.
- Still Git-native.
- Still easy to review.


## ๐Ÿš€ Scale without switching tools

As your project grows, Multimeter grows with it.

Add:

- Test suites
- Mock servers
- Documentation
- Workflow execution
- Structured reporting
- CI artifacts

**Only when you need them.**

Everything stays in the same ecosystem.

[See all examples โ†’](./examples)


## ๐Ÿค– MCP, AI generation, and AI judges

Cursor, Copilot, and Claude write and run the same `.mmt` files you edit in VS Code. MCP (`mmt-mcp`) gives them `scaffold_test`, `validate`, `format`, and `run` โ€” generate tests from an API or a description, then keep them in Git.

**Judge** an API answer in the same test. Compare semantic similarity to an expected reply, or check something open-ended โ€” for example, how funny the response is. Bring your own model (Ollama or cloud). An alternative to a separate Promptfoo eval stack.

See [MCP docs](https://mmt.dev/docs/features/mcp) ยท [Judge docs](https://mmt.dev/docs/files/judge)


## ๐Ÿ” Built for reliable CI

Multimeter validates test definitions before execution.

That means:

- โœ… Earlier feedback
- โœ… More deterministic execution
- โœ… Fewer surprises in CI
- โœ… Easier debugging
- โœ… Reproducible results

GitHub Actions:

```yaml
- uses: actions/checkout@v6
- uses: mshobeyri/testlight-action@v1
  with:
    file: tests/suite.mmt
    report: junit
    report-file: results/junit.xml
```

Or from a terminal using the Multimeter CLI called `testlight`. 

```sh
npm install -g mmt-testlight
testlight run tests/suite.mmt
```

See the [GitHub Action](https://github.com/mshobeyri/testlight-action) and [Testlight install](https://mmt.dev/docs/features/testlight/install).


## ๐Ÿ“ฆ Everything stays in Git

Your code, tests, mocks, documentation, reports, and environment settings live in the same repository.

- โœ… Version controlled
- โœ… Code and tests evolve together
- โœ… Reviewable through pull requests
- โœ… Easy to move and share
- โœ… No platform lock-in
- โœ… AI can update code and tests together
- โœ… Environment variables never go missing
- โœ… Historical test results stay with the project


## ๐Ÿง  Philosophy

Most API tools focus on requests.

Multimeter focuses on behavior.

Instead of asking:

> "Did this request return the expected response?"

Multimeter helps you answer:

> "Does this system still behave correctly?"

---

## License

Multimeter is licensed under the [Apache License 2.0](LICENSE.md).

[Demos](https://mmt.dev/demos) ยท [Documentation](./docs/toc.md) ยท [Website](https://mmt.dev) ยท [GitHub](https://github.com/mshobeyri/multimeter)

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation4/5

Most tools map to distinct workflow stages: learning syntax, seeing examples, discovering APIs, scaffolding, validating, formatting, and running. discover_api and api_card overlap for single-API inspection, but the descriptions make the preferred choice clear.

Naming Consistency4/5

Tool names mostly follow an imperative verb_noun pattern such as read_documentation, list_examples, discover_api, scaffold_test, validate, and run. api_card breaks the pattern as a noun-only name, but the inconsistency is minor and not confusing.

Tool Count5/5

Nine tools is well-scoped for this server's purpose of discovering, generating, validating, formatting, and running Multimeter tests. Each tool serves a clear role in the workflow without redundancy or bloat.

Completeness4/5

The toolset covers the core lifecycle from API discovery and test scaffolding to assertion suggestions, validation, formatting, and execution. A few peripheral capabilities like listing or deleting existing tests are absent, but agents can complete the primary authoring workflow without dead ends.

Maintenance

ActivityActive
ResponsivenessNo issues