UseCase API Reference
Complete API reference for UseCaseService, UseCaseAppConfig, create_use_case_mcp_server, and create_use_case_voyager.
UseCaseService
Business service base class. Subclasses declare async classmethod methods; the metaclass auto-discovers public methods.
from nexusx.use_case import UseCaseService
from nexusx import query, mutation
class SprintService(UseCaseService):
"""Sprint management service."""
@query
async def list_sprints(cls) -> list[SprintSummary]:
...
@query
async def get_sprint(cls, sprint_id: int) -> SprintSummary | None:
...
@mutation
async def create_sprint(cls, name: str) -> SprintSummary:
...
Rules
- Methods must be decorated with
@queryor@mutation - Methods must be
asyncwithclsas first parameter - Methods starting with
_are not auto-discovered - Docstrings become MCP tool descriptions
Class Methods
| Method | Description |
|---|---|
get_tag_name() |
Returns the class name as a tag (e.g., "SprintService") |
UseCaseAppConfig
Application configuration class that organizes a group of UseCaseServices into one application.
from nexusx.use_case import UseCaseAppConfig
config = UseCaseAppConfig(
name="project",
services=[SprintService, TaskService],
description="Project management API",
)
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
str |
Yes | Application name |
services |
list[type[UseCaseService]] |
Yes | List of UseCaseService subclasses |
description |
str \| None |
No | Application description |
context_extractor |
Callable \| None |
No | MCP context extraction function |
create_use_case_mcp_server
Create an MCP server for UseCase services, supporting multi-app and four-layer progressive discovery.
from nexusx.use_case import create_use_case_mcp_server, UseCaseAppConfig
mcp = create_use_case_mcp_server(
apps=[
UseCaseAppConfig(
name="project",
services=[SprintService, TaskService],
description="Project management",
),
],
name="Project UseCase API",
)
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
apps |
list[UseCaseAppConfig] |
Yes | Application configuration list |
name |
str |
No | Service name |
Generated MCP Tools
| Tool | Description |
|---|---|
list_apps() |
List all available apps |
list_services(app_name) |
List services and method counts in an app |
describe_service(app_name, service_name) |
Return method signatures (SDL format) and type definitions |
call_use_case(app_name, service_name, method_name, params) |
Execute method |
create_flat_mcp_server
Create a flat MCP server that exposes each UseCase method as a separate tool — no progressive disclosure.
from nexusx.use_case import create_flat_mcp_server, UseCaseAppConfig
mcp = create_flat_mcp_server(
apps=[
UseCaseAppConfig(
name="project",
services=[SprintService, TaskService],
),
],
name="Project API",
)
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
apps |
list[UseCaseAppConfig] |
Yes | Application configuration list |
name |
str |
No | Server name |
Generated MCP Tools
Each @query/@mutation method becomes an independent tool named {ServiceName}_{method_name}. Method parameters are mapped directly from the Python signature (excluding cls and FromContext params). An optional selection parameter is added for field projection.
| Example Tool | Source |
|---|---|
SprintService_list_sprints() |
SprintService.list_sprints |
TaskService_get_task(task_id) |
TaskService.get_task |
TaskService_delete_task(task_id) |
TaskService.delete_task (mutation) |
Generated MCP Resources
One resource per app: nexusx://{app_name} — contains all services' method signatures, descriptions, and SDL type definitions.
Compared to create_use_case_mcp_server
| Feature | Progressive (4-layer) | Flat |
|---|---|---|
| Tool count | 4 fixed tools | 1 tool per method |
| Discovery | list_apps → list_services → describe_service → call | Direct call |
| Type definitions | describe_service response | MCP resource |
| Best for | Large APIs, many services | Small APIs, direct access |
create_use_case_voyager
Create a Voyager visualization ASGI sub-application.
from nexusx.voyager import create_use_case_voyager
voyager = create_use_case_voyager(
apps=[
UseCaseAppConfig(
name="project",
services=[SprintService, TaskService],
),
],
)
REST Endpoints
| Endpoint | Description |
|---|---|
/dot |
DOT format service dependency graph |
/dot-search |
Searchable DOT graph |
/er-diagram |
Mermaid ER diagram |
/source |
Source code information |
FromContext
Marker annotation for injecting parameters from MCP context.
from typing import Annotated
from nexusx.use_case import FromContext
class SprintService(UseCaseService):
@query
async def list_sprints(cls, tenant_id: Annotated[int, FromContext()]) -> list[SprintSummary]:
...
build_dto_select
Helper function that builds a SELECT statement for querying DTO fields.
from nexusx import build_dto_select
stmt = build_dto_select(SprintSummary)
stmt = build_dto_select(SprintSummary, where=Sprint.id == sprint_id)
Note: When ORM relationships use
lazy="noload"(the recommended pattern with ErManager + Resolver), this function provides minimal benefit since the only pruning is on scalar columns. You can achieve the same result withselect(Entity)andDTO.model_validate(entity). Use this function when the DTO selects a small subset of scalar columns from a wide table.