Prepare the server locally
Run this once before adding it to Claude Code.
npm install
npm run buildRegister it in Claude Code
claude mcp add leanmcp-minimal -- node /path/to/leanmcp-minimal/main.jsReplace any placeholder paths in the command with the real path on your machine.
Make your agent remember this setup
leanmcp-minimal's config, env vars, and the gotchas you hit — recalled in every future Claude Code, Cursor, and Codex session.
npx conare@latestFree · one command · indexes the sessions already on disk. Set up in the browser instead →
What it does
- Zero-config auto-discovery of services from the ./mcp directory
- Type-safe decorators including @Tool, @Prompt, and @Resource
- Automatic input schema validation using @SchemaConstraint
- Production-ready HTTP transport with session management
- Integrated React UI components via the @UIApp decorator
Tools 2
myToolMy awesome tool that processes a messagelistProductsList products available in the systemTry it
Original README from lilylilysunshine/LeanMCP-MCP-Server
Slack MCP Server
MCP Server with Streamable HTTP Transport built with LeanMCP SDK
Quick Start
# Install dependencies
npm install
# Start development server (hot reload + UI build)
npm run dev
# Build for production
npm run build
# Run production server
npm start
Project Structure
leanmcp-minimal/
├── main.ts # Server entry point
├── mcp/ # Services directory (auto-discovered)
│ └── example/
│ └── index.ts # Example service
├── .env # Environment variables
└── package.json
Adding New Services
Create a new service directory in mcp/:
// mcp/myservice/index.ts
import { Tool, SchemaConstraint } from "@leanmcp/core";
// Define input schema
class MyToolInput {
@SchemaConstraint({
description: "Message to process",
minLength: 1
})
message!: string;
}
export class MyService {
@Tool({
description: "My awesome tool",
inputClass: MyToolInput
})
async myTool(input: MyToolInput) {
return {
content: [{
type: "text",
text: `You said: ${input.message}`
}]
};
}
}
Services are automatically discovered and registered - no need to modify main.ts!
Adding UI Components
Use @UIApp decorator to link tools to React components:
// mcp/products/index.ts
import { Tool } from "@leanmcp/core";
import { UIApp } from "@leanmcp/ui";
export class ProductsService {
@Tool({ description: "List products" })
@UIApp({ component: "./ProductsDashboard" })
async listProducts() {
return { products: [...] };
}
}
// mcp/products/ProductsDashboard.tsx
import { ToolDataGrid, RequireConnection } from "@leanmcp/ui";
export function ProductsDashboard() {
return (
<RequireConnection loading={Loading...}>
<ToolDataGrid toolName="listProducts" columns={[...]} />
</RequireConnection>
);
}
The CLI automatically builds UI components and wraps them with AppProvider.
Features
- Zero-config auto-discovery - Services automatically registered from
./mcpdirectory - Type-safe decorators -
@Tool,@Prompt,@Resourcewith full TypeScript support - Schema validation - Automatic input validation with
@SchemaConstraint - HTTP transport - Production-ready HTTP server with session management
- Hot reload - Development mode with automatic restart on file changes
- UI Components - React UI components with
@UIAppdecorator
Testing with MCP Inspector
npx @modelcontextprotocol/inspector http://localhost:3001/mcp
License
MIT