Deslop Shared Libs
garrytan/gstack
Find worthwhile shared-code extractions in recent work. An agent skill from garrytan/gstack.
Share data between Mendix apps over OData — published services, view entities as an abstraction layer, consumed clients and external entities.
$ npx skills add mendixlabs/mxcli --skill odata-data-sharing -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mendixlabs/mxcli odata-data-sharing --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/mendix/odata-data-sharing .claude/skills/odata-data-sharing && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "odata-data-sharing" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/odata-data-sharing into .claude/skills/odata-data-sharing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "odata-data-sharing", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/odata-data-sharingType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add mendixlabs/mxcli --skill odata-data-sharing -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mendixlabs/mxcli odata-data-sharing --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/mendix/odata-data-sharing .agents/skills/odata-data-sharing && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "odata-data-sharing" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/odata-data-sharing into .agents/skills/odata-data-sharing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "odata-data-sharing", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mendixlabs/mxcli --skill odata-data-sharing -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mendixlabs/mxcli odata-data-sharing --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/mendix/odata-data-sharing .cursor/skills/odata-data-sharing && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "odata-data-sharing" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/odata-data-sharing into .cursor/skills/odata-data-sharing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "odata-data-sharing", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/mendixlabs/mxcli.git --path .claude/skills/mendix/odata-data-sharing--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mendixlabs/mxcli --skill odata-data-sharing -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mendixlabs/mxcli odata-data-sharing --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/mendix/odata-data-sharing .gemini/skills/odata-data-sharing && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "odata-data-sharing" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/odata-data-sharing into .gemini/skills/odata-data-sharing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "odata-data-sharing", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install mendixlabs/mxcli odata-data-sharingInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add mendixlabs/mxcli --skill odata-data-sharing -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/mendix/odata-data-sharing .github/skills/odata-data-sharing && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "odata-data-sharing" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/odata-data-sharing into .github/skills/odata-data-sharing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "odata-data-sharing", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mendixlabs/mxcli --skill odata-data-sharing -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mendixlabs/mxcli odata-data-sharing --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/mendix/odata-data-sharing .opencode/skills/odata-data-sharing && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "odata-data-sharing" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/odata-data-sharing into .opencode/skills/odata-data-sharing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "odata-data-sharing", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
odata-data-sharingShare data between Mendix apps over OData — published services, view entities as an abstraction layer, consumed clients and external entities.
Odata Data Sharing is an agent skill from mendixlabs/mxcli. Share data between Mendix apps over OData — published services, view entities as an abstraction layer, consumed clients and external entities. Use when exposing data from one app to another, consuming another app's OData service, or refreshing a cached contract.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `reference/errors-and-auth.md` and `reference/walkthroughs.md`).
The repository describes itself as: Mendix cli tool, a headless way to work with Mendix projects. Enables Mendix projects for use with 3rd party agentic coding tools like Claude Code and Copilot. Includes a… The licence is Apache-2.0.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit a924d11. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are sql and mdl).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Odata Data Sharing loads about 3.3k tokens when it runs. Until then it costs about 70 tokens; SKILL.md has 1,044 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from mendixlabs/mxcli at commit a924d11, republished under its Apache-2.0 licence (© mendixlabs). 1,044 words, ~3,286 tokens.
.claude/skills/odata-data-sharing/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.This skill covers how to use OData services to share data between Mendix applications, with emphasis on using view entities as an abstraction layer to decouple the API contract from the internal domain model.
SKILL.md covers the architecture, the contract rules, and the conventions. The
long build-outs are next door:
reference/walkthroughs.md — four complete
builds, start to finish: a read-only API behind view entities, a
non-persistable published entity, a read-write API with microflow handlers,
publishing a microflow as an OData action, and the GraphQL variant.reference/errors-and-auth.md — which HTTP
status each capability can actually return, the authentication methods and what
Basic auth costs, and the configuration microflow for custom headers.CREATE CONSUMED ODATA SERVICE supports three formats for the MetadataUrl parameter:
| Format | Example | Stored In Model |
|---|---|---|
| HTTP(S) URL | https://api.example.com/odata/v4/$metadata | Unchanged |
| Absolute file:// URI | file:///Users/team/contracts/service.xml | Unchanged |
| Relative path | ./metadata/service.xml or metadata/service.xml | Normalized to absolute file:// |
Path Normalization:
./) are automatically converted to absolute file:// URLs in the Mendix model./metadata/service.xml → file:///absolute/path/to/project/metadata/service.xmlPath Resolution (before normalization):
-p flag or REPL): relative paths are resolved against the .mpr file's directorymxcli caches the $metadata document in the client so the model rebuilds without
the service running. That cache is a snapshot, and a consumed service that gains
entity sets makes it stale — the file on disk has five, the client still answers
three.
CREATE OR MODIFY CONSUMED ODATA SERVICE re-reads the contract every time it runs, so
refreshing is a re-run of the statement you already have:
mdl 1;
-- after refreshing ./contracts/live-now-metadata.xml from the running backend
CREATE OR MODIFY CONSUMED ODATA SERVICE F1Now.NowApi (
ODataVersion: OData4,
MetadataUrl: './contracts/live-now-metadata.xml',
Timeout: 300,
ServiceUrl: F1Now.ApiLocation
);Read the verb it prints — it tells you which happened:
| Output | Meaning |
|---|---|
Modified OData client: … + Refreshed $metadata: 5 entity types, 0 actions | The contract changed and the client now carries the new one |
Unchanged OData client: … | The contract is identical, so nothing was written |
Warning: could not refresh $metadata: … | The contract could not be read; the previously cached one is kept, so re-run once it is reachable |
Then re-import: CREATE OR MODIFY EXTERNAL ENTITIES FROM F1Now.NowApi maps the
new entity sets. Do not DROP CONSUMED ODATA SERVICE and recreate it to force a
refresh — that invalidates the client ID the existing external entities point at.
Note that ALTER CONSUMED ODATA SERVICE … SET ( MetadataUrl: … ) does not re-fetch. Use
CREATE OR MODIFY when the contract is what changed.
describe prints a client and an external entity as create or modify …, and
re-running that output changes nothing: the rewrite keeps what it cannot print
(the client's icon, UseQuerySegment, the catalog and proxy settings; each
attribute's OData mapping). An external entity's attribute types are the
service's, not the script's: declaring another (OrderId: String(20) for an
Edm.Int64 property) is CE6616 in mx check. Under mdl 1 that statement is
refused with nothing written; without the header it still writes, with warning
MDL-V1-REMOTETYPE.
Use Cases for Local Metadata:
IMPORTANT: The ServiceUrl parameter must always be a constant reference (prefixed with @). Direct URLs are not allowed.
Correct:
mdl 1;
CREATE CONSTANT ProductClient.ProductDataApiLocation
( Type: String, DefaultValue: 'http://localhost:8080/odata/productdataapi/v1/' );
CREATE CONSUMED ODATA SERVICE ProductClient.ProductDataApiClient (
ODataVersion: OData4,
MetadataUrl: 'https://api.example.com/$metadata',
ServiceUrl: ProductClient.ProductDataApiLocation -- ✅ Constant reference
);Incorrect:
mdl 1;
CREATE CONSUMED ODATA SERVICE ProductClient.ProductDataApiClient (
ODataVersion: OData4,
MetadataUrl: 'https://api.example.com/$metadata',
ServiceUrl: 'https://api.example.com/odata' -- ❌ Direct URL not allowed
);This enforces Mendix best practice of externalizing configuration values for different environments.
OData data sharing follows a producer/consumer pattern with three layers:
┌─────────────────────────────────────────────┐
│ PRODUCER APP │
│ │
│ persistent entities ──▶ view entities │
│ (Shop.Customer, (Api.CustomerVE) │
│ Shop.Address) │
│ ▼ │
│ odata service │
│ (Api.CustomerApi) │
└──────────────────────┬──────────────────────┘
│ HTTP/OData4
┌──────────────────────▼──────────────────────┐
│ CONSUMER APP │
│ │
│ odata client │
│ (Client.CustomerApiClient) │
│ ▼ │
│ external entities │
│ (Client.CustomersEE) │
│ ▼ │
│ pages & microflows │
└─────────────────────────────────────────────┘Publishing persistent entities directly exposes your internal schema. When you change a column name, add a table, or restructure associations, every consumer app breaks. View entities solve this:
CustomerAddressVE)FullAddress or ActivePrice using OQL expressionsWhen your API contract changes, create a new version rather than breaking existing consumers:
-- v1: Original API (keep running for existing consumers)
create published odata service ProductApi.ProductDataApi (
path: 'odata/productdataapi/v1/',
version: '1.0.0',
...
);
-- v2: New version with additional fields
create published odata service ProductApi.ProductDataApi_v2 (
path: 'odata/productdataapi/v2/',
version: '2.0.0',
ODataVersion: OData4,
ServiceName: 'ProductDataApi',
Summary: 'Product API v2 - includes weight and tags',
...
)
authentication basic
{
publish entity ProductApi.ProductWithPriceAndTagsVE as 'Product' (
ReadMode: ReadFromDatabase,
InsertMode: microflow ProductApi.InsertProductV2,
UpdateMode: microflow ProductApi.UpdateProductV2,
DeleteMode: microflow ProductApi.DeleteProductV2
)
expose (...);
};Use the Folder property to organize OData documents within modules.
MetadataUrl accepts three formats:
-- Format 1: HTTP(S) URL
create consumed odata service ProductClient.ProductDataApiClient folder 'Integration/ProductAPI' (
ODataVersion: OData4,
MetadataUrl: 'https://api.example.com/odata/v4/$metadata'
);
-- Format 2: Absolute file:// URI
create consumed odata service ProductClient.ProductDataApiClient folder 'Integration/ProductAPI' (
ODataVersion: OData4,
MetadataUrl: 'file:///Users/team/contracts/productdataapi.xml'
);
-- Format 3a: Relative path with ./
create consumed odata service ProductClient.ProductDataApiClient folder 'Integration/ProductAPI' (
ODataVersion: OData4,
MetadataUrl: './metadata/productdataapi.xml'
);
-- Format 3b: Relative path without ./
create consumed odata service ProductClient.ProductDataApiClient folder 'Integration/ProductAPI' (
ODataVersion: OData4,
MetadataUrl: 'metadata/productdataapi.xml'
);
create published odata service ProductApi.ProductDataApi (
path: 'odata/productdataapi/v1/',
version: '1.0.0',
ODataVersion: OData4,
folder: 'Integration/APIs'
)
authentication basic
{ ... };Folders are created automatically if they don't exist. Use / for nested folders.
Follow this naming convention for clean separation:
| Module | Purpose | Contains |
|---|---|---|
Shop | Core domain | Persistent entities, business logic |
ShopApi or ShopViews | API layer (producer) | View entities, OData service, CUD microflows |
ShopClient or ShopViewsClient | API consumer | OData client, external entities, client constants |
This keeps the API contract separate from the domain logic, and the consumer separate from the producer.
Before publishing:
key field for OData identity($ViewEntity, $HttpRequest) parametersBefore consuming:
MetadataUrl points to either:https://api.example.com/$metadatafile:///path/to/metadata.xml./metadata/service.xml (resolved against .mpr directory)ServiceUrl: Module.Constant for runtime endpointUse these commands to inspect existing OData setup in a project:
-- List all published and consumed services
list published odata services;
list consumed odata services;
-- Inspect a specific service
describe published odata service ShopViews.ShopViewsApi;
describe consumed odata service ShopViewsClient.ShopViewsApiClient;
-- See external entities and view entities
list entities in ShopViewsClient;
list external entities;
list external actions;
-- Browse available assets from cached $metadata contract
list contract entities from ShopViewsClient.ShopViewsApiClient;
list contract actions from ShopViewsClient.ShopViewsApiClient;
describe contract entity ShopViewsClient.ShopViewsApiClient.Product;
describe contract entity ShopViewsClient.ShopViewsApiClient.Product format mdl;
-- Check security setup
list access on odata service ShopViews.ShopViewsApi;
list module roles in ShopViews;© mendixlabs, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files in .claude/skills/mendix/odata-data-sharing of mendixlabs/mxcli.
Open the folder on GitHubat commit a924d11
Odata Data Sharing next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Odata Data Sharing this skillmendixlabs/mxcli | 128 | — | ~3.3k | Automated safety check: Pass | Apache-2.0 | |
| Deslop Shared Libsgarrytan/gstack | 136k | — | ~3.3k | Automated safety check: Notes | MIT | |
| Skill Sharedavila7/claude-code-templates | 32k | 10 repos | ~729 | Automated safety check: Pass | MIT | |
| Tabler Shared Lib Helperstabler/tabler | 42k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Share Buttonsthedaviddias/Front-End-Checklist | 74k | — | ~565 | Automated safety check: Pass | MIT | |
| Shared SchemasInsForge/InsForge | 13k | — | ~628 | Automated safety check: Pass | Apache-2.0 |
garrytan/gstack
Find worthwhile shared-code extractions in recent work. An agent skill from garrytan/gstack.
davila7/claude-code-templates
A skill that creates new Claude skills and automatically shares them on Slack using Rube for seamless team collaboration and skill discovery.
tabler/tabler
Moves logic out of Astro frontmatter into tested helper modules under shared/lib, with rules for naming, typing, deterministic demo data and sibling test files.
thedaviddias/Front-End-Checklist
A skill your agent uses when applies to blog posts, news articles, tutorials, and other long-form content.
InsForge/InsForge
A skill your agent uses when contributing to InsForge's shared schema package.
spinabot/brigade
Explains how a skill folder should be laid out and bundled as a tar archive for sharing, with a checklist covering name, description and eligibility keys.
mendixlabs/mxcli
Push OData query options into the SQL of a Mendix resource served by a read microflow, so $filter, $orderby, $top, $skip, $count and the key lookup reach the database instead of being silently…
mendixlabs/mxcli
Chart a Mendix app with Vega-Lite through a pluggable widget that takes the specification and the data as separate properties, so the model emits rows and never assembles a chart payload.
mendixlabs/mxcli
Author Mendix AI agent documents in MDL — Model, Knowledge Base, Consumed MCP Service and Agent, with variables, tools and multi-line prompts.
mendixlabs/mxcli
Run set-based INSERT, UPDATE and DELETE against Mendix entities through OQL statements, which the runtime supports and Studio Pro cannot author.
mendixlabs/mxcli
Stand up an HTTP endpoint you control instead of a live third-party API, and point the Mendix app at it — Prism from an OpenAPI contract, a constant swap, or a forward proxy.
mendixlabs/mxcli
Call external REST APIs from Mendix — the three approaches (inline REST CALL, consumed REST client document, generated from OpenAPI) and how to choose.
Share data between Mendix apps over OData — published services, view entities as an abstraction layer, consumed clients and external entities. Odata Data Sharing is an agent skill from mendixlabs/mxcli. Share data between Mendix apps over OData — published services, view entities as an abstraction layer, consumed clients and external entities.
Odata Data Sharing fits situations like: exposing data from one app to another; consuming another apps OData service; refreshing a cached contract.
Run `npx skills add mendixlabs/mxcli --skill odata-data-sharing -a claude-code`. Or copy the skill folder (.claude/skills/mendix/odata-data-sharing in mendixlabs/mxcli) into .claude/skills/odata-data-sharing in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mendixlabs/mxcli --skill odata-data-sharing -a codex`. Or copy the skill folder (.claude/skills/mendix/odata-data-sharing in mendixlabs/mxcli) into .agents/skills/odata-data-sharing in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mendixlabs/mxcli --skill odata-data-sharing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/odata-data-sharing, .gemini/skills/odata-data-sharing, .github/skills/odata-data-sharing and .opencode/skills/odata-data-sharing in your project.
SKILL.md names no scripts, command-line tools or credentials: Odata Data Sharing is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Odata Data Sharing is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Odata Data Sharing: Deslop Shared Libs (garrytan/gstack, 136k stars), Skill Share (davila7/claude-code-templates, 32k stars), Tabler Shared Lib Helpers (tabler/tabler, 42k stars) and Share Buttons (thedaviddias/Front-End-Checklist, 74k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mendixlabs (a GitHub organization) maintains it in mendixlabs/mxcli, which has 128 GitHub stars. The repository holds 75 skills in this directory. The repository was last updated on October 7, 2026.
Source: mendixlabs/mxcli on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.