IaC Bazaar

An MCP server for verified infrastructure

Coding agents invent Terraform. They produce a module block with argument names that look plausible and do not exist, and you find out at init time - or worse, at apply time. The IaC Bazaar MCP server removes the guessing: it gives your agent a live, read-only view of 183 verified modules - each one statically validated, 117of them proven by a real apply → verify → destroy - together with their real input and output schemas.

Status - not published to npm yet

The server is built and lives in the IaC Bazaar repository, and the API it reads is public and live today. The package @iac-bazaar/mcp is not on the public npm registry yet, so the npx commands below do not resolve right now. They are the exact commands that work the moment it is published. Want it sooner? Get in touch.

The tools it exposes

Five tools, all read-only. The server never writes anything - not to your cloud, not to the catalog, not to your filesystem.

Add it to Claude Code

Once @iac-bazaar/mcp is published
claude mcp add iac-bazaar -- npx -y @iac-bazaar/mcp

# ...or with a registry token, so get_module returns input/output schemas:
claude mcp add iac-bazaar --env IAC_BAZAAR_TOKEN=iacb_... -- npx -y @iac-bazaar/mcp

Cursor, Windsurf, any MCP client

The server speaks MCP over stdio, so any client that can spawn a command works. Add it to your client's MCP config:

Once @iac-bazaar/mcp is published
{
  "mcpServers": {
    "iac-bazaar": {
      "command": "npx",
      "args": ["-y", "@iac-bazaar/mcp"],
      "env": { "IAC_BAZAAR_TOKEN": "iacb_..." }
    }
  }
}

Drop the env block to run without a token - search, verification proof and pricing all still work; only the input/output schemas are withheld. Then ask your agent things like “search iac-bazaar for a verified AWS VPC module and show me its required inputs”, and it will call search_modules then get_module.

Configuration

What is public, and what is not

The catalog itself is public: searching it, and reading any module's verification proof, price and SHA-256 checksum, needs no credential. A module's declared input/output contract is the sellable part, so it follows the same ladder as the rest of the site:

When a contract is withheld, get_modulesays so explicitly and names what would unlock it. It never reports an empty input list - an agent that read “no inputs” would go right back to inventing them.

Under the hood

The server is a thin client over the public JSON API - /api/v1/modules, /api/v1/providers and /api/v1/stacks. Nothing the MCP server can see is anything you could not fetch with curl and the same token; it exists so an agent finds it without being told where to look.