Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ Available folders live in the repository root (e.g., `nextjs`, `react`, `openai`

Add your own template at the repository root, keep it minimal and documented, and open a PR. Community examples are welcome.

When adding a template:

- Place metadata in `templates/<slug>/.config/template.meta.json` with `slug`, `name`, `description`, `category`, `tags`, and `readme.path`.
- Put optional custom preview at `templates/<slug>/.config/preview.(png|webp|jpg|jpeg)`. The catalog generator will auto-detect it; if none is present, the site will use the default tech/category image.
- Keep the README as docs (no frontmatter needed); the generator uses the README body plus the meta JSON to build `.templates/config.json`.

## Formatting

Prettier is scoped to repo-level files only. Run `pnpm format` from the root to format shared metadata; individual templates can keep their own formatting preferences.
Expand Down
Binary file added typescript/.config/preview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions typescript/.config/template.meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"name": "xmcp TypeScript Starter",
"description": "Baseline xmcp template with typed tools, prompts, and resources using HTTP transport.",
"category": "http"
}
199 changes: 14 additions & 185 deletions typescript/README.md
Original file line number Diff line number Diff line change
@@ -1,200 +1,29 @@
# xmcp Application
# xmcp TypeScript Starter

This project was created with [create-xmcp-app](https://github.com/basementstudio/xmcp).

## Getting Started

First, run the development server:
Spin this template up directly:

```bash
npm run dev
# or
yarn dev
# or
pnpm dev
```

This will start the MCP server with the selected transport method.

## Project Structure

This project uses the structured approach where tools, prompts, and resources are automatically discovered from their respective directories:

- `src/tools` - Tool definitions
- `src/prompts` - Prompt templates
- `src/resources` - Resource handlers

### Tools

Each tool is defined in its own file with the following structure:

```typescript
import { z } from "zod";
import { type InferSchema, type ToolMetadata } from "xmcp";

export const schema = {
name: z.string().describe("The name of the user to greet"),
};

export const metadata: ToolMetadata = {
name: "greet",
description: "Greet the user",
annotations: {
title: "Greet the user",
readOnlyHint: true,
destructiveHint: false,
idempotentHint: true,
},
};

export default function greet({ name }: InferSchema<typeof schema>) {
return `Hello, ${name}!`;
}
```

### Prompts

Prompts are template definitions for AI interactions:

```typescript
import { z } from "zod";
import { type InferSchema, type PromptMetadata } from "xmcp";

export const schema = {
code: z.string().describe("The code to review"),
};

export const metadata: PromptMetadata = {
name: "review-code",
title: "Review Code",
description: "Review code for best practices and potential issues",
role: "user",
};

export default function reviewCode({ code }: InferSchema<typeof schema>) {
return `Please review this code: ${code}`;
}
npx create-xmcp-app@latest --example typescript
```

### Resources

Resources provide data or content with URI-based access:

```typescript
import { z } from "zod";
import { type ResourceMetadata, type InferSchema } from "xmcp";

export const schema = {
userId: z.string().describe("The ID of the user"),
};

export const metadata: ResourceMetadata = {
name: "user-profile",
title: "User Profile",
description: "User profile information",
};

export default function handler({ userId }: InferSchema<typeof schema>) {
return `Profile data for user ${userId}`;
}
```

## Adding New Components

### Adding New Tools

To add a new tool:
This is the minimal xmcp starter: HTTP transport enabled, typed tools/prompts/resources, and automatic discovery of files in `src/tools`, `src/prompts`, and `src/resources`.

1. Create a new `.ts` file in the `src/tools` directory
2. Export a `schema` object defining the tool parameters using Zod
3. Export a `metadata` object with tool information
4. Export a default function that implements the tool logic

### Adding New Prompts

To add a new prompt:

1. Create a new `.ts` file in the `src/prompts` directory
2. Export a `schema` object defining the prompt parameters using Zod
3. Export a `metadata` object with prompt information and role
4. Export a default function that returns the prompt text

### Adding New Resources

To add a new resource:

1. Create a new `.ts` file in the `src/resources` directory
2. Use folder structure to define the URI (e.g., `(users)/[userId]/profile.ts` → `users://{userId}/profile`)
3. Export a `schema` object for dynamic parameters (optional for static resources)
4. Export a `metadata` object with resource information
5. Export a default function that returns the resource content

## Building for Production

To build your project for production:
## Develop

```bash
npm run build
# or
yarn build
# or
pnpm build
```

This will compile your TypeScript code and output it to the `dist` directory.

## Running the Server

You can run the server for the transport built with:

- HTTP: `node dist/http.js`
- STDIO: `node dist/stdio.js`

Given the selected transport method, you will have a custom start script added to the `package.json` file.

For HTTP:

```bash
npm run start-http
# or
yarn start-http
# or
pnpm start-http
```

For STDIO:

```bash
npm run start-stdio
# or
yarn start-stdio
# or
pnpm start-stdio
npm run dev
# or yarn dev / pnpm dev
```

## Monorepo Development

This template is part of the xmcp-templates monorepo.
## Structure at a Glance

### Shared Configurations
- Tools: define `schema`, `metadata`, and a default function in `src/tools/*`.
- Prompts: same pattern in `src/prompts/*` returning a template string.
- Resources: URI-shaped files in `src/resources/*`; folder names map to URI segments.

- **TypeScript**: Extends `@xmcp-templates/catalog/tsconfig/base.json`
- **ESLint**: Uses `@xmcp-templates/catalog/eslint`
- **Prettier**: Uses `@xmcp-templates/catalog/prettier`

### Commands
## Build & Run

```bash
# From monorepo root
pnpm dev # Run all apps
pnpm build # Build all apps
pnpm lint # Lint all apps
pnpm typecheck # Type-check all apps

# From this directory
pnpm dev # Run this app only
npm run build
npm run start # runs the built transport entry (http/stdio)
```

## Learn More

- [xmcp Documentation](https://xmcp.dev/docs)
Binary file added workos/.config/preview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions workos/.config/template.meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"name": "WorkOS AuthKit",
"description": "An MCP server with WorkOS AuthKit authentication",
"category": "authentication",
"tag": "workos"
}
Loading