Static FE-BE contract-drift checker: finds frontend calls the backend does not expose. CLI + MCP.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Static frontendβbackend contract-drift checker. Pact without writing a single contract test.

tieline reads the code you already wrote on both sides of an API boundary β the
HTTP calls your frontend makes and the routes your backend exposes β and tells you
where they disagree. No contract tests to author, no broker to run, no backend to
boot. It finishes in well under a second and is built to run in CI as a gate.
Delete the LLM and a developer still installs it.
tielineis a deterministic tool first; an agent reading its output is a bonus.
Both sides are reduced to a canonical (METHOD, path) and joined. The matcher is
adapter-agnostic β any client adapter pairs with any server adapter, so the
same engine checks a React app against Express, an Angular app against Spring, or
anything against an OpenAPI spec.
| Result | Meaning |
|---|---|
| β matched | FE call resolves to a real BE route |
| β drift | FE call resolves but the BE has no such route/method β the bug bucket |
| β οΈ unverifiable | FE url is built at runtime β reported, never guessed |
| π‘ dead | BE route no resolvable FE call reaches (informational) |
These tools solve neighbouring problems β pick by what you have and what you want guaranteed.
| Tool | How it works | What it catches | What it needs | Reach for it when |
|---|---|---|---|---|
| tieline | Static analysis of FE call sites + BE route declarations, joined on (METHOD, path) | A frontend calling a route the backend doesn't expose (path/method drift), undocumented/phantom spec routes | Source code of both sides; nothing running, nothing authored | You want a sub-second CI gate with zero contract tests to write or maintain |
| Pact | Consumer-driven contract tests executed at runtime, shared via a broker | Request/response payload mismatches between specific consumerβprovider pairs | Contract tests written on both sides, a Pact broker, provider verification builds | Independent teams need payload-level guarantees and a can-I-deploy workflow |
| openapi-diff | Diffs two OpenAPI documents | Breaking changes between two spec versions | Accurate specs for both versions; doesn't read source code | Your API surface is spec-first and you want to gate spec changes |
| Optic | Tracks your OpenAPI spec over time and diffs every change in CI | Breaking changes and style/standards violations in the spec's history | An OpenAPI spec kept in the repo | You govern an evolving spec and want each PR's API changes reviewed |
| Schemathesis | Property-based fuzzing of a running API against its OpenAPI/GraphQL schema | Server crashes, schema violations, undocumented responses at runtime | A bootable backend + a schema | You want runtime conformance and robustness testing of the implementation |
They compose: tieline catches FEβBE drift statically in every PR, tieline doctor
keeps codeβspec honest, and a runtime tool like Pact or Schemathesis can guard the
payload/behaviour layer underneath.
Install (or run with npx):
Generate a tieline.config.json β init sniffs the surrounding directories
(cwd, its children, and its siblings) for known stacks and writes a ready-to-run
config:
It detects adapters from package.json deps (@reduxjs/toolkit, axios,
@angular/core, @nestjs/core, express, fastify, next),
requirements.txt / pyproject.toml (fastapi, flask), pom.xml /
build.gradle (spring), and any OpenAPI doc as a fallback. Anything it can't
detect is written as a placeholder for you to edit. The file is always
overwritten, so re-run it whenever your layout changes.
Or write it by hand β at the root of (or above) your repos:
Run it:
check exits non-zero when any failOn bucket is non-empty β drop it into CI and
the build fails the moment the two sides disagree.
| Flag | Effect |
|---|---|
--config <path> | Path to tieline.config.json (default: searched upward from cwd) |
--json | Machine-readable output |
--html <file> | Self-contained visual report (see Visual report) |
--no-fail | Always exit 0 (report only) |
Any client adapter pairs with any server adapter β the matcher never changes.
| Client (calls) | Server (routes) |
|---|---|
rtk-query β Redux Toolkit Query | nestjs β decorators |
axios-fetch β axios / fetch, React Query & SWR queryFns | express β app.use() mount graph, cross-file |
angular-http β Angular HttpClient | fastify β verb shorthand + route({}) |
next β file-based (app router + pages API) | |
fastapi β APIRouter prefix + include_router | |
flask β blueprints + methods=[] | |
spring β @RequestMapping + @*Mapping | |
openapi β universal: any OpenAPI 2/3 doc (file or URL) |
That covers MERN (rtk/axios β express), MEAN (angular β express), MEVN
(axios β express), Next full-stack, Python (fastapi/flask), and
enterprise (angular β spring) β plus openapi for any backend that emits a
spec (Express+swagger-jsdoc, FastAPI, Spring springdoc, .NET Swashbuckle, β¦).
Notes:
express walks the app.use() mount graph across require/import
boundaries and nested routers; routers it can't reach are flagged, never dropped.next is file-system routing β app-router files export GET/POST/β¦;
pages-router handlers serve any verb (matched as ALL).`users/${id}?x=${q}`) are surfaced as
unverifiable rather than guessed.tieline.config.json β repo paths resolve relative to the config file.
tieline check --html report.html writes one self-contained file (inline
CSS/JS, no external assets) you can open in any browser or attach to a PR:
β
no route
node catching calls that land nowhere; hover a resource to highlight its linkstieline doctor β does your code match your published docs?Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/tieline)<a href="https://allmcps.com/mcp/tieline"><img src="https://allmcps.com/api/badge/tieline?style=directory" alt="Tieline on AllMCPs" /></a>