JIMDRURY.
Jim Drury
Flat pink editorial illustration: a my-connector folder tree with src/tools files feeding a Zod-typed listIssues contract card, which sends a typed call to a stippled agent sphere.
ai

What 'MCP apps' actually mean for a TypeScript dev house

4 MIN READ

Confession

The scaffolding question

my-connector/
my-connector/
├── package.json
├── src/
│   ├── index.ts          # server entry
│   ├── tools/
│   │   ├── listIssues.ts
│   │   └── createIssue.ts
│   ├── resources/
│   │   └── projectSchema.ts
│   └── prompts/
│       └── triageBug.ts
├── .env.example
└── README.md

Why frontend teams should care

Typed tools beat clever prompts

listIssues
import { z } from "zod";

export const listIssuesInput = z.object({
  projectKey: z.string().min(2),
  status: z.enum(["open", "in_progress", "done"]).optional(),
  limit: z.number().int().min(1).max(50).default(20),
});

export async function listIssues(input: z.infer<typeof listIssuesInput>) {
  const query = listIssuesInput.parse(input);
  return fetchIssues(query);
}

App-store energy, without the nonsense

Same dev house, two interfaces

Thoughts

Similar Articles