Skip to content
Development
Skill

/outsystems-custom-code

[Beta] Reference + workflow for building, testing, and deploying C# class-library "External Logic" libraries for OutSystems Developer Cloud (ODC). Covers SDK attributes ([OSInterface] / [OSAction] / [OSParameter] / [OSStructure] / [OSIgnore]), supported data types, optional

From plugin
outsystems-mcp
427 skills5 agents1 command1 MCP

Claude Code

$ npx -y skills add OutSystems/outsystems-mcp --skill outsystems-custom-code --agent claude-code

SKILL.md

outsystems-custom-code.SKILL.md
name: outsystems-custom-code
description: '[Beta] Reference + workflow for building, testing, and deploying C# class-library "External Logic" libraries for OutSystems Developer Cloud (ODC). Covers SDK attributes ([OSInterface] / [OSAction] / [OSParameter] / [OSStructure] / [OSIgnore]), supported data types, optional parameters, logging via ILogger, project structure, runtime constraints (95s execution / 1 GB memory / 5.5 MB payload), unit + container integration tests, and deployment via the OutSystems MCP. Use when the user asks to "build a C# library for OutSystems", "create ODC external logic", "write custom code for ODC", "deploy an external library", "publish C# code to OutSystems", or names ODC External Logic / external library / OSInterface / OSAction directly. Not for OutSystems 11 (O11) or Service Studio.'
license: MIT
compatibility: Ships for Claude Code, Cursor and Kiro. Needs a shell with the .NET 10 SDK, and Docker for the integration tests, so Claude Desktop's Chat tab, which has no shell, can't run it. Deployment requires the `outsystems` MCP server connected and authenticated, and builds on the main `outsystems` skill for the upload, polling and publish rules. Python is NOT required by this skill.
metadata:
  version: "1.3.0"
  author: outsystems-r-and-d
  maturity: beta

**Beta Feature.** This skill is a Beta Feature: a non-final OutSystems capability provided to collect customer feedback. It can change significantly, including through breaking changes, or be discontinued. The first time you use this skill in a conversation, tell the user it's a Beta Feature and share <https://www.outsystems.com/legal/beta-features-agreement>.

OutSystems ODC External Library Skill

This file describes how to create, build, test, and deploy C# libraries for the OutSystems Developer Cloud (ODC) External Logic feature.

**Load the main `outsystems` skill before uploading: upload, polling and publish rules come from it** (read the live tool catalog, poll long-running operations to terminal, confirm before every tenant write). The main skill's upload, polling and publish rules apply, and this skill's two confirmations (see [Upload and publish](#upload-and-publish)) always apply on top of them. For building and packaging the library, follow this skill.

---

Project Overview

OutSystems ODC External Logic allows extending ODC apps with custom C# code. The C# class library project is built locally, published as a ZIP file to the ODC platform. OutSystems generates a wrapper around the code that exposes the decorated interfaces as server actions consumable by ODC applications.

---

Runtime Constraints

These are hard limits enforced by the ODC platform. Never design functions that approach or exceed them:

| Constraint | Limit | |---|---| | Max execution duration | **95 seconds** per function call | | Max memory | **1,024 MB** | | Max ephemeral storage | **512 MB** | | Max payload (inputs + outputs combined) | **5.5 MB** |

For large data: stream in chunks, use references/URLs instead of raw bytes.

---

Project Setup

Target Framework

  • Use **.NET 10**. Do **not** use .NET 6 or .NET 8: .NET 8 support is ending, and after that ODC

refuses to upload, update, or install a library that targets it.

  • Project type: **Class Library** (`<OutputType>Library</OutputType>`).
  • If the project targets an older .NET, update it to .NET 10.

Before you build

If `dotnet --list-sdks` shows no 10.x SDK, or `docker info` fails, tell the user and stop at the step that needs it: the build and unit tests need the SDK, the container tests need Docker.

Required NuGet Package

<PackageReference Include="OutSystems.ExternalLibraries.SDK" Version="1.7.0" />

Always use the latest stable version. Check: https://www.nuget.org/packages/OutSystems.ExternalLibraries.SDK

Minimal `.csproj`

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="OutSystems.ExternalLibraries.SDK" Version="1.7.0" />
  </ItemGroup>
</Project>

Note: the SDK package itself may only ship `net8.0`/`netstandard2.0` assets (no `net10.0`-specific build) — that's fine, NuGet resolves the closest compatible asset and it runs correctly under a `net10.0`-targeted project.

---

SDK Attributes – Core Concepts

`[OSInterface]` – Exposes the interface to ODC

Applied to a **public interface**. Every method on this interface becomes a server action in ODC.

using OutSystems.ExternalLibraries.SDK;

namespace MyCompany.MyLibrary
{
    [OSInterface(
        Name = "MyLibrary",
        Description = "Short description of what this library does."
    )]
    public interface IMyLibrary
    {
        [OSAction(Description = "Greets a person by name")]
        string Greet(
            [OSParameter(Description = "Name to greet")] string name
        );
    }
}
  • `Name`: The library name in ODC. It also decides whether an upload creates a new library or a new revision, so always set it. Required for ODC Forge submission.
  • `Description`: Shown in ODC Portal. Required for Forge submission.
  • `IconResourceName`: the embedded resource name of the library's PNG icon. Required for Forge submission. Add the icon to the project as an `EmbeddedResource` item and set `<RootNamespace>MyCompany.MyLibrary</RootNamespace>` in the `.csproj`; the resource name is then the root namespace, the folder and the file name, joined with dots (for an icon in `Resources`, `MyCompany.MyLibrary.Resources.` followed by the file name). Keep these out of the minimal `.csproj`: the build fails when the icon file doesn't exist.

`[OSAction]` – Customise action metadata (optional)

Applied to individual interface methods to override defaults.

[OSAction(
    Description = "Validates an IBAN and returns structured result.",
    Retur
Read more
@outsystems
Ships withoutsystems-mcp

Distribution repo for the OutSystems MCP. To install, paste the matching prompt below into your AI assistant. Every harness section below sets up two artifacts and says how to keep the skill current.

427 skills5 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
42
Star history of OutSystems/outsystems-mcp on GitHub, a chart by star-history.com

Other skills on outsystems-mcp.

outsystems

outsystems

OutSystems Developer Cloud (ODC) over MCP. Edit apps, publish, deploy, search tenant elements, manage external libraries. Load…

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills11d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc13d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react2d252k
@facebook@facebookInstall Skill

Questions about outsystems-custom-code.

Which coding agents can use outsystems-custom-code?
outsystems-custom-code installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.