Skip to main content
Glama
README.md
# javats-impact-mcp

![Demo: cross-stack blast radius from a single symbol](demo/blast-radius.gif)

Read-only MCP server for **cross-stack impact analysis** across a Java (Spring Boot)
backend and a TypeScript frontend, linked through OpenAPI.

## The one-question demo: "If I rename an enum value, what breaks?"

`OrderStatus.PENDING` is a Java enum value. It is stored in the DB (`orders.status`,
`@Enumerated(STRING)`), exposed on `OrderDto.status` in the OpenAPI spec, returned by
`GET /api/orders`, and consumed by the frontend two ways.

```
find_symbol { name: "OrderStatus", kind: "enum" }      -> symbol_id
analyze_impact { symbol_id }
```

Returns (abridged):
```json
{
  "endpoints": [{ "path": "/api/orders", "method": "GET" }],
  "tsCallers": [
    { "kind": "client_call", "file": ".../OrdersPage.tsx", "confidence": "high" },
    { "kind": "fetch_call",  "file": ".../rawFetchOrders.ts", "confidence": "heuristic" }
  ],
  "jpa": { "table": "orders", "column": "status", "enumerated": "EnumType.STRING" },
  "migration_checklist": [ "...", "Review 1 heuristic TS site (raw fetch URL match — verify manually)." ]
}
```

## How it works

1. `index_project` builds a SQLite index with three indexers:
   - **Java** (tree-sitter): classes, enums, fields, methods, annotations, scoped references.
   - **TypeScript** (ts-morph): type-aware symbols, property accesses, fetch/axios call sites.
   - **OpenAPI** (swagger-parser): endpoints, schemas, and `maps_to` edges bridging Java DTO
     fields to schema fields.
2. The 7 read-only tools query that index. `analyze_impact` walks Java → OpenAPI → TypeScript.

## Tools (exactly 7, all read-only)

`index_project`, `find_symbol`, `find_references`, `get_endpoint`,
`analyze_impact`, `get_git_context`, `explain_symbol`.

## Configuration

`javats-mcp.config.json` (paths resolve relative to the file):
```json
{ "backendPath": "...", "frontendPath": "...", "openApiSource": "./openapi.json",
  "generatedClientPath": "...", "indexPath": ".javats-mcp/index.db", "allowNetwork": false }
```

## Register in Claude Desktop / Cursor

```json
{
  "mcpServers": {
    "javats-impact": {
      "command": "node",
      "args": ["/absolute/path/to/dist/index.js"],
      "env": { "JAVATS_CONFIG": "/absolute/path/to/javats-mcp.config.json" }
    }
  }
}
```
Run `npm run build` first. For development, use `command: "npx"`, `args: ["tsx", "/abs/src/index.ts"]`.

## Limitations / confidence model

- **`high`** — resolved through the TypeScript type system (ts-morph) or a generated-client
  method reference. Renames provably affect these sites.
- **`heuristic`** — matched by URL/path string against `fetch`/`axios`. Can miss dynamic URLs
  (template concatenation) and can over-match similar paths. Always verify these manually.
- Java analysis is **syntactic** (tree-sitter), scoped by simple type name — it does not do full
  type resolution, so same-named types in different packages may conflate.
- OpenAPI linking assumes springdoc-style schema names match Java DTO class names.
- Read-only: no writes, no shell exec except `git log`/`blame`. Network off unless `allowNetwork`.

## Requirements & no native builds

Requires **Node 22+** (the index store uses the built-in `node:sqlite`). There are **no
native modules**: Java parsing uses `web-tree-sitter` (WASM runtime) with prebuilt grammars
from `tree-sitter-wasms`, and storage uses `node:sqlite`. `npm install` needs no C++
compiler on any platform. (`node:sqlite` is currently a stable-but-experimental Node API and
prints a one-time notice on stderr at startup; it does not affect the MCP stdio protocol.)

TDQS

B3.1/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct aspect: indexing, symbol lookup, reference finding, endpoint details, cross-stack impact, git context, and summary aggregation. No overlap in purpose.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case (e.g., find_symbol, get_endpoint), making them predictable and easy to differentiate.

Tool Count5/5

With 7 tools, the set is well-scoped for a code impact analysis domain. Each tool serves a clear role without being too many or too few.

Completeness4/5

The tools cover core workflows: indexing, searching, referencing, endpoint mapping, impact analysis, and git context. Minor gaps exist like direct file content retrieval, but the set is sufficient for its stated purpose.

Maintenance

ActivitySlowing
ResponsivenessNo issues