# oasdiff

> Detect breaking changes, generate changelogs, diff, and validate OpenAPI specs.

- name: io.github.oasdiff/oasdiff
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 70/100 flags: no-repository
- quality: 83/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.oasdiff%2Foasdiff
- tools: https://api.protogrid.dev/v1/servers/io.github.oasdiff%2Foasdiff/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "oasdiff": {
      "type": "http",
      "url": "https://api.oasdiff.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 65
- provenance: 35
- drivers: +reachable +uptime-100% ~updated-125d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 83/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 71 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: oasdiff_breaking_changes (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); oasdiff_changelog (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); oasdiff_diff (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 778 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 4, about 778 tokens to load them all
- tool set hash: f701b74c6f4a2563ca22dbdc1adb1ce2
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.oasdiff/oasdiff.svg)](https://protogrid.dev/servers/io.github.oasdiff/oasdiff)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://api.oasdiff.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (4)

- `oasdiff_breaking_changes`: Detect breaking API changes between two OpenAPI specifications. Pass the base (old) and revision (new) specs as YAML or JSON; returns the breaking and warning-level changes. Use this when the question is whether an API change breaks existing clients. Use oasdiff_changelog instead to list every change including non-breaking and informational ones, oasdiff_diff for the raw added/removed/modified structure, or oasdiff_validate to check a single spec rather than compare two. Both specs must be valid, self-contained OpenAPI (external $ref URLs or files are not resolved).
- `oasdiff_changelog`: Produce a full changelog of every detected change between two OpenAPI specifications (base vs revision), down to informational changes. Pass both specs as YAML or JSON. Use this when you want the complete set of changes at every severity. Use oasdiff_breaking_changes instead when you only care whether the change is breaking (less noise), or oasdiff_diff for the raw structural diff without a backward-compatibility judgment. Both specs must be valid, self-contained OpenAPI (external $ref URLs or files are not resolved).
- `oasdiff_diff`: Show the structural diff between two OpenAPI specifications (base vs revision): what was added, removed, or modified. Pass both specs as YAML or JSON. Use this when you want the raw structural changes rather than a backward-compatibility verdict. Use oasdiff_breaking_changes to judge whether changes break clients, or oasdiff_changelog for a severity-classified changelog. Both specs must be valid, self-contained OpenAPI (external $ref URLs or files are not resolved).
- `oasdiff_validate`: Validate a single OpenAPI specification against the OpenAPI and JSON Schema rules. Pass the spec as YAML or JSON; returns the findings (empty when the spec is valid). Use this when you have one spec and want to check it is well-formed. For comparing two specs, use oasdiff_breaking_changes, oasdiff_changelog, or oasdiff_diff instead. The spec must be self-contained (external $ref URLs or files are not resolved).
