---
title: Introduction
description: Contract tooling for the seams of your stack — where your service meets the outside world and silent drift turns into outages.
url: https://pr-1-7abef52380a8.thally.app/
---

# Introduction

Contract tooling for the seams of your stack — where your service meets the outside world and silent drift turns into outages.

## Two tools, two seams

Seamline ships two focused packages — one for the API contract, one for the configuration contract.

#### [Specdiff — the API seam](/specdiff-overview)

    Compare a before and after JSON Schema or OpenAPI document and get every
    change classified as breaking, warning, or info, with a JSON-pointer path, a
    stable rule code, and a human message.

#### [Envlock — the configuration seam](/envlock-overview)

    Declare the environment variables your app needs once, then validate, type,
    document, and diff them everywhere — at startup, in CI, and from coding
    agents over MCP.

## Shared principles

Both tools follow the same rules:

- **Zero-dependency core.** `@specdiff/core` and `@envlock/core` have no runtime dependencies.
- **Deterministic output.** Results are sorted, stable, and safe to diff in CI.
- **Exit codes encode the verdict.** The CLI returns `0` for pass, `1` for failure — wire it into any pipeline.
- **Agent-native.** Each tool ships a Model Context Protocol server so coding agents run the same checks you do.
- **ESM only, Node.js 22+.** TypeScript-first, with full type inference.

## Packages at a glance

| Package | What it does |
| --- | --- |
| [`@specdiff/core`](/specdiff-core-api) | The differ, 45-rule catalogue, formatters, and pointer helpers. |
| [`@specdiff/cli`](/specdiff-cli) | The `specdiff` command for CI and local checks. |
| [`@specdiff/mcp`](/specdiff-mcp) | Stdio MCP server exposing `specdiff_compare`, `specdiff_explain_rule`, `specdiff_list_rules`, and `specdiff_format`. |
| [`@envlock/core`](/envlock-core-api) | Schema builders, `parseEnv`/`loadEnv`, dotenv parser, `.env.example` renderer, diff, redact, and describe. |
| [`@envlock/cli`](/envlock-cli) | The `envlock` command: `check`, `example`, `diff`, `inspect`, `init`. |
| [`@envlock/mcp`](/envlock-mcp) | Stdio MCP server with five tools and a schema resource template. |