mcpField
E
encore-service

encore-service

github.com/encoredevDevelopment30833 installsUpdated 2d ago
Repository

About encore-service

A skill for structuring services in Encore applications, from a single service to multi-service and system-based layouts. It also explains how to call other services through Encore clients.

Key features

  1. 01Define services with encore.service.ts
  2. 02Organize single- and multi-service apps
  3. 03Group related services into systems
  4. 04Call services through ~encore/clients
  5. 05Allow each service its own database

Use cases

  1. 01Create a new Encore service
  2. 02Choose a layout for a growing application
  3. 03Group commerce services by system
  4. 04Make typed calls between services

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/encoredev/skills --skill encore-service

After installing, type/encore-servicein Claude Code to confirm it loaded.

Details

From the project README

Encore Service Structure

Instructions

Creating a Service

Every Encore service needs an encore.service.ts file:

// encore.service.ts
import { Service } from "encore.dev/service";

export default new Service("my-service");
Minimal Service Structure
my-service/
├── encore.service.ts    # Service definition (required)
├── api.ts               # API endpoints
└── db.ts                # Database (if needed)

Application Patterns

Single Service

A service can be defined at the application root:

my-app/
├── package.json
├── encore.app
├── encore.service.ts
├── api.ts
├── db.ts
└── migrations/
    └── 001_initial.up.sql
Multi-Service

Each service lives in its own directory:

my-app/
├── encore.app
├── package.json
├── user/
│   ├── encore.service.ts
│   ├── api.ts
│   └── db.ts
├── order/
│   ├── encore.service.ts
│   ├── api.ts
│   └── db.ts
└── notification/
    ├── encore.service.ts
    └── api.ts
Large Application (System-based)

Group related services into systems:

my-app/
├── encore.app
├── commerce/
│   ├── order/
│   │   └── encore.service.ts
│   ├── cart/
│   │   └── encore.service.ts
│   └── payment/
│       └── encore.service.ts
├── identity/
│   ├── user/
│   │   └── encore.service.ts
│   └── auth/
│       └── encore.service.ts
└── comms/
    ├── email/
    │   └── encore.service.ts
    └── push/
        └── encore.service.ts

Service-to-Service Calls

Import other services from ~encore/clients:

import { user } from "~encore/clients";

export const getOrderWithUser = api(
  { method: "GET", path: "/orders/:id", expose: true },
  async ({ id }): Promise<OrderWithUser> => {
    const order = await getOrder(id);
    const orderUser = await user.get({ id: order.userId });
    return { ...order, user: orderUser };
  }
);

Guidelines

  • Services cannot be nested within other services
  • Use ~encore/clients for cross-service calls (never direct imports)
  • Each service can have its own database
  • Service names should be lowercase, descriptive
  • Don't create services just for code organization - use folders instead
  • Use encore-architecture when the service boundaries have not been decided

Comments

Markdown supported