|
| 1 | +# MCP Linear Repository Instructions |
| 2 | + |
| 3 | +This repository is an MCP server for Linear, not an application. Most work in this repo adds, updates, or reviews Linear-facing MCP tools. |
| 4 | + |
| 5 | +## Repository Map |
| 6 | + |
| 7 | +- `src/services/linear-service.ts`: main integration layer for `@linear/sdk` and the place where MCP-facing response normalization should happen. |
| 8 | +- `src/tools/definitions/*.ts`: MCP tool definitions and input/output schemas, grouped by domain. |
| 9 | +- `src/tools/handlers/*.ts`: thin handlers that validate arguments, delegate to `LinearService`, and log errors. |
| 10 | +- `src/tools/type-guards.ts`: runtime validation for tool arguments. |
| 11 | +- `src/tools/definitions/index.ts` and `src/tools/handlers/index.ts`: central registration. |
| 12 | +- `src/__tests__/*.ts`: focused Jest coverage for service behavior and tool wiring. |
| 13 | +- `TOOLS.md`: user-facing tool inventory and planned work. |
| 14 | +- `package.json`: package metadata. |
| 15 | + |
| 16 | +## How To Add Or Change A Tool |
| 17 | + |
| 18 | +- Start by checking whether the capability already exists in `src/services/linear-service.ts`. |
| 19 | +- Prefer `@linear/sdk` methods and generated types first. |
| 20 | +- Use direct GraphQL only when the SDK is missing support or ships a stale query. If you do this, keep the query narrow and document why. |
| 21 | +- Keep service methods responsible for returning normalized plain objects, not raw SDK entities. |
| 22 | +- Keep handlers thin. |
| 23 | +- Keep `input_schema`, `output_schema`, type guards, and normalized service output aligned exactly, especially around nullable fields and enums. |
| 24 | +- Register every new tool in both index files. |
| 25 | +- Update `TOOLS.md` when the public tool surface changes. |
| 26 | + |
| 27 | +## Validation |
| 28 | + |
| 29 | +- Always run `npm test` and `npm run build` before considering work complete. |
| 30 | +- Use `npm run dev -- --token YOUR_LINEAR_API_TOKEN` for local server development. |
| 31 | +- Use `npm run inspect -- -e LINEAR_API_TOKEN=YOUR_LINEAR_API_TOKEN` when validating the local MCP server with the inspector. |
| 32 | + |
| 33 | +## Project-Specific Pitfalls |
| 34 | + |
| 35 | +- This repo frequently needs careful SDK contract inspection. Check `node_modules/@linear/sdk/dist/_generated_sdk.d.ts` and `_generated_documents.d.ts` before guessing field names or mutation inputs. |
| 36 | +- Some Linear product naming does not match SDK naming. For example, saved views are `CustomView` in the API and SDK. |
| 37 | +- Review changes carefully for schema drift between service output, tool definitions, and type guards. |
| 38 | +- Keep changes minimal and domain-local. Prefer extending an existing domain file over introducing new structure unless the domain is clearly separate. |
0 commit comments